Audio Units を使用してシンプルな iOS アプリを作成しています。残響効果をつけたい。したがって、グラフは RemoteIO_Input -> Reverb -> RemoveIO_Output のようになります。しかし、リバーブ ユニットのストリーム フォーマットを設定しようとすると、エラーが発生しますkAudioUnitErr_FormatNotSupported
。そのコードは、リバーブ ユニット (グラフ内の単一のリモート IO) を使用せずに正常に動作するため、他の構成は問題ないようで、コードを提供していません。
UPD:iOS 6が使用されています
だから質問:
使用できるフォーマットに制限はありますか?
どのフォーマット パラメータを使用すればよいですか?
RemoteIO 出力要素の任意のスコープでフォーマットを設定する必要がありますか?
ご清聴ありがとうございました。
コード: 説明:
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_RemoteIO;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
descRev.componentType = kAudioUnitType_Effect;
descRev.componentSubType = kAudioUnitSubType_Reverb2;
descRev.componentFlags = 0;
descRev.componentFlagsMask = 0;
descRev.componentManufacturer = kAudioUnitManufacturer_Apple;
グラフの設定
NewAUGraph(&graph);
AUNode ioNode;
AUNode rNode;
AUGraphAddNode(graph, &desc, &ioNode);
AUGraphAddNode(graph, &descRev, &rNode);
AUGraphOpen(graph);
AUGraphConnectNodeInput(graph, ioNode, 1, rNode, 0);
AUGraphConnectNodeInput(graph, rNode, 0, ioNode, 0);
フォーマットの説明と設定
// Describe format
audioFormat.mSampleRate = rate;//44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mBytesPerFrame = 2;
OSStatus err = AudioUnitSetProperty(unit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
kInputBus,
&audioFormat,
sizeof(audioFormat));
if (noErr != err) {
[self showStatus:err];
}
err = AudioUnitSetProperty(unitRev,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&audioFormat,
sizeof(audioFormat));
if (noErr != err) {
[self showStatus:err];
}