- add svn info output to report.out
- fix block-independence of bsenoise
- fix bsenoise distributions
- WEB: add? usability page: http://www.developerfusion.co.uk/show/1718/5/
- WEB: add: "We will only accept OGG or MP3 files for already uploaded BSE files"
- in API and docs, s/roots/zeros/
- double bse_temp_freq (double kammer_freq, int semitone_delta); s/kammer_freq/freq/
- complete beast LGPL migration
- undef _DOMAIN
- if no usable PCM device could be found, but devices where found at all, the error mesage should contain "is device in use?"
- subst ArtsCompressor non-constants
- wavetool manual page
- bsemathsignal.c -> bsemathsignal.cc
- change midi events to either list note + fine_tune instead of frequency, or at least preserve notes
- reconsider musical tuning for midi devices and midi files
- implement include path handling for bsewave files to fix slowtests/audio/Makefile.am:minisong-test
- tracks should be default-connected after midi import
NEXT-RELEASE:
- add normalize to bsewavetool
- GslLong -> int64 
- wave-tool:
  * bit-width conversion float<->16 (optional saturation)
- fix birnet_thread_run uses (unref thread)
- bse/bseenginemaster.c:master_take_probes():
  for the copying of VIRTUAL nodes to really work (copy correct data),
  all VIRTUALs must have been processed before any SCHEDULED nodes
  (since the latter modify the buffer pointers)
- move clean-generated: and generated: into Makefile.decl
- move sfi_alloc_upper_power2 to birnet
- toggle sensitivity of oscillator:Pusle properties when non-pulse wave form is selected
- song pointer display should be adjusted by the latency value specified in preferences
POST-RELEASE:
- add freq->freq detuning/modulation plugin (offer volt/per/octave output?)
- adsr: + delay parameter
  looping flag with threshold
  max sustain time
  gate out (phase selectable)
  time: 2 scales ; seconds milliseconds
INCOMPAT:
- merge 2 * BseSimpleADSR into 1
- delete BseAtanDistort
- nuke compat code
USAGE:
- in song view, there should be a way to directly load wave files
- when popping up the synth selection, if no synth is presnet but waves are available, the notebook should show the Waves page
MISC:
- Hanno-Module-Requests: cross-fading, ring-mod, pink-noise, freq->freq, quantizer, band-pass with modulation input
- add a dialog that provides details about beast's current run mode:
  - selected audio driver, bit depth and mix-freq thereof
  - provide rating for alternative audio drivers (ALSA)
  - running on kernel 2.6 scheduler?
  - reniced synthesis engine?
  - checks mixer channels Master and Pcm for < 20% and Muted
- fix bsepcmdevice-alsa.c:alsa_device_retrigger():g_malloc0(): to instead use bse_engine_const_zeros()
- make BSE_REGISTER_OBJECT() define parent_class, similar to G_DEFINE_TYPE
- align engine blck adresses and engine block sizes on 16byte boundaries upon allocation
- BseSimpleADSR + ([_] fixed sustain time, sustain time [%] [XXXXXXXXX])
- store piano roll settings (hzoom,vzoom,quantization,note-length) in .bse files
- fix/re-enable midi note recording into piano roll
- update status message of recording script according to is/isnot recording
- look into adding BseJanitor::status-caption (which could become primary text for status message display)
- get rid of sfimemory
- print detail score with loop range (in progress printing)
- save detail_names as comment with score_details
- adjust inner loop abortion according to normed score values
- THREADING: benchmark TLS vs. g_*private_set()/pthread_setspecific()
- THREADING: make Birnet::Thread provide DataListContainer functionally, albeit thread-safe
- THREADING: implement a --force-gthread-table option and use it for a test in make check
- THREADING: properly document guards and wrap them in C++
MODULES:
- trigger-button module
- joystick module
- allow output-only modules to have their connection bar at the top
- BseSimpleADSR: support 5-stage sforzando: http://www.soundonsound.com/sos/jul04/articles/synthsecrets.htm
BUGS(FIXME):
- add/remove actions to/from shadow storage and require a script to issue actions-commit/gui-update or similar for the actions to really appear on-screen
- add BST_MSG_PROXY(project) for detail section
- start bsesh with nice level reduced by exactly 1 (must be configurable, default:on)
- popup prominent error message upon startup scripts could not be found, same if plugins could not be found
- add enum BseMessageCode to bsecore.idl (enum and BseMessage field) to identify messages via BSE_MSG_CODE(nnn) that may be usefull to handle
  programatically at the GUI (no midi, no pcm, no plugins, no scripts)
- remove i18n_category from bsecategories.c and attempt translation automatically
- check envelope module enum value names (nick, blurb/tooltips)
- add stock icons for Select/None Select/All Select/Invert
- bsewavetool: fix per-command docu to properly account for input.bsewave
- install bsewavetool, bsewavetool.1
- add midi control numbers to midi control enum values as tooltips
- popping up two modal dialogs (error and warning) allowes closing of only one
- implement combinatoric selections with shift+control
- need repeater script similar to harmonic transposer
- tools/song/track-busses needs to stop playback befgore operating
- integrate or reimplement fan sliders: http://www.gazuga.net/phat.php
- when resizing trackview, the left paned child (track treeview) should stay fixed in horizontal size
- display bpm only with float precision
- skip and retrigger updates for scope visibility changes
- MIDI-import: accept zero-duration notes from God_Is_A_DJ.mid
- play + play doesn't reset wave oscillator state
- playback should start at play pointer position (wrap around to start if pointer is at/after song end),
  pause should stop playback, stop should stop playback and warp pointer to start
