【问题标题】:How to detect pitch using mic as source?如何使用麦克风作为音源检测音高?
【发布时间】:2020-08-27 09:52:05
【问题描述】:

如何使用麦克风作为音源来检测音高? (并打印出来)。我已经看到一些允许通过 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)

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

【问题讨论】:

    标签: python audio speech-recognition microphone pitch


    【解决方案1】:

    aubio 具有良好的音高检测方法和 Python 绑定。以下是你可以如何使用它:

    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 秒,这比通常用于音高跟踪的样本数要长得多。

    其他例子:

    【讨论】:

    • 谢谢!我将从这个开始
    • 我是新手。如何以数组格式获取音频?此外,音频没有 len(),所以我也遇到了麻烦
    猜你喜欢
    • 2015-11-26
    • 2011-09-05
    • 2013-09-18
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多