.wav文件在VLC播放器上运行,但在Windows媒体播放器上运行

时间:2017-03-28 14:54:38

标签: javascript cordova ionic2 wave voice-recording

我使用插件cordova-plugin-audioinput在Ionic2中创建了一个移动应用 并使用编码为audio/wav格式的Android手机成功录制了我的声音。音频字符串以data:audio/wav;base64作为标题。 完成http发布请求以将此音频字符串发送到node.js REST端点后,已在服务器端点成功接收到音频字符串数据。

node.js服务器端点将此音频字符串转换回二进制数据并使用节点文件流写入磁盘文件。当我尝试在Windows媒体播放器中播放此磁盘文件时,它会出错。但是VLC播放器运行得很好。我的业务要求是让这个文件在Windows媒体播放器上运行。我在哪里做错了?

Ionic 2相关代码是:

declare var audioinput : any;
        let captureCfg = {
            sampleRate: audioinput.SAMPLERATE.CD_AUDIO_44100Hz,
            bufferSize: 16384,
            channels: audioinput.CHANNELS.MONO,
            format: audioinput.FORMAT.PCM_16BIT,
            normalize: true,
            normalizationFactor: 32767.0,
            streamToWebAudio: false,
            audioContext: null,
            concatenateMaxChunks: 50,
            audioSourceType: audioinput.AUDIOSOURCE_TYPE.DEFAULT
      };
var encoder = new WavAudioEncoder(this.captureCfg.sampleRate, this.captureCfg.channels, this.captureCfg.format)        
        encoder.encode([this.audioDataBuffer]);
        let blob = encoder.finish("audio/wav");
        let reader = new FileReader();
        let audio : any = {};
        reader.onload = (evt : any) => {
          this.htmlAudioSource = evt.target.result;
          audio.src = evt.target.result;
          audio.type = "audio/wav";
          this
            .appService
            .httpPost('Nodejs url', audio);
          this.audioDataBuffer = [];
        };
        reader.readAsDataURL(blob);

Node.js服务器端相关代码是:

let data1 = req.body;
let dataArray = data.split(',');
if(dataArray.length > 1){
    let data3 = dataArray[1];
    data3 = new Buffer(data3, 'base64');
    fs.writeFile("c:\\temp\\testBinary.wav",data3,"utf8",(err)=>{if(err){return(console.log(err))}});
}

0 个答案:

没有答案