wav文件中特定点的分贝值

时间:2012-11-06 02:58:58

标签: java linux audio command-line

我正在尝试衡量潜在客户并引出wav文件。优选地,第一个和最后5秒左右。我基本上试图分配一个数字值,意思是“这首歌有一个缓慢的引导”或“这首歌有一个突然结束”。

我的想法是获得dB值的斜率,但我似乎无法找到一个能给我dB值的linux命令行工具。我知道可以测量它们,因为Audacity有一个波形(db)视图。

enter image description here

基本上我正在寻找一种方法来收集数据点以复制此图,这样我就可以得到斜率。

编辑 - 在java中工作

3 个答案:

答案 0 :(得分:5)

我不知道有任何命令行工具可以执行此操作,但使用scipy库编写具有此功能的python脚本非常简单。

我们可以使用scipy.io.wavfile来执行文件IO,然后自己计算dB值(请注意,这些值不一定是标准dB值,因为这些值取决于您的扬声器和音量设置)。 / p>

首先我们得到文件:

from scipy.io.wavfile import read
samprate, wavdata = read('file.wav')

然后我们将文件拆分成块,其中块的数量取决于您想要测量音量的精确程度:

import numpy as np
chunks = np.array_split(wavdata, numchunks)

最后,我们计算每个块的体积:

dbs = [20*log10( sqrt(mean(chunk**2)) ) for chunk in chunks]

其中dbs现在是文件每个块的dB值列表(同样,不一定是真正的SPL声音级别)。

您还可以使用重叠块等以不同的方式轻松拆分数据。

参考文献:   - scipy.io.wavfile   - dB (SPL)

答案 1 :(得分:0)

以下是关于在Java中阅读音频文件和绘制波形以及波形概述的一些问题。

How can I create a sound file in Java

How can I draw sound data from my wav file?

Java Program to create a PNG waveform for an audio file

答案 2 :(得分:0)

对于那些试图在@Isaac 的回答中使用 Python 脚本的人,我已将其清理干净(我也不知道 Python,但我已经开始工作了)。一些注意事项:

  1. 您需要 python 3+ 才能使用统计包(请参阅这篇适用于 Mac 的优秀文章 - https://opensource.com/article/19/5/python-3-default-mac
  2. 你需要 scipy - 在 Mac 上它是:pip install scipy
from scipy.io.wavfile import read
samprate, wavdata = read('intro.wav')
import numpy as np
import math
import statistics 
# basically taking a reading every half a second - the size of the data 
# divided by the sample rate gives us 1 second chunks so I chop 
# sample rate in half for half second chunks
chunks = np.array_split(wavdata, wavdata.size/(samprate/2))
dbs = [20*math.log10( math.sqrt(statistics.mean(chunk**2)) ) for chunk in chunks]
print(dbs)