如何使用NodeJS将音频流保存为wav文件

时间:2017-12-01 15:03:12

标签: javascript node.js stream wav icecast

我的目标是录制来自Icecast服务器的无线电流。

我正在使用icecast节点模块获取无线电流,然后通过wav模块传输流来编写wave文件。

以下是我的代码示例:

const icecast = require('icecast');
const url = 'http://87.118.104.139/radiogibsonaac';
var wav = require('wav');

let ice, fileWriter;

ice = icecast.get(url, res => {
    fileWriter = new wav.FileWriter(__dirname+'/recording.wav', {
        channels: 1,
        sampleRate: 16000,
        bitDepth: 128
    });
    res.pipe(fileWriter);
});


setTimeout(()=>{
    fileWriter.end();
    ice.end();
},5000);

流按预期成功记录到我的磁盘上,我可以在VLC中监听该文件,但是wav文件本身似乎没有正确形成。

当我尝试使用其他工具编辑文件时,每次都会显示错误。 例如,我正在尝试更改this site上的音频速度,但它无法识别该文件。

此外,如果我尝试使用Sox CLI查看文件信息,则会显示:

  

sox FAIL格式:无法打开输入文件`recording.wav':对不起,不明白.wav大小

有人知道我在将wav文件写入磁盘的过程中是否缺少一步?

1 个答案:

答案 0 :(得分:1)

根据流URL,它看起来像是AAC格式的流,并且您正在尝试将该数据直接写入WAV文件,因此您最终会得到一个带有WAV标头但AAC音频数据的文件。 / p>

您需要将流写入磁盘作为AAC,然后对该文件进行转换,或者在将数据写入磁盘之前对其进行转码。