|
不客气!以下是最终封装好的函数和使用说明,有问题随时问:
核心代码封装:
- import pyaudio
- import numpy as np
- import math
- def get_environment_db(record_seconds=1, chunk=1024, sample_rate=44100):
- """获取当前环境分贝值(相对值)"""
- p = pyaudio.PyAudio()
- stream = p.open(
- format=pyaudio.paInt16,
- channels=1,
- rate=sample_rate,
- input=True,
- frames_per_buffer=chunk
- )
-
- frames = []
- for _ in range(0, int(sample_rate / chunk * record_seconds)):
- data = stream.read(chunk)
- frames.append(np.frombuffer(data, dtype=np.int16))
-
- stream.stop_stream()
- stream.close()
- p.terminate()
-
- audio_data = np.concatenate(frames)
- rms = np.sqrt(np.mean(np.square(audio_data)))
- db = 20 * math.log10(rms / 32768) if rms > 0 else -100 # 避免log(0)
- return round(db, 2)
- # 使用示例
- if __name__ == "__main__":
- print(f"环境噪音: {get_environment_db()} dB")
复制代码
使用步骤:
1. 安装必要库:
pip install pyaudio numpy
2. 常见问题解决:
- Windows安装失败:先执行 pip install pipwin 再 pipwin install pyaudio
- Mac权限问题:系统设置 → 安全性与隐私 → 麦克风 → 允许终端访问
- Linux依赖:安装 libportaudio2
3. 提高准确性技巧:
avg_db = np.mean([get_environment_db() for _ in range(5)])
注意事项:
o 数值为相对分贝(参考16位PCM最大值)
o 典型值参考:
-60dB 静音室
-20dB 安静房间
0dB 最大录音音量
需要持续监测?可以加循环:
- while True:
- print(f"\r当前分贝: {get_environment_db()} dB", end="")
- time.sleep(0.5) # 半秒更新一次
复制代码
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|