如何预处理音频数据输入到神经网络中



我目前正在开发一个关键字示波系统,该系统使用深神经网络识别0到9的数字。我有一个人的数据集说数字(即在Texas Instruments,Inc收集的TIDIGITS数据集(,但是数据不准备将其馈入神经网络,因为并非所有的音频数据都具有相同的音频长度,而且还有相同的音频数据。其中一些文件包含序列说的几位数字,例如"一两三"。

谁能告诉我如何将这些WAV文件转换为仅包含一个数字声音的1秒wav文件?有什么方法可以自动这样做?单独准备音频文件会很昂贵。

预先感谢您!

这取决于您拥有的其他数据集,但是是一种方法:只要从音频中盲目删除一个二片片段,然后就每个音频段是一个单一的摘要做出一些判断口头数字。

对于每个输入音频文件,定义了一个第二个窗口,您将其摘下并保存到自己的文件中,然后将此窗口进一步滑入音频文件,然后再次将下一个片段插入其自己的文件中。

由于我们想要一个二片剪辑,并且我们不知道数字源在源输入文件中的位置,一旦保存第一个窗口片段,只有幻灯片只说100ms就在下一个窗口中摘下。因此,对于每个输入音频文件,我们将创建一系列重叠的摘要,每个片段的起点仅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

在parm -ss上方,在秒内定义了摘要的起点...因此,0.60将在文件中启动600ms ... 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秒都不一致...这将几何爆炸爆炸您生成的摘要文件的数量...如果您添加另一个最外层的循环,则在更改增量时间的情况下,每个窗口起点都会滑倒,因为100ms也应该是一个免费的变量...因此,您的代码应定义三个用于FFMPEG围绕的循环(to跨越输入文件,以改变窗口宽度,以改变窗口幻灯片(

ffmpeg是用于音频/视频操纵的行业标准瑞士军刀(以及Sox(...除了命令行,FFMPEG的命令行组合也是任何语言的库(Python,go,Go,。..(

现在执行一些ML来识别哪些片段中的哪些最紧密匹配已知的口头数字听起来的模样,可以识别您保留或丢弃哪些片段

我会将每个wav拆分为沉默区域。从头到尾修剪沉默。然后,我将通过FFT运行每个部分。声音开始时较小的。然后,我将针对基本的频率标准化。然后,我将结果作为3D阵列,频率和时间的3D阵列。

最新更新