如何使用Python实现一个持续监听麦克风音频输入并实时流式输出的程序,要求有声音时开始输入,没声音时关闭,期间麦克风不能关闭?
时间: 2024-11-03 17:17:56 浏览: 5
要在Python中实现一个持续监听麦克风的音频输入并实时流式输出的程序,你可以利用`pyaudio`库来处理音频。下面是一个简单的例子,它会在检测到声音时开始录音,没声音时暂停录音。注意,这个示例并没有严格控制麦克风始终开启,因为通常用户会主动关闭麦克风,但在一些硬件或操作系统级别,你可以尝试禁用暂停操作以保持麦克风常开。
```python
import pyaudio
import wave
from scipy.signal import rms
# 初始化参数
CHUNK = 1024 # 数据块大小
FORMAT = pyaudio.paInt16 # 16位编码
CHANNELS = 1 # 单声道
RATE = 44100 # 采样率
THRESHOLD = 1000 # 声音强度阈值(根据实际环境调整)
def record_audio():
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
input_device_index=0) # 使用默认麦克风
frames = []
while True:
data = stream.read(CHUNK)
rms_val = rms(data)
if rms_val > THRESHOLD:
print("检测到声音,开始录音...")
frames.extend(data)
elif rms_val < THRESHOLD and frames:
print("检测到静默,暂停录音...")
break
# 结束录音并将数据写入文件
output_file = "recording.wav"
with wave.open(output_file, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
stream.stop_stream()
stream.close()
p.terminate()
print(f"录音已保存至'{output_file}'")
try:
record_audio()
except KeyboardInterrupt:
print("\n程序中断请求,录音已终止。")
#
阅读全文