0
点赞
收藏
分享

微信扫一扫

Python访问百度云语音

无聊到学习 2022-03-11 阅读 47

#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')
举报

相关推荐

0 条评论