我正在制作一个需要音频和视觉翻译的语言应用程序。我想过使用Google Translate API,但是根据this SO post ,似乎是“解释是谷歌限制了这项服务的使用”。
但是这个帖子,Google Text-To-Speech API ,说我可以使用 tl
和 q
参数,例如 http://translate.google.com/translate_tts?tl=zh-CN&q=Hello
返回音频。这给了我一个奇怪的中文“Hello”音译,它是“Ha Low”而不是“Nihao”。
用户还表示“它将自动生成一个 wav 文件,您可以通过 HTTP 请求轻松获取该文件”。当我 GET
使用 jsonp
(需要使用它,因为 $.get()
或非 jsonp 请求已被阻止)时,我得到以下内容无法读取的错误:
代码:
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);
}
);
}
]);
所以我的问题是...Google 翻译 API 是否有一个标准端点来访问音频文件?如果没有,有什么好的方法可以做到这一点?
最佳答案
这是一个迟到的回复...
我建议使用 Jquery(或普通 JavaScript)来执行此操作,而不是将其放入应用程序的 Controller 中。您提供的网址很好,但是 now you need to set the Referer
and User-Agent
headers在您提出请求之前。
您可以使用Jquery.get()从 Google 的 TTS API 下载 mp3(您必须设置 header !)。然后,您可以create an HTML5 Audio object从 Jquery 在 #success
方法中返回的 data
中提取出来,然后播放它。
像 Hello
这样的单字查询的响应大小约为 2-3kb,足够小了。 Google 的 API 也非常快,因此将这两个因素结合起来,我根本不用担心性能。请记住,浏览器还将缓存音频文件,因此任何后续的“将鼠标悬停在单词上”都将使用缓存的版本,并且不会发送另一个请求。
关于javascript - Google Translate API 文本转语音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30585006/