¼ÇÒ»´Î½²¹ÊÊ»úÆ÷È˵Ŀª·¢-365betÌåÓýÔÚÏßÓйÊÊ£¬ÈûúÆ÷ÈËÀ´¶Á
¼ÇÒ»´Î½²¹ÊÊ»úÆ÷È˵Ŀª·¢-365betÌåÓýÔÚÏßÓйÊÊ£¬ÈûúÆ÷ÈËÀ´¶Á
×î½ü¹¤×÷½Ï棬»Ø¼ÒÏÐÏÂÀ´Ö»Ïë±ÕÄ¿ÐÝÏ¢£¬Ò»·ÖÖÓÆÁÄ»¶¼²»ÏëÔÙ¿´£¬È»¶ø365betÌåÓýÔÚÏßÓÖÏë×·¸ü֮ǰ¿´µÄС˵£¬ÓÚÊÇ£¬ÐèÇóÀ´ÁË¡ª¡ª365betÌåÓýÔÚÏßÐèÒªÒ»¸ö¸ø365betÌåÓýÔÚÏß½²¹ÊʵĻúÆ÷ÈË£¡
ä¯ÀÀÆ÷»òÕßÔĶÁÆ÷AppÀïÆäʵҲÓÐÀʶÁ¹¦ÄÜ£¬µ«ÊDZȽϽ©Ó²£¬×ÜÊǽ«ÒýÈËÈëʤµÄÇé½ÚÄî³ÉÁ÷Ë®ÕË£¬·Ö·ÖÖÓÈÃÈËÆú¿Ó£¬365betÌåÓýÔÚÏß365betÌåÓýÔÚÏß¿¼ÂÇ×Ô¼ºÊ¹ÓÃÅÀ³æ¶¨Ê±ÏÂÔØ¸üеÄÕ½ڣ¬¶øºó½«ÎÄ×ֺϳɴ洢µ½ÒôƵÎļþ£¬ÕâÑù²»½ö¿ÉÒÔÑ¡ÔñÒ»¸ö¿¿Æ×µÄÓïÒôºÏ³É¹¤¾ßÀ´´¦ÀíÎÄ×Ö£¬¶øÇÒ±£´æÏÂÀ´µÄÒôƵ»¹ÄÜ·´¸´ÊÕÌý£¬Ò»¾ÙÁ½µÃ¡£
365ÌåÓýͶעÕûºÏÈÝÒ×£¬µ«ÊÇÈçºÎ½«Æä¿ìËÙת»»³ÉÒôÆµÄØ£¿ÄѵÀÒª×Ô¼ºÑµÁ·Ä£ÐÍ¡°Á¶µ¤¡±½â¾ö£¿no no £¬·ÑÁ¦²»Ìֺ㬱Ͼ¹×Ô¼ºÊÖÍ·ÕâµãË㷨֪ʶ·Ç³£Ç³ÏÔ£¬¶øÇÒÓ²¼þÌõ¼þÒ²²»ÔÊÐí£¬±¾×Å¡°ÄÜÓþÍÐС±µÄÔÔò£¬365betÌåÓýÔÚÏß¾ö¶¨ÏÈʹÓÃÊÐÃæÉÏ¿ª·Åƽ̨µÄ²úÆ·À´½â¾ö¡£¾¹ý¶Ô±È£¬·¢ÏÖÓеÀÖÇÔÆµÄÓïÒôºÏ³É»¹²»´í£¨´Ë´¦¿ÉÌåÑ飩£¬¾ö¶¨Ê¹ÓÃÓеÀÖÇÔÆµÄÓïÒôºÏ³ÉAPI½øÐпª·¢¡£
Ч¹ûÏȶÃΪ¿ì£º
365betÌåÓýÔÚÏßÄÃÀ´Öì×ÔÇåÏÈÉúµÄ¡¶ºÉÌÁÔÂÉ«¡·µÄÆäÖÐÁ½¶Î×÷ΪʵÑéËØ²Ä£¬¿ª·¢Á˼òµ¥µÄdemo£¬×ßͨÁË´Ó¼ÓÔØ365ÌåÓýͶעµ½Éú³ÉÒôƵÎļþµÄÂß¼£¬ÏÂÃæ365betÌåÓýÔÚÏßÀ´Ïêϸ½éÉÜ¿ª·¢¹ý³Ì¡£
ÐèÒªÓïÒôºÏ³ÉµÄ365ÌåÓýͶע:

