承接上一篇《C++ 使用 Curl 與 JsonCpp 呼叫有道翻譯 API》,讀者建議加入發音功能。本文記錄在 Ubuntu + GCC 4.7 環境下,整合有道發音 API 並播放 MP3 的完整過程。
API 端點:https://dict.youdao.com/dictvoice?audio=
例如查詢 futures 發音,瀏覽器訪問 https://dict.youdao.com/dictvoice?audio=futures 即可聽到女聲朗讀。
#include <curl/curl.h>
#include <stdio.h>
size_t voice_writer(void *ptr, size_t size, size_t nmemb, FILE *stream) {
return fwrite(ptr, size, nmemb, stream);
}
int main(int argc, char *argv[]) {
CURL *curl = curl_easy_init();
if (!curl) return 1;
char voice_url[256] = "https://dict.youdao.com/dictvoice?audio=";
strcat(voice_url, argv[1]);
FILE *fp = fopen("voice.mp3", "wb");
if (!fp) { curl_easy_cleanup(curl); return 1; }
curl_easy_setopt(curl, CURLOPT_URL, voice_url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, voice_writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_perform(curl);
fclose(fp);
curl_easy_cleanup(curl);
return 0;
}
執行後會在當前目錄產生 voice.mp3。
Linux 下 C++ 直接解碼 MP3 較複雜,採用呼叫系統命令播放:
sudo apt-get install sox libsox-fmt-all # 安裝 SoX
system("play voice.mp3"); // 程式中播放
libmpg123、SDL_mixer 或 PortAudio 等程式庫,但整合成本較高。SoX 被譽為音訊處理的「瑞士刀」,支援格式多、指令簡單,適合快速原型。將翻譯與發音模組封裝為類別,提供 translate(word) 與 pronounce(word) 介面,即可構建完整的線上發音辭典。