ios - 在WatchOS上使用AVAudioEngine录音时禁止播放

标签 ios swift audio watchos avaudioengine

我使用AVAudioEngine从iOS的麦克风中收集PCM数据,但效果很好,但是当我尝试将项目移至WatchOS时,在录音时会得到反馈。录制时如何停止从扬声器播放?

var audioEngine = AVAudioEngine()

try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)

let input = audioEngine.inputNode
let format = input.inputFormat(forBus: 0)

audioEngine.connect(input, to: audioEngine.mainMixerNode, format: format)

try! audioEngine.start()
let mixer = audioEngine.mainMixerNode

let format = mixer.outputFormat(forBus: 0)
let sampleRate = format.sampleRate
let fft_size = 2048

mixer.installTap(onBus: 0, bufferSize: UInt32(fft_size), format: format, 
            block: {(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
    // Processing
}

最佳答案

对于遇到此问题的其他任何人,我通过删除从inputNode到mainMixerNode的连接来修复它,并将水龙头直接安装在inputNode上。在猜测之前,我的做法是创建一个反馈循环,在该循环中回放所录制的内容。不知道为什么只在WatchOS而不是在iPhone上发生这种情况……也许是从耳塞而不是麦克风旁边的扬声器回放。固定代码:

var audioEngine = AVAudioEngine()

try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)

try! audioEngine.start()
let input = audioEngine.inputNode

let format = mixer.outputFormat(forBus: 0)
let sampleRate = format.sampleRate
let fft_size = 2048

input.installTap(onBus: 0, bufferSize: UInt32(fft_size), format: format, 
            block: {(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
    // Processing
}

关于ios - 在WatchOS上使用AVAudioEngine录音时禁止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60294128/

相关文章:

ios - 如何像iOS Music App TableView一样将UITableView分为三部分?

c# - 如何获取8位wav文件的数据

android - 在android平台上使用ffmpeg混合两个音频文件

Javascript 点击播放音乐 url

iOS推送通知: how to store push notification payload when application is kill or terminate in swift?

database - “UITableView”无法从其数据源获取单元格

ios - 在 iOS 中设置模糊的图像背景

objective-c - 在 iOS 5 ARC 中移除一个 NSNotificationCenter 观察者

ios - Xcode "Size to fit contents"禁用

swift - 如何在@propertyWrapper 中获得 parent 的 self ?