diff --git a/src/renderer/components/audio-player/engine/web-player-engine.tsx b/src/renderer/components/audio-player/engine/web-player-engine.tsx new file mode 100644 index 000000000..63f10d7f2 --- /dev/null +++ b/src/renderer/components/audio-player/engine/web-player-engine.tsx @@ -0,0 +1,171 @@ +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