如何使用 AVCaptureSession 录制我 Mac 的内部声音,而不是麦克风!

How to record my Mac's internal sound, not the microphone!, using AVCaptureSession?

我正在尝试实现一个具有屏幕录制功能的简单 macOS 应用程序。

我不想录制麦克风输入,而是录制从我的 Mac 扬声器发出的声音。示例:通过这种方式,我希望能够将 YouTube 视频录制到文件中。

这可以用 AVCaptureSession 实现吗?谷歌搜索显示捕获视频和微团的示例,但没有显示内部音频。

这是我必须捕获视频和麦克风的工作代码。我必须修改什么才能禁用麦克风并让内部 PC 的声音传到扬声器?

session = AVCaptureSession()
session.sessionPreset = AVCaptureSession.Preset.high

movieFileOutput = AVCaptureMovieFileOutput()

let displayId: CGDirectDisplayID = CGDirectDisplayID(CGMainDisplayID())

let audioDevice = AVCaptureDevice.default(for: .audio)!

let audioInput = try! AVCaptureDeviceInput(device: audioDevice)

let videoInput: AVCaptureScreenInput = AVCaptureScreenInput(displayID: displayId)!

session.addInput(videoInput)
session.addInput(audioInput)
session.addOutput(movieFileOutput)

session.startRunning()
movieFileOutput.startRecording(to: self.destinationUrl, recordingDelegate: self)

我还没有找到一个简单的方法来做到这一点,但事实证明,如果我的机器上安装了另一个软件,可以让原始代码录制音频:Soundflower.

Soundflower is an open source kernel extension for MacOS, designed to create a virtual audio output device that can also act as an input.

鉴于已安装 Soundflower,可以使用 Applications / Utilities / Audio MIDI Setup 应用配置 macOS,将音频发送到虚拟和真实音频设备。这样上面的代码从 Soundflower 捕获音频,但您仍然可以在普通音频输出设备上听到它。

此处描述了 Applications / Utilities / Audio MIDI Setup 应用程序的设置:How can I send my computer's audio to multiple outputs?