基于python,写一个流式输入输出的录音程序
时间: 2024-11-03 14:18:19 浏览: 12
基于Python实现一个PoW的仿真程序.zip
5星 · 资源好评率100%
你可以使用Python的`pyaudio`库来创建一个简单的流式录音和播放程序。以下是一个基础示例,它会实时录制声音并将其回放出来:
```python
import pyaudio
import wave
class StreamRecorderPlayer:
def __init__(self, chunk_size=1024, sample_rate=44100, num_channels=1, file_path='recording.wav'):
self.chunk_size = chunk_size
self.sample_rate = sample_rate
self.num_channels = num_channels
self.file_path = file_path
self.p = pyaudio.PyAudio()
def start_recording(self):
self.stream = self.p.open(format=pyaudio.paInt16,
channels=self.num_channels,
rate=self.sample_rate,
input=True,
frames_per_buffer=self.chunk_size,
stream_callback=self.handle_audio)
print("Recording started... Press Ctrl+C to stop.")
self.stream.start_stream()
def handle_audio(self, in_data, frame_count, time_info, status_flags):
# 这里将录制的音频数据保存到wave文件中
with open(self.file_path, "ab") as f:
f.write(in_data)
# 如果你想立即播放,可以在这里加入一个类似的功能,但请注意这可能会导致同步问题
# 返回None表示数据已经处理,继续录音
return None, pyaudio.paContinue
def stop_recording(self):
self.stream.stop_stream()
self.stream.close()
self.p.terminate()
print(f"Recording stopped. File saved at {self.file_path}")
if __name__ == "__main__":
try:
recorder = StreamRecorderPlayer()
recorder.start_recording()
# 程序会持续运行,直到用户按下Ctrl+C停止
except KeyboardInterrupt:
recorder.stop_recording()
```
这个程序首先创建一个`StreamRecorderPlayer`类,该类包含了录音和播放的基本功能。`start_recording`方法打开一个音频流,开始接收用户的输入,然后将每帧音频数据保存到指定的wav文件中。`handle_audio`函数负责处理音频数据,这里仅简单地将其追加到文件中。
如果你想在录音的同时实时播放,可以在`handle_audio`方法中添加一个播放部分,但这通常需要更复杂的同步逻辑,因为Python的GIL可能会限制了并发处理音频的能力。
阅读全文