- WaveList: list items with basname in first col, add a col for full pathname
- provide config-parameter (by engine) which provides 16kHz limit listening-threshold used implicitely in osc-code etc. (important for 48K,84K)
- implement display of Note properties next to frequency properties (and nuke note properties from plugins)
- use __thread to speed up sfi_thread_self(). configure test:
  http://cvs.sourceforge.net/viewcvs.py/firebird/firebird2/configure.in?rev=1.205
  compiler support and missing libc support will fail on accessing a __thread variable (kernel dependent!)
- add http://tap-plugins.sourceforge.net/ladspa/sigmoid.html to BseStandardSaturation
- registering the same script function twice triggers GType assertion
- sfidl --client: should generate: extern "C" ifdef's, include sfi/sfi.h
TODO:
- move "ratio" above "trheshodl" in artscompressor (order in property dialog)
- fix missing "Dry" for chorus (or label "Wet" differently)
- property dialogs should support Ctrl+Z i.e. undo/redo
- add undo grouping around note selection movement
- add shift-up/shift-down buttons to piano roll to pitch up/dopwn the selected notes
- add a "Creating Skins" section to the beast manual page
- implement window position and size save/restore
- add mini list next to track add/del buttons that contains orphaned parts (sorted by most recently orphaned)
- after laoding a sample from the instrument selection box, make it the default selection
- WaveView zoom-field should be vertically aligned with vscale-field
- Mixer: add raise/lower equivalents: right/left move
- add Left and Right channels to BseAmplifier to allow stereo amplification
- TrackRoll: display only basename of wave files
- add extra path handling for freepats packages
- TrackRoll: support shift/ctrl/alt modifier to copy/link/move parts
- TrackRoll: disallow instrument field editing or dialog box during playback (simply gdk_beep())
- TrackRoll: add Lower and Raise buttons to move tracks relative to each other
- PianoRoll: Ctrl+scrollwheel change hzoom
- PianoRoll: interpret scrollwheel events for h/v scrolling (according to a toggle menu item)
- FreeVerb: implement downsampling at in-/outputs to correctly apply the 44100Hz based coefficients
- FreeVerb: fix parameter interpretation of freeverb
- driver interface: support multilpe MIDI devices
- add editable text fields to snet router
- implement ResetAll according to: http://www.midi.org/about-midi/rp15.shtml (more: http://www.midi.org/about-midi/specinfo.shtml)
- provide a color/dB reference scale, next to the fft-scope view
- add "..." to new dialog items in View/
- show note and timing position of current mouse pointer in piano roll status bar
- add play button to pianoroll to start song-playback at pianoroll->pattern start
- need note-specific undo per part in pianoroll
- change projectname in accordance to file name (and change beast-project-window-title accordingly)
- add "Help on Skins" button to skin settings dialog, describing --skinrc option
- implement Monitor Output Signal dialogs:
  - histogram
  - edge detector: ...____..__|^^^'----'^^^^^|__.... (using dots for contiguous regions)
- add mini-keyboard to Router toolbar to test instrument designs
- implement hirarchical topic selector instead of notebook-tabs for preferences:
  - move BSE paths into their own "paths" categorie
  - rename BEAST tab to "appearance" or similar
- the instruments selection dialog for tracks should default-select the currently used instrument
- the "Export Audio" file dialog should not share state with the save/load dialogs (to avoid suggesting .bse files as WAV targets)
- center vscrollbar of piano-roll upon realization
- light-up piano roll color for "C" to better distinguish consecutive notes
- reduce the number of fractinal values for the bpm display to 3 (add frac1:frac2:frac3:frac4 etc. pspec hints)
- support various fft windows for fft probes
- implement float-ffts
- test engine block size changes (Subject: blocksize vs. cpu)
- probes only need to deliver (sample frames) 25 times per second, and need not be continuous
- change per-track scopes to stereo volume meters
- coalesce volume meter updates to only 25 per second
- align block boundaries to sample_freq/control_freq chunks
- reexamine bse_object_lock()
- remove [dB], [%], [uS] etc... unit specifications from property labels, use hints instead and let the GUI make such indications
- davsyndrum needs gate-out (or done)
- midireceiver: vswitch with note-off + disconnected (due to mixer) should become idle
- disable probing for invisible scopes
- implement horizontal dB-meters as BstParam type
- don't record samples to WAV file before *any* song is processed by sequencer
- piano roll interpret scroll events for vertical scrolling
- implement GxkLogAdjustment in terms of GxkAdapterAdjustment and rename gxklogadjustment.h
- add GxkDialog minimum shrink sizes support
- preserve part-link ids in tracks (API) across part-tick movement and remove-tick+insert-part undo
- add raise/lower buttons to track view
- add toleft/toright buttons to bus view (mixer)
- add executable versioning to sfidl 
- beast --debug=all --no-debug=comport doesn't disable comport messages
- rename cast() to convert()
- when starting to record events in automation, make sure an event at stamp=0 exists for default setup
- add controller dialog popup for tracks to alter sliders corresponding to midi controls
- implement part copying
- overshoot LED: ___ 
                 \ |  overshoot: fill triangle
                  \|  fill level shrinks with time
