Updating to current release - Alex
authorterminatorX <>
Thu, 31 Aug 2000 08:26:13 +0000 (08:26 +0000)
committerterminatorX <>
Thu, 31 Aug 2000 08:26:13 +0000 (08:26 +0000)
AUTHORS
ChangeLog
INSTALL
README
README.GNOME [new file with mode: 0644]
README.PERFORMANCE [new file with mode: 0644]
THANKS
TODO
configure.in

diff --git a/AUTHORS b/AUTHORS
index f32086766b4e497cf9591524889f95ee69335636..4ed669a2adfaa60a3323d9bbc0e439eed8a82df7 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -5,6 +5,12 @@ Author:                        Alexander K
 Contributors:
 licmak.awk:            Christian <eleet@altern.org>
 tX_wavfunc.c-patch:    "Andrew C. Bul+hac?k" <acb@zikzak.net>
+MK II icon:            Michael Kahl <m.kahl@student.hu-berlin.de>
+
+Authors of files not written for tX but included in this distribution:
+mmx.h README.MMX:      Hank Dietz <hankd@ecn.purdue.ed> and
+                       Randy Fisher <rfisher@ecn.purdue.edu>
+3dnow.h:               Robert Dale <rob@nb.net>
 
 The lowpass filter is based on:
 reso_lop.txt:          Paul Kellett <paul.kellett@maxim.abel.co.uk>
index d50b08a4ea5eb459f610c78b6654d098c94b14be..bac6e2dbd8610a69346d945a880f218282ec8d6c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,119 @@
 terminatorX - ChangeLog
-All changes were done by me (Alexander Koenig) if not stated otherwise.
+All changes were done by me (Alexander König) if not stated otherwise.
 This is not a GNU-style ChangeLog but you sort of get the idea what was
 changed.
 
