RuntimeWarning: invalid value encountered in sqrt rms = np.sqrt(np.mean(np.square(data)))
时间: 2024-03-05 15:48:54 浏览: 129
这个警告是因为计算RMS时,数据中可能会出现负值,导致取平方根时出现了负数,从而产生了无效值(NaN)。为了避免这个问题,可以将数据中的负数取绝对值后再计算RMS。
以下是修改后的示例代码:
```python
import pyaudio
import numpy as np
# 定义一些参数
RATE = 16000
CHUNK = 1024
VAD_THRESHOLD = 500
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
print("* 开始录音...")
while True:
# 读取一段音频数据
data = stream.read(CHUNK)
data = np.frombuffer(data, dtype=np.int16)
# 计算音量
rms = np.sqrt(np.mean(np.square(np.abs(data))))
# 如果音量大于阈值,则认为有人在说话
if rms > VAD_THRESHOLD:
print("有人在说话!")
print("* 结束录音...")
stream.stop_stream()
stream.close()
p.terminate()
```
该代码使用`np.abs`函数将数据中的负数取绝对值,然后计算RMS。如果音量大于预设的阈值,就会输出“有人在说话!”的提示信息。
阅读全文