Javascript 在移动导航器中分配音频HTML src的Blob大小限制?
如果我为大于500000000 KB(48 MB)的音频HTML元素动态分配SRC,则Mobile browser将启动一个错误。如果blob低于500000000 KB,则没有问题 大约13分钟的单声道音频。我需要30分钟 可以放大吗 我正在使用javascript生成声波(本例中为随机噪声),并保存在Uint8Array缓冲区中Javascript 在移动导航器中分配音频HTML src的Blob大小限制?,javascript,blob,html5-audio,wav,Javascript,Blob,Html5 Audio,Wav,如果我为大于500000000 KB(48 MB)的音频HTML元素动态分配SRC,则Mobile browser将启动一个错误。如果blob低于500000000 KB,则没有问题 大约13分钟的单声道音频。我需要30分钟 可以放大吗 我正在使用javascript生成声波(本例中为随机噪声),并保存在Uint8Array缓冲区中 var megaBytes = 48; //50331648 KBytes var bytes = megaBytes*1024*1024; var
var megaBytes = 48; //50331648 KBytes
var bytes = megaBytes*1024*1024;
var uint8 = new Uint8Array(bytes);
for (i = 0; i < bytes; i++) {
uint8[i] = getRandomInt(0,100) + 128;
}
var myBlob = new Blob( [arrBytesFinal] , { type : 'audio/wav; codecs=0' });
var readerBlob = new FileReader();
readerBlob.addEventListener("loadend", function() {
var myAudioFinal = readerBlob.result.toString();
audioControl.src = myAudioFinal; //HERE THE NAVIGATOR PROBLEM.
playButton.disabled = false;
});
readerBlob.readAsDataURL(myBlob);
创建音频/wav类型Blob并将HTML audioControl指定为src之后
var megaBytes = 48; //50331648 KBytes
var bytes = megaBytes*1024*1024;
var uint8 = new Uint8Array(bytes);
for (i = 0; i < bytes; i++) {
uint8[i] = getRandomInt(0,100) + 128;
}
var myBlob = new Blob( [arrBytesFinal] , { type : 'audio/wav; codecs=0' });
var readerBlob = new FileReader();
readerBlob.addEventListener("loadend", function() {
var myAudioFinal = readerBlob.result.toString();
audioControl.src = myAudioFinal; //HERE THE NAVIGATOR PROBLEM.
playButton.disabled = false;
});
readerBlob.readAsDataURL(myBlob);
一些注意事项:
- 确保您的WAV确实是一个WAV文件(根据RIFF格式等,头为44字节)
- 使用
readerBlob.result.toString()代码>不会提供音频数据(是字节值中的文本)
var myBlob = new Blob( [arrBytesFinal] , { type : 'audio/wav;' });
var readerBlob = new FileReader();
readerBlob.addEventListener("loadend", function( evt ) {
var myAudioFinal = new Uint8Array( readerBlob.result );
//var myAudioFinal = new Uint8Array( evt.target.result ); //# or try this way...
audioControl.src = myAudioFinal; //HERE THE NAVIGATOR PROBLEM.
playButton.disabled = false;
});
readerBlob.readAsArrayBuffer(myBlob);
只需像audioControl.src=URL.createObjectURL(myBlob)那样。DataURL只能如此之大。@StackSlave data://URL本身可以更大(在v8浏览器中约为512MB),但它肯定比blob://URI占用更多内存(约为3倍+)。为了便于操作,您可以使用Web Audio API直接生成声音,而无需内存压力@凯伊多。谢谢但我不能使用Web音频API,因为如果导航器最小化或移动暂停,导航器会关闭声音。