Двоичный файл для base64 nodejs
Я получаю двоичный аудиофайл при вызове api tts.speech.microsoft.com и хочу преобразовать этот двоичный файл в строку base64.
Я пробовал много вещей, например:
Buffer.from(body, "binary").toString("base64");
не работает.
Я не уверен, что "бинарный" - точное слово, но это не читаемый формат.
Спасибо за помощь.
1 ответ
Решение
Я думаю, вы следили за разделом Make a request and save the response
официального документа Quickstart: Convert text-to-speech using Node.js
написать свой код, как показано ниже.
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
кодировать body
с Base64.
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
чтобы получить строку с Base64 из body
,
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);
})