我想加入2个.wav文件,但是由于某种原因,我只能使输出文件包含数组中的第一项:
const writeStream = fs.createWriteStream('server/playback.wav');
const inputFiles = [
`${path.resolve(__dirname, 'response.wav')}`,
`${path.resolve(__dirname, 'broadcast.wav')}`
];
joinAudio() {
if(!inputFiles.length) {
console.log("done")
writeStream.end("Done");
return
}
currentFile = inputFiles.shift()
let stream = fs.createReadStream(currentFile);
stream.pipe(writeStream, {end: false});
stream.on('end', () => {
console.log(currentFile, "appended")
self.joinAudio()
});
}
我的代码注销两个文件都已附加并完成,但是我不明白为什么只包含1个文件。
我要加入的两个文件都在这里:
broadcast.wav-https://ufile.io/mlnkt
response.wav-https://ufile.io/ta937
答案 0 :(得分:0)
对于WAV和MP3,文件的开头有标头,因此通过组合文件,您可以在第一个文件结束后放置标头,因此只有第一个标头中定义的音频可用于听。您需要先剥离标题,创建一个新的wav文件,然后重新创建标题。
OR
使用ffmpeg合并文件。到目前为止最简单。结合child_process.spawn函数使用它,您将能够知道何时完成合并。袜库也是一个不错的选择。