#Time:2022/02/24
# Author:Xiaohong
#内容: 参考麦子学院LamaPig课程实现如下功能
#1. my_record() 调用pyaudio 来录音,存储为WAV文件
#2. get_token():访问 百度云语音 网站,根据自己申请的应用Key 获取本次访问的 Token
#3.use_cloud(): 访问 百度云语音 网站,根据 Token,上传 wav 文件
#4.dump_res(): 获取 百度返回结果,并 Print
源代码如下:
# -*- coding: utf-8 -*-
import wave # pip3 install wave
# import pyaudio
from pyaudio import PyAudio, paInt16 # 直接用pip安装的pyaudio不支持3.7
# 若安装失败的话,下载对应的whl 文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio
# 若还有问题,可参考这篇文章 https://blog.csdn.net/leader_ww/article/details/123031766
import pycurl, urllib
import urllib.request
import json
framerate = 8000
NUM_SAMPLES = 2000
channels = 1
sampwidth = 2
TIME = 5
def save_wave_file(filename, data):
wf = wave.open(filename, 'wb')
wf.setnchannels(channels)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
for i in data:
wf.writeframes(i)
wf.close()
# 调用pyaudio 来录音,存储为WAV文件
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 * 10:
string_audio_data = stream.read(NUM_SAMPLES)
my_buf.append(string_audio_data)
count += 1
print("..")
print('begin:')
# print(my_buf)
save_wave_file('01.wav', my_buf)
stream.close()
# 获取 百度返回结果,并 Print
def dump_res(buf):
print(buf)
my_temp = json.loads(buf)
my_list = my_temp['result']
print(my_list[0])
# 访问 百度云语音 网站,根据自己申请的应用Key 获取本次访问的 Token
def get_token():
apiKey = "XXXXXXXXXX" #自己申请的api Key
secretKey = "YYYYYYYYYYYYYYYYYYYYYYY" #自己申请的Secret Key
auth_url = (
"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="
+ apiKey
+ "&client_secret="
+ secretKey
)
# print(auth_url)
res = urllib.request.urlopen(auth_url)
# res = urllib.urlopen(auth_url)
json_data = res.read()
# print(json_data)
# print('.....')
# print(json.loads(json_data))
return json.loads(json_data)['access_token']
# 访问 百度云语音 网站,根据 Token,上传 wav 文件
def use_cloud(token):
fp = wave.open(u'01.wav', 'rb')
nf = fp.getnframes()
print('sampwidth:', fp.getsampwidth())
print('framerate:', fp.getframerate())
print('channels:', fp.getnchannels())
f_len = nf * 2
audio_data = fp.readframes(nf)
cuid = "4d36e972-e325-11ce-bfc1-08002be10318"
srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token
http_header = ['Content-Type:audio/pcm;rate=8000', 'Content-Length:%d' % f_len]
c = pycurl.Curl()
c.setopt(pycurl.URL, str(srv_url))
c.setopt(c.HTTPHEADER, http_header)
c.setopt(c.POST, 1)
c.setopt(c.CONNECTTIMEOUT, 80)
c.setopt(c.TIMEOUT, 80)
c.setopt(c.WRITEFUNCTION, dump_res)
c.setopt(c.POSTFIELDS, audio_data)
c.setopt(c.POSTFIELDSIZE, f_len)
c.perform()
my_record()
print('2:')
use_cloud(get_token())
print('Over')