TRSI Sound Monitor v1.1
Written in 2004 by Franck "hitchhikr" Charlet

The concept
Getting started
The instruments
The sequences
The positions
Keyboard Shortcuts

The concept

TRSI Sound Monitor is a synthetizer/sequencer, it's based on real time software rendering of combinated basic waveforms
played in "sequences" (that can be regarded as measures) which are ordered/assembled in "positions" through the 8 tracks 
available and played at a given tempo to finally give a score/song.

Getting started

Note: Some knowledges about audio synthetis is required prior to using the monitor, be sure to check some tutorials
      that can be found on the web before starting.

Creating the instruments
Creating the sequences
Creating the score

Creating the instruments

The first thing that must be created are the instruments:

Click on the upper right gadget labeled "New" (or use Ctrl+I). A new instrument will be created and a first waveform
line will appear in the instruments area:



The blinking caret is pointing on the operator column (labelled "O") that will be used to combinate this waveform line
with the other ones (if the user decides to create some more), available operators are the four base operations: + - * /
Since we're on the first line, the initial value is always 0 (zero) so it wouldn't make sense to use a multiplication
or a division here, we'll use an addition.

The second column (labelled "Wf") is related to the waveform we'll use in this waveform line.

Available waveforms types are and look (roughly) like:

1: Sin wave2: Square wave3: Saw wave
4: Triangle wave5: Random noise
 
All are tuned after the american standard (A4 = 440Hz). The number 6 is used together with the phase shift to apply an absolute value to the accumulator and is mainly useful to obtain a saturation/calibration effect (a distortion effect is also available in sequences effects). Check some papers to understand when and how these differents waveforms should be used (but keep in mind that it will only be a general guideline). The next columns are the ADSR (Attack/Decay/Sustain/Release) of the selected waveform and determine the "dynamic" of the waveform. They are ordered as follow: Attack final Volume/Attack ramping Decay final Volume/Decay ramping Sustain final Volume/Sustain ramping Release final Volume/Release ramping If we try to play it as it was created previously we'll just hear nothing, that's because the ADSR haven't been set yet. All values in TSM are represented in hexadecimal notation. All volumes are expressed in percentages. (64 in hexadecimal means 100 in decimal which is in reality 100% of a normalized volume between 0.0 and 1.0 (so, if we want a volume lowered at 50% we will use 32). ADSR ramping are also expressed in hexadecimal and go from 0 to ffff (65535). We gonna start with a simple one: We set the Attack volume to the maximum (64) and the attack ramping to the minimum enabling value (1), if we play this instrument we'll hear a flat sine wave going on at the same volume forever and ever. Now we will enable the Decay ramping by giving it a value of 5000 and a volume of 0: The synthetizer will proceed these value as: Ramp to volume 64 (100%) (always starting from 0) in 1 samples then ramp to volume 0 (0%) in 5000 samples. We left the Sustain/Release disabled but the principle is exactly the same, just know that the Release can't be used the Sustain isn't already enabled, the total number of samples per instrument is 3fffc (ffff*4) which is approx 6-7 seconds of effective control given to the user. This one will sound more like a bell. Clicking on the "Add" gadget (or using Ctrl+N shortcut) will create another waveform line (an instrument can hold up to 256 waveforms lines): We will set this one to substract another sin wave, a phase shift (which is a value to apply to the base frequencies) of 50 and to modify the ADSR slightly: Played at middle frequencies (around C-4) this will sound more like a flute. Being comfortable with the instruments editor by exploring the range of it's possibilities (which are numerous) is a real plus, but keep in mind that the shape of the instruments produced with it will probably be modified while editing the sequences via the available filters. Creating the sequences A sequence is constitued of notes/instruments numbers and various effects used to modify the shape of these instruments and the behaviour of the score replaying (for example to change the tempo). (See the detailed description of each of the sequences editor elements here). Creating the score To actually create a score with the positions editor is quite easy. Just add the required number of positions ("Add." or "Insert" gadgets) and fill the sequences columns with the according numbers, eventually with a positive or negative transpose value (expressed in semitones) and eventually a global volume in which the selected sequence (and the next ones if you don't specify a volume for this track again) will be replayed. A Position is composed of 8 tracks each constitued with a sequence number, a semitone transpose value, a volume value and looks like this: Don't forget to save your work often !

The instruments

