Python初学者,导师要求完成一个项目,能够监测声音,并输出程序运行时检测到的有声音部分的文件。用gpt也调了,永远显示没有检测到音频,该如何修改代码呢,谢谢各位了
import pyaudio
import numpy as np
import soundfile as sf
# 参数设置
CHUNK_SIZE = 1024 # 音频帧的大小
FORMAT = pyaudio.paInt16 # 采样格式为16位整数
CHANNELS = 1 # 单声道
RATE = 44100 # 采样率
# 初始化 PyAudio
p = pyaudio.PyAudio()
# 打开音频输入流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK_SIZE)
# 计算瞬时能量函数
def compute_energy(data):
return np.sum(data ** 2) / len(data)
# 设置能量阈值
threshold = 0.001
# 保存音频的相关设置
output_filename = 'C:/Users/周佳/Desktop/output_audio.wav'
output_frames = []
# 开始读取音频流
stream.start_stream()
print("开始录音...")
# 控制录音结束
input("按 Enter 停止录音:")
# 停止读取音频流
stream.stop_stream()
stream.close()
p.terminate()
print("录音结束,保存音频...")
# 将有声音的部分保存到output_frames中
try:
while True:
audio_data = np.frombuffer(stream.read(CHUNK_SIZE), dtype=np.int16)
# 计算能量
energy = compute_energy(audio_data)
# 如果能量超过阈值,表示有声音
if energy > threshold:
# 将有声音的部分保存到output_frames中
output_frames.append(np.copy(audio_data)) # 使用np.copy()复制音频帧数据
except OSError:
pass
# 将output_frames转换为一维数组
if len(output_frames) > 0:
output_data = np.concatenate(output_frames)
# 保存output_data为音频文件
sf.write(output_filename, output_data, RATE)
print("音频保存成功:", output_filename)
else:
print("没有检测到有声音的音频帧")