- BUG: select events, C+c, C+v, kill-selection. startover => copy is placed above old selection
- BUG: when selected events overlap not-selected events, give prcedence to selected events when moving                  
- BUG: delete track + undo doesn't preserve track order
- BUG: part/event control, group/ungroup undo around drag begin+end
- alias audio_in1 and audio_in2 of BseAdder to audio_in 
- save default quantisation and note size with parts
- trackview: add +track and -track buttons to toolbar, move toolbar out of paned, toolbar vscroll=never
- rename bse_bus_get_stack() which is the only valid hook to setup song modules atm
- evaluate typedef gpointer SfiProxy; instead of GType, this should get rid of a lot of casts
- the skin editor should offer loading skins, just like View/Skins
- mixer icon
- icons for: BseSong, BseCSynth and BseWaveRepo (get rid of object type prefixes in the toplevel notebook, use icons)
  * waverepo: similar to Lib... button; CSynth: box(filter,osc)+connection+speaker; Song: pages of notes
- get rid of FIXMEs in beast-gtk/testgui.c
- seqid changed notification *only* works for non-source children of BseSong
- (beast:18498): BSE-WARNING **: while executing undo method "BseSong+remove-bus" of item "BseSong::Unnamed": Synthesis module currently busy
- rename bsesnifferscope.* to bsescope.*
- rename snifferscope to trackscope
- split bstutils into bstgutils
- skip no-voice found for snet==NULL tracks
- the "Synth Selection" dialog popped up from the track view should preselect a track's existing Synth object
- check sfi_debug_check ("sched") in --debug-list
- bseautodoc should set plugin loading path to build path (via option?) to avoid loading installed plugins (which may be even binary incompatible)
- rename gslopmaster to bseenginemaster
- move ProbeFeatures into bseprobe.idl (requires BseSource as C++ object)
- remove Reply jobs from engine
- master bus creation + making the bus master needs to go to undo
- get rid of sniffers entirely (which we're currently leaking per each track+view combination)
- change [M] toggle tooltip in the track-view to explain *sequencer* muting (i.e. ignore notes)
- optimize BseAdder according to BseSummation
- verify that no IO channel buffer memory is being allocated for virtual modules
- Error: "inputchannelalreadyinuse" should popup new error dialog
- lock band-width property for lp/hp filters
- when loading/merging bse files, make sure all orphan parts are in a new muted track and delete part-item-view
- delete parts upon their last unlink from a track
- pattern editor: pressing G+1 on G+1, should delete old note (and its length) and insert new note (and its length)
- pattern editor: add note LENGTH editing!
- pattern editor: keep focus line (i.e. tick) across zoom changes
- pattern editor: delete line and insert line (Del Ins) implementations
- piano roll: undo-group movements while button is pressed 
- piano roll: drag-and-drop should preserve channel numbers if possible
- track view: when middle button is pressed to position song pointer, set keep-pos-til-song-start flag
- fix trackroll dnd behaviour in upper left corner of scrollarea
- document monphon/polyphon setups
- make channel blurbs and module names have the same font in router display
- assertion failed: BSE-ERROR **: file bsemidireceiver.cc: line 525 (void <unnamed>::change_voice_input(<unnamed>::VoiceInput*, <unnamed>::VoiceInputTable*, long long unsigned int, <unnamed>::VoiceChangeType, float, float, GslTrans*)): assertion failed: (vinput->iter == table->end())
- add DSP engine module stats to profiler dialog
- add tooltips to categories and use that for bst_action_list_add_cat()
- take a look at the cdrecord source for their __dtoa() implementation
- implement auto-save feature: if mmap() is available, write autosave.bse to it every couple minutes (no need to flush unless crashes take the data with them)
- make View/Rebuild --devel or -:d only
- fix continue_after_deletion in gslwavetool.c for i==n_chunks-1
- add tooltip and Filedialog-button to "WAVE File" entry
- big engine block sizes (>=1024) triggers sequencer race, causing clicks; in particular
  if (vinput->vstate == VSTATE_IDLE) g_printerr ("reading from idle\n"); in
  voice_input_module_process() holds true
- fix bse_gettext()
- report sample rate to stdout if it doesn't match requested rate exactly
- piano roll/align events: does insert notes with wrong cursor
- event roll: align events: outline colors don't honour skin colorization
- add author and license to procedure execution dialog
- fix repeat not working if left/right exchanged
- create one canonical place for supported sample formats and keep that updated
- make sample editor play stereo
- allow inverted synth-done (i.e. suitable for gate connecitons)
- add gate-out to ADSR
- default-initialize authors field of objects with user name
- evaluate elimination of seqid
- undo across midi file import is broken
- add clone tool for csynths
- fix undo for: BseDataPocket
- BseCategories need to provide an untranslated version (for menu paths)
- get rid of root_category in idl files once BseCategories has an untranslated version
- get rid of hardcoded server id (1) by means of an object-less procedure
- closing an app window stops playing songs, even if alternative views exist
- bsedefs.h should define _() only for BSE_COMPILATION
- fix procbrowser
- fix rack editor
- fix BseSong::denominator SpinButton arrows not working
- remove bstrack*.[hc] cruft, old parasites and data pocket
- allow parasite object links only within tree
- queue action updates upon grouped action execution 
- auto-connect viewable-changed to radget notebooks
- add one-shot property to gxk-radget-factories
- remove/rename test-string.bse
- introduce Volume() pspec type in idl files that the GUI can provide a dB slider for
- fix syndrum parameter scale
- upon project playback-stop, discard all pending events (at least note-on+note-off) on its midi receiver
- registering the same procedure twice triggers a g_warning()
- add new test song containing a wave track so the internal wave csynth is properly testet
- File/Open should merge if issued on an empty project
- move non-infrastructure synthesis modules out of the core into plugins/
- if Track::Synth is NULL, disconnect post-process-subsynth from track-context-merger
- add Solo propety to tracks
- add Volume property to tracks
- fix numerator/denomiator settings in songs
- fix glue gc assertion after sfi_glue_describe_proc("")
- add frequency splitter/multiplier module (plus cent-wise detune?)
- add frequency output module, offering bpm, 1/1 1/4 1/3 notes frequencies
- add sfisclock.h to sfi.h
- <mg> quick rfe based on 0.5.3: implement multiple selection in the wave loader file selector and have an add button that does not close the dialog
- rename gsl_strerror()
- get rid of bse_procedure_execvl
- get rid of super->mod_time
- don't always rebuild lib-list [Rebuild]-button
- fix name of BSE_SNET_FLAG_USER_SYNTH
- register drivers with categories
- fix gsl wave osc
- nuke SFI memblocks, malloc() is good enough
- master tune slider in preferences (kammer ton)
- bsemididevice-oss throws warnings when compiled without midi support
- MidiEvent (serialization)
- add IDs to part links in tracks
- fix uses of gsl_engine_tick_stamp_from_systime() in bstwaveeditor.c
- cleanup helper/util code in sfitype.h
- song->master volume doesn't affect anything
- sample chunk display should show note names not only midi notes
- support [-- Raw --- (big/little) (c=2) (mix=44100) (8/12/16/32) ---] box in wave loader dialog
- fix the word "tact" vs. measure
- need tact number entry widget
- fade in/out of samples in sample editor
- wave editor: provide transpose spinner for wave preview
- Time Counter: Measure,QuarterNote,SixteenthNote,3840ticks
- PianoRoll: when moving selecitons reaches the left border (tick 0), stop movement instead of clinching notes

WHISHLIST:
- beast should export .ly (lillypond) files
- beast should export .mid (MIDI) files

DOCS:
- fix urls in ChangeLogs ending up after .texi conversion as @uref{@uref{URLS}}
- Provide an "Architecture Overview" that describes how SFI, SFIDL, GSL, BSE,
  the engine, BSESH, Scheme, BSW, BEAST, GTK and GXK work together.
  rough outline: http://mail.gnome.org/archives/beast/2003-October/msg00007.html
- document choice<->enum conversion functions
- add text about MIDI realtime synthesis via external MIDI devices to beast overview paper
- rewrite bse-categories.txt as .texi and add to devel section of Help Index
- add tag to load/play bse files
- add QuickStart section on wave selection
- add QuickStart section on postprocessing effects
- add QuickStart section on piano roll usage, esp. copy+pasting
- add QuickStart-Samples docs once we support sample editing [timj]
- report mising underline to havoc, alper has a tsmview example in
  Re: uref macro, document font Date: Thu, 5 Dec 2002 00:23:38 +0200
- plugin-devel: mention possibility of deriving from BassFilterProperties() for expensive
  table etc. calculations
- automate uploading of images from docs/ to gtk.org:/web/beast/html/cvs-images/
WEB:
- webmenu indicators are wrong for inner submenu items, i.e.
  http://beast.gtk.org/historic.html has "v Historic" indicator,
  but http://beast.gtk.org/oldnews.html has "> Historic" indicator

MONITORING DIALOG:
* Frame "Thread Info"
- tree view
- THREAD Cpu% User Sys
- TOTAL  Cpu% User Sys
* Frame "Latency"
- tree view
- Effective Output Latency: xx.x ms   [same for Input]
  (Beast DSP Engine ---> Membrane)
  (Beast DSP Engine ---> Output Driver)

GarageBand ideas and concepts:
- MusikKeyboard:
                [|||||||||||||||||||IIIIIIIIIIII|||||||||||||||||||||||||] {GlobalKeyboard with Octave highlighted}
  Pitchbend: __ [1 (-)][2 (+)][3 off][4    ][5    ][6    ][7    ][8 max] Modulation {keys 3..8(highlighted key for seleciton)}
    [tab (sustain)] | [W][E] | [T][Z][U] | [O][P] |  |
                    |A |S |D |F |G |H |J |K |L |Oe|Ae|
                    +--+--+--+--+--+--+--+--+--+--+--+
        Octave: C-1   [Y-][X+][C-][V+] 127: Anschlag
        {OctaveRange: C-2..C0..C7}     {AnschlagRange: 1..127, Step:5}
   {Pitchbend slides between -20..0..20}                 
- Property editor with presets:
  [On/Off] {DisableFilter} [ Preset-OptionMenu{Ellipsis} v ] (LoaderProgressWheel)
    {... ordinary properties... }
  OptionMenu:	  Save Preset
             	  Delete Preset {insensitive for system presets}
             	--------------
             	  Manuell
             	--------------
             	  Alphabetically Sorted
             	* Preset List
             	  Z-Something
  Dialog for changing presets which replace manual settings:
    [?] The preset settings have been changed
        you may save the current presets or you can discard them.
        [x] ask again
        [save] [cancel] [discard]
- support multiple solo tracks (all solos play together)
- maybe allow hidden properties (GUI flag) show only for --devel (but saved/loaded presets)
- recording gui:
  * each track has recording knob (exclusively activated)
  * global recording knob: activates metronome, activates count in, inserts notes into current track (demand creates part)      
- global volume meter and slider
- MIDI notes are always played back with the current track (or track's instrument)    
    
TASKS:
- Preset implementation:
  - save per-module presets under ~/bse/presets/TypeName.bse
  - save BseSNet-wide presets by attaching serialized object state to objects (recursively) as generic data, using a string key (preset name)
- InstrumentPresets -- Stefan
  Instrument presets are a way to specify multiple useful parameter sets for one instruments.
  GUI:
    * in the SNet View, the user can edit the properties of the modules in the SNet - here, a new combo box is added where the user can choose between multiple parameter sets: presets
    * choosing a preset will set all properties in the SNet to the preset values
    * editing properties will switch the combo box to a new entry called "modified" (be consistent with ModulePresets? here)
    * modified presets can be saved over an existing preset in the combo box or to a new preset
    * modifying the SNet when there are already presets will try to do the least destructive operation to the presets, that is
          o adding a new module will add its default parameters to all presets: the user needs to check and possibly adapt all presets if he adds (and connects) new modules
          o removing a module will remove it from all presets
          o changing connections will change them in all presets
  Implementation details:
    * presets are implemented as parasite data, which is added to the modules in the SNet - that way, in an SNet with the Presets "A, B, C", each module will have three complete sets of parasite data specifying all values of all module properties
    * presets are always included into the SNet - there are no seperate "preset files" - instead, an SNet for which three presets are available will be one .bse file, containing all parasite data for all three presets
    * including an instrument into a Song will include all its presets into the Song
  Remarks:
    * for getting an even more intuitive interface to presets, the following things could be added:
          o a GUI editor, that allows the user to provide a GUI for a synthesis network
          o presets that work together with the GUI editor
    * however, as implementing this will take a lot of time, we decided to go with an easier approach to presets right now, and add the extensive version later
- TrackRoll: provide contextmenu for parts to set loopmarker to start/end
- InputDevices: use a webcam to extract 2D position, usable as e.g. filter input (filter input which changes rythm)
- TableSynth(note mapping): allow multiple synths and presets per
  track, configurable via table, e.g.:
  Note | Synth | Preset
  C-2  | Foo   | FooMetallic
  D-2  | Foo   | FooWooden
  E-2  | Bazzo | Default
  * note mapping link: http://arts-project.org/doc/handbook/mapped-instruments.html
- Project/Song: move project+song properties into an extra File->Properties dialog
- PianoRoll: allow editing parts from multiple tracks in a single window (syncronizing horizontal scroll position)
- support sequencer input from and to ALSA and JACK
- Icons: delete-track and delete-part shouldn't have the same item in track-roll
- Main: make beast recognize and view .markup files from the command line
- DocBrowser: Ctrl+'+' and Ctrl+'-' should change font sizes in doc browser
- DocBrowser: implement Playback facility in doc browser for .bse file links
- DocBrowser: try implementing some kind of table layout
- PatternEditor: load default keytable
- PatternEditor: implement last tick spinner
- PatternEditor: implement length and offset columns
- PatternEditor: allow inserting notes of different lengths
- PatternEditor: (interpolate) should interpolate values between start and end of a selection,
  regardless whether the selected column is a note or event
- PatternEditor: Ctrl+R (random) should insert random notes or events
- PatternEditor: background colors should be different (darker) every 4 and every 16 steps (maybe
  depending on measure)
- PatternEditor: selection, cut, copy, paste
- PatternEditor: marker for play position
- PatternEditor: play notes when inserted (also a piano roll TODO item); should be optional
- PatternEditor: channel based muting
- PatternEditor: allow combining multiple pattern editors (i.e. editing multiple parts which are
  played synchronously) spawned across multiple tracks - GUI idea: once selection in the track roll
  widget is implemented: select multiple parts, use right-mouse-button-menu, select pattern editor:
  combined view of those parts is opened
- PCM channel layout for 7.1 channels (alsa-lib/**/surround71.conf):
    chn0 - front left
    chn1 - front right
    chn2 - rear left
    chn3 - rear right
    chn4 - center
    chn5 - lfe
    chn7 - side left
    chn8 - side right
- Project: file open on an unmodified project should not open a new project window but
  reuse the existing one
- TrackRoll: implement copying of parts
- TrackRoll: implement selection and copy and paste of parts
- TrackRoll: the currently selected track should playback external MIDI Keyboard events
- Engine: skip ENGINE_NODE_LOCK() in master_process_locked_node() for singleproc
- let bst_key_combo_popup() display currently pressed modifiers
- let bst_key_combo_popup() tell the user to press a mouse button to abort
- CPU monitoring
- add facility to record MIDI control events
- implement an object clippboard
- freeverb bypass toggle
- add "bypass" option to audio output channels
- virtual MIDI keyboard
- fix tracks used only as modulation input (party-monster.bse)
- piano and track roll scrolling implemented with secondary scrollbar
- piano roll dialog gains partlink property editor
- implement humanizer note offsetting in sequencer, let the user specify randomization range
- support loading of Effects from Effect Library directory from a button in the router/rackview display
- add "Insert Property" menu to rack view which lists all objects and their proeprties hirachically
- object tree backbone/trunk/tribe type for project, server and workbench
- item_get_toplevel() function for toplevel parent quries
- proxies get exported: if toplevel->use_count>0
- backbones exist only if they have a use_count
- forcefull alive keeping of objects if they have a use_count
- how export proxies of parents that don't have a use_count and are no backbones?
- recode hpack and vpack uses
- emulate ref_count+::destroy semantics with use_count+::release? ala:
  - use_count prevents ::release emission
  - ::release on containers removes children
- implement remote use-count collection
- OPTIMIZE: optimize BseBalance process()
- GUI: XFrames should highlight like buttons in EDIT mode?
* eliminate everything that fgrep -i fixme/hack reveals
* move mix_freq and recording_freq into datahandle
* fix reversed data handle wrg n_channels
: propagate mtime changes through cascaded data handles (e.g. for dcache)
: gsldatacache.c: nuke blocks upon reopen if mtime changed
: clone handle caller must be fetched from stack

Instruments:
- a) support multiple signal paths in an instrument. (so there can be different effects in the paths)
- b) allow tabulation of what sample is played by what key through what signal path
- a+b) should allow: use different effects for different drum samples (overdrive snare, compress kick)
- a+b) should allow: split keyboard setup where one octave plays a completely different instrument than the next

