Three For O
The O is for October, harvest time here in NW Ohio USA. A beat-slicer, a book review, and a milestone release compose this trio of reviews for the Fall season in Linux audio fashion.
When I profiled some recent audio projects at SourceForge I collected a variety of interesting and relatively unknown applications. After the article was published I was reading the Csound mail list and came across a message from developer Andres Cabrera in which he mentioned a Csound-based program called Smasher. That message jogged my memory, and sure enough I had already downloaded and installed Smasher, but I had never gotten around to testing it. I intend now to amend my forgetfulness with this mini-review of the program.
What It Is
Smasher (Figure 1) is a beat-slicer, a utility dedicated to cutting up a soundfile and reordering its parts in new combinations. A beat-slicer is an indispensible tool for anyone composing with audio loops (see my articles on loop composition for more information regarding that topic) and is especially valuable if the composer is working with drum loops. However, Smasher will happily process any valid soundfile, regardless of its content.
It's unlikely that Smasher is available in your usual repositories, so you'll probably need to build and install the program yourself. You'll need the Smasher source code and a stellar variety of dependencies. Whole or in part you'll want the GStreamer development framework, the wxWidgets packages, the X11 headers and libraries, and a full-featured set of audio support components, including the development packages for Csound (with PortAudio support), libmad, and the OGG/Vorbis audio system. You'll also need the liblo library for OSC support. Your kernel's ALSA system provides Smasher's MIDI capabilities, including the virtual MIDI module (snd-virmidi) so helpful for machines with no MIDI hardware.
A further note regarding Smasher's employment of Csound: You'll need a version of Csound compiled for double-precision, versions compiled for floats will not work with Smasher. My Ubuntu Jaunty repo contains a libcsound64.so, which is indeed the version needed by Smasher. The 64 in the library name indicates a double-precision build, not a version built for 64-bit hardware. If your distribution repos include such a file, it's the one you want. Otherwise you'll need to consult the Csound home page to learn how to compile and install Csound yourself.
Smasher is very easy to use, just follow these simple steps:
- Load a soundfile (WAV, AIFF, MP3, FLAC)
- Pick the number of slices you want to create.
- Order the slices as you like in the sequencer grid.
- Order the FX triggers as you like.
- Play, listen, repeat steps 1 through 5 until satisfied with the results.
- Save your work as a WAV file.
As you can see in Figure 1, most of the program's important functions are displayed in a single screen. Help is available via the Help menu and a forum, but in truth a little experimentation will teach you most of what you need to know. Oh, and if you don't have a clue what beat-slicing is about you should check out the demos on the Smasher site.
Smasher And The Csound API
As mentioned, Smasher uses the Csound API (applications programming interface). According to Wikipedia an API is
... an interface that software programs implement in order to allow other software to interact with it; much in the same way that software might implement a User interface in order to allow humans to interact with it.
API's are implemented by applications, libraries and operating systems to define the ways by which other software may make calls to or request services from them. An API determines the vocabulary and calling conventions the programmer should employ to use the services. It may include specifications for routines, data structures, object classes, and protocols used to communicate between the requesting software and the library.
Smasher accesses Csound by calling functions defined in csound.h, a Csound header file required to build Smasher. During the compile process the program is linked to libcsound64.so, the Csound library. Whatever the library has to offer is now available to Smasher, and this availability is a Very Cool Thing. Thanks to the API Csound's capabilities become available for general usage. Csound was not designed to be a beat-slicer, but some of its processing functions are just what the beat-slicing doctor ordered. The Csound API exposes those functions and makes them available for programs that otherwise have nothing to do with Csound.
By the way, Smasher is not the only program currently using the Csound API. Other subscribing projects include QuteCsound, Rationale, jReality, blue, AVSynthesis, Cecilia4, TamTam (and some other OLPC/Sugar projects), AlgoScore, and Slipmat. Not all of those programs are equally evolved but the list indicates the success of the API and the possibilities of its deployment. And in case I've forgotten to refer to your favorite Csound-powered application, please feel free to mention it in the Comments section.
Smasher simplifies beat-slicing and arrangement to the point where anyone can use the program and create interesting (and hopefully musical) results. Smasher has been designed for one purpose, it sticks to that purpose, and it works perfectly as advertised. Kudos to developers Esther Loeliger and Gerald Schmidt for this very cool and useful program.
The Loadbang Book
In an article titled Mix Libre I wrote a mini-review of The bang Book, a collection of essays, articles, and musings on the significance of Pure Data (Pd), Miller Puckette's wonderful environment for audio/video composition and processing. I liked and recommended the book, but I cautioned readers that it was not a Pd tutorial. However, I'm happy to report that an excellent Pd tutorial has arrived.
Wolke Verlag has announced the availability of Johannes Kreidler's Loadbang, an in-depth tutorial for newcomers to Pd. The book's subtitle, "Programming Electronic Music In Pure Data", accurately describes and delimits the author's intentions. Loadbang does not pretend to exhaust Pd's capabilities. The author wisely maintains a course of instruction that begins with an exposition of Pd and audio basics and proceeds to teach the new user how to create instruments based on traditional audio sampling and synthesis designs (additive, subtractive, waveshaping, etc). The book's latter chapters present ways to use Pd to generate and control events destined for use with the instruments described previously. Loadbang concludes with references to more advanced topics such as the use of the GEM video processing library (an "external" in Pd-speak).
The book is available in its original German and in an English translation by Mark Barden. The writing style throughout is clear, succinct, and didactic by design. However, since Pd is normally a GUI-based application Loadbang is heavy on graphics. The book is clearly intended to be used in conjunction with a running instance of Pd, and many chapters conclude with suggested exercises and recommendations for further study.
I admire Pd's self-documentation, but as the environment becomes richer and more complex it presents a more formidable learning curve to new users. Johannes Kreidler employs the excellent method of using Pd to describe and explain how to use Pd, he knows his subject matter in depth and detail, and his book is a superb introduction to this most powerful environment. Highly recommended for anyone who wants to learn (or learn more) about using Pd.
I've already published a review of Linuxsampler in some depth, but the recent news of its 1.0 release deserves an announcement here. The project includes a variety of inter-related components, all of which have been updated and upgraded for this release. Figure 3 shows off the new looks for the Gigedit GIG file editor and the Java-based Fantasia GUI for the sampler, running in my Ubuntu Jaunty system. Everything has been working smoothly, without audio xruns, and it is evident that the developers have continued to focus on stability as well as the addition of new features. I've used Linuxsampler on various systems, and I must say that it has been a reliable and solid application wherever I've used it. I'm happy to see that that hasn't changed. Users of older versions are well-advised to update to this latest release
Among the new features we find support for Jack-MIDI and the ability to summon Linuxsampler as a DSSI or LV2 plugin instrument. Alas, its LV2 incarnation did not work for my current builds of Ardour nor would it instantiate with the lv2_jack_host software. I was able to invoke it as a DSSI plugin under Sean Bolton's ghostess DSSI host, but the UI was minimal to the point of unusability. I'm happy to admit that the problems may be on my end, and I shall continue testing the Linuxsampler plugins with other hosts.
Incidentally, I had no troubles compiling the new system under Ubuntu Jaunty. However, when I first ran the linuxsampler server it failed with an error regarding the connecting port. Netstat indicated that the port was in use but I couldn't determine what was using it. I eliminated one likely culprit (the PySol server) and rebooted. Voila, the problem is gone, and I now connect with the default address and port numbers.
Congratulations to the development team, they've done wonderful work with Linuxsampler 1.0. Of course, I'm already looking forward to version 2.0, but I think this release will keep me occupied and happy for a while.
I hope you've enjoyed this little October trio. I'll be back soon with more reviews and reports from the world of Linux audio & video, so until then stay tuned, eat sensibly, exercise regularly, and be sure to keep reading the latest news here at the Linux Journal On-line.
Similis sum folio de quo ludunt venti.
- Linux Kernel Testing and Debugging
- Tails above the Rest, Part III
- Wanted: Your Embedded Linux Projects
- NSA: Linux Journal is an "extremist forum" and its readers get flagged for extra surveillance
- RSS Feeds
- The 101 Uses of OpenSSH: Part I
- Are you an extremist?
- Tails above the Rest: the Installation
- Dolphins in the NSA Dragnet
- Pass on Passwords with scp