Releases: stoneface86/libtrackerboy
Releases · stoneface86/libtrackerboy
libtrackerboy v0.9.0
Important
- Nim 2.0.0 is now required.
- All init procs have been renamed,
init(T, ...)
->initT(...)
Immutable[ref T]
has been replaced byiref[T]
Immutable[ptr T]
has been replaced byiptr[T]
- Renamed
toImmutable
->immutable
The API in the data module has been completely overhauled:
- removed types
EffectIndex
,EffectColumns
- added consts
rangeSpeed
,noLoopPoint
,noteNone
,instrumentNone
and
effectNone
- Speed
- is now a
distinct uint8
- Renamed
speedToFloat
->toFloat
- Renamed
speedToTempo
->tempo
- Added
toSpeed
,isValid
,$
procs
- is now a
- added type
LoopPoint
- Sequence
- renamed field
loopIndex
->loop
loop
field is now of typeLoopPoint
- add
isValid
proc - removed
data
,data=
procs
- renamed field
- Instrument
- removed
new
overload - add
hash
overload
- removed
- Waveform
- removed
new
overload - add
hash
overload
- removed
- Renamed
SequenceSize
->SequenceLen
- Renamed
OrderSize
->OrderLen
- Table
- added proc
uniqueIds
- added proc
- Order
Order
is now aseq[OrderRow]
- add proc
initOrderRow
, templateorow
- removed procs
[]
,[]=
,len
,setLen
,setData
,add
,insert
,
remove
andswap
- Effect
- renamed
EffectType
->EffectCmd
, each enum starts withec
instead ofet
- renamed field
effectType
->cmd
- renamed proc
effectTypeShortensPattern
->shortensPattern
- renamed proc
toEffectType
->toEffectCmd
- renamed proc
effectTypeToChar
->effectCmdToChar
- renamed
- TrackRow
- add types
NoteColumn
andInstrumentColumn
- field
note
is now of typeNoteColumn
- field
instrument
is now of typeInstrumentColumn
- added procs
has
,value
,asOption
,$
for Column types - removed procs
clearNote
,clearInstrument
,hasNote
,hasInstrument
,
setNote
,setInstrument
,queryNote
,queryInstrument
,
- add types
- Track
- Track data is now stored using a
ref seq[TrackRow]
- added proc
data
for accessing the track's data seq - removed procs
setNote
,setInstrument
,setEffect
,setEffectType
,
setEffectParam
- add converter to a TrackView,
toView
- Track data is now stored using a
- added types
Pattern
,PatternView
,SomePattern
,SomeTrack
- Song
- add procs
$
,isValid
,removeUnusedTracks
,allocateTracks
,getRow
,
effectiveTickrate
,patternLen
trackLen
is now a property instead of a fieldeditPattern
andviewPattern
templates inject aPattern
variable
instead of a template. Usevalue[channel]
instead ofvalue(channel)
- add procs
- add types
SongPos
,SongSpan
- SongList
- add procs
isValid
,data
- removed overload for
get
that returns aref Song
- added proc
mget
that returns aref Song
- removed procs
add
,duplicate
,remove
,moveUp
,moveDown
- add procs
- Module
- add proc
isValid
- add proc
Changes to the API in engine
:
- engine internals now utilize the new
tracking
module - modules
apucontrol
,enginecontrol
andfrequency
have an unstable API,
so any changes made to them will not be documented. - added proc
isPlaying
getLocked
renamed tolocked
- added proc
unlocked
- invalid starting position given to
play
no longer results in an
IndexDefect
being raised, instead the engine is halted. step
renamed totick
currentFrame
renamed toframe
currentSong
renamed tosong
currentNote
renamed tonote
currentState
renamed totrackState
getTrackTimbre
renamed totrackTimbre
getTrackEnvelope
renamed totrackEnvelope
getTrackPanning
renamed totrackPanning
stepAndApply
renamed totickAndApply
EngineFrame
object changedhalted
,startedNewRow
,startedNewPattern
fields replaced by
status: TrackerStatus
speed
is now of typeSpeed
order
androw
fields are replaced bypos: SongPos
GlobalState
object removed, as the engine internals no longer requires itufAll
renamed toupdateAll
Added
- (common)
iref[T]
andiptr[T]
(these replaceImmutable[T]
) - (common)
FixedSeq[N, T]
type for a seq-like container of fixed capacity. - (common)
Tristate
enum - (ir)
==
operator overload forRowIr
- (ir)
runtime
proc for anOperation
- (ir)
toTrackRow
proc for converting anOperation
back into aTrackRow
- (ir) overload for
toIr
proc for partial ir conversion - (note)
NoteRange
,Octave
,Letter
,NoteIndex
andNotePair
types - (note) procs for converting a
NoteIndex
to aNotePair
and vice versa - New module,
text
, for text conversion and parsing of libtrackerboy data. - New module,
tracking
, for tracking playback of a song.
Changed
- (data) The data module has been overhauled, see above
- (ir)
fromIr(TrackIr)
returns a tuple containing a track and a bool - (ir)
setFromIr
proc now returnsbool
- (ir) renamed proc
toEffectType
->toEffectCmd
- modules
apucontrol
,enginecontrol
andenginestate
are no longer
private and are now located inlibtrackerboy/engine
- (engine) see above for detailed changes.
- (editing) completely rewritten, safer and easier to use.
Removed
- (common)
MixMode
type and related procs. - (common)
Immutable[T]
type and related procs. - (data)
$
procs forSequence
andWaveData
types. Use text module instead. - (data)
parseSequence
proc, use text module instead. - (data)
parseWave
proc, use text module instead. - (ir)
SongPath
andPatternVisit
types. - (editing)
PatternIter
,ColumnIter
types - (notes)
note
compile-time proc
libtrackerboy v0.8.3
[0.8.3] - 2023-11-08
Fixed
- Error with nimble package:
cannot open file: build.nims
libtrackerboy v0.8.2
[0.8.2] - 2023-11-01
Added
- runtime calculation procs in engine module
engine.runtime
. These calculate
the time of a song, in frames.
Changed
Duration
type in exports/wav renamed toSongDuration
, it now contains
a number of loops or a time amount usingDuration
fromstd/times
- WavExporter's progress and progressMax procs are now always in units of
frames.
Fixed
- Bug with arpeggio sequences treating -1, -2, etc as 255, 254, etc. This
was added as an unsigned byte instead of a signed one. This caused songs
with negative values in arp sequences to have the highest note play
(resulting in high pitched chirping).
libtrackerboy v0.8.1
[0.8.1] - 2023-10-18
Fixed
- Wav exporter never finishing for some songs when using a loop duration.
- Default timbre for CH4 is now 0, was incorrectly set to 3
libtrackerboy v0.8.0
[0.8.0] - 2023-06-14
Added
Tickrate
type which contains a system and customFramerate.hertz
,getTickrate
procs to data module.items
andmitems
iterators forSongList
Changed
- Added
skEnvelope
toSequenceKind
enum. Instrument
type no longer contains theinitEnvelope
andenvelope
fields.Instrument
now contains a sequence of typeskEnvelope
Song
now has atickrate
field, for an optional tickrate override.- File revision is now at 2.0, rev D.
Removed
framerate
proc in data module. UsegetTickrate
proc orModule.tickrate
.
libtrackerboy v0.7.2
Added
ir
module for intermediate representation of pattern data. A utility module
for converting module data to other formats.currentFileSerial
const to version modulecurrentVersionString
const to version module- Implementation of the
L00
effect (lock/music priority). - Support for Nim 2.0.0. As of 2023-04-04, the library compiles and passes
tests with Nim 2.0.0 Release Candidate 2.
Changed
Version
type is now atuple
Removed
<=
and<
procs in version module. The generic overload provided by
Nim's system module should be used instead.$
overload forVersion
. UsecurrentVersionString
instead of$currentVersion
.v
template in version module, use a tuple constructor instead.
libtrackerboy v0.7.1
Added
TrackView
andSomeTrack
types to libtrackerboy/dataSong.getTrackView
member proc
Changed
- Track data is stored using a
ref array
instead of aseq
- Each track is allocated for 256 rows, regardless of the song's trackLen
parameter. This allows for changing the trackLen without losing data at
the cost of extra memory consumption when trackLen < 256.
Removed
len
andsetLen
overloads forTrack
instances, use theTrack.len
field instead.trackLen
andsetTrackLen
procs, use theSong.trackLen
field instead.
libtrackerboy v0.7.0
Initial version of the Nim rewrite, also the canonical first version of the library.
Last C++ version
This tag points to the last commit of the C++ version before the library was rewritten in Nim, or before v0.7.0.
All code before v0.7.0 is UNVERSIONED, or rather, used Trackerboy's versioning. This is due to the fact that the back end was originally in the same repository as the front end, and thus used the same version history.
All code before v0.7.0 is also known as "before Nim", where the original implementation of this library was in C++.