<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你用Python打造一個(gè)語(yǔ)音合成系統(tǒng)

          共 5138字,需瀏覽 11分鐘

           ·

          2020-11-19 21:07

          擊上方“Python爬蟲(chóng)與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書(shū)籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書(shū)

          大弦嘈嘈如急雨,小弦切切如私語(yǔ)。

          /前言/

          ???平時(shí)我們聊天的時(shí)候,也許會(huì)想著錄制一些自己的聲音,而且還想有點(diǎn)特色,也就是所謂的變聲,今天我們要說(shuō)的就是這個(gè)變聲器的制作,說(shuō)的高大上點(diǎn)就是語(yǔ)音合成系統(tǒng)。

          ????這個(gè)語(yǔ)音合成系統(tǒng),能實(shí)現(xiàn)個(gè)性化語(yǔ)音的錄制與存儲(chǔ)。


          /軟件依賴/

          使用sublime text 3 開(kāi)發(fā),申請(qǐng)百度開(kāi)放平臺(tái)賬號(hào)進(jìn)行開(kāi)發(fā)。


          /具體實(shí)現(xiàn)/

          1、打開(kāi)百度開(kāi)放這平臺(tái)創(chuàng)建一個(gè)應(yīng)用拿到關(guān)鍵參數(shù),如圖所示:

          2、因?yàn)槲覀兪褂肞ython開(kāi)發(fā)一款智能語(yǔ)音合成系統(tǒng),所以需要Python SDK ,可以在下圖中找到:

          3、找到之后可以看看它的使用說(shuō)明。

          4、然后創(chuàng)建一個(gè)應(yīng)用,步驟依次如下圖所示:

          5、之后如下圖所示:

          6、再按照下圖所示進(jìn)行操作:

          7、這樣就拿到了三個(gè)重要的參數(shù):

          APP_ID:應(yīng)用id

          API_KEY:應(yīng)用鑰匙

          SECRET_KEY:安全碼

          拿到以上關(guān)鍵參數(shù)之后,接下來(lái)就可以開(kāi)始淦了!


          /下載和配置百度語(yǔ)音客戶端/

          1、下載百度Python api

          pip install  baidu-aip
          2、配置百度語(yǔ)音客戶端,具體步驟如下。

          3、新建AipSpeech,代碼如下。

          from aip import AipSpeech
          """ 你的 APPID AK SK """APP_ID = '你的 App ID'API_KEY = '你的 Api Key'SECRET_KEY = '你的 Secret Key'
          client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

          4、配置AipSpeech。如果用戶需要配置AipSpeech的網(wǎng)絡(luò)請(qǐng)求參數(shù)(一般不需要配置),可以在構(gòu)造AipSpeech之后調(diào)用接口設(shè)置參數(shù),目前只支持以下參數(shù):

          接口說(shuō)明
          setConnectionTimeoutInMillis建立連接的超時(shí)時(shí)間(單位:毫秒
          setSocketTimeoutInMillis通過(guò)打開(kāi)的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間(單位:毫秒)

          5、建立鏈接,生成音頻文件,如下圖所示。

          6、可以看出,成功生成音頻文件會(huì)返回二進(jìn)制文件流。這樣還只是生成一個(gè)最簡(jiǎn)單的音頻文件,我們還可以將他生成多種聲音,參數(shù)如下表所示:

          參數(shù)類型描述是否必須
          textString合成的文本,使用UTF-8編碼, 請(qǐng)注意文本長(zhǎng)度必須小于1024字節(jié)
          cuidString用戶唯一標(biāo)識(shí),用來(lái)區(qū)分用戶, 填寫機(jī)器 MAC 地址或 IMEI 碼,長(zhǎng)度為60以內(nèi)
          spdString語(yǔ)速,取值0-9,默認(rèn)為5中語(yǔ)速
          pitString音調(diào),取值0-9,默認(rèn)為5中語(yǔ)調(diào)
          volString音量,取值0-15,默認(rèn)為5中音量
          perString發(fā)音人選擇, 0為女聲,1為男聲, 3為情感合成-度逍遙,4為情感合成-度丫丫,默認(rèn)為普通女

          ????這就是人工智能中的語(yǔ)音合成技術(shù),調(diào)用百度的SDK,只用了幾分鐘,就完成了一年的開(kāi)發(fā)量。

          7、當(dāng)然有失敗就避免不了成功,一般請(qǐng)求失敗會(huì)有這幾種情況:

          1)錯(cuò)誤返回格式

          若請(qǐng)求錯(cuò)誤,服務(wù)器將返回的JSON文本包含以下參數(shù):

          • error_code:錯(cuò)誤碼。

          • error_msg:錯(cuò)誤描述信息,幫助理解和解決發(fā)生的錯(cuò)誤。

          2)錯(cuò)誤碼

          錯(cuò)誤碼含義
          500不支持的輸入
          501輸入?yún)?shù)不正確
          502token驗(yàn)證失敗
          503合成后端錯(cuò)誤

          ????看到上面這些參數(shù)是不是想躍躍欲試了了。哈哈,那就趕緊解放我們的雙手吧!


          /程序?qū)崿F(xiàn)/

          ????因?yàn)槲覀兪且獙⑺蛟斐梢粋€(gè)語(yǔ)音合成的系統(tǒng),所以當(dāng)然得有界面才好看,具體實(shí)現(xiàn)如下。

          1、編寫程序主界面,具體代碼實(shí)現(xiàn)如下。

          class play:    def __init__(self):        self.root=tk.Tk() #初始化窗口        self.root.title("語(yǔ)音合成系統(tǒng)") #窗口名稱        self.root.geometry("700x700") #設(shè)置窗口大小        self.root.resizable(width=True,height=True)#設(shè)置窗口是否可變,寬不可變,高可變,默認(rèn)為True        self.lb=tk.Label(self.root,text='請(qǐng)選擇語(yǔ)音類型')#標(biāo)簽        self.tt=tk.Text(self.root,width=80,height=30) #多行文本框        self.cb=ttk.Combobox(self.root, width=12)  #下拉列表框        #設(shè)置下拉列表框的內(nèi)容           self.cb['values']=('請(qǐng)選擇-----','甜美型','蘿莉型','大叔型','精神小伙型')        self.cb.current(0)    #將當(dāng)前選擇狀態(tài)置為0,也就是第一項(xiàng)        self.cb.bind("<>",self.go)  #綁定go函數(shù),然后觸發(fā)事件        self.lb1=tk.Label(self.root,text='請(qǐng)輸入文件名:')        self.e=tk.Entry(self.root,width=30,show=None, font=('Arial', 12)) #文本框        self.b1=tk.Button(self.root, text='生成音頻文件', width=10,height=1,command=self.sc) #按鈕         #各個(gè)組件的位置        self.b1.place(x=200,y=520)        self.lb.place(x=30,y=30)        self.cb.place(x=154,y=30)        self.e.place(x=130,y=490)        self.lb1.place(x=30,y=490)        self.tt.place(x=30,y=60)        self.root.mainloop()     #啟動(dòng)主頁(yè)面

          這樣就算完成了程序的主界面了。


          2、一起來(lái)看下它長(zhǎng)啥樣,如下圖所示:

          小伙伴們,是不是覺(jué)得很簡(jiǎn)潔大氣呢?


          3、綁定下拉列表框事件

          在這里,我們需要對(duì)如何獲取下拉列表框的選項(xiàng)要了解。言歸正傳,直接上代碼:

          def go(self,*arg):  # *arg是為了接受多個(gè)如同列表的參數(shù),還有個(gè)**kwarg能接受如同字典的參數(shù)        #百度api        self.APP_ID = '18386899'          self.API_KEY = 'OcPQ4cGoGBRtW23jemKvgmU5'        self.SECRET_KEY = 'n2rGtvq9HmOGxgxG8H9a5kqFOes8ggHx'        self.client = AipSpeech(self.APP_ID,self.API_KEY,self.SECRET_KEY)#初始化端口建立連接        if self.cb.get()=='請(qǐng)選擇-----':            self.tt.delete('1.0','end') #清除多行文本框的內(nèi)容        elif self.cb.get()=='甜美型':   #獲取下拉列表框的選項(xiàng)來(lái)設(shè)置不同的音,下同            self.res=self.client.synthesis(self.tt.get('0.0','end'),'zh',1,{'vol':3,'spd':3,'pit':4,'per':0})             return self.res #返回音頻信息 ,下同        elif self.cb.get()=='蘿莉型':            self.res=self.client.synthesis(self.tt.get('0.0','end'),'zh',1,{'vol':2,'spd':2,'pit':3,'per':0})            return self.res        elif self.cb.get()=='大叔型':            self.res=self.client.synthesis(self.tt.get('0.0','end'),'zh',1,{'vol':5,'spd':7,'pit':6,'per':1})             return self.res        elif self.cb.get()=='精神小伙型':            self.res=self.client.synthesis(self.tt.get('0.0','end'),'zh',1,{'vol':7,'spd':8,'pit':8,'per':1})            return self.res

          4、判斷內(nèi)容的大小并生成文件

          百度語(yǔ)音api里有個(gè)限制,就是單個(gè)音頻生成是有限制的,不能超過(guò)1024字節(jié)。鑒于此,所以需要在這里做個(gè)判斷:

          def sc(self):        self.go() #引入go函數(shù),不然下面的self.res 沒(méi)法調(diào)用        aa=self.tt.get('0.0','end') #多行文本框內(nèi)容為空        ab=os.path.dirname(sys.argv[0])+os.sep+self.e.get()+'.mp3'#文件名的地址,與程序同目錄        if len(aa)>=1024: #判斷長(zhǎng)度是否超過(guò)1024            messagebox.showerror(title = '出錯(cuò)了!',message='^_^最多不超過(guò)1024個(gè)字節(jié)^_^')        else:            if not os.path.exists(ab): #如果沒(méi)有這個(gè)文件則創(chuàng)建                with open(ab,'wb') as f:                    f.write(self.res)  #將音頻信息寫入到文件                    #生成結(jié)束給一個(gè)提示                    messagebox.showinfo(title = '完畢!', message='生成完畢,文件在程序目錄下')            else:                messagebox.showerror(title='出錯(cuò)了!',message='文件名已存在') #有這個(gè)文件就提示

          5、接下來(lái),我們只需將這幾個(gè)功能寫入到一個(gè)類中即可,然后啟動(dòng)這個(gè)類。

          play()

          6、當(dāng)我輸入一段話后,大家可以看到它就生成了一個(gè)音頻文件。而且讀取的時(shí)候和我們輸入的內(nèi)容一模一樣,比如我輸入一段代碼,見(jiàn)下圖:

          7、之后會(huì)得到下圖所示的情形。

          8、最后的效果如下圖所示。

          完美收工,哈哈哈!


          /小結(jié)/

          1、本文基于Python編程語(yǔ)言,結(jié)合百度開(kāi)放平臺(tái),通過(guò)調(diào)用其接口,打造了一款簡(jiǎn)易的語(yǔ)音合成系統(tǒng),方法行之有效,歡迎小伙伴們積極嘗試。

          2、需要本文代碼的小伙伴可以在后臺(tái)回復(fù)“語(yǔ)音合成”四個(gè)字進(jìn)行獲取。

          ??? 想學(xué)習(xí)更多關(guān)于Python的知識(shí),可以參考學(xué)習(xí)網(wǎng)址:http://pdcfighting.com/,點(diǎn)擊閱讀原文,可以直達(dá)噢~

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說(shuō)一兩句吧~~

          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九哥艹逼网 | 天堂网最新网址 | 亚洲天堂视频在线观看 | 亚洲a v | 亚洲久久成人 |