import type { RefObject } from 'react'; import { useImperativeHandle, useRef, useState } from 'react'; import ReactPlayer from 'react-player'; import { AudioPlayer } from '/@/renderer/components/audio-player/types'; import { PlayerStatus } from '/@/shared/types/types'; export interface OnProgressProps { loaded: number; loadedSeconds: number; played: number; playedSeconds: number; } export interface WebPlayerEngineHandle extends AudioPlayer { player1(): { ref: null | ReactPlayer; setVolume: (volume: number) => void; }; player2(): { ref: null | ReactPlayer; setVolume: (volume: number) => void; }; } interface WebPlayerEngineProps { isMuted: boolean; isTransitioning: boolean; onEndedPlayer1: () => void; onEndedPlayer2: () => void; onProgressPlayer1: (e: OnProgressProps) => void; onProgressPlayer2: (e: OnProgressProps) => void; playerNum: number; playerRef: RefObject; playerStatus: PlayerStatus; speed?: number; src1: string | undefined; src2: string | undefined; volume: number; } // Credits: https://gist.github.com/novwhisky/8a1a0168b94f3b6abfaa?permalink_comment_id=1551393#gistcomment-1551393 // This is used so that the player will always have an