日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

java 调用linux的tts_中文TTS 的简单实现(基于linux)之 实现语音合成

發(fā)布時間:2023/12/29 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 调用linux的tts_中文TTS 的简单实现(基于linux)之 实现语音合成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

合成語音歸根到底是根據(jù)漢字在字符集的定位來取語音庫中的數(shù)據(jù)

定位方法:

根據(jù)救字的兩個字節(jié)中的值.從高字節(jié)算出漢字的位wm.從低字節(jié)算出漢字的區(qū)qm,

(qm一176)*94+wm一160就是該況字在漢字集里的位置position,

而該漢字所對應的語音數(shù)據(jù)的偏移量就是(position一1) 3200+46。

根據(jù)定位方法取得漢字在語音庫中的發(fā)音數(shù)據(jù)后,根據(jù)WAV格式合成語音文件。

定位和合成代碼如下:

#define MAXLEN? 32000

/*

參數(shù)str:為純漢字的字符串,且編碼格式為GBK

返回值:

-1:表示語音庫文件打開錯誤

-2:表示合成語音文件 打開/生成錯誤

其它:函數(shù)執(zhí)行成功

*/

int?? wav(char *str)

{

FILE * fpf,*fpt;?? //文件指針

int qm,wm;???? ?//漢字區(qū)、位碼

int re;?????????????? //函數(shù)返回值

long fileleng=0;?? //文件長度 后面修改WAV格式時有用

if((fpf=fopen("ddd.wav","rb+"))==NULL)??? //打開語音庫文件

return -1;

if((fpt=fopen("china.wav","wb+"))==NULL)? //打開或生成合成后的語音文件,用來播放的

return -2;

char head[46];??????????????????? ?? //WAV 文件頭

char buffer[MAXLEN];?????????? //發(fā)音數(shù)據(jù)BUFF

memset(buffer,0,MAXLEN);? //置0

fread(head,sizeof(head),1,fpf);???? //讀語音庫文件頭

fwrite(head,sizeof(head),1,fpt);??? //寫入合成語音文件

int l=strlen(str);

char *s=str;

for(int i=0;i<=l;i=i+2)

{

qm=(unsigned char)*(s+i);????? //取漢字的區(qū)碼

wm=(unsigned char)*(s+1+i);????? //取漢字的位碼

if (qm<176||qm>215)?? //判斷是否在漢字字符集中

continue;

if (wm<161||wm>254)? //判斷是否在漢字字符集中

continue;

int position =(qm-176)*94+wm-160;

int offset=(position-1)*MAXLEN+46;???? //定位

fseek(fpf,offset,0);

fread(buffer,sizeof(buffer),1,fpf);???? //取發(fā)音數(shù)據(jù)

fwrite(buffer,sizeof(buffer),1,fpt);?? ? //寫入合成文件

fileleng++;????????????????????????????????????????? //合成文件長度增加

}?? //end for

re =fileleng;

fileleng=fileleng*MAXLEN;

fseek(fpt,42,SEEK_SET);

fwrite(&fileleng,sizeof(long),1,fpt);??? //修改合成文件的WAV格式,主要是修改文件大小,具體請看WAV格式表

fileleng+=44;

fseek(fpt,4,SEEK_SET);

fwrite(&fileleng,sizeof(long),1,fpt);? //修改合成文件的WAV格式,主要是修改文件大小,具體請看WAV格式表

fclose(fpf);???? //關閉文件

fclose(fpt);

return re;

}

其它:

由函數(shù)WAV可以看出,我們接收用戶的輸入字符的編碼必須為GBK編碼,

所以如果系統(tǒng)使用的不是 GBK編碼的話,我們還應當進行編碼轉換。

如果編碼正確的話,還得從把用戶的輸入中把中文字符給提取出來。

為此,我寫了小段代碼,用來過濾非中文字符的。

void trans(char *str)

{

int i = 0, j = 0;

while( str[i] != '' )

{

if ( str[i] < 0 )

{

str[j++] = str[i++];

str[j++] = str[i++];

}

else

i++;

}?? //end while

str[j] = '';

}

總結

以上是生活随笔為你收集整理的java 调用linux的tts_中文TTS 的简单实现(基于linux)之 实现语音合成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩福利在线播放 | 美女扒开下面让男人捅 | 无罩大乳的熟妇正在播放 | 成人h动漫精品一区二区器材 | 午夜激情视频 | 日韩av在线播放一区 | 美女扒开腿让男人捅 | 婷婷影院在线观看 | 欧美日韩在线播放 | 国产性猛交普通话对白 | 含羞草一区二区三区 | 青青草原一区二区 | 国内露脸中年夫妇交换 | 91在线视频免费看 | 夜夜夜夜骑| 亚洲视频 中文字幕 | 久久精品www| 精品人妻在线一区二区三区 | 亚洲欧美一区二区三区孕妇 | 欧美一级一区二区三区 | 超碰在线99| 青娱网电信一区电信二区电信三区 | 超碰在线网址 | 黄色天堂网站 | 亚洲一二三区视频 | 黄色仓库av| 久草资源在线 | 亚洲七区 | 影音先锋男人天堂 | 久久天天综合 | 美女考逼 | av免费福利 | 精品久久久久久久久久久久久久久久 | 久久影院午夜 | 在线观看不卡一区 | 色姑娘综合网 | 国产欧美一区二区三区在线老狼 | 超碰个人在线 | 欧美国产中文字幕 | 中文字幕中文在线 | 欧美黑人一区二区三区 | 99久久精品免费视频 | 中文字幕国产一区 | 8mav在线 | 精品一区二区视频在线观看 | 国产一区二区视频在线观看免费 | 国产片在线播放 | 久久三区 | 国产精品久久不卡 | 国产精品一区二区欧美 | 2017天天干| 婷婷丁香激情五月 | 这里只有精品在线观看 | 国产一区二区在线免费观看 | 日韩精品人妻一区二区中文字幕 | 日日不卡av | 高潮一区二区三区乱码 | 国产欧美一区二区三区四区 | 伊人网视频在线观看 | 欧美精品乱码视频一二专区 | 午夜寂寞剧场 | 在线免费观看黄色 | 欧美巨乳在线 | 日韩黄色大片 | 操欧美美女 | jizz国产精品 | 亚洲在线一区二区三区 | 野花视频在线免费观看 | av中文字幕网 | 人妻偷人精品一区二区三区 | 亚洲天堂五月天 | 不卡黄色 | 久久精品视频2 | 天天操天天干天天干 | 日韩av电影在线播放 | 国产精品黄网站 | 欧美激情18 | 国产一二三区精品 | 欧美brazzers| 丁香婷婷六月 | 午夜电影你懂的 | 韩国av永久免费 | 成人久久在线 | 中文字幕无码精品亚洲资源网久久 | 国产精品夜色一区二区三区 | 激情综合网激情 | 日韩欧美在线不卡 | 欧美精品第1页 | 欧美双性人妖o0 | 一区二区三区国产精品 | 欧美日韩一二三四区 | 日韩精品区 | 黄色欧美视频 | 国产鲁鲁| 黄色片中文字幕 | 新狠狠干 | 在线播放亚洲精品 | 亚洲精品久久久久久久久久吃药 | 日韩中文字幕av |