Проблема с audio player JS

114
10 декабря 2021, 23:50

Я сделал небольшой плеер на js (5-6 треков). Для воспроизведения музыки использовал не музыку из локального компьютера а прямую ссылку на неё, и картинки так же отображаются с помощью пряомой ссылки. Поэтому вы для удобства можете посмотреть код например в CodePen, и всё будет так как у меня работать. Вот мой код: Вот ссылка кода на codeoPen кому удобней: CodePen

    let audio = document.getElementById("audio");
    let progress = document.getElementById("progress");

    let playImage = document.getElementsByClassName("playImage")[0];
    audio.ontimeupdate = progressUpdate;
   //ontimeupdate - Когда текущая позиция воспроизведения изменилась.
   progress.onclick = audioRewind;
   let headerImage = document.getElementsByClassName("headerImage")[0];
   var musicSrc = ["https://cs6-6v4.vkuseraudio.net/p6/38be310ad2c4d6.mp3?extra=J0x0WHcYhNYT92u_iZLzElrvKe2RsF4oDSwNpp_cqOKHFwifkiKbQX4rXadE0HqRk8KX3_jyZUciHrEmmAHFnKAwZlrbooH7-4yy88Dh5OG01s3o2Wmw8H8iuDNmbhqWUg-sZNTzKNPn83o2QJTetK_S2g",


   "https://psv4.vkuseraudio.net/c613320/u56185402/audios/a70900b86e33.mp3?extra=TIEH2yIYtBmjvB4tgwiOaj68Kweawv0KkzQ-Y0g_ZCfEIRAOEB3A7QLPxNrmCSNFSNYDPqPTl-d5Oe6Rtjq9OhpEzD50ntM6GpVsFRCYupjqQ3rWUy4Scspi72Ezj2H1ZD03v7PY1FdpC4PLSqK0cV_9tQ", 
   "https://cs6-8v4.vkuseraudio.net/p4/a7d25cb45678f4.mp3?extra=B_0bDTQ7GpMDpQrAfMLBjn8FzaQc0HmJ-Kv-Mdzyiz1g2FNIwqCbTVA82oeCYI35zKNnLtOcLUtSPIuZtVuVI3OV6syHaL5cpFoOQdAvRoyQqvMSIpCxOHia20D0RWSc-M2EusfGLAYeihMu0RUYILtuTw", 
   "https://musicd.mycdn.me/v0/stream?id=v0_10058962922_1_1&cid=v0_10058962922_1_1&fid=122898822407282&uid=25a91d9ecc279c38a006c6e8960c01eb&sid=2e0e54c417a2455515cac2f374faa2f00d301b5d50702693900fbbbf2cc0dceddb320db6b89dc470fc498cea4001afa4f7bc60e09512e1723820b858e2b2649a&ts=1575389249780&md5=e7c92837f32a965c484f8475817f62f9&clientHash=1419615615215421021815614613414334128224138742381273901616122922622611815419637422440413626", 
   "https://musicd.mycdn.me/v0/stream?id=v0_10009217877_1_1&cid=v0_10009217877_1_1&fid=7430151083073&uid=25a91d9ecc279c38a006c6e8960c01eb&sid=2e0e54c417a2455515cac2f374faa2f00d301b5d50702693900fbbbf2cc0dceddb320db6b89dc470fc498cea4001afa4f7bc60e09512e1723820b858e2b2649a&ts=1575391654925&md5=470fa0e56eac2553aadd108b6c750b5e&clientHash=221221319221221189189951495412959165598191172121495914928322274221221149499221221169189",
    "https://musicd.mycdn.me/v0/stream?id=v0_10046395798_1_1&cid=v0_10046395798_1_1&fid=123247068672503&uid=25a91d9ecc279c38a006c6e8960c01eb&sid=2e0e54c417a2455515cac2f374faa2f00d301b5d50702693900fbbbf2cc0dceddb320db6b89dc470fc498cea4001afa4f7bc60e09512e1723820b858e2b2649a&ts=1575392411173&md5=0856c0d6992c7b6acaae9beb638e45f9&clientHash=273260338239229219481156231312291179361432152472472471371713752311628428593233135257163241175"

    ]; //Прямые ссылки на музыку

    let musicImages = ["https://i1.sndcdn.com/artworks-000140977662-ytk0y6-t500x500.jpg",
   "https://images-na.ssl-images-amazon.com/images/I/4105aA6-6DL._SX355_.jpg", 
   "https://i1.imgiz.com/rshots/9484/brns-american-money-virtu-remix_9484768-7491_1800x945.jpg",
   "https://images-na.ssl-images-amazon.com/images/I/31kljt9YEbL._SL500_AC_SS350_.jpg", 
   "https://www.cosmo.com.ua/upload/image/%D1%84%D0%BE%D1%82%D0%BE%20%D1%8F%D1%80%D0%BE%D1%81%D0%BB%D0%B0%D0%B2%20%D0%B1%D1%83%D0%B3%D0%B0%D0%B5%D0%B2_4_(1).jpg", 
   "https://i.pinimg.com/736x/46/ab/b5/46abb5dafce40cfea46da1b297a11a77.jpg"
   ];//Прямые ссылки на картинки для трека
   var number = 0;
    function play(){
        audio.play();
        if(playImage.src == "https://image.flaticon.com/icons/svg/149/149114.svg"){//ссылка на иконку play 
        playImage.src = "https://image.flaticon.com/icons/svg/149/149116.svg";//ссылка на иконку pause
        audio.play();
        }

        else{
            playImage.src = "https://image.flaticon.com/icons/svg/149/149114.svg";//ссылка на иконку play

                audio.pause();
        }

    }



    function speedUp(){
        number++;
        if(number >= musicSrc.length){
            number = 0;
        }
        audio.src = musicSrc[number];
        headerImage.src = musicImages[number];
        audio.play();
        playImage.src = "https://image.flaticon.com/icons/svg/149/149116.svg";//иконка pause
    }
    function speedDown(){
        number--;
        if(number < 0){
            number = musicSrc.length-1;
        }
        audio.src = musicSrc[number];
        headerImage.src = musicImages[number]; 
        audio.play();
        playImage.src = "https://image.flaticon.com/icons/svg/149/149116.svg";//иконка pause
    }
    function speedNormal(){
        audio.play();
        audio.playbackRate = 1;
    }



    function progressUpdate(){
        let d = audio.duration;//Получить длину аудио
        let c = audio.currentTime;// устанавливает или возвращает текущую позицию времени воспроизведения медиа файла
        if(c > 0){
        progress.value = (100 * c) / d;
    }
    }
    function audioRewind(){
        let c = audio.currentTime;
       if(c > 0){

        let w = this.offsetWidth;
        let o = event.offsetX;
        this.value = 100 * o/w;
        audio.pause();
        audio.currentTime = audio.duration * (o/w);
        playImage.src == "https://image.flaticon.com/icons/svg/149/149114.svg"/*ссылка на иконку play*/ ? audio.pause() : audio.play();
    }
    }
    audio.onended = function() {
        number++;
       audio.src = musicSrc[number];
       headerImage.src = musicImages[number]; 
       audio.play();
       playImage.src = "https://image.flaticon.com/icons/svg/149/149116.svg";//ссылка на иконку Pause

   }

          <span class="nameOfSong">Never Look Back</span><br/><span class="author">Boris Brejcha</span>
      <audio src="https://cs6-6v4.vkuseraudio.net/p6/38be310ad2c4d6.mp3?extra=J0x0WHcYhNYT92u_iZLzElrvKe2RsF4oDSwNpp_cqOKHFwifkiKbQX4rXadE0HqRk8KX3_jyZUciHrEmmAHFnKAwZlrbooH7-4yy88Dh5OG01s3o2Wmw8H8iuDNmbhqWUg-sZNTzKNPn83o2QJTetK_S2g" id="audio"></audio>

        <progress id="progress" max="100" value="0" onclick="ff1()" style="width: 100%; margin: 0 auto;"></progress>

         <button id="speed-down" onclick="speedDown()"><img src="https://image.flaticon.com/icons/svg/149/149118.svg" alt="" width="25px"/></button>
        <button id="play" onclick="play()"><img src="https://image.flaticon.com/icons/svg/149/149114.svg" alt="" width="25px" class="playImage"/></button>
        <button id="speed-up" onclick="speedUp()"><img src="https://image.flaticon.com/icons/svg/149/149117.svg" alt="" width="25px"/></button>

