python调用讯飞语音合成API接口实现文字转语音,然后转换音频格式_python pcm转mp3(1)

四、找到开发者文档,仔细阅读

语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心 (xfyun.cn)")

五、根据开发者文档的python demo代码,加上你的API信息:

# -*- coding:utf-8 -*-
#
#   author: iflytek
#
#  本demo测试时运行的环境为:Windows + Python3.7
#  本demo测试成功运行时所安装的第三方库及其版本如下:
#   cffi==1.12.3
#   gevent==1.4.0
#   greenlet==0.4.15
#   pycparser==2.19
#   six==1.12.0
#   websocket==0.2.1
#   websocket-client==0.56.0
#   合成小语种需要传输小语种文本、使用小语种发音人vcn、tte=unicode以及修改文本编码方式
#  错误码链接:https://www.xfyun.cn/document/error-code (code返回错误码时必看)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import websocket
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
import time
import ssl
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
import _thread as thread
import os


STATUS_FIRST_FRAME = 0  # 第一帧的标识
STATUS_CONTINUE_FRAME = 1  # 中间帧标识
STATUS_LAST_FRAME = 2  # 最后一帧的标识


class Ws_Param(object):
    # 初始化
    def __init__(self, APPID, APIKey, APISecret, Text):
        self.APPID = APPID
        self.APIKey = APIKey
        self.APISecret = APISecret
        self.Text = Text

        # 公共参数(common)
        self.CommonArgs = {"app_id": self.APPID}
        # 业务参数(business),更多个性化参数可在官网查看
        self.BusinessArgs = {"aue": "raw", "auf": "audio/L16;rate=16000", "vcn": "xiaoyan", "tte": "utf8"}
        self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-8')), "UTF8")}
        #使用小语种须使用以下方式,此处的unicode指的是 utf16小端的编码方式,即"UTF-16LE"”
        #self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-16')), "UTF8")}

    # 生成url
    def create_url(self):
        url = 'wss://tts-api.xfyun.cn/v2/tts'
        # 生成RFC1123格式的时间戳
        now = datetime.now()
        date = format_date_time(mktime(now.timetuple()))

        # 拼接字符串
        signature_origin = "host: " + "ws-api.xfyun.cn" + "\n"
        signature_origin += "date: " + date + "\n"
        signature_origin += "GET " + "/v2/tts " + "HTTP/1.1"
        # 进行hmac-sha256进行加密
        signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
                                 digestmod=hashlib.sha256).digest()
        signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')

        authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (
            self.APIKey, "hmac-sha256", "host date request-line", signature_sha)
        authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
        # 将请求的鉴权参数组合为字典
        v = {
            "authorization": authorization,
            "date": date,
            "host": "ws-api.xfyun.cn"
        }
        # 拼接鉴权参数,生成url
        url = url + '?' + urlencode(v)
        # print("date: ",date)
        # print("v: ",v)
        # 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
        # print('websocket url :', url)
        return url

def on_message(ws, message):
    try:
        message =json.loads(message)
        code = message["code"]
        sid = message["sid"]
        audio = message["data"]["audio"]
        audio = base64.b64decode(audio)
        status = message["data"]["status"]
        print(message)
        if status == 2:
            print("ws is closed")
            ws.close()
        if code != 0:
            errMsg = message["message"]
            print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))
        else:

            with open('./demo.pcm', 'ab') as f:
                f.write(audio)

    except Exception as e:
        print("receive msg,but parse exception:", e)



# 收到websocket错误的处理
def on_error(ws, error):
    print("### error:", error)


# 收到websocket关闭的处理
def on_close(ws):
    print("### closed ###")


# 收到websocket连接建立的处理
def on_open(ws):
    def run(*args):
        d = {"common": wsParam.CommonArgs,
             "business": wsParam.BusinessArgs,
             "data": wsParam.Data,
             }
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!



### 一、Python所有方向的学习路线



Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)



### 二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。



![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)



### 三、全套PDF电子书



书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

![](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)



### 四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



### 五、实战案例



光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。



![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)



### 六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。



![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)  