ºÏ³É½á¹û£¨µÚÒ»¶Î£©£º
¶ÔÓ¦ÒôƵÁ´½ÓΪ:
http://music.xf1433.com/up/view.php/14f5c51944701491ebeb73317fb29e16.mp3
ºÏ³É½á¹û£¨µÚ¶þ¶Î£©£º
¶ÔÓ¦ÒôƵÁ´½ÓΪ:
http://music.xf1433.com/up/view.php/3f10780ede6ca4abcc376b6e316ab55c.mp3
µ÷ÓÃAPI½Ó¿ÚµÄ×¼±¸¹¤×÷
Ê×ÏÈ£¬ÊÇÐèÒªÔÚÓеÀÖÇÔÆµÄ¸öÈËÒ³ÃæÉÏ´´½¨ÊµÀý¡¢´´½¨Ó¦Óᢰó¶¨Ó¦ÓúÍʵÀý£¬»ñÈ¡µ½Ó¦ÓõÄidºÍÃÜÔ¿¡£¾ßÌå¸öÈË×¢²áµÄ¹ý³ÌºÍÓ¦Óô´½¨¹ý³ÌÏê¼ûÎÄÕ·ÖÏíÒ»´ÎÅúÁ¿Îļþ·ÒëµÄ¿ª·¢¹ý³Ì¡£

