Skip to content

Releases: agourlay/ruxguitar

0.13.0

Choose a tag to compare

@agourlay agourlay released this 23 Aug 11:13
66f6626

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 (cpal 0.18.2, log 0.4.34).

0.12.0

Choose a tag to compare

@agourlay agourlay released this 14 Aug 20:05
7566028

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 M key 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.06 files, 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

Choose a tag to compare

@agourlay agourlay released this 18 Jul 11:06
23e32fa

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

Choose a tag to compare

@agourlay agourlay released this 13 Jun 05:19
9cc1e81

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

Choose a tag to compare

@agourlay agourlay released this 07 Jun 06:46
08fd108
  • Guitar Pro 3 files (.gp3) support
  • Graceful handling of malformed files
  • Upgraded the cpal audio backend to 0.18.0.

0.8.1

Choose a tag to compare

@agourlay agourlay released this 24 Apr 20:28
8dd8c0b

New features

  • Drag & drop — drop .gp3/.gp4/.gp5 files 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 measure
    • S — toggle solo
    • (existing: Space play/pause, Ctrl+Up/Down tempo)

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

Choose a tag to compare

@agourlay agourlay released this 30 Mar 15:56
9aa1256

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.

0.7.0

Choose a tag to compare

@agourlay agourlay released this 27 Feb 21:49
f278b2c

Major dependency upgrades resulting in a cleaner and smoother UI.

  • Support for Win 7 & Win 8 is discontinued due to incompatible MSRV 38e079f
  • Upgrade to iced 0.14.0 b17b204
  • Upgrade to cpal 0.17
  • Upgrade to rfd 0.17
  • Migrate to Rust 2024 edition
  • LTO build for minor performance improvements

0.6.3

Choose a tag to compare

@agourlay agourlay released this 18 Jan 14:28
5df8988

Fix numerous GP format parsing bugs which were causing:

  • GP4 crashes
  • badly formatted strings for measure markers
  • incorrect octave field

0.6.2

Choose a tag to compare

@agourlay agourlay released this 30 Nov 14:47
34f0c84
  • Fix note start for chords with effects