2015-06-01 37 views
1

我正在製作一個需要音頻以及視覺翻譯的語言應用程序。我想過使用谷歌翻譯API,但根據this SO post,似乎「解釋是Google限制了這項服務的使用。」谷歌翻譯API文本到語音轉換

但是,這個SO帖子,Google Text-To-Speech API,說我可以使用tlq PARAMS,像http://translate.google.com/translate_tts?tl=zh-CN&q=Hello返回音頻。這給了我一箇中文的「你好」的怪異音譯,裏面寫着「Ha Low」而不是「Ni Hao」。

用戶還聲明「它會自動生成一個可以輕鬆獲得HTTP請求的wav文件」。當我GET使用jsonp(需要用這個,因爲$.get()或非JSONP請求都起源封鎖)我得到以下不可讀錯誤:

enter image description here

代碼:

 var theApp = angular.module('myApp', []); 
     theApp.controller('APICtrl', ['$scope', '$http', 
      function($scope, $http) { 
       var httpRequest = "http://translate.google.com/translate_tts?tl=" + "zh-CN" + "&q=" + "Hello"; 
       $http.jsonp(httpRequest) 
        .success(function(data) { 
         console.log(data); 
        } 
       ); 
      } 
     ]); 

所以我的問題是...有沒有谷歌翻譯API訪問音頻文件的標準端點?如果沒有,那麼做到這一點的好方法是什麼?

+1

jsonp只對文本數據有效,不支持二進制。你需要保存音頻字節,還是隻播放它們? – dandavis

+0

@dandavis我需要的是......每當用戶將鼠標懸停在某個外部單詞上時,它將播放單詞audio。我可以每次都向API發出請求並按需播放,但我認爲這可能很昂貴,並且希望預先指定常用詞並將其音頻文件存儲在數組中。我想我可以緩存通常懸停的單詞玩家? – Growler

+1

我有運氣使用多個音頻標籤和預加載,但API似乎足夠快,不需要預加載... – dandavis

回答

0

這是一個遲到的回覆...

我會建議使用jQuery(或香草的JavaScript)來做到這一點,而不是把它在你的應用程序的控制器。您提供的網址是正確的,但在提出請求之前請輸入now you need to set the Referer and User-Agent headers

您可以使用Jquery.get()從Google的TTS API下載mp3(您必須設置標題!)。那麼,你可以用中的create an HTML5 Audio object出來,由jquery在#success方法中返回,並播放。

Hello這樣的單字查詢的響應大小大約爲2-3kb,足夠小。 Google的API速度也非常快,所以綜合這兩個因素我根本不用擔心表現。請記住,瀏覽器還會緩存音頻文件,因此任何後續的「懸停在文字上」都將使用緩存版本,而不會發送其他請求。