wav格式base64字符串轉成wav文件


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM