MCPcopy Create free account
hub / github.com/CoderLine/alphaTab / AlphaSynthWrapper

Class AlphaSynthWrapper

packages/alphatab/src/synth/AlphaSynthWrapper.ts:34–478  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32 * @internal
33 */
34export class AlphaSynthWrapper implements IAlphaSynth {
35 // relevant state information we want to remember when switching between player instances
36 private _masterVolume: number = 1;
37 private _metronomeVolume: number = 0;
38 private _countInVolume: number = 0;
39 private _playbackSpeed: number = 1;
40 private _isLooping: boolean = false;
41 private _midiEventsPlayedFilter: MidiEventType[] = [];
42
43 private _instance?: IAlphaSynth;
44 private _instanceEventUnregister?: (() => void)[];
45
46 public midiTickShift = 0;
47
48 public constructor() {
49 this.ready = new EventEmitter(() => this.isReady);
50 this.readyForPlayback = new EventEmitter(() => this.isReadyForPlayback);
51 this.midiLoaded = new EventEmitterOfT<PositionChangedEventArgs>(() => {
52 return this._instance?.loadedMidiInfo ?? null;
53 });
54 this.stateChanged = new EventEmitterOfT<PlayerStateChangedEventArgs>(() => {
55 return new PlayerStateChangedEventArgs(this.state, false);
56 });
57 this.positionChanged = new EventEmitterOfT<PositionChangedEventArgs>(() => {
58 return this.currentPosition;
59 });
60 this.playbackRangeChanged = new EventEmitterOfT<PlaybackRangeChangedEventArgs>(() => {
61 const range = this.playbackRange;
62 if (range) {
63 return new PlaybackRangeChangedEventArgs(range);
64 }
65 return null;
66 });
67 }
68
69 public get instance(): IAlphaSynth | undefined {
70 return this._instance;
71 }
72
73 public set instance(value: IAlphaSynth | undefined) {
74 this._instance = value;
75
76 // unregister all events from previous instance
77 const unregister = this._instanceEventUnregister;
78 if (unregister) {
79 for (const e of unregister) {
80 e();
81 }
82 }
83
84 if (value) {
85 // regsiter to events of new player and forward them to existing listeners
86 const newUnregister: (() => void)[] = [];
87 newUnregister.push(value.ready.on(() => (this.ready as EventEmitter).trigger()));
88 newUnregister.push(value.readyForPlayback.on(() => (this.readyForPlayback as EventEmitter).trigger()));
89 newUnregister.push(value.finished.on(() => (this.finished as EventEmitter).trigger()));
90 newUnregister.push(value.soundFontLoaded.on(() => (this.soundFontLoaded as EventEmitter).trigger()));
91 newUnregister.push(

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected