pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存


搬钱人
搬钱人 2022-09-20 09:20:00 50620
分类专栏: 资讯

pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

目录

输出结果

代码实现


输出结果

代码实现

  1. -*- coding: utf-8 -*-
  2. pyaudio:利用pyaudio从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
  3. import wave
  4. from pyaudio import PyAudio,paInt16
  5. import urllib urllib2
  6. import pycurl
  7. import urllib.request as urllib2
  8. import json
  9. framerate=8000 采样率
  10. NUM_SAMPLES=2000 采样点
  11. channels=1 一个声道
  12. sampwidth=2 两个字节十六位
  13. TIME=2 条件变量,可以设置定义录音的时间
  14. def save_wave_file(filename, data): save the date to the wav file
  15. wf = wave.open(filename, 'wb') 二进制写入模式
  16. wf.setnchannels(channels)
  17. wf.setsampwidth(sampwidth) 两个字节16位
  18. wf.setframerate(framerate) 帧速率
  19. wf.writeframes(b"".join(data)) 把数据加进去,就会存到硬盘上去wf.writeframes(b"".join(data))
  20. wf.close()
  21. def my_record():
  22. pa=PyAudio()
  23. stream=pa.open(format=paInt16,channels=1,rate=framerate,input=True,frames_per_buffer=NUM_SAMPLES)
  24. my_buf=[]
  25. count=0
  26. while count < TIME*8: 循环2*20次
  27. string_audio_data=stream.read(NUM_SAMPLES) 每读完2000个采样加1
  28. my_buf.append(string_audio_data)
  29. count+=1
  30. print('当前正在录音(同时录制系统内部和麦克风的声音)……')
  31. save_wave_file('03.wav',my_buf) 文件保存
  32. stream.close()
  33. def dump_res(buf): dump_res即dump_result,buf是curl从网上返回来的缓存
  34. print(buf)
  35. my_temp=json.loads(buf)
  36. my_list=my_temp['result']
  37. print(type(my_list))
  38. print(my_list[0]) 输出第一个
  39. print('dump_res函数调用成功!')
  40. def get_token(): 获取token
  41. apikey='2KeNr6nK6ZmMKAbdlM5PUaSC'
  42. secretkey='QuDTqg1cMehfwvvyKmZyifAnCoGFiZ3g'
  43. auth_url='https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id='+apikey+'&client_secret='+secretkey;
  44. res=urllib2.urlopen(auth_url) 获取服务器响应,res=urllib2.urlopen(auth_url)
  45. json_data=res.read() 读取到json_data中
  46. print(json_data,type(json_data))
  47. return json.loads(json_data)['access_token']
  48. def use_cloud(token): token类似一种访问权限等
  49. fp=wave.open(u'16k.wav','rb') 打开wav文件
  50. nf=fp.getnframes() 获得文件的采样点数量
  51. print('sampwidth',fp.getsampwidth())
  52. print('framerate',fp.getframerate())
  53. print('channels',fp.getnchannels())
  54. f_len=nf*2 获取文件长度,文件长度计算,每个采样点2个字节
  55. audio_data=fp.readframes(nf)
  56. cuid="XXXXXXXXXX" 硬件地址,my phone xiaomi MAC
  57. print(token)
  58. srv_url='http://vop.baidu.com/server_api'+'?cuid='+cuid+'&token='+token
  59. http_header=[
  60. 'Content-Type:audio/pcm;rate=8000', 音频,原先是pcm,可以改为wav
  61. 'Content-length:%d:' % f_len
  62. ]
  63. c=pycurl.Curl() 实例化curl
  64. c.setopt(pycurl.URL,str(srv_url)) (网址)
  65. c.setopt(c.HTTPHEADER, http_header) 网址头部
  66. c.setopt(c.POST, 1) 1表示调用post方法而不是get
  67. c.setopt(c.CONNECTTIMEOUT,80) 超时中断
  68. c.setopt(c.TIMEOUT,80) 下载超时
  69. c.setopt(c.WRITEFUNCTION,dump_res) 返回数据,dump_res,进行回调
  70. c.setopt(c.POSTFIELDS,audio_data) 数据
  71. c.setopt(c.POSTFIELDSIZE,f_len) 文件大小
  72. c.perform() 提交, pycurl.perform()
  73. print('use_cloud函数over!')
  74. if __name__ == "__main__":
  75. my_record()
  76. print('录音结束!')
  77. token = get_token()
  78. use_cloud(token)
  79. print('over!')

相关文章
ASR:基于pyaudio利用python进行语音生成、语音识别总结及其案例详细攻略

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=3922
赞同 0
评论 0 条
搬钱人L0
粉丝 0 发表 7 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2935
【软件正版化】软件正版化工作要点  2854
统信UOS试玩黑神话:悟空  2811
信刻光盘安全隔离与信息交换系统  2702
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1235
grub引导程序无法找到指定设备和分区  1205
点击报名 | 京东2025校招进校行程预告  162
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  160
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  156
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  154
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!