Files
swingmusic-extended/src/composables/playAudio.js
T
2022-02-23 02:46:06 +03:00

89 lines
2.3 KiB
JavaScript

import {ref} from "@vue/reactivity";
import perks from "./perks";
import media from "./mediaNotification.js";
import state from "./state.js";
const audio = ref(new Audio()).value;
const pos = ref(0);
const current_time = ref(0);
const playing = ref(state.is_playing);
const url = "http://0.0.0.0:9876/file/";
const playAudio = (trackid) => {
const elem = document.getElementsByClassName('progress-bar')[0];
const bottom_elem = document.getElementsByClassName('progress-bar')[1];
const full_path = url + encodeURIComponent(trackid);
new Promise((resolve, reject) => {
audio.src = full_path;
audio.oncanplaythrough = resolve;
audio.onerror = reject;
})
.then(() => {
audio.play().then(() => {
perks.focusCurrent()
state.is_playing.value = true;
}
);
audio.ontimeupdate = () => {
current_time.value = audio.currentTime;
pos.value = (audio.currentTime / audio.duration) * 1000;
let bg_size = ((audio.currentTime / audio.duration) * 100)
elem.style.backgroundSize = `${bg_size}% 100%`;
bottom_elem.style.backgroundSize = `${bg_size}% 100%`;
};
})
.catch((err) => console.log(err));
};
function playNext() {
playAudio(perks.next.value.trackid);
perks.current.value = perks.next.value;
media.showMediaNotif();
}
function playPrev() {
playAudio(state.prev.value.trackid);
perks.current.value = perks.prev.value;
}
function seek(position) {
audio.currentTime = (position / 1000) * audio.duration;
}
function playPause() {
if (audio.src === "") {
playAudio(perks.current.value.trackid);
}
if (audio.paused) {
audio.play();
} else {
audio.pause();
}
}
audio.addEventListener("play", () => {
state.is_playing.value = true;
});
audio.addEventListener("pause", () => {
state.is_playing.value = false;
});
audio.addEventListener("ended", () => {
playNext();
});
export default {playAudio, playNext, playPrev, playPause, seek, pos, playing, current_time};
// TODO
// Try implementing classes to play audio .ie. Make the seek, playNext, playPrev, etc the methods of a class. etc