Фильтр AVAudioUnitEQ / .BandPass не работает

Я не могу заставить AVAudioUnitEQ работать.

Вот фрагмент кода, который должен отфильтровать все, кроме 659,255 Гц +/-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)

Однако, когда я запускаю его, надеваю наушники и пою в микрофон, я слышу себя громко и четко.

Теперь, согласно Википедии, полосовой фильтр:

... устройство, которое пропускает частоты в пределах определенного диапазона и подавляет (ослабляет) частоты вне этого диапазона.

Что я делаю не так? Я хочу отфильтровать все, кроме заданного диапазона частот.


person Rudolf Adamkovič    schedule 05.09.2014    source источник


Ответы (2)


Это были ваши параметры эквалайзера.

Я создал проект github с ползунками и переключателями. Вы можете услышать разницу. Попытайся.

person Gene De Lisa    schedule 07.09.2014
comment
Эй, спасибо! Я только что попробовал. 1) В симуляторе iOS все, что я получаю, это тишина; 2) На айфоне с наушниками при включении эквалайзера получаю AUSetFormat: error -10868 на inputFormatForBus(0) строке; 3) На айфоне без наушников я себя слышу без фильтрации (с bypass стоит NO). Любые идеи? - person Rudolf Adamkovič; 08.09.2014
comment
Это похоже на ошибку в SDK. Я безуспешно пытался найти AUSetFormat: error -10868. Audio Engine дает сбой каждый раз, когда я подключаю наушники (к моему iPhone 4S). Я планировал заняться этим позже, когда фильтрация заработает, но нет. Вздох. - person Rudolf Adamkovič; 08.09.2014
comment
Я попробовал свой проект только в симуляторе, и я слышал, что он работает нормально. Я не пробовал это на своем iPhone, потому что у меня нет iOS 8. Когда вы говорите, что я только что попробовал, вы имеете в виду мой проект? - person Gene De Lisa; 08.09.2014
comment
Да, я имею в виду проект. Это странно. - person Rudolf Adamkovič; 08.09.2014
comment
Я использую бета-версию 7 XCode6 на OSX 10.9.4. А ты? Попробуйте сделать git pull, почистите проект, наденьте наушники, запустите его и скажите работайте, черт возьми, и посмотрите, что произойдет. - person Gene De Lisa; 08.09.2014
comment
Несмотря на то, что у меня это не работает, я присуждаю этому ответу +50 за все усилия. Благодарю вас! - person Rudolf Adamkovič; 15.09.2014
comment
Спасибо, я ценю это. - person Gene De Lisa; 16.09.2014

Это работает в моем проекте, в котором используется playerNode.

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

Я вижу, вы используете inputNode движка. Попробуйте заменить эти несколько строк (подключиться к микшеру вместо outputNode) и сообщите нам, работает ли это.

person Gene De Lisa    schedule 05.09.2014
comment
Попробуйте увеличить значение пропускной способности и посмотрите, слышите ли вы что-нибудь - person Gene De Lisa; 05.09.2014
comment
Пробовал. Все такой же. - person Rudolf Adamkovič; 05.09.2014