Difference between revisions of "SideTracker"

From Jeskola Buzz Wiki
Jump to: navigation, search
(new sections)
(Commands)
Line 36: Line 36:
 
=== Per-channel parameters ===
 
=== Per-channel parameters ===
 
=== Commands ===
 
=== Commands ===
 +
* 02 xx  Slide up xx notches for this tick
 +
* 03 xx  Keep sliding up xx notches
 +
* 04 xx  Slide down xx notches for this tick
 +
* 05 xx  Keep sliding down xx notches
 +
* 06 xy  Vibrato, where x=speed, y=depth
 +
* 07 xy  Vibrato until stopped, where x=speed, y=depth
 +
* 08 xx  Panning, 0=left, 80=middle, FF=right (temporary does not make sense here)
 +
* 09 xx  Same as 08
 +
* 10 xx  Sample offset, 00=start, 80=middle of sample, FF=end of sample
 +
* 11 xx  Same as 10, but affects all notes played on this track from now on
 +
* 12 xx  Note delay. 01=-50% of a tick, 80=no delay, FF=50% of a tick delay (Yes you can do negative note delay now)
 +
* 13 xx  Same as above, but the effect stays on for this track until you issue a "13 80" command.
 +
* 14 xx  Probability. 00=never, 80=50% of the times, FF=always
 +
* 15 xx  Same as 12, but affects all notes played from now on
 +
* 16 xx  Loop fit. xx is the number of ticks the waveform's loop should take to complete. If you change the tempo, the frequency is adjusted accordingly, so that the loop still fits (like mtrk's 12 command)
 +
* 17 xx  Same as above, but stays on for all future samples in this track.
 +
* 18 xx  Randomize volume by xx.
 +
* 19 xx  Same as above, but effects stays on forever until you use "19 00"
 +
* 20 xx  Randomize note delay by xx.
 +
* 21 xx  Same as above, but effects stays on forever until you use "21 00"

Revision as of 14:01, 8 October 2009

This machine does not exist yet, but I have decided to write a design document on it, in order to highlight some of my thoughts. It's an attempt to get a tracker that doesn't click, doesn't kill the attack of percussion and resamples properly unlike MTrk and UTrk.

Over-all goals

  • High quality output with no sound artifacts
  • Easy to use
  • Fairly decent performance overhead
  • Works in the current version of Buzz (with clone compatibility as an added bonus)
  • Once the project has taken shape and has matured, it will become open-souce
Adjusting the decay curve shape parameter produces various logaritmic slopes.
  • The most commonly used commands will be turned into global parameters or (only if it really makes sense) a per-channel parameter. This will make the pattern editor rather bloated though.

Need to have features

  • Support for all 16 bit int, 24 bit int, 32 bit float uncompressed .wav files.
  • Virtual channels and intelligent Global and Track handling. If you play a long sample three times in a row, e.g. C-D-E, you will hear all three. If you then use a "volume slide down" command, you will hear all three samples fade out. To do this, each virtual channel must remember what physical channel started it, and react to any commend on that physical channel.
  • take care that 1 sample can be active with the same note on multiple voices..
  • An intelligent method of avoiding clicks. When switching to or from audio that has lots of treble, no de-clicking needs to take place at all. (Maybe the tracker can decide? If not, give the user an easy way to enable/disable declicking.) Also, declicking can be done by fading the previously playing sound to silence over 0.5 to 5 ms, before the new sample even starts playing, if we can predict when that happens.
  • All commands should exist in two versions placed at adjacent numbers so that it is easy to remember both: Sticky and temporary. Temporary commands (even command numbers) affect the tick or local area they're applied to. Sticky commands (same number but +1) are active until you specifically stop it. An example of this could be "vibrato": Let's say this command is called "14", then the permanent way to enable vibrato would be 14+1 = the "15" command.
  • This tracker must be able to handle sample offset and positive/negative note-delay on the same note.
  • Different resampling algorithms: Fast, Medium, Good (aliasing free). This setting must be stored in a global way, so that if you move Buzz to a new PC, you can easily change this setting for all songs at once.
  • Better envelope controls. I want a "volume decay" command where you can change both the length (in milliseconds) and the decay curve (see graphics).

Nice to have features

  • Being able to handle any combination of commands.
  • MIDI support
  • Support for Wavetable features like multisample (currently broken..) and Envelopes (currently not really user friendly..)
  • Rudimentary Sample Editing functionality in some GUI
  • High quality pitch-Shifting and time-ttreching (in addition to the high quality resampler that is a must)
  • Support for all .wav formats

Up for discussions

Suggested parameters and commands

Global parameters

Per-channel parameters

Commands

  • 02 xx Slide up xx notches for this tick
  • 03 xx Keep sliding up xx notches
  • 04 xx Slide down xx notches for this tick
  • 05 xx Keep sliding down xx notches
  • 06 xy Vibrato, where x=speed, y=depth
  • 07 xy Vibrato until stopped, where x=speed, y=depth
  • 08 xx Panning, 0=left, 80=middle, FF=right (temporary does not make sense here)
  • 09 xx Same as 08
  • 10 xx Sample offset, 00=start, 80=middle of sample, FF=end of sample
  • 11 xx Same as 10, but affects all notes played on this track from now on
  • 12 xx Note delay. 01=-50% of a tick, 80=no delay, FF=50% of a tick delay (Yes you can do negative note delay now)
  • 13 xx Same as above, but the effect stays on for this track until you issue a "13 80" command.
  • 14 xx Probability. 00=never, 80=50% of the times, FF=always
  • 15 xx Same as 12, but affects all notes played from now on
  • 16 xx Loop fit. xx is the number of ticks the waveform's loop should take to complete. If you change the tempo, the frequency is adjusted accordingly, so that the loop still fits (like mtrk's 12 command)
  • 17 xx Same as above, but stays on for all future samples in this track.
  • 18 xx Randomize volume by xx.
  • 19 xx Same as above, but effects stays on forever until you use "19 00"
  • 20 xx Randomize note delay by xx.
  • 21 xx Same as above, but effects stays on forever until you use "21 00"