检查特定声音(输入:麦克风)

Check for a specific sound (input: microphone)

我的问题:我目前有一个包含我录制的特定声音的声音文件。我希望能够识别出该声音何时再次播放超过 2 秒。音量对我来说无关紧要,我希望能够识别出播放特定音符的时间。例如,该文件包含音符 A (la) 的录音,如果我在麦克风旁边的钢琴上弹奏音符 A,raspberry pi 将打印 "correct" 或其他内容。我无法识别音符,之前的研究建议找到频率/使用 FFT 函数,但我一直无法弄清楚。你推荐我应该使用的任何库来实现这个吗?

理想情况下,我能够识别外部声音的音高。一旦我有了音高,我就可以在一系列频率之间检查它。

您确实想使用像 FFT 这样的东西,numpyscipy 都提供了。这个想法是您收集麦克风输入的缓冲区,对其应用 FFT,然后您将尝试找出最强大的频率是否是您正在寻找的音符的频率。存在tables可以告诉你每个音符的频率是多少。

您实际上是在制作 spectrogram

如果你想要一个操作顺序:

  1. 建筑频率范围:
    1. 使用np.fft.fftfreq确定频率标度(N相同 长度作为你的缓冲区)
  2. 构建 table 个笔记
    1. 建立什么频率属于什么音符(使用参考)
    2. 确定误差范围
  3. 识别笔记(这部分在循环)

    1. 在 select 大小的缓冲区中收集信号

    2. 应用 FFT

    3. 在频域中找到最大值

    4. 在查找错误范围内寻找对应的注释table

有用的功能:

Numpy FFT

Numpy FFTFREQ

Numpy ARGMAX

其他有帮助的问题: