求一串代码
实时检测麦克风,打印声音的频率。
打印间隔可以调节。
学习用,希望注释写清楚点。
# -*- encoding:utf-8 -*-
import pyaudio as pa
import numpy as np
from scipy import fft as spfft
def spectrum_analyser(data, rate):
"""频谱分析
data - 采集到的声音离散数据
rate - 采样频率
"""
T = (data.shape[0]-1)/rate # 信号时长
valid = int(np.ceil(data.shape[0]/2))
dforce = np.abs(spfft.fft(data)[:valid])/data.shape[0]
f = np.argmax(dforce)/T # 信号频率
return f
def start(rate=8000, secs=0.5, idle=0.5, chunk=1024):
"""连续测试声音频率
rate - 采样频率
secs - 每次采样时长(秒)
idle - 为了消除噪声,每次采样忽略起始信号的时长(秒)
chunk - 声卡读写缓冲区大小
"""
ac = pa.PyAudio()
stream = ac.open(
format = pa.paInt16, # 设置量化精度:每个采样数据占用的位数(2字节)
channels = 1, # 设置单声道模式
rate = rate, # 设置采样频率
frames_per_buffer = chunk, # 设置声卡读写缓冲区
input = True # 设置声卡输出模式
)
while True:
data = b''
idle_len, valid_len = int(2*rate*idle), int(2*rate*secs)+2
while len(data) < idle_len + valid_len:
data += stream.read(chunk)
data = np.frombuffer(data[idle_len:idle_len+valid_len], dtype=np.int16)
f = spectrum_analyser(data, rate)
print(f)
if __name__ == '__main__':
# 启动频率计
start()
你是的系统是windows还是linux?
参考:
https://www.csdn.net/tags/NtzaggxsNjY0NjktYmxvZwO0O0OO0O0O.html
还没用过这个库,有空我来试试,看代码应该不是很难的