У меня есть группа людей, читающих простое предложение (привет, мир) в виде файла wav. Как я могу разбить файл wav на 2 файла wav, каждый из которых содержит слово (привет и мир), автоматически распознав разрыв между словами? К сожалению, мне не удалось найти инструмент, чтобы сделать это за меня, поэтому я напишу код C, который сделает это. Что касается моего понимания, пробелы должны быть небольшими числовыми значениями в файле wav, это правильно? Я знаю, как разбивать файлы, Буду рад подойти к решению проблемы распознавания разрывов. Спасибо!
C: разделить файл WAV по паузу
Ответы (3)
Я подхожу к этому типу задач, разбивая wav-файл на блоки, скажем, по 0,05 секунды каждый, вычисляя среднеквадратичную амплитуду каждого блока и сравнивая среднеквадратичное значение усилителя с пороговым значением. Если запись выполняется в тщательно контролируемых условиях и громкость речи относительно хорошо нормализована, порог может быть статическим значением, но другой способ сделать это - динамически, проверяя блок, который существенно громче предыдущего. Затем вы считаете блок сверх порога началом слова.
Однако в обычной речи паузы между словами может быть не так уж и много. Если я скажу вам "helloworld" без пауз, вы меня легко поймете.
Среднеквадратичная амплитуда определяется как квадратный корень из среднего за период времени квадратов отдельных образцов.
SAMPLE_SIZE = 0.05; for(int idxFile=0;idxFile<FILE_SIZE;idxFile++) { float fSum=0; for(int i=0;i<SAMPLE_SIZE;i++){ byte = read_next_byte(); fSum = fSum + SQUARE(byte); } RMS_amplitude = SQUARE(fSum / SAMPLE_SIZE ) if(RMS_amplitude < threshold){ print("Gap detected at byte:" + idxFile) } }
- person JavaSheriff; 22.10.2011
http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/
Я уверен, что это та ссылка, которая вам нужна.
sox in.wav out.wav silence 1 0.5 1% 1 5.0 1% : newfile : restart
SoX разделит звук при обнаружении 5 или более секунд тишины. В результате вы получите выходные файлы с именами out001.wav, out002.wav и т. Д.
См. этот ответ об обнаружении начала нот (определение начала и конца музыкальных нот в WAV-файл - это точно такая же проблема, как определение начала и конца произнесенного слова в WAV-файле).
Однако учтите, что поставленная вами задача по сути невозможна без чрезвычайно сложного (и еще не существующего) искусственного интеллекта. Когда человек говорит в записи, обычно нет промежутков между отдельными словами, которые численно отличались бы от промежутков между отдельными слогами в многосложных словах.