Commit Graph
90 Commits
Author SHA1 Message Date
[email protected] 6a331f7a57 refactor: put all info about different unit types into UnitTypes map 2026-03-15 10:29:24 +02:00
[email protected] b349474c4d feat: MIDI velocity, keyboard splits, and fixing instrument channel
Closes #124
Closes #215
Closes #221
2026-02-14 15:22:30 +02:00
[email protected] 77b27257fe fix(tracker): Player routes MIDImsgs so always handled in same block 2026-02-03 21:20:01 +02:00
[email protected] f2ef57a845 feat(tracker): ability to bind MIDI controllers to parameters
Closes #152
2026-02-01 12:07:00 +02:00
[email protected] 287bd036a6 feat(tracker): multithreading is enabled with a separate bool toggle 2026-01-31 20:50:00 +02:00
[email protected] 4bb5df9c87 feat(tracker): enum-style values and menus to choose one option 2026-01-31 13:57:09 +02:00
[email protected] 86ca3fb300 refactor(tracker): group Model methods, with each group in one source file 2026-01-27 22:16:14 +02:00
[email protected] 173648fbdb refactor(tracker): use strings to identify MIDI ports 2026-01-23 23:48:16 +02:00
[email protected] 1693d7ed5e refactor(tracker): make Model methods return List, avoiding .List() 2026-01-23 22:42:25 +02:00
[email protected] 3a7010f897 feat(tracker): spectrum analyzer
Closes #67
2026-01-18 17:09:57 +02:00
[email protected] 9b9dc3548f feat: add multithreaded rendering to the tracker side
The compiled player does not support multithreading, but with this,
users can already start composing songs with slightly less powerful
machines, even when targeting high-end machines.

Related to #199
2025-10-31 19:40:02 +02:00
[email protected] 2336a135c6 feat(tracker): add a preset explorer with search and filters
Closes #91
2025-10-19 12:04:41 +03:00
[email protected] 7459437822 feat(tracker): don't save instrument name in instrument files
The filename is used as the instrument name when it is loaded.
2025-10-05 14:06:00 +03:00
[email protected] 3163f46447 feat!: both native & Go synths are included in the same executables
Closes #200
2025-07-10 17:46:00 +03:00
[email protected] 666af9433e feat!: display the parameters as knobs in a grid
Also removed the negbandpass & neghighpass parameters
and replaced them with bandpass & highpass set to -1, to
fit the switches better to the GUI.

