プラットフォームで何ができるかを確認するために、小さなテスト iOS 5.0 アプリの開発を始めたところです。
Chris Adamson のブログや、David Zicarelli の audioGraph の例 (多数の新機能を備えた Apple の MixerHost に基づく) など、一部のリソースは貴重でした。
私がやろうとしているのは、iOS 5.x SDK の新しい FilePlayer AudioUnit を使用して、このようなものをセットアップすることです。
(AUFilePlayer bus0) -> (いくつかのカスタム プロセス) -> (bus0 MultiChannelMixer bus0) -> (bus0 リモート I/O)
私は audioGraph から始めて、不要なものを削除し、最終的に上記のチェーンになりました。
AUFilePlayer の優先出力が 8.24 ストリームであることを確認できたので、ミキサーもそのように設定されています (入力スコープで 8.24)。私のプロセスは、必要な変換を処理します。
「カスタム プロセス」コールバックは、バス 0 のミキサーに登録されます。アプリが起動されると、定期的に呼び出されます。これはログで確認できます。
static OSStatus simpleRenderCallback (
void *inRefCon,
AudioUnitRenderActionFlags
*ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData
) {
MixerHostAudio* THIS = (MixerHostAudio*) inRefCon; //the MixerHostAudio instance
AudioUnit fpUnit= THIS.auFilePlayerUnit_1;
OSStatus renderErr = noErr;
renderErr= AudioUnitRender(AUFilePlayerUnit, ioActionFlags, inTimeStamp, 0, inNumberFrames, ioData);
if (renderErr < 0) {
NSLog(@"error:%ld",renderErr);
return renderErr;
}
return noErr;
}
問題は、AudioUnitRender がコールバックで呼び出されるたびに、常に renderErr = -50 を取得していることです。
今のところシミュレーターで実行しています。Mac サウンドカードは 44,100Hz に設定されており、inNumberFrames は常に 512 に等しいことがわかりました。
問題はどこから来たのですか?-50 は CoreAudio の「不正なパラメーター」を意味しますが、それだけでは何が問題なのかを知るには十分ではありません。
ありがとう!