+[v3.65]
+- new GUI
+- Plugins
+- setformat
+- mappable parameters
+
+[v3.61] (unreleased)
+- applied a tiny patch from Atsushi Yamagata <yamagata@plathome.co.jp>
+  to set locale on startup.
+
+[v3.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 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 running)
+- 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 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: http://www.bright.net/~dlphilp/linuxsound/).
+  Click the edit button 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 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 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 windows - so it should be
+  usable on smaller displays as well.
+- 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
+  
+[v3.55]
+- 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 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 probs
+  reported though.
+- 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 ".tX"-mime type, an
+  terminatorX-application icon and a ".tX"-icon. 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 into that turntable. Drop a tX-set file over the
+  "Load Set" button to load the set. 
+
+[v3.51]
+- 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.
+
+[v3.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 foresight, I'd say ;)
+- 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 run it.
+- 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 (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 master pitch.
+- 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 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 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!
+
 [v3.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
diff --git a/INSTALL b/INSTALL
index 062654cad9daa4f49a7b6fef550ce512478454b2..6dfb06eea67eb90e08df669c1b1108bf0e53870a 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
 terminatorX INSTALL:
-Copyright (C) 1999 by Alexander König <alkoit00@fht-esslingen.de>
+Copyright (C) 1999, 2000 by Alexander König <alkoit00@fht-esslingen.de>
 
 Quickstart:
 -----------
@@ -21,30 +21,24 @@ Step 1: Configure terminatorX.
        if use bash: > export CFLAGS="-O2"
        with tcsh:   > setenv CFLAGS "-O2"
 
-       I use CFLAGS="-O7 -mpentium" btw. You'll need to have a "pentium-aware"
-       compiler to use that though (egcs-pgcc).
+       I use CFLAGS="-O6 -mpentiumpro" btw. You'll need to have a
+       "pentium-aware" compiler to use that though (gcc/pgcc).
 
-       The configure Options:
-
-               --enable-wavonly
+       All of the following configure options can be either enabled with
+       --enable-option or disabled with --disable-option.
 
-               Since Version 3.2 the terminatorX configure script automatically
-               enables sox and mpg123 support, if these programs are found on
-               the target system. So to be able to load close to any audiofile
-               simply ensure you have sox and mpg123 installed an run the
-               configure script - if you want to use the builtin wav-loading
-               routines specify --enable-wavonly. These will be enabled if
-               sox is not found of course.
-               
-               WARNING: Loading mp3's usually takes quite some time and 
-               requires a whole lot of memory! tX does not support on-the-fly
-               mp3 decoding, and therefor the whole mp3 will be decoded (by
-               mpg123) before tX can handle the data.
+       The configure Options:
+       
+               Performance Options:
+               --------------------
                
                --enable-scheduler
                
-               This option is only intended for people who have audiobuffer
-               underruns (clicks) with their desired latency settings.
+               NEW: since 3.5 this option is enabled by default, as you can
+               now operate the GUI while sound is playing, which can cause 
+               audio dropouts when the GUI and the sound thread run at the
+               same priority. You still need root privileges though.
+               
                If you run terminatorX compiled with this option as root, the
                engine thread will be run with FIFO-scheduling policy at the 
                highest priority. This is somewhat dangerous I guess, as is
@@ -59,14 +53,77 @@ Step 1: Configure terminatorX.
                I WARNED YOU! Anybody who can run this binary can completely
                erase your hardisk. BE CAREFUL.
                
-               --enable-closedev=no
+               --disable-flash
+               
+               This turns off the "flash"-widgets that display the current
+               signal of the turntables and the master out. This might help
+               fighting performance probs. Oh, If you have a better name
+               for the widget please tell me ;)                
+               
+               --enable-3dnow
+               
+               This enables EXPERIMENTAL 3DNow! support. It seems as if the
+               current libmmx (which is included) doesn't work with the new
+               gcc 2.95. So if you use that compiler do not enable this option.
+               
+               The built binary will run on CPUs with 3DNow! support only.
+               AFAIK these are the K6II, K6III and the Athlon (K7). INTEL CPUs
+               don't have 3DNow! support!
+               
+               For now this the only thing that might run a little faster is
+               the echo effect. I planned to hack more 3DNow! code but at the
+               moment I simply don't have the time.
+                               
+               File support options:
+               ---------------------
+               
+               All of these are enabled by default. Nevertheless the configure
+               script checks for the availability of the helper application
+               and if it's not found disables support for it. Check the
+               terminatorX homepage for links to those apps if you don't have
+               them - or check your distribution first, AFAIK all bring these
+               tools nowaday.
+               
+               --enable-wav
                
-               The old "KEEP_DEV_OPEN" flag. Still does the same thing: Once
-               the audiodevice is opened it won't be closed until you exit
-               terminatorX. Good for devices that click when opened.
+               This enables the builtin wav routines. They load 16Bit/44Khz
+               MONO RIFF/WAV files only but they do that significantly faster
+               than using sox. If these routines fail and sox support is
+               enabled, terminatorX will try to load the file with sox as 
+               a fallback. Disable them only if they don't load your files
+               correctly.
+               
+               --enable-sox
+               
+               This enables sox support. As sox can load nearly any audio file
+               it makes sense to use it. You have to have sox installed of 
+               course.
+               
+               --enable-mpg123
+               
+               This enables mpg123 support. If you want to be able to load mp3
+               files keep this option enabled. You have to have mpg123
+               installed of course.
+               
+               Misc options:
+               -------------
+               
+               --disable-dial
+               
+               The resulting binary will not use the new dial-widget, but
+               scales instead.
 
+               --enable-closedev
+               
+               This has no effect at the moment. Sorry. Don't disable it.
+               
+               --enable-debug
+               
+               This will cause terminatorX to display some debug messages on
+               your console. 
+               
                Just as an example my configure line is (works with bash only):
-               > CFLAGS="-O7 -mpentium" ./configure 
+               > CFLAGS="-O2 -mpentiumpro" ./configure 
 
 Step 2: Build the binary.
 -------------------------
diff --git a/README b/README
index 3ea2c429b0aa87e96ac661f83dd2615ce1951a46..5489f2c244fcdb1b904f0a44d178fe1e7a6bb11a 100644 (file)
--- a/README
+++ b/README
@@ -1,16 +1,24 @@
-terminatorX V3.2 README
------------------------
+terminatorX V3.60 README
+------------------------
 
-Copyright (C) 1999 Alexander König
+New:
+     6.4   : Drag And Drop
+     6.5   : The Sequencer
+     
+Updated:
+     6.2.1 : The Main Panel
+     7     : Options
+
+Copyright (C) 1999, 2000 Alexander König
 eMail: alkoit00@fht-esslingen.de
-Homepage: http://termX.cjb.net
+Homepage: http://www.terminatorX.cx
 
 This is free software see the COPYING file that came with this
 distribution for details.
 
-WARNING: TerminatorX comes with ABSOLUTELY NO WARRANTY. Version 3.0 introduces
-         some features that are not too heavily tested and a crashing
-        terminatorX may now result in locked X-Pointer.
+WARNING: TerminatorX comes with ABSOLUTELY NO WARRANTY. This software is known
+to lockup X11 or cause other problems under rare conditions. Don't use
+it on production servers. You have been warned!
 
 Contens:
 --------
@@ -21,6 +29,17 @@ Contens:
        4.......Requirements
        5.......Installation
        6.......Operation
+       6.1.....The Master GUI
+       6.2.....The Turntable GUI
+       6.2.1...The Main Panel
+       6.2.2...The Trigger Panel
+       6.2.2.1.Syncing Turntables
+       6.2.3...The X- and Y-Control Panels
+       6.2.4...The Lowpass Panel
+       6.2.5...The Echo Panel
+       6.3.....Grab Mode Operation
+       6.4.....Drag And Drop
+       6.5.....The Sequencer
        7.......Options/Configuration
        7.......Further notes
        8.......Contact/Homepage
@@ -28,191 +47,307 @@ Contens:
 1. What it is
 -------------
 
-TerminatorX is a realtime audio synthesizer. It enables you to scratch
-on wavfiles like you might have heard HipHop-DJs scratch on vinyl records.
+terminatorX is a realtime audio synthesizer that allows you to "scratch"
+on digitally sampled audio data (*.wav, *.au, *.mp3, etc.) the way hiphop-DJs
+scratch on vinyl records. It features multiple turntables, realtime effects and
+an easy-to-use gtk+ GUI.
 This is BETA Software please help me fix bugs. See section Contact/Homepage.
-Please read this README and take a look at the homepage
-http://www.termX.cjb.net BEFORE you complain.
+Please read this README and take a look at the homepage http://www.terminatorX.cx.
 
 2. Quickstart:
 ----------------
 
        o Install terminatorX (see INSTALL)
        o Run terminatorX
-       o Load a scratch file (and a loop if you want)
-       o Click Start
+       o Load an audiofile into the available turntable (you can add
+         more turntables if you want) (Hint: Click on the button that
+         holds "NONE" in the "Main"-panel)
+       o Click on the "Audio Engine"-button to start playback.
+       o Click on the "Mouse-Grab"-button to enter grab mode. The turntable
+         with the red border has the input focus.
        o Press <SPACE> or left mouse button to scratch
-       o Release <SPAVE> or left mouse button to let the scratch-file run at
+       o Release <SPACE> or left mouse button to let the scratch-file run at
          the turntable's default speed
-       o Press ESC or middle (third) mouse button to stop
+       o Press <ESC> to quit grab mode.
        
 3. Features:
 ------------
 
-       Pre-3.0 Features (still there):
-       -------------------------------
-       
-       o CD-Quality operation
-       o Audio aliasing
-       o Optional playback of an additional loop wavfile to
-         enable rhythm based scratching
-       o Recording of your scratching in a memory buffer, customizable by user
-       o Save that buffer (as a wavfile) with or without the loop mixed to it,
-         no matter whether you recorded it with our without a loop playback
-       o Visual feedback to "see" current position in scratch-wavfile
-       o Kernel-level audio latency configurable
-       o Run terminatorX on the hardware platform of your choice,
-         this software is known to run on the following platforms        
-               - X86 (i386) (Linux)
-               - PowerPC (Linux)
-               - SUN Sparcs (Linux)
-         It should run on other Linux hardware as well, if you manage to
-         run it on any other platform (or you have prolems) please contact
-         me.     
-       
-       New Features (3.0++):
-       ---------------------
-       
-       o Easy to use GUI (gtk+)
-       o No more commandline switches - settings are now configurable via
-         the options dialog and saved on exit.
-       o Better mouse handling (now requires DGA)
-       o Support for other (XInput) devices
-       o (If enabled) Support for .mp3, .wav, .au, .iff, .smp, .cdr ....
-       o Improved visual feedback for better scratching.
-       o Mouse-button support ;)
-       o Mouse Y-axis support (see Options)
-       o Time-display
-       o Heavily enhanced audio-rendering engine. It is now 100% click free.
-         (Btw: if you hear clicks these may result either:
-          - from a buffer underrun -> enlarge audio buffersize (Options)
-          - from "dirty" samples (either loop or scratch)
-          - from importing audiofiles with a samplerate != 44.1 kHz)
-       o You can now mute the scratch (try <M>, <STRG>, right mouse button
-         or (different!) <ALT>)
+       NOTE: I decided to remove the old ridiculous feature list and replace
+       it by a shorter version.
        
+       - Scratching ;) 
+       - Multiple turntables
+       - Builtin Sequencer
+       - Pitch / Volume settings for each turntable
+       - Effects (Lowpass/Echo) configurable for each turntable
+       - Syncing tables to one master turntable
+       - Broad audiofile-type support through the use of sox and mpg123
+       - Recording (straight to disk now)
+       - Save turntable sets (.tX - files)
+       - and more 
        
 4. Requirements:
 ----------------
 
