import type { AudioCodec, MediaContainer, MediaFile, VideoCodec, VideoEncodingSetting, } from "music-server-shared/types"; export interface PlaylistItem extends MediaFile { id: string; //used for determining currently playing item path: string; } export interface Playlist { name: string; items: Omit[]; } export interface PlayerState { isPlaying: boolean; currentTrack: PlaylistItem | null; currentTime: number; volume: number; buffered: { start: number; end: number }[]; rate: number; waitingForStart: boolean; } export enum StreamingMode { mse = "mse", progressive = "progressive", // same as progressive, but disables chunked transcoding, to workaround some browser issues buffered = "buffered", } //probably support doesn't vary over bitrates/levels (tested for chromium/linux) but is cheap so do it anyway export const AUDIO_BITRATES = [32_000, 48_000, 64_000, 96_000, 128_000, 192_000, 320_000]; export const VIDEO_BITRATES = [ 210_000, 420_000, 720_000, 1_500_000, 3_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000, 15_000_000, 20_000_000, 30_000_000, 40_000_000, ]; export enum FileDisplay { FILENAME = 0, TITLE = 1, TRACKNO_TITLE = 2, } export interface AppOptions { enableTranscoding: boolean; languages: string; maxTranscodes: number; maxDownloads: number; transcodeCovers: boolean; hideVolume: boolean; hideCover: boolean; hidePlaylistCover: boolean; filebrowserDisplay: FileDisplay; playlistDisplay: FileDisplay; controlsDisplay: FileDisplay; fontResolution: number; progressBarHeight: number; rememberDir: boolean; duplicateWarning: boolean; videoSettings: { streamingMode: StreamingMode; container: MediaContainer; videoCodec: VideoCodec; videoEncodingSetting: VideoEncodingSetting; videoBitrate: number; audioCodec: AudioCodec; audioBitrate: number; }; audioSettings: { streamingMode: StreamingMode; container: MediaContainer; audioCodec: AudioCodec; audioBitrate: number; }; }