Appleの推奨に従って、I/Oオーディオユニットを使用してオーディオの録音と再生を同時に行うiPhoneアプリを作成しています。
再生する前に、録音したオーディオにいくつかの効果音(リバーブなど)を適用したいと思います。これらの効果をうまく機能させるには、サンプルを整数ではなく浮動小数点数にする必要があります。AudioStreamBasicDescriptionwith kAudioFormatFlagIsFloatset onを作成することで、これが可能になるはずmFormatFlagsです。これは私のコードがどのように見えるかです:
AudioStreamBasicDescription streamDescription;
streamDescription.mSampleRate = 44100.0;
streamDescription.mFormatID = kAudioFormatLinearPCM;
streamDescription.mFormatFlags = kAudioFormatFlagIsFloat;
streamDescription.mBitsPerChannel = 32;
streamDescription.mBytesPerFrame = 4;
streamDescription.mBytesPerPacket = 4;
streamDescription.mChannelsPerFrame = 1;
streamDescription.mFramesPerPacket = 1;
streamDescription.mReserved = 0;
OSStatus status;
status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &streamDescription, sizeof(streamDescription));
if (status != noErr)
fprintf(stderr, "AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input) returned status %ld\n", status);
status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &streamDescription, sizeof(streamDescription));
if (status != noErr)
fprintf(stderr, "AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output) returned status %ld\n", status);
ただし、これを実行すると(iPhoneOS3.1.3を実行しているiPhone3GSで)、次のようになります。
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input) returned error -10868
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output) returned error -10868
(-10868はの値ですkAudioUnitErr_FormatNotSupported)
16ビットのリトルエンディアンの整数に固執することを推奨していることを除けば、Appleのドキュメントには価値のあるものは何も見つかりませんでした。ただし、aurioTouchサンプルプロジェクトには、に関連するサポートコードが少なくともいくつか含まれていkAudioFormatFlagIsFloatます。
それで、私のストリームの説明は正しくありkAudioFormatFlagIsFloatませんか、それとも単にiPhoneOSでサポートされていませんか?