2009-09-22 8 views
3

iphone 앱에서 오디오 대기열을 처리하려고하는데 AudioQueueStart가 호출 될 때마다 "fmt?" 결과 코드 (kAudioFormatUnsupportedDataFormatError). 아래 코드에서 반드시 지원되는 형식을 kAudioFormatLinearPCM으로 설정합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?AudioQueueStart 지원되지 않는 형식을보고합니다.

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); 

데이터 이렇 형 audioData이다 :

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

audioData};

감사합니다.

+0

안녕을보기보다는! 동일한 문제가 있습니다. 변경 다른 플래그 나를 위해 유용하지 않습니다. iPad 시뮬레이터가 녹음을 지원하지 않을 수 있습니까 ??? –

답변

0

일부 플래그를 설정해야합니다. 그것은

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

편집 작동 : 실제로, kLinearPCMFormatFlagIsBigEndian를 사용 해달라고,이 형식은 리틀 엔디안 있어야한다 보인다.

관련 문제