У меня есть html код, где есть аудио в js, и мне бы хотелось реализовать случайный следующий трек и что бы 1 и тот же трек для раза подряд не выпадал, а как это сделать я не знаю. Если можете чем-то помочь, я буду благодарен. Вот сам код:
function timeColor() {
var now = new Date();
var hours = now.getHours();
var color = "#f2d44e";
if (hours >= 20 || hours < 7)
color = "#00203f"
return color;
}
// Create a new instance of an audio object and adjust some of its properties
var audio = new Audio();
audio.src = ['audio/Nightcore.mp3', 'audio/longlost.mp3', 'audio/Nightcore.mp3'][Math.random() * 2 | 0];
audio.controls = false;
audio.loop = true;
audio.autoplay = true;
// Establish all variables that your Analyser will use
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x, bar_width, bar_height;
// Initialize the MP3 player after the page loads all of its HTML into the window
window.addEventListener("load", initMp3Player, false);
function initMp3Player() {
document.getElementById('audio_box').appendChild(audio);
context = new AudioContext(); // AudioContext object instance
analyser = context.createAnalyser(); // AnalyserNode method
canvas = document.getElementById('analyser_render');
ctx = canvas.getContext('2d');
// Re-route audio playback into the processing graph of the AudioContext
source = context.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(context.destination);
frameLooper();
}
// frameLooper() animates any style of graphics you wish to the audio frequency
// Looping at the default frame rate that the browser provides(approx. 60 FPS)
function frameLooper() {
window.requestAnimationFrame(frameLooper);
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
ctx.fillStyle = timeColor(); // Color of the bars
bars = 500;
for (var i = 0; i < bars; i++) {
bar_x = i * 3;
bar_width = 2;
bar_height = -(fbc_array[i] / 3);
// fillRect( x, y, width, height ) // Explanation of the parameters below
ctx.fillRect(bar_x, canvas.height, bar_width, bar_height);
}
}
#analyser_render {
height: 30px;
position: fixed;
bottom: 0;
width: 100%;
margin: 0 auto;
}
<div id="mp3_player">
<div id="audio_box"></div>
<canvas id="analyser_render"></canvas>
</div>
Вам понадобится библиотека файлов и ротатор для неё, а также прослушивание события завершения аудио-фрагмента.
Код будет примерно таким:
function timeColor() {
var now = new Date();
var hours = now.getHours();
var color = "#f2d44e";
if (hours >= 20 || hours < 7) {
color = "#00203f";
}
return color;
}
//* Create library for audio rotation
var audioLibrary = [
'audio/Nightcore.mp3',
'audio/longlost.mp3',
'audio/Nightcore.mp3'
];
//* Get random audio from library and remove it
function getRandomSound() {
var audioPosition = Math.floor(Math.random() * audioLibrary.length);
var audioFile = audioLibrary[audioPosition];
audioLibrary.splice(audioPosition,1);
return audioFile;
}
// Create a new instance of an audio object and adjust some of its properties
var audio = new Audio();
audio.src = getRandomSound();
audio.controls = false;
audio.loop = true;
audio.autoplay = true;
// Establish all variables that your Analyser will use
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x, bar_width, bar_height;
function initMp3Player() {
document.getElementById('audio_box').appendChild(audio);
audio.addEventListener('ended', function() {
//* update audio source
audio.src = getRandomSound();
});
context = new AudioContext(); // AudioContext object instance
analyser = context.createAnalyser(); // AnalyserNode method
canvas = document.getElementById('analyser_render');
ctx = canvas.getContext('2d');
// Re-route audio playback into the processing graph of the AudioContext
source = context.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(context.destination);
frameLooper();
}
// Initialize the MP3 player after the page loads all of its HTML into the window
window.addEventListener("load", initMp3Player, false);
// frameLooper() animates any style of graphics you wish to the audio frequency
// Looping at the default frame rate that the browser provides(approx. 60 FPS)
function frameLooper() {
window.requestAnimationFrame(frameLooper);
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
ctx.fillStyle = timeColor(); // Color of the bars
bars = 500;
for (var i = 0; i < bars; i++) {
bar_x = i * 3;
bar_width = 2;
bar_height = -(fbc_array[i] / 3);
// fillRect( x, y, width, height ) // Explanation of the parameters below
ctx.fillRect(bar_x, canvas.height, bar_width, bar_height);
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть блок с текстом и скрипт, который сохраняет текст в буфер обмена при нажатие на кнопкуКак убрать (скрыть) блок с текстом со страницы, но оставить...
Я пытаюсь вытащить из другого сайта нужные мне ссылки и засунуть их в массивВроде бы всё делаю правильно, но массив получается на выходе странный
Подскажите, можно ли регулярным выражением привести строку к нужному виду?
Неоднократно уже добавлял этот кодЭто финальная версия, которую надо бы подрихтовать