-       o A Linux system with gcc/egcs and X-Windows installed.         
-         
-         You now need pthreads (alias LinuxThreads an implementation of POSIX
-         threads) and a threadsafe libc: glibc2(++) as terminatorX is 
-         multithreaded again (Hi, Andy ;))
+       - Software:
+         ---------
+         required:
+                       o Linux (>= 2.0)
+                       o glibc2 (pthreads)
+                       o XFree86 (with DGA DirectMouse support)
+                       o gtk+ (>= 1.2.0)
+                       o a compiler (gcc)
+         optional:
+                       o XFree86 >= 3.3.3.1 to support other XInput devices
+                       o sox for enhanced audio file support
+                       o mpg123 for mp3 support
          
-         For the GUI you now need: gtk+ >= 1.2.0
-         
-         If you want to use other devices than your main X-Pointer
-         you proabably need: XFree86 >= 3.3.3.1
-         
-         For enhanced audiofile support you need sox (and mpg123 for mp3s)
-         
-       o A soundcard that's supported either by OSS our ALSA.
-       o A good clean mouse and pad, a good X-Pointer setup. see the mouse
-         section on the homepage.
-
-Notes:         On performance the only thing I can say is this: it runs fine on my
-       P(I)233MMX with 98MB of RAM. On slower machines you might have to
-       enlarge the kernel-level audio buffer (see Options). Nobody ever
-       told me it didn't run (due to cpu-power) so if you think your machine's
-       to slow please tell me so I can specify machines to slow...
-       
-NEW:   Since Version 3.2 tX contains a lowpass filter which seems to eat quite
-       some CPU power. So a bigger machine wont hurt, I guess a 200MMX is sort
-       of the lower limit. Maybe I'll find ways to accelerate that stuff for
-       future versions...      
+       - Hardware:
+         ---------
+                       o A OSS compatible soundcard.
+                       o A good clean mouse and pad, a good X-Pointer setup. 
+
+NOTE on performance: tX is known to run pretty smooth on "current" PCs
+       (200MHz++). If you experience problems take a look at the config
+       options section in INSTALL.
        
 5. Installation:
 ----------------
 
 For GNU-standards' sake this information is now located in the INSTALL file
-that came with your distribution of terminatorX.
+that came with this distribution of terminatorX.
   
 6. Operation:
 -------------
 
-This chapter was heavily cut as terminatorX now has a very easy to handle
-GUI. This GUI btw features tooltips, so if you want to know what a button/slider
-is about leave your mouse above that widget for a second or two and a short
-explanation will pop up.
+Since V3.5 terminatorX has separated GUIs for main operation and the turntable
+settings and therefore I'll (try to ;) explain these in different sections.
 
-Still if you're new to terminatorX (and not familiar with 3.0+) you should
-read the following.
+6.1 The Master GUI
+------------------
 
-About Scratching:
+The controls of the master gui are located in the top and the right bar of the
+terminatorX main window.
 
