From cfc9e34372f385d6be3498525d75929e4597e3b2 Mon Sep 17 00:00:00 2001 From: Stanislav Gabenov Date: Mon, 9 Nov 2026 01:15:05 +0300 Subject: [PATCH 1/2] Show embedded backing track panel in Guitar Pro --- packages/alphatab/src/exporter/Gp7Exporter.ts | 6 +++++- packages/alphatab/test/exporter/Gp7Exporter.test.ts | 12 ++++++++++++ website/docs/formats/guitar-pro-8.mdx | 4 +++- website/docs/releases/release1_10.mdx | 4 ++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/alphatab/src/exporter/Gp7Exporter.ts b/packages/alphatab/src/exporter/Gp7Exporter.ts index 20647095c..34019df1f 100644 --- a/packages/alphatab/src/exporter/Gp7Exporter.ts +++ b/packages/alphatab/src/exporter/Gp7Exporter.ts @@ -40,8 +40,12 @@ export class Gp7Exporter extends ScoreExporter { fileSystem.writeEntry(new ZipEntry('Content/LayoutConfiguration', layoutConfiguration)); fileSystem.writeEntry(new ZipEntry('Content/score.gpif', IOHelper.stringToBytes(gpifXml))); - if(gpifWriter.backingTrackAssetFileName) { + if (gpifWriter.backingTrackAssetFileName) { fileSystem.writeEntry(new ZipEntry(gpifWriter.backingTrackAssetFileName!, score.backingTrack!.rawAudioFile!)); + // Let Guitar Pro open the embedded audio panel by default. + fileSystem.writeEntry( + new ZipEntry('Content/Preferences.json', IOHelper.stringToBytes('{"view":{"backingTrackVisible":true}}')) + ); } fileSystem.end(); diff --git a/packages/alphatab/test/exporter/Gp7Exporter.test.ts b/packages/alphatab/test/exporter/Gp7Exporter.test.ts index 9b6a42c29..5de0d8b14 100644 --- a/packages/alphatab/test/exporter/Gp7Exporter.test.ts +++ b/packages/alphatab/test/exporter/Gp7Exporter.test.ts @@ -9,6 +9,7 @@ import { GpifParser } from '@coderline/alphatab/importer/GpifParser'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { IOHelper } from '@coderline/alphatab/io/IOHelper'; +import { BackingTrack } from '@coderline/alphatab/model/BackingTrack'; import { TechniqueSymbolPlacement } from '@coderline/alphatab/model/InstrumentArticulation'; import { JsonConverter } from '@coderline/alphatab/model/JsonConverter'; import { MusicFontSymbol } from '@coderline/alphatab/model/MusicFontSymbol'; @@ -23,6 +24,17 @@ import { TestPlatform } from 'test/TestPlatform'; import { describe, expect, it } from 'vitest'; describe('Gp7ExporterTest', () => { + it('sets the backing track visibility preference only for embedded audio', () => { + const score = ScoreLoader.loadAlphaTex('3.3.4'); + const entriesWithoutAudio = new ZipReader(ByteBuffer.fromBuffer(exportGp7(score)), new Settings().importer.maxDecodingBufferSize).read(); + expect(entriesWithoutAudio.some(e => e.fileName.endsWith('Preferences.json'))).toBe(false); + score.backingTrack = new BackingTrack(); + score.backingTrack.rawAudioFile = new Uint8Array([1, 2, 3, 4]); + const entries = new ZipReader(ByteBuffer.fromBuffer(exportGp7(score)), new Settings().importer.maxDecodingBufferSize).read(); + const preferences = entries.find(e => e.fileName.endsWith('Preferences.json')); + expect(preferences).toBeDefined(); + expect(JSON.parse(IOHelper.toString(preferences!.data, '')).view.backingTrackVisible).toBe(true); + }); async function loadScore(name: string): Promise { try { const data = await TestPlatform.loadFile(`test-data/${name}`); diff --git a/website/docs/formats/guitar-pro-8.mdx b/website/docs/formats/guitar-pro-8.mdx index 32abe934d..dea60255e 100644 --- a/website/docs/formats/guitar-pro-8.mdx +++ b/website/docs/formats/guitar-pro-8.mdx @@ -10,6 +10,8 @@ description: The proprietary file format of the current Arobas Guitar Pro versio The general file format of Guitar Pro 8 is the same as Guitar Pro 8 but with potentially additional files in the zip (e.g. for audio tracks) and with an extended `score.gpif` for new features. +When exporting a score with embedded backing audio, alphaTab includes a visibility preference so Guitar Pro opens the backing-track panel by default. + **Compatibility Level:** Mature and well tested (through GP7) @@ -736,4 +738,4 @@ import { FileFormatFeatureTable, FileFormatFeatureGroup, FileFormatFeatureRow, F audio={[FeatureStatus.Supported]} tex={[FeatureStatus.Supported]} /> - \ No newline at end of file + diff --git a/website/docs/releases/release1_10.mdx b/website/docs/releases/release1_10.mdx index 06ddea0de..6a9ee6279 100644 --- a/website/docs/releases/release1_10.mdx +++ b/website/docs/releases/release1_10.mdx @@ -6,6 +6,10 @@ import { AlphaTab } from '@site/src/components/AlphaTab'; ## 1.10.0 +#### export: show embedded backing audio in Guitar Pro + +Exported scores with embedded backing audio now request that Guitar Pro show its backing-track panel when opening the file. + ### Music Notation #### render: transposed tabs on playable strings From 1376f72456c1a55e0f19e49330e1bd48e1e0d0b7 Mon Sep 17 00:00:00 2001 From: Stanislav Gabenov Date: Mon, 9 Nov 2026 01:49:27 +0300 Subject: [PATCH 2/2] Link audio panel release note to pull request --- website/docs/releases/release1_10.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/releases/release1_10.mdx b/website/docs/releases/release1_10.mdx index 6a9ee6279..533824904 100644 --- a/website/docs/releases/release1_10.mdx +++ b/website/docs/releases/release1_10.mdx @@ -7,6 +7,7 @@ import { AlphaTab } from '@site/src/components/AlphaTab'; ## 1.10.0 #### export: show embedded backing audio in Guitar Pro +https://github.com/CoderLine/alphaTab/pull/3024 Exported scores with embedded backing audio now request that Guitar Pro show its backing-track panel when opening the file.