我正在创建一个记录用户所说内容的应用程序,并将其保存到文件中。为了从麦克风获取声音,我正在使用node-microphone包。我的应用程序目前能够从麦克风获取声音。但是,当我尝试将流写入音频文件并播放它时,我收到以下错误。
Windows Media Player无法播放该文件。玩家可能没有 支持文件类型或可能不支持以前使用的编解码器 压缩文件。
有谁知道如何将音频写入节点中的文件?
var fs = require('fs');
const { Writable } = require('stream');
var writeStream = fs.createWriteStream('./output.wav');
const outStream = new Writable({
write(chunk, encoding, callback) {
console.log(chunk);
writeStream.write(chunk);
callback();
}
});
let Mic = require('node-microphone');
let mic = new Mic();
let micStream = mic.startRecording();
micStream.pipe( outStream );
mic.on('info', (info) => {
console.log('Info: ',info);
});
mic.on('error', (error) => {
console.log('error:', error);
});
mic.on('stop', (stop) => {
console.log('stop:', stop);
});
setTimeout(() => {
console.log('stopped recording');
mic.stopRecording();
}, 3000);
答案 0 :(得分:1)
node-microphone
文档声明:
的startRecording()
使用课程中给定的声音选项开始录制。创建 一个新的子进程。 它会将录制的PCM Wave Stream返回为 节点流。
我想你的文件缺少正确的标题。 以下模块之一可能对您有所帮助:
node-wav
Writer类接受写入它的原始音频数据(目前仅支持PCM音频数据),并在开头输出一个带有有效WAVE标题的WAV文件,指定音频流的格式信息。
audiobuffer-to-wav
var toWav = require('audiobuffer-to-wav')
var wav = toWav(buffer) // encode AudioBuffer to WAV