节点 - 如何编写音频文件

时间:2017-09-02 12:36:28

标签: javascript node.js audio stream

我正在创建一个记录用户所说内容的应用程序,并将其保存到文件中。为了从麦克风获取声音,我正在使用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);

1 个答案:

答案 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