Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ protected void Initialize()
Player.MidiLoadFailed.On(OnMidiLoadFailed);
Player.ReadyForPlayback.On(OnReadyForPlayback);
Player.MidiEventsPlayed.On(OnMidiEventsPlayed);
Player.PlaybackRangeChanged.On(OnPlaybackRangeChanged);

DispatchOnUiThread(OnReady);
}
Expand Down Expand Up @@ -186,6 +187,7 @@ public void SetChannelVolume(double channel, double volume)
public IEventEmitterOfT<PlayerStateChangedEventArgs> StateChanged { get; } = new EventEmitterOfT<PlayerStateChangedEventArgs>();
public IEventEmitterOfT<PositionChangedEventArgs> PositionChanged { get; } = new EventEmitterOfT<PositionChangedEventArgs>();
public IEventEmitterOfT<MidiEventsPlayedEventArgs> MidiEventsPlayed { get; } = new EventEmitterOfT<MidiEventsPlayedEventArgs>();
public IEventEmitterOfT<PlaybackRangeChangedEventArgs> PlaybackRangeChanged { get; } = new EventEmitterOfT<PlaybackRangeChangedEventArgs>();

protected virtual void OnReady()
{
Expand Down Expand Up @@ -236,5 +238,10 @@ protected virtual void OnPositionChanged(PositionChangedEventArgs obj)
{
DispatchOnUiThread(() => ((EventEmitterOfT<PositionChangedEventArgs>)PositionChanged).Trigger(obj));
}

protected virtual void OnPlaybackRangeChanged(PlaybackRangeChangedEventArgs obj)
{
DispatchOnUiThread(() => ((EventEmitterOfT<PlaybackRangeChangedEventArgs>)PlaybackRangeChanged).Trigger(obj));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@ internal class AndroidThreadAlphaSynthWorkerPlayer : IAlphaSynth, Runnable {
player.midiEventsPlayed.on {
_uiInvoke { onMidiEventsPlayed(it) }
}
player.playbackRangeChanged.on {
_uiInvoke { onPlaybackRangeChanged(it) }
}

_uiInvoke { onReady() }
}
Expand Down Expand Up @@ -253,6 +256,8 @@ internal class AndroidThreadAlphaSynthWorkerPlayer : IAlphaSynth, Runnable {
EventEmitterOfT()
override val midiEventsPlayed: IEventEmitterOfT<MidiEventsPlayedEventArgs> =
EventEmitterOfT()
override val playbackRangeChanged: IEventEmitterOfT<PlaybackRangeChangedEventArgs> =
EventEmitterOfT()


private fun onReady() {
Expand Down Expand Up @@ -294,4 +299,8 @@ internal class AndroidThreadAlphaSynthWorkerPlayer : IAlphaSynth, Runnable {
private fun onPositionChanged(obj: PositionChangedEventArgs) {
_uiInvoke { (positionChanged as EventEmitterOfT<PositionChangedEventArgs>).trigger(obj) }
}

private fun onPlaybackRangeChanged(obj: PlaybackRangeChangedEventArgs) {
_uiInvoke { (playbackRangeChanged as EventEmitterOfT<PlaybackRangeChangedEventArgs>).trigger(obj) }
}
}
13 changes: 13 additions & 0 deletions src/AlphaTabApiBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import { AlphaTabError, AlphaTabErrorType } from '@src/AlphaTabError';
import { Note } from '@src/model/Note';
import { MidiEventType } from '@src/midi/MidiEvent';
import { MidiEventsPlayedEventArgs } from '@src/synth/MidiEventsPlayedEventArgs';
import { PlaybackRangeChangedEventArgs } from '@src/synth/PlaybackRangeChangedEventArgs';

class SelectionInfo {
public beat: Beat;
Expand Down Expand Up @@ -579,6 +580,7 @@ export class AlphaTabApiBase<TSettings> {
this.player.stateChanged.on(this.onPlayerStateChanged.bind(this));
this.player.positionChanged.on(this.onPlayerPositionChanged.bind(this));
this.player.midiEventsPlayed.on(this.onMidiEventsPlayed.bind(this));
this.player.playbackRangeChanged.on(this.onPlaybackRangeChanged.bind(this));
this.player.finished.on(this.onPlayerFinished.bind(this));
if (this.settings.player.enableCursor) {
this.setupCursors();
Expand Down Expand Up @@ -775,6 +777,7 @@ export class AlphaTabApiBase<TSettings> {
this._playerState = PlayerState.Paused;
// we need to update our position caches if we render a tablature
this.renderer.postRenderFinished.on(() => {
debugger;
this.cursorUpdateTick(this._previousTick, false, this._previousTick > 10);
});
if (this.player) {
Expand Down Expand Up @@ -1413,4 +1416,14 @@ export class AlphaTabApiBase<TSettings> {
(this.midiEventsPlayed as EventEmitterOfT<MidiEventsPlayedEventArgs>).trigger(e);
this.uiFacade.triggerEvent(this.container, 'midiEventsPlayed', e);
}

public playbackRangeChanged: IEventEmitterOfT<PlaybackRangeChangedEventArgs> =
new EventEmitterOfT<PlaybackRangeChangedEventArgs>();
private onPlaybackRangeChanged(e: PlaybackRangeChangedEventArgs): void {
if (this._isDestroyed) {
return;
}
(this.playbackRangeChanged as EventEmitterOfT<PlaybackRangeChangedEventArgs>).trigger(e);
this.uiFacade.triggerEvent(this.container, 'playbackRangeChanged', e);
}
}
9 changes: 9 additions & 0 deletions src/platform/javascript/AlphaSynthWebWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { IWorkerScope } from '@src/platform/javascript/IWorkerScope';
import { Logger } from '@src/Logger';
import { Environment } from '@src/Environment';
import { MidiEventsPlayedEventArgs } from '@src/synth/MidiEventsPlayedEventArgs';
import { PlaybackRangeChangedEventArgs } from '@src/synth/PlaybackRangeChangedEventArgs';

/**
* This class implements a HTML5 WebWorker based version of alphaSynth
Expand All @@ -32,6 +33,7 @@ export class AlphaSynthWebWorker {
this._player.midiLoadFailed.on(this.onMidiLoadFailed.bind(this));
this._player.readyForPlayback.on(this.onReadyForPlayback.bind(this));
this._player.midiEventsPlayed.on(this.onMidiEventsPlayed.bind(this));
this._player.playbackRangeChanged.on(this.onPlaybackRangeChanged.bind(this));
this._main.postMessage({
cmd: 'alphaSynth.ready'
});
Expand Down Expand Up @@ -213,4 +215,11 @@ export class AlphaSynthWebWorker {
events: args.events.map(JsonConverter.midiEventToJsObject)
});
}

public onPlaybackRangeChanged(args: PlaybackRangeChangedEventArgs): void {
this._main.postMessage({
cmd: 'alphaSynth.playbackRangeChanged',
playbackRange: args.playbackRange
});
}
}
10 changes: 10 additions & 0 deletions src/platform/javascript/AlphaSynthWebWorkerApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { FileLoadError } from '@src/FileLoadError';
import { MidiEventsPlayedEventArgs } from '@src/synth/MidiEventsPlayedEventArgs';
import { MidiEventType } from '@src/midi/MidiEvent';
import { Environment } from '@src/Environment';
import { PlaybackRangeChangedEventArgs } from '@src/synth/PlaybackRangeChangedEventArgs';

/**
* a WebWorker based alphaSynth which uses the given player as output.
Expand Down Expand Up @@ -375,6 +376,12 @@ export class AlphaSynthWebWorkerApi implements IAlphaSynth {
new PlayerStateChangedEventArgs(data.state, data.stopped)
);
break;
case 'alphaSynth.playbackRangeChanged':
this._playbackRange = (data as PlaybackRangeChangedEventArgs).playbackRange;
(this.playbackRangeChanged as EventEmitterOfT<PlaybackRangeChangedEventArgs>).trigger(
new PlaybackRangeChangedEventArgs(this._playbackRange)
);
break;
case 'alphaSynth.finished':
(this.finished as EventEmitter).trigger();
break;
Expand Down Expand Up @@ -442,6 +449,9 @@ export class AlphaSynthWebWorkerApi implements IAlphaSynth {
readonly midiEventsPlayed: IEventEmitterOfT<MidiEventsPlayedEventArgs> = new EventEmitterOfT<
MidiEventsPlayedEventArgs
>();
readonly playbackRangeChanged: IEventEmitterOfT<PlaybackRangeChangedEventArgs> = new EventEmitterOfT<
PlaybackRangeChangedEventArgs
>();

//
// output communication ( output -> worker )
Expand Down
5 changes: 5 additions & 0 deletions src/synth/AlphaSynth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { SynthEvent } from '@src/synth/synthesis/SynthEvent';
import { Queue } from '@src/synth/ds/Queue';
import { MidiEventsPlayedEventArgs } from '@src/synth/MidiEventsPlayedEventArgs';
import { MidiEvent, MidiEventType } from '@src/midi/MidiEvent';
import { PlaybackRangeChangedEventArgs } from '@src/synth/PlaybackRangeChangedEventArgs';

/**
* This is the main synthesizer component which can be used to
Expand Down Expand Up @@ -139,6 +140,9 @@ export class AlphaSynth implements IAlphaSynth {
if (value) {
this.tickPosition = value.startTick;
}
(this.playbackRangeChanged as EventEmitterOfT<PlaybackRangeChangedEventArgs>).trigger(
new PlaybackRangeChangedEventArgs(value)
);
}

public get isLooping(): boolean {
Expand Down Expand Up @@ -459,4 +463,5 @@ export class AlphaSynth implements IAlphaSynth {
readonly stateChanged: IEventEmitterOfT<PlayerStateChangedEventArgs> = new EventEmitterOfT<PlayerStateChangedEventArgs>();
readonly positionChanged: IEventEmitterOfT<PositionChangedEventArgs> = new EventEmitterOfT<PositionChangedEventArgs>();
readonly midiEventsPlayed: IEventEmitterOfT<MidiEventsPlayedEventArgs> = new EventEmitterOfT<MidiEventsPlayedEventArgs>();
readonly playbackRangeChanged: IEventEmitterOfT<PlaybackRangeChangedEventArgs> = new EventEmitterOfT<PlaybackRangeChangedEventArgs>();
}
6 changes: 6 additions & 0 deletions src/synth/IAlphaSynth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { MidiFile } from '@src/midi/MidiFile';
import { PlaybackRange } from '@src/synth/PlaybackRange';
import { PlayerState } from '@src/synth/PlayerState';
import { PlayerStateChangedEventArgs } from '@src/synth/PlayerStateChangedEventArgs';
import { PlaybackRangeChangedEventArgs } from '@src/synth/PlaybackRangeChangedEventArgs';
import { PositionChangedEventArgs } from '@src/synth/PositionChangedEventArgs';
import { IEventEmitter, IEventEmitterOfT } from '@src/EventEmitter';
import { LogLevel } from '@src/LogLevel';
Expand Down Expand Up @@ -204,4 +205,9 @@ export interface IAlphaSynth {
* The event is fired when certain midi events were sent to the audio output device for playback.
*/
readonly midiEventsPlayed: IEventEmitterOfT<MidiEventsPlayedEventArgs>;

/**
* The event is fired when the playback range within the player was updated.
*/
readonly playbackRangeChanged: IEventEmitterOfT<PlaybackRangeChangedEventArgs>;
}
19 changes: 19 additions & 0 deletions src/synth/PlaybackRangeChangedEventArgs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { PlaybackRange } from '@src/synth/PlaybackRange';

/**
* Represents the info when the playback range changed.
*/
export class PlaybackRangeChangedEventArgs {
/**
* The new playback range.
*/
public readonly playbackRange: PlaybackRange | null;

/**
* Initializes a new instance of the {@link PlaybackRangeChangedEventArgs} class.
* @param range The range.
*/
public constructor(playbackRange: PlaybackRange | null) {
this.playbackRange = playbackRange;
}
}
1 change: 1 addition & 0 deletions src/synth/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ export { AlphaSynth } from '@src/synth/AlphaSynth';
export { PlaybackRange } from '@src/synth/PlaybackRange';
export { PlayerState } from '@src/synth/PlayerState';
export { PlayerStateChangedEventArgs } from '@src/synth/PlayerStateChangedEventArgs';
export { PlaybackRangeChangedEventArgs } from '@src/synth/PlaybackRangeChangedEventArgs';
export { PositionChangedEventArgs } from '@src/synth/PositionChangedEventArgs';
export { AlphaSynthWebWorkerApi } from '@src/platform/javascript/AlphaSynthWebWorkerApi';