我正在使用AVAudioEngine进行音频流。但当我对着麦克风说任何一个词时,它会重复多次,就像回声效应一样。我想当我说话的时候,听起来只有一次,而不是多次。我想取消回声或额外的噪音。
我怎样才能做到这一点?

var peerAudioEngine: AVAudioEngine = AVAudioEngine()
var peerAudioPlayer: AVAudioPlayerNode = AVAudioPlayerNode()
var peerInput: AVAudioInputNode?
var peerInputFormat: AVAudioFormat?

func setUpAVPlayer() {
    self.peerInput = self.peerAudioEngine.inputNode
    self.peerAudioEngine.attach(self.peerAudioPlayer)
    self.peerInputFormat = AVAudioFormat.init(commonFormat: .pcmFormatFloat32, sampleRate: 44100, channels: 1, interleaved: false)
    self.peerAudioEngine.connect(self.peerAudioPlayer, to: self.peerAudioEngine.mainMixerNode, format: self.peerInputFormat)

    print("\(#file) > \(#function) > peerInputFormat = \(self.peerInputFormat.debugDescription)")
}

最佳答案

我认为你应该可以用这个代码来解决你的问题

var reverbNode = AVAudioUnitReverb()
reverbNode.loadFactoryPreset( AVAudioUnitReverbPreset.Cathedral)
reverbNode.wetDryMix = 60
// Attach the audio effect node corresponding to the user selected effect
peerAudioEngine.attachNode(reverbNode)

此外,您可能还需要考虑其他方法,即您可以在讲话后将麦克风静音,并且当您的peerAudioEngine未接收到任何输入音频时,您必须手动检测您的麦克风是否静音。
这将完全消除你讲话中的回音。
有关更多信息,请访问
http://asciiwwdc.com/2014/sessions/502

关于ios - 如何使用AVAudioEngine取消或消除回声/重复的声音?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45538806/

10-11 19:48