Skip to content

Types Reference

Most types are exported from @nomercy-entertainment/nomercy-music-player. The backend state types (BackendState, BackendLoaderState, BackendEvent) are also available from the @nomercy-entertainment/nomercy-music-player/adapters/audio-backend subpath.

Core types

MusicPlaylistItem

TypeScript
interface MusicPlaylistItem extends BasePlaylistItem {
id: string | number;
name: string;
url?: string;
cover?: string;
artist?: string;
album?: string;
lyricsUrl?: string;
duration?: number;
}

See MusicPlaylistItem for field details.

MusicPlayerConfig<T>

TypeScript
interface MusicPlayerConfig<
T extends BasePlaylistItem = MusicPlaylistItem,
> extends BasePlayerConfig {
backend?: AudioBackendKind;
backendFactory?: AudioBackendFactory;
crossfadeDefaults?: { duration: number; curve?: 'linear' | 'equal-power' };
playlist?: T[] | string;
trackEndingSoonThreshold?: number;
}

See Configuration.

IMusicPlayer<T>

TypeScript
interface IMusicPlayer<
T extends BasePlaylistItem = MusicPlaylistItem,
> extends IPlayer<MusicEventMap> {
backend(): IAudioBackend;
backend(kind: AudioBackendKind): Promise<void>;
crossfadeTo(track: T, opts?: CrossfadeOptions & ActionOptions): Promise<void>;
isTransitioning(): boolean;
}

Recommended type for consumer-held player references. See Factory.

MusicEventMap

TypeScript
interface MusicEventMap extends BaseEventMap {
current: { item: MusicPlaylistItem | undefined; index: number };
'backend:changed': { kind: AudioBackendKind };
repeat: { state: RepeatState };
shuffle: { state: ShuffleState };
trackEndingSoon: { remaining: number; currentTrack: MusicPlaylistItem };
crossfadeStart: { from: MusicPlaylistItem | null; to: MusicPlaylistItem; duration: number };
crossfadeComplete: { track: MusicPlaylistItem };
}

Crossfade types

CrossfadeOptions

TypeScript
interface CrossfadeOptions {
duration: number;
curve?: 'linear' | 'equal-power';
startAt?: number;
}

AudioBackendKind

TypeScript
type AudioBackendKind = 'audio-element' | 'webaudio';

AudioBackendFactory

TypeScript
type AudioBackendFactory = (
kind: AudioBackendKind,
config: MusicPlayerConfig<BasePlaylistItem>,
) => IAudioBackend;

Enums

PlayState

TypeScript
enum PlayState {
IDLE = 'idle',
LOADING = 'loading',
PLAYING = 'playing',
PAUSED = 'paused',
STOPPED = 'stopped',
ERROR = 'error',
}

VolumeState

TypeScript
enum VolumeState {
UNMUTED = 'unmuted',
MUTED = 'muted',
}

RepeatState

TypeScript
enum RepeatState {
OFF = 'off',
ALL = 'all',
ONE = 'one',
}

ShuffleState

TypeScript
enum ShuffleState {
OFF = 'off',
ON = 'on',
}

Backend types

BackendState

TypeScript
type BackendState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'error';

BackendLoaderState

TypeScript
type BackendLoaderState = 'running' | 'paused';

BackendEvent

TypeScript
type BackendEvent =
| 'loadstart'
| 'loadedmetadata'
| 'canplay'
| 'play'
| 'playing'
| 'pause'
| 'ended'
| 'timeupdate'
| 'waiting'
| 'stalled'
| 'ratechange'
| 'encrypted'
| 'error'
| 'backend:loading'
| 'backend:loaded';

Adapter types

TypeImport path
ILyricSource@nomercy-entertainment/nomercy-music-player/adapters/lyric-source
IScrobbler, ScrobbleContext@nomercy-entertainment/nomercy-music-player/adapters/scrobbler
INowPlayingArt@nomercy-entertainment/nomercy-music-player/adapters/now-playing-art
IPlaylistGenerator@nomercy-entertainment/nomercy-music-player/adapters/playlist-generator

See also