@splicemood/react-music-player
Version:
The music player that sync all settings between multiple tabs on a single client-side browser session
2 lines (1 loc) • 18 kB
JavaScript
var{defineProperty:vA,getOwnPropertyNames:sA,getOwnPropertyDescriptor:aA}=Object,tA=Object.prototype.hasOwnProperty;var yA=new WeakMap,eA=(Z)=>{var q=yA.get(Z),Q;if(q)return q;if(q=vA({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function")sA(Z).map((H)=>!tA.call(q,H)&&vA(q,H,{get:()=>Z[H],enumerable:!(Q=aA(Z,H))||Q.enumerable}));return yA.set(Z,q),q};var A0=(Z,q)=>{for(var Q in q)vA(Z,Q,{get:q[Q],enumerable:!0,configurable:!0,set:(H)=>q[Q]=()=>H})};var K0={};A0(K0,{useAudio:()=>J0,updateMediaSessionMetadata:()=>BA,truncateBackStackQueue:()=>jA,step:()=>E,percentToValue:()=>FA,offsetTimeBumpToStart:()=>qA,metadataBytesLength:()=>IA,maxPercentage:()=>TA,firstElement:()=>W,fetchDuration:()=>I,defaultVolumePercent:()=>NA,defaultVolume:()=>wA,debounceLoadingState:()=>OA,PlayerPlayPauseSyncProvider:()=>$0,PlayerNoSyncProvider:()=>z0,PlayerFullSyncProvider:()=>W0,LoopState:()=>pA});module.exports=eA(K0);var Y=require("react"),n=require("@mantine/hooks");var cA=require("react"),$A=cA.createContext(void 0);var W=0,E=1,wA=0.5,TA=100,NA=50,OA=200,jA=65536,qA=5,IA=3072;var pA;((H)=>{H[H.PlayAll=0]="PlayAll";H[H.LoopAll=1]="LoopAll";H[H.LoopCue=2]="LoopCue"})(pA||={});var oA=require("music-metadata");function G0(Z){return new Promise((q,Q)=>{let H=new Audio,U=()=>{H.removeEventListener("loadedmetadata",N),H.removeEventListener("error",M)},N=()=>{q(H.duration),U()},M=(p)=>{Q(p),U()};H.addEventListener("loadedmetadata",N),H.addEventListener("error",M),H.src=Z})}var H0=({src:Z,duration:q})=>{if(q)return q;return new Promise(async(Q,H)=>{try{let U=await fetch(Z,{headers:{Range:"bytes=0-"+IA}});if(!U.ok)H(`HTTP error! status: ${U.status}`);if(U.headers.get("Accept-Ranges")!=="bytes")H("Server does not support range requests.");let M=U.body;if(M===null){H("webStream is null");return}let p=await oA.parseWebStream(M,"audio/mpeg");if(p.format.duration)Q(p.format.duration);else{let o=await G0(Z);Q(o)}}catch(U){H(U)}})},I=(Z)=>Promise.all(Z.map(H0)).catch((q)=>{console.error("Errors occurred while fetching durations:",q)}),FA=(Z)=>{return Math.round(Z)/TA},BA=(Z)=>{if("mediaSession"in navigator)navigator.mediaSession.metadata=new MediaMetadata({title:Z.title||"Unknown Title",artist:Z.author||"Unknown Artist",album:Z.album||"",artwork:Z.cover?[{src:Z.cover}]:[{src:"/react-music-player/icons/thumbnail.svg"}]})};var fA=require("react/jsx-runtime"),QA=window.localStorage,W0=({children:Z})=>{let[q,Q]=Y.useState(!1),[H,U]=n.useDebouncedState(void 0,OA),[N,M]=Y.useState([]),[p,o]=Y.useState([]),_=QA.getItem("player-playlist-id"),[h,F]=n.useLocalStorage({key:"player-playlist-id",defaultValue:_||void 0}),O=QA.getItem("player-current-track-index"),r=O?Number(O):W,[j,C]=Y.useState(r),[B,V]=Y.useState(!1),[KA,D]=Y.useState(W),[t,i]=n.useLocalStorage({key:"player-updated-time",defaultValue:0,getInitialValueInEffect:!0}),[u,UA]=n.useLocalStorage({key:"player-volume",defaultValue:wA,getInitialValueInEffect:!0}),[y,DA]=Y.useState(NA),[MA,e]=Y.useState(W),[S,l]=Y.useState(W),[XA,b]=n.useLocalStorage({key:"player-muted",defaultValue:!1}),[m,YA]=n.useLocalStorage({key:"player-shuffle",defaultValue:!1}),[c,LA]=n.useLocalStorage({key:"player-repeat",defaultValue:0}),[AA,L]=n.useLocalStorage({key:"player-shuffle-queue",defaultValue:[]}),A=Y.useRef(new Audio),g=Y.useRef(null),ZA=Y.useCallback((G,J)=>{if(g.current)g.current.postMessage({type:G,value:J})},[g.current]);Y.useEffect(()=>{ZA("UPDATE_TRACK",j)},[j]),Y.useEffect(()=>{if(B)if(!m)L([]);else L((G)=>{return[j,...G]})},[m]),Y.useEffect(()=>{let G=Math.round(u*100);DA(G)},[u]),Y.useEffect(()=>{if(A.current!==null&&q){let G=A.current.currentTime;if(Math.abs(G-t)>1)A.current.currentTime=t,D(t)}},[t]),Y.useEffect(()=>{if(A.current&&N.length>W){let G=N[j];A.current.src=G?.src,A.current.currentTime=W}},[N,j]),Y.useEffect(()=>{if(A.current&&N.length>W){let G=QA.getItem("player-current-track-index"),J=G&&Number(G)===j;if(!J)QA.setItem("player-current-track-index",String(j));if(B)ZA("PAUSE_PLAYING"),U(!0),A.current.play().then(()=>{if(A.current&&J){let R=QA.getItem("player-sync-time");A.current.currentTime=Number(R)}U(void 0)}).catch(()=>{U(void 0)});else A.current.pause()}},[j,N,B]),Y.useEffect(()=>{if(A.current)A.current.volume=u,A.current.muted=XA},[u,XA]);let VA=(G)=>{let J=Array(G.length).fill(0);if(o(J),G.length>0)I(G).then((R)=>{if(Array.isArray(R))o(R)})},_A=(G)=>{I([G]).then((J)=>{if(J)o((R)=>{return[...R,J[0]]})})},f=(G)=>{if(String(G)!==h)C(W),F(G)};Y.useEffect(()=>{if(N.length>0)I(N).then((G)=>{if(Array.isArray(G))o(G)})},[N]);let v=()=>{if(A.current!==null){let G=A.current.currentTime;D(G),ZA("UPDATE_TIME",G),QA.setItem("player-sync-time",String(G))}},d=Y.useCallback(()=>{if(A.current!==null)l(A.current.duration)},[A.current?.duration]),k=Y.useCallback(()=>{if(N.length===W)return;V(!0)},[N]),P=Y.useCallback(()=>V(!1),[V]),s=Y.useCallback(()=>V((G)=>!G),[V]),T=Y.useCallback((G=!1)=>{if(N.length===W)return;let J;if(m){let a=N.map((WA,lA)=>lA).filter((WA)=>WA!==j);J=a[Math.floor(Math.random()*a.length)],L((WA)=>{return WA=WA.slice(W,jA),[J,...WA]})}else J=j+E;if(J>=N.length){if(V(G),J=W,!G)return}if(e(W),!B)V(!0);C(J)},[N,j,m,B,C]),GA=Y.useCallback(()=>{switch(c){case 0:T();break;case 1:T(!0);break;case 2:A.current?.play();break}},[c,T]),HA=Y.useCallback(()=>{if(N.length===W||!A.current)return;if(KA>qA){A.current.currentTime=W;return}let G=W;if(m){if(AA.length===E)return;L((J)=>{let[,...R]=J;return G=R[W],R})}else G=j-E;if(G<W)G=N.length-E;C(G),e(W),V(!0)},[N,AA,j,KA,i]),CA=(G)=>C(G),EA=(G)=>UA(G),hA=(G)=>{let J=FA(G);UA(J)},SA=()=>b(!0),gA=()=>b(!1),PA=()=>b((G)=>!G),xA=()=>YA(!0),RA=()=>YA(!1),mA=()=>YA((G)=>!G),bA=()=>{LA((G)=>{if(G===0)return 1;if(G===1)return 2;if(G===2)return 0;return 0})},kA=(G)=>{M((J)=>[...J,G]),_A(G)},z=(G,J)=>{let R=J!==void 0||B;if(P(),L([W]),e(W),M(G),VA(G),R)C(J||W),k()},w=Y.useCallback((G)=>{let{data:J}=G;switch(J?.type){case"PAUSE_PLAYING":V(!1);break;case"UPDATE_TIME":if(!B&&J.value!==W)D(J.value);break;case"UPDATE_TRACK":if(!B)C(J.value);break}},[B,C,V,j]),x=()=>{if(A.current&&A.current.buffered.length>0){let G=A.current.buffered.end(A.current.buffered.length-1);e(G/A.current.duration*100)}};Y.useEffect(()=>{if(A.current)A.current.addEventListener("ended",GA);return()=>{A.current?.removeEventListener("ended",GA)}},[GA]),Y.useEffect(()=>{if(A.current){let G=QA.getItem("player-sync-time"),J=Number(G);if(i(J),A.current.currentTime=J,D(J),V(!1),A.current.preload="metadata",A.current.addEventListener("progress",x),A.current.addEventListener("timeupdate",v),A.current.addEventListener("durationchange",d),A.current.addEventListener("pause",()=>{V(!1)}),A.current.addEventListener("play",()=>{V(!0)}),A.current.readyState>=1)d();Q(!0)}if("BroadcastChannel"in window&&!g.current)g.current=new BroadcastChannel("global-audio-player"),g.current.onmessage=w;return()=>{if(A.current)A.current.pause(),A.current.removeEventListener("progress",x),A.current.removeEventListener("timeupdate",v),A.current.removeEventListener("durationchange",d),A.current=null}},[]),Y.useEffect(()=>{if("mediaSession"in navigator)navigator.mediaSession.setActionHandler("play",k),navigator.mediaSession.setActionHandler("pause",P),navigator.mediaSession.setActionHandler("previoustrack",HA),navigator.mediaSession.setActionHandler("nexttrack",()=>T()),navigator.mediaSession.setActionHandler("seekto",(G)=>{if(G.seekTime!==void 0)i(G.seekTime)})},[k,P,HA,T,i]),Y.useEffect(()=>{if(N.length>0&&N[j])BA(N[j])},[N,j]),Y.useEffect(()=>{if("mediaSession"in navigator)navigator.mediaSession.playbackState=B?"playing":"paused"},[B,j]);let $={play:k,pause:P,togglePlayPause:s,next:T,previous:HA,setVolume:EA,setVolumePercent:hA,mute:SA,unmute:gA,toggleMute:PA,shuffleOn:xA,shuffleOff:RA,toggleShuffle:mA,toggleLoop:bA,addToPlaylist:kA,replacePlaylist:z,setCurrentTrack:CA,setUpdateTime:i,setPlaylistId:f,volume:u,volumePercent:y,bufferedPercentage:MA,currentPlaylistId:h,maxTime:S,playlist:N,durations:p,isPlaying:B,currentTime:KA,currentTrackIndex:j,repeatMode:c,isShuffled:m,isLoading:H,isMuted:XA};return fA.jsx($A.Provider,{value:$,children:Z})};var K=require("react"),dA=require("@mantine/hooks");var nA=require("react/jsx-runtime"),zA=window.localStorage,$0=({children:Z})=>{let[q,Q]=dA.useDebouncedState(void 0,OA),[H,U]=K.useState([]),[N,M]=K.useState([]),[p,o]=K.useState(""),[_,h]=K.useState(W),[F,O]=K.useState(!1),[r,j]=K.useState(W),[C,B]=K.useState(0),V=zA.getItem("player-volume"),KA=V?Number(V):wA,[D,t]=K.useState(KA),[i,u]=K.useState(NA),[UA,y]=K.useState(W),[DA,MA]=K.useState(W),e=zA.getItem("player-muted")==="true",[S,l]=K.useState(e),XA=zA.getItem("player-shuffle")==="true",[b,m]=K.useState(XA),YA=zA.getItem("player-repeat"),[c,LA]=K.useState(Number(YA)||0),[AA,L]=K.useState([]),A=K.useRef(new Audio),g=K.useRef(null),ZA=K.useCallback(($,G)=>{if(g.current)g.current.postMessage({type:$,value:G})},[g.current]);K.useEffect(()=>{if(F)if(!b)L([]);else L(($)=>{return[_,...$]});zA.setItem("player-shuffle",String(b))},[b]),K.useEffect(()=>{let $=Math.round(D*100);u($)},[D]),K.useEffect(()=>{if(A.current!==null)A.current.currentTime=C,j(C)},[C]),K.useEffect(()=>{if(A.current&&H.length>W){let $=H[_];A.current.src=$?.src,A.current.currentTime=W}},[H,_]),K.useEffect(()=>{if(A.current&&H.length>W)if(F)ZA("PAUSE_PLAYING"),Q(!0),A.current.play().then(()=>{Q(void 0)}).catch(()=>{Q(void 0)});else A.current.pause()},[_,H,F]),K.useEffect(()=>{if(A.current)A.current.volume=D,A.current.muted=S},[D,S]);let VA=($)=>{let G=Array($.length).fill(0);if(M(G),$.length>0)I($).then((J)=>{if(Array.isArray(J))M(J)})},_A=($)=>{I([$]).then((G)=>{if(G)M((J)=>{return[...J,G[0]]})})},f=K.useCallback(()=>{if(A.current!==null)MA(A.current.duration)},[A.current?.duration]),v=K.useCallback(()=>{if(H.length===W)return;O(!0)},[H]),d=K.useCallback(()=>O(!1),[O]),k=K.useCallback(()=>O(($)=>!$),[O]),P=K.useCallback(($=!1)=>{if(H.length===W)return;let G;if(b){let R=H.map((a,WA)=>WA).filter((a)=>a!==_);G=R[Math.floor(Math.random()*R.length)],L((a)=>{return a=a.slice(W,jA),[G,...a]})}else G=_+E;if(G>=H.length){if(O($),G=W,!$)return}if(y(W),!F)O(!0);h(G)},[H,_,b,F,h]),s=K.useCallback(()=>{switch(c){case 0:P();break;case 1:P(!0);break;case 2:A.current?.play();break}},[c,P]),T=K.useCallback(()=>{if(H.length===W||!A.current)return;if(r>qA){A.current.currentTime=W;return}let $=W;if(b){if(AA.length===E)return;L((G)=>{let[,...J]=G;return $=J[W],J})}else $=_-E;if($<W)$=H.length-E;h($),y(W),O(!0)},[H,AA,_,r,B]),GA=($)=>h($),HA=($)=>{t($),zA.setItem("player-volume",String($))},CA=($)=>{let G=FA($);HA(G)},EA=()=>l(!0),hA=()=>l(!1),SA=()=>l(($)=>!$),gA=()=>m(!0),PA=()=>m(!1),xA=()=>m(($)=>!$),RA=()=>{LA(($)=>{let G=0;if($===0)G=1;if($===1)G=2;if($===2)G=0;return zA.setItem("player-repeat",String(G)),G})},mA=($)=>{U((G)=>[...G,$]),_A($)},bA=($,G)=>{let J=G!==void 0||F;if(d(),L([W]),y(W),U($),VA($),J)h(G||W),v()};K.useEffect(()=>{zA.setItem("player-muted",String(S))},[S]);let kA=K.useCallback(($)=>{let{data:G}=$;switch(G?.type){case"PAUSE_PLAYING":O(!1);break}},[F,h,O,_]),z=()=>{if(A.current&&A.current.buffered.length>0){let $=A.current.buffered.end(A.current.buffered.length-1);y($/A.current.duration*100)}},w=()=>{if(A.current!==null){let $=A.current.currentTime;j($)}};K.useEffect(()=>{if(A.current)A.current.addEventListener("ended",s);return()=>{A.current?.removeEventListener("ended",s)}},[s]),K.useEffect(()=>{if(A.current){if(A.current.muted=S,A.current.volume=D,O(!1),A.current.preload="metadata","BroadcastChannel"in window&&!g.current)g.current=new BroadcastChannel("playpause-audio-player"),g.current.onmessage=kA;if(A.current.addEventListener("progress",z),A.current.addEventListener("timeupdate",w),A.current.addEventListener("durationchange",f),A.current.addEventListener("pause",()=>{O(!1)}),A.current.addEventListener("play",()=>{O(!0)}),A.current.readyState>=1)f()}return()=>{if(A.current)A.current.pause(),A.current.removeEventListener("progress",z),A.current.removeEventListener("timeupdate",w),A.current.removeEventListener("durationchange",f),A.current=null}},[]),K.useEffect(()=>{if("mediaSession"in navigator)navigator.mediaSession.setActionHandler("play",v),navigator.mediaSession.setActionHandler("pause",d),navigator.mediaSession.setActionHandler("previoustrack",T),navigator.mediaSession.setActionHandler("nexttrack",()=>P()),navigator.mediaSession.setActionHandler("seekto",($)=>{if($.seekTime!==void 0)B($.seekTime)})},[v,d,T,P,B]),K.useEffect(()=>{if(H.length>0&&H[_])BA(H[_])},[H,_]),K.useEffect(()=>{if("mediaSession"in navigator)navigator.mediaSession.playbackState=F?"playing":"paused"},[F,_]);let x={play:v,pause:d,togglePlayPause:k,next:P,previous:T,setVolume:HA,setVolumePercent:CA,mute:EA,unmute:hA,toggleMute:SA,shuffleOn:gA,shuffleOff:PA,toggleShuffle:xA,toggleLoop:RA,addToPlaylist:mA,replacePlaylist:bA,setCurrentTrack:GA,setUpdateTime:B,setPlaylistId:o,volume:D,volumePercent:i,bufferedPercentage:UA,currentPlaylistId:p,maxTime:DA,playlist:H,durations:N,isPlaying:F,currentTime:r,currentTrackIndex:_,repeatMode:c,isShuffled:b,isLoading:q,isMuted:S};return nA.jsx($A.Provider,{value:x,children:Z})};var X=require("react"),rA=require("@mantine/hooks");var iA=require("react/jsx-runtime"),JA=window.localStorage,z0=({children:Z})=>{let[q,Q]=rA.useDebouncedState(void 0,OA),[H,U]=X.useState([]),[N,M]=X.useState([]),[p,o]=X.useState(""),[_,h]=X.useState(W),[F,O]=X.useState(!1),[r,j]=X.useState(W),[C,B]=X.useState(0),V=JA.getItem("player-volume"),KA=V?Number(V):wA,[D,t]=X.useState(KA),[i,u]=X.useState(NA),[UA,y]=X.useState(W),[DA,MA]=X.useState(W),e=JA.getItem("player-muted")==="true",[S,l]=X.useState(e),XA=JA.getItem("player-shuffle")==="true",[b,m]=X.useState(XA),YA=JA.getItem("player-repeat"),[c,LA]=X.useState(Number(YA)||0),[AA,L]=X.useState([]),A=X.useRef(new Audio);X.useEffect(()=>{if(F)if(!b)L([]);else L((z)=>{return[_,...z]});JA.setItem("player-shuffle",String(b))},[b]),X.useEffect(()=>{let z=Math.round(D*100);u(z)},[D]),X.useEffect(()=>{if(A.current!==null)A.current.currentTime=C,j(C)},[C]),X.useEffect(()=>{if(A.current&&H.length>W){let z=H[_];A.current.src=z?.src,A.current.currentTime=W}},[H,_]),X.useEffect(()=>{if(A.current&&H.length>W)if(F)Q(!0),A.current.play().then(()=>{Q(void 0)}).catch(()=>{Q(void 0)});else A.current.pause()},[_,H,F]),X.useEffect(()=>{if(A.current)A.current.volume=D,A.current.muted=S},[D,S]);let g=(z)=>{let w=Array(z.length).fill(0);if(M(w),z.length>0)I(z).then((x)=>{if(Array.isArray(x))M(x)})},ZA=(z)=>{I([z]).then((w)=>{if(w)M((x)=>{return[...x,w[0]]})})};X.useEffect(()=>{if(H.length>0)I(H).then((z)=>{if(Array.isArray(z))M(z)})},[H]);let VA=X.useCallback(()=>{if(A.current!==null){let z=A.current.currentTime;j(z)}},[j]),_A=X.useCallback(()=>{if(A.current!==null)MA(A.current.duration)},[A.current?.duration]),f=X.useCallback(()=>{if(H.length===W)return;O(!0)},[H]),v=X.useCallback(()=>O(!1),[O]),d=X.useCallback(()=>O((z)=>!z),[O]),k=X.useCallback((z=!1)=>{if(H.length===W)return;let w;if(b){let $=H.map((G,J)=>J).filter((G)=>G!==_);w=$[Math.floor(Math.random()*$.length)],L((G)=>{return G=G.slice(W,jA),[w,...G]})}else w=_+E;if(w>=H.length){if(O(z),w=W,!z)return}if(y(W),!F)O(!0);h(w)},[H,_,b,F,h]),P=X.useCallback(()=>{switch(c){case 0:k();break;case 1:k(!0);break;case 2:A.current?.play();break}},[c,k]),s=X.useCallback(()=>{if(H.length===W||!A.current)return;if(r>qA){A.current.currentTime=W;return}let z=W;if(b){if(AA.length===E)return;L((w)=>{let[,...x]=w;return z=x[W],x})}else z=_-E;if(z<W)z=H.length-E;h(z),y(W),O(!0)},[H,AA,_,r,B]),T=(z)=>h(z),GA=(z)=>{t(z),JA.setItem("player-volume",String(z))},HA=(z)=>{let w=FA(z);GA(w)},CA=()=>l(!0),EA=()=>l(!1),hA=()=>l((z)=>!z),SA=()=>m(!0),gA=()=>m(!1),PA=()=>m((z)=>!z),xA=()=>{LA((z)=>{let w=0;if(z===0)w=1;if(z===1)w=2;if(z===2)w=0;return JA.setItem("player-repeat",String(w)),w})},RA=(z)=>{U((w)=>[...w,z]),ZA(z)},mA=(z,w)=>{let x=w!==void 0||F;if(v(),L([W]),y(W),U(z),g(z),x)h(w||W),f()};X.useEffect(()=>{JA.setItem("player-muted",String(S))},[S]);let bA=()=>{if(A.current&&A.current.buffered.length>0){let z=A.current.buffered.end(A.current.buffered.length-1);y(z/A.current.duration*100)}};X.useEffect(()=>{if(A.current)A.current.addEventListener("ended",P);return()=>{A.current?.removeEventListener("ended",P)}},[P]),X.useEffect(()=>{if(A.current){if(A.current.muted=S,A.current.volume=D,O(!1),A.current.preload="metadata",A.current.addEventListener("progress",bA),A.current.addEventListener("timeupdate",VA),A.current.addEventListener("durationchange",_A),A.current.addEventListener("pause",()=>{O(!1)}),A.current.addEventListener("play",()=>{O(!0)}),A.current.readyState>=1)_A()}return()=>{if(A.current)A.current.pause(),A.current.removeEventListener("progress",bA),A.current.removeEventListener("timeupdate",VA),A.current.removeEventListener("durationchange",_A),A.current=null}},[]),X.useEffect(()=>{if("mediaSession"in navigator)navigator.mediaSession.setActionHandler("play",f),navigator.mediaSession.setActionHandler("pause",v),navigator.mediaSession.setActionHandler("previoustrack",s),navigator.mediaSession.setActionHandler("nexttrack",()=>k()),navigator.mediaSession.setActionHandler("seekto",(z)=>{if(z.seekTime!==void 0)B(z.seekTime)})},[f,v,s,k,B]),X.useEffect(()=>{if(H.length>0&&H[_])BA(H[_])},[H,_]),X.useEffect(()=>{if("mediaSession"in navigator)navigator.mediaSession.playbackState=F?"playing":"paused"},[F,_]);let kA={play:f,pause:v,togglePlayPause:d,next:k,previous:s,setVolume:GA,setVolumePercent:HA,mute:CA,unmute:EA,toggleMute:hA,shuffleOn:SA,shuffleOff:gA,toggleShuffle:PA,toggleLoop:xA,addToPlaylist:RA,replacePlaylist:mA,setCurrentTrack:T,setUpdateTime:B,setPlaylistId:o,volume:D,volumePercent:i,bufferedPercentage:UA,currentPlaylistId:p,maxTime:DA,playlist:H,durations:N,isPlaying:F,currentTime:r,currentTrackIndex:_,repeatMode:c,isShuffled:b,isLoading:q,isMuted:S};return iA.jsx($A.Provider,{value:kA,children:Z})};var uA=require("react");var J0=()=>{let Z=uA.useContext($A);if(Z===void 0)throw Error("useAudio must be used within an PlayerContext");return Z};