Releases: agourlay/ruxguitar
Release list
0.13.0
A rendering release: the tablature now carries the rhythm. Until now the tab told you where to put your fingers; it now also tells you
when — and draws the chords, lyrics and key information the files always contained.
Rhythm under the tab
The fret numbers now come with the timing written the way sheet music writes it, following TuxGuitar's
reference layout:
- Stems below the staff for every sounding beat, half notes distinguished
from quarters and shorter. - Beams joining runs of eighth notes and shorter, grouped by the beat
division of the time signature — compound meters like 6/8 beam by the
dotted quarter. Extra beam lines stack for sixteenths and beyond. - Flags on short notes that stand alone, pointing forward.
- Rests drawn as proper glyphs — whole and half blocks on the staff,
the quarter squiggle, hooked flags for eighths and shorter. - Duration dots next to the stem, kept clear of the beams.
- Proportional spacing — beats now take horizontal room according to how
long they last: a whole note gets space to ring, a run of sixteenths sits
tight. Empty beats take no room at all, so measures no longer stretch to
accommodate silence.
More of the file on screen
Content that was parsed all along but never drawn:
- Chord diagrams — fret grids with fingering, barres and base fret above
the measures, with the room they need reserved in the layout. - Lyrics — sung words follow the beats that sound, syllable by syllable,
under the track they are attached to, each given the width to be read
without overwriting its neighbour. - Chord names and beat text reserve horizontal space, so labels no longer
collide with the next beat's. - Key signature shown at the start and wherever it changes — staying
silent about the default C major / A minor. - Triplet feel marked where the file swings its eighths or sixteenths.
Housekeeping
- The lyrics tests run against tabs committed to the repository, so CI checks
what it can actually see. - Dependency updates (
cpal0.18.2,log0.4.34).
0.12.0
A large correctness and rendering pass, guided throughout by comparing against TuxGuitar's reference implementation.
Tablatures should now sound closer to how they were written, show more of what they carry, and stay readable while playing.
New
- Metronome — a click on every beat, toggled from the toolbar.
- Count-in — click through one measure at the current tempo before playback
starts, so you can pick the tab up with an instrument in hand. - Per-track mute — mute the selected track with the
Mkey or the toolbar,
alongside the existing solo. - Page-by-page scrolling — the view now holds still while the page you are
reading plays, then turns as playback reaches its last line, putting that line
at the top with a fresh page below it. Previously it jumped a line at a time. - Click a beat to seek — clicking in a measure seeks to the beat you clicked
rather than to the start of the measure. --theme light|dark— force either theme. Without it, macOS and Windows
follow the desktop preference; Linux keeps the dark theme, because the
windowing layer reports no preference there.
Playback
Fixes you can hear:
- Tied notes in the same measure resolved to the wrong fret, giving wrong
pitches on very common material. - Sixteenth grace notes were a quarter too short, and shifted the following
note when played on the beat. - Tie and let-ring sustain now follows the expanded playback order, so notes
held across a repeat boundary carry into the measure actually played next. - Slides and hammer-ons now find their target note across barlines instead
of only in the adjacent beat: slide ramps that were dropped now sound, and
hammer-on and pull-off dynamics carry over measure boundaries. - Harmonics carry their pitch data: GP4 artificial variants sound at their
proper interval instead of always an octave, GPX artificial harmonics honour
the written fret (AH7 no longer sounds like AH12), and an unmatched tapped
harmonic falls back to the octave rather than the plain note. - GPX drum sounds could play the wrong instrument on kits with overlapping
element mappings. - Empty beats in GP3 and GP4 files no longer freeze the time cursor, which
shifted every following beat in the measure. - Timing: the sequencer now advances by the audio actually rendered rather
than a wall clock, keeping event scheduling locked to the output. - Mute and solo now filter channel messages as well as notes, so a silenced
track can no longer change the sound of another sharing its channel. - Smaller: tremolo-bar rounding on negative dips, phaser and tremolo channel
controllers, and MIDI keys clamped to a valid range.
Tablature
Newly drawn, having been parsed but invisible:
- Tuplet brackets, with the group size, over each run of tuplet beats.
- Grace notes, staccato dots, tremolo-picking slashes, and
slap / pop markings — the last were previously dropped silently. - Pick-stroke direction, which was not even read from the file before.
Redrawn as real geometry rather than fixed-size symbols:
- Slides slope towards the fret they land on, so sliding in from above no
longer looks the same as from below. - Hammer-ons and pull-offs arc across to the note they reach.
- Tied notes now hang an arc back to the note they continue, instead of
printing a symbol connected to nothing.
Layout:
- Rows above the staff are allocated only when used. They previously sat at
fixed heights and overprinted each other — alternative-ending brackets over
tempo and marker labels, stacked effect annotations climbing into the chord
row, bend amplitudes landing in the beat text. Measures with nothing to show
are now visibly tighter. - Glyphs around the staff no longer collide: grace notes reserve their space,
and the focus box encloses the measure number, bend labels and tremolo
slashes instead of cutting through them. - Theme-aware colours. The tablature takes its colours from the active
theme, making the light theme usable.
File formats
- GP4 slide types were decoded with GP5's bitmask, mapping slide variants to
the wrong type. - Key signatures now carry across measures instead of defaulting to C.
- GPX chord diagrams decoded with the wrong array size, string order and
base fret. FICHIER GUITAR PRO L4.06files, written by a common GP4 clone, now load.- GPX drums are placed by kit position — kicks at the bottom of the staff,
snares in the middle, cymbals at the top — rather than on the first free
string.
Robustness
Malformed files no longer crash the application. Unknown effect values fall back
or drop the single effect, structural corruption yields a parse error, and a
crafted GPIF document can no longer overflow the stack through deeply nested
XML. A corruption sweep over each supported format (truncations and byte flips)
guards this in the test suite.
Also
Playback now stops at the end of the song instead of remaining marked as
playing, and a warning is no longer logged repeatedly during playback.
0.11.0
New features
- Bends are now drawn properly in the tablature (ported from TuxGuitar):
- curved arrows with the bend amount in tones (¼, ½, 1, 1½, …)
- release arrows, pre-bend markers, and dashed lines for held bends
- beats widen to fit bend-release-bend chains
Playback fixes
- Bend, tremolo bar, slide, and vibrato are now mutually exclusive per note.
- Fixes bent notes with vibrato seesawing between bent and unbent pitch.
- GP4/GP5 tremolo bar dives were four times too deep.
- Slides now interpolate smoothly instead of stepping whole semitones.
- Tied notes in a second voice no longer get wrong durations.
- Let-ring now extends through the whole chain of let-ring notes.
- Trills now start on the real fretted note (the order was inverted).
- The pitch wheel is recentered on stop and seek.
- Interrupting playback mid-bend no longer leaves later notes sharp.
- Pitch bend values are clamped to the valid MIDI range.
- Expression is initialized via the correct coarse controller (CC 11).
Robustness
- Bends and tremolo bars with empty point lists are ignored.
- Bend math hardened against integer overflow on corrupt files.
Maintenance
- Dependencies bumped.
0.10.0
New features
- Guitar Pro 6 & 7 support — .gpx (GP6) and .gp (GP7) files now open and play, via a new parser ported from TuxGuitar.
Playback fixes
- Repeat sections & alternative endings — reworked to follow TuxGuitar's repeat-controller semantics. Volta brackets now latch correctly, so songs no longer replay intro measures mid-song, repeat bracket-close measures, or skip later endings.
- Tempo drift — fractional MIDI ticks now accumulate across audio callbacks instead of being truncated each time, so playback no longer runs progressively slow over a long song.
- Strummed chords — a stroke offset could zero a note's duration, producing hanging or silent notes; the note now keeps its full duration as in TuxGuitar.
- Beat highlight — fixed an off-by-one that highlighted the wrong beat when playback crossed into a new measure.
- Seeking & clock robustness — clicking a measure that the playback order never reaches no longer restarts the song from the beginning, and a system suspend or stalled audio stream no longer teleports playback far ahead on resume.
Robustness & security
- Hardened .gpx decompression against malformed and malicious input, with guards against decompression bombs and infinite loops.
- Lenient parsing of malformed files — truncated or corrupt files now fail gracefully or recover instead of panicking.
- Assorted audio and UI robustness fixes.
Audio
- Non-stereo output devices — mono devices now get a proper downmix and multichannel devices are handled correctly; unrendered buffer tails are silenced instead of replaying stale audio.
Maintenance
- Parser reorganized into gp345 and gp67 modules.
- cpal bumped to 0.18.1.
- Test fixtures excluded from the crates.io package (smaller published crate).
0.9.0
0.8.1
New features
- Drag & drop — drop
.gp3/.gp4/.gp5files directly onto the window to open them. - Volume slider — master volume control added to the top bar.
- Fullscreen focus mode — toggle fullscreen to hide the UI chrome and concentrate on the tablature.
- Bottom status bar — displays current tab info (title, artist, tempo, etc.) while you read.
- Measure progress indicator — visual progress through the current measure during playback.
- Beat text rendering — lyrics/annotations attached to beats are now drawn on the tab.
- Tuning info in track selector — each track shows its tuning so you can spot capo/drop tunings at a glance.
- New keyboard shortcuts:
Left/Right— previous/next measureS— toggle solo- (existing:
Spaceplay/pause,Ctrl+Up/Downtempo)
Improvements
- Lock-free audio callback — MIDI player parameters moved to atomics; the audio callback no longer takes locks, reducing the chance of glitches under contention.
- Binary-search measure lookup — finding the current measure from a tick is now
O(log n)instead of linear, lowering per-frame cost on large scores.
Maintenance
- Dependencies bumped.
- Added funding metadata.
0.8.0
New features
- Repeat playback — repeat sections with alternative endings are now played back correctly.
- Beat stroke effect — strummed chords now play with staggered note timing matching the stroke direction and speed.
- Triplet feel / swing — songs with eighth or sixteenth triplet feel now play with swing timing.
- Alternative ending brackets — volta brackets with ending numbers (1., 2., etc.) are now drawn above measures with alternative endings.
- Measures stretch to fill screen width — tablature measures now extend to fill each row, eliminating dead space on the right side.
Improvements
- Scroll tracking — during playback, the previous line stays visible above the current one for better visual continuity.
- Audio error handling — soundfont loading and synthesizer errors now show a user-facing error dialog instead of crashing.
- Keyboard guards — play/pause and tempo shortcuts are ignored while a file is loading.
- Corrupt config recovery — invalid config.json is reset to defaults instead of preventing startup.
- Text shaping — switched to Shaping::Auto for better performance on ASCII-heavy tablature text.
Code quality
- Migrated from iced_aw::Wrap to iced 0.14's native Row::wrap(), removing the iced_aw dependency.
- Removed iced debug feature from release builds.