Closes #51, closes #173
2025-07-08 19:47:32 +03:00
[email protected] fb0fa4af92 feat: embed license in executable and add menu item to show it 2025-06-23 18:45:13 +03:00
[email protected] 602b3b05cc feat(tracker): compile with midi support only when CGO is available
Also add the midi context to the VSTI, so VSTI can use MIDI if they
wish so.
2025-06-20 19:38:06 +03:00
[email protected] 4f2c73d0db refactor(tracker): Player sends PlayerStatus to the Model 2025-06-19 11:37:11 +03:00
[email protected] 340620ed49 feat(tracker): show CPU load percentage in the song panel 2025-06-17 17:59:54 +03:00
[email protected] 283fbc1171 feat(tracker): rework the MIDI input and note event handling 2025-06-11 19:14:11 +03:00
[email protected] 9f89c37956 refactor(tracker): rename trySend to TrySend to make it public 2025-04-30 22:00:34 +03:00
[email protected] 5fd78d8362 feat(tracker): buttons for loudness weighting and peak oversampling
Closes #186
2025-04-27 21:30:10 +03:00
qm210andVeikko Sariola b255a68ebc fix: changes after review (see PR #176) 2024-11-10 00:02:13 +02:00
qm210andVeikko Sariola d517576a65 feat: introduce "cache" for derived model information 2024-11-10 00:02:13 +02:00
qm210andVeikko Sariola 55c062a390 feat: highlight sliders that are controlled by a send, and add tooltip (over value) 2024-11-10 00:02:13 +02:00
[email protected] 04deac5722 fix(tracker): use non-blocking sends from Model to Player
This ensures that the GUI can never hang, even if the Player has
completely crashed.
2024-11-03 00:57:05 +02:00
[email protected] 8074fd71d3 refactor(tracker): split NewModelPlayer into NewModel, NewPlayer 2024-11-02 23:58:38 +02:00
[email protected] 9d59cfb3b6 fix(tracker): unmarshal always into fresh, empty structs
A somewhat gotcha: when unmarshaling into &m.d with json.Unmarshal
or yaml.Unmarshal, maps were "merged" with the existing maps, which
is how we ended up with send units with color parameters, among
other things. This fix always unmarshals into fresh var data
modelData and only then sets m.d = data if the unmarshaling was
succesful.
2024-11-02 22:01:12 +02:00
[email protected] ec222bd67d feat(tracker): oscilloscope and LUFS / true peak detection
In addition to the oscilloscope and loudness/peak detections, this
commit refactors all the channels between components (i.e.
ModelMessages and PlayerMessages) etc. into a new class Broker. This
was done because now we have one more goroutine running: a Detector,
where the loudness / true peak detection is done in another thread.
The different threads/components are only aware of the Broker and
communicate through it. Currently, it's just a collection of
channels, so it's many-to-one communication, but in the future,
we could change Broker to have many-to-one-to-many communication.

Related to #61
2024-11-02 15:08:09 +02:00
qm210andVeikko Sariola 8dfadacafe feat: midi note input for the tracker 2024-10-22 07:56:36 +03:00
[email protected] 216cde2365 feat: keeping instruments and tracks linked & splitting them
Also includes a refactoring of the List: all methods that accepted
or returned a [from, to] range now return a Range, which is
non-inclusive i.e. [start,end).

Also the assignUnitIds was slightly refactored & a new function
called assignUnitIdsForPatch was added, to assign all unit IDs for
an patch at once.

Closes #157, #163.
2024-10-20 12:23:25 +03:00
[email protected] 1c42a51cc6 refactor(tracker): use built-in min & max instead of intMin & intMax 2024-10-18 23:43:27 +03:00
[email protected] b494a69a76 refactor(tracker): change Iterate() func(yield):s to Iterate(yield) 2024-10-15 09:09:17 +03:00
[email protected] 2809526de6 refactor(tracker): ask for midiContext in the model constructor 2024-10-14 17:03:17 +03:00
[email protected] f427eca1f4 fix(sointu-vsti): VST crashed due to Model.MIDI being nil 2024-10-14 16:57:21 +03:00
[email protected] c07d8000c6 refactor(tracker): harmonize naming and use iterators in MIDI
using iterators requires go 1.23
2024-10-14 15:00:55 +03:00
Alexander Krausand[email protected] 577265b250 feat(tracker): add support for a MIDI controller to the standalone tracker
Closes #132.
2024-10-14 14:11:50 +03:00
[email protected] 10f021a497 feat: toggle button to duplicate non-unique patterns when changed
Closes #77.
2024-10-13 14:47:22 +03:00
[email protected] 4c096a3fac refactor(tracker): rename Notetracking to Follow
Notetracking was used in two completely different meanings: the
pitch/bpm notetracking in the delay unit and the cursor follow in
when playing. The word for the second meaning was changed to Follow,
to avoid confusion.
2024-10-12 21:35:45 +03:00
[email protected] 5c51932f60 fix(tracker): autofix malformed songs with useless params 2024-10-11 20:34:04 +03:00
[email protected] 91b7850bf7 feat(tracker): change keyboard shortcuts to mimic old trackers 2024-10-11 15:31:54 +03:00
[email protected] 877556b428 feat(tracker): do not wrap around when playing or moving cursor
The wrapping was usually unwanted behaviour. The user can use the
looping (Ctrl-L) to loop the song forever if this is really desired.
2024-09-07 18:52:52 +03:00
[email protected] 74972b5ff4 fix(tracker): ID collisions in ClearUnit and Instruments.unmarshal 2024-09-07 15:25:06 +03:00
[email protected] 9da6c2216c test(tracker): fuzz testing of ID collisions and file read/writes 2024-09-07 15:16:53 +03:00
[email protected] d46605c638 fix: assign new IDs to loaded instruments
Fixes #146.
2024-09-06 20:19:27 +03:00
[email protected] 7f20bd8baf fix(tracker): remember to tell player when m.d.Loop is updated 2024-03-01 23:54:19 +02:00
[email protected] dc12f58082 feat(tracker): add ability to loop part of song during playback
Closes #128.
2024-02-20 19:10:15 +02:00
[email protected] 2b3f6d8200 fix(tracker): unit searching to work more reliably 2024-02-17 20:54:46 +02:00
[email protected] d92426a100 feat!: rewrote the GUI and model for better testability
The Model was getting unmaintanable mess. This is an attempt to refactor/rewrite the Model so that data of certain type is exposed in standardized way, offering certain standard manipulations for that data type, and on the GUI side, certain standard widgets to tied to that data.

This rewrite closes #72, #106 and #120.
2024-02-17 18:16:06 +02:00
[email protected] 6eb025d7ba refactor(tracker): remove unused variable RECOVERY_FILE 2023-10-20 18:41:21 +03:00