Получение необработанных данных примера файла m4a для рисования формы волны - PullRequest
2 голосов
/ 09 сентября 2011

Я использую 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 кадров на пакет

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

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

0 голосов
/ 11 сентября 2011

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

...