Я пишу приложение для iPhone, которое записывает и воспроизводит аудио одновременно с помощью аудиоустройства ввода / вывода согласно рекомендациям Apple .
Я хочу применить некоторые звуковые эффекты (реверберацию и т. Д.) К записанному звуку перед его воспроизведением. Чтобы эти эффекты работали хорошо, мне нужно, чтобы образцы были числами с плавающей точкой, а не целыми числами. Кажется, это должно быть возможно путем создания AudioStreamBasicDescription
с kAudioFormatFlagIsFloat
, установленным на 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);
Однако, когда я запускаю это (на iPhone 3GS под управлением iPhoneOS 3.1.3), я получаю это:
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input) returned error -10868
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output) returned error -10868
(- 10868 - значение kAudioUnitErr_FormatNotSupported
)
Я не нашел ничего ценного в документации Apple, кроме рекомендации , чтобы придерживаться 16-битных младших порядковых чисел. Однако пример проекта aurioTouch содержит по крайней мере некоторый код поддержки, связанный с kAudioFormatFlagIsFloat
.
.
Итак, мое потоковое описание неверно или kAudioFormatFlagIsFloat
просто не поддерживается на iPhoneOS?