pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
生活随笔
收集整理的這篇文章主要介紹了
pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pyaudio:基于pyaudio利用Python編程從電腦端錄制音頻保存到指定文件夾+將錄音上傳服務器+錄音進行識別并轉為文本保存
?
?
?
目錄
輸出結果
代碼實現
?
?
?
輸出結果
?
?
代碼實現
# -*- coding: utf-8 -*-#pyaudio:利用pyaudio從電腦端錄制音頻保存到指定文件夾+將錄音上傳服務器+錄音進行識別并轉為文本保存 import wave from pyaudio import PyAudio,paInt16import 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 filewf = 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個采樣加1my_buf.append(string_audio_data)count+=1print('當前正在錄音(同時錄制系統內部和麥克風的聲音)……')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(): #獲取tokenapikey='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 MACprint(token)srv_url='http://vop.baidu.com/server_api'+'?cuid='+cuid+'&token='+tokenhttp_header=['Content-Type:audio/pcm;rate=8000', #音頻,原先是pcm,可以改為wav'Content-length:%d:' % f_len]c=pycurl.Curl() #實例化curlc.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!')?
相關文章
ASR:基于pyaudio利用python進行語音生成、語音識別總結及其案例詳細攻略
?
總結
以上是生活随笔為你收集整理的pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之GUI:基于Python的
- 下一篇: Py之Queue:python库之Que