Когда я переключаю песни быстро, то выходит следующая ошибка: Uncaught(in promise) AbortError: The play() request was interrupted by e new load request. Не понимаю почему, я пытался найти её в гугле но ничего из вариантов не помогло. Когда очередь доходит до последнего трека и он заканчивается (не переключаю последний трек а именно когда он сам заканчивается), то выходит ошибка Uncaught (in promise) NotSupportedError: Failed to load because no supported source was found А в месте сэтим следующая картинка не показывается и трек следующий не играет. Приходится нажать на кнопку переключить, и тогда воспроизводиться следующий трек. Я не понимаю в чём дело, искал ошибки в гугле, но не помогло, целый день сижу и ломаю голову, если кто поможет это исправить, буду неимоверно благодарен ! Спасибо.

Answer 1

Окончание последнего трека вызывает ошибку из-за того, что в функцию audio.onended() забыли включить такую же проверку, не закончились ли треки, как и в speedUp() и speedDown(). Такой эта функция должна быть после исправления:

audio.onended = function() { 
	number++; 
	if(number >= musicSrc.length){ 
		number = 0; 
	} 
	audio.src = musicSrc[number]; 
	headerImage.src = musicImages[number];  
	audio.play(); 
	playImage.src = "https://image.flaticon.com/icons/svg/149/149116.svg";//ссылка на иконку Pause 
}

А ошибка при быстром переключении появляется скорее всего из-за того, что аудиоданные следующего файла не успевают подгружаться.

READ ALSO
Как упростить условие конструкции if

Как упростить условие конструкции if

Необходимо по заданию упростить условие if

134
Сумма элементов главной диагонали

Сумма элементов главной диагонали

Есть стандартная задача по нахождению суммы элементов главной диагоналиРешаю таким образом:

312
Порядок вывода блоков при изменении разрешения

Порядок вывода блоков при изменении разрешения

Подскажите с решением задачиЕсть столбцы с городами в алфавитном порядке - скрин шаблона При изменении разрешения, правый блок переносится...

224