Конвертировать файл WAVE в векторы в Android

Я ищу способ конвертировать файлы Wave в список чисел для взаимной корреляции результирующих векторов (например, числа, которые вы получаете, когда читаете файл волны на MATLAB)

0.6653 -0.8445 0.9589 -0.9999 0.9643 -0.8547 0.6797 -0.4525 0.1907 0.0858 -0.3557 0.5983 -0.7951 0.9309 -0.9953 0.9835 -0.8962 0.7402 -0.5275 0.2742

Есть ли способ сделать это в Android или даже C/C++? Я действительно не знаю, как начать.

1 ответ

Решение

Формат файла WAVE довольно прост, особенно если вы заинтересованы в линейных данных в формате PCM. Описания формата доступны из различных источников, таких как здесь и здесь.

Используя их, вы сможете декодировать:

  • заголовок (кусок "RIFF")
  • блок "fmt ", который содержит различную информацию, такую ​​как количество байтов на выборку, количество каналов (т. е. моно, стерео или более), частоту дискретизации и т. д.
  • и блок данных, который, если главное, на что вы захотите взглянуть, чтобы создать вектор, подобный MATLAB.

Если вы имеете дело с одноканальными (т.е. монофоническими) файлами WAVE, данные довольно просто декодировать. Количество выборок должно тогда соответствовать (дать или взять несколько байтов для заполнения) размеру блока данных, деленному на количество байтов на выборку (количество бит на выборку доступно из фрагмента "fmt "), Преобразование целого числа выборок в значение с плавающей запятой [0-1] может быть выполнено умножением на константу (например, 1,0/128 для 1 байта на выборку).

Для многоканальных файлов WAVE помните, что данные канала чередуются (например, выборка 1 влево / вправо, выборка 2 влево / вправо, ...)

Также обратите внимание, что существует множество учебных пособий / сэмплов (таких как этот сэмпл в C или этот сэмпл в Java) и различные звуковые библиотеки с открытым исходным кодом, которые вы можете использовать в качестве отправной точки.

Другие вопросы по тегам