![](https://img-blog.csdnimg.cn/img_convert/d2d978bb523c810abca3abe69e09bc1a.png)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,你需要申请百度的开发者账号,并获取你的应用的 API Key 和 Secret Key。 然后,你需要安装百度的 API 库,在命令行中使用 `pip install baidu-aip` 命令安装。 接下来,你可以使用以下代码调用百度 API 进行语音文字: ```python from aip import AipSpeech # 定义常量 APP_ID = 'your_app_id' API_KEY = 'your_api_key' SECRET_KEY = 'your_secret_key' # 初始化AipSpeech对象 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取音频文件 def get_file_content(file_path): with open(file_path, 'rb') as fp: return fp.read() # 调用百度的语音识别API def recognize(file_path): audio_data = get_file_content(file_path) result = client.asr(audio_data, 'pcm', 16000, { 'dev_pid': 1536, }) print(result) # 调用 recognize 函数 recognize('your_audio_file.pcm') ``` 上面的代码会将音频文件 `your_audio_file.pcm` 中的语音转换为文字,并输出到控制台。 注意: 百度的语音识别 API 支持的音频格式有限,建议使用 PCM 格式的音频文件。 ### 回答2: Python 能够通过 HTTP 请求来调用百度 API 实现实时语音文字。首先,需要安装 Python 的 `requests` 库来发送 HTTP 请求。同时,还需要在百度开发者平台创建一个应用并获取 API Key 和 Secret Key。下面是一个用 Python 编写的示例程序: ```python import requests # 设置百度 API 相关信息 API_KEY = "YOUR_API_KEY" SECRET_KEY = "YOUR_SECRET_KEY" # 获取token def get_token(): url = "https://aip.baidubce.com/oauth/2.0/token" params = { "grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY } response = requests.post(url, params=params) token = response.json().get("access_token") return token # 识别语音 def speech_to_text(audio): token = get_token() url = "http://vop.baidu.com/server_api" # 将语音文件作为二进制数据进行传输 data = { "format": "wav", "rate": 16000, "channel": 1, "token": token, "cuid": "YOUR_CUID", "len": len(audio), "speech": audio } headers = { "Content-Type": "application/json" } response = requests.post(url, json=data, headers=headers) result = response.json().get("result") return result # 读取语音文件 def read_audio(file_path): with open(file_path, "rb") as audio_file: audio = audio_file.read() return audio # 将语音文件为文字 def convert_audio_to_text(file_path): audio = read_audio(file_path) text = speech_to_text(audio) return text # 主程序 if __name__ == "__main__": file_path = "your_audio.wav" result = convert_audio_to_text(file_path) print(result) ``` 注意:上述程序中的 `YOUR_API_KEY`、`YOUR_SECRET_KEY` 和 `YOUR_CUID` 需要替换为你在百度开发者平台创建应用后获取到的相关信息。`your_audio.wav` 是待转换的语音文件的路径。 以上代码是一个简单的百度实时语音文字的示例程序,可以根据需要进行扩展和优化,比如加入实时录音、错误处理等功能。 ### 回答3: 编写一个调用百度API的实时语音文字程序涉及以下步骤: 1. 导入必要的库和模块: ```python import requests from pyaudio import PyAudio, paInt16 import wave import base64 ``` 2. 设置百度API信息: 你需要去百度开放平台申请语音识别API的应用,并获取相应的API Key和Secret Key。 3. 设置录音参数并初始化PyAudio对象: ```python RATE = 16000 CHANNELS = 1 FORMAT = paInt16 CHUNK = 1024 audio = PyAudio() ``` 4. 创建录音函数以及将录音数据为base64编码的函数: ```python def record(): stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] while True: data = stream.read(CHUNK) frames.append(data) # 这里实现你的停止录音条件,例如按下某个键 stream.stop_stream() stream.close() audio.terminate() return frames def get_base64_data(frames): frame_data = b''.join(frames) base64_data = base64.b64encode(frame_data) return base64_data ``` 5. 创建函数用于调用百度API进行语音识别: ```python def get_speech_to_text(base64_data): url = 'https://openapi.baidu.com/oauth/2.0/token' headers = {'Content-Type': 'application/json; charset=UTF-8'} data = { 'grant_type': 'client_credentials', 'client_id': 'YOUR_API_KEY', 'client_secret': 'YOUR_SECRET_KEY' } response = requests.post(url, headers=headers, data=data) access_token = response.json()['access_token'] url = 'http://vop.baidu.com/server_api' headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Connection': 'keep-alive' } data = { 'format': 'wav', 'rate': RATE, 'channel': CHANNELS, 'token': access_token, 'cuid': 'YOUR_CUID', 'speech': base64_data } response = requests.post(url, headers=headers, json=data) result = response.json()['result'] return result ``` 6. 编写主程序来调用以上函数: ```python frames = record() base64_data = get_base64_data(frames) result = get_speech_to_text(base64_data) print(result) ``` 以上是用Python编写调用百度API的实时语音文字程序的基本步骤。根据需要可以添加适当的异常处理和界面或命令行的交互。注意在具体实现时,请根据百度API文档进行相应的参数设置和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值