【问题标题】:How to convert raw data to audio in javascript如何在javascript中将原始数据转换为音频
【发布时间】:2016-12-18 23:52:18
【问题描述】:

我正在使用来自 Azure 认知服务的 Bing Text to Speech api

post_option.headers = {
        'content-type' : 'application/ssml+xml',
        'Content-Length' : post_data.length,
        'X-Microsoft-OutputFormat' : 'riff-8khz-8bit-mono-mulaw',
        'Authorization': 'Bearer ' + OxfordAccessToken.access_token,
        'X-Search-AppId': '',
        'X-Search-ClientID': '',
        "User-Agent": "TTSNodeJS"
    };

var post_req = https.request(post_option, function(res){
      var _data="";
       res.on('data', function(buffer){
           //get the wave
         _data += buffer;
         });

         // end callback
        res.on('end', function(){

        console.log('wave data.length: ' + _data.length);
        });

        post_req.on('error', function(e) {
        console.log('problem with request: ' + e.message);
        });
    });

我收到了字符串格式的音频原始数据。我想将数据保存为 .mp3 或 .mp4 文件。我可以使用以下代码将原始数据保存为 .wav。

var fs = require('fs')
fs.writeFile('./audio.wav', data, 'binary', function(err) {
if(err) console.log(err);
else console.log("File saved");
});

但最终的二进制音频文件充满噪音,无法使用。使用 16 位标头时,音频文件的噪音更大。

我需要帮助将输出数据保存为无噪音的 .mp3/.mp4 音频文件,请建议一种方法。

【问题讨论】:

    标签: javascript node.js azure audio text-to-speech


    【解决方案1】:

    我利用request 模块来实现这个功能,创建的音频文件很清晰,没有你提到的任何噪音。这是我的测试代码sn-p:

            var SsmlTemplate = "<speak version='1.0' xml:lang='en-us'><voice xml:lang='%s' xml:gender='%s' name='%s'>%s</voice></speak>";
            var post_data = util.format(SsmlTemplate, 'en-US', 'Female', 'Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)', 'This is a demo to call microsoft text to speach service in javascript.');
            console.log('\n\ntts post_data: ' + post_data + '\n');
    
            var post_option = {
                url: "https://speech.platform.bing.com/synthesize",
                method: 'POST',
                body :post_data
            };
            post_option.headers = {
                'content-type': 'application/ssml+xml',
                // 'Content-Length': post_data.length,
                'X-Microsoft-OutputFormat': 'riff-16khz-16bit-mono-pcm',
                'Authorization': 'Bearer ' + OxfordAccessToken.access_token,
                'X-Search-AppId': '07D3234E49CE426DAA29772419F436CA',
                'X-Search-ClientID': '1ECFAE91408841A480F00935DC390960',
                "User-Agent": "TTSNodeJS"
            };
    
            var post_req = request.post(post_option).on('response', function(response) {
                console.log(response.statusCode) // 200
                console.log(response.headers) 
              }).pipe(fs.createWriteStream('audio.mp3',{defaultEncoding:'binary'}));
    

    否则,请您提供您的测试模板和您的本地环境。任何问题,请随时告诉我。

    【讨论】:

    • 我知道这是一篇旧帖子,但是,我需要完全按照相反的方式执行此操作。我需要将 mp3 文件转换为原始数据,您知道有什么解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2017-02-08
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多