NodeJs版
一、wav格式 Base64 转音频
var fs = require('fs');
(async () => {
var fileData = fs.readFileSync('./base64.txt', 'utf-8');
// fileData = fileData.replace(/^data:audio\/\w+;base64,/, ""); // 不做替换也行
var dataBuffer = Buffer.from(fileData, 'base64');
var now = Date.now(); //获取系统当前时间数值
var savePath = './' + now + '.wav'; //服务器存储文件名
fs.writeFile(savePath, dataBuffer, function (err) {
if (err) {
console.log(err);
} else {
console.log('成功');
}
});
})()
二、多段wav格式的Base64 合成一个 wav音频文件
var fs = require('fs');
(async () => {
var fileData = fs.readFileSync('./voice_base64.txt', 'utf-8');
// fileData = fileData.replace(/^data:audio\/\w+;base64,/, ""); // 不做替换也行
var dataBuffer = Buffer.from(fileData, 'base64');
var now = Date.now(); //获取系统当前时间数值
var savePath = './' + now + '.wav'; //服务器存储文件名
//模拟多段wav base64
var allBuffer = compliteWav([
dataBuffer,
dataBuffer,
dataBuffer
])
fs.writeFile(savePath, allBuffer, function (err) {
if (err) {
console.log(err);
} else {
console.log('成功');
}
});
})()
function compliteWav(res) {
const wavHeadLen = 44;
let times = res.length;
let wavData = [];
let allAudioLen = 0;
for (let num = 0; num < times; num++) {
let wav = Buffer.from(res[num], 'base64');
wavData.push(wav)
allAudioLen += wav.length;
}
let wavHead = wavData[0].slice(0, wavHeadLen)
//pcm部分
let pcmLen = allAudioLen - times * wavHeadLen
let fileLen = pcmLen + wavHeadLen - 8
//修改4-8字节为<文件长度-4> 小端对齐
let fileLenBytes = Buffer.allocUnsafe(4);
fileLenBytes.writeUIntLE(fileLen, 0, 4)
wavHead = Buffer.concat([wavHead.slice(0, 4), fileLenBytes, wavHead.slice(8)])
//修改第40-44字节为<文件长度-44>
let pcmLenBytes = Buffer.allocUnsafe(4);
pcmLenBytes.writeUIntLE(pcmLen, 0, 4)
wavHead = Buffer.concat([wavHead.slice(0, 40), pcmLenBytes])
let wavBytes = wavHead
for (let num = 0; num < times; num++) {
let b = wavData[num].slice(wavHeadLen)
wavBytes = Buffer.concat([wavBytes, b])
}
return wavBytes
}
wav 与 mp3 的转化使用 ffmpeg 工具
wav转mp3
ffmpeg -i input.wav -f mp3 -acodec libmp3lame -y output.mp3
mp3转wav
ffmpeg -i input.mp3 -f wav output.wav
wav文件格式分析与详解
voice_base64.txt