python - 如何使用麦克风作为音源检测音高?

标签 python audio speech-recognition microphone pitch

如何使用麦克风作为音源来检测音高? (并打印出来)。我已经看到一些允许通过 wav 文件保留音高的来源,但我想知道是否有办法为前者做到这一点。

这是我正在使用的基础

import speech_recognition as sr
r = sr.Recognizer()
mic = sr.Microphone()
with mic as source:
    r.adjust_for_ambient_noise(source, duration=0.3)
    audio = r.listen(source)
    transcript = r.recognize_google(audio)
    print(transcript)

编辑:具体来说,想要对男性/女性声音进行一般检测。

最佳答案

aubio具有良好的音高检测方法和 Python 绑定(bind)。以下是您可以使用它的方法:

import aubio
import numpy as np

samplerate = 44100
tolerance = 0.8
win_s = 4096 // downsample # fft size
hop_s = 512  // downsample # hop size

pitch_o = pitch("yin", win_s, hop_s, samplerate)
pitch_o.set_unit("Hz")
pitch_o.set_tolerance(tolerance)

signal_win = np.array_split(audio, np.arange(hop_s, len(audio), hop_s))

pitch_profile = []
for frame in signal_win[:-1]:
    pitch = pitch_o(frame)[0]
    if pitch > 0:
        pitch_profile.append(pitch)

if pitch_profile:
    pitch_array = np.array(pitch_profile)
    Q25, Q50, Q75 = np.quantile(pitch_array, [0.25, 0.50, 0.75])
    IQR = Q75 - Q25
    median = np.median(pitch_array)
    pitch_min = pitch_array.min()
    pitch_max = pitch_array.max()

显然,您需要以数组格式获取音频。接下来要观察的是,在呈现的代码中,我正在计算音高曲线的统计数据。原因是持续时间为 0.3 秒,这比通常用于音高跟踪的样本数要长得多。

其他示例:
  • Aubio demo
  • Audio Explorer - 我的代码。呈现的示例来自该代码。
  • 关于python - 如何使用麦克风作为音源检测音高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61736768/

    相关文章:

    Python 帮助——字典、键、值

    python - 根据长度向 df.Column 中的字符串添加尾随 0

    python - 日期差异与表示日期的元组

    C++ ASIO 驱动设置

    javascript - Microsoft 语音识别 PhraseLIst 未定义,是什么问题?

    java - Java Micro Edition 最好的语音识别库是什么?

    java - Sphinx4 找不到资源

    python - HDBSCAN 和近似预测的问题

    python - 如何避免Mac上的音频初始0.5秒延迟?

    javascript - angular2 html 5音频播放器ontimeupdate事件