You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

audio.player.manager.ts 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import AudioPlayer from '@/app/components/base/audio-btn/audio'
  2. declare global {
  3. // eslint-disable-next-line ts/consistent-type-definitions
  4. interface AudioPlayerManager {
  5. instance: AudioPlayerManager
  6. }
  7. }
  8. export class AudioPlayerManager {
  9. private static instance: AudioPlayerManager
  10. private audioPlayers: AudioPlayer | null = null
  11. private msgId: string | undefined
  12. public static getInstance(): AudioPlayerManager {
  13. if (!AudioPlayerManager.instance) {
  14. AudioPlayerManager.instance = new AudioPlayerManager()
  15. this.instance = AudioPlayerManager.instance
  16. }
  17. return AudioPlayerManager.instance
  18. }
  19. public getAudioPlayer(url: string, isPublic: boolean, id: string | undefined, msgContent: string | null | undefined, voice: string | undefined, callback: ((event: string) => void) | null): AudioPlayer {
  20. if (this.msgId && this.msgId === id && this.audioPlayers) {
  21. this.audioPlayers.setCallback(callback)
  22. return this.audioPlayers
  23. }
  24. else {
  25. if (this.audioPlayers) {
  26. try {
  27. this.audioPlayers.pauseAudio()
  28. this.audioPlayers.cacheBuffers = []
  29. this.audioPlayers.sourceBuffer?.abort()
  30. }
  31. catch {
  32. }
  33. }
  34. this.msgId = id
  35. this.audioPlayers = new AudioPlayer(url, isPublic, id, msgContent, voice, callback)
  36. return this.audioPlayers
  37. }
  38. }
  39. public resetMsgId(msgId: string) {
  40. this.msgId = msgId
  41. this.audioPlayers?.resetMsgId(msgId)
  42. }
  43. }