xbblogs

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

分类:

技术点:

相关文章:

  • 2021-10-15
  • 2021-09-16
  • 2021-10-15
  • 2021-12-29
  • 2021-07-11
  • 2021-12-15
  • 2021-12-19
猜你喜欢
  • 2021-10-15
  • 2021-12-29
  • 2021-12-19
  • 2021-10-15
  • 2021-12-05
  • 2021-10-03
  • 2021-11-27
相关资源
相似解决方案