PianoRoll:
- PianoRoll: add drum-roll mode where chunk labels are displayed (and note pictures change?)
- play notes when inserted into piano roll
- change piano roll dialog wrg GDK_Escape (ala trackroll)?
- cleanup piano tick bar
- portamento-to-note in piano roll? probably need special effects
- add to piano roll dialog:
  - part length (tact-entry)
  - part comment
- hotkey in piano roll to replay project
- hscrollbar resizable (like cubase) or last-tick + 1 tact
- ctrl+move should copy (DND style modifier)
- tooltip follows mouse and shows current note/tact
- hotkey fuer play song
- play notes upon insert (click on piano roll window)
- ctrl/shift modifiers for selection
- fix hscrollbar  (BsePart end position implementation)
- select loop for playback during editing

Snet Router:
- ctrl+move should clone objects (DND style modifier) 
- support selections for group moves
- add property editor dialog which contains intersection of properties from selected objects
- middle mouse button on canvas background should scroll

Grouping multiple Modules in Synth Router:
1. copy selected modules to a new CSynth
2. delete selected modules
3. add SubSynth instead of selected modules, which uses the new CSynth

TrackView:
- context menu with delete, move, insert (double click inserts?)

SClock:
- incremental sort for median
- calc non-linear slope in one go
- new clock type that switches to linear once >QUEUE_LENGTH

