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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-07-06 mysql 将null转代为0(转)