-At first you have to select the operation Mode:
+- Audio Engine Power / Mouse Grab
+With the Audio Engine Button you can en- and disable the audio playback
+engine without activating the sequencer. Unlike earlier versions you will
+not automatically enter mouse-grab mode so you can modify volume/pitch/echo
+settings etc. while you actually hear what you do. Some functions are not
+available when the audio engine is on, their controls will be marked insensitive
+when you enable the engine. To actually enter grab mode you'll have to click on
+the "Mouse Grab" button. See the "Grab Mode Operation" section to find out how
+to control the software then.
 
-- Free Scratch: 
-  This Mode enables scratching. The scratching is not recorded and therefore
-  the playback will only stop if you hit either the middle mouse button
-  or <ESC> ("Escape").
-  
-- Record Scratch:
-  This Mode enables scratching. The scratching will be recorded into the 
-  record buffer. Playback either stops when the record buffer is full or you
-  pressed one of buttons described above.
-  
-- Playback Scratch:
-  This mode disables scratching. For now your mouse will be locked anyway.
-  In this mode terminatorX will playback the record buffer. Playback will
-  either stop when all of the recorded data was played back or you pressed
-  on of the buttons described above.
-
-If you have a scratch-file (== a file to scratch on) loaded and maybe a loop
-as well you can hit the "Start" button to start Playback.
-
-Both samples (scratch and loop) will playback at normal speed. To actually
-scratch you will have to keep either <SPACE> or left mouse button. Now the
-scratch sample is played back at the same speed you move your mouse -> you
-scratch ;). If you want to temporarily mute the scratch-sample press either,
-<M>, right mouse button or <CTRL>. You can also use <ALT> but the "meaning"
-of this key is inverted: 
-       - ALT pressed  -> scratch NOT muted.
-       - ALT released -> scratch muted.
-This is of course not true when playback starts. The scratch will be unmuted
-then. Why there are multiple ways of muting? So you can use whatever you
-prefer.
-
-If you want to "move" through the sample a little faster you can keep <F> 
-(alias fast) pressed to accelerate by factor 10.
-
-To stop playback you either press middle mouse button, <ESC> or (for 
-compability with old versions) <RETURN>.
-
-Recorded scratches can be saved with one of the four "save"-buttons on the
-right side of terminatorX's main window. "Fast" means you wont have to enter
-a filename, terminatorX will generate the name from the prefix you set (if
-not default is "tX_scratch") in the Options dialog. "(mix)" means the saved
-file will contain your scratch mixed with the loop file at the currently
-selected ratio. 
-
-NEW: Since version 3.2 terminatorX comes with an additonal resonating lowpass
-filter. If enabled this effect will be applied to the scratch-signal. The
-resonance parameter can be set with the slider underneath the "LP Filter" 
-on/off button. The other parameter (cutoff frequency) can be modified in
-realtime while scratching. Depending on what mouse-axis you chose for scratching
-the other axis will be used for modifying the cutoff frequency of the lowpass
-filter. Now if you think this sounds somewhat complicated, simply run
-terminatorX, enable "LP Filter" and set the resonance-factor close to the max
-(~ pretty far to the right) and move your mouse up and down (or from left )
-while scratching and hear what happens...
-
-Althoug tX is trying to adjust the input volume according to the resonance 
-factor, you might get clipping with high resonance values and samples that
-contain loud high-frequent parts. The only way to get around this for now is to
-reduce resonance.
+- Record (Audio Engine)
+To enable recording you have to enable the "Record"-toggle button BEFORE you 
+start the audio engine. You will be prompted for a filename after enabling the
+button. Audio will then be recorded to that file in RIFF/WAV format from the
+moment you turn the audio engine on until you turn it off again. Please be aware
+of the fact that recording audio requires A LOT of harddisk space!
+
+- Sequencer Play / Record / Stop
+Please Read 6.5 to find out more about the sequencer.
+
+- Master Volume / Pitch
+The volume and pitch settings of the individual turntables are relative to these
+master settings. This information will be stored within the .tX set files.
+
+- Add Turntable
+Oh well, it says it all: adds a (new) turntable to the current set.
+
+- Save Set
+With this button you can save your current set and all related settings to a 
+.tX set file. Note that the audiofiles themselves will not be stored within
+these files but only references to them. Therefore on loading the set the 
+audiofiles have to be at the same location in the filesystem as they were when
+putting that set together.
+
+- Load Set
+Loads a previously saved set (see above). The current set will be destroyed!
+
+- Hide Gui
+If you have a lot of turntables you may find all the panels disturbing in
+grab mode. Therefore you can hide these by clicking on "Hide Gui".
+
+- Options
+Displays the options dialog. See section 7 (Options/Configuration)
+
+- About/Legal
+Displays a dialog with some info about the prog and the binary itself plus
+the good old GPL.
+
+- Quit
+No comment.
+
+6.2 The Turntable GUI
+---------------------
+
+The turntable GUI contains multiple controls and the realtime displays for each
+turntable.
+
+6.2.1 The Main Panel
+--------------------
+
+With the text entry widget you can setup a name for the turntable. "Delete" 
+removes the turntable from the current set. The button beneath these two holds
+the name of the currently loaded audiofile. On creation it will hold "NONE". To
+load an audiofile click that button. Volume and Pitch... oh well ;)
+
+"Edit" will run the soundfile editor you configured in the Options-dialog with
+the soundfile loaded into the turntable as parameter. After editing the file you
+can make terminatorX reload the file by clicking the "Reload" button.
+
+6.2.2 The Trigger Panel
+-----------------------
+
+"Trigger!" actually triggers that turntable right now -> it will start playing 
+immediately if the audio engine is turned on. Stop will stop playback (of this
+turntable) of course. Autotrigger will cause the turntable to be triggered
+whenever you turn on the audio engine. Loop en- or disables the looping of that
+turntable.
+
+6.2.2.1 Syncing Turntables
+--------------------------
+
+Let's start off with an example: Say you have two drumloops and one bassline
+loaded in three turntables. Of course you want these samples to be triggered
+at the same time but you don't want to invest time to cut them to the exact 
+length. Therefore you decide which of the drumloops to make the sync master. 
+You'll have to do this before you enable the audio engine (for now). Only one
+turntable can be the sync master. Now you can make the other two sync clients
+which will cause them to be (re-)triggered whenever the master is
+(re-)triggered. The number you can select to the right of the "Sync Client"
+button sets the trigger delay for the button: if it's set to zero the turntable
+will be triggered with every master trigger, if it's set to 1 it'll be triggered
+every 2nd master trigger and so on.
+
+A nice side effect of this feature is: you can now scratch the second (sync
+client) drum loop and no matter whether you're scratching is good or not the
+beat will be triggered correctly again ;)
+
+
+6.2.3 The X- and Y-Control Panels
+---------------------------------
+
+With these panels you can select which mouse axis (X = left to right, Y= up
+and down) controls which realtime parameter. Possible choices are
+o Scratching
+o Volume
+o Cutoff frequency for the lowpass filter
+o Feedback value for the echo
+o Nothing
+
+6.2.4 The Lowpass Panel
+-----------------------
+
+This panel contians the controls for the resonating lowpass filter. The
+"Resonance" and "Frequency" parameters control the actual filter and "Input
+Gain" enables you to preamp the signal in case the filter eats too much
+volume.
+
+6.2.5 The Echo Panel
+--------------------
+
+Here you can en- and disable the echo-effect and set "Duration" and "Feedback"
+parameters. The duration parameter scales to the actual sample length: so if you
+set it to 0.5 you will hear the echo when the red playback cursor is half way 
+through the sample. This is true for samples that are shorter than
+terminatorX' maximum echo buffer size only.
+
+6.3 Grab Mode Operation
+-----------------------
+
+After pressing "Mouse Grab" terminatorX enters "grab mode". This mode actually
+locks the mouse (as this input is now used to control the realtime parameters)
+and therefore you'll have to know some mouse/keyboard shortcuts to control
+the software without the GUI:
+
+Press <ESC> to quit grab mode.
+
+Select the turntable with input focus:
+The first turntable to hold the input focus will be the first turntable. You
+can now use <TAB> or right mouse button to switch to the next turntable. 
+Alternativley you can use <F1> to <F12> to select turtntable 1 to 12.
+
+Now the turntable that has the focus is the one you will manipulate with your
+mouse and keyboard inputs: Note that you can actually map different functions
+to the mouse x/y axis - so what actually happens when you move your mouse
+depends on what you select on the x/y control panels for each turntable.
+
+Keyboard:
+<TAB>          select next turntable
+<F1> to <F12>  select turntable 1 to 12
+<RETURN>       triggers the turntable
+<BACSPACE>     stops the turntable
+<S>            toggles "Sync Client"
+<SPACE>                while pressed turntable speed is mapped to mouse speed
+               (scratching!)
+<ALT>          mute on/off
+<CTRL>         mute on/off (inverted)
+<F>            (> "fast") warp mode (while scratching)
+<W>            same as above but the audio will be muted while warping
+
+Mouse:
+left button    same as <SPACE> -> scratching (triggers the turntable when
+               stopped)
+right button   select next turntable
+middle button  mute on/off
+
+Scratching works as before: press <SPACE> or left mouse button to actually
+scratch -> now your mouse controls the turntables speed -> release <SPACE>
+to let that turntable spin at default speed again.
+
+6.4 Drag And Drop
+-----------------
+
+Since V3.55 terminatorX provides multiple DND-Drop-Targets for use with GNOME/
+gmc (gmc is the GNU Midnight Commander). You can now load an audiofile into
+an existing turntable by dragging an audiofile from a gmc-window and drop it 
+over a. the "file"-button (on the "main"-panel) or b. (the easier target ;)
+over the wavdisplay (the green on black widget that displays the audiodata).
+To add a file set (== to load the file into a *new* turntable) simply drop the
+audiofile over the "New Turntable" Button. To load a complete terminatorX-set
+simply drop the setfile (*.tX) over the "Load Set" button. DND does not work
+with KDE.
+
+6.5 The Sequencer
+-----------------
+
+Release 3.60 introduces the sequencer. It can record and play back events for
+the following parameters:
+
+Master volume & pitch, scratching, (turntable) volume & pitch, triggers,
+loop (on/off), sync client settings, muting and all lowpass and echo paramters.
+
+To record events simply press the Record button of the sequencer, then press
+the Play button. All actions (for sequencable parameters - see above) you now
+take will be recorded into the song list. Press the Stop and Play again to
+see/hear how terminatorX plays back the events recorded before. You can now
+record events again for e.g. another turntable or record other parameters for
+the same turntable - whatever you want to do. Recording events for parameters
+for wich events have been recorded before will result in dubbing: if you touch
+a parameter while recording, events previously recorded will be erased from the
+moment you touch the paramater until you stop recording.
+
+When recording long sequences/songs you can use the sequencer-scale to start
+recording/playback from any song-position you want. To record a single
+paramteter value at a certain position simply move the sequencer-scale to that
+position, press Record, set the parameter and press Stop again.
+
+There is no other the way to edit the sequencer events currently, but future
+releases may feature an event-list editor.
 
 7. Options/Configuration
 ------------------------
 
 All configuration business now happens in the Options-dialog. The features
