Releases: CoderLine/alphaTab
v1.6.3
What's Changed
- fix(webpack): Prevent worker chunks using global library settings by @Danielku15 in #2301
- build: bump version to 1.6.3 by @Danielku15 in #2302
Full Changelog: v1.6.2...v1.6.3
v1.6.2
What's Changed
- fix: enablePlayer backwards compatibility by @Danielku15 in #2285
Full Changelog: v1.6.1...v1.6.2
v1.6.1
What's Changed
- Release 1.6.1 by @Danielku15 in #2222
- fix: Update alphaSkia to 3.4.135 by @Danielku15 in #2221
Full Changelog: v1.6.0...v1.6.1
v1.6.0
See https://alphatab.net/docs/releases/release1_6 for a detailed overview and description of the new features in this release.
What's Changed
- fix: Ensure synth stops voices when end is reached by @Danielku15 in #2080
- feat: Add base implementation for Guitar Pro 8 Audio Track (backing track & external media) by @Danielku15 in #2079
- feat: Add basic implementation for external media backing track by @Danielku15 in #2082
- fix: Fix queue and list handling for kotlin by @Danielku15 in #2085
- feat(player): Cursor fine-tuning by @Danielku15 in #2096
- Update System.Drawing.Common to 9.0.5 by @dependabot in #2105
- fix(musicxml): Allow empty direction-type by @Danielku15 in #2111
- fix: Ensure dynamic changes of settings are respected by @Danielku15 in #2098
- feat: Add option for custom smufl font sources by @Danielku15 in #2114
- feat: Public API improvements for external cursor api by @Danielku15 in #2116
- fix: External Cursor API related problems by @Danielku15 in #2117
- feat: Public API for External Media Control by @Danielku15 in #2125
- refactor: Eliminate ModifiedTempo by @Danielku15 in #2130
- feat: Sync Points for alphaTex by @Danielku15 in #2131
- fix: Unwrap Vue Proxies when possible by @Danielku15 in #2132
- test: Add test suite for backing track and external media control by @Danielku15 in #2150
- fix: Ensure we detect Browser in Electron/Obsidian by @Danielku15 in #2152
- feat: Sample Generation / Audio Export API by @Danielku15 in #2153
- feat: respect sync points on audio export. by @Danielku15 in #2157
- fix: Wrong modified tempo if file has no sync points by @Danielku15 in #2159
- feat: Add option to create fresh sync points by @Danielku15 in #2161
- Release 1.6.0 by @Danielku15 in #2162
Full Changelog: v1.5.0...v1.6.0
v1.5.0
See https://next.alphatab.net/docs/releases/release1_5 for a detailed overview and description of the new features in this release.
What's Changed
- feat(player): Allow changing of output device by @Danielku15 in #1924
- refactor: Migrate to vite as bundler by @Danielku15 in #1931
- feat(rendering) Multi-Bar Rests by @Danielku15 in #1934
- feat: Allow custom coloring of individual notation elements by @Danielku15 in #1936
- Caching Kotlin things with gradle/actions/setup-gradle by @Goooler in #1946
- refactor: Migrate code docs into TypeScript and ensure exports by @Danielku15 in #1960
- refactor: Add childElements iterator for XML parsing by @Danielku15 in #1972
- feat(musicxml): Reimplement base parser by @Danielku15 in #1977
- feat: Score Info - Formatting templates by @Danielku15 in #2002
- feat(musicxml): Respect supported elements by @Danielku15 in #1994
- feat(musicxml): Percussion support by @Danielku15 in #2009
- chore: Replace Prettier with Biome by @Danielku15 in #2011
- chore: Easier way to provide exact version and environment info. by @Danielku15 in #2015
- fix(android): Incorrect sample decoding and missing assets by @Danielku15 in #2016
- test(musicxml): Activate MusicXML Test Suite by @Danielku15 in #2012
- fix: Simile Mark cursor and highlighting by @Danielku15 in #2025
- chore: Activate linter by @Danielku15 in #2026
- build: Using statement and import path rewriting by @Danielku15 in #2029
- feat: Add all dynamic values from MusicXML by @Danielku15 in #2030
- feat: Bar Line Customization by @Danielku15 in #2031
- refactor: Avoid barrel imports within project by @Danielku15 in #2033
- feat: Different key signatures across staves by @Danielku15 in #2034
- feat(musicxml): Improve beam and bar handling by @Danielku15 in #2035
- build: Publish NPM package with type commonjs by @Danielku15 in #2047
- chore: Integrate alphaSkia 3.x.135 by @Danielku15 in #2052
- fix: Wrong staff ID for numbered bar renderer by @Danielku15 in #2057
- fix(alphatex): Wrong instrument articulations for export by @Danielku15 in #2058
- fix(importer): Be more fault tolerant on input files by @Danielku15 in #2059
- chore: Release preparations by @Danielku15 in #2060
- Release 1.5.0 by @Danielku15 in #2061
New Contributors
Full Changelog: v1.4.4...v1.5.0
v1.4.3
What's Changed
- fix(android): Incorrect sample decoding and missing assets by @Danielku15 in #2017
Full Changelog: v1.4.1...v1.4.3
v1.4.1
v1.4.0
Release Notes
See https://next.alphatab.net/docs/releases/release1_4 for a detailed overview and description of the new features in this release.
What's Changed
- feat: Make track visibility information from files available in model by @Danielku15 in #1491
- feat: Support for compressed MusicXML files by @Danielku15 in #1492
- Support for import of musicxml bends by @ldupouey in #1462
- feat: Add Support for Percussion Tabs in alphaTex by @Danielku15 in #1493
- feat: Add Slash Notation by @Danielku15 in #1511
- feat: Optimize paddings to allow more compressed music sheets by @Danielku15 in #1524
- fix(webpack): Use webpack instance passed to plugin by @Danielku15 in #1539
- fix: Source Maps should not be shipped in NPM package by @Danielku15 in #1540
- feat: Generate strong types for JSON serialized settings by @Danielku15 in #1562
- feat: Generate exports file for JSON types and expose them in the types by @Danielku15 in #1578
- fix: Use ParentPath on file copy if available by @Danielku15 in #1579
- feat: add support for multiple tempo changes in bar by @Danielku15 in #1600
- fix: Ensure we stay within buffer boundaries and stop worklet by @Danielku15 in #1607
- fix: Ensure smooth synth ending by @Danielku15 in #1609
- fix: Ensure correct effect band sizing on bar reverts by @Danielku15 in #1621
- fix: Ensure correct effect band height by @Danielku15 in #1641
- feat: Add numbered notation (Jianpu) by @Danielku15 in #1628
- feat: add live transposition pitch changes by @Danielku15 in #1642
- feat: add free time by @Danielku15 in #1643
- fix: Wrong accidental rendering by @Danielku15 in #1644
- feat: Add new note effects (tuneto, string numbers) and rework fingering by @Danielku15 in #1645
- feat: add beat slash reading and rendering by @Danielku15 in #1646
- refactor: rework StaveProfile definitions by @Danielku15 in #1657
- feat: Explicit Accidentals in alphaTex by @Danielku15 in #1729
- feat: Implement new bracket/braces/system rendering by @Danielku15 in #1730
- feat: Add Sustain pedal reading and rendering by @Danielku15 in #1741
- feat: Add Dead Slap by @Danielku15 in #1742
- feat: add Golpe by @Danielku15 in #1743
- feat: Add all fading styles by @Danielku15 in #1744
- feat: add Wah Pedal by @Danielku15 in #1745
- feat: Add Beat Barré by @Danielku15 in #1746
- feat: Add note ornaments by @Danielku15 in #1747
- feat: Add Ragueado by @Danielku15 in #1748
- fix: Scrolling Issue with ScrollMode.OffScreen by @Danielku15 in #1771
- refactor: Handle scaled rendering at canvas and layout level by @Danielku15 in #1772
- feat: Add SoundFont3 support with dynamic sample decoding by @Danielku15 in #1807
- fix: No drum sounds by @Danielku15 in #1842
- fix: Bend tied vibrato bug by @Danielku15 in #1843
- fix: Wrong bend pitches on tied notes by @Danielku15 in #1844
- feat: Add Audio generation for ornaments by @Danielku15 in #1845
- feat: Add Rasgueado pattern audio generation by @Danielku15 in #1846
- feat: Implement Directions by @Danielku15 in #1852
- feat(alphatex): Add missing model features by @Danielku15 in #1853
- feat(gp3-5): Respect staff visibility by @Danielku15 in #1888
- feat(gp3-8): respect tuning visibility in GP files by @Danielku15 in #1889
- feat(gp3-8): espect chord diagram list on top visibility in GP files by @Danielku15 in #1890
- feat(gp3-5): Add Directions reading by @Danielku15 in #1891
- feat(gp3-8): Beaming Modes and Ottava by @Danielku15 in #1892
- feat(gp3-5): Add wah-wah reading by @Danielku15 in #1893
- test: Switch to freetype and update reference files by @Danielku15 in #1894
- feat: Configurable track name display by @Danielku15 in #1895
- feat: Add beat timer display by @Danielku15 in #1896
- feat(alphatex): Remember clefs by @Danielku15 in #1905
- feat: Add tempo label and adjust tempo marker rendering by @Danielku15 in #1906
- fix: Wrong transpositions by @Danielku15 in #1907
- fix: Broken beat legato rendering by @Danielku15 in #1908
- fix(alphatex): Ensure correct system layout scale by @Danielku15 in #1909
- fix: Various release testing problems by @Danielku15 in #1910
- fix: Spacing and alignment problems by @Danielku15 in #1915
- fix: Create blob worker for ESM to allow easier CDN usage. by @Danielku15 in #1918
- feat(bundler): Improve resolving of alphaTab by @Danielku15 in #1919
- feat: Change vibrato defaults to be closer to Guitar Pro by @Danielku15 in #1920
- fix(svg): Wrong style quoting with spaced fonts by @Danielku15 in #1921
- refactor: Switch to Noto Font Family by @Danielku15 in #1922
New Contributors
Full Changelog: v1.3.1...v1.4.0
v1.3.1
This is a bugfix release improving the integration with WebPack and Next.js
Bug Fixes 🕷️
fix(webpack): Use webpack instance passed to plugin by @Danielku15 in #1539
fix: Source Maps should not be shipped in NPM package by @Danielku15 #1540
Full Changelog: v1.3.0...v1.3.1
v1.3.0
Finally a new release of alphaTab. The highlight feature of this release is native Android support allowing you to use alphaTab directly in your Android Views applications as a Kotlin library.
A big "Thank You" to all people contributing to alphaTab through reporting bugs, bringing in feature ideas and contributing code changes to alphaTab!
Due to a merge mistake in the previous releases creating a reliably diff between the previous and this release was a bit cumbersome. I hope I didn't miss any features or changes worth mentioning in these release notes.
New Features 💡
Support for Native Android Apps
This is the highlight feature of this release. We added a "Kotlin for Android" target to our compilation pipeline and ship now a native Android (Views) control to be used in Android apps. the feature range is similar to what we support already in .net WPF with rendering, interactivity, player, playback cursors etc. all built-in.
We rely on your feedback to improve the platform support in terms of stability, features and performance.
- https://alphatab.net/docs/getting-started/installation-android
- https://alphatab.net/docs/tutorial-android/introduction
- https://github.com/CoderLine/alphaTabSamplesAndroid
Bundler and Frontend Framework Support
Add Full WebPack Support in #1386 by @Danielku15
Add Vite Plugin in in #1386 by @Danielku15
With this release we finally achieved compatibility with modern bundlers like WebPack and Vite used in frontend Frameworks like Angular, React and Vue.
For this we created bundler plugins which take care of the right configuration and bundling aspects so that all features like Web Workers and Audio Worklets work quasi out-of-the-box. Look at our guides and samples to learn about how to integrate alphaTab in your frontend app.
- https://alphatab.net/docs/getting-started/installation-webpack
- https://alphatab.net/docs/getting-started/installation-vite
- https://github.com/CoderLine/alphaTabSamplesWeb
System Layout Customization
Add Support for system layout customization. in #1197 by @Danielku15
With this new option you can tell alphaTab to use the layout information which is embedded in the data model and might be read from formats like Guitar Pro. This information might include information like how many bars are in a system (single row with multiple staves) and a relative scaling of these bars within the system. #
See https://alphatab.net/docs/reference/settings/display/systemslayoutmode for more details
Allow justification of last system
Add option to allow justification of last system in #1240 @Danielku15
With this new option you can choose that the last system is also justified to the page width. Normaly bars are only justified in a system when it is considered full and we have a line wrap. But this option allows you to also justify this last system which might still have space.
See https://next.alphatab.net/docs/reference/settings/display/justifylastsystem#description for more details
alphaSkia as render engine
Integrate alphaSkia in #1292 by @Danielku15
With alphaSkia we created our own cross platform drawing library to achieve a consistent renedring experience across all platforms of alphaTab. This engine wraps Skia, the popular 2D Graphics library developed by Google, used in many products like Google Chrome, Android and Mozilla Firefox.
This engine is available for:
- .net (where it replaces SkiaSharp)
- Java/Kotlin (where it replaces Skija)
- Node.js (where it replaces libraries like node-canvas).
alphaSkia currently has an alphaTab focus but depending on the interest it might evolve to a full HTML5 canvas alike library for many platforms.
Improvements 🚀
Reworked Midi Tick Lookup
Rework Tick Lookup mechanism for cursor placement and highlighting. in #1328 by @Danielku15
Additional cases for new tick lookup in #1334 by @Danielku15
fix: Start and end times have to be relative to the masterbar not absolute in #1393 by @Danielku15
A key improvement and change in this release is the reworked "Midi Tick Lookup". This component is responsible to translate efficiently a given midi tick position during playpack, into the bar and beat being played. This component is key part to place the cursors during playback and highlight any currently played elements.
With this improvement you should not experience any misplaced cursors, skipped items or not highlighted notes anymore.
alphaTex extensions
Special thanks to @jonaro00 who contributed various improvements around alphaTex adding improvements around error reporting and some extension around supported elements.
- Various code improvements. Small AlphaTexImporter bugfix. in #1043 by @jonaro00
- AlphaTex Error improvements. Line/col numbers. in #1059 by @jonaro00
- feat(alphaTex): allow specifying tempo as a float in a string in #1356 by @jonaro00
Improved Grace Note Positioning
We also had to fight again our old rival, the grace notes. With their special needs in positioning and time handling they are a regular cause of problems in the positioning of notes. We tackled again some positioning related problems around grace notes.
- Adjust grace positioning to utilize free space in #1094 by @Danielku15
- Handle empty bars and pre-beat grace notes on new lookup logic in #1347 by @Danielku15
MusicXML extensions
Our MusicXML support also got some improvements with new features or adjustments around existing features. Beside the display of chord diagrams there were some improvements on handling ties.
- Handle correctly the ChordCollection items which have no diagram element. in #1211 by @Danielku15
- Improve tie handling for mxml in #1219 by @Danielku15
- Adds support for chords in MusicXML importer in #1299 by @coluzziandrea
SMF1.0 compliant MIDI file export
Add SMF1.0 compliant MIDI file export in #1239 by @Danielku15
alphaTab internally uses a MIDI standard aligned structure to handle the playback of the song. To handle all playbacks correctly we also use some events and structures from Midi 2.0 (per note pitch bends). But unfortunately this caused incompatibility with Standard Midi File Format 1.0. The SMF2.0 file standard was still not ready after many years and there is no real support for these events in the market.
To restore compatibility with applications only supporting SMF 1.0 we added a dedicated export feature for SMF 1.0.
In future if needed, we will also add support for the new Midi 2.0 file formats.
Chord unification
With this improvement we detect now same chords based on their definition and ensure they are only displayed one in the chord diagrams. This should reduce the noise in the chord diagrams where duplicates can happen from the file format design.
Dynamic change of transposition pitches
Allow dynamic change of transposition pitches. in #1309 by @Danielku15
With this improvement transposition pitch changes are respected. Before this improvement the separately provided pitches were only applied once on score load. This prevented devs to develop features where a user would dynamically change the transposition to their preference. Now with this improvement pitches are handled in a more dynamic fashion when needed.
Others
- Analyze, Document and Fix PartConfiguration handling in #1241 by @Danielku15
- Fix: allow the import of gpx files that use displayScale as Float xml node in #1243 by @allandiego
Bug Fixes 🕷️
- Fix null/undefined lyrics which cause GP7 exporter to fail in #1026 by @Danielku15 (fixes #1025)
- Fix wrong reading of alternate endings in GP5 in #1028 by @Danielku15 (fixes #1023)
- Fix wrong repeats on alternate endings in #1054 by @Danielku15 (fixes #1046)
- Ensure we respect repeats on getting beat playback position in #1055 by @Danielku15 (fixes #1047)
- Fix slide rendering on end of staves in #1053 by @Danielku15 (fixes #1045)
- Ensure we do not signal the UI facade for empty partials in #1091 by @Danielku15 (fixes #1090)
- Prevent duplicate render requests of partials in #1148 by @Danielku15 (fixes #1147)
- Fix broken count-in on playback ranges in https://gi...