<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打造一個語音合成系統(tǒng)

          共 5032字,需瀏覽 11分鐘

           ·

          2021-02-06 08:14


          /前言/

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

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


          /軟件依賴/

          使用sublime text 3 開發(fā),申請百度開放平臺賬號進(jìn)行開發(fā)。


          /具體實現(xiàn)/

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

          2、因為我們使用Python開發(fā)一款智能語音合成系統(tǒng),所以需要Python SDK ,可以在下圖中找到:

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

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

          5、之后如下圖所示:

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

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

          APP_ID:應(yīng)用id

          API_KEY:應(yīng)用鑰匙

          SECRET_KEY:安全碼

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


          /下載和配置百度語音客戶端/

          1、下載百度Python api

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

          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ò)請求參數(shù)(一般不需要配置),可以在構(gòu)造AipSpeech之后調(diào)用接口設(shè)置參數(shù),目前只支持以下參數(shù):

          接口說明
          setConnectionTimeoutInMillis建立連接的超時時間(單位:毫秒
          setSocketTimeoutInMillis通過打開的連接傳輸數(shù)據(jù)的超時時間(單位:毫秒)

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

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

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

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

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

          1)錯誤返回格式

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

          • error_code:錯誤碼。

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

          2)錯誤碼

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

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


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

          ????因為我們是要將它打造成一個語音合成的系統(tǒng),所以當(dāng)然得有界面才好看,具體實現(xiàn)如下。

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

          class play:    def __init__(self):        self.root=tk.Tk() #初始化窗口        self.root.title("語音合成系統(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='請選擇語音類型')#標(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']=('請選擇-----','甜美型','蘿莉型','大叔型','精神小伙型')        self.cb.current(0)    #將當(dāng)前選擇狀態(tài)置為0,也就是第一項        self.cb.bind("<>",self.go)  #綁定go函數(shù),然后觸發(fā)事件        self.lb1=tk.Label(self.root,text='請輸入文件名:')        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) #按鈕         #各個組件的位置        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()     #啟動主頁面

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


          2、一起來看下它長啥樣,如下圖所示:

          小伙伴們,是不是覺得很簡潔大氣呢?


          3、綁定下拉列表框事件

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

          def go(self,*arg):  # *arg是為了接受多個如同列表的參數(shù),還有個**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()=='請選擇-----':            self.tt.delete('1.0','end') #清除多行文本框的內(nèi)容        elif self.cb.get()=='甜美型':   #獲取下拉列表框的選項來設(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)容的大小并生成文件

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

          def sc(self):        self.go() #引入go函數(shù),不然下面的self.res 沒法調(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: #判斷長度是否超過1024            messagebox.showerror(title = '出錯了!',message='^_^最多不超過1024個字節(jié)^_^')        else:            if not os.path.exists(ab): #如果沒有這個文件則創(chuàng)建                with open(ab,'wb') as f:                    f.write(self.res)  #將音頻信息寫入到文件                    #生成結(jié)束給一個提示                    messagebox.showinfo(title = '完畢!', message='生成完畢,文件在程序目錄下')            else:                messagebox.showerror(title='出錯了!',message='文件名已存在') #有這個文件就提示

          5、接下來,我們只需將這幾個功能寫入到一個類中即可,然后啟動這個類。

          play()

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

          7、之后會得到下圖所示的情形。

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

          完美收工,哈哈哈!


          /小結(jié)/

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

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

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

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

          PS公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起?100 天計劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識別文末二維碼,回復(fù):1024


          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  免费观看黄色大片 | 吴梦梦精品一区二区三区观看 | 亚洲日本无| 日韩欧美在中文 | 超碰人人操人人 |