Je suis en train d'écrire une application pour iPhone qui enregistre et lit des fichiers audio simultanément à l'aide de l'unité audio E/S, conformément au Apple's recommendations.kAudioFormatFlagIsFloat est-il pris en charge sur iPhoneOS?
Je souhaite appliquer des effets sonores (réverbération, etc.) sur l'audio enregistré avant de le lire. Pour que ces effets fonctionnent bien, j'ai besoin que les échantillons soient des nombres à virgule flottante, plutôt que des entiers. Il semble que cela devrait être possible, en créant un AudioStreamBasicDescription
avec kAudioFormatFlagIsFloat
sur mFormatFlags
. C'est ce que mon code ressemble à:
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);
Cependant, quand je lance ce (sur un iPhoneOS iPhone 3GS fonctionnement 3.1.3), je reçois ceci:
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input) returned error -10868
AudioUnitSetProperty (kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output) returned error -10868
(-10868 est la valeur Je n'ai trouvé rien de valeur dans la documentation d'Apple, à l'exception d'un recommendation pour coller à des entiers little-endian 16 bits. Toutefois, le projet exemple aurioTouch contient au moins un code de support lié à kAudioFormatFlagIsFloat
.
Alors, est-ce que ma description de flux est incorrecte, ou est-ce que kAudioFormatFlagIsFloat
n'est pas supporté sur iPhoneOS?