General BSE:
- object tree backbone/trunk/tribe type for project, server and workbench (treeroot storageroot)
- item_get_toplevel() function for toplevel parent queries
- level-o-meter visualizer at links (adjustable?)
  needs linear (red >1) and logarithmic display
- frequency shifter/multiplier (*2 etc.)
- fix fine-tune settings (from gsl)
- replace gsl_signal_exp2() with gsl_approx_exp2() and audio test result
- provide proper dB functions in GSL
- adjust stepping and type for all percentage settings
- alive keeping for waves which are removed, but whose index is in use?
- loading (restore) may only work when not playing (to keep consistency
  and avoid lock contentions during playback)
- during playback the instrument set needs to be fixed on a song  
- BSE_SOURCE_GET_CLASS (source)->remove_input() add GslTrans* so clear_input removes really in batches
- add pre-amplification (0..1) to freeverb for clip prevention
- fix scanner error messages for deferred channel resolution to include the *correct* line number
- fix update_suspension_state() recursion for ordinary cycles
- replace Balance settings with 3d room position?
- BseSubInstrument contains pixel artefact

Effects:
- BseTranspose: inputs: frequency, outputs: frequency, property: semitones
* BLIT, band-limited impulse train oscillator
- device monitor latency setting should be persistent in .bserc
- implement filters from http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txt
  (main source for http://zynaddsubfx.sourceforge.net)

SCRIPTS:
- PianoRoll: write script which resizes 0-length notes to 1/4 note or similar length (those notes occour from MIDI drum pattern imports)
- PianoRoll: add script to re-quantize piano-roll selections
- PianoRoll: implement horizontal flip selection script (does need horizontal seleciton boundary markers?)
- PianoRoll: implement vertical flip selection script (does need vertical seleciton boundary markers?)
- PatternEditor: transpose script (up and down by semitone, so that we can use an accelerator)
- TrackRoll: add script to repeat (loop) parts for a number of times in a track. allow repetition of part sequences (P1P2P1P2P1P2...)
- provide script to render bse file to WAV. then add File/Export function which:
  1) saves the current bse file, 2) renders the saved file to WAV with progress indication
