Added reverse MIDI mapping - Alex
authorterminatorX <>
Mon, 25 Oct 2004 21:31:21 +0000 (21:31 +0000)
committerterminatorX <>
Mon, 25 Oct 2004 21:31:21 +0000 (21:31 +0000)
12 files changed:
terminatorX/ChangeLog
terminatorX/src/tX_engine.cc
terminatorX/src/tX_event.cc
terminatorX/src/tX_event.h
terminatorX/src/tX_flash.c
terminatorX/src/tX_ladspa.cc
terminatorX/src/tX_loaddlg.cc
terminatorX/src/tX_panel.cc
terminatorX/src/tX_seqpar.cc
terminatorX/src/tX_seqpar.h
terminatorX/src/tX_sequencer.cc
terminatorX/src/tX_vttgui.cc

index 6830822486f70153b36a7de1c28e7d30d5012979..ffdf0d0669605157a10ea07c1663e171f9c63673 100644 (file)
    Copyright (C) 1999-2004 Alexander K├Ânig
 
    Version 3.82 (unreleased) 
-     * in  order to have a SPAM protected online version of the ChangeLog
+     * fixed compilation issues with g++ >= 3.4.
+     * added reverse mapping of MIDI parameters which can be turned
+       on/off via the parameter menu. This allows setting up a MIDI
+       controller as a crossfader.
+     * in order to have a SPAM protected online version of the ChangeLog
        this document is now generated from XML sources.
      * merged a patch from Martin Habets
-       <errandir_news@mph.eclipse.co.uk>  that  fixes  big  endian  audio
+       <errandir_news@mph.eclipse.co.uk> that fixes big endian audio
        playback with ALSA.
-     * applied  a fix from Juha Erkkila <erkkila@cc.jyu.fi> that makes tX
+     * applied a fix from Juha Erkkila <erkkila@cc.jyu.fi> that makes tX
        work on systems that don't have procfs mounted.
-     * added  an  optional Dry/Wet control for all LADSPA plugins. Simply
-       click  on  the  plugin's  label  to  add  or remove the additional
+     * added an optional Dry/Wet control for all LADSPA plugins. Simply
+       click on the plugin's label to add or remove the additional
        control.
-     * added  an  additional  stereo  effects  queue  that allows loading
-       stereo  LADPSA  plugins.  The stereo effects are located below the
-       mono  effects - to add a new instance press the "Stereo FX" button
+     * added an additional stereo effects queue that allows loading
+       stereo LADPSA plugins. The stereo effects are located below the
+       mono effects - to add a new instance press the "Stereo FX" button
        and select the plugin of your choice.
-     * fixed  the  plugin  menu  -  empty categories no longer get a menu
+     * fixed the plugin menu - empty categories no longer get a menu
        entry
-     * plugins  that  do  not  qualify  as  realtime  capable will now be
+     * plugins that do not qualify as realtime capable will now be
        disabled.
-     * I'm  fed up with terminatorX related security postings, so the old
+     * I'm fed up with terminatorX related security postings, so the old
        suid-root method had to go. To achieve realtime scheduling you now
        have three options:
-          + a)  run  terminatorX  as  root  (obviously  dangerous and not
+          + a) run terminatorX as root (obviously dangerous and not
             recommended)
           + b) build terminatorX with capabilities enabled and install it
-            suid-root.  Due  to the use of PR_SET_KEEPCAPS this will work
+            suid-root. Due to the use of PR_SET_KEEPCAPS this will work
             on Linux _only_
-          + c)  use the JACK backend with "POSIX draft capabilities" (see
+          + c) use the JACK backend with "POSIX draft capabilities" (see
             jackd manpage)
      * Loading sets with missing LADPSA plugins no longer crash tX.
-     * Fixed  a  bug that made reading error messages impossible with the
+     * Fixed a bug that made reading error messages impossible with the
        load dialog open.
-     * The  engine  now handles audiodevices that break down when already
-       in  playback mode more gracefully. This really necessary when jack
+     * The engine now handles audiodevices that break down when already
+       in playback mode more gracefully. This really necessary when jack
        decides to kick us out.
-     * All  vu  meters  are stereo now. Having a mono widget for a stereo
+     * All vu meters are stereo now. Having a mono widget for a stereo
        thing just didn't make any sense anymore.
-     * modified  the  render loop to comply with LADSPA V1.1: 0 db is now
-       at  1.0f.  This  makes a lot of plugins work with terminatorX that
+     * modified the render loop to comply with LADSPA V1.1: 0 db is now
+       at 1.0f. This makes a lot of plugins work with terminatorX that
        haven't worked with previous releases.
-     * data   send   to   the   JACK   backend   no   goes   through  the
+     * data send to the JACK backend no goes through the
        "Anti-Clip-Device", too. Unless you #define TX_DO_CLIP of course.
-     * I've  drawn  some  new  icons  with the cool inkscape. They're now
-       being  built into terminatorX as gdk-pixbuf c-source code, so they
+     * I've drawn some new icons with the cool inkscape. They're now
+       being built into terminatorX as gdk-pixbuf c-source code, so they
        actually do alpha blending.
-     * Wrote  support for gtk+'s new FileChooser widget - will be enabled
+     * Wrote support for gtk+'s new FileChooser widget - will be enabled
        automatically when configure finds a gtk+ >= 2.4.0
-     * Fixed  the buffer overflows detected by c0wboy <c0wboy@tiscali.it>
+     * Fixed the buffer overflows detected by c0wboy <c0wboy@tiscali.it>
        in his outsiders-terminatorX-001.txt advisory.
      * Support for gtk+ startup notification.
      * "README.GNOME" was outdated so it had to go.
-     * merged  parts  of  a  patch  graciously  contributed  by Adam King
+     * merged parts of a patch graciously contributed by Adam King
        <aking@lgh.com.au>
           + Simpler min/maximization for the control panels
           + Bugfix for sequencer menu crash
-          + The  panel  formally  known  as  "Trigger"  is  now  known as
+          + The panel formally known as "Trigger" is now known as
             "Playback">
      * added cpu-overload detection - currently disabled
 
    Version 3.81
-     * JACK  doesn't  seem to like SCHED_FIFO clients so I added a little
+     * JACK doesn't seem to like SCHED_FIFO clients so I added a little
        test that will set SCHED_OTHER when jack output was selected. This
        will work for true root or a capabilities-enabled suid-root binary
        only.
-     * removed  the  disfunctional "Cancel" button from the load-progress
+     * removed the disfunctional "Cancel" button from the load-progress
        dialog.
-     * switched   default  MIDI  mapping  to  non-destructive.  (previous
+     * switched default MIDI mapping to non-destructive. (previous
        settings will not be overwritten now).
      * added a default MIDI mapping accessible via the "Turntables" menu.
        The actual mapping is documented in the manual.
-     * fixed  a  bug that caused enabling sync-client setting via MIDI to
+     * fixed a bug that caused enabling sync-client setting via MIDI to
        fail.
-     * when  compiled  with  rt-scheduling  suppport terminatorX will now
+     * when compiled with rt-scheduling suppport terminatorX will now
        display the resulting scheduling policy in the "About" dialog.
-     * if  terminatorX  was  setup to use realtime priority for the audio
-       engine  thread  but you dont want it - disable realtime scheduling
+     * if terminatorX was setup to use realtime priority for the audio
+       engine thread but you dont want it - disable realtime scheduling
        in the Preferences dialog. This works with capabilities _ONLY_.
-     * if  you  don't  want to confirm program termination every time you
+     * if you don't want to confirm program termination every time you
        can now disable "Ask for Quit confirmation" in the Preferences.
-     * added  support  for  Linux'  POSIX  capabilities.  This  allows  a
-       suid-root  installed  terminatorX  binary  to drop root privileges
-       much  earlier  than  with  the  old approach (so it should be more
+     * added support for Linux' POSIX capabilities. This allows a
+       suid-root installed terminatorX binary to drop root privileges
+       much earlier than with the old approach (so it should be more
        secure). Requires the libcap library.
-     * obligatory  documentation  updates  - clicking on the sub-sections
+     * obligatory documentation updates - clicking on the sub-sections
        should now work.
-     * removed  gtk+  1.2  cruft - terminatorX now compiles with gtk+ 2.2
-       and  *_DISABLE_DEPRECATED  macros  enabled. To verfiy that you can
+     * removed gtk+ 1.2 cruft - terminatorX now compiles with gtk+ 2.2
+       and *_DISABLE_DEPRECATED macros enabled. To verfiy that you can
        run configure with --disable-deprecated.
-     * terminatorX  now has a JACK backend. Currently it works like this:
-       on  startup  tX will connect to the JACK daemon - if the daemon is
-       not  available  on  startup JACK output is not available. When the
-       audio  engine  is turned off, tX emits silence via the JACK ports,
+     * terminatorX now has a JACK backend. Currently it works like this:
+       on startup tX will connect to the JACK daemon - if the daemon is
+       not available on startup JACK output is not available. When the
+       audio engine is turned off, tX emits silence via the JACK ports,
        so you can leave the ports connected.
-     * sick  of  green  -  you  can  now configure the colors terminatorX
-       should  use  for the audio display as well as the vu meters in the
+     * sick of green - you can now configure the colors terminatorX
+       should use for the audio display as well as the vu meters in the
        Preferences dialog.
-     * hopefully  fixed  wrong  setting of the master volume when loading
+     * hopefully fixed wrong setting of the master volume when loading
        set files.
-     * some  ALSA  installations seem to core on snd_pcm_hw_params_free()
-       after  sound  device  init.  So  freeing  the hw_params can now be
-       explicitly  disabled  in  the Preferences - if terminatorX crashes
+     * some ALSA installations seem to core on snd_pcm_hw_params_free()
+       after sound device init. So freeing the hw_params can now be
+       explicitly disabled in the Preferences - if terminatorX crashes
        right after hitting the "Power On" button it might be necessary to
        activate this for your ALSA setup. This probably results in a tiny
        memory leak - but on leak vs core you might decide for leak. Note:
        I even enabled the leak by default now.
-     * fixed  a  bug that caused turntable 1 to get the focus on entering
+     * fixed a bug that caused turntable 1 to get the focus on entering
        Mouse Grab mode even when it's audio panel was minimized.
-     * MIDI  mappings  can  now  have "bounds", meaning that the incoming
+     * MIDI mappings can now have "bounds", meaning that the incoming
        MIDI signals can modify the parameter within the given range only.
-     * introduced  a new way of assigning MIDI controllers to parameters:
-       simply  right-click  on  a  parameter's control: a menu with "MIDI
+     * introduced a new way of assigning MIDI controllers to parameters:
+       simply right-click on a parameter's control: a menu with "MIDI
        Learn" and "Remove MIDI Binding" will pop up - select "MIDI Learn"
        and send the corresponding MIDI event.
-     * fixed  a  bug  in  the  MIDI  callback  thanks  to  David Hamilton
+     * fixed a bug in the MIDI callback thanks to David Hamilton
        <daham2@student.monash.edu>
      * running suid root (the old way) was reported exploitable by Andrew
-       Griffiths  <andrewg@felinemenace.org>  - the described environment
-       variable  based  exploit  was  fixed  - however there are possibly
-       other  ways  to exploit it. So the old method of running suid root
-       has  been  disabled by default. On Linux systems you really should
+       Griffiths <andrewg@felinemenace.org> - the described environment
+       variable based exploit was fixed - however there are possibly
+       other ways to exploit it. So the old method of running suid root
+       has been disabled by default. On Linux systems you really should
        use the capabilities based approach (see above). If really want to
-       use    the    old    suid-root   solution   run   configure   with
+       use the old suid-root solution run configure with
        --enable-suidroot.
-     * often,  you  record  events  and mess things up - in this case I'd
+     * often, you record events and mess things up - in this case I'd
        often prefer dropping the complete take instead of recording a bad
-       perfomance  -  which is why you now can activate "Confirm Recorded
-       Events"  from  the "Sequencer" menu. When enabled terminatorX will
-       ask  whether to actually record or drop the events created for the
-       last   take.   The  setting  for  this  flag  is  stored  in  your
+       perfomance - which is why you now can activate "Confirm Recorded
+       Events" from the "Sequencer" menu. When enabled terminatorX will
+       ask whether to actually record or drop the events created for the
+       last take. The setting for this flag is stored in your
        ~/.terminatorXrc.
-     * introduced  a new "Sequencer" menu that allows to delete events of
+     * introduced a new "Sequencer" menu that allows to delete events of
        a specific type (all, all for certain turntable, all for a certain
-       parameter)  from  the  sequencer.  Events  can  be deleted for the
-       complete  song, upto the current song position or from the current
-       song  position.  Yeah,  I  know,  termintorX  is  lacking a proper
+       parameter) from the sequencer. Events can be deleted for the
+       complete song, upto the current song position or from the current
+       song position. Yeah, I know, termintorX is lacking a proper
        event-editor here, so where's your patch? ;)
-     * switching  the  X11  mouse  cursor  when  the user has to wait for
+     * switching the X11 mouse cursor when the user has to wait for
        terminatorX to finish some operation
-     * fixed  a  sequencer  bug:  the  events for master pitch and volume
+     * fixed a sequencer bug: the events for master pitch and volume
        weren't erased correctly when another set was loaded
      * fixed FreeBSD issues with the configure script
      * fixed compilation issues for gcc 2.95.x
 
    Version 3.80
-     * I've  invested  quite some time in valgrinding this release, among
+     * I've invested quite some time in valgrinding this release, among
        other things a major mem leak showed up - the sample memory wasn't
-       being  free'd  correctly  which  is  now corrected along with many
+       being free'd correctly which is now corrected along with many
        other things. valgrind is a very helpful tool indeed.
-     * Added  a  new Pitch Calculator that allows adjusting a turntable's
-       pitch  to  that  of the master turntable. This makes synchronizing
+     * Added a new Pitch Calculator that allows adjusting a turntable's
+       pitch to that of the master turntable. This makes synchronizing
        finely cut loop samples really easy
      * XML based set files can get rather huge when they contain a lot of
        sequencer events - to solve this terminatorX now uses zlib to save
        compressed set files if enabled in the preferences dialog.
-     * I  hacked  support  for Steve Harris' cool liblrdf - if you've got
-       that  library setup correctly and you use Steve's wonderful plugin
+     * I hacked support for Steve Harris' cool liblrdf - if you've got
+       that library setup correctly and you use Steve's wonderful plugin
        collection with RDF description you should get a nicely structured
        menu when clicking on the "FX" button. All plugins not categorized
        through RDF files go to the "Unclassified" category.
-     * I'm  no  longer including the html and ps versions of the manual -
+     * I'm no longer including the html and ps versions of the manual -
        it's now attached in it's XML/DocBook source and will be installed
-       via  scrollkeeper.  terminatorX  offers  a  menu  entry  to  start
+       via scrollkeeper. terminatorX offers a menu entry to start
        gnome-help to display the manual.
      * Reworked the Preferences dialog - I now use glade-2 to create that
-       code  -  I'm  fed up with copy'n'pasting gtk+ code so now I'll let
-       glade-2  do  this  whereever possible. The glade project files are
+       code - I'm fed up with copy'n'pasting gtk+ code so now I'll let
+       glade-2 do this whereever possible. The glade project files are
        included with this tarball in case you want to mess with them.
-     * Switched  to  a fixed blocksize (1 ms) for rendering. This finally
+     * Switched to a fixed blocksize (1 ms) for rendering. This finally
        allows to playback set files with events recorded on machines with
-       small  buffer  sizes on slow machines with large buffer sizes. The
-       buffersize  of  the  audiodevice  has no effect on the "operating"
-       blocksize  anymore. Note that the samlping rate has a - very small
-       -  effect  though. Depending on the sampling rate terminatorX will
-       try  to  find  a  blocksize that fits exactly 1 ms - while this is
-       easy  for  "straight"  sampling  rates  (22000  32000  48000) this
+       small buffer sizes on slow machines with large buffer sizes. The
+       buffersize of the audiodevice has no effect on the "operating"
+       blocksize anymore. Note that the samlping rate has a - very small
+       - effect though. Depending on the sampling rate terminatorX will
+       try to find a blocksize that fits exactly 1 ms - while this is
+       easy for "straight" sampling rates (22000 32000 48000) this
        results in "44.1" samples for 44100 Hz.
-     * Finally  hacked  a  native ALSA backend. It's in "Works For Me" TM
+     * Finally hacked a native ALSA backend. It's in "Works For Me" TM
        state.
      * Added "Remove Binding" button
-     * MIDI  now  uses a GIOCallback so the effect of MIDI controllers is
+     * MIDI now uses a GIOCallback so the effect of MIDI controllers is
        visible even without the audio engine turned on.
-     * Reworked   the  mastergui  for  better  usabilty  and  less  space
-       consumption,  yes,  terminatorX  now  features  a boring menubar -
-       which  helps using it on small displays quite a bit, and should be
+     * Reworked the mastergui for better usabilty and less space
+       consumption, yes, terminatorX now features a boring menubar -
+       which helps using it on small displays quite a bit, and should be
        easier to handle for first-time users.
-     * Implemented      a      suggestion     from     Darrick     Servis
-       <darrick@dcn.davis.ca.us>   that   stops  clipping  in  the  mixer
+     * Implemented a suggestion from Darrick Servis
+       <darrick@dcn.davis.ca.us> that stops clipping in the mixer
        routine. The outgoing signal is now limited as it should be, which
        improves the output quality for signals too loud significantly.
      * MIDI mappings are now stored within the (new) tX set files.
-     * Applied  a  patch from Arthur Peters <amp@singingwizard.org> which
-       brings  preliminary  MIDI support to terminatorX. This is realized
-       via  the  ALSA  sequencer interface, so in order for it to compile
-       you  have  to  have the ALSA devel packages installed. ./configure
+     * Applied a patch from Arthur Peters <amp@singingwizard.org> which
+       brings preliminary MIDI support to terminatorX. This is realized
+       via the ALSA sequencer interface, so in order for it to compile
+       you have to have the ALSA devel packages installed. ./configure
        will autodetect them.
      * Fixed a bug in XML serialization that dropped strings' contents.
-     * You  can  now hit "F11" to turn fullscreen mode on/off - this will
+     * You can now hit "F11" to turn fullscreen mode on/off - this will
        help using terminatorX on small DJ laptops. Note that the key will
-       have  no  effect  in  scratch  mode - hit it before you enter grab
+       have no effect in scratch mode - hit it before you enter grab
        mode. This feature requires a NETWM compliant window manager.
-     * terminatorX  now  stores  set  files  as  XML  documents, too - so
-       terminatorX  has become terminatorXML finally. Note: for sets with
-       a  large  number  of  events recorded into the sequencer - the XML
-       based  set  files  can  grow significally larger than the old ones
+     * terminatorX now stores set files as XML documents, too - so
+       terminatorX has become terminatorXML finally. Note: for sets with
+       a large number of events recorded into the sequencer - the XML
+       based set files can grow significally larger than the old ones
        (see "compression" above)
-     * The  old  code  to support the obsolete binary tX file formats has
-       now  been  scheduled  for  deletion.  It's  been  moved  into  the
-       tX_legacy*   source   files   and  it  will  be  built  only  when
-       "--enable-legacy"  was  used  on configuring terminatorX (which is
-       the  default).  Expect  this  to  become disabled and then totally
+     * The old code to support the obsolete binary tX file formats has
+       now been scheduled for deletion. It's been moved into the
+       tX_legacy* source files and it will be built only when
+       "--enable-legacy" was used on configuring terminatorX (which is
+       the default). Expect this to become disabled and then totally
        removed from the sources in future.
-     * Enhanced  audio  data  display  -  you can now zoom into the audio
-       signal,  which  should  allow  much  more  precise scratching with
-       larger  audio  files (ie complete tracks). On playback terminatorX
-       will  scroll  the displayed area to ensure you always see the area
+     * Enhanced audio data display - you can now zoom into the audio
+       signal, which should allow much more precise scratching with
+       larger audio files (ie complete tracks). On playback terminatorX
+       will scroll the displayed area to ensure you always see the area
        of the sample in which you're currently scratching on.
-     * I  have  not backported the new code to the old gtk+ 1.2 - so this
-       release  no  longer  builds with gtk+ 1.2 - you have to upgrade to
+     * I have not backported the new code to the old gtk+ 1.2 - so this
+       release no longer builds with gtk+ 1.2 - you have to upgrade to
        gtk+ Version 2 to be able to build terminatorX.
-     * fixed  a  nasty  gcc  3.2  compilation  bug  - thanks to Adam Duck
+     * fixed a nasty gcc 3.2 compilation bug - thanks to Adam Duck
        <duck@informatik.uni-frankfurt.de> and other reporters
 
    Version 3.73
      * Fixed a compilation bug ocurring on big endian systems only.
-     * Fixed  the  built-in  wav  loading routines for big endian systems
+     * Fixed the built-in wav loading routines for big endian systems
        (again).
-     * Finally  traced  down and fixed a long outstanding bug in the dial
+     * Finally traced down and fixed a long outstanding bug in the dial
        widget, the background of the dials is now drawn correctly.
-     * Ported  terminatorX  to  gtk+ Version 2. The code for gtk2 will be
-       enabled  when  gtk2 is detected by configure. To force terminatorX
-       to  use  the  good  old  gtk  1.2.x  (x>=5) run configure with the
-       '--disable-gtk2'  switch. WARNING: gdkxft-users: gtk2 applications
-       segfault  when  preloading  libgdk_xft.so! So unset LD_PRELOAD and
+     * Ported terminatorX to gtk+ Version 2. The code for gtk2 will be
+       enabled when gtk2 is detected by configure. To force terminatorX
+       to use the good old gtk 1.2.x (x>=5) run configure with the
+       '--disable-gtk2' switch. WARNING: gdkxft-users: gtk2 applications
+       segfault when preloading libgdk_xft.so! So unset LD_PRELOAD and
        set GDK_USE_XFT=1 instead.
      * Applied a patch from Adrian that brings lots of new stuff:
-          + Debian  package support (removed - Mike Furr now maintains an
+          + Debian package support (removed - Mike Furr now maintains an
             official Debain package for terminatorX)
           + enhanced GNOME integration
           + a manpage for terminatorX
-     * Included    another    gcc3    fix    thanks   to   Gregor   Riepl
+     * Included another gcc3 fix thanks to Gregor Riepl
        <seto-kun@freesurf.ch>>
      * Improved configure's compatibilty - it should detect pthreads more
-       reliably   and   it   should   detect  ladspa.h  when  located  in
-       /usr/local/include  without  /usr/local/include being contained in
+       reliably and it should detect ladspa.h when located in
+       /usr/local/include without /usr/local/include being contained in
        the include path.
-     * This  release  should  compile  and  run  on  FreeBSD  systems and
-       possibly  OpenBSD,  too.  Thanks for help and testing this goes to
+     * This release should compile and run on FreeBSD systems and
+       possibly OpenBSD, too. Thanks for help and testing this goes to
        Tilman Linneweh <tilman@arved.de> .
-     * Sequencer  now  refuses  to  play  when  no events available - and
+     * Sequencer now refuses to play when no events available - and
        displays a dialog that suggests running the audio engine.
      * De-uglified the terminatorX note dialog.
      * Fixed gtk+2 signals for load file dialog
        audio panels can be minimized to.
      * Cleaned up the turntables' audio panel for better looks and easier
        usage
-     * Rewrote  the  engine  thread completely - unlike before the engine
+     * Rewrote the engine thread completely - unlike before the engine
        thread is created on startup and kept alive until termination.
-     * terminatorX  can now be run suid root - and it might even be safe.
-       After  creating  the  engine  thread both terminatorX threads drop
-       root    privileges    before    evaluating   any   parameters   or
-       reading/writing  files,  etc.  The problem is the pthread "manager
-       thread"  is  out of control of terminatorX code - so I cannot tell
+     * terminatorX can now be run suid root - and it might even be safe.
+       After creating the engine thread both terminatorX threads drop
+       root privileges before evaluating any parameters or
+       reading/writing files, etc. The problem is the pthread "manager
+       thread" is out of control of terminatorX code - so I cannot tell
        that thread to drop privileges.
      * Fixed Drag'n'Drop for GNOME 2
      * To enhance the loading of audiofiles terminatorX now contains code
-       to  use  mad  (MPEG  Audio  Decoder),  libvorbis  and libaudiofile
-       directly  instead  of pipeing audio data through mpg123, ogg123 or
+       to use mad (MPEG Audio Decoder), libvorbis and libaudiofile
+       directly instead of pipeing audio data through mpg123, ogg123 or
        sox. As a result the new routines bring following advantages:
           + tX loads audiofiles significantly faster
-          + tX  now  honours the samplerate of an audiofile (by adjusting
+          + tX now honours the samplerate of an audiofile (by adjusting
             the pitch of the turntable)
           + tX provides much better feedback on the loading progress
-       Although  the  old  loading-methods are still available (and piped
-       loading  has been improved, too) I highly recommend installing the
+       Although the old loading-methods are still available (and piped
+       loading has been improved, too) I highly recommend installing the
        libraries above as the new routines simply work better.
-     * Deleted   tons   of   old   outdated   code  in  tX_engine.cc  and
+     * Deleted tons of old outdated code in tX_engine.cc and
        tX_mastergui.cc
 
    Version 3.72
-     * Applied  a  patch  from  Matthew Evans <activesx@hotmail.com> that
+     * Applied a patch from Matthew Evans <activesx@hotmail.com> that
        introduces support for Ogg Vorbis audiofiles. It requires ogg123 >
-       RC2  and  sox  to  work.  Autodetection is supported via configure
+       RC2 and sox to work. Autodetection is supported via configure
        (--enable-ogg123).
      * Experimental support for input devices other than the core-pointer
        under XFree86 > 4. This uses the xsetpointer executable that comes
-       with  XFree86. configure should autodetect this correctly, in case
+       with XFree86. configure should autodetect this correctly, in case
        it doesn't use the --enable-xetpointer switch.
      * Adrian sent me a patch introducing two new buttons: mute and solo.
        As it didn't fully harmonize with the sequencer I rewrote parts of
-       it  and added new functionality to the turntables: They can now be
-       switched  to  mix_solo or mix_mute - these settings affect current
-       mixing  only - their values will neither be saved nor will changes
-       to  those  control  be  recorded in the sequencer - if you want to
-       record   muting  events  either  use  the  mute  button  from  the
-       turntable's  trigger  menu, the keyboard short-cuts (alt/strg), or
+       it and added new functionality to the turntables: They can now be
+       switched to mix_solo or mix_mute - these settings affect current
+       mixing only - their values will neither be saved nor will changes
+       to those control be recorded in the sequencer - if you want to
+       record muting events either use the mute button from the
+       turntable's trigger menu, the keyboard short-cuts (alt/strg), or
        your middle mouse button.
      * fixed a bug that produced corrupt wavfiles on big endian machines
-     * some  minor  fixes  to  make  terminatorX  compile  with newer gcc
+     * some minor fixes to make terminatorX compile with newer gcc
        releases
-     * Well,  I am allowed to change my mind, aren't I? Anyway, 3DNow! is
-       back.  Nevertheless  newer  gcc  releases  seem  to  have a bug in
-       handling  movq  and  the current 3DNow! stereo implementation does
-       not  seem  to be very efficient. So use --enable-3dnow only if you
+     * Well, I am allowed to change my mind, aren't I? Anyway, 3DNow! is
+       back. Nevertheless newer gcc releases seem to have a bug in
+       handling movq and the current 3DNow! stereo implementation does
+       not seem to be very efficient. So use --enable-3dnow only if you
        want to help me improve perfomance.
-     * Modified  the  mpg123 loader in order to make it work with mpg321,
-       too.  mpg321  lacks  support  for mpg123's -m switch ("singlemix")
-       therefor  mpg?2?'s  output  is  now  piped into sox to convert the
+     * Modified the mpg123 loader in order to make it work with mpg321,
+       too. mpg321 lacks support for mpg123's -m switch ("singlemix")
+       therefor mpg?2?'s output is now piped into sox to convert the
        signal to mono. For this reason mpg?2? support now requires sox to
        be installed, too.
-     * added  a  workaround  for a gtk+ bug that causes empty labels when
-       strings  contain umlauts - unluckily my name features one of these
+     * added a workaround for a gtk+ bug that causes empty labels when
+       strings contain umlauts - unluckily my name features one of these
        so I had to write this workaround.
 
    Version 3.71
-     * applied  a  big  patch  from Adrian Reber <adrian@lisas.de> . This
+     * applied a big patch from Adrian Reber <adrian@lisas.de> . This
        patch includes:
           + compile fixes for the newer gcc releases
           + enhancements to the commandline switches (try --help for more
             details)
-     * the  bigNewThang  (TM)  is  STEREO  output.  The  Pan-Buttons  now
-       actually  do  what  you'd expect them to. Therefore your soundcard
+     * the bigNewThang (TM) is STEREO output. The Pan-Buttons now
+       actually do what you'd expect them to. Therefore your soundcard
        must have stereo support of course but I guess in 2001 this really
-       shouldn't  be  a problem, right? The recorded wavfiles will now be
-       stereo  wavfiles  of  course. Note that stereo output means double
-       audio-bandwith,  so  if  you  tuned  your old terminatorX setup to
+       shouldn't be a problem, right? The recorded wavfiles will now be
+       stereo wavfiles of course. Note that stereo output means double
+       audio-bandwith, so if you tuned your old terminatorX setup to
        smallest latency you might get clicks now. You can easily fix this
-       by  increasing the buffer size in the options dialog by one - this
+       by increasing the buffer size in the options dialog by one - this
        will result in the same latency as before btw.
      * The echo effect has undergone some enhancements to profit from the
        new stereo output. It's signal will now be mixed seperately so you
-       can  choose  a  different  stereo  panorama  position for the echo
-       signal.  So  the  new  echo effect now features it's own PAN-knob.
-       This  does  have some sideeffects though, for more details on this
-       check  the  manual.  Additionally the echo effect now has it's own
+       can choose a different stereo panorama position for the echo
+       signal. So the new echo effect now features it's own PAN-knob.
+       This does have some sideeffects though, for more details on this
+       check the manual. Additionally the echo effect now has it's own
        volume setting to influence the dry/wet ratio of this effect.
      * Some LADSPA effects tend to create NAN (Not A Number) float values
-       under  certain conditions. This is bad as all following operations
+       under certain conditions. This is bad as all following operations
        will result in NANs, so there will be no audio output no more. Now
-       I  will not introduce code to check for NANs as this is a waste of
-       CPU-power,  producing  NANs  is IMHO a faulty behaviour for LADSPA
-       plugins  and  it  should be fixed in there. Now a problem with the
+       I will not introduce code to check for NANs as this is a waste of
+       CPU-power, producing NANs is IMHO a faulty behaviour for LADSPA
+       plugins and it should be fixed in there. Now a problem with the
        previous release was that the echo and lowpass effects "ate" those
-       NANs  resulting  in  NANs in those effects' buffers. So once a NAN
-       got  in  there these effects caused the whole audio output to mute
-       (forever).  Which  is  why I now introduced some code to clear the
+       NANs resulting in NANs in those effects' buffers. So once a NAN
+       got in there these effects caused the whole audio output to mute
+       (forever). Which is why I now introduced some code to clear the
        buffers in echo and lowpass whenever you dis- and reenable them.
-     * The  GUI does have two master vu-meters now. The turntable's still
-       have  one  vu-meter  only.  Note  that  the  echo-signal  is *not*
-       included   in   the   turntable's  vu-meter  now,  as  it's  mixed
+     * The GUI does have two master vu-meters now. The turntable's still
+       have one vu-meter only. Note that the echo-signal is *not*
+       included in the turntable's vu-meter now, as it's mixed
        seperately.
-     * The  3DNow!-Optimizations  are  gone.  And they'll proabably never
-       come  back  as  I  don't  have time to maintain the same algorithm
+     * The 3DNow!-Optimizations are gone. And they'll proabably never
+       come back as I don't have time to maintain the same algorithm
        twice.
      * The documentation has been updated to meet the new features. A lot
        of typos have been fixed as well.
 
    Version 3.70
      * this list may be incomplete
-     * This  release brings support for LADSPA plugins. These plugins can
+     * This release brings support for LADSPA plugins. These plugins can
        be inserted into any turntable's effect chain at any position. You
-       can  edit  the  the effect sequence with the two tiny blue arrows.
-       The  builtin  effects  reside  in  the same effect chain as LADSPA
-       plugins,  but  unlike  LADSPA  plugins they cannot be removed (nor
-       multi-instanciated).  The  LADSPA  plugins  have to "fit" into the
-       effect  chain,  which  is  why terminatorX supports *mono* plugins
-       (plugins  that have one audio-in and one audio-out port) only. For
+       can edit the the effect sequence with the two tiny blue arrows.
+       The builtin effects reside in the same effect chain as LADSPA
+       plugins, but unlike LADSPA plugins they cannot be removed (nor
+       multi-instanciated). The LADSPA plugins have to "fit" into the
+       effect chain, which is why terminatorX supports *mono* plugins
+       (plugins that have one audio-in and one audio-out port) only. For
        the plugin's control ports, termintatorX supports all HINTS except
-       for  LADSPA_HINT_LOGARITHMIC.  Some control ports might be hard to
+       for LADSPA_HINT_LOGARITHMIC. Some control ports might be hard to
        handle as LAPDSA control ports can have very wide value ranges. It
        is possible to enter precise values though. Get LADSPA and the CMT
-       plugins    from    http://www.ladspa.org.   All   parameters   for
-       LADSPA-plugins  are  "sequencable  parameters",  so you can record
-       parameter-change  events  for  the  plugin's knobs just as for the
+       plugins from http://www.ladspa.org. All parameters for
+       LADSPA-plugins are "sequencable parameters", so you can record
+       parameter-change events for the plugin's knobs just as for the
        standard parameters.
-     * GUI    re-design    to    support   dynamic   plugin   GUIs.   The
-       audiofile-display  is now seperated from the turntable's controls.
-       The  groups  are  split in to panels which can be minimized if not
-       required  (orange  arrow).  The  panels'  minimized-status will be
-       saved  within  the  set  files.  To  add  a plugin effect into the
-       turntables  effect  chain click on the "FX"- button and choose the
-       plugin  of  your  choice.  To  get more info on the plugin effects
-       click  on  their  panel's  label. NOTE: The panning-control is not
+     * GUI re-design to support dynamic plugin GUIs. The
+       audiofile-display is now seperated from the turntable's controls.
+       The groups are split in to panels which can be minimized if not
+       required (orange arrow). The panels' minimized-status will be
+       saved within the set files. To add a plugin effect into the
+       turntables effect chain click on the "FX"- button and choose the
+       plugin of your choice. To get more info on the plugin effects
+       click on their panel's label. NOTE: The panning-control is not
        working yet. It'll work as soon as stereo is done.
      * As always when introducing something new, the set-file file-format
        has changed.
-     * The  parameter-to-mouse-axis mapping has been moved from hardcoded
-       to  dynamic.  You  can  now  map  any  parameter that's considered
-       "mappable"  to  the  mouse-axis of your choice (for each turntable
+     * The parameter-to-mouse-axis mapping has been moved from hardcoded
+       to dynamic. You can now map any parameter that's considered
+       "mappable" to the mouse-axis of your choice (for each turntable
        separately). This is true for the control ports of LADSPA-plugins,
        too.
-     * Josh  Steiner <joschi@eds.org> has joined terminatorX development.
-       For  this  release  he  has  added  some  startup  parameters  for
-       terminatorX,  some  of  them  aiming  for future MIDI support, and
-       therefor  not functional yet. Run "terminatorX --help" to get more
+     * Josh Steiner <joschi@eds.org> has joined terminatorX development.
+       For this release he has added some startup parameters for
+       terminatorX, some of them aiming for future MIDI support, and
+       therefor not functional yet. Run "terminatorX --help" to get more
        details.
-     * I  know  write  the  "manual"  in  SGML  with the DocBook DTD. The
-       distribution  contains  the HTML and the postscript version. These
-       transformation   have   been  created  using  James  Clark's  jade
-       (DSSSL-processor)   and   Norman  Walsh's  DSSSL  stylesheets  for
+     * I know write the "manual" in SGML with the DocBook DTD. The
+       distribution contains the HTML and the postscript version. These
+       transformation have been created using James Clark's jade
+       (DSSSL-processor) and Norman Walsh's DSSSL stylesheets for
        DocBook.
      * Removed obsolete "number of vtts"-option from the options dialog.
-     * Applied  a patch from Josh that fixes running the soundfile editor
+     * Applied a patch from Josh that fixes running the soundfile editor
        for files including a blank in their filename.
      * New tooltips for the complete GUI.
 
    Version 3.61 (unreleased) 
-     * applied     a     tiny     patch     from     Atsushi     Yamagata
+     * applied a tiny patch from Atsushi Yamagata
        <yamagata@plathome.co.jp> to set locale on startup.
 
    Version 3.60
-     * terminatorX  has a sequencer now. Warning: with the current design
-       the  sequencer  will correctly play back recorded events only when
-       the  buffer  size (of the audio device) is set to the same size as
-       it  was  when  recording the events. I know this is annoying and I
-       will  try  to  find  a solution to this. Please take a look at the
+     * terminatorX has a sequencer now. Warning: with the current design
+       the sequencer will correctly play back recorded events only when
+       the buffer size (of the audio device) is set to the same size as
+       it was when recording the events. I know this is annoying and I
+       will try to find a solution to this. Please take a look at the
        README to find out how the sequencer works.
      * fixed a bug causing the lowpass filter produce a constant signal
      * fixed the load file / drag'n'drop segfault bug
      * fixed the prelisten zombie processes bug
-     * fixed  the  segfault  on  termination  bug  (with the audio engine
+     * fixed the segfault on termination bug (with the audio engine
        running)
-     * hacked  the  mixer  code  to  use 3DNow! too. This improves 3DNow!
-       performance  gain  from previously ~6% to more than 20% (depending
+     * hacked the mixer code to use 3DNow! too. This improves 3DNow!
+       performance gain from previously ~6% to more than 20% (depending
        on compiler optimizations)
      * extended the set-file-format to allow storing of sequencer events.
        This release allows loading old tX-sets too.
-     * some  gui  icons. Choose Text/Icon / Icon only / Text only display
+     * some gui icons. Choose Text/Icon / Icon only / Text only display
        of these icons in the Options dialog. You'll have to restart tX to
        see the changes though.
-     * "soundfile-editor  support":  Enter  the  soundfile-editor of your
-       choice  in  the  tX-Options  dialog  (Still looking for an editor?
-       Checkout     Dave's     Linux     Sound     and     MIDI    Pages:
+     * "soundfile-editor support": Enter the soundfile-editor of your
+       choice in the tX-Options dialog (Still looking for an editor?
+       Checkout Dave's Linux Sound and MIDI Pages:
        http://www.bright.net/~dlphilp/linuxsound/). Click the edit button
-       in  the  Main-Panel  to  start  your  editor  with the turntable's
+       in the Main-Panel to start your editor with the turntable's
        soundfile - edit ;) - save and click the reload button.
      * big endian bug fixes by Scott C. Knight <scknight@indiana.edu>
      * --enable-benchmark will now produce a benchmark binary. This takes
-       a  set  file  as a parameter (that set file should autotrigger all
-       tables,  else  the benchmark will measure how fast tX can generate
+       a set file as a parameter (that set file should autotrigger all
+       tables, else the benchmark will measure how fast tX can generate
        zeros ;) WARNING: the benchmark binary is not a usable terminatorX
        binary.
-     * a  new dial-widget. I created this for the upcoming GUI-redesign -
-       and  decided  I let you debug it right now ;) If you don't want it
+     * a new dial-widget. I created this for the upcoming GUI-redesign -
+       and decided I let you debug it right now ;) If you don't want it
        run configure with the --disable-dial switch.
-     * some  gui  redesign.  The volume scales are now located near their
-       corresponding  "flash"-widget.  This  release fits into very small
+     * some gui redesign. The volume scales are now located near their
+       corresponding "flash"-widget. This release fits into very small
        windows - so it should be usable on smaller displays as well.
-     * Adrian  told  me  configure  doesn't  have to check for glib after
+     * Adrian told me configure doesn't have to check for glib after
        checking for gtk+ - I guess he's right so the glib-test has gone.
      * more minor fixes
 
    Version 3.55
-     * implemented  "sequenceable  parameters"  (see  tX_seqpar.*).  This
-       means  the  groundwork  for  the  sequencer is done. Although this
+     * implemented "sequenceable parameters" (see tX_seqpar.*). This
+       means the groundwork for the sequencer is done. Although this
        release does not yet feature a sequencer - there's still a profit:
-       you  can  now  see  the  GUI (e.g. the lowpass-freq slider) update
+       you can now see the GUI (e.g. the lowpass-freq slider) update
        while you change that value with your mouse in dga grab mode (e.g.
        up/down with the default X/Y-Control settings).
      * fixed (libmmx) mmx.h to work with gcc 2.95 and above
-     * fixed  compilation problems for big endian machines. still runtime
+     * fixed compilation problems for big endian machines. still runtime
        probs reported though.
-     * fixed  configure-script  as  the  new  bash  complains about == in
+     * fixed configure-script as the new bash complains about == in
        string compares
      * fixed some gui segfaults
-     * added   an   ugly  GNOME-mimetype  installer.  This  installs  the
+     * added an ugly GNOME-mimetype installer. This installs the
        ".tX"-mime type, an terminatorX-application icon and a ".tX"-icon.
-       I  could  use some hints on how I could make automake install that
+       I could use some hints on how I could make automake install that
        instead of an extra script. (see README.GNOME)
      * added Drag'n Drop support. Works with the great gmc. Drop an audio
-       file  over the filename-button or the wavdisplay of a turntable to
-       load  it  into  that  table.  Drop  an  audiofile  over  the  "Add
-       Turntable"  Button  to  create  a new turntable and load that file
+       file over the filename-button or the wavdisplay of a turntable to
+       load it into that table. Drop an audiofile over the "Add
+       Turntable" Button to create a new turntable and load that file
        into that turntable. Drop a tX-set file over the "Load Set" button
        to load the set.
 
    Version 3.51
-     * fixes  the  load_piped()  compilation error if you use neither sox
-       nor  mpg123.  Note that you have no "pre-listening" without mpg123
+     * fixes the load_piped() compilation error if you use neither sox
+       nor mpg123. Note that you have no "pre-listening" without mpg123
        for mp3s and no "pre-listening" for any other file without sox.
 
    Version 3.5
-     * Yet   another   redesign  ;)  Oh  well  this  project  moved  from
-       c++/multithreaded  to  c++/singlethreaded,  to c/multithreaded and
-       now,  finally,  back  to  c++/multithreaded. This shows quite some
+     * Yet another redesign ;) Oh well this project moved from
+       c++/multithreaded to c++/singlethreaded, to c/multithreaded and
+       now, finally, back to c++/multithreaded. This shows quite some
        foresight, I'd say ;)
-     * Due  to  the redesign I had to change a lot (everything?) again so
+     * Due to the redesign I had to change a lot (everything?) again so
        this document can impossibly hold all changes. but let's see:
-     * tX  now  uses  floats  instead of doubles for a lot of parameters.
-       Therefore    the    old    .terminatorXrc.bin    is   now   called
-       .terminatorX3rc.bin  to  allow parallel use of older releases. But
-       you'll  have to configure the new release again the first time you
+     * tX now uses floats instead of doubles for a lot of parameters.
+       Therefore the old .terminatorXrc.bin is now called
+       .terminatorX3rc.bin to allow parallel use of older releases. But
+       you'll have to configure the new release again the first time you
        run it.
-     * tX  now  supports an unlimited no of turntables. The only limit is
+     * tX now supports an unlimited no of turntables. The only limit is
        your display really.
      * Each of these turntables has their own pitch / volume settings and
        a dedicated lowpass and echo effect section.
-     * You  can  now  map  mouse  motion  to  a  function  of your choice
+     * You can now map mouse motion to a function of your choice
        (scratching/ volume/cutoff/echo-feedback and nothing)
      * Recording will now happen straight to disk. You'll have to specify
        a filename before you start recording.
      * You can sync the turntables to one master turntable.
-     * There  are  two  master settings for pitch and volume available to
-       modify  all  turntables.  The  turntable  pitch is relative to the
+     * There are two master settings for pitch and volume available to
+       modify all turntables. The turntable pitch is relative to the
        master pitch.
-     * You  can save a complete set (of turntables and settings) to a .tX
+     * You can save a complete set (of turntables and settings) to a .tX
        set file. The audiofile data will *not* be saved within that file,
        but it'll contain the absolut filename to these files. I know this
-       makes  the  act of exchanging sets over the net more complex so if
+       makes the act of exchanging sets over the net more complex so if
        somebody wants to code set files with integrated audio data... ;)
      * The way audiofiles are loaded has been redesigned too: the builtin
-       wav  routines, the sox support and mpg123 are no longer connected.
-       This  means  you  can  use  mpg123 support without sox support and
-       still  have  the  builtin  wav  routines  enabled. If you have the
-       builtin  wav  reader  and  sox enabled, tX will try try to use the
-       builtin  routines  first,  and  if they fail sox will be used as a
-       fallback  which  is  of  course slower as you know... There's some
-       support  for  Benno  Senoner's  brilliant 3.2-mmap() patch but the
+       wav routines, the sox support and mpg123 are no longer connected.
+       This means you can use mpg123 support without sox support and
+       still have the builtin wav routines enabled. If you have the
+       builtin wav reader and sox enabled, tX will try try to use the
+       builtin routines first, and if they fail sox will be used as a
+       fallback which is of course slower as you know... There's some
+       support for Benno Senoner's brilliant 3.2-mmap() patch but the
        patch still needs to be ported.
      * You can now select which parameter to map to a mouse axis.
      * experimental 3DNow! support (works with gcc < 2.95 only)
      * tX-windows now have an icon, thanks Michael!
 
    Version 3.2
-     * implemented  2D-Scratching  ;)  You  can now use the other axis of
-       your  mouse  two modify the cutoff frequency of the lowpass filter
-       (if  enabled).  The  resonance  factor  can  be set via the slider
-       underneath  "LP  Filter".  Seems  to  eat  quite  some  CPU  power
+     * implemented 2D-Scratching ;) You can now use the other axis of
+       your mouse two modify the cutoff frequency of the lowpass filter
+       (if enabled). The resonance factor can be set via the slider
+       underneath "LP Filter". Seems to eat quite some CPU power
        though...
      * Updated THANKS, AUTHORS
      * as most people seem to use sox/mpg123 anyway and as I still get "I
-       want  mp3"  emails I changed the configure script slightly: It now
-       automatically  enables  the  use  of  sox  and mpg123 if these are
-       available.  If  you  still  want  'em  good old 16Bit/44.1Khz/Mono
-       builtin  routines  you  have to specify --enable-wavonly with your
+       want mp3" emails I changed the configure script slightly: It now
+       automatically enables the use of sox and mpg123 if these are
+       available. If you still want 'em good old 16Bit/44.1Khz/Mono
+       builtin routines you have to specify --enable-wavonly with your
        configure cmdline.
-     * Prepared  the  tarball  for the Win32 port. You can now compile tX
-       with  cygwin  and  the Makefile.cygwin in the src directory if you
-       have  all  the required libs (gtk, pthreads etc...). The resulting
-       exe  will run BUT is completely unusable for now... Stou Sandalski
-       <tangui@cell2000.net>  and I are planning to make it usable in the
+     * Prepared the tarball for the Win32 port. You can now compile tX
+       with cygwin and the Makefile.cygwin in the src directory if you
+       have all the required libs (gtk, pthreads etc...). The resulting
+       exe will run BUT is completely unusable for now... Stou Sandalski
+       <tangui@cell2000.net> and I are planning to make it usable in the
        future.
-     * The  About-Dialog  now  contains  some  info on how the binary was
+     * The About-Dialog now contains some info on how the binary was
        compiled
 
    Version 3.1
-     * Optimized  audio-rendering  code  for  speed  (might  run  on some
-       machines  with smaller buffsize (-> lower latency) than pre-3.1) -
-       Hey,  tX now uses less than 10% CPU (says kpm) with mixing enabled
+     * Optimized audio-rendering code for speed (might run on some
+       machines with smaller buffsize (-> lower latency) than pre-3.1) -
+       Hey, tX now uses less than 10% CPU (says kpm) with mixing enabled
        on my i586-200MMX machine!!
-     * "fixed"   stdout-output.   Due   to  the  pipe-buffering  realtime
+     * "fixed" stdout-output. Due to the pipe-buffering realtime
        schratching can not be considered usable for now :(
-     * Added  config  option  --enable-scheduler,  which  will  cause the
-       terminatorX  engine-thread  to run with FIFO scheduling policy and
-       highest  priority.  This might enable some machines to use smaller
-       buffsizes.  It  requries  root  privileges  though  -  either  run
+     * Added config option --enable-scheduler, which will cause the
+       terminatorX engine-thread to run with FIFO scheduling policy and
+       highest priority. This might enable some machines to use smaller
+       buffsizes. It requries root privileges though - either run
        terminatorX as root - or make terminatorX suid root WHICH IS A BAD
-       IDEA  FOR  MULTI-USER SYSTEMS IF OTHER USERS CAN ACCESS THE BINARY
-       ;)  You  only  have to think about this when you experience buffer
+       IDEA FOR MULTI-USER SYSTEMS IF OTHER USERS CAN ACCESS THE BINARY
+       ;) You only have to think about this when you experience buffer
        underruns with your desired latency. And it might not even help...
