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

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

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

【问题讨论】:

    标签: ios iphone swift


    【解决方案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'
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2020-08-13
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多