¿ª·¢¹ý³ÌÏêϸ½éÉÜ
ÏÂÃæ½éÉܾßÌåµÄ´úÂ뿪·¢¹ý³Ì¡£
Ê×Ïȸù¾ÝÎĵµ·ÖÎöÓеÀÖÇÔÆµÄAPIÊäÈëÊä³ö¹æ·¶¡£ÓïÒôºÏ³ÉAPIµ÷ÓÃÊ®·Ö¼òµ¥£¬¸ÃAPI²ÉÓÃhttps·½Ê½Í¨ÐÅ£¬ËùÐè²ÎÊýÈçÏÂ±í£º
×Ö¶ÎÃû | ÀàÐÍ | º¬Òå | ±ØÌî | ±¸×¢ |
---|---|---|---|---|
q | text | ´ýºÏ³ÉÒôƵÎļþµÄ365ÌåÓýͶע×Ö·û´® | True | ±ÈÈ磺ÄúºÃ |
langType | text | ºÏ³É365ÌåÓýͶעµÄÓïÑÔÀàÐÍ | True | Ö§³ÖÓïÑÔ |
appKey | text | Ó¦Óà ID | True | ¿ÉÔÚ Ó¦ÓùÜÀí ²é¿´ |
salt | text | UUID | True | UUID |
sign | text | Ç© | True | MD5(Ó¦ÓÃID+q+salt+Ó¦ÓÃÃÜÔ¿) |
voice | text | ·Òë½á¹û·¢ÒôÑ¡Ôñ£¬0ΪŮÉù£¬1ΪÄÐÉù£¬Ä¬ÈÏΪŮÉù | false | 0 |
format | text | Ä¿±êÒôƵ¸ñʽ£¬Ö§³Ömp3 | false | mp3 |
speed | text | ºÏ³ÉÒôƵµÄÓïËÙ | false | ±ÈÈ磺"1"ΪÕý³£ËÙ¶È |
volume | text | ºÏ³ÉÒôƵµÄÒôÁ¿ | false | Õý³£Îª"1.00",×î´óΪ"5.00",×îСΪ"0.50" |
¼òµ¥¸ÅÀ¨£¬×éÖ¯ºÃ×Ô¼ºµÄÓïÑÔ£¨utf-8±àÂë365ÌåÓýͶע£©£¬¸¨ÒÔÇ©ÃûµÈ±ØÒª²ÎÊý£¬²¢¸æËßAPIËùÐèÒªµÄÒôÆµÌØÕ÷£¬¼´¿ÉµÃµ½Ò»·ÝÁîÈËÂúÒâµÄºÏ³ÉÒôƵ¡£
½Ó¿ÚÊä³öÖУ¬Èç¹ûºÏ³É³É¹¦£¬Õý³£·µ»ØÎª¶þ½øÖÆÓïÒôÎļþ£¬¾ßÌåheaderÐÅÏ¢ Content-type: audio/mp3£¬Èç¹ûºÏ³É³öÏÖ´íÎó£¬Ôò»á·µ»Øjson½á¹û£¬¾ßÌåheaderÐÅϢΪ£ºContent-type: application/json£¬¿É¾Ý´ËÅжÏÔËÐÐÇé¿ö¡£
Demo¿ª·¢£º
Õâ¸ödemoʹÓÃpython3¿ª·¢£¬°üÀ¨maindow.py£¬synthesis.py£¬synthesistool.pyÈý¸öÎļþ£¬·Ö±ðΪdemoµÄ½çÃæ¡¢½çÃæÂß¼´¦ÀíºÍÓïÒôºÏ³É½Ó¿Úµ÷Óù¤¾ß·â×°¡£
-
½çÃæ²¿·Ö£º
½çÃæ²¿·Ö´úÂëÈçÏ£¬±È½Ï¼òµ¥¡£
root=tk.Tk() root.title("youdao speech synthesis test") frm = tk.Frame(root) frm.grid(padx='50', pady='50') # Îļþѡȡ°´Å¥ btn_get_file = tk.Button(frm, text='Ñ¡Ôñ´ýºÏ³ÉÎļþ', command=get_files) btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20') # ËùÑ¡ÎļþÁбíչʾ¿ò text1 = tk.Text(frm, width='40', height='10') text1.grid(row=0, column=1) # Æô¶¯°´Å¥ btn_sure=tk.Button(frm,text="ºÏ³É",command=synthesis_files) btn_sure.grid(row=1,column=1)
ÆäÖÐÆô¶¯°´Å¥btn_sureµÄ°ó¶¨Ê¼þsynthesis_files()À´ÊÕ¼¯´øËùÓеÄ365ÌåÓýͶעÎļþ£¬Æô¶¯ºÏ³É£¬²¢´òÓ¡ÔËÐнá¹û:
def synthesis_files(): if syn_m.file_paths: message=syn_m.get_synthesis_result() tk.messagebox.showinfo("Ìáʾ", message) os.system('start' + '.\\result') else : tk.messagebox.showinfo("Ìáʾ","ÎÞÎļþ")
-
synthesis.py
ÕâÀïÖ÷ÒªÊÇÅäºÏ½çÃæÊµÏÖһЩ365ÌåÓýͶע¶ÁÈ¡ºÍÇëÇó½Ó¿Ú´¦Àí·µ»ØÖµµÄÂß¼¡£Ê×Ïȶ¨ÒåÒ»¸öSynthesis_model
class Synthesis_model(): def __init__(self,file_paths,result_root_path,syn_type): self.file_paths=file_paths # ´ýºÏ³ÉÎļþ·¾¶ self.result_root_path=result_root_path # ½á¹û·¾¶ self.syn_type=syn_type # ºÏ³ÉÀàÐÍ
get_synthesis_result()·½·¨ÊµÏÖÁËÅúÁ¿¶ÁÈ¡Îļþ²¢µ÷Óúϳɷ½·¨¡¢´¦Àí·µ»ØÐÅÏ¢µÄÂß¼£º
def get_synthesis_result(self): syn_result="" for file_path in self.file_paths: # ¶ÁÈ¡Îļþ file_name=os.path.basename(file_path).split('.')[0] file_content=open(file_path,encoding='utf-8').read() # µ÷Óúϳɷ½·¨ result=self.synthesis_use_netease(file_name,file_content) # ´¦Àí·µ»ØÏûÏ¢ if result=="1": syn_result=syn_result+file_path+" ok !\n" else: syn_result=syn_result+file_path+result return syn_result
µ¥¶À¶¨ÒåÁË·½·¨synthesis_use_netease()¾ßÌåʵÏÖµ÷ÓÃAPIµÄ·½·¨£¬ÕâÑùÔö¼ÓÁËdemoµÄÀ©Õ¹ÐÔ£¬ÊµÏÖÁË365ÌåÓýͶעºÏ³ÉÄ£¿é¿É²å°ÎµÄËÉñîºÏÐÎʽ£º
def synthesis_use_netease(self,file_name,text): result=connect(text,'zh-CHS') print(result) if result.headers['Content-Type']=="audio/mp3": millis = int(round(time.time() * 1000)) filePath = "./result/" + file_name+"-"+str(millis) + ".mp3" fo = open(filePath, 'wb') fo.write(result.content) fo.close() return "1" else: return "error:"+result.content
-
synthesistool.py
-
synthesistool.pyÖÐÊǺÍÇëÇóÓеÀÖÇÔÆAPIÖ±½ÓÏà¹ØµÄһЩ·½·¨£¬×îºËÐĵÄÊÇconnect()·½·¨£¬ÕûºÏÁËAPIËùÒªÇóµÄ¸÷¸ö²ÎÊý£¬²¢µ÷ÓÃÖ´ÐÐÇëÇóµÄ·½·¨do_request()£¬²¢·µ»ØAPI´¦Àí½á¹û¡£
def connect(text,lang_type): q = text data = {} data['langType'] = lang_type salt = str(uuid.uuid1()) signStr = APP_KEY + q + salt + APP_SECRET sign = encrypt(signStr) data['appKey'] = APP_KEY data['q'] = q data['salt'] = salt data['sign'] = sign response = do_request(data) return response
ÐèÒªÌåÑéһϵÄС»ï°é£¬ÇëÏÂÔØ365betÌåÓýÔÚÏߵĴúÂë×ÔÐг¢ÊÔ»òÈ¥¹ÙÍøÌåÑé : P¡£ÏîÄ¿µØÖ·£ºhttps://github.com/LemonQH/SpeechSynthesis
ÌØ±ðÌáʾ£º
1¡¢ÔËÐÐdemoʱ£¬ÐèÒªÌæ»»synthesistool.pyÄ£¿éÖÐµÄ APP_KEY ¡¢ APP_SECRETΪÄã×Ô¼ºÉú³ÉµÄ APP_KEY¡¢APP_SECRETŶ
2¡¢¸Ã¹¤³ÌĬÈÏ´æ·Å½á¹û´æÔÚ./result Îļþ¼ÐÏ£¬ÄãÐèÒªÊÖ¶¯ÔÚÏîĿ·¾¶Ï´´½¨¸ÃĿ¼¡£»òÕßÐÞ¸ÄΪÈ365betÌåÓýÔÚÏßâÄãÏë´æ·ÅµÄλÖà -
×ܽá
ÒÔÉϾÍÊÇ365betÌåÓýÔÚÏߵĿª·¢¹ý³Ì£¬ÓеÀÖÇÔÆµÄÓïÒôºÏ³ÉAPIÎĵµÇåÎú£¬µ÷Óùý³ÌÈ«³ÌÎÞ¿Ó£¬¿ª·¢ÌåÑéºÍºÏ³ÉЧ¹û¶¼ÁîÈ˸е½ÊæÊÊ¡£
365betÌåÓýÔÚÏßÓйÊÊ£¬365betÌåÓýÔÚÏß°ÑËü½»¸ø»úÆ÷ÈËÀ´½²£¬±ÕÄ¿ÑøÉñ²»¿ÝÔï£¬ÕæÊÇÒ»¼þÃÀÊ£¡