【问题标题】:Swift3 Microphone Audio Input - play without recordSwift3 麦克风音频输入 - 无录音播放
【发布时间】:2017-04-27 15:37:29
【问题描述】:

我正在尝试使用 swift3 播放麦克风音频输入而不进行录制。我可以使用以下代码录制音频:

let session = AVAudioSession.sharedInstance()
    try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, with:AVAudioSessionCategoryOptions.defaultToSpeaker)

    try! audioRecorder = AVAudioRecorder(url: filePath!, settings: [:])
    audioRecorder.delegate = self
    audioRecorder.isMeteringEnabled = true
    audioRecorder.prepareToRecord()
    audioRecorder.record()

然后在拿起录制的文件后最终播放:

audioPlayerNode.play()

但我想跳过录制步骤,直接从麦克风输入播放到音频输出(在本例中为播放器节点)。然后它就像一个真正的麦克风一样工作。我可以直接这样做还是需要临时文件?我梳理了 AVFoundation 文档,但似乎无法掌握直接路线。任何想法或建议表示赞赏。谢谢!

【问题讨论】:

    标签: ios swift3 avfoundation


    【解决方案1】:

    您可以使用AVAudioEngine 执行此操作,但您会听到反馈:

    import AVFoundation
    
    class ViewController: UIViewController {
        let engine = AVAudioEngine()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let input = engine.inputNode!
            let player = AVAudioPlayerNode()
            engine.attach(player)
    
            let bus = 0
            let inputFormat = input.inputFormat(forBus: bus)
            engine.connect(player, to: engine.mainMixerNode, format: inputFormat)
    
            input.installTap(onBus: bus, bufferSize: 512, format: inputFormat) { (buffer, time) -> Void in
                player.scheduleBuffer(buffer)
            }
    
            try! engine.start()
            player.play()
        }
    }
    

    【讨论】:

    • 感谢您的支持,运行良好,但服务很难在不导致崩溃的情况下停止。引擎停止后,我是否需要对节点执行任何操作才能重新启动?谢谢
    • 你是如何停止和启动的,你会遇到什么样的崩溃?
    • 其实我明白了。我的停止功能出错。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 2023-01-10
    • 2018-06-18
    • 2014-10-21
    • 2018-02-14
    • 1970-01-01
    • 2022-01-05
    • 2019-09-25
    相关资源
    最近更新 更多