2009-09-22 5 views
3

J'essaie d'obtenir une file d'attente audio fonctionnant sur une application iphone, et quand AudioQueueStart est appelé, il donne le "fmt?" code de résultat (kAudioFormatUnsupportedDataFormatError). Dans le code ci-dessous, je mets le format à kAudioFormatLinearPCM, qui est sûrement supporté. Qu'est-ce que je fais mal?AudioQueueStart signalant un format non supporté

data.mDataFormat.mSampleRate = 44100; 
data.mDataFormat.mFormatID = kAudioFormatLinearPCM; 
data.mDataFormat.mFormatFlags = 0; 
data.mDataFormat.mBytesPerPacket = 4; 
data.mDataFormat.mFramesPerPacket = 1; 
data.mDataFormat.mBytesPerFrame = 4; 
data.mDataFormat.mChannelsPerFrame = 2; 
data.mDataFormat.mBitsPerChannel = 16; 

OSStatus status; 

status = AudioQueueNewOutput(&data.mDataFormat, audioCallback, &data, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &data.mQueue); 

for (int i = 0; i < NUMBUFFERS; ++i) 
{ 
    status = AudioQueueAllocateBuffer (data.mQueue, BUFFERSIZE, &data.mBuffers[i]); 
    audioCallback (&data, data.mQueue, data.mBuffers[i]); 
} 

Float32 gain = 1.0; 
status = AudioQueueSetParameter (data.mQueue, kAudioQueueParam_Volume, gain); 

status = AudioQueueStart(data.mQueue, NULL); 
données

est de type Audiodata qui ressemble à ceci:

typedef struct _audioData { 
AudioQueueRef mQueue; 
AudioQueueBufferRef mBuffers[NUMBUFFERS]; 
AudioStreamBasicDescription mDataFormat; 

} Audiodata;

merci

+0

Salut! J'ai le même problème. Changer les différents drapeaux ne sont pas utiles pour moi. Peut être simulateur iPad ne supporte pas l'enregistrement ??? –

Répondre

0

Il s'est avéré que j'avais besoin de régler certains drapeaux. il fonctionne avec

data.mDataFormat.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked; 

edit: en fait, ne pas utiliser kLinearPCMFormatFlagIsBigEndian, il semble que ce format, il devrait être peu endian.

Questions connexes