AVAudioUnitEQ / .BandPass过滤器不起作用

时间:2014-09-05 14:47:47

标签: cocoa-touch swift avfoundation ios8

我无法让AVAudioUnitEQ工作。

这里有一段代码可以过滤掉除659.255Hz +/- 0.05个八度音阶之外的所有内容:

// Create Audio Engine

var audioEngine = AVAudioEngine()

// Create Equalizer Node

var equalizerNode = AVAudioUnitEQ(numberOfBands: 1) 
var epualizerParameters: AVAudioUnitEQFilterParameters = equalizerNode.bands.first as AVAudioUnitEQFilterParameters
epualizerParameters.filterType = .BandPass
epualizerParameters.frequency = 659.255
epualizerParameters.bandwidth = 0.05
epualizerParameters.bypass = false
audioEngine.attachNode(equalizerNode)

// Configure Audio Engine

var format = audioEngine.inputNode.inputFormatForBus(0)
audioEngine.connect(audioEngine.inputNode, to: equalizerNode, format: format)
audioEngine.connect(equalizerNode, to: audioEngine.outputNode, format: format)


// Start Audio Engine

var error:NSError?
audioEngine.startAndReturnError(&error)

然而,当我跑步时,戴上我的耳机并对着麦克风唱歌,我可以听到自己响亮而清晰。

现在,根据维基百科,Band Pass过滤器是:

  

...在一定范围内传递频率的设备   拒绝(衰减)该范围之外的频率。

我做错了什么?我想过滤除了给定频率范围以外的所有内容。

2 个答案:

答案 0 :(得分:2)

这是你的EQ params。

我创建了一个带有滑块和开关的github project。你可以听到差异。 试试吧。

答案 1 :(得分:1)

这适用于我使用playerNode的项目。

var format =  engine.mainMixerNode.outputFormatForBus(0)
engine.connect(playerNode, to: EQNode, format: format )
engine.connect(EQNode, to: engine.mainMixerNode, format: format)

我看到你正在使用引擎的inputNode。尝试换掉这几行(挂钩到混音器而不是outputNode),让我们知道它是否有效。