我的目标是录制来自 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/