Это зависит от того, какие другие наборы данных у вас есть, но вот один из подходов: просто слепо вырежьте фрагменты одной секунды из вашего аудио, а затем определитесь с тем, является ли каждый файл аудио фрагмента фактически одной произносимой цифрой.
Для каждого входного аудиофайла определите одно секундное окно, которое вы извлекаете и сохраняете в своем собственном файле, затем передвигаете это окно дальше в аудиофайл и снова извлекаете следующий фрагмент в свой собственный файл.
Так как нам нужны клипы за одну секунду, и мы не знаем, где в исходном входном файле лежат наши цифры, после сохранения фрагмента первого окна сдвиньте, скажем, 100 мс и вытащите следующее окно. Таким образом, для каждого входного аудиофайла мы создадим последовательность перекрывающихся фрагментов, каждый с начальной точкой всего в 100 мс, отделенных от предыдущего фрагмента. Для этого легко использовать инструмент командной строки ffmpeg
https://ffmpeg.org/ffmpeg.html
https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax
input_audio=audio_from_your_dataset.wav
output_audio=output/aaa
ffmpeg -i $input_audio -ss 0 -t 1 -acodec copy ${output_audio}.0.00.wav
ffmpeg -i $input_audio -ss 0.20 -t 1 -acodec copy ${output_audio}.0.20.wav
ffmpeg -i $input_audio -ss 0.40 -t 1 -acodec copy ${output_audio}.0.40.wav
ffmpeg -i $input_audio -ss 0.60 -t 1 -acodec copy ${output_audio}.0.60.wav
ffmpeg -i $input_audio -ss 0.80 -t 1 -acodec copy ${output_audio}.0.80.wav
ffmpeg -i $input_audio -ss 1.00 -t 1 -acodec copy ${output_audio}.1.00.wav
ffmpeg -i $input_audio -ss 1.20 -t 1 -acodec copy ${output_audio}.1.20.wav
выше parm -ss определяет начальную точку фрагмента в секундах ... поэтому 0.60 запустит 600 мс в файл ... parm -t определяет длину окна в секундах
поэтому его вывод будет
./output/aaa.0.00.wav
./output/aaa.0.20.wav
./output/aaa.0.40.wav
./output/aaa.0.60.wav
./output/aaa.0.80.wav
./output/aaa.1.00.wav
./output/aaa.1.20.wav
проблема выше в командной строке ... это не ограничивается просто wav, другие кодеки тоже в порядке ... теперь у вас есть несколько односекундных аудиофайлов фрагментов, извлеченных из одного и того же входного аудио ... Я бы затем обернул выше процесс с мета-процессом, который изменяет ширину вашего окна ... ничто в камне не говорит 1 секунду, так что делайте все выше для окон, которые варьируются, скажем, от 0,1 секунды до 1 секунды ... это будет геометрически взрывать количество файлов сниппетов, которые вы генерируете ... бонусные баллы, если вы добавите еще один внешний цикл, в котором вы изменяете время инкремента, на которое каждая начальная точка окна скользит, поскольку 100 мс также должны быть свободной переменной ... поэтому ваш код должен определить три цикла for для вызовов ffmpeg (to продвигаться по входному файлу, изменять ширину окна, изменять слайд окна)
ffmpeg - это промышленный стандарт Swiss Army Knife для работы с аудио / видео (наряду с Sox) ... в дополнение к набору инструментов командной строки, ffmpeg также представляет собой набор библиотек, вызываемых из любого языка (python, go,. ..)
Теперь выполните ML, чтобы определить, какие из этих фрагментов наиболее точно соответствуют звучанию известной произносимой цифры, чтобы определить, какие фрагменты вы сохраняете или отбрасываете