Current instrument number
| | Total number of instruments (Read only)
| | | | Play this instrument (ESC to stop) | | | | | | Replay note | | | | | | | | Goto previous intrument | | | | | | | | | | Goto next instrument | | | | | | | | | | | |

| | | | | | | | | | | Delete current datas | | | | | | | | | Add datas to accumulator | | | | | | | Save this intrument | | | | | Load a new intrument | | | Delete this instrument | Create new intrument

 Operator
| | Waveform | | | | Phase shift
| | | | | | Attack volume ramping | | | | | | | | Attack duration
| | | | | | | | | | Decay volume ramping
| | | | | | | | | | | | Decay duration
| | | | | | | | | | | | | | Sustain volume ramping
| | | | | | | | | | | | | | | | Sustain duration
| | | | | | | | | | | | | | | | | | Release volume rampign
| | | | | | | | | | | | | | | | | | | | Release duration | | | | | | | | | | | | | | | | | | | | | | Operator + - * / performed on previous datas line with current datas on line (the value is 0 at before the first line) Waveform 1 = Sin 2 = Square 3 = Saw 4 = Random 5 = Constant value (specified in phase shift) 6 = Triangle Phase shift Value to add/sub from the frequency of the intrument. (If waveform is 5 then the phase shift is only used as the specified constant value). Note The ADSR durations are cumulatives giving a total duration of 0x3fffc (0xffff * 4). All instruments loop, so non-looping ones are obtained by setting one of the ADSR volume ramping to 0 (a duration of zero in any of the ADSR durations stops the process and loop the instrument on the latest known volume).

The sequences

Current sequence number
| | Total number of sequences (Read only)
| | | | Base octave
| | | | |    | Goto previous sequence
| | | | | | | | Goto next sequence
|    |    |     | | | | | | | | | | | Delete this sequence | | | | | | | Create a new sequence | | | | | Play this sequence (ESC to stop) | | | Misc. effects tempo | Global tempo Current sequence number From 0x0001 to total number of sequences Total number of sequences From 0x0001 to 0xffff (65535) Base octave From 0 to 8 (Click to modify or use F1/F2 keys) Misc. Tempo The tempo used for the Misc. FX speed.
Order position
| | Note (C-0 to C-9) | | | | Instrument number
| | | | | | Volume (0 to 64)
| | | | | | | | Panning (0 = left / 64 = right)
| | | | | | | | | | DSP mask
| | | | | | | | | | | | DSP fx number
| | | | | | | | | | | | | |DSP fx Parameters
| | | | | | || | | | | | | || Misc. fx
| | | | | | || | | | | | | | || |Misc. fx parameters
| | | | | | || || | | | | | | || || Note From C-0 to B-9 (10 octaves) Instruments number From 0x0001 to 0xffff (65535) Note: Using instrument number 0 with a note will simply re-use latest known instrument Volume From 0 (left) to 0x64 (right) (32 = center) (0 = no panning = center) DSP mask Binary number from 0 to 0x3f (expressed as binary 111111) Where: 100000 (32) (0x20) shutdown DSP fx 6 (Vowels formant)
010000 (16) (0x10) shutdown DSP fx 5 (Distortion)
001000 (8) (0x08) shutdown DSP fx 4 (Delay)
000100 (4) (0x04) shutdown DSP fx 3 (VCF pass filter) 000010 (2) (0x02) shutdown DSP fx 2 (Hi pass filter) 000001 (1) (0x01) shutdown DSP fx 1 (Lo pass filter) So: 111111 (63) (0x3f) shutdown DSP fxs 1,2,3,4,5 and 6 DSP FX Lo pass filter (1) Parameter 1: Resolution. Parameter 2+3: Cut off. Hi pass filter (2) Parameter 1: Resolution. Parameter 2+3: Cut off. VCF pass filter (3) Parameter 1: Resolution. Parameter 2+3: Cut off. Delay (4) Parameter 1: Distance. Parameter 2: Feedback. Parameter 3: Panning. Distortion (5) Parameter 1: [Not used] Parameter 2+3: Distortion amount. Vowels (de)formant (6) Parameter 1: 0: none 1: A 2: E 3: I 4: O 5: U Parameter 2+3: [Not used] Note: Once turned on a filter will process datas forever and ever on the track it has been used until turned off again. Using a filter with parameters value set to zero have no effect except for the delay's panning (extreme left). Misc. FX Arpeggio (1) Parameter 1: Semitone shift 1 Parameter 2: Semitone shift 2 Pitch bend up (2) Parameter: Pitch speed Pitch bend down (3) Parameter: Pitch speed Vibrato (4) Parameter 1: Speed Parameter 2: Depth Volume slide up (5) Parameter: Slide speed Volume slide down (6) Parameter: Slide speed Set tempo (7) Parameter: New tempo Set Misc. FX tempo (8) Parameter: New tempo Set global volume (9) Parameter: New global volume Tone portamento (A) Parameter 1: [Note field] Parameter 2: Speed External program control (B) Parameter: From 0 to ff (255) (Passed to user defined function). Note: The monitor will re-use the last entered value for effects 1 to 6 (included) if parameter(s) is/are omitted (like in protracker).

