Buzzic 1.1 by stan 1901

Type:                 Sound tracker for 4K demos
Title:                Buzzic (version 1.1)
Created by:           Stepanov Andrey, 2008
                      ICQ:    129 179 794
                      E-mail: andrewstepanov@mail.ru
Required software:    .NET Framework 1.1 to run Buzzic. 
                      Compiled example does not need .NET Framework
Tested on:            Windows 2000, Windows XP, 
                      Windows Vista (not sure in proper work on this platform)

  Differences from previous version of Buzzic
  1) Instrument copy/paste capability added.
  2) Resonant filter added.
  3) You can now enter oscillator frequency as note, not as number.
  4) File format is incompatible with previous version of Buzzic.

  Main concept

  Buzzic is a demotool for creation 4K-demos music. It's main concepts are:
1) Instrument: consists of one oscillator and several effects, applied to it. 
   Note that since instrument contains only one oscillator, if you want more 
   complex sound, made of several oscillators, you must create several 
   instruments and attach them to the same note sequence.
2) Sequence: well, it's just sequence of bytes, passing through instrument. 
   Notice that sequence is not just sound notes - sequence can be used for many 
   other instrument parameters (e.g. filter cutoff, volume).
3) Code generation: melody can be exported in form of C++ code. If you don't 
   want to use C++, then Buzzic is not for you :) Of course, there is 
   always a choice of rewriting C++ program in other language.


  Instruments are displayed in groupbox "Instruments" at the left side of main 
  window. You can add, remove, edit, mute/unmute and copy/paste instruments 
  through menu "Instruments" or by pressing menu hotkeys.
  Each instrument contains oscillator and set of effects, applied to it. 
  Some of instrument parameters can be attached to sequence, while others 
  can't. You can select sequence in combobox, placed at the right side of
  parameter value selection control. Parameters meaning:
1) Note. Starting frequency of oscillator, encoded in semitones. So note 45 
   means C-4 (440 Hz). Parameter has no meaning for noice generators. 
   If note is zero, sound will not be generated.
2) Note end. Ending frequency of note. Oscillator frequency will linearly 
   change between "Note" and "Note end". If "Note end" is zero, it is assumed 
   to be the same as "Note".
3) Oscillator. No comments.
4) Detune. Offset (in semitones) of frequency from "Note" and "Note end" values.
5) Length. Note length in 0.01-th of second.
6) Volume. Volume in 0.01-th of maximum volume. Notice that scale is 
   not logarithmic.
7) Attack, Decay, Sustain. ADSR length values in % of note length.
8) Filter cutoff, Resonance. Parameters of low-pass resonant filter. 
   Notice that some values (>=100) of this parameters are not valid and may 
   produce vEry bad sound. 
9) Cutoff mod(ulation). Represents changing of cutoff frequency during 
   note replay.
10) Echo delay, repeats, damping. No comments.
11) Wrap level. Samples above this level will be reversed down. You better 
    play with it and listen or look at sound graph than try 
    to understand explanation I've just said :)
12) Hard level. Limits sound volume to given level.
13) Compressor low and high level. Samples below low value remain unchanged 
    while others will be non-linearly interpolated between low and high level.
  You can replay sound by pressing "Play" button - all sequenced values 
will be assumed to be zero and sound will be generated immediately. 
"Play on change" will cause program to play sound on any change you made 
to instrument.


  Each sequence is encoded as set of patterns, each 16 values long. This 
value is fixed and can not be changed. Adding and removing sequences 
is performed by buttons on main window (Sequences groupbox). 
Sequence operations: 
  - Double click OR Ctrl+I - insert empty pattern in focused position.
  - Double Click holding Ctrl OR Ctrl+D - remove pattern from focused position.
To rename sequence double-click sequence column header.
Patterns (opened via "Edit patterns" button) can be added, removed, renamed 
and interpolated on "Edit patterns" window. Interpolation is done by 
pressing "Interpolate values" button and selecting starting and ending rows.
Each pattern cell can containg values from 0 to 127. 
Zero is displayed as empty string. Alternatively you can enter values as notes.
To do it step on the left column titled "Notes:" and press alphanumeric keys
representing notes. Keys positioned as on piano. So Z is C, S - C#, X - E and
so on. You have access for two octaves from keyboard.
Patterns operations:
  - Double click OR Ctrl+I - insert empty pattern row focused position.
  - Double Click holding Ctrl OR Ctrl+D - remove pattern row from focused 
To write pattern into sequence focus row you need and press key, 
corresponding to needed pattern. All pattern keys is listed at the left 
side of "Sequences" window. To remove pattern from sequence press '.'.
Melody start and end are displayed by green and red lines on sequences 
window. To change them click right or left mouse button on row header.


  Melody replay is triggered by the "Play" button on main form. Value right 
from "BMP" control represents one row length in seconds. Value near the 
"Volume" scrollbox represents maximum sample volume played. This value should 
be less than 1, or else sound will be truncated while replaying in Buzzic 
or it will lead to horrible sounds while playing in compiled C++ code.
To generate C++ code select "Melody\Generate code..." menu item. Opened window 
will display program source code you can use to play melody. While generating 
this code Buzzic will test for unused sequences and patterns. If you don't
need them - you should remove them manually. Generated code is a little 
bit optimized - Buzzic will remove some unused features from the code.
  Menu items "Melody\Analyze ****" will display graphical representation 
of sound being played. I don't know if anybody really need it - I added 
it just for fun :)


  Archive contains sample melody with "buz" extension and sample program 
with Buzzic-created melody.

  Notes for programmers

  Currently generated code contains unnecessary links to msvcrt and _ftol.
You should remove them to minimize code and throw away msvcrt dependency. 
Sorry :)