Swift AVAudioEngine - 如何使本地麦克风静音
Posted
技术标签:
【中文标题】Swift AVAudioEngine - 如何使本地麦克风静音【英文标题】:Swift AVAudioEngine - How to mute local mic 【发布时间】:2021-12-02 16:56:52 【问题描述】:我正在使用AVAudioEngine
获取本地麦克风输入,然后进行广播。我想在点击静音按钮时停止获取本地麦克风输入。
我尝试了三件事:
audioEngine.inputNode.isVoiceProcessingInputMuted = true
- 没用。
audioEngine.stop()
- 实际上它可以工作,但会导致其他问题:我正在使用 HaishinKit 流式传输屏幕录制 + 麦克风输入 + 其他设备音频。停止 audioEngine 会导致查看器端出现小延迟。
使用HaishinKit.RTMPStream
静音:rtmpStream.audiosettings[.muted] = true
- 它可以工作,但会静音整个音频。我只想将本地麦克风静音,而不是其他设备的音频。
//
private func startTappingMicrophone()
let inputNode = audioEngine.inputNode
let inputFormat = inputNode.outputFormat(forBus: 0)
audioEngine.inputNode.installTap(onBus: 0, bufferSize: AVAudioFrameCount(bufferSize), format: inputFormat) [weak self] buffer, _ in
guard let self = self else return
self.conversionQueue.async
if let cmSampleBuffer = self.configureSampleBuffer(pcmBuffer: buffer)
self.delegate?.recievedRecordedFrame(cmSampleBuffer)
audioEngine.prepare()
try? audioEngine.start()
【问题讨论】:
【参考方案1】:根据您的设置,简单地不向委托发送缓冲区可能会有所帮助。
但是无论哪种方式都可以将缓冲区归零:
if let floatChannelData = buffer.floatChannelData
for c in 0..<Int(buffer.format.channelCount)
memset(floatChannelData[c], 0, MemoryLayout<Float>.size * Int(buffer.frameLength))
【讨论】:
它会工作,但我只想静音麦克风而不是其他设备音频。 @LevanKaranadze 在我的情况下audioEngine.inputNode
只产生麦克风音频,你的情况有什么不同吗?但是还有什么其他音频?
在 configureSampleBuffer 中,我将麦克风输入与其他设备音频相结合。我猜我必须修改这个函数。我是按照这个git做的:gist.github.com/aibo-cora/c57d1a4125e145e586ecb61ebecff47c以上是关于Swift AVAudioEngine - 如何使本地麦克风静音的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioEngine MIDI 文件播放(当前进度+MIDI 结束回调)Swift
使用 Swift 使用 AVAudioEngine 实时进行音高转换
在 Swift 中使用 AVAudioEngine 点击麦克风输入
swift AVAudioEngine 和 AVAudioSinkNode sampleRate 转换