pyqt5和pyaudio实现录音放音功能
时间: 2024-03-02 14:21:14 浏览: 33
可以使用PyQt5和PyAudio库实现录音和放音功能。下面是一个简单的示例代码:
```python
import sys
import pyaudio
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
class AudioRecorder(QWidget):
def __init__(self):
super().__init__()
# 初始化PyAudio
self.audio = pyaudio.PyAudio()
# 创建布局和按钮
layout = QVBoxLayout()
self.record_button = QPushButton("Record", self)
self.play_button = QPushButton("Play", self)
# 添加按钮到布局
layout.addWidget(self.record_button)
layout.addWidget(self.play_button)
# 设置主窗口布局
self.setLayout(layout)
# 绑定按钮点击事件
self.record_button.clicked.connect(self.start_recording)
self.play_button.clicked.connect(self.play_recording)
# 初始化录音状态和声音数据
self.is_recording = False
self.record_data = []
def start_recording(self):
if not self.is_recording:
self.is_recording = True
self.record_data = []
self.record_stream = self.audio.open(format=pyaudio.paInt16, channels=1, rate=44100,
input=True, frames_per_buffer=1024)
def play_recording(self):
if not self.is_recording and self.record_data:
self.play_stream = self.audio.open(format=pyaudio.paInt16, channels=1, rate=44100,
output=True)
for data in self.record_data:
self.play_stream.write(data)
self.play_stream.stop_stream()
self.play_stream.close()
def closeEvent(self, event):
# 关闭窗口时停止录音并释放资源
if self.is_recording:
self.is_recording = False
self.record_stream.stop_stream()
self.record_stream.close()
self.audio.terminate()
event.accept()
def keyPressEvent(self, event):
# 按下空格键开始/停止录音
if event.key() == Qt.Key_Space:
if self.is_recording:
self.is_recording = False
self.record_stream.stop_stream()
self.record_stream.close()
self.record_data.append(b''.join(self.record_buffer))
else:
self.is_recording = True
self.record_buffer = []
self.record_stream = self.audio.open(format=pyaudio.paInt16, channels=1, rate=44100,
input=True, frames_per_buffer=1024)
if __name__ == '__main__':
app = QApplication(sys.argv)
recorder = AudioRecorder()
recorder.show()
sys.exit(app.exec_())
```
这个程序创建了一个窗口,其中包含“Record”和“Play”两个按钮。点击“Record”按钮将开始录音,点击“Play”按钮将播放录音。程序还允许通过按下空格键开始/停止录音。
录音数据存储在`record_data`变量中,以字节串的形式存储。播放录音时,程序将遍历这个列表并写入声音流。