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

开发者社区> 一个处女座的程序猿> 正文

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

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

输出结果

image.png


代码实现

# -*- coding: utf-8 -*-

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

import wave

from pyaudio import PyAudio,paInt16

import urllib  #urllib2

import pycurl

import urllib.request as urllib2

import json

framerate=8000   #采样率

NUM_SAMPLES=2000 #采样点

channels=1  #一个声道

sampwidth=2 #两个字节十六位

TIME=2      #条件变量,可以设置定义录音的时间

def save_wave_file(filename, data):   #save the date to the wav file

   wf = wave.open(filename, 'wb')  #二进制写入模式

   wf.setnchannels(channels)  

   wf.setsampwidth(sampwidth)  #两个字节16位

   wf.setframerate(framerate)  #帧速率

   wf.writeframes(b"".join(data))  #把数据加进去,就会存到硬盘上去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*8: #循环2*20次

       string_audio_data=stream.read(NUM_SAMPLES) #每读完2000个采样加1

       my_buf.append(string_audio_data)

       count+=1

       print('当前正在录音(同时录制系统内部和麦克风的声音)……')

   save_wave_file('03.wav',my_buf) #文件保存

   stream.close()

   

def dump_res(buf):  #dump_res即dump_result,buf是curl从网上返回来的缓存

   print(buf)

   

   my_temp=json.loads(buf)

   my_list=my_temp['result']

   print(type(my_list))

   print(my_list[0])  #输出第一个

   print('dump_res函数调用成功!')

   

def get_token():  #获取token

   apikey='2KeNr6nK6ZmMKAbdlM5PUaSC'

   secretkey='QuDTqg1cMehfwvvyKmZyifAnCoGFiZ3g'

   auth_url='https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id='+apikey+'&client_secret='+secretkey;   #

   

   res=urllib2.urlopen(auth_url) #获取服务器响应,res=urllib2.urlopen(auth_url)

   json_data=res.read()         #读取到json_data中

   print(json_data,type(json_data))

   return json.loads(json_data)['access_token']

def use_cloud(token):  #token类似一种访问权限等

   fp=wave.open(u'16k.wav','rb')             #打开wav文件

   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)  #

   

   cuid="XXXXXXXXXX"   #硬件地址,my phone xiaomi MAC

   print(token)

   srv_url='http://vop.baidu.com/server_api'+'?cuid='+cuid+'&token='+token

   http_header=[

       'Content-Type:audio/pcm;rate=8000',  #音频,原先是pcm,可以改为wav

       'Content-length:%d:' % f_len

   ]

   

   c=pycurl.Curl()  #实例化curl

   c.setopt(pycurl.URL,str(srv_url))     #(网址)  

   

   c.setopt(c.HTTPHEADER, http_header)   #网址头部  

   c.setopt(c.POST, 1)                   #1表示调用post方法而不是get  

   c.setopt(c.CONNECTTIMEOUT,80)      #超时中断  

   c.setopt(c.TIMEOUT,80)             #下载超时  

   c.setopt(c.WRITEFUNCTION,dump_res) #返回数据,dump_res,进行回调  

   c.setopt(c.POSTFIELDS,audio_data)    #数据  

   c.setopt(c.POSTFIELDSIZE,f_len)      #文件大小

   c.perform()                           #提交, pycurl.perform()

   print('use_cloud函数over!')

if __name__ == "__main__":

#     my_record()

   print('录音结束!')

   token = get_token()

   use_cloud(token)

   print('over!')


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
IOCP模型与网络编程
IOCP模型与网络编程 一。前言:        在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模式,装饰模式之类的那些呢?嘿嘿,不过好像是一个挺好玩的东西,挺好奇是什么东西来的,又是一个新知识啦~于是,开始去寻找一大堆的资料,为这个了解做准备,只是呢,有时还是想去找一本书去系统地学习一下,毕竟网络的资料还是有点零散。
875 0
C#遍历指定文件夹中的所有文件和子文件夹
参考:http://www.cnblogs.com/skylaugh/archive/2012/09/23/2698850.html DirectoryInfo TheFolder=new DirectoryInfo(folderFullName); //遍历文件夹foreach(DirectoryInfo NextFolder in TheFolder.
1991 0
ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢。
759 0
IDA反汇编/反编译静态分析iOS模拟器程序(二)加载文件与保存数据库
启动windows版的IDA,在Quickstart界面点击New,弹出一个对话框选择文件。也可以按取消后再把文件拖进IDA。由于Mac版的IDA没注册,没有save功能,所以只好先把Mac上的东西拷贝到windows再打开了。
1018 0
SSH 文件上传错误:encountered 1 errors during the transfer终极解决方法:
以下方法简单排序,从简单到复杂: 法一:在SSH Secure File Transfer(上传文件那个),打开“Operation”菜单,打开“File Transfer Mode”子菜单,再选择“Binary”,OK! 法二:把服务器上同名文件删掉再传 法三:如果文件在桌面上,将要上传的文件复制到其它分区,再上传! 法四:到 http://winscp.
816 0
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下
21 0
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下
11 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载