add AudioBar onClick function && fix all bugs in playAudio

develop
TBS093A 2020-05-26 21:52:20 +02:00
parent 298dfa6d41
commit f9ab9235ed
1 changed files with 66 additions and 35 deletions

View File

@ -12,10 +12,10 @@ const IndexInterface = () => {
return new Promise(resolve => setTimeout(resolve, ms)) return new Promise(resolve => setTimeout(resolve, ms))
} }
const controlAudio = () => { const controlAudio = async() => {
if (play === false) { if (play === false) {
setPlay(!play) setPlay(!play)
playAudio() await playAudio()
} }
else if (play === true && pause === false) { else if (play === true && pause === false) {
setPause(!pause) setPause(!pause)
@ -37,7 +37,7 @@ const IndexInterface = () => {
audio.play() audio.play()
} }
const playAudio = () => { const playAudio = async() => {
let audio = document.getElementById("audio"); let audio = document.getElementById("audio");
audio.src = audioTest; audio.src = audioTest;
@ -95,7 +95,7 @@ const IndexInterface = () => {
ctx.fillStyle = "#000"; ctx.fillStyle = "#000";
ctx.fillRect(0, 0, WIDTH, HEIGHT); ctx.fillRect(0, 0, WIDTH, HEIGHT);
timerAudio(audio) timerAudio()
for (let i = 0; i < bufferLength; i++) { for (let i = 0; i < bufferLength; i++) {
@ -113,7 +113,7 @@ const IndexInterface = () => {
x += barWidth - 27; x += barWidth - 27;
} }
} }
const timerAudio = (audio) => { const timerAudio = () => {
let maxMinutes = parseInt(audio.duration / 60) let maxMinutes = parseInt(audio.duration / 60)
let maxSeconds = parseInt(audio.duration - (60 * maxMinutes)) let maxSeconds = parseInt(audio.duration - (60 * maxMinutes))
@ -129,22 +129,53 @@ const IndexInterface = () => {
+ ':' + ':'
+ maxSeconds + maxSeconds
} }
const progressBarAudio = (audio) => { const progressBarAudio = async() => {
await sleep(1000)
let maxProgress = audio.duration let maxProgress = audio.duration
let onePercent = maxProgress / 100 let onePercent = maxProgress / 100
let progress = 1; let progress = 1
for(let i = 0; i <= 100; i++) { let lastProgressValue = 0;
while (progress <= 20) {
await sleep(5000 * onePercent)
let bar = document.getElementById('audioProgressBar').innerHTML let bar = document.getElementById('audioProgressBar').innerHTML
progress = parseInt((audio.currentTime / onePercent) / 5);
if (lastProgressValue !== progress) {
document.getElementById('audioProgressBar').innerHTML = bar.replace('|', '#') document.getElementById('audioProgressBar').innerHTML = bar.replace('|', '#')
console.log(i) lastProgressValue = progress
sleep(parseInt((onePercent * 1000) * 5)) }
console.log(progress)
console.log(lastProgressValue)
} }
} }
audio.play(); audio.play();
renderFrame(); renderFrame();
progressBarAudio(audio) await progressBarAudio()
}
const barClick = (e) => {
e.preventDefault()
let rect = e.target.getBoundingClientRect()
let y = e.clientY - rect.top
let value = parseInt((y / 364) * 100)
let audio = document.getElementById("audio");
let maxProgress = audio.duration
let onePercent = maxProgress / 100
audio.currentTime = value * onePercent
let progress = parseInt(value / 5)
let i = 0
while (i < 20) {
let bar = document.getElementById('audioProgressBar').innerHTML
document.getElementById('audioProgressBar').innerHTML = bar.replace('#', '|')
i++
}
i = 0
while (i <= progress){
let bar = document.getElementById('audioProgressBar').innerHTML
document.getElementById('audioProgressBar').innerHTML = bar.replace('|', '#')
i++
}
} }
return ( return (
@ -157,7 +188,7 @@ const IndexInterface = () => {
0:0 0:0
</div> </div>
<div>===</div> <div>===</div>
<div id='audioProgressBar'> <div id='audioProgressBar' onClick={ e => barClick(e)} onDrag={ e => barClick(e)}>
|<br /> |<br />
|<br /> |<br />
|<br /> |<br />
@ -186,7 +217,7 @@ const IndexInterface = () => {
</div> </div>
<canvas id='canvas'> <canvas id='canvas'>
</canvas> </canvas>
<audio id='audio' controls> <audio id='audio'>
</audio> </audio>
</div> </div>
) )