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