- PianoRoll: transpose script, which has two parameters: up/down semitones and up/down octaves
             (maybe provide "light" versions to allow accelerator bindings)
- PianoRoll: script to lengthen/shorten notes, probably for the beginning a script which allows playing notes
             at half speed or double speed would be sufficient (the advantage is that it can be accelerator bound)

GSL:
  * sample loader currently hard codes 440.0 for osc_freq
    Person        S T
  - [stw/timj]    6 5 filter evaluate function (to draw graph)
  - [stw/timj]    7 3 2) development of gsl_osc_table_create() frequencies
  - [stw/timj]    4 4 3) PWM scaling
  - [stw/timj]    6 6 Filter boundary conditions?
                    Also, need 2stage filters with way smaller errors
                    Filter: Oppenheim Schaefer page.441 2stage filters implementation
                        (2stage pair finding by single (zero, pole) pair plus
                        conj. complex pair)
  - [timj]        2 9 API for lp/hp/bp/bs generation from array of roots and poles
                      (requires zero and poles with ->im != 0 to occour in
                      conjugated complex pairs)

  - [timj]        4   gsltests: change freq input, so that [0..1] => [0..pi]
  - [timj]        5   gsltest: swap epsilon and steepness params for t2* filters

AutoLooper:
- bsewavetool: fix thinout command to document the 4-halftone distance criteria and make it configurable
- bsewavetool: implement export command (writes chunk to wav with --duration <seconds> option to feature looping)
- bsewavetool: highpass command: add iorder parameters 
- bsewavetool: highpass command: specify "real" frequencies instead of PI-relative
- bsewavetool: implement lowpass command
- commit transfer function evaluator for filter FIR coefficients (done: near hp implementation -> needs to be moved to libbse)
- implement transfer function evaluator for filter IIR coefficients (done: in filtertest.cc -> needs to be moved to libbse)
- implement FIR sine-scanner for GSL
- implement high performance version of gsl_data_find_loop3() (by loop reordeing)
- implement oversampling version of high performance loop finder (with stepping to avoid fractional loops)
- google for 'liftering'
- read: DIGITISING THE SOUND OF THE ERHU
- read: Tempo and beat analysis of acoustic musical signals
- implement small fft window click detector to identify bad loop boundaries
- possible refinements:
  - half-side FFT caching
  - pregenerate 1000 possible loops for offline FFT selection
