html5播放mp3文件隐藏,javascript – 使用html5拖放上传后播放mp3文件

您需要遵循的基本过程是

>使用Drag and Drop Files捕获文件

>在Form Data Object中发布文件

>回复您要播放的音频项目的URL

>使用音频API播放音频

此jsFiddle允许您将音频文件拖动到某个区域,然后它将播放该文件.

您应该能够使用JavaScriptAudioNode的onaudioprocess事件来获取当前幅度.

编辑:

根据JaapH的说法,我再次对此进行了研究.处理器用于获取适当的事件来渲染画布.所以它并不是真的需要.此jsFiddle与下面相同.但是,它使用requestAnimationFrame而不是处理器.

这是旧代码,请参阅上面的使用请求动画框架的小提琴:

var context = new (window.AudioContext || window.webkitAudioContext)();

var source;

var processor;

var analyser;

var xhr;

function initAudio(data) {

source = context.createBufferSource();

if(context.decodeAudioData) {

context.decodeAudioData(data, function(buffer) {

source.buffer = buffer;

createAudio();

}, function(e) {

console.log(e);

});

} else {

source.buffer = context.createBuffer(data, false /*mixToMono*/);

createAudio();

}

}

function createAudio() {

processor = context.createJavaScriptNode(2048 /*bufferSize*/, 1 /*num inputs*/, 1 /*numoutputs*/);

processor.onaudioprocess = processAudio;

analyser = context.createAnalyser();

source.connect(context.destination);

source.connect(analyser);

analyser.connect(processor);

processor.connect(context.destination);

source.noteOn(0);

setTimeout(disconnect, source.buffer.duration * 1000);

}

function disconnect() {

source.noteOff(0);

source.disconnect(0);

processor.disconnect(0);

analyser.disconnect(0);

}

function processAudio(e) {

var freqByteData = new Uint8Array(analyser.frequencyBinCount);

analyser.getByteFrequencyData(freqByteData);

console.log(freqByteData);

}

function handleResult() {

if (xhr.readyState == 4 /* complete */) {

switch(xhr.status) {

case 200: /* Success */

initAudio(request.response);

break;

default:

break;

}

xhr = null;

}

}

function dropEvent(evt) {

evt.stopPropagation();

evt.preventDefault();

var droppedFiles = evt.dataTransfer.files;

//Ajax the file to the server and respond with the data

var formData = new FormData();

for(var i = 0; i < droppedFiles.length; ++i) {

var file = droppedFiles[i];

files.append(file.name, file);

}

xhr = new XMLHttpRequest();

xhr.open("POST", 'URL');

xhr.onreadystatechange = handleResult;

xhr.send(formData);

}

function dragOver(evt) {

evt.stopPropagation();

evt.preventDefault();

return false;

}

var dropArea = document.getElementById('dropArea');

dropArea.addEventListener('drop', dropEvent, false);

dropArea.addEventListener('dragover', dragOver, false);

我希望这有帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值