-     * Rehacked  the  de-clicking  (fading) code. The old one tried to be
-       much   more  intelligent  -  and  failed  fading  out  the  signal
-       sometimes.  The new code is much simpler (faster) and is much more
+     * Rehacked the de-clicking (fading) code. The old one tried to be
+       much more intelligent - and failed fading out the signal
+       sometimes. The new code is much simpler (faster) and is much more
        reliable.
-     * added  common  sense  to the warp feature (f-key in scratch mode).
-       The  warping  speed is still connected to the mouse speed but it's
-       now  adjusted to the sample size as well: you can warp through any
+     * added common sense to the warp feature (f-key in scratch mode).
+       The warping speed is still connected to the mouse speed but it's
+       now adjusted to the sample size as well: you can warp through any
        sample completely with the same mouse distance.
-     * added  debug  configure  switch. Enables (very few) debug messages
+     * added debug configure switch. Enables (very few) debug messages
        for now. I decided not to enable the old V2.X messages as they are
        sent to stdout, which would sound pretty strange to people who use
        the stdout-option.
 
    Version 3.02
      * Fixed Adrian's name in the THANKS file. Sorry, Adrian.
-     * Corrected  Makefile.am  for license.c that did not build correctly
+     * Corrected Makefile.am for license.c that did not build correctly
        on some systems - Thanks to Michael Pruett
        <mikep@ugcs.caltech.edu>
 
    Version 3.01
