Воспроизведение музыки reactjs

Всем привет! Возник вопрос: как я могу воспроизводить музыку без использовании <audio></audio>? Я хотел бы, что бы музыка включались при активации функции playSong. Ссылка на музыку находится в массиве с объектами chart.js

    const chartItems = useSelector((state) => state.charts)
    const trendingItems = useSelector((state) => state.trending)
    const genresItems = useSelector((state) => state.genres)
    const playlistItems = useSelector((state) => state.playlist)
    const currentSong = useSelector((state) => state.currentSong)
    const likedSongs = useSelector((state) => state.likedSongs)
    const [likedStatus, setLikedStatus] = useState({});
    const [isActive, setIsActive] = useState(false)
    const [paused, setPaused] = useState(false);
    const [searchQuery, setSearchQuery] = useState('');
    const [position, setPosition] = useState(0);
    const [volume, setVolume] = useState(100);
    const [timerActive, setTimerActive] = useState(false);
    const dispatch = useDispatch()
    useEffect(() => {
        dispatch({ type: 'SET_CHARTS', payload: chart })
        dispatch({ type: 'SET_TRENDING', payload: trending })
        dispatch({ type: 'SET_GENRES', payload: genres })
        dispatch({ type: 'SET_PLAYLIST', payload: playlist })
    }, [])
    const playSong = (item) => {
        dispatch({ type: 'SET_CURRENT_SONG', payload: item })
        setPosition(0)
        setIsActive(true)
    }
    const saveSong = (item) => {
        dispatch({ type: 'SET_LIKED_SONGS', payload: item })
        const uniqueId = `${item.album}_${item.name}`;
        setLikedStatus((prevStatus) => ({
            ...prevStatus,
            [uniqueId]: !prevStatus[uniqueId],
        }));

    }
    const filteredLikedSongs = likedSongs.filter(
        (item) =>
            item.album.toLowerCase().includes(searchQuery.toLowerCase()) ||
            item.name.toLowerCase().includes(searchQuery.toLowerCase())
    );
    function formatDuration(value) {
        const minute = Math.floor(value / 60);
        const secondLeft = value - minute * 60;
        return `${minute}:${secondLeft < 10 ? `0${secondLeft}` : secondLeft}`;
    }
    const formatTime = (seconds) => {
        const minutes = Math.floor(seconds / 60);
        const remainingSeconds = seconds % 60;
        const formattedTime = `${minutes}:${remainingSeconds < 10 ? '0' : ''}${remainingSeconds}`;
        return formattedTime;
    };
    useEffect(() => {
        if (isActive && !paused) {
            setTimerActive(true);

            const timerInterval = setInterval(() => {
                setPosition((prevPosition) => {
                    if (prevPosition + 1 > currentSong.time) {
                        clearInterval(timerInterval);
                        setTimerActive(false);
                        return 0;
                    }
                    return prevPosition + 1;
                });
            }, 1000);
            return () => {
                clearInterval(timerInterval);
                setTimerActive(false);
            };
        } else {
            setTimerActive(false);
        }
    }, [isActive, paused, currentSong.time]);
  //chart.js
    {
    id: 1,
    img: 'https://i.scdn.co/image/ab67616d0000b273c9c6ffa3829ecebc9a0cd7d0',
    name: 'Дора',
    album: 'Втюрилась',
    time: '123', 
    music: '../../../public/music/dora_-_vtyurilas.mp3',
},
return (
        <div className='Player__body'>
            <div className="Player__body-container">
                <div className="Player__container-navbar">
                    <div className="Player__navbar-logo">
                        <AnchorIcon fontSize='large' />
                        <p>MepheSong</p>
                    </div>
                    <nav className="Player__navbar">
                        <ul className='Player__navbar-items'>
                            <div className='Player__navbar-item active'>
                                <HomeIcon />
                                <Link>Home</Link>
                            </div>
                            <div className='Player__navbar-item'>
                                <SearchIcon />
                                <Link>Explorer</Link>
                            </div>
                            <div className='Player__navbar-item'>
                                <PersonIcon />
                                <Link>Your account</Link>
                            </div>
                            <div className='Player__navbar-item'>
                                <SettingsIcon />
                                <Link>Setting</Link>
                            </div>
                        </ul>
                    </nav>
                    <div className="Player__navbar-playlist">
                        <div className="Player__playlist-add">
                            <h1>My playlist</h1>
                            <AddIcon fontSize='small' />
                        </div>
                        <div className="Player__playlist-input">
                            <div className='Player__playlist-svg'>
                                <SearchIcon fontSize='small' />
                            </div>
                            <input type="text" placeholder='Search in library' value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} />
                        </div>
                        <div className="Player__playlist-liked">
                            <div className="Player__liked-items">
                                {filteredLikedSongs.map((item) => {
                                    return (
                                        <div className="Player__liked-item" onClick={() => playSong(item)}>
                                            <div className='Player__item-name' style={{ marginTop: '15px', width: '100%', cursor: 'pointer' }}>
                                                <div>
                                                    <img src={item.img} alt="" />
                                                </div>
                                                <div className='song__avtor'>
                                                    <div style={{ color: '#fff' }}>{item.album}</div>
                                                    <div className='Player__song-name'>{item.name}</div>
                                                </div>
                                            </div>
                                        </div>
                                    )
                                })}
                            </div>
                        </div>
                    </div>
                </div>
                <div className="Player__container-player">
                    <div className="Player__container-subtitle">
                        <h1>Trending New Album and Playlist</h1>
                        <Link>See more</Link>
                    </div>
                    <div className="Player__container-popularArtist">
                        {playlistItems.map((item, index) => {
                            return (
                                <div className='Player__popularArtist-album' key={index}>
                                    <img src={item.img} alt="" />
                                    <div className='Album__title'>
                                        <p className='Album__title-avtor'>{item.name} &#729; {item.date}</p>
                                        <div onClick={() => saveSong(item)}>
                                            <FavoriteIcon className={likedStatus[`${item.album}_${item.name}`] ? 'liked' : ''} />
                                        </div>
                                    </div>
                                </div>
                            )
                        })}
                    </div>
                    <div className="Player__container-chart">
                        <div className="Player__chart">
                            <h1>New Chart</h1>
                            <div className='Player__chart-content'>
                                <div className="Player__content-subtitle">
                                    <p className='Player__subtitle-title'>Title</p>
                                    <p className='Player__subtitle-album'>Album</p>
                                    <p className='Player__subtitle-time'>Time</p>
                                </div>
                                {chartItems.map((item, index) => {
                                    return (
                                        <div className="Player__chart-item" key={index}>
                                            <div onClick={() => playSong(item)} className='Player__item-content'>
                                                <div className='Player__item-number'>0{item.id}</div>
                                                <div className='Player__item-name'>
                                                    <div>
                                                        <img src={item.img} alt="" />
                                                    </div>
                                                    <div className='song__avtor'>
                                                        <div>{item.album}</div>
                                                        <div className='Player__song-name'>{item.name}</div>
                                                    </div>
                                                </div>
                                                <div className='Player__item-album'>{item.album}</div>
                                                <div className='Player__item-time'>{formatTime(item.time)}</div>
                                            </div>
                                            <div className='Player__item-like' onClick={() => saveSong(item)}>
                                                <FavoriteIcon className={likedStatus[`${item.album}_${item.name}`] ? 'liked' : ''} />
                                            </div>
                                        </div>
                                    )
                                })}
                            </div>
                        </div>
                        <div className="Player__Artist">
                            <div className='Player__artist-trending'>
                                <div className="Player__container-subtitle">
                                    <h1>Trending Artist</h1>
                                    <Link>See more</Link>
                                </div>
                                <div className="Player__trending-items">
                                    {trendingItems.map((item, index) => {
                                        return (
                                            <div className="Player__trending-item" key={index}>
                                                <img src={item.img} alt="" />
                                            </div>
                                        )
                                    })}
                                </div>
                            </div>
                            <div className='Player__artist-genres'>
                                <div className="Player__container-subtitle">
                                    <h1>Genres</h1>
                                    <Link>See more</Link>
                                </div>
                                <div className="Player__genres-items">
                                    {genresItems.map((item, index) => {
                                        return (
                                            <div className="Player__genres-item" key={index}>
                                                <div className="genres-title">
                                                    {item.name}
                                                </div>
                                            </div>
                                        )
                                    })}
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div className={`Player__footer ${isActive ? 'active' : null}`}>
                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
                    <div className='Player__item-name' style={{ width: '200px' }}>
                        <div>
                            <img src={currentSong.img} alt="" />
                        </div>
                        <div className='song__avtor'>
                            <div style={{ color: '#fff' }}>{currentSong.album}</div>
                            <div className='Player__song-name'>{currentSong.name}</div>
                        </div>
                    </div>
                    <div className='Player__item-like' onClick={() => saveSong(currentSong)}>
                        <FavoriteIcon className={likedStatus[`${currentSong.album}_${currentSong.name}`] ? 'liked' : ''} />
                    </div>
                </div>
                <div className='Player__item-audio'>
                    <div className='Player__audio-btn'>
                        <button className='audio__btn-prev'>
                            <ArrowBackIosNewIcon fontSize='small' />
                        </button>
                        <IconButton
                            aria-label={paused ? 'play' : 'pause'}
                            onClick={() => setPaused(!paused)}
                        >
                            {paused ? (
                                <PlayArrowRounded
                                    sx={{ fontSize: '2rem' }}
                                />
                            ) : (
                                <PauseRounded sx={{ fontSize: '2rem' }} />
                            )}
                        </IconButton>
                        <button className='audio__btn-next'>
                            <ArrowForwardIosIcon fontSize='small' />
                        </button>
                    </div>
                    <div className="audio__slider">
                        <p>{formatDuration(position)}</p>
                        <Slider className='play__bar'
                            value={position}
                            min={0}
                            step={1}
                            max={currentSong.time}
                            onChange={(_, value) => setPosition(value)}
                        />
                        <p>{formatTime(currentSong.time)}</p>
                    </div>
                </div>
                <div className="Player__item-volume">
                    <div>
                        <VolumeDownIcon />
                    </div>
                    <Slider
                        defaultValue={volume}
                        className='volume__bar'
                    />
                </div>
            </div>
        </div>
    )


Ответы (0 шт):