Spaces:
Runtime error
Runtime error
| import pyaudio | |
| import wave | |
| import audioop | |
| class Record: | |
| def __init__(self, output_file, silence_threshold=1000): | |
| self.output_file = output_file | |
| self.silence_threshold = silence_threshold | |
| # 设置录音参数 | |
| self.format = pyaudio.paInt16 | |
| self.channels = 1 | |
| self.sample_rate = 44100 | |
| self.chunk = 1024 | |
| self.audio = pyaudio.PyAudio() | |
| def start_recording(self): | |
| # 打开音频流 | |
| stream = self.audio.open(format=self.format, | |
| channels=self.channels, | |
| rate=self.sample_rate, | |
| input=True, | |
| frames_per_buffer=self.chunk) | |
| print("开始录音...") | |
| frames = [] | |
| silence_counter = 0 | |
| # 录制音频 | |
| while True: | |
| data = stream.read(self.chunk) | |
| frames.append(data) | |
| # 计算音频能量(RMS) | |
| rms = audioop.rms(data, 2) # 2表示样本的宽度为2字节(16位) | |
| if rms < self.silence_threshold: | |
| silence_counter += 1 | |
| else: | |
| silence_counter = 0 | |
| # 如果连续一段时间都检测到静音,则认为录音结束 | |
| if silence_counter >= 100: # 假设每个chunk为10毫秒,连续1秒的静音 | |
| break | |
| print("录音结束.") | |
| # 关闭流 | |
| stream.stop_stream() | |
| stream.close() | |
| self.audio.terminate() | |
| # 将录制的音频保存到WAV文件 | |
| with wave.open(self.output_file, 'wb') as wf: | |
| wf.setnchannels(self.channels) | |
| wf.setsampwidth(self.audio.get_sample_size(self.format)) | |
| wf.setframerate(self.sample_rate) | |
| wf.writeframes(b''.join(frames)) | |
| def test(): | |
| # 创建Record对象并开始录音 | |
| output_file = "recording.wav" # 输出文件名 | |
| silence_threshold = 500 # 静音阈值 | |
| recorder = Record(output_file, silence_threshold) | |
| recorder.start_recording() | |
| # test() |