如何解决用Java静默识别WAV文件
我需要使用JAVA编写一个函数,如下所示:
输入:.wav文件(或byte [] fileBytes) 输出:true / false(该文件仅包含静默)
最好的方法是什么?
谢谢。
更新:
-
我用于记录的命令:
arecord --format = S16_LE --max-file-time = 60 --rate = 16000 --file-type = wav randomvalue_i.wav
-
静音=完全没有音频
解决方法
好吧,简短的答案是您将要扫描.WAV数据并对其进行最小/最大值设置。一个“无声”文件,其值基本上应该全部为0。
更长的答案是,您将需要了解.WAV格式,您可以在此处找到描述(http://soundfile.sapp.org/doc/WaveFormat/)。您可能可以跳过前44个字节(RIFF,'fmt')以获取数据,然后开始查看字节。标头可能中的“每样本位数”值很重要,因为16位样本意味着您需要将2个“字节”合并在一起才能得到一个样本。但是,即使这样,对于一个静默的16位样本文件,两个字节都将为0。 NumChannels的同上-理论上您应该了解它,但是对于真正的“沉默”而言,两者都应为0。如果所有数据都为“ 0”,则为静默状态。
“静音”有点含糊。上面,我很严格,并假设它只表示真正的“ 0”。但是,在安静的房间中,背景环境噪声仍然非常低。在这种情况下,您需要对比较有所宽容。例如计算每个样本的最小值/最大值,并确保范围在一定的公差范围内。仍然可以确定,但是只是添加了代码。
出于完整性考虑:
public boolean isSilent(byte[] info) {
for (int idx = 44; idx < info.length; ++idx) {
if (info[idx] != 0)
return false;
}
return true;
}
,
您可能拥有一个您认为“静音”的.wav文件,并将其与其他.wav文件进行比较,以查看它们是否具有相同的频率。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。