【问题标题】:Google Translate API text-to-speech谷歌翻译 API 文字转语音
【发布时间】:2015-06-01 23:30:56
【问题描述】:

我正在制作一个需要音频和视觉翻译的语言应用程序。本来想用谷歌翻译API的,但是根据this SO post看来,“解释是谷歌限制了这个服务的使用”。

但是这个 SO 帖子 Google Text-To-Speech API 说我可以使用 tlq 参数,例如 http://translate.google.com/translate_tts?tl=zh-CN&q=Hello 来返回音频。这给了我一个奇怪的“你好”的中文音译,它说“Ha Low”而不是“Ni Hao”。

用户还说“它会自动生成一个 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);
                    }
                );
            }
        ]);

所以我的问题是......谷歌翻译 API 是否有一个标准端点来访问音频文件?如果没有,有什么好的方法可以做到这一点?

【问题讨论】:

  • jsonp 仅适用于文本数据,不支持二进制。您需要保存音频字节,还是只播放它们?
  • @dandavis 我需要的是......每次用户将鼠标悬停在一个外来词上时,它都会播放这个词音频。我可以每次向 API 发出请求并按需播放,但我认为这可能很昂贵......并且希望预先指定常用单词并将其音频文件存储在数组中。我想我可以缓存玩家通常悬停的单词?
  • 我幸运地使用了多个音频标签和预加载,但 API 似乎足够快,不需要预加载...

标签: javascript api audio google-api


【解决方案1】:

这是一个迟到的回应......

我建议使用 Jquery(或 vanilla JavaScript)来执行此操作,而不是将其放在应用程序的控制器中。您提供的网址很好,但在您提出请求之前now you need to set the Referer and User-Agent headers

您可以使用Jquery.get() 从 Google 的 TTS API 下载 mp3(您必须设置标题!)。然后,您可以在#success 方法中Jquery 返回的datacreate an HTML5 Audio object 进行播放。

Hello 这样的单字查询的响应大小约为 2-3kb,足够小。谷歌的 API 也非常快,所以结合这两个因素,我根本不用担心性能。请记住,浏览器也会缓存音频文件,因此任何后续的“悬停在单词上”都将使用缓存的版本,而不是发送另一个请求。

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2018-08-20
    • 1970-01-01
    • 2012-06-16
    • 2020-10-02
    • 2015-10-21
    • 2011-12-26
    • 2013-05-06
    • 2012-10-31
    相关资源
    最近更新 更多