【发布时间】:2018-09-29 02:32:38
【问题描述】:
有什么方法可以使用Web Audio API 和AudioContext 来获取MP3 和JavaScript 文件的持续时间?
我可以使用 HTML5 元素获得该持续时间:<audio/> 但我想使用 Web Audio API。
下面是我到目前为止的代码。如果您有任何建议,请将我的代码 fork 到:CodePen.io 并发布链接。
CodePen.io 代码:https://codepen.io/anon/pen/QZwyqd
window.addEventListener('load', () => {
const URL = 'https://www.tophtml.com/snl/15.mp3';
let url = URL + '?nocache='+(new Date()).getTime();
let audio = document.querySelector('audio');
audio.setAttribute('src', url);
audio.addEventListener('durationchange', function() {
log('way 1: ' + this.duration);
});
getAudioDurationWithAudioContext().then((duration) => {
log('way 2: ' + duration);
});
log('...');
});
function getAudioDurationWithAudioContext() {
// PLEASE, IMPLEMENT THIS FUNCTION AND "FORK" THIS CODE
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('???.???');
}, 1000);
});
}
function log(text, append = true) {
let logger = document.querySelector('.logger');
if (text == '') {
logger.innerHTML = '';
return;
}
if (!append)
logger.innerHTML = '';
let entry = document.createElement('div');
entry.innerHTML = text;
logger.appendChild(entry);
}
.logger {
display: inline-block;
font-family: monospace;
white-space: pre;
font-size: 13px;
margin-top: 10px;
background-color: #d4e4ff;
}
.logger {
padding: 4px;
}
.divider {
border-top: 1px solid #ccc;
margin: 10px 0;
}
<div>
<audio controls preload="auto"></audio>
</div>
<div class="logger"></div>
谢谢!
【问题讨论】:
-
我不确定是否可以在没有音频标签的情况下使用
AudioContext。因此,即使可以使用AudioContext获得持续时间,您最终仍将使用音频标签
标签: javascript html web-audio-api audiocontext