【问题标题】:Check for a specific sound (input: microphone)检查特定声音(输入:麦克风)
【发布时间】:2020-02-04 16:53:32
【问题描述】:

我的问题:我目前有一个声音文件,其中包含我录制的特定声音。我希望能够识别该声音何时再次播放超过 2 秒。音量对我来说并不重要,我希望能够识别播放该特定音符的时间。例如,该文件包含音符 A (la) 的录音,如果我在麦克风旁边的钢琴上弹奏音符 A,覆盆子 pi 将打印“正确”或其他内容。我无法识别音符,之前的研究建议找到频率/使用 FFT 功能,但我一直无法弄清楚。您是否推荐我应该使用的任何库来实现这一点?

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

【问题讨论】:

    标签: python audio fft frequency pyaudio


    【解决方案1】:

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

    您实际上是在制作spectrogram

    如果您想要操作顺序:

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

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

      2. 应用 FFT

      3. 在频域中查找最大值

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

    有用的功能:

    Numpy FFT

    Numpy FFTFREQ

    Numpy ARGMAX

    其他有用的问题:

    Maintain a streaming microphone input in Python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多