博客
关于我
Python听写汇总结果
阅读量:797 次
发布时间:2023-03-07

本文共 4507 字,大约阅读时间需要 15 分钟。

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
STATUS_FIRST_FRAME = 0 # 第一帧的标识
STATUS_CONTINUE_FRAME = 1 # 中间帧标识
STATUS_LAST_FRAME = 2 # 最后一帧的标识
finalResult = "" # 声明全局
class Ws_Param(object):
def __init__(self, APPID, APIKey, APISecret, AudioFile):
self.APPID = APPID
self.APIKey = APIKey
self.APISecret = APISecret
self.AudioFile = AudioFile
self.CommonArgs = {"app_id": self.APPID}
self.BusinessArgs = {"domain": "iat", "language": "zh_cn", "accent": "mandarin", "vinfo": 1, "vad_eos": 10000}
def create_url(self):
url = 'wss://ws-api.xfyun.cn/v2/iat'
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/iat HTTP/1.1"
signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'), hashlib.sha256).digest()
signature_sha = base64.b64encode(signature_sha).decode('utf-8')
authorization_origin = "api_key=%s, algorithm=hmac-sha256, headers=host date request-line, signature=%s" % (self.APIKey, signature_sha)
authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode('utf-8')
url = url + '?' + urlencode({"authorization": authorization, "date": date, "host": "ws-api.xfyun.cn"})
return url
def on_message(ws, message):
global finalResult
try:
code = json.loads(message)["code"]
sid = json.loads(message)["sid"]
if code != 0:
errMsg = json.loads(message)["message"]
print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))
else:
data = json.loads(message)["data"]["result"]["ws"]
result = ""
for i in data:
for w in i["cw"]:
result += w["w"]
print("sid:%s call success!,data is:%s" % (sid, json.dumps(data, ensure_ascii=False)))
finalResult += result
except Exception as e:
print("receive msg,but parse exception:", e)
def on_error(ws, error):
print("### error:", error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
frameSize = 8000 # 每一帧的音频大小
interval = 0.04 # 发送音频间隔(单位:s)
status = STATUS_FIRST_FRAME
with open(wsParam.AudioFile, "rb") as fp:
while True:
buf = fp.read(frameSize)
if not buf:
status = STATUS_LAST_FRAME
if status == STATUS_FIRST_FRAME:
d = {
"common": wsParam.CommonArgs,
"business": wsParam.BusinessArgs,
"data": {
"status": 0,
"format": "audio/L16;rate=16000",
"audio": str(base64.b64encode(buf), 'utf-8'),
"encoding": "raw"
}
}
ws.send(json.dumps(d))
status = STATUS_CONTINUE_FRAME
elif status == STATUS_CONTINUE_FRAME:
d = {
"data": {
"status": 1,
"format": "audio/L16;rate=16000",
"audio": str(base64.b64encode(buf), 'utf-8'),
"encoding": "raw"
}
}
ws.send(json.dumps(d))
elif status == STATUS_LAST_FRAME:
d = {
"data": {
"status": 2,
"format": "audio/L16;rate=16000",
"audio": str(base64.b64encode(buf), 'utf-8'),
"encoding": "raw"
}
}
ws.send(json.dumps(d))
time.sleep(1)
break
time.sleep(interval)
ws.close()
thread.start_new_thread(run, ())
请注意:以上代码仅为示例,具体参数配置请根据实际需求进行调整。代码中包含了WebSocket连接的实现,包括消息处理、错误处理、连接关闭等功能。如果需要更详细的功能扩展或优化,请根据实际应用场景进行调整。

转载地址:http://iqofk.baihongyu.com/

你可能感兴趣的文章
Python 中内置的最大堆 API
查看>>
Python 中只有一个 True 和一个 False 对象吗?
查看>>
python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
查看>>
Python 中多线程与多处理之间的区别
查看>>
Python 中如何使用 lambda 函数
查看>>
Python 中如何创建多行字符串?
查看>>
Python 中如何处理异常?
查看>>
Python 中如何实现列表的切片?
查看>>
Python 中如何实现字典的排序?
查看>>
Python 中常用的数据类型及相关操作详解
查看>>
Python 中的注意点_s2
查看>>
Python 中的生成器是什么?
查看>>
Python 中的离线语音转文本
查看>>
Python读写json文件的简单实现
查看>>
Python 中的线程
查看>>
Python 中的继承机制是什么样的?
查看>>
python读写excel之xlrd&xlwt&xlutils组合
查看>>
Python 中的装饰器是什么?
查看>>
Python 中的装饰器是如何工作的,有哪些实际应用场景?
查看>>
python读excel
查看>>