介绍环境准备
python 问题
注意
本篇文章给大家分享的是有关利用python怎么对系统声音进行录制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
环境准备
python
- <李>波
李> <李>
pyaudio
波可以通过pip直接安装,在安装pyaudio时,通过正常的pip安装直接安装一直处于报错阶段,后来想到可以通过轮子直接安装。
在pypi提供的安装包中有对应的安装包,注意,不仅仅是python2和python3的区别,python3的小版本也有点差别。可杯具的是,小主电脑里装的是python3.8,后来想到还有一个网站可以安装pythonlibs,找到对应的版本后,下载下来。直接在文件所在目录,或者在安装中指定文件目录中执行安装
pip install /c/用户/根/下载/PyAudio-0.2.11-cp38-cp38-win_amd64。whl
代码和运行
def audio_record (out_file, rec_time): CHUNK 才能=1024 时间=FORMAT 才能;pyaudio.paInt16 #, 16位编码格式 CHANNELS 才能=,1,#,单声道 RATE 才能=,16000,#,16000采样频率 时间=p 才能;pyaudio.PyAudio () #,才能创建音频流 时间=dev_idx 才能;findInternalRecordingDevice (p) 时间=stream 才能;p.open(格式=格式,,#,音频流wav格式 ,,,,,,,,,=渠道,渠道,#,单声道 ,,,,,,,,,速度=,,#,采样率16000 ,,,,,,,,,输入=True, ,,,,,,,,,input_device_index=dev_idx, #,指定内录设备的id,可以不写,使用赢的默认录音设备 ,,,,,,,,,frames_per_buffer=块) 打印才能(“Start 录音…“) 时间=frames 才能;[],#,录制的音频流 #,才能录制音频数据 for 才能小姐:拷贝范围(0,,int(时间/RATE CHUNK *, rec_time)):, #,控制录音时间 ,,,data =, stream.read(块) ,,,frames.append(数据) #,才能录制完成 stream.stop_stream才能() stream.close才能() p.terminate才能() 打印才能(“Recording 做…“) #,才能保存音频文件 wf 才能=,wave.open (out_file, & # 39; wb # 39;) wf.setnchannels才能(渠道) wf.setsampwidth才能(p.get_sample_size(格式) wf.setframerate才能(率) wf.writeframes才能(b # 39; & # 39; . join(帧)) wf.close才能()
在使用默认录音设备时,发现是话筒录音,效果并不是太理想,所以就去查查能不能直接录系统的声音。
def findInternalRecordingDevice (p): #才能,要找查的设备名称中的关键字 时间=target 才能;& # 39;立体声混音& # 39; #,才能逐一查找声音设备 for 才能小姐:拷贝范围(p.get_device_count ()): ,,,devInfo =, p.get_device_info_by_index(我) ,,,印刷(devInfo) ,,,if devInfo[& # 39;名字# 39;];(目标),祝辞=,0,以及devInfo [& # 39; hostApi& # 39;],==, 0: ,,,,,#,打印(& # 39;已找到内录设备,序号是,& # 39;,我) ,,,,return 我 打印才能(& # 39;无法找到内录设备! & # 39;) return 才能;1
可以使用p.get_device_info_by_index()去查看系统有关声音的设备,通过设置为立体声混音就可以录制系统声音。
保存声音
def 保存(文件名): #,才能创建pyAudio对象 时间=p 才能;pyaudio.PyAudio () #,才能打开用于保存数据的文件 wf 才能=,wave.open(文件名,& # 39;wb # 39;) #,才能设置音频参数 wf.setnchannels才能(渠道) wf.setsampwidth才能(p.get_sample_size(格式) wf.setframerate才能(率) #,才能写入数据 wf.writeframes才能(b # 39; & # 39; . join (_frames)) #,才能关闭文件 wf.close才能() #,才能结束pyaudio p.terminate才能()
保存声音是通过上述代码进行保存,此处的_frames是个列表,是通过每录一个区块(数据流块),就把这一块的数据添加进去
然后只需要重新创建PyAudio对象,把这转个列表为字节串保存到文件中就可以了
问题
上述一般可以录到系统声音,但在执行的时候发现,并不能。
原因是:赢的输入设备中没有配置立体声混音
设置步骤:
- <李>
在赢得的声音调节出,右击打开声音设置
李> <李>找到管理声音设备
李> <李>在输入设备处启用立体声混音
李>就此,就完成了录制系统声音的需求
注意
上述操作,可以外放,可以插入3.5毫米耳机,但系统静音和tpye-c耳机插入的时候不能录到声音