2010-09-15 68 views
1

这是这个问题的延续here在录制的声音中识别音符 - 第2部分 - Python

这是我为了用于获取样品的代码:

spf = wave.open(speech,'r') 
sound_info = spf.readframes(-1) 
sound_info = fromstring(sound_info, 'Int16') 

长度sound_info的是194560,这是4.4倍的44100采样率。声音文件的长度为2.2秒,那么sound_info的长度应该是它的两倍吗?

另外,我只能在上找到足够的信息,为什么使用FFT来生成频谱

我想分割一个声音并分析一秒钟的多个分数的频谱,而不是整个声音文件。


帮助将非常感激。 :)


这是基本的sound_info图表

plot(sound_info) 

这是FFT图表

freq = [abs(x.real) for x in fft(sound_info)] 
plot(freq) 

+1

'是不是sound_info应该是它的长度的两倍?':stereo? – bobince 2010-09-15 10:54:38

+0

感谢那个bobince,但那我该如何解读sound_info?因为数据是顺序的 – RadiantHex 2010-09-15 11:14:34

回答

1

如果你的wav文件有两个通道,那么sound_info的长度应该是2 *采样率*持续时间(秒)。频道数据交替出现,因此如果您将所有值篡改为一维数组data,则与一个频道关联的值将为data[::2],另一个为data[1::2]


粗略地讲,光滑函数可以被表示为正弦和余弦波的总和(与各种振幅和频率)。

FFT(快速傅里叶变换)将函数与那些正弦和余弦波的系数(振幅)相关联。也就是说,函数与系数序列之间存在一对一的映射关系。

如果一个声音样本主要由一个音符组成,那么它的FFT将会有一个非常大(绝对值)的系数,其他的将会非常小。该系数对应于特定的正弦波,具有特定的频率。这是音符的频率。

+0

@unutbu感谢您的真棒回复! :)你知道为什么sound_info是序列化吗? – RadiantHex 2010-09-15 11:26:30

+1

+1:音乐声音具有泛音。其中很多:它们是基本频率的整数倍。此外,真实的仪器包括大量的噪声以及时移信号(即多普勒频移),这使得识别基本挑战。 – 2010-09-15 12:36:17

+0

@ S.Lott谢谢你。是否没有办法为每个样本获取频率列表?或者每个样本仅限于一个频率值? :| – RadiantHex 2010-09-15 12:42:44

0

不要重新发明轮子:)

退房http://librosa.github.io,尤其是对短时傅立叶变换(STFT),或在你的情况,而像一个恒定的Q变换(CQT)的一部分。

但首先要做的事情是: 假设我们从音频文件中获得了立体声信号(2声道)。现在,我们通过创建平均通道(将两个通道相加并除以2)来丢弃在音频文件的两个通道中编码的空间信息。我们现在有一个单声道(1声道)的信号。由于我们有数字信号,每个时间点都称为样本。

现在开始有趣的部分,我们通过连续采样(512或2的倍数是标准值)将信号切割成小块(称为帧)。 通过对每个这些帧进行离散傅里叶变换(DFT),我们得到一个称为频谱图的时频表示。 任何进一步的概念(重叠等)可在每一个DSP书或在类似这样的实验室课程资源被读取: https://www.audiolabs-erlangen.de/content/05-fau/professor/00-mueller/02-teaching/2016s_apl/LabCourse_STFT.pdf

注意,DFT的频率轴上线性地间隔开。在西方音乐系统中,一个八度音分为12个半音,其中心频率以对数方式间隔。查看上面有关分段策略的​​脚本,了解如何从线性STFT接收对数间隔的频率轴。 但是,这种方法是非常基本的,还有很多其他方法,或许更好的方法。

现在回到您的笔记识别问题。 第一:这是一个非常艰难的。 :) 如上所述,乐器演奏的真实声音包含泛音。 另外,如果你有兴趣的转录通过完整的乐队演奏的音符,您可以通过其他音乐家等

谈起方法得到的干扰,你可以尝试一下:人 地块的现今使用非负矩阵fatorization(NMF或类似的LDPCA)或神经网络来完成这项任务。例如,NMF包含在scikit-learn中。 要开始,我会推荐NMF。只能使用单音色音色,即一次演奏单个乐器。用简单衰减的泛音结构初始化模板,看看会发生什么。

+0

下面是来自librosa的一些示例: http://nbviewer.jupyter.org/github/librosa/librosa/blob/master/examples/LibROSA%20demo.ipynb – 2016-05-28 17:13:58