だから私は、Apple が iOS 5 で追加した文書化されていない NBandEQ を見つけようとしています。16 バンド未満のどんなものでもうまく動作させることができますが、もっと欲しいです :) 15 バンド EQ にするとどうなりますか?すべてが機能しますが、16 以上の数字にすると、kAudioUnitErr_InvalidPropertyValue
設定時に -10851 ( ) エラーが発生しkAUNBandEQProperty_NumberOfBands
、最初の 8 バンドは正常に設定され、残りは -10878 ( kAudioUnitErr_InvalidParameter
) エラーになります。つまり、15 バンドは問題なく実行できますが、16 バンドになると、突然 8 バンドしか実行できなくなります。があるkAUNBandEQProperty_MaxNumberOfBands
現在の状態のデバイスが処理できる限界であると私が想定したことを読むことができます。12 桁の数字から 4 桁の数字まで、さまざまな数字を吐き出します。私が与えている極端な周波数が気に入らないのではないかと思います。その可能性を排除しました。その後、バンドの帯域幅が重複している可能性があり、それが気に入らないことに気付きました。そのため、帯域幅をデフォルトの .5 から最小に減らします。.05 エーテルではどうしようもありません。
結局、設定にたどり着く前に不平を言い始めたので、すべてばかげた設定をいじったことに気づきました。すでにバンド数に誤差が出ています。
この質問を投稿して、経験豊富なプログラマーが私のコードで私を台無しにしている何かを見つけて指摘できるかどうかを確認します。NBandEQ はおろか、コア オーディオに踏み込んでいる人は多くありませんが、基本的な C を台無しにしている可能性がありますので、ご覧ください。とても感謝しています。私は明らかにイライラしています。また、このコードを投稿することで(たとえそれが醜いテストコードであっても)、後れを取っている他の人を助けることができるかもしれません。NBandEQ に関連して調べることができたコードのスニペットが少なくとも 1 つあればいいのにと思います。
助けてくれてありがとう!
//Getting max bands for this device???
UInt32 maxNumOfBands;
UInt32 propSize = sizeof(maxNumOfBands);
AudioUnitGetProperty([_equilizer audioUnit],
kAUNBandEQProperty_MaxNumberOfBands,
kAudioUnitScope_Output,
0,
&maxNumOfBands,
&propSize);
NSLog(@"THIS IS THE MAX NUMBER OF BANDS?---%u",(unsigned int)maxNumOfBands);
UInt32 noBands = [eqFrequencies count];
// Set the number of bands first
NSLog(@"NumberOfBands atempted:%i with result:%ld", (unsigned int)noBands, AudioUnitSetProperty(_equilizer.audioUnit,
kAUNBandEQProperty_NumberOfBands,
kAudioUnitScope_Global,
0,
&noBands,
sizeof(noBands)));
// Set the frequencies
for (NSUInteger i=0; i<noBands; i++) {
NSLog(@"Set Frequency for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit],
kAUNBandEQParam_Frequency+i,
kAudioUnitScope_Global,
0,
(AudioUnitParameterValue)[[eqFrequencies objectAtIndex:i] floatValue],
0));
}
//set bandwidth
for (NSUInteger i=0; i<noBands; i++) {
NSLog(@"Set bandwidth for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit],
kAUNBandEQParam_Bandwidth+i,
kAudioUnitScope_Global,
0,
0.05,//of octive
0));
}
// Set the bypass to off "0"
for (NSUInteger i=0; i<noBands; i++) {
NSLog(@"Set Bypass for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit],
kAUNBandEQParam_BypassBand+i,
kAudioUnitScope_Global,
0,
0,//off
0));
}
}