Как я могу программно определить частоту дискретизации файла WAV?

Рейтинг: 1Ответов: 1Опубликовано: 14.02.2023

Есть программа написанная на python, которая распознаёт текст с использованной библиотекой vosk. Для распознавания текста нужно передать частоту дискретизации и модель языка этой строкой : KaldiRecognizer(model, 96000), где 96000 - это сама частота. чтобы определить частоту дискретизации файла я использую следующий код:

with wave.open(r'a.wav', "rb") as wave_file:
    frame_rate = wave_file.getframerate()
    print(frame_rate)

НО! Практически во всех файлах он определяет частоту: 48000, для некоторых аудио файлов она почему-то не подходит и выводится какой-то бред а не текст (просто набор слов), тобиш vosk не правильно определяет текст в аудио, решается эта проблема ручной заменой частоты на нужную, постоянно необходимо подбирать её. в чём может быть проблема? до этого, преобразовывал аудио файл в онлайн конвертации. Хотелось бы автоматизировать процесс.

Ответы

▲ 0

Полагаю, проблема в теории

Может быть несколько причин, по которым ваш код неправильно определяет частоту дискретизации некоторых аудиофайлов:

1. Неподдерживаемый аудиоформат: Модуль wave, используемый в вашем коде, поддерживает только ограниченный набор аудиоформатов. Если аудиофайл, который вы пытаетесь открыть, находится в формате, который модуль не поддерживает, он может возвращать неправильную частоту. Возможно, вам потребуется использовать другой модуль, поддерживающий более широкий спектр аудиоформатов, например модуль pydub.

2. Неправильная информация о заголовке: Некоторые аудиофайлы могут содержать неправильную информацию о заголовке, которая не соответствует фактической частоте дискретизации. Это может произойти, когда файл создан неправильно или когда он конвертируется из одного формата в другой. В этом случае вам, возможно, потребуется вручную установить частоту дискретизации при передаче файла в библиотеку Vosk.

3. Кодирование с переменной скоростью передачи данных (VBR): Некоторые аудиофайлы могут иметь кодировку с переменной скоростью передачи данных, что означает, что скорость передачи данных изменяется по всему файлу. В этом случае частота, сообщаемая модулем wave, может быть неточной, и вам может потребоваться использовать другой метод для определения частоты дискретизации.

Чтобы автоматизировать процесс, вы можете попробовать использовать вышеупомянутый модуль pydub для преобразования аудиофайлов в поддерживаемый формат с фиксированной частотой дискретизации перед передачей их в библиотеку Vosk. Вы также можете попробовать использовать модуль mediainfo для извлечения частоты дискретизации непосредственно из метаданных файла вместо того, чтобы полагаться на модуль wave.