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
17 changes: 17 additions & 0 deletions src/Environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,17 @@ import { RasgueadoEffectInfo } from './rendering/effects/RasgueadoEffectInfo';
import { DirectionsEffectInfo } from './rendering/effects/DirectionsEffectInfo';
import { BeatTimerEffectInfo } from './rendering/effects/BeatTimerEffectInfo';

/**
* A factory for custom layout engines.
*/
export class LayoutEngineFactory {
/**
* Whether the layout is considered "vertical" (affects mainly scrolling behavior).
*/
public readonly vertical: boolean;
/**
* Creates a new layout instance.
*/
public readonly createLayout: (renderer: ScoreRenderer) => ScoreLayout;

public constructor(vertical: boolean, createLayout: (renderer: ScoreRenderer) => ScoreLayout) {
Expand All @@ -84,7 +93,15 @@ export class LayoutEngineFactory {
}
}

/**
* A factory for custom render engines.
* Note for Web: To use a custom engine in workers you have to ensure the engine and registration to the environment are
* also done in the background worker files (e.g. when bundling)
*/
export class RenderEngineFactory {
/**
* Whether the layout supports background workers.
*/
public readonly supportsWorkers: boolean;
public readonly createCanvas: () => ICanvas;

Expand Down
3 changes: 2 additions & 1 deletion src/Settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ImporterSettings } from '@src/ImporterSettings';
import { FingeringMode, NotationMode, NotationSettings, NotationElement } from '@src/NotationSettings';
import { PlayerSettings } from '@src/PlayerSettings';
import { SettingsSerializer } from '@src/generated/SettingsSerializer';
import { SettingsJson } from './generated/SettingsJson';

/**
* This public class contains instance specific settings for alphaTab
Expand Down Expand Up @@ -64,7 +65,7 @@ export class Settings {
/**
* @target web
*/
public fillFromJson(json: any): void {
public fillFromJson(json: SettingsJson): void {
SettingsSerializer.fromJson(this, json);
}
}
8 changes: 5 additions & 3 deletions src/alphaTab.core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export { DisplaySettings, SystemsLayoutMode } from '@src/DisplaySettings';
export { LayoutMode } from '@src/LayoutMode';
export { StaveProfile } from '@src/StaveProfile';
export { ImporterSettings } from '@src/ImporterSettings';
export { FingeringMode, NotationMode, NotationSettings, TabRhythmMode } from '@src/NotationSettings';
export { FingeringMode, NotationMode, NotationSettings, TabRhythmMode, NotationElement } from '@src/NotationSettings';
export { PlayerSettings, ScrollMode, VibratoPlaybackSettings, PlayerOutputMode } from '@src/PlayerSettings';
export { ProgressEventArgs } from '@src/ProgressEventArgs';
export { RenderingResources } from '@src/RenderingResources';
Expand All @@ -12,9 +12,11 @@ export { Settings } from '@src/Settings';
export { AlphaTabError, AlphaTabErrorType } from '@src/AlphaTabError';
export { FormatError } from '@src/FormatError';
export { LogLevel } from '@src/LogLevel';
export { Logger } from '@src/Logger';
export { Logger, ConsoleLogger } from '@src/Logger';
export type { ILogger } from '@src/Logger';
export { FileLoadError } from '@src/FileLoadError';
export { Environment } from '@src/Environment';
export { Environment, LayoutEngineFactory, RenderEngineFactory } from '@src/Environment';
export type { IEventEmitter, IEventEmitterOfT } from '@src/EventEmitter';

export { AlphaTabApi } from '@src/platform/javascript/AlphaTabApi';
export { WebPlatform } from '@src/platform/javascript/WebPlatform';
Expand Down
6 changes: 6 additions & 0 deletions src/importer/AlphaTexImporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,11 @@ export class AlphaTexImporter extends ScoreImporter {
} else if (this._ch === 0x5c /* \ */) {
this._ch = this.nextChar();
this._sy = AlphaTexSymbols.MetaCommand;
// allow double backslash (easier to test when copying from escaped Strings)
if(this._ch === 0x5c /* \ */) {
this._ch = this.nextChar();
}

this._syData = this.readName();
} else if (this._ch === 0x29 /* ) */) {
this._sy = AlphaTexSymbols.RParensis;
Expand Down Expand Up @@ -2892,6 +2897,7 @@ export class AlphaTexImporter extends ScoreImporter {
}
} else if (syData == 'ft') {
master.isFreeTime = true;
this._sy = this.newSy();
} else if (syData === 'ro') {
master.isRepeatStart = true;
this._sy = this.newSy();
Expand Down
13 changes: 10 additions & 3 deletions src/midi/MidiFileGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,16 @@ export class MidiFileGenerator {
this._currentTime += MidiUtils.ticksToMillis(remainingTick, currentTempo);
}
}

// in case of simile marks where we repeat we register the empty beat for the whole bar
if (playbackBar.id !== bar.id) {
this.tickLookup.addBeat(
bar.voices[0].beats[0],
0,
tickDuration
);
//this.tickLookup.addBeat(beat, 0, audioDuration);
}
}

