简介
大约 2 分钟
简介
火山翻译是字节跳动旗下的一款翻译软件,但是它也自带一个文本转语音的服务,并且支持多国语言和多种音调,如下图所示,在中文模式下,目前已经支持了7种不同风格的音调,应该可以基本满足普通用户的需要了。遗骸的是,该网站并未提供mp3等格式的音频下载方式,使用起来还是会感到不便。
但是这么好的工具不能利用起来着实有点浪费,既然官方没有支持,我们就自己造轮子,本教程就来教大家如何破解它的mp3下载,实现白嫖!
使用
本教程将会使用“油猴脚本”浏览器插件,通过编写自定义的用户脚本来实现mp3下载功能。具体步骤如下:
- 新建油猴用户脚本,内容如下:
// ==UserScript==
// @name 文本转语音下载(火山翻译)
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Kevin2li
// @match https://translate.volcengine.com/translate?category=&home_language=zh&source_language=detect&target_language=en&text=*
// @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @run-at document-start
// @grant unsafeWindow
// ==/UserScript==
(function() {
'use strict';
// Your code here...
// https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript
const b64toBlob = (b64Data, contentType = "", sliceSize = 512) => {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: contentType });
return blob;
};
const originOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (_, url) {
if (url.startsWith("/web/tts/v1/?msToken=")) {
this.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
const res = JSON.parse(this.responseText);
const data = res.audio.data;
var downloadFileName = "火山翻译-";
var timeStamp = new Date().getTime().toString();
downloadFileName = downloadFileName + timeStamp.substring(0, timeStamp.length) + ".mp3";
const blob = b64toBlob(data, "audio/mp3");
const blobUrl = URL.createObjectURL(blob);
let downloadLink = document.createElement('a');
downloadLink.href = blobUrl;
downloadLink.download = downloadFileName;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
this.responseText = JSON.stringify(res);
}
});
}
originOpen.apply(this, arguments);
};
})();
- 打开火山翻译网站,输入文字,点击语音播放会自动下载mp3文件。
更简单地,你可以直接去脚本列表里选择安装:https://greasyfork.org/zh-CN/scripts/456887-文本转语音下载-火山翻译
补充
类似的文本转语音服务还有微软的Azure tts, 同样提供了多种人声可供选择,但是也同样缺少下载按钮,可通过下面的油猴脚本下载。
地址:https://greasyfork.org/zh-CN/scripts/444347-azure-speech-download