Получение необработанных выборочных данных файла m4a для рисования формы сигнала

Я использую AudioToolbox для доступа к аудиофайлам m4a со следующим кодом:

UInt32 packetsToRead = 1; //Does it makes difference?

void *buffer = malloc(maxPacketSize * packetsToRead);

for (UInt64 packetIndex = 0; packetIndex < packetCount; packetIndex++)
{
   ioNumberOfPackets = packetsToRead;
   ioNumberOfBytes = maxPacketSize * ioNumberOfPackets;

   AudioFileReadPacketData(audioFile, NO, &ioNumbersOfBytes, NULL, packetIndex, &ioNumberOFPackets, buffer);
    for (UInt32 batchPacketIndex = 0; batchPacketIndex < ioNumberOfPackets; batchPacketIndex++)
    {
    //What to do here to get amplitude value? How to get sample value?
    }
    packetIndex+=ioNumberOfPackets;
}

Мой аудиоформат: AppleM4A, 8000 Гц, 16 бит, 4096 кадров в пакете.


person Denis Mikhaylov    schedule 09.09.2011    source источник


Ответы (2)


Решение заключалось в использовании расширенных служб аудиофайлов. Вам просто нужно настроить переход между форматом клиента и PCM. Там есть правильный путь Обработка звука: воспроизведение с уровнем громкости.

person Denis Mikhaylov    schedule 12.09.2011

Чтобы получить данные формы волны, вам может сначала потребоваться преобразовать сжатый аудиофайл в необработанные сэмплы PCM, например, находящиеся внутри файла WAV, или другой несжатый аудиоформат. Попробуйте AVAssetReader и др.

person hotpaw2    schedule 11.09.2011
comment
AVAssetReader слишком медленный для анализа в реальном времени. Это было мое первое решение этой проблемы. - person Denis Mikhaylov; 12.09.2011