九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專家--9年開發(fā)經(jīng)驗(yàn)為您護(hù)航

18678812288
0531-88887250

C++調(diào)用有道翻譯API實(shí)現(xiàn)在線翻譯之發(fā)聲篇

文章作者:濟(jì)南軟件開發(fā) 時間:2016年12月20日

大概半月前寫了一篇博文:C++中使用Curl和JsonCpp調(diào)用有道翻譯API實(shí)現(xiàn)在線翻譯, 得到大家的熱情捧場,有人看了文章說要是能發(fā)聲不是更好,我覺得說的也是哈,能聽到專家的標(biāo)準(zhǔn)發(fā)音,那該是多美的一件事,那我就研究下唄。這段時間一直在忙著學(xué)習(xí)Unix Network Programming的東西,終于在今天下午抽出時間來完成這個事情。

 

好了,閑話不說,我給大家說說我的語音辭典開發(fā)之旅吧!開發(fā)環(huán)境Ubuntu + GCC4.7

 

一、 聲音從哪里來

 

要讓辭典發(fā)音,也就是說,我們需要得到這個單詞的發(fā)音的音頻,之前實(shí)現(xiàn)辭典用的是有道辭典的API,很好用,所以這次也就欣欣然選擇有道發(fā)音API來得到單詞的發(fā)音,API地址如下:

 

1 http://dict.youdao.com/dictvoice?audio=%word_you_want_to_play%

諸如,你要得到futures這個單詞的發(fā)音,你只需要在瀏覽器輸入http://dict.youdao.com/dictvoice?audio=futures,然后就可以聽到一個女聲的futures的發(fā)音了!

 

二、 怎么使用程序去發(fā)音

 

1. 把聲音拿回來

 

聲音有了,但是我們要自己實(shí)現(xiàn)程序去作這個事情,難道我還每次去打開瀏覽器訪問以下不成!No,no!我沒有想到太好的辦法,就用我認(rèn)為很土很笨的方法吧!

 

我把API返回的聲音存成mp3文件,然后再想辦法唄,后來一想,也有必要哈,把查過的這個單詞存下來了,如果一次沒有聽清楚,我還可以再聽一次撒!那動手唄,把聲音先放到硬盤再說!

 

我們需要使用的三方庫還是上一篇文章C++中使用Curl和JsonCpp調(diào)用有道翻譯API實(shí)現(xiàn)在線翻譯用到的libcurl,直接貼代碼:

 

復(fù)制代碼

1 #include "curl/curl.h"

3 FILE *fp;

5 size_t voice_writer(void *ptr, size_t size, size_t nmemb, void *stream)

6 {

7     int written = fwrite(ptr, size, nmemb, (FILE *)fp);

8     return written;

9 }

復(fù)制代碼

上面這個方法在以下的代碼中,也就是curl的回調(diào)中會用到:

 

復(fù)制代碼

 1 int main(int argc, char *argv[])

 2 {

 3     CURL *curl;

 4     curl_global_init(CURL_GLOBAL_ALL);

 5     curl = curl_easy_init();

 6     std::string voice_url = "http://dict.youdao.com/dictvoice?audio=";

 7     voice_url += argv[1];

 8     curl_easy_setopt(curl, CURLOPT_URL, voice_url.c_str());

 9     

10     if((fp = fopen("voice.mp3", "w")) == NULL)

11     {

12         curl_easy_cleanup(curl);

13         exit(1);

14     }

15     

16     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, voice_writer);

17     curl_easy_perform(curl);

18     curl_easy_cleanup(curl);

19     

20     return 0;

21 }

復(fù)制代碼

好了,根據(jù)我的想法,編譯運(yùn)行之后一個voice.mp3的文件就放在了我的當(dāng)前目錄中?。≒S:不是完整代碼,其實(shí)就差幾個頭文件而已,自己加上吧?。?/p>

 

2. 把聲音放出來

 

聲音到手,我先試著用播放器聽了下,沒錯,正是我想要的!下一個步驟,我們要在程序中把聲音放出來,總不能每次用播放器去聽吧!C++中如何播放mp3,以前作VC開發(fā)的時候貌似遇到過,linux下我還是第一次面對這個需求,怎么辦?問GOOGLE,輸入諸如C++ mp3 encoder library,找了一圈,貌似也沒個太好的庫供我使用,我可不喜歡解碼開始!腫么辦?我想到了另外一個方法,system方法,是的,你沒看錯,就是他!這個最拿手了,SoX大家應(yīng)該都知道,SoX是Sound eXchange的簡寫,主頁見這里。SoX在音頻處理領(lǐng)域有瑞士軍刀的美稱,支持很多格式的音頻文件,如 WAV,MP3,MPG,OGG,FLAC 等等!沒有安裝的童鞋看這里:

 

1 sudo apt-get install sox

2 sudo apt-get install sox libsox-fmt-all

安裝成功之后,只需要使用以下命令去播放既可:

 

1 play voice.mp3

好了,走遠(yuǎn)了,我們繼續(xù)回到我們的system方法吧:

 

1 system("play voice.mp3");

Are you kidding me? 不好意思,我確實(shí)沒有太好的方法了?。≒S:有其他的C++庫可以播放MP3,有知道的朋友歡迎指導(dǎo),我也很想用個比較perfect的方法!)

 

三、 小結(jié)

 

好了,這就是今天的主要內(nèi)容,使用之前的一篇文章中提供的辭典源碼,和今天的發(fā)音源碼整合到一起,就是一個準(zhǔn)perfect的在線發(fā)音辭典了,這里不再貼出所有源碼,感興趣的可以自己整合一下!


想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。

兰州市| 油尖旺区| 于都县| 通江县| 阿瓦提县| 武胜县| 寿光市| 辽源市| 万载县| 凌云县| 上思县| 科技| 花垣县| 汕尾市| 赣榆县| 长兴县| 宁河县| 江孜县| 孝感市| 开化县| 铁岭市| 肥乡县| 平和县| 东港市| 江安县| 页游| 鹤山市| 尚义县| 安丘市| 胶南市| 上饶市| 玛纳斯县| 阿拉尔市| 恩平市| 普兰店市| 伊宁县| 获嘉县| 将乐县| 昌吉市| 桓台县| 河曲县|