Version 0.2
===========
- hierarchical networks
- wrapper for C language
- Guile interface
- dynamical number of input and output terminals
- multichannel (i.e. non-monaural) file I/O (requires dynamical number
  of in/out terminals?)
- multiple taps into a SF_Delay_Line (dynamic number of input/output
  terminals?)
- duplicate the functionality of Cool Edit and make a "How to make a
  sound editor with Sonic Flow" tutorial?

Version 0.3
===========
- multithreading: implement multithreading in simulation instead of
  forking another process; have inter-process communication (IPC)
  between the threads (shared memory?) (look at PSL for
  multithreading)
- real-time simulation (requires multithreading and IPC)
- how do real-time simulation and hierarchical networks fit together?
- exception passing from the simulation thread to the mother thread
  (IPC: reporting errors from the simulation thread to the calling
  thread (mmapalloc ()?))
- atomic startup and control of simulation thread
- direct (real-time) `import' and `export' of signals from the host
  application (requires multithreading and IPC)

Version 0.4
===========
- a uniform mechanism for storing and changing initialization-time
  "settings", e.g. filenames, sample rates, GUI sliders, filter bank
  crossover freqs etc.
- recognize and prevent floating-point over- and underflows, because
  they destroy the performance
- multirate networks (practically already implemented but not tested)
- fractional (i.e. non-integer) sample rates
- blocks: SF_Upsample, SF_Downsample, SF_Lowpass_Decimator,
  SF_Lowpass_Interpolator

Version 0.5
===========
- complex frames: 3 options
  typedef double real;
  class complex {
    real imag;
    real real; };
  a) real* re;
     real* im;
  b) complex* signal;
  c) union {real, complex} * signal;
     bool is_complex;
- FFT and IFFT blocks (requires complex frames and perhaps also 2-D
  frames?) 

Version 0.6
===========
- block execution profiling; see e.g. man times(2); for example, at the end of
  simulation print the total CPU time used in the execution and percentages of
  the time for each block
- support for VST plug-ins based on the IRIX VSTSDK?

Version 0.7
===========
- CORBA: have Sonic Flow show up on the CORBA bus; in practice this would merely
  mean an IDL interface for libsf
- implement blocks as "plug-ins" in e.g. /usr/local/lib/sf/1.0/blocks
  + a CORBA-based mechanism for interrogating with plug-ins
  + dynamically shared objects, DSO, dlopen(3)
  + Netscape plug-in software development kit (SDK)
  + GIMP plug-ins
  + Cubase VST/Sound Forge plug-in SDK
  + gmodule library
- formulate a *block hierarchy* concept!
- blocks: 1st-order filter, 1st-order allpass, 2nd-order allpass
  filter (inherit from biquad), generalize biquad; SF_Sample&Hold,
  SF_Segment, SF_Overlap_Add
- expand Max/min into "Order" (requires channels?)
- rename Noise_Generator -> White_Uniform_Noise?

Version 1.0
===========
- initialization-time optimization of the network *at atomic block
  level* across subnetwork boundaries (i.e. FFT(IFFT(x)) is optimized
  to just x)
- optimization of simulation via in-place processing (in long cascades
  of blocks)
- Graphical User Interface app
- enable network modifications (e.g. connecting and disconnecting)
  while simulating?  enable "infinite simulation"  Implement an audio
  desktop (see BeOS Media Kit) to GNOME using Sonic Flow as the
  engine?
- scalability of networks (blocks?); have e.g. a value from 0...1 with 0
  regarding to less CPU load, worst-sounding algorithm and 1 regarding to most
  CPU load and best-sounding algorithm

Version 2.0
===========
- MIDI flow handling; requires asynchronic operation (wires,
  simulation, etc.)
- asynchronic events, i.e. conditional simulation of blocks, `trigger'
  signals (e.g. playback of sounds on MIDI events, sequential events)
- polyphonic simulation of networks (do we need 3-dimensional frames?)
- steal code/integrate/make wrappers for Sig++, SPKit and Pd blocks
- 3-dimensional frames: replace frame_length and short_signal with
  SF_Length num_signal_rows;
  SF_Length num_signal_columns;
  SF_Length num_signal_channels;
  SF_Length signal_memory_length;
  (and perhaps SF_Length max_num_signal_rows, max_num_signal_columns,
  max_num_signal_channels;?)
- enable distributed simulation (Beowulf?) with CORBA

Miscellaneous
=============
Proposal for a block hierarchy (with some brainstorming about blocks):

Block
- Algebra
  - Adder
  - Multiplier
  - Negation
  - Reciprocal
  - Max/min
- Delay line
- Input/output
  - Audio input
  - Audio output
  - CD input
  - File input
  - File output
  - GUI graphs/meters/bars/indicators (output)
  - GUI sliders/buttons/controllers (input)
  - STDIN input
  - STDOUT output
  - Variable
- Linear filters
  - First-order IIR
    - Low-pass
    - High-pass
    - All-pass
  - Second-order IIR (biquad?)
    - All-pass
    - Band-pass
    - Band-stop
    - High shelf
    - High-pass
    - Low shelf
    - Low-pass
    - Peaking
  - Butterworth IIR
    - Low-pass
    - High-pass
    - Band-pass
    - Band-stop
  - Chebyshev type I IIR
    - Low-pass
    - High-pass
    - Band-pass
    - Band-stop
  - Chebyshev type II IIR
    - Low-pass
    - High-pass
    - Band-pass
    - Band-stop
  - Elliptic IIR
    - Low-pass
    - High-pass
    - Band-pass
    - Band-stop
  - Yule-Walker IIR
  - McClellan-Parks-Rabiner FIR
    - Low-pass
    - High-pass
    - Band-pass
    - Band-stop
    - Arbitrary
  - Least-square FIR
    - Low-pass
    - High-pass
    - Band-pass
    - Band-stop
    - Arbitrary
  - Generic (direct form II transposed)
  - Generic (FFT overlap-add)
  - Differentiator
  - Hilbert transformer
- Multirate
  - Commutator
  - Downsampler
  - Lagrange interpolator
  - Low-pass decimator
  - Low-pass interpolator
  - Sample and hold
  - Upsampler
- Nonlinear filters
  - Distortion
  - Dynamics processing
    - Compressor
    - Expander
    - Limiter
    - Noise gate
  - Median
  - Overdrive
  - Quantizer
  - Waveshaper
- Signal generators
  - Impulse
  - Pink noise
  - Sine
  - White gaussian noise
  - White uniform noise
- Transforms
  - STFT (Short-time FFT)
  - ISTFT (Short-time IFFT)
  - Some kind of wavelet (packet) analysis/synthesis filter banks
  - QMF filter bank analysis
  - QMF filter bank synthesis

- How to classify?:
  - Pitch estimator
  - RMS estimator
  - Overlap-adder (-saver?)
  - Segmentator
  - Spectrum inverter
  - Autocorrelator
  - Cross-correlator

Network
- Reverb
  - Dattorro reverb
  - Jot reverb
- Chorus/flanger
- Wah-wah
- EQ
  - Parametric EQ
  - Graphical EQ
