# -*- coding: utf-8 -*-
|
|
"""
|
Speech
|
"""
|
|
from .base import AipBase
|
from .base import base64
|
from .base import hashlib
|
from .base import json
|
|
class AipSpeech(AipBase):
|
"""
|
Aip Speech
|
"""
|
|
__asrUrl = 'http://vop.baidu.com/server_api'
|
|
__ttsUrl = 'http://tsn.baidu.com/text2audio'
|
|
def _isPermission(self, authObj):
|
"""
|
check whether permission
|
"""
|
|
return True
|
|
def _proccessRequest(self, url, params, data, headers):
|
"""
|
参数处理
|
"""
|
|
token = params.get('access_token', '')
|
|
if not data.get('cuid', ''):
|
data['cuid'] = hashlib.md5(token.encode()).hexdigest()
|
|
if url == self.__asrUrl:
|
data['token'] = token
|
data = json.dumps(data)
|
else:
|
data['tok'] = token
|
|
if 'access_token' in params:
|
del params['access_token']
|
|
return data
|
|
def _proccessResult(self, content):
|
"""
|
formate result
|
"""
|
|
try:
|
return super(AipSpeech, self)._proccessResult(content)
|
except Exception as e:
|
return {
|
'__json_decode_error': content,
|
}
|
|
def asr(self, speech=None, format='pcm', rate=16000, options=None):
|
"""
|
语音识别
|
"""
|
|
data = {}
|
|
if speech:
|
data['speech'] = base64.b64encode(speech).decode()
|
data['len'] = len(speech)
|
|
data['channel'] = 1
|
data['format'] = format
|
data['rate'] = rate
|
|
data = dict(data, **(options or {}))
|
|
return self._request(self.__asrUrl, data)
|
|
def synthesis(self, text, lang='zh', ctp=1, options=None):
|
"""
|
语音合成
|
"""
|
data ={}
|
|
data['tex'] = text
|
data['lan'] = lang
|
data['ctp'] = ctp
|
|
data = dict(data, **(options or {}))
|
|
result = self._request(self.__ttsUrl, data)
|
|
if '__json_decode_error' in result:
|
return result['__json_decode_error']
|
|
return result
|