【发布时间】:2019-01-14 03:48:28
【问题描述】:
有一个自定义的动画 HTML 音频分析器图形,可播放音轨并根据该音频的频率移动。
这是来自 CodePen HERE 的代码,我发现它只适用于 HTTPS 域。
现在的问题是:我不需要像代码那样上传音轨,我只需要一个简单的音轨来自动播放并删除那个上传按钮。假设我在服务器上的同一目录中有一个 track1.mp3,并希望在加载我的 HTML 页面时播放它。
window.onload = function() {
var file = document.getElementById("thefile");
var audio = document.getElementById("audio");
file.onchange = function() {
var files = this.files;
audio.src = URL.createObjectURL(files[0]);
audio.load();
audio.play();
var context = new AudioContext();
var src = context.createMediaElementSource(audio);
var analyser = context.createAnalyser();
var canvas = document.getElementById("canvas");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var ctx = canvas.getContext("2d");
src.connect(analyser);
analyser.connect(context.destination);
analyser.fftSize = 256;
var bufferLength = analyser.frequencyBinCount;
console.log(bufferLength);
var dataArray = new Uint8Array(bufferLength);
var WIDTH = canvas.width;
var HEIGHT = canvas.height;
var barWidth = (WIDTH / bufferLength) * 2.5;
var barHeight;
var x = 0;
function renderFrame() {
requestAnimationFrame(renderFrame);
x = 0;
analyser.getByteFrequencyData(dataArray);
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, WIDTH, HEIGHT);
for (var i = 0; i < bufferLength; i++) {
barHeight = dataArray[i];
var r = barHeight + (25 * (i / bufferLength));
var g = 250 * (i / bufferLength);
var b = 50;
ctx.fillStyle = "rgb(" + r + "," + g + "," + b + ")";
ctx.fillRect(x, HEIGHT - barHeight, barWidth, barHeight);
x += barWidth + 1;
}
}
audio.play();
renderFrame();
};
};
#thefile {
position: fixed;
top: 10px;
left: 10px;
z-index: 100;
}
#canvas {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
audio {
position: fixed;
left: 10px;
bottom: 10px;
width: calc(100% - 20px);
}
<div id="content">
<input type="file" id="thefile" accept="audio/*" />
<canvas id="canvas"></canvas>
<audio id="audio" controls></audio>
</div>
【问题讨论】:
-
" 假设我在同一目录中有一个 track1.mp3,并且想在我的页面加载时播放它。" 假设是服务器上的这个文件夹还是你的桌面?
-
具有 HTTPS 域的服务器
-
好的,测试一下它准备好了。我只能将其加载到某个点,因为该站点不是 Same Origin Policy 问题的合适环境,所以如果您遇到任何问题,请告诉我,祝您好运。
标签: javascript html