Spaces:
Running
Running
File size: 2,080 Bytes
7088d16 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
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() |