1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信小程序实现pcm音频转换wav音频

微信小程序实现pcm音频转换wav音频

时间:2018-09-30 05:24:47

相关推荐

微信小程序实现pcm音频转换wav音频

总体思路就是,在拿到录音结束之后的临时录音文件路径的时候,创建一个文件管理器,然后读取录音文件拿到二进制数据,再调用工具函数进行转换,完成之后将转换完成的数据写入到新的文件中,拿到新文件的路径去做想要做的操作。

// 录音录制之后拿到tempFilePathconst FileSystemManager = wx.getFileSystemManager()FileSystemManager.readFile({filePath: tempFilePath,success: res => {let view = encodeWAV(res.data, 1, 16000)let dateNow = Date.now()FileSystemManager.writeFile({data: view.buffer,filePath: `${wx.env.USER_DATA_PATH}/${dateNow}.wav`,success: res => {// 拿封装好的文件进行操作}})}})// 一些工具函数,将数据进行转码、封装function encodeWAV(samples, numChannels, sampleRate) {var buffer = new ArrayBuffer(44 + samples.byteLength);var view = new DataView(buffer);/* RIFF identifier */writeString(view, 0, 'RIFF');/* RIFF chunk length */view.setUint32(4, 36 + samples.byteLength, true);/* RIFF type */writeString(view, 8, 'WAVE');/* format chunk identifier */writeString(view, 12, 'fmt ');/* format chunk length */view.setUint32(16, 16, true);/* sample format (raw) */view.setUint16(20, 1, true);/* channel count */view.setUint16(22, numChannels, true);/* sample rate */view.setUint32(24, sampleRate, true);/* byte rate (sample rate * block align) */view.setUint32(28, sampleRate * 4, true);/* block align (channel count * bytes per sample) */view.setUint16(32, numChannels * 2, true);/* bits per sample */view.setUint16(34, 16, true);/* data chunk identifier */writeString(view, 36, 'data');/* data chunk length */view.setUint32(40, samples.byteLength, true);copyBytes(view, 44, samples);return view;}function copyBytes(output, offset, input) {const dataView = new DataView(input);for (var i = 0; i < input.byteLength; i++, offset++) {output.setInt8(offset, dataView.getInt8(i));}}function writeString(view, offset, string) {for (var i = 0; i < string.length; i++) {view.setUint8(offset + i, string.charCodeAt(i));}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。