-that are not completely self-explaining do have tooltips. So in this document
+that are not completely self-explaining do have tooltips. So in this README
 I will discuss the buffer settings and the sense-cycles-option only. 
 
 A word on the settings in general: your settings are stored in the file
-~/.terminatorXrc.bin so if you think you completely messed up your settings
+~/.terminatorX3rc.bin so if you think you completely messed up your settings
 you will have to exit terminatorX - delete this file - and then re-run 
 terminatorX with the default settings.
 
@@ -225,9 +360,8 @@ The problem is the smaller the value you select is the faster your machine has
 to be. So if you here "clicks", or "drops" in audio output that are not related
 to your sample-material you will have to increase the buffer size. On the 
 other hand if you believe terminatorX does not react fast enought you have to
-decrease this parameter. The default value is 9. IMHO I'd say 8 is close to
-perfect but this value causes clicks on my machine already (I still use 8
-though ;) ).
+decrease this parameter. The default value is 8, but as my machine handles 7
+nicely (with --enhance-scheduler and root privileges) I use 7.
 
 Between rendering and outputing these blocks terminatorX checks for mouse 
 motion. The problem with mice is: they don´t report when they have stopped.
@@ -238,17 +372,31 @@ the cycle time as well, therefore if you here strange stop/run behaviour of
 the audio ouput while scratching after you decreased the buffersize you might 
 have to increase the stop-sense value too.
 
