本文为大家分享了python实现录音小程序的具体代码,供大家参考,具体内容如下
学习目标:掌握python的pyaudio扩展包和Wave模块录制语音的方法
- Wav音频:声道数,采样频率,量化位数
python Wav包是自带的,pyaudio需要下载
1
|
pip3 install pyaudio |
python读Wav文件:
1
2
3
4
5
6
7
|
fp = wave. open (' ',' rb') nf = fp.getnframes() #获取文件的采样点数量 print ( 'sampwidth:' ,fp.getsampwidth()) print ( 'framerate:' ,fp.getframerate()) print ( 'channels:' ,fp.getnchannels()) f_len = nf * 2 #文件长度计算,每个采样2个字节 audio_data = fp.readframes(nf) |
python写Wav文件:
1
2
3
4
5
6
7
8
|
def save_wave_file(filename,data): '''save the date to the wavfile''' wf = wave. open (filename, 'wb' ) wf.setnchannels(channels) #声道 wf.setsampwidth(sampwidth) #采样字节 1 or 2 wf.setframerate(framerate) #采样频率 8000 or 16000 wf.writeframes(b"".join(data)) #https://stackoverflow.com/questions/32071536/typeerror-sequence-item-0-expected-str-instance-bytes-found wf.close() |
利用PyAudio录音:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def my_record(): pa = PyAudio() stream = pa. open ( format = paInt16,channels = 1 , rate = framerate, input = True , frames_per_buffer = NUM_SAMPLES) my_buf = [] count = 0 while count<TIME * 20 : #控制录音时间 string_audio_data = stream.read(NUM_SAMPLES) #一次性录音采样字节大小 my_buf.append(string_audio_data) count + = 1 print ( '.' ) save_wave_file( '01.wav' ,my_buf) stream.close() |
利用PyAudio播放音频
1
2
3
4
5
6
7
8
9
10
11
12
|
chunk = 2014 def play(): wf = wave. open (r "01.wav" , 'rb' ) p = PyAudio() stream = p. open ( format = p.get_format_from_width(wf.getsampwidth()),channels = wf.getnchannels(),rate = wf.getframerate(),output = True ) while True : data = wf.readframes(chunk) if data = = "": break stream.write(data) stream.close() p.terminate() |
完整录音播放的demo
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
|
import wave from pyaudio import PyAudio,paInt16 framerate = 8000 NUM_SAMPLES = 2000 channels = 1 sampwidth = 2 TIME = 2 def save_wave_file(filename,data): '''save the date to the wavfile''' wf = wave. open (filename, 'wb' ) wf.setnchannels(channels) wf.setsampwidth(sampwidth) wf.setframerate(framerate) wf.writeframes(b"".join(data)) wf.close() def my_record(): pa = PyAudio() stream = pa. open ( format = paInt16,channels = 1 , rate = framerate, input = True , frames_per_buffer = NUM_SAMPLES) my_buf = [] count = 0 while count<TIME * 20 : #控制录音时间 string_audio_data = stream.read(NUM_SAMPLES) my_buf.append(string_audio_data) count + = 1 print ( '.' ) save_wave_file( '01.wav' ,my_buf) stream.close() chunk = 2014 def play(): wf = wave. open (r "01.wav" , 'rb' ) p = PyAudio() stream = p. open ( format = p.get_format_from_width(wf.getsampwidth()),channels = wf.getnchannels(),rate = wf.getframerate(),output = True ) while True : data = wf.readframes(chunk) if data = = "": break stream.write(data) stream.close() p.terminate() if __name__ = = '__main__' : my_record() print ( 'Over!' ) play() |
更多用法详见 pyaudio文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/yexiaohhjk/article/details/73132562