Skip to content

Guitar Pro exporter produces invalid outputs for non-stringed staves #2827

Description

@Danielku15

Is there an existing issue for this?

  • I have searched the existing issues

I have read the contribution rules

AI authorship

Written by a human, no AI assistance

Current Behavior

alphaTab does not hold any string+fret information for staves like for piano in its data model. This worked well until Guitar Pro 6 and with MusicXML. Unfortunately Guitar Pro 7 (in some inbetween version) changed again to an approach where all staves hold stringed information, and GP simply spreads notes across available strings. Same applies in Guitar Pro 8.

With these changes in software, the Guitar Pro 7+ exporter is broken. We do not write tuning, string and fret information for such staves. That leads to very strange Guitar Pro behavior: the tuning shows C- and if you edit it, it crashes.

If you play the song, you only hear weird noises.

If you show tabs, you will see -2147483648 (int32.minvalue) for all notes.

While the pitched notes are shown correctly, playback in Guitar Pro is broken for such tracks/staves

Expected Behavior

alphaTab must export the data model in a way that allows Guitar Pro to fully load , display and play the song.

Steps To Reproduce

  1. Take a song with purely pitched notes e.g. C4 * 4 alphatex. or take musicxml inputs
  2. export it to a Guitar Pro file
  3. open it in Guitar Pro 8
  4. optional: change playback to RSE
  5. play the song -> notice strange pitched notes
  6. show the tab staff -> notice the int32.minvalue frets.

Link to jsFiddle, CodePen, Project

No response

Version and Environment

Interaction to Next Paint (INP)

0 ms
Your local INP value of 0 ms is good.
INP interaction
keyboard
Learn more about local and field metrics
Interactions
Layout shifts

keyboard INP
body
0 ms
Next steps
Environment settings
Use the device toolbar and configure throttling to simulate real user environments and identify more performance issues.


CPU: No throttling

Network: No throttling
Disable network cache


Record
Ctrl + E

Record and reload
Ctrl + Shift + E

alphaTab.Environment.printEnvironmentInfo()
Logger.ts:24 [AlphaTab][VersionInfo] alphaTab 1.9.0
Logger.ts:24 [AlphaTab][VersionInfo] commit: e45a2153e94f68028e0ea0e66af7daf6b7715d78
Logger.ts:24 [AlphaTab][VersionInfo] build date: 2026-08-01T18:23:18.402Z
Logger.ts:24 [AlphaTab][VersionInfo] High DPI: 2.1500000953674316
Logger.ts:24 [AlphaTab][VersionInfo] Platform: BrowserModule
Logger.ts:24 [AlphaTab][VersionInfo] WebPack: false
Logger.ts:24 [AlphaTab][VersionInfo] Vite: false
Logger.ts:24 [AlphaTab][VersionInfo] Browser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36
Logger.ts:24 [AlphaTab][VersionInfo] Window Size: 1778x952
Logger.ts:24 [AlphaTab][VersionInfo] Screen Size: 1920x1080

Platform

Web

Anything else?

#2822 is slightly related regarding the pitched vs. stringed note handling.

I think we need some bigger overhaul of the stringed vs. pitched notes handling. how we handle stringed and pitched notes on the model, display, and playback have to be aligned better.

The GP approach is interesting: simply infer string+fret for notes if missing. That enables some additional use-cases. Like we could allow alphaTex like C4 3.3 where we mix stringed and pitched notes.

The alternative is to simply infer string+fret during GP export to satisfy guitar pro and keep the alphaTab model contract that one staff must contain only one kind of notes (pitched, stringed or percussion).

In this fix/refactor we should make things explicit and validate appropriately to avoid errors in future.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Fields

Priority

High

Effort

High

Area

Core

Platform

All / Multiple

Work State

Accepted

Projects

Status
Done

Relationships

None yet

Development

No branches or pull requests

Issue actions