使用AVAudioEngine录制音频文件

12

我想使用 AVAudioEngine 录制音频文件,从麦克风到输出文件。之后我会添加一些效果,但现在我只想让它工作。

有人可以提供给我步骤或示例代码吗,以便我可以开始吗?

1个回答

8

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

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)
}

6
当我调用写入缓冲区函数时,它会崩溃,并显示错误信息:'com.apple.coreaudio.avfaudio',原因是:'error -50'。 - user3703910

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接