+Xinput Device: WARNING: Use this option *only* if you want to use an input 
+device other than your default-mouse for scratching. Selecting your default
+pointer will cause terminatorX to crash. See the "Using a turntable" section
+on the terminatorX homepage for details.
+
+With "Update Idle" / "Update Delay" you can configure GUI resposivness: Higher
+"Update Idle" will cause the wav-display (position display) and flash-widgets
+to update less often. Higher "Update Delay" values will cause the parameter
+widgets to update less often.
+
+You can now enter the soundfile editor of your choice in the "Soundfile editor"
+field. This editor will be started when clicking the "Edit"-button in the 
+main panel of the vtt-gui. If you enter for example "myeditor" terminatorX will
+run "myeditor sample_in_vtt.wav".
+
 8. Further notes:
 -----------------
 
 You can find more on terminatorX operation and especially the mouse
-configuration on the terminatorX homepage: http://termX.cjb.net
+configuration on the terminatorX homepage: http://www.terminatorX.cx
 
 9. Contact/Homepage:
 --------------------
 
-terminatorX's homepage:        http://termX.cjb.net
+terminatorX's homepage:        http://www.terminatorX.cx
 
-If you wan't to send me comments, bug-reports, patches or scratches (see
-the users' scratches section on the terminatorX homepage) send a me
-an eMail to alkoit00@fht-esslingen.de 
+send comments, bug-reports, patches or scratches (see scratches section on the
+terminatorX homepage) to: alkoit00@fht-esslingen.de
diff --git a/README.GNOME b/README.GNOME
new file mode 100644 (file)
index 0000000..19e4341
--- /dev/null
@@ -0,0 +1,18 @@
+terminatorX - README.GNOME
+--------------------------
+
+Ok, just some words about the gnome-support directory. For GNOME-Drag And Drop 
+support see the main README.
+
+If you want to install the ".tX"-set mimetype and the icons take a look at the
+tx-gnome-install script. The paths should work for RedHat systems, for other
+distributions you might have to adjust the paths (and maybe the mime-files).
+Then run the script as root and open a directory with gmc that contains .tX
+files.
+
+If the installation was successful the tX-set files should have a well known
+turntable as their icon and a double click on that should result in terminatorX
+opening that set. Installation can be undone with tx-gnome-uninstall.
+
+Doubleclicking on tX-set files will work only when terminatorX is installed
+somewhere in your PATH.
diff --git a/README.PERFORMANCE b/README.PERFORMANCE
new file mode 100644 (file)
index 0000000..f37c37d
--- /dev/null
@@ -0,0 +1,42 @@
+There are several things you can do to improve terminatorX performance:
+
+1. Don't use gtk+-pixmap-themes
+2. Compile an optimized binary
+3. Optimize your terminatorX setup
+4. Optimize your kernel
+
+In Detail:
+
+1. Don't use gtk+-pixmap-themes
+-------------------------------
+
+The sequencer brings a lot of additional GUI activity. Now the "selfmade"
+widgets perform pretty good (no matter what theme you use) but for example
+scale widgets are extremly slow with pixmap-themes. The problem is that the
+gtk-pixmap engine has to stretch the images and stretching images is a very
+CPU-intensive task. So it's best to not use those themes at all.
+
+2. Compile an optimized binary
+------------------------------
+
+This issue is covered in the INSTALL file mostly. If your machine can handle
+3DNow! instruction be sure to use 3DNow! (--enable-3dnow) - since V3.6 this 
+brings ~20% more performance increase. And setting good optimization flags is
+a good idea, too (see INSTALL).
+
+3. Optimize your terminatorX setup
+----------------------------------
+
+The default settings for the GUI updates provide good realtime feedback. This
+may cause problems on slower machines or evil gtk+-themes. If the GUI-thread
+causes dropouts in the audio-engine you should increase the Update-Delay value 
+in the options dialog.
+
+4. Optimize your kernel
+-----------------------
+
+The current 2.2.X-kernels show a pretty high latency. This is problematic for
+near-realtime apps and therefore most linux-audio-apps. Ingo Molnar is
+maintaining a patch against the 2.2.x kernels that reduces latency. They are
+called "low-latency-patches" and are available from:
+http://people.redhat.com/mingo/lowlatency-patches/
diff --git a/THANKS b/THANKS
index bb616a732d76b826277fb8a0eb51079595f6688e..d5848078292f6f1969d37d5dff25ff16b98c412a 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -3,7 +3,8 @@ terminatorX THANKS:
 I'd like to thank:
 
 - All authors of: the GNU tools and libraries, the Linux kernel, XFree86,
