这取决于您拥有哪些其他数据集,但以下是一种方法:只需从音频中盲目地剪切出一个秒的片段,然后根据每个音频片段文件是否实际上是单个口语数字进行判断。
对于每个输入音频文件,定义一个一秒钟的窗口,将其拔出并保存到自己的文件中,然后将此窗口滑动到音频文件中,并再次将下一个片段拔出到自己的文件中。
由于我们想要一秒钟的片段,而且我们不知道源输入文件中我们的数字位于何处,在保存第一个窗口片段之后,仅向前滑动100ms并提取下一个窗口。因此,对于每个输入音频文件,我们将创建一系列重叠的片段,每个片段的起点与前一个片段仅相隔100ms。为了轻松执行此操作,请使用命令行工具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
在上面的参数中,-ss定义了片段的起始点(以秒为单位)...因此0.60将从文件的第600毫秒开始...参数-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秒的所有窗口都执行上述操作。这将呈几何级数增加您生成的片段文件数量。如果您添加另一个最外层循环来使每个窗口起始点滑动的增量时间发生变化,则额外得分。因此,您的代码应该在ffmpeg调用周围定义三个循环(跨越输入文件,变化窗口宽度,变化窗口滑动)。
FFmpeg是音视频处理的行业标准瑞士军刀(和Sox一样)。除了一组命令行工具之外,FFmpeg还是可从任何语言(例如Python,Go等)调用的库集合。
现在进行一些机器学习以识别哪些片段与已知的口述数字最相似,以确定要保留或丢弃哪些片段。