使用 AVAudioEngine 录制音频文件

Posted

技术标签:

【中文标题】使用 AVAudioEngine 录制音频文件【英文标题】:Recording audio file using AVAudioEngine 【发布时间】:2014-10-15 17:41:10 【问题描述】:

我想。所以它会从麦克风到一个输出文件。稍后我会添加一些效果。但目前,我只想让它发挥作用。

谁能提供步骤或示例代码,以便我可以开始?

【问题讨论】:

【参考方案1】:

这是我的简单解决方案。输出文件将在文档目录中。请注意,为简洁起见,我删除了错误处理。

var engine = AVAudioEngine()
var file: AVAudioFile?
var player = AVAudioPlayerNode() // if you need play record later

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    file = AVAudioFile(forWriting: URLFor("my_file.caf")!, settings: engine.inputNode.inputFormatForBus(0).settings, error: nil)
    engine.attachNode(player)
    engine.connect(player, to: engine.mainMixerNode, format: engine.mainMixerNode.outputFormatForBus(0)) //configure graph
    engine.startAndReturnError(nil)


func record() 
    engine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: engine.mainMixerNode.outputFormat(forBus: 0))  (buffer, time) -> Void in
        try! self.file?.write(from: buffer)
        return
    


@IBAction func stop(sender: AnyObject) 
    engine.inputNode.removeTap(onBus: 0)



func URLFor(filename: String) -> NSURL? 
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    return documentsDirectory.appendingPathComponent(filename)

【讨论】:

当我调用写入缓冲区函数并出现以下错误时它崩溃:'com.apple.coreaudio.avfaudio',原因:'error -50'

以上是关于使用 AVAudioEngine 录制音频文件的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 AVAudioEngine 从文件中读取,使用音频单元处理并写入文件,比实时更快吗?

使用 AVAudioEngine 重复播放音频文件

AVCaptureSession + AVAudioEngine + AVPlayer=来自接收器和扬声器而不是扬声器的低音频

在 WatchOS 上使用 AVAudioEngine 录制时阻止播放

我无法使用 AVAudioEngine 录制

AvaudioEngine - 以特定采样率录制语音 AvaudioEngine for Analysis