- create loop finder usage script:
  email: (From: Tim Janik, Subject: bsewavetool, Date: Fri, 3 Sep 2004 04:51:23 +0200)
- bsewavetool: make sfi_warning look nicer

sfidl:
  - there's no generic way to retrieve sequence pspecs with the hostc binding,
    e.g. compare beast-skin-config-v1 (record) to beast-msg-absorb-config-v1 (sequence)
  - remove cTypeField() from cbase
  - typeArg(), typeField(), typeRet() and typeArray() in sfidl-cbase.[hc]*
    must throw an assertion for unknown types
  - typeArg(), typeField(), typeRet() and typeArray() in sfidl-cbase.[hc]*
    should be moved into the non-base class that needs them (i.e. out of
    cbase)
80- handle Procedure {} namespace in namespacehelper
85- rename nspace.printableForm() to something that expresses namespace relativity
  - bse-plugin-generator: Effect->Property structure copies don't work for strings (merely a pointer copy)
    (at least SfiRec will probably not do a deep copy)
  - reenable signals in bseprocidl
  - error "bseamplifier.idl:71: error: double definition of 'Bse::Amplifier' as same type" should
    indicate where the previous definition was
  - support Neutral choice values, currently hardcoded for BseErrorType in bseprocidl
  - choice type should have validation function
  - handle non-validated sequences and records in generation code (things
    can be demarshalled in non-validated form after incompatible changes)
90- finish Sfidl::CodeGenerator::rename (relative naming)
  parser:
  - sfidl-parser.cc: property keyword should be nuked
  - clean up enum code to use ChoiceValue value or sequentialValue, without
    doing computations
  extensions:
  - signals should be specified in idl files (and have to be documentable)
  - sfidl --output=foo.cc should be implemented
  code generation:
    - extra namespace for C++ client code
  C language binding:
    - NULL pointer handling is broken
  C++ language binding:
    - defaults for records (should be fetched remotely ; missing type blurb)
      what's "remotely" for types generated by an in-thread host binding though?
    - serialization: can we _really_ only use a template thing?
65     => reorganization of the createTypeCode function
    - should objects _really_ be values?
    - bindings lack testing.
    - records in bseprocidl: how can we figure out the type?
    - dynamic invocation interface missing in C++ binding (properties, methods)
    - later: introduce iterators into sequences
66  - createTypeCode refactoring
      funcFromValue, funcToValue,
      codeVCallArgs

bseprocidl:
  - doesn't really work when it comes to implementing _some_ objects yourself

modules:
  pwm osc:
    - implement dht minphase reconstruction
    - implement remez
  vlen delay:
    - add interpolation examples as reference
  compressor:
    - curve widget
  arts:
    equalizer:
      - port me
  freeverb:
    - parameters are broken (it _says_ dB, but it definitely _is not_ dB)
    - parameters don't appear to change sound (bug?)
    - the category for freeverb should probably not be filters (enhance?)
  bseamplifier:
    - exponential controls should be expnential (bse_approx_qcircle4 is
      definitely better than what we have, but not good enough)

