Я просто не получаю AudioFileReadPackets - PullRequest
2 голосов
/ 11 апреля 2010

Я пытался написать наименьший кусок кода, чтобы сузить проблему. Теперь это всего лишь несколько строк, и это не работает, что ясно показывает, что у меня есть фундаментальное недопонимание того, как использовать AudioFileReadPackets. Я прочитал документы и другие примеры в Интернете, и, очевидно, я просто не понимаю. Не могли бы вы объяснить это мне?

Вот что должен делать этот блок: я ранее открыл файл. Я хочу прочитать только один пакет - первый файл - и затем распечатать его. Но происходит сбой в строке AudioFileReadPackets:

    AudioFileID mAudioFile2; 
    AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2);
    UInt32 *audioData2 = (UInt32 *)malloc(sizeof(UInt32) * 1);
    AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, (UInt32*)1, audioData2);
    NSLog(@"first packet:%i",audioData2[0]);

(Для ясности я убрал всю обработку ошибок.)

Вылетает линия AFRP.

(я понимаю, что третий и четвертый аргументы полезны, и в моем «реальном» коде я их использую, но они не обязательны, верно? Так что в этом случае NULL должен работать, верно?) происходит?

Любое руководство будет высоко ценится.

Спасибо.

1 Ответ

4 голосов
/ 11 апреля 2010

Я думаю, что ваша проблема с аргументом количества пакетов. Вы просто создаете указатель на 0x00000001. Проблема в том, что он пытается использовать это вывод того, сколько пакетов было фактически прочитано. Ваш аудио буфер тоже может быть слишком маленьким. Согласно документации, длина пакета должна превышать верхнюю границу длины пакета.

Попробуйте это:

AudioFileID mAudioFile2; 
AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2);
UInt32 packetCount = 1;
void *audioData2 = (void *)malloc(packetCount * maxPacketSize);
AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, &packetCount, audioData2);
NSLog(@"first packet:%i",audioData2[0]);

Не совсем уверен, как получить maxPacketSize (никогда не работал с этим).

...