#!/usr/bin/python
from pyaudio import PyAudio,paInt16
import numpy as np
from datetime import datetime
import wave
class recorder:
NUM_SAMPLES=2000
SAMPLING_RATE=8000
LEVEL=500
COUNT_NUM=20
SAVE_LENGTH=8
TIME_COUNT=60
Voice_String=[]
def savewav(self,filename):
wf=wave.open(filename,'wb')
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(self.SAMPLING_RATE)
wf.writeframes(np.array(self.Voice_String).tostring())
wf.close()
def recorder(self):
pa=PyAudio()
stream=pa.open(format=paInt16,channels=1,rate=self.SAMPLING_RATE,input=True,frames_per_buffer=self.NUM_SAMPLES)
save_count=20
save_buffer=[]
time_count=self.TIME_COUNT
while True:
time_count=-1
string_audio_data=stream.read(self.NUM_SAMPLES)
audio_data=np.fromstring(string_audio_data,dtype=np.short)
large_sample_count=np.sum(audio_data>self.LEVEL)
print(np.max(audio_data))
if large_sample_count>self.COUNT_NUM:
save_count=self.SAVE_LENGTH
else:
save_count-=1
if save_count<0:
save_count=0
if save_count>0:
save_buffer.append(string_audio_data)
else:
if len(save_buffer)>0:
self.Voice_String=save_buffer
save_buffer=[]
print('Record a piece of voice successfully!')
stream.stop_stream()
stream.close()
pa.terminate()
return True
if time_count==0:
if len(save_buffer)>0:
self.Voice_String=save_buffer
save_buffer=[]
print('Record a piece of voice successfully!')
stream.stop_stream()
stream.close()
pa.terminate()
return True
else:
stream.stop_stream()
stream.close()
pa.terminate()
return False
if __name__=='__main__':
r=recorder()
r.recorder()
r.savewav('test-self.wav')
参考链接:python调用pyaudio使用麦克风录制wav声音文件
本文创建于2022.10.26/15.9,修改于2022.10.26/15.9