我使用插件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))}});
}