gui:
  general:
    - library proposal
    - small icons in toolbars
    - beautify icons
    - rack editor is missing
    - scheme console via xterm
  song:
    - hotkey to jump to loop marker
    - beast should not suggest to put instruments in postproc
    - starting beast with a .mid file should import it
    - theming for track view
    - parts in track view should be directly on top of the pixmap
    - parts should be colorizable
    - add: playback cursor follows song (like sweep does: with jumps)
    - track view and piano roll view should show proper numbers
    - when opening the instrument assignment dialog in the track view,
      after using the "load" button, the newly loaded instrument should
      be the default
  pianoroll:
    - Farbe fuer h (nicht blau), damit selektionen blau sein koennen
      bstpianoroll.c: "light blue"
    - add helper bars for c#,d#,f#,g#,a#, to provide alternate column
      shading like effect
    - make default velocity for pianoroll either 100 (since it might be useful
      if you have edited some notes, to make some individual notes louder,
      which is not possible if the default is already 127), or configurable
  snet router:
    - grid
    - theming for SNetRouter
    - beautify toolbar::channel_hints
    - non-transparent icons
    - more beautiful arrows (no line crossing)
    - die Bauelemente im SNetView sollten mehr aussehen wie Kloetze
    - support selection and cut/copy/paste in synth-edit view
  mixer:
    - looks broken on some gtk themes (button shading)
    - looks incoherent
    - lines in ledmeter

interop:
  portaudio driver:
    - fix JACK blocking interface in PortAudio
    - port arts driver from csl to port-audio
  native jack driver:
    - write it
    - maybe add a blocking API to JACK itself
    - make connection to JACK persistent, so that the client is visible all
      the time, and patchbays can be used in a sane way (with PortAudio,
      BEAST is only visible during playback, which is not useful for using
      qjackctl)
  ladspa:
    - provide a wrapper so that libbse plugins are available as LADSPA plugins
    - look at the RDF spec (or whatever meta data there is to get "more"
      information about what a LADSPA plugin does)
  dssi:
    - investigate implementing dssi support (client/host)
  midi:
    - provide midi output
    - provide midi recording
    - Bse::MidiEvent: should be wire-passable
    - maybe also add osc support

design instruments:
  pat support:
    - provide way to import timidity cfg files
    - .pat files need to be played with (ADSR or similar) volume envelope
    - .pat files loops are not respected if they are directly loaded
  samples:
    - korg samples
  synthesis:
    - design some

documentation:
 - C++ Classes _need_(!) documentation (i.e. Sfi::FBlock, Sfi::String) #333361
  - sfidl-manual.texi: complete the documentation
 - bsewavetool needs to be documented with documentation tool in the source code (at least gsl_data_find_loop*)

tests, bsefcompare:
- move tests from test directory into automated feature test dir                     [ 0.7.0, pending ]
- remove test directory                                                              [ 0.7.0, pending ]
- vibrato/tremolo - write testcases 4*v / 4*t (slow/fast) (strong/weak)
  
win32 port:
- beast --bse-driver-list freezes the windows system completely

oversampling:
- polish octave scripts
- have a look at 4*, 8*... oversampling
- plot de-facto filter coefficients
- does impulse response thingy work for 24bits?
- check why performance on one of my laptops (voyager) was so bad for SSE code
- add resampler documentation in synthesis-details.doxi (F.Fact2 rsmpling bstgnmorg) [ 0.7.0 ]

bseblockutils:
- write tests for bseadder / bsemult / bsesummation / bsebus to blockutils functions [ 0.7.0, pending ]
- port bseadder / bsemult / bsesummation / bsebus to blockutils functions            [ 0.7.0, pending ]

Misc Buglets/Feature Requests:
 - bseplugin.c doesn't use libtool properly ; probably gmodule should be ported to
   libtool
 - the midi importer doesn't create a master bus
 - silencing out an instrument (in drum maps) should be easier
 - bse_ftoi/bse_dtoi on AMD64 from glibc source
 - create a roadmap document for BEAST
 - implement fractional resampler (oversampling)
 - crashes    #340437    http://bugzilla.gnome.org/show_bug.cgi?id=340437            [ 0.7.0, pending ]
 - implement generic FIR eval (based on SIMD resampler code)

The MCD timeline says:
- soon:
 - davorgan c++
 - davxtalstrings transpose buggy [rc1]
 - other modules (like standard oscillator seem to be affected, too) [rc1]
 - submit 8 thread crasher
 - use debugging interface of g_slice for #340437
 - write script to repeatedly undo/redo random operations
 - use sweep for resampler test
- autolooper for wavetool
- man page for wavetool
- (1) drum kit
- (2) drum loops
- (3) bass instrument
- (4) bass line
- (5) lead instrument
- DavOrgan bug: make testcase
- DavOrgan bug: is blocksize dependant
* 0.7.1? (+ Hydrogen-DrumKit.bsewave?)
- complete GUS support:
  + quantize gus-patch playback error, decide what to do about gus patches (rip them?)
- start bse-data-gpl.tgz for GPL-only stuff
- complete jack treiber
* 0.7.2?
- scripting/cooperation with mma: http://users.xplornet.com/~bvdp/mma/

vim:set ts=8 sts=2 sw=2:
