当我调用tts.speech.microsoft.com API时,我得到了一个二进制音频文件,现在我想将其转换为base64字符串。
我已经尝试了很多方法,例如:
Buffer.from(body, "binary").toString("base64");
无法正常工作。
我不确定“二进制”是否是准确的词语,但它不是一种可读的格式。
感谢您的帮助。
当我调用tts.speech.microsoft.com API时,我得到了一个二进制音频文件,现在我想将其转换为base64字符串。
我已经尝试了很多方法,例如:
Buffer.from(body, "binary").toString("base64");
无法正常工作。
我不确定“二进制”是否是准确的词语,但它不是一种可读的格式。
感谢您的帮助。
我猜您是在按照官方文档 Quickstart: Convert text-to-speech using Node.js
中的Make a request and save the response
部分编写代码,如下所示。
var request = require('request');
let options = {
method: 'POST',
baseUrl: 'https://westus.tts.speech.microsoft.com/',
url: 'cognitiveservices/v1',
headers: {
'Authorization': 'Bearer ' + accessToken,
'cache-control': 'no-cache',
'User-Agent': 'YOUR_RESOURCE_NAME',
'X-Microsoft-OutputFormat': 'riff-24khz-16bit-mono-pcm',
'Content-Type': 'application/ssml+xml'
},
body: body
};
function convertText(error, response, body){
if (!error && response.statusCode == 200) {
console.log("Converting text-to-speech. Please hold...\n")
}
else {
throw new Error(error);
}
console.log("Your file is ready.\n")
}
// Pipe the response to file.
request(options, convertText).pipe(fs.createWriteStream('sample.wav'));
所以我修改了上面的官方代码,创建了一个名为encodeWithBase64
的函数,使用Base64对body
进行编码。
function encodeWithBase64(error, response, body){
if (!error && response.statusCode == 200) {
var strBase64 = Buffer.from(body).toString('base64');
console.log(strBase64);
}
else {
throw new Error(error);
}
console.log("Your file is encoded with Base64.\n")
}
// Pipe the response to file.
request(options, convertText);
或者您可以使用npm包base64-stream
和get-stream
从body
获取Base64字符串。
var base64 = require('base64-stream');
const getStream = require('get-stream');
(async () => {
var encoder = new base64.Base64Encode();
var b64s = request(options).pipe(encoder);
var strBase64 = await getStream(b64s);
console.log(strBase64);
})();
stream-string
也可以实现这个功能。var base64 = require('base64-stream');
const ss = require('stream-string');
var encoder = new base64.Base64Encode();
var b64s = request(options).pipe(encoder);
ss(b64s).then(data => {
console.log(data);
})
body
是什么格式?它只是作为缓冲区/字节数组传入吗? - Alex