python - 使用 PyAudio 录制音频时出现异常幅度
问题描述
我正在尝试使用 PyAudio 从我的麦克风中读取几秒钟的音频。录制音频后,我想将其保存到输出文件并绘制录制音频的幅度。这是我目前正在使用的代码:
import wave
import pyaudio
import numpy as np
import matplotlib.pyplot as plt
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
SAMPLING_FREQUENCY = 44100
RECORD_SECONDS = 2
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(
format=FORMAT,
channels=CHANNELS,
rate=SAMPLING_FREQUENCY,
input=True,
frames_per_buffer=CHUNK
)
# print('Press any key to start recording:')
# input()
print("* recording")
frames = []
for i in range(0, int((SAMPLING_FREQUENCY * RECORD_SECONDS) / CHUNK)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(SAMPLING_FREQUENCY)
wf.writeframes(b''.join(frames))
wf.close()
amplitudes = np.frombuffer(b''.join(frames), dtype='int16')
plt.plot(amplitudes)
plt.show()
我尝试在安静的环境中进行录音(接近完全静音),虽然音频被正确录制,但如果您查看幅度图,您会发现有时在开始时会有异常高的值记录,如下所示(幅度在 y 轴上):
另外,如果你听录音,你会清楚地听到开头的“咔哒”声。有时,在完全相同的条件下(即安静的环境),您会得到如下图所示的精美图:
显然,在这种情况下,您在听录音时不会听到任何“咔哒”声。
有谁知道什么可能导致这个问题?我尝试过使用不同的麦克风,但问题仍然存在。代码有什么问题吗?
PS 如果您想知道,“咔哒”声不是因为我单击鼠标或按键盘键运行脚本。
解决方案
推荐阅读
- numpy - 获得密集和稀疏数组的统一行为的最佳方法?
- javascript - 如何修复 TypeError:无法读取未定义 REACT 的属性“地图”
- python - 如果输入的数字介于两个不同的数字之间,我该如何打印?
- laravel - Laravel Dynamic Dropdown 从单表 laravel 的列中获取数据
- wordpress - WooCommerce 多供应商的拆分购物车
- python - 在非序列图中将数据馈送到 keras 瓶颈
- php - Chargebee api 实施与计划和订阅
- reactjs - 如何在 React 中显示来自天气 api 的数据?
- php - 如何阻止页面连续加载
- python - 如何将 one2many 下拉数据中的值绑定到 odoo 12 中的列字段?