-     * fixed  a bug that caused terminatorX to crash without --enable-sox
+     * fixed a bug that caused terminatorX to crash without --enable-sox
        or mpg123input.
 
    Version 3.0
      * new mouse-sampling code now uses DGA's DirectMouse
      * implemented "initalizing"-support for XInput devices.
      * new (alpha) "pre-listening" feature in scratch/loop dialogs
-     * hacked  vtt  for  click-free  audio. Might be problematic with big
-       kernel  level  buffersizes  but scratching with big buffsize is no
+     * hacked vtt for click-free audio. Might be problematic with big
+       kernel level buffersizes but scratching with big buffsize is no
        fun anyway.
-     * options  are  now stored in ~/.terminatorXrc.bin automatically (on
+     * options are now stored in ~/.terminatorXrc.bin automatically (on
        exit) as well as windowsize and the last used filenames
-     * terminatorX  now  comes with a configure script - no more Makefile
+     * terminatorX now comes with a configure script - no more Makefile
        hacking required (nor a good idea ;) )
      * new wavdisplay-widget update frequency is now configureable
-     * new  position-display  is  much  more  visible  which  allows more
+     * new position-display is much more visible which allows more
        precise scratching
-     * new  mute-feature  allows  you  to  silence  the  scratch-playback
-       completely  while  the loop keeps playing (press either <m>-key or
+     * new mute-feature allows you to silence the scratch-playback
+       completely while the loop keeps playing (press either <m>-key or
        right mouse-button.
      * support for mouse buttons:
           + 1. (left) button: same as <SPACE>, do scratch
           + 2. (right) button: mute scratch
           + 3. (middle) button: stop
      * wrote support for sox and mpg123. This enables terminatorX to read
-       close  to  any  audiofile.  You  need to have sox and mp3 and this
-       feature   (as   it  is  still  alpha)  needs  to  be  enabled  via
+       close to any audiofile. You need to have sox and mp3 and this
+       feature (as it is still alpha) needs to be enabled via
        configure-switches see INSTALL
      * licmak now is an awk script. Thanks Christian! I was also received
-       two  perl  scripts (Thanks, guys!) but I now use the awk script as
+       two perl scripts (Thanks, guys!) but I now use the awk script as
        it is the smallest.
      * introduced <F>-key to "warp" through scratch-sample (just check it
        out)
 
    Version 2.3
      * wavfile overreading fixed by Andrew C. Bul+hac?k <acb@zikzak.net>
-     * Using  portable  type definitions now where required. If you don't
-       have  a  <sys/types.h> on your system and your machines type sizes
-       equal  those  of an X86-machine you can specify -DUSE_X86_TYPES in
+     * Using portable type definitions now where required. If you don't
+       have a <sys/types.h> on your system and your machines type sizes
+       equal those of an X86-machine you can specify -DUSE_X86_TYPES in
        Makefile to compile without <sys/types.h>
      * Slight change in audiodevice-handling that fixes improper buffsize
        settings on some soundcards (e.g. GUS)
-     * Implemented  "keep  device  open"-feature. Needs to be enabled via
+     * Implemented "keep device open"-feature. Needs to be enabled via
        the -DKEEP_DEV_OPEN switch in Makefile
      * Added some comments to the Makefile for easier editing
-     * Added  Big Endian support. Use -DBIG_ENDIAN_MACHINE for big endian
-       hosts   like   ultrapenguin   suns  or  linux  ppc.  There's  also
-       -DBIG_ENDIAN_AUDIO   for   big   endian   audio  hardware  (rare?)
+     * Added Big Endian support. Use -DBIG_ENDIAN_MACHINE for big endian
+       hosts like ultrapenguin suns or linux ppc. There's also
+       -DBIG_ENDIAN_AUDIO for big endian audio hardware (rare?)
        available, although proabably nobody will need this.
-     * Changed  mix  behaviour:  Mix  is  now  automatically turned on on
-       startup  if  the  user has specified a proper loop file. (with the
+     * Changed mix behaviour: Mix is now automatically turned on on
+       startup if the user has specified a proper loop file. (with the
        --loop or -l switch)
-     * New  mixing  routine.  You  can now set the loop to scratch volume
+     * New mixing routine. You can now set the loop to scratch volume
        ratio with the cursor keys (left/right). If you modify the volumes
-       while  recording  these  action's  will  not  be  recorded. Saving
+       while recording these action's will not be recorded. Saving
        happens with the currently set level.
      * Fixed README-Bug said <m> instead of <x>
 
      * added commandline options and help (on usage and keys)
      * added raw/mixed save scratch feature
      * added licmak to include license into binary
-     * new  handling  of  XAutoRepeat,  only  turned  off  now when SPACE
+     * new handling of XAutoRepeat, only turned off now when SPACE
        pressed
-     * modified  wave  display  (faster  +  nicer  + incorrect (who cares
+     * modified wave display (faster + nicer + incorrect (who cares
        anyway))
      * Makefile fixed by Adrian Reber <adrian@lisas.de>
      * bug fixes
index 7593166ae65e89f0d58aaf83c955fd31196565af..b178c5c90f3a9bdac84507c93504c387538075b2 100644 (file)
@@ -178,7 +178,6 @@ void tX_engine::loop() {
 
 void *engine_thread_entry(void *engine_void) {
        tX_engine *engine=(tX_engine*) engine_void;
-       int result;
        
 #ifdef USE_SCHEDULER
        pid_t pid=getpid();
@@ -194,7 +193,6 @@ void *engine_thread_entry(void *engine_void) {
                        tX_debug("engine_thread_entry(): set SCHED_FIFO via capabilities.");
                }
        }
-       int policy=0;
 #endif //USE_SCHEDULER
                
 #ifdef USE_JACK
index ea2d3d878060e7534f0006af1ac59c02832df396..cfa14263fc6adb417a1da5acf8ebb3cbfc071381 100644 (file)
@@ -48,7 +48,7 @@ tX_event* tX_event :: load_event (xmlDocPtr doc, xmlNodePtr node) {
        sp=tX_seqpar::get_sp_by_persistence_id(sp_persistence_id);
        
        if (sp) {
-               event=new tX_event(sp, timestamp, value);
+               event=new tX_event(timestamp, sp, value);
        } else {
                tX_error("failed to resolve event at %i - pid [%i]. Event lost.", timestamp, sp_persistence_id);
        }
index 1733bff71ee78edfd76a6c6b464988b90bc128b4..63875fd59636eff067c4ae60da61299405f35a86 100644 (file)
 class tX_event
 {
        private:
-       float                   value;
        guint32                 timestamp;
        tX_seqpar               *sp;
+       float                   value;
        
        public:
-       tX_event(guint32 time, float val, tX_seqpar *sp_in) {
-               timestamp=time;
-               value=val;
-               sp=sp_in;
-       }
-       
+       tX_event(guint32 time, tX_seqpar *sp_in, float val) : 
+               timestamp(time),sp(sp_in),value(val) {}
+
 #ifdef ENABLE_TX_LEGACY                
        tX_event(FILE *input);
 #endif         
        static tX_event* load_event(xmlDocPtr, xmlNodePtr);
-       tX_event(tX_seqpar *p, guint32 t, float v) : sp(p),timestamp(t),value(v) {}
        
        void store(FILE *rc, gzFile rz, char *indent);
 
index 9d8d52283bd63b4ed712f37476bf6bd37ae6f812..fe6fa584d7957c909865149b7250f516172a38a5 100644 (file)
@@ -339,15 +339,11 @@ static void gtk_tx_flash_set_channel_level(GtkTxFlash *tx_flash, f_prec new_valu
 void gtk_tx_flash_set_level(GtkWidget *widget, f_prec left_channel, f_prec right_channel)
 {
        GtkTxFlash *tx_flash;
-       gint i, y;
-       int new_level;
-       int red=0;
        
        g_return_if_fail (widget != NULL);
        g_return_if_fail (GTK_IS_TX_FLASH (widget));
        
        tx_flash = GTK_TX_FLASH (widget);
-       //printf("flash %08x: setting levels: %f, %f\n", tx_flash, left_channel, right_channel);        
        
        gtk_tx_flash_set_channel_level(tx_flash, left_channel, &tx_flash->channel[0]);
        gtk_tx_flash_set_channel_level(tx_flash, right_channel, &tx_flash->channel[1]);
index f5a21a15eb4042f7ecede0e878ef73aba8ca35b8..9bef933cbf0a7b52d1376aec7044444dbd60e11d 100644 (file)
@@ -83,12 +83,12 @@ void LADSPA_Plugin :: handlelib(void *lib, LADSPA_Descriptor_Function desc_func,
        
        for (i=0; (descriptor = desc_func(i)) != NULL; i++) {           
                if (LADSPA_IS_INPLACE_BROKEN(descriptor->Properties)) {
-                       tX_plugin_warning("Plugin \"%s\" [%i] disabled: No in-place processing support.", descriptor->Label, descriptor->UniqueID);
+                       tX_plugin_warning("Plugin \"%s\" [%li] disabled: No in-place processing support.", descriptor->Label, descriptor->UniqueID);
                } else if (!LADSPA_IS_HARD_RT_CAPABLE(descriptor->Properties) && !globals.force_nonrt_plugins) {
-                       tX_plugin_warning("Plugin \"%s\" [%i] disabled: Not realtime capable.", descriptor->Label, descriptor->UniqueID);
+                       tX_plugin_warning("Plugin \"%s\" [%li] disabled: Not realtime capable.", descriptor->Label, descriptor->UniqueID);
                } else {
                        if (!LADSPA_IS_HARD_RT_CAPABLE(descriptor->Properties)) {
-                               tX_warning("Plugin \"%s\" [%i] is classified as non-rt capable: loading forced.", descriptor->Label, descriptor->UniqueID);
+                               tX_warning("Plugin \"%s\" [%li] is classified as non-rt capable: loading forced.", descriptor->Label, descriptor->UniqueID);
                        }
                        in_audio=0; out_audio=0; in_ctrl=0;
                
@@ -106,7 +106,7 @@ void LADSPA_Plugin :: handlelib(void *lib, LADSPA_Descriptor_Function desc_func,
                        } if ((in_audio == 2) && (out_audio == 2)) {
                                new LADSPA_Stereo_Plugin(descriptor, filename);
                        }
-                       else { tX_plugin_warning("Plugin \"%s\" [%i] disabled: Neither mono nor stereo.", descriptor->Label, descriptor->UniqueID); }
+                       else { tX_plugin_warning("Plugin \"%s\" [%li] disabled: Neither mono nor stereo.", descriptor->Label, descriptor->UniqueID); }
                }
        }
 }
index 4424ceab48858181d6612727ff8929d001df9f06..01ff2512c6835529c188bcaddeb35fd486ce85d2 100644 (file)
@@ -56,10 +56,9 @@ gfloat ld_old_prog;
 int ld_create_loaddlg(int mode, int count)
 {
        GtkWidget *vbox=gtk_vbox_new(0, 5);
-       GtkWidget *actionarea;
        GtkWidget *dummy;
        
-       if (ld_loaddlg) return(1);
+       if (ld_loaddlg) return 1;
        
        ld_mode=mode;
        ld_count=count;
@@ -74,8 +73,6 @@ int ld_create_loaddlg(int mode, int count)
        gtk_widget_set_size_request(vbox, 400, -1);
        gtk_widget_show(vbox);
        
-       //gtk_widget_show(ld_loaddlg);
-               
        if (mode==TX_LOADDLG_MODE_MULTI) {
                ld_multi_l=gtk_label_new("Loading Set");
                gtk_misc_set_alignment(GTK_MISC(ld_multi_l), 0.5, 0.5);
@@ -97,7 +94,6 @@ int ld_create_loaddlg(int mode, int count)
        add_widget_fix(ld_single_p);
 
        gtk_window_set_modal(GTK_WINDOW(ld_loaddlg), TRUE);
-       //gtk_window_set_default_size(GTK_WINDOW(ld_loaddlg), 400, 100);
        gtk_widget_realize(ld_loaddlg);
        gdk_window_set_decorations(ld_loaddlg->window, (GdkWMDecoration) 0);
        gtk_widget_show(ld_loaddlg);
index 68ad7f5f5dfe627914e75c9bc5d08248b46b89c5..85ff7bce45e3296a0415cba9c09f38233ee36658 100644 (file)
@@ -62,7 +62,6 @@ void tX_panel_make_label_bold(GtkWidget *widget) {
 
 tX_panel :: tX_panel (const char *name, GtkWidget *par)
 {
-       GtkWidget *pixmap;
        client_hidden=0;
        
        container=par;
index bacbc2dfc2c42eb79437c9a4d899e50c707fb397..cef6e88ee853cb0519f8cda004b26d4deeee3cf3 100644 (file)
@@ -54,6 +54,7 @@ tX_seqpar :: tX_seqpar () : bound_midi_event()
        
        midi_lower_bound_set=false;
        midi_upper_bound_set=false;
+       reverse_midi=false;
 }
 
 void tX_seqpar :: set_mapping_parameters(float max, float min, float scale, int mappable)
@@ -107,11 +108,18 @@ void tX_seqpar :: handle_midi_input( const tX_midievent& event )
                        default:
                                return;
                }
+               
+               if (reverse_midi) tmpvalue=(max-tmpvalue)+min;
 
                if (tmpvalue>max) tmpvalue=max;
                else if (tmpvalue<min) tmpvalue=min;
        } else {
                tmpvalue=event.value;
+               
+               if (reverse_midi) {
+                       if (tmpvalue>0) tmpvalue = 0;
+                       else tmpvalue = 1;
+               }
        }
        
        touch();
@@ -277,7 +285,17 @@ void tX_seqpar :: restore_meta(xmlNodePtr node) {
                buffer=(char *) xmlGetProp(node, (xmlChar *) "midiNumber");
                if (buffer) { sscanf(buffer, "%i", &bound_midi_event.number); }
                else { tX_error("no midiNumber for seqpar %s", this->get_name()); }
-       } 
+       }
+       
+       buffer=(char *) xmlGetProp(node, (xmlChar *) "midiReverse");
+       if (buffer) {
+               if (strcmp("true", buffer)==0) {
+                       reverse_midi=true;
+               } else {
+                       reverse_midi=false;
+               }
+       }
+               
        /* else: no MIDI init.... */
 }
 
@@ -297,7 +315,7 @@ void tX_seqpar :: store_meta(FILE *rc, gzFile rz) {
                        case tX_midievent::NRPN: type="nrpn"; break;
                        default: type="error";
                }
-               sprintf(buffer, "id=\"%i\" midiType=\"%s\" midiChannel=\"%i\" midiNumber=\"%i\"", persistence_id, type, bound_midi_event.channel, bound_midi_event.number);
+               sprintf(buffer, "id=\"%i\" midiType=\"%s\" midiChannel=\"%i\" midiNumber=\"%i\" midiReverse=\"%s\"", persistence_id, type, bound_midi_event.channel, bound_midi_event.number, (reverse_midi ? "true" : "false"));
        } else {
                sprintf(buffer, "id=\"%i\"", persistence_id);
        }
@@ -1057,6 +1075,23 @@ gboolean tX_seqpar::tX_seqpar_press(GtkWidget *widget, GdkEventButton *event, gp
 #else
                gtk_widget_set_sensitive(item, FALSE);
 #endif
+
+               item = gtk_check_menu_item_new_with_label("Map MIDI Reversed");
+               gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+               gtk_widget_show(item);          
+
+               if (sp->bound_midi_event.type==tX_midievent::NONE) {
+                       gtk_widget_set_sensitive(item, FALSE);
+               }
+               
+               gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), sp->get_reverse_midi());
+               
+#ifdef USE_ALSA_MIDI_IN
+               g_signal_connect(item, "activate", (GCallback) tX_seqpar::reverse_midi_binding, sp);            
+#else
+               gtk_widget_set_sensitive(item, FALSE);
+#endif
+
                
                item = gtk_menu_item_new_with_label("Remove MIDI Binding");
                gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
@@ -1144,6 +1179,12 @@ gboolean tX_seqpar::tX_seqpar_press(GtkWidget *widget, GdkEventButton *event, gp
 }
 
 #ifdef USE_ALSA_MIDI_IN
+gboolean tX_seqpar::reverse_midi_binding(GtkWidget *widget, gpointer data) {
+       tX_seqpar *sp=(tX_seqpar *) data;
+       sp->set_reverse_midi(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
+       
+       return TRUE;
+}
 
 gboolean tX_seqpar::remove_midi_binding(GtkWidget *widget, gpointer data) {
        tX_seqpar *sp=(tX_seqpar *) data;
index 2e51cffe39b75524a747412d41f42e06398f5065..bb6b0f670332ab26f7f68dd7ed177dcc47cc249c 100644 (file)
@@ -58,18 +58,13 @@ class tX_seqpar
        float fwd_value;
        
        guint32 persistence_id;
-       guint32 touch_timestamp;                
+       guint32 touch_timestamp;
+       bool reverse_midi;
        void *last_event_recorded;
        
        public:
        /* default constructor */
        tX_seqpar();
-       /* to initialize with a vtt 
-       tX_seqpar(void *); */
-       /* to initialize with mapping settings */
-       /* tX_seqpar(float max, float min, float scale, int mappable); */
-       /* to initialize with mapping settings AND a vtt 
-       tX_seqpar (void *mytt, float max, float min, float scale, int mappable); */
        
        virtual float get_value();
        void set_mapping_parameters(float max, float min, float scale, int mappable);
@@ -79,6 +74,9 @@ class tX_seqpar
        int is_touched() {return touched;}
        int is_untouched() {return !touched;}
        
+       bool get_reverse_midi() {return reverse_midi;}
+       void set_reverse_midi(bool reverse) {reverse_midi=reverse;}
+       
        void do_touch(); /* can't be inline as requires tX_sequencer.h */
        void touch() { if (!touched) do_touch();}
        void untouch() { touched=0; last_event_recorded=NULL; }
@@ -157,6 +155,8 @@ class tX_seqpar
        static gboolean tX_seqpar_press(GtkWidget *widget, GdkEventButton *event, gpointer data);
        
 #ifdef USE_ALSA_MIDI_IN        
+       static gboolean reverse_midi_binding(GtkWidget *widget, gpointer data);
+       
        static gboolean remove_midi_binding(GtkWidget *widget, gpointer data);
        static gboolean learn_midi_binding(GtkWidget *widget, gpointer data);   
        
index 1da8b0dfe3ee577fcfbff3972817f876ed2507ea..c7c697a6a2e2ff129c811015452ac6cc939441fa 100644 (file)
@@ -67,7 +67,7 @@ tX_event *tX_sequencer :: record_event (tX_seqpar *sp, float value)
 {
        tX_event *new_event;
        
-       new_event=new tX_event(current_timestamp, value, sp);
+       new_event=new tX_event(current_timestamp, sp, value);
        
        pthread_mutex_lock(&record_lock);
        record_list.push_back(new_event);
index 32edfc0290fee304df9c6afa013cf10fceb151f4..f1ca0cc707acf0e358bb17c080a2c811406f3755 100644 (file)
@@ -290,7 +290,7 @@ GtkSignalFunc load_file(GtkWidget *wid, vtt_class *vtt)
                char buffer[32]="*.";
                
                gtk_file_filter_add_pattern(filter, strcat(buffer, extensions[i]));
-               for (int c=0; c<strlen(buffer); c++) {
+               for (unsigned int c=0; c<strlen(buffer); c++) {
                        buffer[c]=toupper(buffer[c]);
                }
                gtk_file_filter_add_pattern(filter, buffer);