private getPlaybackBar(bar: Bar): Bar {
Expand Down Expand Up @@ -390,9 +400,6 @@ export class MidiFileGenerator {
// in case of normal playback register playback
if (realBar === beat.voice.bar) {
this.tickLookup.addBeat(beat, beatStart, audioDuration);
} else {
// in case of simile marks where we repeat we also register
this.tickLookup.addBeat(beat, 0, audioDuration);
}

const track: Track = beat.voice.bar.staff.track;
Expand Down
2 changes: 1 addition & 1 deletion src/model/Fermata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export class Fermata {
public type: FermataType = FermataType.Short;

/**
* Gets or sets the actual lenght of the fermata.
* Gets or sets the actual length of the fermata.
*/
public length: number = 0;
}
21 changes: 16 additions & 5 deletions src/model/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
export { AccentuationType } from '@src/model/AccentuationType';
export { AccidentalType } from '@src/model/AccidentalType';
export { AutomationType, Automation } from '@src/model/Automation';
export { Bar } from '@src/model/Bar';
export { Beat } from '@src/model/Beat';
export { Bar, SustainPedalMarkerType, SustainPedalMarker } from '@src/model/Bar';
export { BarreShape } from '@src/model/BarreShape';
export { Beat, BeatBeamingMode } from '@src/model/Beat';
export { BendPoint } from '@src/model/BendPoint';
export { BendStyle } from '@src/model/BendStyle';
export { BendType } from '@src/model/BendType';
Expand All @@ -13,9 +14,10 @@ export { Color } from '@src/model/Color';
export { CrescendoType } from '@src/model/CrescendoType';
export { Duration } from '@src/model/Duration';
export { DynamicValue } from '@src/model/DynamicValue';
export { FadeType } from '@src/model/FadeType';
export { FermataType, Fermata } from '@src/model/Fermata';
export { Fingers } from '@src/model/Fingers';
export { FontStyle, Font } from '@src/model/Font';
export { FontStyle, FontWeight, Font } from '@src/model/Font';
export { GraceType } from '@src/model/GraceType';
export { HarmonicType } from '@src/model/HarmonicType';
export { InstrumentArticulation } from '@src/model/InstrumentArticulation';
Expand All @@ -27,10 +29,18 @@ export { MasterBar } from '@src/model/MasterBar';
export { MusicFontSymbol } from '@src/model/MusicFontSymbol';
export { Note } from '@src/model/Note';
export { NoteAccidentalMode } from '@src/model/NoteAccidentalMode';
export { NoteOrnament } from '@src/model/NoteOrnament';
export { Ottavia } from '@src/model/Ottavia';
export { PickStroke } from '@src/model/PickStroke';
export { PlaybackInformation } from '@src/model/PlaybackInformation';
export { RenderStylesheet } from '@src/model/RenderStylesheet';
export { Rasgueado } from '@src/model/Rasgueado';
export {
RenderStylesheet,
BracketExtendMode,
TrackNamePolicy,
TrackNameMode,
TrackNameOrientation
} from '@src/model/RenderStylesheet';
export { RepeatGroup } from '@src/model/RepeatGroup';
export { Score } from '@src/model/Score';
export { Section } from '@src/model/Section';
Expand All @@ -44,4 +54,5 @@ export { Tuning } from '@src/model/Tuning';
export { TupletGroup } from '@src/model/TupletGroup';
export { VibratoType } from '@src/model/VibratoType';
export { Voice } from '@src/model/Voice';
export { WhammyType } from '@src/model/WhammyType';
export { WahPedal } from '@src/model/WahPedal'
export { WhammyType } from '@src/model/WhammyType';
2 changes: 1 addition & 1 deletion src/platform/javascript/HtmlElementContainer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export class HtmlElementContainer implements IContainer {
}

public set scrollLeft(value: number) {
this.element.scrollTop = value;
this.element.scrollLeft = value;
}

public get scrollTop(): number {
Expand Down
2 changes: 1 addition & 1 deletion src/rendering/effects/BeatTimerEffectInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export class BeatTimerEffectInfo extends EffectBarRendererInfo {
}

public shouldCreateGlyph(settings: Settings, beat: Beat): boolean {
return beat.voice.index === 0 && beat.index === 0 && beat.showTimer;
return beat.showTimer;
}

public createNewGlyph(renderer: BarRendererBase, beat: Beat): EffectGlyph {
Expand Down
1 change: 1 addition & 0 deletions src/rendering/glyphs/TabNoteChordGlyph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ export class TabNoteChordGlyph extends Glyph {
this._deadSlapped.renderer = this.renderer;
this._deadSlapped.doLayout();
w = this._deadSlapped.width;
this.noteStringWidth = w;
} else {
let noteStringWidth: number = 0;
for (let i: number = 0, j: number = this._notes.length; i < j; i++) {
Expand Down
Binary file modified test-data/visual-tests/effects-and-annotations/dead-slap.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.