回到首页

通过pyaudio使用麦克风录音

#!/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