gpt4 book ai didi

python - 在 WAV 文件中查找音符

转载 作者:太空狗 更新时间:2023-10-30 02:11:26 24 4
gpt4 key购买 nike

我想弄清楚如何将 WAV 文件中的数据分离到它的组成注释中。我加载 WAV 文件:

import scipy.io.wavfile as wavfile
rate, data = wavfile.read('scale.wav')
time = np.arange(len(data[:,0]))*1.0/rate

并绘制

plt.plot(time, data[:,0])
plt.show()

这给了我 this picture ,这是其中有八个音符的钢琴音阶。我想要一种方法来隔离每个音符,这样我就可以找到它的频率并找出正在播放的音符。一旦我将笔记分开,我就可以处理剩下的事情。

我已经尝试找到最大值,但是最大值太多并且需要多次迭代才能将其降低到我想要的最大值,这是一种不可靠的方法,因为进行过多的迭代会消除一些较低的振幅峰值.及时获得音符的长度会很好。

编辑:所以这就像你们先生们所说的那样非常复杂。我现在想我只想找到“极端”峰值,然后找到这些峰值之后的极端最小值,并将其用作我的笔记,因为我们不需要太大的数据片段来计算它的频率。我遇到的问题是,有很多峰,很难只找到我想要的峰。有什么想法吗?

最佳答案

可能最简单和最有趣的事情是计算 spectrogram你的数据,这基本上是你的数据的短部分的光谱图,根据时间绘制。一定要使频率标度为对数,因为钢琴上键的频率是指数空间。在 Python 中,您可以使用函数 specgram计算这个,它包含在 matplotlib 中。参见示例 this google image search对于这如何寻找不同类型的音乐。也看看一些可以播放MP3/WAV并带有可视化插件的电脑程序,我记得Winamp在10多年前就有播放现场频谱图的方法。

这是一个有趣的练习,但如果你想使用这种技术自动转录一些音乐的音符,请让我警告你:这是一个非常困难的问题,科学家们已经研究了很多年。例如,一个问题是大多数乐器会产生大量谐波,这会混淆任何自动查找音符的算法。忘记任何带有人声或打击乐的音乐,因为它们会产生大量宽带噪声(尤其是字母“s”和踩镲),几乎无法识别任何其他音符。

如果您想要更有趣,请查看 Q 变换(参见 wikipedia 以及从那里引用的论文)。您可以将其视为频谱图,但沿频率轴的 bin 以对数方式间隔(例如,钢琴音阶上的每个二分音符或四分之一音符的 bin)。与标准频谱图相比,此方法的优势在于每个音符具有恒定数量的频率区间,而线性频率标度的低音区间很少,而高音区间太多。我不知道这是否适用于 numpy,您可能需要自己编写代码。

关于python - 在 WAV 文件中查找音符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22226059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com