我正在尝试衡量潜在客户并引出wav文件。优选地,第一个和最后5秒左右。我基本上试图分配一个数字值,意思是“这首歌有一个缓慢的引导”或“这首歌有一个突然结束”。
我的想法是获得dB值的斜率,但我似乎无法找到一个能给我dB值的linux命令行工具。我知道可以测量它们,因为Audacity有一个波形(db)视图。
基本上我正在寻找一种方法来收集数据点以复制此图,这样我就可以得到斜率。
编辑 - 在java中工作
答案 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
答案 2 :(得分:0)
对于那些试图在@Isaac 的回答中使用 Python 脚本的人,我已将其清理干净(我也不知道 Python,但我已经开始工作了)。一些注意事项:
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)