The positions


 |        |         |          |         |          |         |          |          |
 |        +---------+----------+---------+----------+---------+----------+----------+
 |              Turn tracks on/off (these states aren't saved into the modules)
 |
 Total number of positions (Read only)
 
New              Erase all datas.
Wipe             Remove all unused/duplicate instruments & sequences from the song.
Load             Load new module.
Save             Save current datas as module.
Add.             Add a position.
Insert           Insert a position at current location.
Delete           Delete current position.
Play             Play song (ESC to stop).
Pl.Pos           Play song from current position.
Stop             Stop replay.
Restart position Ordinal position from where the song should restart (from 1 to 0xffff (65535)).
Quit             Quit TSM.

 Position number (From 0x0001 to 0xffff (65535))
 | 
 |     Sequence number (From 0x0001 to 0xffff (65535))
 |     |
 |     |   Transpose sequence by # semitone(s)
 |     |   |
 |     |   |  Global volume to use to replay the sequence (None = use last known volume).
 |     |   |  |
 |     |   |  |

Keyboard shortcuts

Global

  Ctrl+Left: Go to previous sequence.
  Ctrl+Right: Go to next sequence.
  Shift+Left: Go to previous instrument.
  Shift+Right: Go to next instrument.
  F1: Increment base octave.
  F2: Decrement base octave.
  TAB or Shift+TAB: Switch between Instruments/Sequences and Positions.
  F5: Play current instrument.
  F6: Play current sequence.
  F7: Play song.
  F8: Play song from caret position.
ESC: Stop any playing. Ctrl+I: Create a new instrument. Ctrl+O: Load a module. Ctrl+S: Save a module. Ctrl+F1 to Ctrl+F8: Switch tracks on/off. Instruments editor shortcuts Ctrl+N: Create a new waveform. Ctrl+D: Delete current waveform. Sequences editor shortcuts Home: Go to note column. End: Go to Misc. FX datas column. Shift+Insert: Insert empty row. Shift+Delete: Delete the current row.
Ctrl+Home: Go to row 0.
Ctrl+End: Go to row 0xf. Ctrl+Delete: on a note will not erase the instrument number. F3: Increment notes of selected instrument by one semitone. F4: Decrement notes of selected instrument by one semitone. Shift+F3: Increment octaves of selected instrument by one. Shift+F4: Decrement octaves of selected instrument by one. Ctrl+X: Copy datas into clipboard and clear sequence. Ctrl+C: Copy datas into clipboard. Ctrl+V: Paste datas from clipboard into sequence. Ctrl+N: Create a new sequence. Ctrl+D: Delete current sequence. Ctrl+K: Delete all current column's datas starting from the caret position. Ctrl+Shift+K: Delete all sequences's datas starting from the caret position. Ctrl+L: Delete current row of datas located below and at the right of the caret. Double click: On instruments column will select the corresponding one in instruments editor.
Positions editor shortcuts

  Shift+Insert: Insert an empty row in current track.
  Shift+Delete: Delete the current row in current track.
  Ctrl+Insert: Insert a new position (all tracks).
  Ctrl+Delete: Delete the current position (all tracks).
  Ctrl+K: Delete all current column's datas starting from the caret position (either: note, transpose OR volume).
  Ctrl+Shift+K: Delete all track's datas starting from the caret position (note, transpose AND volume).
  Ctrl+L: Delete current row of datas located below and at the right of the caret.
  Double click: On sequences column will select the corresponding one in sequences editor.