如何在启动另一个反应音频播放器时停止播放?

Posted

技术标签:

【中文标题】如何在启动另一个反应音频播放器时停止播放?【英文标题】:How to stop one react audio player from playing when starting another? 【发布时间】:2022-01-15 11:50:07 【问题描述】:

我认为我需要使用状态来跟踪正在播放的歌曲,但我无法实现它。我不确定传递哪个参数来响应音频播放器或在哪里设置状态。这可能吗?这是整个组件的样子:

import  useState, useEffect  from 'react';
import ReactAudioPlayer from 'react-audio-player';
import  useSelector, useDispatch  from 'react-redux';
import  NavLink, useParams  from 'react-router-dom';

import  deleteSong, getOneSong  from '../../store/song';
import EditSongForm from '../EditSongForm';

const SpecificSong = ( id, songName, songLink, userId, albumImage ) => 
    const [editShowForm, setEditShowForm] = useState(false);
    // const [currentlyPlayingSong, setCurrentlyPlayingSong] = useState(false)

    const dispatch = useDispatch();

    useEffect(() => 
        dispatch(getOneSong(id));
        setEditShowForm(false);
    , [dispatch, id]);

    const editFormCheck = (e) => 
        if (editShowForm) setEditShowForm(false)
        if (!editShowForm) setEditShowForm(true)
    
    const remove = (e) => 
        dispatch(deleteSong(e.target.id));
    

    const user = useSelector((state) => state.session.user);
    const CurrentUserId = user?.id

    return (
        <div className='songdetails' key=id>
            <NavLink to=`/song/$id`>
                <p className='songname' key=id>songName</p>
                <img className="albumimage" src=albumImage  srcset="" />
                <ReactAudioPlayer
                    className='audioplayer'
                    src=songLink
                    controls
                    key=songLink
                />
            </NavLink>
            userId === CurrentUserId ?
                <>
                    <div className='editbutton'>
                        <EditSongForm props=id />
                    </div>
                    <div className='removebutton'>
                        <button id=id onClick=remove>Delete Song</button>
                    </div>
                </>
                : null
        </div>
    );
;

export default SpecificSong;

【问题讨论】:

【参考方案1】:

我无法准确重现您的问题。但我想我可以提供帮助。

根据我的测试,这个库自己处理各个组件的播放和暂停,所以你不需要去碰它。

现在,要实现锁定机制,您可以存储一个音频播放器索引,用于跟踪正在播放的音频播放器的索引/键。如果没有玩家在玩,则该值默认为“-1”等数字。因此,每当您播放 react-audio-player 组件时,您首先要检查另一个音频播放器此时是否处于打开状态。如果它为 ON,请将其关闭并将您自己的键索引放在变量 AudioPlayerIndex 上。此变量可能存储在 Context API 或 Global Store 中,因为您的应用程序中的所有音频播放器组件都需要它。

从他们的 GitHub 存储库中看到的 API,链接在这里:https://github.com/justinmc/react-audio-player#readme

【讨论】:

以上是关于如何在启动另一个反应音频播放器时停止播放?的主要内容,如果未能解决你的问题,请参考以下文章

多个 HTML5 音频播放器。单击另一个音频实例时停止播放其他音频实例

如何使用 expo-av 在本机反应中播放背景音频?

HTML5 - 当另一个音频标签开始播放时如何停止音频?

如何停止从另一个 ViewModel 按钮播放音频

多个音频html:当前播放时自动停止其他

如何停止使用 jQuery 播放其他音频元素