根据 mysql 数据库中的 id 播放音频文件

Play audio file based on id from mysql database

我有这个播放音频文件的音频播放器脚本,但我不知道如何根据 mysql 数据库中的 ID 单独播放文件。我有一个数据表,其中列出的所有文件都有一个播放按钮来制作一个想法。谢谢

Codepen 音频播放器脚本: https://codepen.io/abxlfazl/pen/YzGEVRP

这是音频脚本:

PHP:

<?php
    $qnm = $db->query("SELECT * FROM `".RDCP_PREFIX."muzica` WHERE uid = ".$uid." ");
    while ($row = $db->fetch($qnm)) {
    $id = $row['mid']; // music id
    $locatiem = $row['locatie'];
    $numeclubs = $row['numeclub'];
    $numecoregrafiem = $row['numecoregrafie'];
    $piesa = str_replace("muzica/", "", $locatiem); // music file track
    ?>

HTML:

<div class="modal plyer fade delmusic<?php echo $id;?>" tabindex="-1" id="delmusic<?php echo $id; ?>"
       track="<?php echo $id;?>" aria-labelledby="myDefaultModalLabel">
       <div class="container" style="margin-top: 332px;display: flex;">
         <div class="player">

           <div class="player__header">

             <div class="player__img player__img--absolute slider">

               <button class="player__button player__button--absolute--nw playlist">

                 <img src="../../../dt/app-assets/images/elements/musicplayer/playlist.svg" alt="playlist-icon">

               </button>

               <button class="player__button player__button--absolute--center play">

                 <img src="../../../dt/app-assets/images/elements/musicplayer/play.svg" alt="play-icon">
                 <img src="../../../dt/app-assets/images/elements/musicplayer/pause.svg" alt="pause-icon">

               </button>

               <div class="slider__content">

                 <img class="img slider__img" src="http://physical-authority.surge.sh/imgs/1.jpg" alt="cover">

               </div>

             </div>

             <div class="player__controls">

               <button class="player__button back">

                 <img class="img" src="../../../dt/app-assets/images/elements/musicplayer/back.svg" alt="back-icon">

               </button>

               <p class="player__context slider__context">

                 <strong class="slider__name"></strong>
                 <span class="player__title slider__title"></span>

               </p>

               <button class="player__button next">

                 <img class="img" src="../../../dt/app-assets/images/elements/musicplayer/next.svg" alt="next-icon">

               </button>

               <div class="progres">

                 <div class="progres__filled"></div>

               </div>

             </div>

           </div>

           <ul class="player__playlist list">
             <li class="player__song s<?php echo $id;?>">
               <img class="player__img img" src="http://physical-authority.surge.sh/imgs/1.jpg" alt="cover">
               <p class="player__context">
                 <b class="player__song-name"><?php echo $numecoregrafiem; ?></b>
                 <span class="flex">
                   <span class="player__title"><?php echo $numeclubs; ?></span>
                 </span>
               </p>
               <audio class="audio" src="<?php echo "dt/pagini/momente/momente/".$locatiem; ?>"></audio>
             </li>
           </ul>

         </div>
       </div>
     </div>

Javascript:

const bgBody = ["#e5e7e9", "#ff4545", "#f8ded3", "#ffc382", "#f5eda6", "#ffcbdc", "#dcf3f3"];
const body = document.body;
const player = document.querySelector(".player");
const playerHeader = player.querySelector(".player__header");
const playerControls = player.querySelector(".player__controls");
const playerPlayList = player.querySelectorAll(".player__song");
const playerSongs = player.querySelectorAll(".audio");
const playButton = player.querySelector(".play");
const nextButton = player.querySelector(".next");
const backButton = player.querySelector(".back");
const playlistButton = player.querySelector(".playlist");
const slider = player.querySelector(".slider");
const sliderContext = player.querySelector(".slider__context");
const sliderName = sliderContext.querySelector(".slider__name");
const sliderTitle = sliderContext.querySelector(".slider__title");
const sliderContent = slider.querySelector(".slider__content");
const sliderContentLength = playerPlayList.length - 1;
const sliderWidth = 100;
let left = 0;
let count = 0;
let song = playerSongs[count];
let isPlay = false;
const pauseIcon = playButton.querySelector("img[alt = 'pause-icon']");
const playIcon = playButton.querySelector("img[alt = 'play-icon']");
const progres = player.querySelector(".progres");
const progresFilled = progres.querySelector(".progres__filled");
let isMove = false;
  
function closePlayer() {

    playerHeader.classList.remove("open-header");
    playerControls.classList.remove("move");
    slider.classList.remove("open-slider");
    
}

function next(index) {
    
    count = index || count;

    if (count == sliderContentLength) {
        count = count;
        return;
    }

    left = (count + 1) * sliderWidth;
    left = Math.min(left, (sliderContentLength) * sliderWidth);
    sliderContent.style.transform = `translate3d(-${left}%, 0, 0)`;
    count++;
    run();

}

function back(index) {
    
    count = index || count;

    if (count == 0) {
        count = count;
        return;
    }
    
    left = (count - 1) * sliderWidth;
    left = Math.max(0, left);
    sliderContent.style.transform = `translate3d(-${left}%, 0, 0)`;
    count--;
    run();

}

function changeSliderContext() {

    sliderContext.style.animationName = "opacity";
    
    sliderName.textContent = playerPlayList[count].querySelector(".player__title").textContent;
    sliderTitle.textContent = playerPlayList[count].querySelector(".player__song-name").textContent;
    
    if (sliderName.textContent.length > 16) {
        const textWrap = document.createElement("span");
        textWrap.className = "text-wrap";
        textWrap.innerHTML = sliderName.textContent + "   " + sliderName.textContent;  
        sliderName.innerHTML = "";
        sliderName.append(textWrap);
        
    }

    if (sliderTitle.textContent.length >= 18) {
        const textWrap = document.createElement("span");
        textWrap.className = "text-wrap";
        textWrap.innerHTML = sliderTitle.textContent + "    " + sliderTitle.textContent;  
        sliderTitle.innerHTML = "";
        sliderTitle.append(textWrap);
    }

}
 
function selectSong() {

    song = playerSongs[count];

    for (const item of playerSongs) {

        if (item != song) {
            item.pause();
            item.currentTime = 0;
        }

    }

    if (isPlay) song.play();
    
    
}

function run() {
  
    changeSliderContext(); 
    selectSong();
  
}

function playSong() {

    if (song.paused) {
        song.play();
        playIcon.style.display = "none";
        pauseIcon.style.display = "block";  
    }else{
        song.pause();
        isPlay = false;
        playIcon.style.display = "";
        pauseIcon.style.display = "";
    }


}

function progresUpdate() {

    const progresFilledWidth = (this.currentTime / this.duration) * 100 + "%";
    progresFilled.style.width = progresFilledWidth;

    if (isPlay && this.duration == this.currentTime) {
        next();
    }
    if (count == sliderContentLength && song.currentTime == song.duration) {
        playIcon.style.display = "block";
        pauseIcon.style.display = "";
        isPlay = false;
    }
}

function scurb(e) {

    // If we use e.offsetX, we have trouble setting the song time, when the mousemove is running
    const currentTime = ( (e.clientX - progres.getBoundingClientRect().left) / progres.offsetWidth ) * song.duration;
    song.currentTime = currentTime;

}

function durationSongs() {

    let min = parseInt(this.duration / 60);
    if (min < 10) min = "0" + min;

    let sec = parseInt(this.duration % 60);
    if (sec < 10) sec = "0" + sec;
    
    const playerSongTime = `${min}:${sec}`; 

}


changeSliderContext();

// add events 
sliderContext.addEventListener("animationend", () => sliderContext.style.animationName ='');
playlistButton.addEventListener("click", closePlayer);

nextButton.addEventListener("click", () => {
    next(0)
});

backButton.addEventListener("click", () => {
    back(0)
});

playButton.addEventListener("click", () => {
    isPlay = true;
    playSong();
});

playerSongs.forEach(song => {
    song.addEventListener("loadeddata" , durationSongs);
    song.addEventListener("timeupdate" , progresUpdate);
    
});

progres.addEventListener("pointerdown", (e) => {
    scurb(e);
    isMove = true;
});

document.addEventListener("pointermove", (e) => {
    if (isMove) {
        scurb(e); 
        song.muted = true;
    }
});

document.addEventListener("pointerup", () => {
    isMove = false;
    song.muted = false;
});

playerPlayList.forEach((item, index) => {

    item.addEventListener("click", function() {

        if (index > count) {
            next(index - 1);
            return;
        }
        
        if (index < count) {
            back(index + 1);
            return;
        }

    });
    
});

您可以将轨道 ID 放入“data-track”之类的属性中,然后检索它并向 php 页面发送 ajax 请求,该页面将执行您的数据库查询和 return你想要的信息。

    // User selects track to play
    $(".track").on('click', function(e){
        
        track = $(this).data("track");
        
        var data = {
            trackId: track
        };
        
        
        $.ajax({
            url: 'getTrack.php',
            type: 'post',
            data: data,
        }).done(function(result){
            
            // parse data from response and load your player's modal
            
        }).fail(function(data){
            // Uh-oh!
        }).always(function(){
            // Do something
        });
        
    });