-                  sox, mpg123, the wav-tools, gtk+ and TCP/IP.
+                  sox, mpg123, the wav-tools, gtk+ and TCP/IP. 
+                 It's obvious but: without their work there'd be no tX
        
 - All contributors (see AUTHORS)
 
@@ -18,9 +19,23 @@ I'd like to thank:
   (checkout: http://www-stud.fht-esslingen.de/luges/doc/gpl.html)
 
 - Paul Kellett <paul.kellett@maxim.abel.co.uk> for his lowpass filter published
-  in reso_lop.txt.
+  in reso_lop.txt
   (checkout: http://www.abel.co.uk/~maxim/)
 
+- Benno Senoner <sbenno@gardena.net> for his mmap() patch, all the low
+  latency kernel work and tips
+  (checkout: http://www.gardena.net/benno/linux/audio/) 
+
+- Michael Kahl <m.kahl@student.hu-berlin.de> for the cool MK II icon
+
+- Robert Dale <rob@nb.net> for makeing his already gone 3DNow!-Header
+  temporarily available again
+  
+- Scott C. Knight <scknight@indiana.edu> for helping me to get this thing
+  running on big endian machines again.
+
 - Everybody who contributed scratches...
 
+- The LAD people for all the help and support
+
 - The real Terminator X
diff --git a/TODO b/TODO
index d7630ed932e0cb0658ff081b95d6bfce664ecf95..6d3ca652fe5ea844d25ea03a659a1df7d4c08dae 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,14 +1,20 @@
 terminatorX TODO:
 
 These are the things I´d like to implement IF I have the time.
-The position of an idea in this list represents it´s priority:
 
-- add a marker feature: this will allow you to set 12 markers visually
-  in the wavfile-display. These will be available via the F1-F12 keys in
-  NORMAL and RECORD mode. If you press (and hold) one of these keys it will
-  have the same effect as pressing space but if you release it it will
-  jump to the position you marked in the wavfile. Easier scratching for people
-  like me who don´t have any scratching skills.
+- MIDI interface
+
+- stereo operation
+
+- support for LADSPA plugins
+
+- port Bennos mmap technology into the new code
+
+- more precise syncing
+
+- a click filter for client triggers
+
+- create a fixed gtk+ theme for terminatorX
 
 - code cleanup: I guess this will be on this list until development has stalled.
 
@@ -16,6 +22,10 @@ DONE:
 
 The following stuff has been on the list above and is now ipmlemented:
 
+[V3.6]
+
+- sequencer is here :)
+
 [V3.0]
 
 - Enhance audio quality with -DHANDLE_STOP -> no clicks.
index 757a5829cac1753591428e8569e3fe5de0eb2989..9e4db3102f92b47690210f723f0e175d4125a23b 100644 (file)
@@ -1,17 +1,21 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(src/tX_global.h)
-AM_INIT_AUTOMAKE(terminatorX,3.5)
+AM_INIT_AUTOMAKE(terminatorX,3.65)
 AM_CONFIG_HEADER(config.h)
 
-AC_ARG_ENABLE(closedev, [  --enable-closedev       close audio device if not in use. [default=yes] ])
-dnl AC_ARG_ENABLE(soxinput, [  --enable-soxinput       use sox as input converter. [default=no] ])
-dnl AC_ARG_ENABLE(mpg123input, [  --enable-mpg123input    use mpg123 as input converter. [default=no] ])
-AC_ARG_ENABLE(wavonly,  [  --enable-wavonly        enable the builtin wav routines. (no sox/mpg123) ])
-AC_ARG_ENABLE(scheduler,[  --enable-scheduler      enable rt-scheduling (req. root-priv). [default=no] ])
+dnl AC_ARG_ENABLE(closedev, [  --enable-closedev       close audio device if not in use. [default=yes] ])
+AC_ARG_ENABLE(sox, [  --enable-sox            use sox as input converter. [default=yes] ])
+AC_ARG_ENABLE(mpg123, [  --enable-mpg123         use mpg123 as input converter. [default=yes] ])
+dnl AC_ARG_ENABLE(wavonly,  [  --enable-wavonly        enable the builtin wav routines. (no sox/mpg123) ])
+AC_ARG_ENABLE(scheduler,[  --enable-scheduler      enable rt-scheduling (req. root-priv). [default=yes] ])
 AC_ARG_ENABLE(debug,    [  --enable-debug          enable debug output. [default=no] ])
 AC_ARG_ENABLE(flash,    [  --enable-flash          enable flashes. [default=yes] ])
 AC_ARG_ENABLE(3dnow,    [  --enable-3dnow          enables 3DNow! support. [default=no] ])
-AC_ARG_ENABLE(benchmark,[  --enable-benchmark      creates a non-functional test version [default=no] ])
+dnl AC_ARG_ENABLE(benchmark,[  --enable-benchmark      creates a non-functional test version [default=no] ])
+AC_ARG_ENABLE(wav,          [  --enable-wav            enables the builtin wav-loader [default=yes] ])
+AC_ARG_ENABLE(dial,         [  --enable-dial           use dials instead of scales for effects [default=yes] ])
+AC_ARG_ENABLE(bigdial,      [  --enable-bigdial        use BIG dials [default=yes] ])
+dnl AC_ARG_ENABLE(dga2,     [  --enable-dga2           use DGA2 instead of DGA1. (experimental) [default=no] ])
 
 dnl Checks for programs.
 AC_PROG_AWK
@@ -25,11 +29,12 @@ dnl Checks for libraries.
 AC_CHECK_LIB(m, floor,, AC_MSG_ERROR([** math-lib not installed or broken **]))
 AC_CHECK_LIB(pthread, pthread_mutex_lock,, AC_MSG_ERROR([** POSIX threads not installed or broken **]))
 AM_PATH_GTK(1.2.0, , AC_MSG_ERROR([** GTK 1.2.0 not installed or broken **]))
-AM_PATH_GLIB(1.2.0, , AC_MSG_ERROR([** GLIB 1.2.0 not installed or broken **]))
+dnl AM_PATH_GLIB(1.2.0, , AC_MSG_ERROR([** GLIB 1.2.0 not installed or broken **]))
 
 dnl Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/ioctl.h unistd.h)
+AC_CHECK_HEADERS(ladspa.h,, AC_MSG_ERROR([** couldn't find ladspa.h - get it from http://www.ladspa.org **]))
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_BIGENDIAN
@@ -39,53 +44,67 @@ dnl Checks for library functions.
 AC_PROG_GCC_TRADITIONAL
 
 dnl Eval args
-if test "$enable_closedev" == "no"; then
+if test "$enable_closedev" = "no"; then
        AC_DEFINE(KEEP_DEV_OPEN)
 fi
 
-if test "$enable_wavonly" != "yes"; then
+
+if test "$enable_sox" != "no"; then
        AC_CHECK_PROG(SOX_PROG, sox, yes)
-       if test "$SOX_PROG" == "yes"; then
+       if test "$SOX_PROG" = "yes"; then
                AC_DEFINE(USE_SOX_INPUT)
-               AC_CHECK_PROG(MPG123_PROG, mpg123, yes)
-               if test "$MPG123_PROG" == "yes"; then
-                       AC_DEFINE(USE_MPG123_INPUT)
-               fi
        fi
 fi
 
-dnl if test "$enable_mpg123input" == "yes"; then
-dnl    AC_CHECK_PROG(MPG123_PROG, mpg123, yes)
-dnl    AC_DEFINE(USE_MPG123_INPUT)
-dnl    AC_CHECK_PROG(SOX_PROG, sox, yes)
-dnl    AC_DEFINE(USE_SOX_INPUT)
-dnl fi
+if test "$enable_mpg123" != "no"; then
+       AC_CHECK_PROG(MPG123_PROG, mpg123, yes)
+       if test "$MPG123_PROG" = "yes"; then
+               AC_DEFINE(USE_MPG123_INPUT)
+       fi
+fi
 
-dnl if test "$enable_soxinput" == "yes"; then
-dnl    AC_CHECK_PROG(SOX_PROG, sox, yes)
-dnl    AC_DEFINE(USE_SOX_INPUT)
-dnl fi
+if test "$enable_wav" != "no";
+then
+       AC_DEFINE(USE_BUILTIN_WAV)
+fi
 
-if test "$enable_flash" == "no"; then
+if test "$enable_flash" = "no"; then
        AC_DEFINE(DONT_USE_FLASH)
 fi 
 
-if test "$enable_3dnow" == "yes"; then
+if test "$enable_3dnow" = "yes"; then
        AC_DEFINE(USE_3DNOW)
 fi 
 
-if test "$enable_scheduler" == "yes"; then
+if test "$enable_scheduler" != "no"; then
        AC_DEFINE(USE_SCHEDULER)
 fi
 
-if test "$enable_debug" == yes; then
+if test "$enable_debug" = yes; then
        AC_DEFINE(ENABLE_DEBUG_OUTPUT)
 fi
 
-if test "$enable_benchmark" == yes; then
+if test "$enable_benchmark" = yes; then
        AC_DEFINE(CREATE_BENCHMARK)
 fi
 
+AC_MSG_CHECKING(whether to use dials)
+if test "$enable_dial" = no; then
+       AC_MSG_RESULT(no)
+else
+       AC_MSG_RESULT(yes)
+       AC_DEFINE(USE_DIAL)
+fi
+
+if test "$enable_bigdial" = yes; then
+       AC_DEFINE(USE_DIAL)
+       AC_DEFINE(USE_BIG_BUTTONS)
+fi
+
+if test "$enable_dga2" = yes; then
+       AC_DEFINE(USE_DGA2)
+fi
+
 dnl Now Check for Xlibs - I do this here as other tests fail if these run earlier
 AC_PATH_XTRA
 
@@ -99,5 +118,7 @@ AC_CHECK_LIB(X11, XOpenDisplay,, AC_MSG_ERROR([** X11-libs not installed or brok
 AC_CHECK_LIB(Xext, XShmQueryExtension,, AC_MSG_ERROR([** Xext-libs not installed or broken **]), $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
 AC_CHECK_LIB(Xi, XOpenDevice,, AC_MSG_ERROR([** XInput not installed or broken **]), $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
 AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension,, AC_MSG_ERROR([** DGA not installed or broken **]), $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
-
-AC_OUTPUT(Makefile src/Makefile)
+if test "$enable_dga2" = yes; then
+       AC_CHECK_LIB(Xxf86dga, XDGASelectInput,, AC_MSG_ERROR([** DGA2 not installed. Try using dga1 instead. **]), $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
+fi
+AC_OUTPUT(Makefile src/Makefile gnome-support/Makefile src/gui_icons/Makefile src/smallknob/Makefile)