У меня возникли проблемы с настройкой kAudioUnitSubType_NBandEQ в Swift. Вот мой код для инициализации EQ:Core Audio Swift Equalizer настраивает все диапазоны одновременно?
var cd:AudioComponentDescription = AudioComponentDescription(componentType: OSType(kAudioUnitType_Effect),componentSubType: OSType(kAudioUnitSubType_NBandEQ),componentManufacturer: OSType(kAudioUnitManufacturer_Apple),componentFlags: 0,componentFlagsMask: 0)
// Add the node to the graph
status = AUGraphAddNode(graph, &cd, &MyAppNode)
println(status)
// Once the graph has been opened get an instance of the equalizer
status = AUGraphNodeInfo(graph, self.MyAppNode, nil, &MyAppUnit)
println(status)
var eqFrequencies: [UInt32] = [ 32, 250, 500, 1000, 2000, 16000 ]
status = AudioUnitSetProperty(
self.MyAppUnit,
AudioUnitPropertyID(kAUNBandEQProperty_NumberOfBands),
AudioUnitScope(kAudioUnitScope_Global),
0,
eqFrequencies,
UInt32(eqFrequencies.count*sizeof(UInt32))
)
println(status)
status = AudioUnitInitialize(self.MyAppUnit)
println(status)
var ioUnitOutputElement:AudioUnitElement = 0
var samplerOutputElement:AudioUnitElement = 0
AUGraphConnectNodeInput(graph, sourceNode, sourceOutputBusNumber, self.MyAppNode, 0)
AUGraphConnectNodeInput(graph, self.MyAppNode, 0, destinationNode, destinationInputBusNumber)
, а затем применить изменения частоты GAINS мой код выглядит следующим образом:
if (MyAppUnit == nil) {return}
else{
var bandValue0 :Float32 = tenBands.objectAtIndex(0) as! Float32
var bandValue1 :Float32 = tenBands.objectAtIndex(1) as! Float32
var bandValue2 :Float32 = tenBands.objectAtIndex(2) as! Float32
var bandValue3 :Float32 = tenBands.objectAtIndex(3) as! Float32
var bandValue4 :Float32 = tenBands.objectAtIndex(4) as! Float32
var bandValue5 :Float32 = tenBands.objectAtIndex(5) as! Float32
AudioUnitSetParameter(self.MyAppUnit, 0, AudioUnitScope(kAudioUnitScope_Global), 0, bandValue0, 0);
AudioUnitSetParameter(self.MyAppUnit, 1, AudioUnitScope(kAudioUnitScope_Global), 0, bandValue1, 0);
AudioUnitSetParameter(self.MyAppUnit, 2, AudioUnitScope(kAudioUnitScope_Global), 0, bandValue2, 0);
AudioUnitSetParameter(self.MyAppUnit, 3, AudioUnitScope(kAudioUnitScope_Global), 0, bandValue3, 0);
AudioUnitSetParameter(self.MyAppUnit, 4, AudioUnitScope(kAudioUnitScope_Global), 0, bandValue4, 0);
AudioUnitSetParameter(self.MyAppUnit, 5, AudioUnitScope(kAudioUnitScope_Global), 0, bandValue5, 0);
}
Может кто-нибудь указать на то, что я делаю неправильно здесь? Я думаю, что это связано со второй переменной в AudioUnitSetParameter. Я попробовал AudioUnitParameterID (0) и AudioUnitParameterID (kAUNBandEQParam_Gain + 1) для этого значения, но они, похоже, вообще не работают. Любая помощь приветствуется!
Спасибо за ваш ответ! Я принял ваш совет и создал цикл, который печатает текущий коэффициент усиления каждого диапазона в эквалайзе: println («Gain») для i в 0 ... noBands - 1 { var gain: AudioUnitParameterValue = 0 var parameterID = AudioUnitParameterID (kAUNBandEQParam_Gain + I) статус = AudioUnitGetParameter (self.MyAppUnit, parameterID, AudioUnitScope (kAudioUnitScope_Global), 0, & усиления) Println (усиление) } –
это работает отлично и отображает значения, которые я установил, чтобы каждая полоса (от -24 до 24). Так что это не проблема. Любые другие идеи? –
Следует отметить, что когда я использую свои оригинальные функции AudioUnitSetParameter(), чтобы установить коэффициент усиления и распечатать выигрыш группы, они не меняются вообще, но общий объем продолжает меняться. Возможно ли, что это совершенно другой эквалайзер? Или что я просто увеличиваю общий объем? –