Is there an existing issue for this?
Current Behavior
On Android, this attached MusicXML file does not render fully, and cursor functionality is not usable because rendering fails.
The same file renders correctly in the Web target (tested on https://alphatab.net/).
score.xml
Expected Behavior
The same MusicXML should render fully on Android, and cursor behavior should work normally (including playback/user interaction scenarios), just like in Web target.
Steps To Reproduce
- Create a simple Android app screen that hosts alphaTab
- Enable user interaction and cursor in settings, for example:
val settings = alphaTab.Settings().apply {
player.playerMode = PlayerMode.EnabledAutomatic
player.enableCursor = true
player.enableAnimatedBeatCursor = true
player.enableUserInteraction = true
player.scrollMode = ScrollMode.OffScreen
display.scale = 0.8
}
- Load the attached MusicXML file (score.xml).
- Observe that rendering is incomplete/fails and cursor behavior is broken on Android.
Link to jsFiddle, CodePen, Project
No response
Version and Environment
1. alphaTab version: 1.8.1
2. Platform: Android (Kotlin)
3. Devices: Android 14/16 tablet and phone
Platform
Android (Native)
Anything else?
I got stack traces from AlphaTabApiBase.onError on Android for the same file:
0 = {StackTraceElement@34817} "alphaTab.rendering.utils.AccidentalHelper.getNoteSteps(AccidentalHelper.kt:240)"
1 = {StackTraceElement@34818} "alphaTab.rendering.ScoreBarRenderer.getNoteSteps(ScoreBarRenderer.kt:383)"
2 = {StackTraceElement@34819} "alphaTab.rendering.glyphs.ScoreBeatGlyph._createNoteGlyphs(ScoreBeatGlyph.kt:307)"
3 = {StackTraceElement@34820} "alphaTab.rendering.glyphs.ScoreBeatGlyph._createGlyphs(ScoreBeatGlyph.kt:251)"
4 = {StackTraceElement@34821} "alphaTab.rendering.glyphs.ScoreBeatGlyph.doLayout(ScoreBeatGlyph.kt:218)"
5 = {StackTraceElement@34822} "alphaTab.rendering.glyphs.BeatContainerGlyph.doLayout(BeatContainerGlyph.kt:216)"
6 = {StackTraceElement@34823} "alphaTab.rendering.ScoreBeatContainerGlyph.doLayout(ScoreBeatContainerGlyph.kt:99)"
7 = {StackTraceElement@34824} "alphaTab.rendering.glyphs.MultiVoiceContainerGlyph.doLayout(MultiVoiceContainerGlyph.kt:335)"
8 = {StackTraceElement@34825} "alphaTab.rendering.BarRendererBase.createBeatGlyphs(BarRendererBase.kt:641)"
9 = {StackTraceElement@34826} "alphaTab.rendering.BarRendererBase.doLayout(BarRendererBase.kt:444)"
10 = {StackTraceElement@34827} "alphaTab.rendering.LineBarRenderer.doLayout(LineBarRenderer.kt:111)"
11 = {StackTraceElement@34828} "alphaTab.rendering.staves.RenderStaff.addBar(RenderStaff.kt:244)"
12 = {StackTraceElement@34829} "alphaTab.rendering.staves.StaffSystem.addBars(StaffSystem.kt:232)"
13 = {StackTraceElement@34830} "alphaTab.rendering.layout.VerticalLayoutBase._createStaffSystem(VerticalLayoutBase.kt:426)"
14 = {StackTraceElement@34831} "alphaTab.rendering.layout.VerticalLayoutBase._layoutAndRenderScore(VerticalLayoutBase.kt:315)"
15 = {StackTraceElement@34832} "alphaTab.rendering.layout.VerticalLayoutBase.doLayoutAndRender(VerticalLayoutBase.kt:75)"
16 = {StackTraceElement@34833} "alphaTab.rendering.layout.ScoreLayout.layoutAndRender(ScoreLayout.kt:143)"
17 = {StackTraceElement@34834} "alphaTab.rendering.ScoreRenderer._layoutAndRender(ScoreRenderer.kt:279)"
18 = {StackTraceElement@34835} "alphaTab.rendering.ScoreRenderer.render(ScoreRenderer.kt:244)"
19 = {StackTraceElement@34836} "alphaTab.rendering.ScoreRenderer.renderScore(ScoreRenderer.kt:153)"
20 = {StackTraceElement@34837} "alphaTab.rendering.ScoreRendererWrapper.renderScore(ScoreRendererWrapper.kt:159)"
21 = {StackTraceElement@34838} "alphaTab.AlphaTabApiBase.render(AlphaTabApiBase.kt:556)"
22 = {StackTraceElement@34839} "alphaTab.AlphaTabApiBase._internalRenderTracks(AlphaTabApiBase.kt:429)"
23 = {StackTraceElement@34840} "alphaTab.AlphaTabApiBase.renderScore(AlphaTabApiBase.kt:386)"
24 = {StackTraceElement@34841} "alphaTab.AlphaTabApiBase.renderScore$default(AlphaTabApiBase.kt:348)"
25 = {StackTraceElement@34842} "alphaTab.AlphaTabView.renderTracks(AlphaTabView.kt:115)"
26 = {StackTraceElement@34843} "alphaTab.AlphaTabView.setTracks(AlphaTabView.kt:29)"
0 = {StackTraceElement@34703} "alphaTab.model.MusicFontSymbol$Companion.fromValue(MusicFontSymbol.kt:621)"
1 = {StackTraceElement@34704} "alphaTab.rendering.LineBarRenderer._paintTupletHelper(LineBarRenderer.kt:371)"
2 = {StackTraceElement@34705} "alphaTab.rendering.LineBarRenderer.paintTuplets(LineBarRenderer.kt:224)"
3 = {StackTraceElement@34706} "alphaTab.rendering.LineBarRenderer.paintTuplets$default(LineBarRenderer.kt:216)"
4 = {StackTraceElement@34707} "alphaTab.rendering.LineBarRenderer.paintContent(LineBarRenderer.kt:137)"
5 = {StackTraceElement@34708} "alphaTab.rendering.BarRendererBase.paint(BarRendererBase.kt:560)"
6 = {StackTraceElement@34709} "alphaTab.rendering.staves.RenderStaff.paint(RenderStaff.kt:368)"
7 = {StackTraceElement@34710} "alphaTab.rendering.staves.StaffSystem.paintPartial(StaffSystem.kt:579)"
8 = {StackTraceElement@34711} "alphaTab.rendering.staves.StaffSystem.paint(StaffSystem.kt:533)"
9 = {StackTraceElement@34712} "alphaTab.rendering.layout.VerticalLayoutBase._paintSystem$lambda$0(VerticalLayoutBase.kt:344)"
10 = {StackTraceElement@34713} "alphaTab.rendering.layout.VerticalLayoutBase$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)"
11 = {StackTraceElement@34714} "alphaTab.rendering.layout.ScoreLayout._internalRenderLazyPartial(ScoreLayout.kt:179)"
12 = {StackTraceElement@34715} "alphaTab.rendering.layout.ScoreLayout.renderLazyPartial(ScoreLayout.kt:190)"
13 = {StackTraceElement@34716} "alphaTab.rendering.ScoreRenderer.renderResult(ScoreRenderer.kt:195)"
14 = {StackTraceElement@34717} "alphaTab.rendering.ScoreRendererWrapper.renderResult(ScoreRendererWrapper.kt:166)"
15 = {StackTraceElement@34718} "alphaTab.platform.android.AndroidUiFacade.initialize$lambda$0(AndroidUiFacade.kt:123)"
16 = {StackTraceElement@34719} "alphaTab.platform.android.AndroidUiFacade$$ExternalSyntheticLambda6.invoke(D8$$SyntheticClass:0)"
17 = {StackTraceElement@34720} "alphaTab.platform.android.AlphaTabRenderSurface.onLayout(AlphaTabRenderSurface.kt:159)"
Is there an existing issue for this?
Current Behavior
On Android, this attached MusicXML file does not render fully, and cursor functionality is not usable because rendering fails.
The same file renders correctly in the Web target (tested on https://alphatab.net/).
score.xml
Expected Behavior
The same MusicXML should render fully on Android, and cursor behavior should work normally (including playback/user interaction scenarios), just like in Web target.
Steps To Reproduce
Link to jsFiddle, CodePen, Project
No response
Version and Environment
Platform
Android (Native)
Anything else?
I got stack traces from
AlphaTabApiBase.onErroron Android for the same file:NullPointerExceptionClassCastException