語音合成-百度

代碼地址:https://github.com/Baidu-AIP/speech-demo/blob/master/rest-api-tts/python/tts.py

# coding=utf-8
import sys
import json

#判斷是否是py3版本岳颇,默認(rèn)py3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:
    from urllib.request import urlopen
    from urllib.request import Request
    from urllib.error import URLError
    from urllib.parse import urlencode 
    #將字典里面所有的鍵值轉(zhuǎn)化為query-string格式(key=value&key=value)畏鼓,并且將中文轉(zhuǎn)碼
    from urllib.parse import quote_plus 
    #可編碼斜線"/" 這個(gè)主要是根據(jù)api url要求格式
else:
    import urllib2
    from urllib import quote_plus
    from urllib2 import urlopen
    from urllib2 import Request
    from urllib2 import URLError
    from urllib import urlencode

API_KEY = '4E1BG9lTnlSeIf1NQFlrSq6h'
SECRET_KEY = '544ca4657ba8002e3dea3ac2f5fdd241'
#上面的碼需要自己申請生成

TEXT = "歡迎使用百度語音合成。"
#TEXT可以封裝起來

# 發(fā)音人選擇, 0為普通女聲,1為普通男生,3為情感合成-度逍遙,4為情感合成-度丫丫,默認(rèn)為普通女聲
PER = 4
# 語速呈枉,取值0-15,默認(rèn)為5中語速
SPD = 5
# 音調(diào),取值0-15猖辫,默認(rèn)為5中語調(diào)
PIT = 5
# 音量酥泞,取值0-9,默認(rèn)為5中音量
VOL = 5
# 下載的文件格式, 3:mp3(default) 4: pcm-16k 5: pcm-8k 6. wav
AUE = 3

FORMATS = {3: "mp3", 4: "pcm", 5: "pcm", 6: "wav"}
FORMAT = FORMATS[AUE] #選取MP3的格式

CUID = "123456PYTHON" 
#用戶唯一標(biāo)識住册,用來區(qū)分用戶婶博,填寫機(jī)器 MAC 地址或 IMEI 碼,長度為60以內(nèi)

TTS_URL = 'http://tsn.baidu.com/text2audio'
#語音合成api的地址

class DemoError(Exception):
    pass


"""  TOKEN start """

TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'
SCOPE = 'audio_tts_post'  # 有此scope表示有tts能力荧飞,沒有請?jiān)诰W(wǎng)頁里勾選

#獲取token凡人,從而啟動(dòng)應(yīng)用
def fetch_token():
    print("fetch token begin")
    params = {'grant_type': 'client_credentials',
              'client_id': API_KEY,
              'client_secret': SECRET_KEY}
    post_data = urlencode(params)
    if (IS_PY3):
        post_data = post_data.encode('utf-8')
    req = Request(TOKEN_URL, post_data)
    try:
        f = urlopen(req, timeout=5)
        result_str = f.read()
    except URLError as err:
        print('token http response http code : ' + str(err.code))
        result_str = err.read()
    if (IS_PY3):
        result_str = result_str.decode()

    print(result_str)
    result = json.loads(result_str)
    print(result)
    if ('access_token' in result.keys() and 'scope' in result.keys()):
        if not SCOPE in result['scope'].split(' '):
            raise DemoError('scope is not correct')
        print('SUCCESS WITH TOKEN: %s ; EXPIRES IN SECONDS: %s' % (result['access_token'], result['expires_in']))
        return result['access_token']
    else:
        raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response')


"""  TOKEN end """

if __name__ == '__main__':
    token = fetch_token()
    tex = quote_plus(TEXT)  # 此處TEXT需要兩次urlencode
    print(tex)
    params = {'tok': token, 'tex': tex, 'per': PER, 'spd': SPD, 'pit': PIT, 'vol': VOL, 'aue': AUE, 'cuid': CUID,
              'lan': 'zh', 'ctp': 1}  # lan ctp 固定參數(shù)

    data = urlencode(params)
    print('test on Web Browser' + TTS_URL + '?' + data)

    req = Request(TTS_URL, data.encode('utf-8'))
    has_error = False
    try:
        f = urlopen(req)
        result_str = f.read()

        headers = dict((name.lower(), value) for name, value in f.headers.items())

        has_error = ('content-type' not in headers.keys() or headers['content-type'].find('audio/') < 0)
    except  URLError as err:
        print('asr http response http code : ' + str(err.code))
        result_str = err.read()
        has_error = True

    save_file = "error.txt" if has_error else 'result.' + FORMAT
    with open(save_file, 'wb') as of:
        of.write(result_str)

    if has_error:
        if (IS_PY3):
            result_str = str(result_str, 'utf-8')
        print("tts api  error:" + result_str)

print("result saved as :" + save_file)

應(yīng)用版本:

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
#在上面代碼中,常量APP_ID在百度云控制臺中創(chuàng)建叹阔,常量API_KEY與
#SECRET_KEY是在創(chuàng)建完畢應(yīng)用后挠轴,系統(tǒng)分配給用戶的,均為字符串耳幢,
#用于標(biāo)識用戶岸晦,為訪問做簽名驗(yàn)證,可在AI服務(wù)控制臺中的應(yīng)用列表中查看睛藻。
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})
#這樣我們就獲得了 result

#保存result启上,或者彈出錯(cuò)誤信息
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

代碼地址:https://blog.csdn.net/u011519550/article/details/84981585

//獲取mp3文件的時(shí)間長度
from mutagen.mp3 import MP3
audio = MP3("/home/wangjinyu/Desktop/Linkin Park - Iridescent.mp3")
print(audio.info.length)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市店印,隨后出現(xiàn)的幾起案子冈在,更是在濱河造成了極大的恐慌,老刑警劉巖按摘,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件包券,死亡現(xiàn)場離奇詭異,居然都是意外死亡炫贤,警方通過查閱死者的電腦和手機(jī)溅固,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兰珍,“玉大人侍郭,你說我怎么就攤上這事÷雍樱” “怎么了励幼?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長口柳。 經(jīng)常有香客問我,道長有滑,這世上最難降的妖魔是什么跃闹? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上望艺,老公的妹妹穿的比我還像新娘苛秕。我一直安慰自己,他們只是感情好找默,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布艇劫。 她就那樣靜靜地躺著,像睡著了一般惩激。 火紅的嫁衣襯著肌膚如雪店煞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天风钻,我揣著相機(jī)與錄音顷蟀,去河邊找鬼。 笑死骡技,一個(gè)胖子當(dāng)著我的面吹牛鸣个,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播布朦,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囤萤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了是趴?” 一聲冷哼從身側(cè)響起涛舍,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎右遭,沒想到半個(gè)月后做盅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窘哈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年吹榴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滚婉。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡图筹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出让腹,到底是詐尸還是另有隱情远剩,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布骇窍,位于F島的核電站瓜晤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腹纳。R本人自食惡果不足惜痢掠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一驱犹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧足画,春花似錦雄驹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至象缀,卻和暖如春蔬将,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背攻冷。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工娃胆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人等曼。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓里烦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親禁谦。 傳聞我的和親對象是個(gè)殘疾皇子胁黑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容