From 1128475558a99d5d0e37773d9d7edcf96f7c7f70 Mon Sep 17 00:00:00 2001 From: danielku15 Date: Fri, 30 Jan 2026 08:48:48 +0100 Subject: [PATCH] fix: correct GP5 bass clef detection --- .../alphatab/src/importer/Gp3To5Importer.ts | 4 ++-- .../visual-tests/music-notation/clefs-gp5.png | Bin 0 -> 43494 bytes .../alphatab/test/importer/Gp5Importer.test.ts | 2 +- .../visualTests/features/MusicNotation.test.ts | 16 ++++++++++++++++ 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 packages/alphatab/test-data/visual-tests/music-notation/clefs-gp5.png diff --git a/packages/alphatab/src/importer/Gp3To5Importer.ts b/packages/alphatab/src/importer/Gp3To5Importer.ts index dbe90ebf8..16223924d 100644 --- a/packages/alphatab/src/importer/Gp3To5Importer.ts +++ b/packages/alphatab/src/importer/Gp3To5Importer.ts @@ -435,9 +435,9 @@ export class Gp3To5Importer extends ScoreImporter { } /** - * Guitar Pro 3-6 changes to a bass clef if any string tuning is below B2; + * Guitar Pro 3-6 changes to a bass clef if any string tuning is below B1 */ - private static readonly _bassClefTuningThreshold = ModelUtils.parseTuning('B2')!.realValue; + private static readonly _bassClefTuningThreshold = ModelUtils.parseTuning('B1')!.realValue; public readTrack(): void { const newTrack: Track = new Track(); diff --git a/packages/alphatab/test-data/visual-tests/music-notation/clefs-gp5.png b/packages/alphatab/test-data/visual-tests/music-notation/clefs-gp5.png new file mode 100644 index 0000000000000000000000000000000000000000..a33ebb29baa6cd6fc2d446c9ca586bd6272c5459 GIT binary patch literal 43494 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 literal 0 HcmV?d00001 diff --git a/packages/alphatab/test/importer/Gp5Importer.test.ts b/packages/alphatab/test/importer/Gp5Importer.test.ts index e56f85ebb..839203631 100644 --- a/packages/alphatab/test/importer/Gp5Importer.test.ts +++ b/packages/alphatab/test/importer/Gp5Importer.test.ts @@ -548,7 +548,7 @@ describe('Gp5ImporterTest', () => { it('tuning-bass-clef', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/bass-tuning.gp5')).readScore(); - expect(score.tracks[0].staves[0].bars[0].clef).to.equal(Clef.F4); + expect(score.tracks[0].staves[0].bars[0].clef).to.equal(Clef.G2); expect(score.tracks[1].staves[0].bars[0].clef).to.equal(Clef.F4); expect(score.tracks[2].staves[0].bars[0].clef).to.equal(Clef.F4); expect(score.tracks[3].staves[0].bars[0].clef).to.equal(Clef.F4); diff --git a/packages/alphatab/test/visualTests/features/MusicNotation.test.ts b/packages/alphatab/test/visualTests/features/MusicNotation.test.ts index 198405172..80d9f35cc 100644 --- a/packages/alphatab/test/visualTests/features/MusicNotation.test.ts +++ b/packages/alphatab/test/visualTests/features/MusicNotation.test.ts @@ -3,6 +3,7 @@ import { NotationElement } from '@coderline/alphatab/NotationSettings'; import { Settings } from '@coderline/alphatab/Settings'; import { StaveProfile } from '@coderline/alphatab/StaveProfile'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; +import { TestPlatform } from 'test/TestPlatform'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from 'test/visualTests/VisualTestHelper'; describe('MusicNotationTests', () => { @@ -21,6 +22,21 @@ describe('MusicNotationTests', () => { await VisualTestHelper.runVisualTest('music-notation/clefs.gp', settings); }); + it('clefs-gp5', async () => { + const score = ScoreLoader.loadScoreFromBytes( + await TestPlatform.loadFile('test-data/guitarpro5/bass-tuning.gp5') + ); + const settings: Settings = new Settings(); + settings.display.layoutMode = LayoutMode.Page; + + const referenceFileName = 'test-data/visual-tests/music-notation/clefs-gp5.png'; + + const o = new VisualTestOptions(score, [new VisualTestRun(-1, referenceFileName)], settings); + o.tracks = score.tracks.map(t => t.index); + + await VisualTestHelper.runVisualTestFull(o); + }); + it('key-signatures-mixed', async () => { const settings: Settings = new Settings(); settings.display.staveProfile = StaveProfile.Score;