All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Fix: Audio interfaces with spaces at the end can now be selected.
A gRPC server has been added to mtrack along with several utility subcommands that allow for control of the player from the command line. This should be useful for creating external player clients.
An OSC server has been added to mtrack. This will allow communication with mtrack over any OSC protocol (UDP only at the moment). This is handy for using clients like TouchOSC to control mtrack. This includes reporting, so that OSC clients can display information about currently playing songs, track durations, etc.
The keyboard controller has been fixed -- it wasn't trimming off the newlines at the end of keyboard input.
(Breaking Change) The play
subcommand has been renamed play-direct
so that the play
subcommand could be used to control the gRPC server.
(Breaking Change) mtrack no longer supports multiple song definitions in one file. This
is because mtrack has shed serde_yaml
, which has been deprecated, and now uses config-rs
to parse config files, and config-rs does not support YAML documents in one file.
Other than lessening the maintenance burden, one advantage to doing this is that mtrack
can now support multiple file types. As of the time of writing, this includes:
- JSON
- TOML
- YAML
- INI
- RON
- JSON5
Note that I still personally test with YAML, so I haven't had an opportunity to exercise all of the different file types.
Configurable playback delays have been added for audio, MIDI, and DMX playback.
DMX will now only use one OLA client instead of one per universe.
A fairly large refactor has been done to the config logic. The motivation is to keep (most) of the instantiation of the various pieces of business logic out of the config package while simultaneously trying to simplify the configuration of the player and its various components.
Finally, the nodi dependency was updated. This is of interested as it has a corrected timer, so mtrack has been updated to use it. Initial testing seems to indicate that it works well.
Repeatedly attempt to connect to OLA, which should make connecting to DMX on startup more reliable.
The DMX universe was inadvertently hard coded to OLA universe 1. This has been corrected.
The expiration mechanism for cancellation had an unintended side effect of preventing cancellation if one component of the song completed ahead of time. In other words, if a MIDI file finished playing but there is still audio to play, the song is no longer cancellable. Additionally, it would be possible, in some circumstances, for the completion of one aspect of a song to cancel others unexpectedly.
The "expiration" concept was introduced to allow cancellation while still allowing a song to finish normally. This has been replaced with a simple concept of an atomic bool that indicates whether a song component (MIDI, DMX, or audio) has finished and, when used in combination with the new "notify" function, will allow a cancel_handle.wait() call to return without an actual cancellation happening.
MacOS support is improved. It's not super thoroughly tested, but has been tested against several audio interfaces.
mtrack -V
will report the correct mtrack version.
Dependencies for mtrack have all been updated. This should hopefully resolve the issue
with cargo install
not working properly.
DMX engine using OLA has been added. Contains a built in dimming engine.
Added the ability to exclude MIDI channels from MIDI playback.
Initial DMX engine implemented. This is not quite ready for prime time.
Fixed the MIDI cancelable clock. Not sure what I was thinking when I implemented that.
(Breaking Change) Track mappings now support mapping to multiple channels.
Status reporting is now configurable.
Address stopping not working for songs with sparse MIDI files.
MIDI playback is now more accurate and has been tuned to be more in time with audio playback.
Channel mappings have been removed from individual song files and will now be maintained as part of the player configuration.
Channels can now be merged. That is, tracks can target the same output channel.
Removal of unneeded ringbuffer dependency.
- Initial release.