Skip to content

Android: some MusicXML files fail to fully render and cursor becomes unusable (works on Web) #2630

@AndreiGorelov

Description

@AndreiGorelov

Is there an existing issue for this?

  • I have searched the existing issues

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

  1. Create a simple Android app screen that hosts alphaTab
  2. 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
        }
  1. Load the attached MusicXML file (score.xml).
  2. 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:

  • NullPointerException
 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)"
  • ClassCastException
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)"

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions