2015-06-01 38 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速度也非常快,所以综合这两个因素我根本不用担心表现。请记住,浏览器还会缓存音频文件,因此任何后续的“悬停在文字上”都将使用缓存版本,而不会发送其他请求。