Что содержит аудио кадр?
Я делаю некоторые исследования о том, как сравнить звуковые файлы (волна). В основном я хочу сравнить сохраненные звуковые файлы (WAV) со звуком из микрофона. Итак, в конце я хотел бы предварительно сохранить некоторые собственные голосовые команды, а затем, когда я запускаю свое приложение, я хотел бы сравнить предварительно сохраненные файлы с входом из микрофона.
Моя мысль заключалась в том, чтобы при сравнении сравнивать, потому что сказать что-то два раза подряд совершенно одинаково было бы сложно.
Так что после некоторого поиска в Google я вижу, что у python есть этот модуль с именем wave и объект Wave_read. Этот объект имеет функцию с именем readframes(n):
Читает и возвращает не более n кадров аудио в виде строки байтов.
Что содержат эти байты? Я думаю о зацикливании волновых файлов один кадр за раз, сравнивая их кадр за кадром.
4 ответа
Аудиокадр или сэмпл содержит информацию об амплитуде (громкости) в данный конкретный момент времени. Для создания звука десятки тысяч кадров воспроизводятся последовательно для получения частот.
В случае аудио с качеством CD или несжатого волнового звука в секунду получается около 44 100 кадров / выборок. Каждый из этих кадров содержит 16-битное разрешение, что позволяет довольно точно представлять уровни звука. Кроме того, поскольку аудио CD является стереофоническим, на самом деле информации в два раза больше: 16 бит для левого канала и 16 бит для правого.
Когда вы используете звуковой модуль в Python для получения кадра, он будет возвращен в виде серии шестнадцатеричных символов:
- Один символ для 8-битного моносигнала.
- Два символа для 8-битного стерео.
- Два символа для 16-битного моно.
- Четыре символа для 16-битного стерео.
Чтобы преобразовать и сравнить эти значения, вам сначала нужно использовать функции модуля python wave, чтобы проверить битовую глубину и количество каналов. В противном случае вы будете сравнивать несоответствующие настройки качества.
Простое побайтовое сравнение почти не имеет шансов на успешное совпадение, даже при наличии некоторого допуска. Распознавание речевых образов - очень сложная и тонкая проблема, которая до сих пор является предметом многих исследований.
Я считаю, что принятое описание немного неверно.
Кадр выглядит как шаг в графических форматах. Для чередующегося стерео @ 16 бит / сэмпл размер кадра 2*sizeof(short)
=4 байта. Для не чередующегося стерео @ 16 бит / сэмпл все сэмплы левого канала располагаются один за другим, поэтому размер кадра просто sizeof(short)
,
Первое, что вы должны сделать, - это преобразование Фурье для преобразования данных в их частоты. Это довольно сложно, однако. Я бы не стал использовать здесь библиотеки распознавания голоса, потому что, похоже, вы записываете не только голоса. Затем вы должны попробовать разные временные сдвиги (в случае, если звуки точно не выровнены) и использовать тот, который дает вам наилучшее сходство - где вы должны определить функцию подобия. Да, и вы должны нормализовать оба сигнала (одинаковая максимальная громкость).