Базовый WAV-файл состоит из заголовка (я думаю о длине 60 байт) и фактических данных.
Данные состоят из наборов целых чисел. Один набор целых чисел производится для каждой «выборки», что может быть 8000 раз в секунду или 44000 раз в секунду или какой-либо другой частотой дискретизации.
Один набор целых чисел (представляющих одну выборку) состоит из одного целого числа для каждого канала, которое теоретически может быть любым числом, но обычно оно равно 1 (моно) или 2 (стерео). Каждое отдельное целое число может иметь длину 1, 2, 3 или 4 байта.
Отдельное целое число представляет уровень звука этого канала в данный конкретный момент времени. Если представляемый звук представляет собой синусоидальную волну, значение целого числа будет V * sin(K * t)
, где V
- громкость, K
- некоторая постоянная, а t
- текущее время. Обратите внимание, что целое число подписано, и «уровень звука» может быть отрицательным или положительным в любой конкретный момент (и, как правило, будет отрицательным примерно в половине случаев).
Частота дискретизации, количество каналов и размер значения отдельного канала кодируются в полях заголовка (вместе с несколькими другими частями информации).
Как правило, для извлечения частоты сигнала вы применяете Быстрое преобразование Фурье (БПФ) к двоичным звуковым данным для преобразования из «временной области» в «частотную область». Это обычно делается между 5 и 50 раз в секунду, в зависимости от частоты дискретизации и других факторов. (Существует несколько доступных библиотек FFT с открытым исходным кодом.) Однако для распознавания речи также используется ряд других алгоритмов.