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

标签 javascript node.js stream wav icecast

我的目标是录制来自 Icecast 服务器的广播流。

我正在使用icecast Node 模块来获取 radio 流,然后通过将流传输到 wav 来写入波形文件。模块。

这是我的代码示例:

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 formats: can't open input file `recording.wav': Sorry, don't understand .wav size

有人知道我在将 wav 文件写入磁盘的过程中是否遗漏了一个步骤吗?

最佳答案

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

您需要将流以 AAC 形式写入磁盘,然后对文件进行转换,或者在将流写入磁盘之前对其进行即时转码。

关于javascript - 如何使用 NodeJS 将音频流保存为 wav 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47596127/

相关文章:

javascript - 使用 JavaScript 识别图像中红球的位置?

javascript - nodejs process.hrtime() 挂掉是什么原因?

c++ - 使用 rdbuf 复制流在输入为空时失败

javascript - 我可以在 UIWebViewDelegate 中处理警报吗?

javascript - 滚动捕捉到页面部分

javascript - crypto模块中6个随机字节可以产生的最大值是多少?

angularjs - 将消息绑定(bind)到 angularjs View

Node.js 流可读转换

node.js - 是否可以通过管道传输到 console.log?

javascript - 有一种简单的方法可以确保 JavaScript 中 forEach/for 循环的正确顺序吗?