1. Click the Add Key button. A new Key is created and added it to the Play Panel.
2. Click in the Key's blue rectangle to open the Key's Edit Window.
3. Select a pool and a sound from the choice menus.
4. You can listen to the selected sound by clicking the Slooshi button.
5. Repeat 3. and 4. until you find a sound you like, then click Apply and Close.
6. Now the Key is ready to play it's sound. See the listing of mouse functions below.
(To move a Key "take" it at it's top area, hold down the shift key, and drag.)
A Key is an interface that let's you play a sound. There are two play modes (loop and one shot),
and two trigger modes: mouse (the Key's trigger area reacts to mouse enter/click/exit) and
timed (the sound is triggered automatically at a constant intervall). Play and trigger modes
can be combined freely (mouse/one, mouse/loop, timer/one, timer/loop).
Each Key has a toolbar and a trigger.
The trigger is for playing manually:
* mouse enter starts the sound (loop or one shot),
* mouse exit stops it (if unlocked),
* mouse click turns lock on/off (a locked trigger does not respond to mouse exit).
An unlocked trigger changes color on mouse enter/play (light) and exit/stop (dark), while a locked
trigger does not (always light, to indicate it's state).
Each Key has a name (showing on the trigger) which initially is set to a unique number and can be
changed from the Edit Window's stuff page.
The toolbar consists of three colored rectangles: when
clicked, the blue one opens the Key Edit Window, the green one switches between one shot
(default) and loop mode, and the red one toggles the timer on and off. Each switch hilites
Through their toolbars, Keys can be moved (shift-dragged) around on the play panel. Hold down the
shift key, move the cursor over the Key's toolbar, press the (any) mouse button, and go. Actually,
only an outline of the Key is moved, the Key itself jumps to the cursor position, when the mouse
button is released. When the shift key is released before the mouse button is released, the Key is
sent to the background, else the Key stays on it's level (relevant only when Key's overlap).
Important: Java allows a sound to play only once at a time, so that Keys with the same sound
attached to them will interfere with each other.
But we don't give in! Try this: create a couple of Keys, load the same sound (one of
the longer ones) to each and set the timers to different values. (See below for more information
on the timer feature.)
mouse functions overview
* mouse enter: show settings on monitor panel
* shift drag: move
* shift click: send to back & redraw
* click: open Edit Window
* click: toggle loop/one shot mode
* click: toggle timer on/off
* mouse enter: show settings on monitor panel
* mouse enter: play sound
* mouse exit: stop sound
* click: lock trigger (disable stop on mouse exit)
There is always one "hot Key" who's settings (pool name, sound name and the value of the timer)
are displayed. A Key is hot when it: is at the current cursor position, has just been created,
is the only Key around, is being edited.
The timer value is shown also when the timer is off.
The play panel is where the Keys live.
Keys can be moved around on the play panel (by shift-dragging). This only works on a Key's
toolbar area in order not to trigger a sound when the Key only needs to be moved.
Key Edit Window
From the Properties menu select one of the following pages:
Select a sample to load to the trigger.
For convenience, Slooshi's sound resources are grouped in pools, each pool holding
a number of more or less related sounds. The Slooshi button allows you to listen to
the selected sound without loading it to the Key.
Note: There's a pool called user which is empty on purpose. You can load up
to 32 sounds from your local system into that pool and play them just like any of the
BUT: this really cool feature only works with
Hot Java. Any other browser
will simply ignore any attempt to read a local file.
Set the time of the interval timer.
When the timer is on, the sound is regularly triggered at the given interval. The timer value
represents the interval time in milliseconds. This feature works both in one shot and loop mode.
Choosing a time smaller than or equal to the sound's duration will result in a "fake-loop".
Applying the timer to a looped sound creates a sort of meta-loop: the sound is triggered, loops
until the end of the interval where it is stopped and immediately restarted.
Resize, rename, remove the Key.
Pretty self-explainatory. Remove removes the Key for good, no undo!
Close, Reset, Apply
Any changes you make take effect immediately after clicking the Apply button, so you can
fiddle around with the settings and listen to the result without having to close the window.
The Reset button restores the values that were current when the Edit Window was opened.
Important: Both buttons affect the settings of the currently chosen page only.So, for instance,
when you change the timer value, then jump to the stuff page to set a new name, click Apply and
Close, only the new name will be stored.)
As you might have guessed, the Close button simply closes the window, it does not set or
Some notes and hints
* A newly created Key loads a soundstub, not really a sound, only 32 or so samples long. To hear
something (other than an occasional click) you have to load a sound first.
(Though the stub can sound nice when looped...)
* Sounds load in the background (watch the browser's status), so the applet doesn't freeze while
waiting for a sound to be loaded.
* Mouse move actions have a higher priority than mouse click actions. There are some constellations
where changes made by clicking take effect only after exiting/re-entering the trigger.
* Classfiles (currently around 30) are only loaded when needed, so it may take a while before
components accessed for the first time come up.
* Resizing the browser window no longer corrupts the Key layout.
* Dragging is pretty smooth now.
* The applet exits cleanly now, also when still playing or loading.
* Sometimes Keys don't redraw correctly (shift-click in the toolbar to fix)
* Some of the sounds in the short pool are obviously too short and don't play each time
they are triggered.
* More timer features to create a sort of process oriented sequencing and generate more complex
* Maybe put up some ra-examples to show what's possible...
* Write a flame mail to Sun Inc., complaining about Java's shamefully poor sound support.
* Spend less time coding.
drop me a line if you want the source.
feedback goes to lu