js如何将base64字符串的音频转成wav格式
时间: 2024-09-12 22:10:30 浏览: 48
vue项目base64字符串转图片的实现代码
在JavaScript中,将Base64编码的音频字符串转换为WAV格式的音频文件,通常涉及到以下步骤:
1. 解码Base64字符串,获取原始的二进制数据。
2. 根据WAV文件的格式要求,构造WAV文件头。
3. 将解码后的音频数据和构造的WAV头信息合并。
4. 创建一个Blob对象,并设置正确的MIME类型为audio/wav。
5. 使用URL.createObjectURL()方法创建一个可下载的URL。
6. 创建一个下载链接,并模拟点击以触发下载。
下面是一个简单的示例代码,演示如何将Base64编码的音频字符串转换为WAV格式文件并触发下载:
```javascript
function base64toWav(base64Data, fileName) {
// 解码Base64数据到二进制
const binaryString = atob(base64Data.split(',')[1]);
const len = binaryString.length;
const binaryArray = new Uint8Array(len);
for (let i = 0; i < len; i++) {
binaryArray[i] = binaryString.charCodeAt(i);
}
// WAV文件头模板,根据实际情况进行调整
const wavArrayBuffer = new ArrayBuffer(44);
const view = new DataView(wavArrayBuffer);
let p = 0;
function writeString(s) {
for (let i = 0; i < s.length; i++) {
view.setUint8(p + i, s.charCodeAt(i));
}
p += s.length;
}
const channels = 1; // 单声道
const sampleRate = 16000; // 采样率
const bitDepth = 8; // 采样深度
// 写入WAV文件头信息
writeString('RIFF');
view.setUint32(4, 36 + binaryArray.length, true);
writeString('WAVE');
writeString('fmt ');
view.setUint32(40, 16, true);
view.setUint16(44, 1, true);
view.setUint16(46, channels, true);
view.setUint32(48, sampleRate, true);
view.setUint32(52, sampleRate * channels * bitDepth / 8, true);
view.setUint16(56, channels * bitDepth / 8, true);
view.setUint16(58, bitDepth, true);
writeString('data');
view.setUint32(52, binaryArray.length, true);
// 将二进制音频数据写入ArrayBuffer
const audioBuffer = new Uint8Array(wavArrayBuffer, 44, binaryArray.length);
audioBuffer.set(binaryArray, 0);
// 创建Blob对象并下载
const blob = new Blob([audioBuffer], {type: 'audio/wav'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
a.href = url;
a.download = fileName || 'audio.wav';
a.click();
window.URL.revokeObjectURL(url);
}
// 使用示例
const base64Audio = '你的Base64音频字符串';
base64toWav(base64Audio, 'output.wav');
```
请将 `'你的Base64音频字符串'` 替换为实际的Base64音频数据。这段代码会自动创建一个隐藏的下载链接,当Base64音频数据被转换并写入Blob后,会自动触发下载过程。
阅读全文