Before we go about creating our services, let's create an interface and model implementation for the core piece of data our app will be using. The TrackModel will represent a single track with the following:
filepath: (to the local file)
name: (for our view)
order: Position (for the view listing of tracks)
volume: We want our player to be able to mix different tracks together with different volume level settings
solo: Whether we want to hear just this track in our mix
We will also add a convenient constructor to our model, which will take an object to initialize our model with.
Create app/modules/core/models/track.model.ts, since it will be shared across both our player and recorder:
export interface ITrack { filepath?: string; name?: string; order?: number; volume?: number; solo?: boolean; } export class TrackModel implements ITrack { public filepath: string; public name: string; public order: number; public volume: number = 1; // set default to full volume public solo: boolean;
constructor(model?: any) { if (model) { for (let key in model) { this[key] = model[key]; } } } }