【发布时间】:2021-04-22 08:41:06
【问题描述】:
是否可以合并两个音频“base64data”字符串来创建一个唯一的音频文件?
我在字符串中有两个循环音频 base64 wav,如下所示:
data:audio/x-wav;base64,UklGRuIfQVZFZm1R7SH$WP90AhICLwKT...
我想我在做一些非常愚蠢的事情,但我想知道这是否可能。
我正在尝试将两个 wav 合并为一个,我可以在音频 HTML 元素中播放。 我想提取第二个的base64数据合并到一个然后播放,但是导航器返回错误。
这是我的 javascript 代码:
var audio_Data1 = base64_audio1;
var audio_Data2 = base64_audio1.split(',')[1];
var audio_final = audio_Data1 + audio_Data2;
audioControl.src = audio_final;
audioControl.play();
感谢您的建议 谢谢!
编辑:
我正在尝试解码 base64 块以缓冲数据并连接缓冲区以再次编码为 base64。
问题:返回的base64是“AA=="
我认为“AA==”是 0 个字节。然后当我连接缓冲区时我做错了:
var myB64Data = myB64WavString.split(',');
var myB64Chunk = myB64Data[1];
var myBuffer1 = base64ToArrayBuffer(myB64Chunk);
var myBuffer2 = ""; //Same process
var myFinalBuffer = [];
myFinalBuffer.push.apply(myFinalBuffer, myBuffer1);
myFinalBuffer.push.apply(myFinalBuffer, myBuffer2);
var myFinalB64 = 'data:audio/x-wav;base64,' + arrayBufferToBase64(myFinalBuffer);
console.log( myFinalB64 );
控制台返回下一个:"data:audio/x-wav;base64,AA=="
我用于编码/解码的 javascript 工作函数:
function base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
function arrayBufferToBase64( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return window.btoa( binary );
}
【问题讨论】:
标签: javascript audio web-audio-api