Записать ПКМ с прямым порядком байтов с AudioQueue на iOS - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь записать файл PCM с прямым порядком байтов с помощью AudioQueue.В соответствии с документами я должен очистить бит kAudioFormatFlagIsBigEndian в AudioStreamBasicDescripton.mFormatFlags.

Документы говорят:

kAudioFormatFlagIsBigEndian.Устанавливается для старшего, ясного для младшего.

Моя установка выглядит как

- (void)setupAudioFormat:(AudioStreamBasicDescription*)format 
{
    //format->mSampleRate = 8000.0;
    format->mSampleRate = 44000.0;
    format->mFormatID = kAudioFormatLinearPCM;
    format->mFramesPerPacket = 1;
    format->mChannelsPerFrame = 2;
    format->mBytesPerFrame = format->mBytesPerPacket = format->mChannelsPerFrame * sizeof(SInt16);
    format->mBitsPerChannel = 16;
    format->mReserved = 0;
    format->mFormatFlags = ~kAudioFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked | kAudioFormatFlagIsAlignedHigh;

}

Я получаю ошибку

kAudioFileUnsupportedDataFormatError

Может ли кто-нибудь помочь мне разобраться в чем дело?Можно ли даже записать порядок байтов на устройстве iOS?Одной из альтернатив записи с прямым порядком байтов будет преобразование файла позже, чтобы любые намеки на это также были бы весьма ценными.

1 Ответ

1 голос
/ 26 ноября 2011

Вы хотели запросить частоту дискретизации 44100,0?

Способ очистки флага состоит не в том, чтобы устанавливать каждый бит, кроме того, который был установлен (как вы, вероятно, установили десятки недопустимых битов в вашем примере), но:

mFormatFlags &= ~(bitToClear);
...