AudioQueueStart сообщает о неподдерживаемом формате - PullRequest
3 голосов
/ 22 сентября 2009

Я пытаюсь заставить аудио-очередь работать в приложении для iphone, и всякий раз, когда вызывается AudioQueueStart, выдается «fmt?» код результата (kAudioFormatUnsupportedDataFormatError). В приведенном ниже коде я устанавливаю формат kAudioFormatLinearPCM, который, безусловно, поддерживается. Что я делаю не так?

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;

спасибо

Ответы [ 2 ]

1 голос
/ 23 августа 2012

Причиной вашей ошибки является AudioQueueNewOutput, а не AudioQueueStart. См. Этот связанный вопрос Службам потокового аудио не удается распознать тип файла

0 голосов
/ 22 сентября 2009

оказывается, мне нужно было установить некоторые флаги. это работает с

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

edit: на самом деле, не используйте kLinearPCMFormatFlagIsBigEndian, похоже, что с этим форматом он должен быть немного порядковым.

...