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

时间:2019-06-16 18:43:11

标签: swift macos avcapturesession

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

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

AVCaptureSession是否可能? Googling展示了捕获视频和麦克风的示例,而不捕获内部音频。

这是捕获视频和麦克风所必须的工作代码。要禁用麦克风并获得扬声器内部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)

1 个答案:

答案 0 :(得分:0)

我还没有找到一种简便的方法,但是事实证明,如果我的计算机上安装了另一软件:Soundflower,可以使原始代码记录音频。

  

Soundflower是MacOS的开源内核扩展,旨在创建虚拟音频输出设备,该设备也可以用作输入。

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

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