我无法让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过滤器是:
...在一定范围内传递频率的设备 拒绝(衰减)该范围之外的频率。
我做错了什么?我想过滤除了给定频率范围以外的所有内容。
答案 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),让我们知道它是否有效。