The Buzztard Project, Part 1
In November 2008 the Buzztard project maintainers announced the public release of version 0.4.0 of their flagship application. This version of Buzztard brings new features and performance enhancements, including expanded support for original Buzz songs and machines and an impressive make-over of its GUI.
In this article I profile the new and improved Buzztard (Figure 1). If you've used previous releases you'll want to check out 0.4.0 (and maybe even the 0.5.0 development version in the Subversion sources), and if you're new to Buzztard and trackers in general, then come along for the ride. Tracking is a cool way of making music with a computer, and Buzztard is one of the coolest trackers on the scene.
Buzztard is a good example of the modern design for a music tracker. The program provides a variety of elements necessary for music production, including a composition interface, an instrument design facility, internal audio effects processing, and much more. Buzztard follows the design considerations for the famous Buzz tracker for Windows. The tracker composition interface resembles the standard UI for most trackers, including pages for pattern and song creation. Buzz (and thus Buzztard) added further production amenities, most notably the deployment of "machines", Buzz-speak for instruments designed within and for the tracker itself. I'll have more to say about machines later, but now let's see what we need to build and install the latest Buzztard.
Get, Build, Configure
As mentioned, Buzztard's current public release is version 0.4.0. Alas, Buzztard may not be included in your distribution software repositories, and if it is listed it's unlikely to be the latest release. For example, neither my Ubuntu 8.10 nor my 64 Studio systems list Buzztard in their main repos, and only version 0.3.1 is available for my JAD 1.0 system. For the latest & greatest version you'll need to compile and install it from the public tarball or the SVN sources. Fortunately the build process is relatively straightforward, and complete instructions are available on the Buzztard home page.
Buzztard's audio capabilities depend on an up-to-date installation of the GStreamer software. GStreamer will be treated to its own future article, so for now we merely need to know that it provides the media-handling mechanisms for Buzztard and that you'll need the most recent GStreamer to build the latest version of Buzztard.
According to lead developer Stefan Kost the components of Buzztard should be compiled and installed in this order :
- bml - The Buzz machine loader.
- gst-buzztard - The Buzztard/GStreamer connection.
- buzzmachines.com - Download a collection of Buzz machines for use with Buzztard.
- buzztard - The Buzztard main program.
- bsl - The Buzz song loader.
Items 1, 3, and 5 indicate Buzztard's committment to support machines and song files produced by users of the original Buzz tracker. Other packages of original machines for Buzz are available, but the listed components are the critical parts for Buzztard.
Each component is built and installed with the following command sequences. For the public release packages :
./configure make sudo make install
For the Buzztard 0.5.0 SVN sources reviewed in this article :
./autogen.sh make sudo make install
Testers should add the --enable-debug option to the autogen command. If things go wrong Buzztard will issue helpful error reports to send to the developers. Don't worry if you don't understand what the reports mean, the developers will know what to do (hopefully).
After installing the first three components it's a good idea to check the installlation. First you'll need to set an important environment variable so Buzztard can find its needed GStreamer plugins :
Next you'll want to run the gst-inspect utility to check the validity of your machine collection :
If everything is in its correct location you'll receive a list of your machines :
dlphilp@maximus:~$ gst-inspect bml Plugin Details: Name: bml Description: buzz machine loader - all buzz machines Filename: /usr/local/lib/gstreamer-0.10/libgstbml.so Version: 0.5.0 License: LGPL Source module: gst-buzztard Binary package: gst-buzztard Origin URL: http://www.buzztard.org bml-Rout-Vibrato: Vibrato bml-Jeskola-Filter: Filter bml-Rymix-FlaserBox: FlasBox bml-WhiteNoise-s-Fuzzbox: Fuzzbox bml-Geonik-s-Overdrive: Overdrive et cetera...
The list displayed above represents machines included in a testing package (buzz4buzztard). Those machines are located at /usr/local/lib/Gear in directories for Effects and Generators. Stefan Kost advises downloading the official freeware machines at buzzmachines.com instead of the testing package.
If you don't receive such a list, double-check your installation and make sure that you run the test utility from the same terminal in which you set the GStreamer plugin path variable.
When all the parts have been compiled and installed you're ready to run Buzztard. Again, make sure that the plugin path environment variable is set correctly before running the program (add the variable declaration to your ~/.bashrc shell configuration to run Buzztard without setting it every time). This variable and others will be set automatically by the public package, but if you want the cutting edge Buzztard (i.e. built from the SVN sources) you'll have to set those variables manually.
Using Buzztard: Phase 1
Buzztard is a work in progress, but the project goals are clear and the developers have made consistent advances with each release. Nevertheless, new users and former Buzz users should know that the program may not behave exactly like its progenitor and that work on the project continues. Bug reports are most welcome, so if you try the program and have something to say about it, make sure you say it to the Buzztard developers.
If the GST_PLUGIN_PATH is declared you can start the program by entering this command at a terminal prompt :
Incidentally, Buzztard runs with or without a GUI. Only the GUI version is described here.
When the program has initialized itself you should see a display like the screenshot in Figure 1, but with only the master machine in the main display. At this point it's wise to run another test.
Open the File dialog and load a song from the examples in the /usr/local/share/buzztard/songs/ directory. First load a simple demo song like buzz1.xml. As the file loads you should see a list of the piece's required plugins and their parameters scrolling down the screen. When the load process is finished click the Play transport button. If you have no problems playing that file, try something more ambitious. Note that files with the .xml extension are original to Buzztard, while files with the .bmw and .bmx extensions are compositions in the original Buzz formats.
By the way, if you click the Play and don't hear anything check the output volume levels for Buzztard and your system mixer. Some demos and pieces need a level adjustment before they will be heard, a fact that caused this reviewer some anxiety until he realized what was happening.
To stress-test the program load Aehnatron-noPrimiFun.bmw, the file displayed in Figure 1. This piece employs a large number of complex machines and lasts for almost 11 minutes of playtime. I'm happy to report that it runs perfectly on my JAD 1.0 system with the GStreamer jacksink device. QJackCtl reported no xruns.
Users should note that not all of the included demos will run without complaint. Some will load but not play, others may refuse to load at all. Note also that the GUI may not always update properly, but a simple zoom-in and zoom-out will redraw the display correctly. Some of these errors are system-dependent and may disappear after upgrading your graphics or audio subsystems.
When playing the demo files listen carefully to the audio output. If you hear crackling, dropouts, or any other audio inconsistencies you may need to switch your default sound driver. To do so, open the Edit/Preferences dialog and select the Audio Devices section. The GStreamer back-end supplies a variety of audio "sinks" for ALSA, JACK, PulseAudio, OSS/OSS4 (kernel modules and the package from 4Front Technologies), and file output. The new device will be active on your next Play keypress.
Alas, these sinks are not all equally useful, at least not for my current systems. For example, in my tests I discovered that the JACK sink didn't work at all on my Ubuntu box but works fine on my OpenSUSE installations. The alsasink works creditably on both machines. Sorry, I didn't test the esd and PulseAudio sinks. Again, Buzztard's audio performance depends on GStreamer's capabilities, so if you have audio output problems you may need to update your GStreamer packages.
The User Interface
Buzztard's GUI is divided into tabbed workspaces for machine creation and connection, pattern composition, song sequence arrangement, a sample loader/loop editor (a.k.a. the Wave Table tab, in Buzztard-speak), and editors for adding metadata and other information about your work. The pattern and song tabs follow the designs in older trackers where musical patterns are composed as event lists and a song is created as a sequence of patterns. The sample loader/editor is another standard component of Old School trackers, though at this time its facilities are rather limited in Buzztard. Forward and ping-pong loops are supported, and loop start/end points can be defined in the sample editor, but more extensive edits must be performed in a dedicated soundfile editor.
Traditional trackers typically include some provision for metadata such as title, composer's name, and miscellaneous notes. Buzztard's information tab continues the tradition with an editor for specific metadata and an area for adding free text. The Information tab also includes the song tempo and time signature settings in its metadata fields.
The Machines tab represents the evolution from older tracker designs. The original trackers employed brief audio samples as their primary sound sources, a design reflected in Buzztard's wave table tab. Later development included MIDI output to external hardware and software sound sources, adding synthesizers and more powerful samplers to a tracker's composition targets. The machine combines the best of these worlds, functioning as a simple element in an audio processing network or as a completely self-contained module (Figure 2).
Now let's make a little noise of our own to see how the Buzztard UI works for an original composition.
Using Buzztard: Phase 2
Music production in Buzztard is a multi-stage process. The program mandates no specific work-flow, but the process must include at least the creation of a pattern event list and the selection of an instrument or instruments to perform the listed events. For this example I'll start by setting up my instruments.
An event can be performed by a machine or a soundfile. Thus, I can use either a synthesized bass drum or a sampled one, or I could use both. However, their setups differ significantly. A machine is invoked in the Machine tab by right-clicking in the machine graph and selecting Add New Machine from the pop-up menu. Choose a machine from the list of generators and it will appear on the graph. Shift-click on the new machine to activate its wiring status, then drag the wire into the Master machine. Now the added machine is ready for use as an instrument for your pattern event lists. In similar fashion a soundfile becomes an instrument in the Wave Table tab described above. Like a machine the soundfile will be joined to a specific pattern in the Pattern tab.
Our little example demonstrates how to use Buzztard in Ye Olden Way, i.e. by loading soundfiles and triggering their sounds with events in the pattern editor. We add the Matilda Tracker machine to the machine graph, wire it to the Master machine, and our audio production unit is almost ready to rock. Remember, Old School tracking uses audio files for its sound sources, so we need to select and add some sounds for the machine in the Wave Table tab (Figure 3). Next we need to give it some notes to play.
Buzztard's Pattern editor both resembles and differs from the Old School editors. Patterns are designed in the typical manner by entering events in the composition grid, but in Buzztard they are assigned to and numbered per machine, so multiple machines may have quite different patterns yet share the same pattern numbers. The pattern must be added to the Sequence tab, else testing the pattern will not create a sound. If the pattern name in the selector combo box (pattern view) or pattern-list (sequence view) is gray instead of black, the pattern has not been added to the sequence and will not play. Later we'll see how all that works in Buzztard's song sequence composer, but for now let's continue our look into the Pattern editor.
Traditional trackers usually present a fixed number of event fields for each pattern. The machine concept necessitates a more flexible approach. Each machine has its own set of parameters controllable within the pattern event list, so you will see the number of fields in a pattern vary from machine to machine. Alas, space here forbids a detailed explanation of the various fields, but the program's tooltips offer helpful basic descriptions.
Events are entered into the pattern grid with the computer keyboard. By default the bottom row of keys on your computer keyboard will produce the same notes as the white keys on a piano, starting with C2 (the actual sounding octave can be set in the Pattern tab). The whole layout on a QWERTY keyboard follows this plan :
S D G H J Z X C V B N M
which corresponds to the piano's chromatic note order :
C# D# F# G# A# C D E F G A B
The upper row of alphanumerical keys is laid out in similar fashion to continue the note range into a second octave. Further octaviation is managed in the Pattern tab.
Alas, MIDI input is not yet supported. However, working with the computer keyboard in this manner is easy and can be a very fast input method.
Our test will run a short scale fragment. To create such a pattern we locate the cursor over the note field and then press one of the computer keyboard's assigned keys. Figure 4 shows off the results after entering four note events. You can check how your pattern sounds by clicking the Play button while in the Pattern edit mode. When you are satisfied with your pattern work it's time to employ the Song sequence editor.
Figure 5 displays the default appearance of the sequence editor after a pattern has been created. To create a sequence just select an instrument column and type in the pattern number for the particular machine and that's it. If you have more than one pattern per machine you'll use the individual pattern numbers (e.g. 00, 01, 02, etc). Each machine's pattern numbers or names are listed in the window at the right side of the tab.
While still in the Song tab click the Play transport button to hear the sequence of your patterns. Congratulations, you've written your first piece in Buzztard. Pretty cool, eh ? At this point you can add new machines and patterns to your new song, or you can decide to stop and preserve your masterpiece for posterity.
It's nice to see the Old School methods supported, but Buzztard offers whole new ways of working with a tracker. Alas, I have no more space to describe its use to the composer. The demonstration files will take you further into the program's great possibilities, and I suggest that new users bend, fold, spindle, and mangle those demos to gain a deeper understanding of the Tao of Buzztard.
You can save your work in Buzztard format (.bzt or .xml) with or without externals, or you can choose to save it in the original Buzz song file format (.bmw or .bmx), with or without wavefiles. Sorry, Buzztard cannot load or save music modules in the popular MOD or IT formats. The program also includes a Record utility for saving your composition in a variety of compressed and uncompressed soundfile formats, and as a further amenity you can choose between a mix to a single track or a mix with separate tracks for each sound source in your piece.
The program's on-line documentation resides at /usr/local/share/gnome/help/buzztard-edit/C/buzztard-edit.xml. The Help button should call this file, but thanks to a bug in the GNOME Help system it doesn't work on my OpenSUSE 10.2 and Ubuntu 8.10 systems. On a non-borked system this command will summon GNOME's default Help browser (yelp) and open the Buzztard help :
Fortunately the buzz, combi, and melo demonstration files provide a progressive series of etudes for building your own masterworks, and if all else fails you can ask for assistance from the developers themselves on the #buzztard IRC channel at Freenode.
A helpful list of keyboard shortcuts in Buzztard is also available for download.
Impressions And Into The Future
Buzztard's design is different from an Old School tracker, different enough to give me some problems in my initial explorations. However, with the signal assistance of developer Stefan Kost I became more comfortable with the program. New users may find Buzztard easier to learn if they're not carrying Old School baggage, though even more experienced hands like myself will find that Buzztard is a pleasure to learn and use. As a continuation of the Buzz project Buzztard deserves praise, but its future progress lies within its own unique development. Buzztard's Roadmap charts an ambitious path for the project. The public release of version 0.5.0 intends to complete the inclusion of the major features of the original Buzz tracker, and subsequent releases will bring MIDI I/O, OSC support, and further compatibility with Buzz files. Ambitious indeed, but the project team has demonstrated its dedication to the cause. I look forward to the next stage of the Buzztard revolution.
In part 2 of this article I'll interview Buzztard project leader Stefan Kost. Until then, stay well-intoned.
Similis sum folio de quo ludunt venti.
Free DevOps eBooks, Videos, and more!
Regardless of where you are in your DevOps process, Linux Journal can help!
We offer here the DEFINITIVE DevOps for Dummies, a mobile Application Development Primer, and advice & help from the expert sources like:
- Linux Journal
- Users, Permissions and Multitenant Sites
- New Products
- Flexible Access Control with Squid Proxy
- Security in Three Ds: Detect, Decide and Deny
- High-Availability Storage with HA-LVM
- DevOps: Everything You Need to Know
- Tighten Up SSH
- Non-Linux FOSS: MenuMeters
- Solving ODEs on Linux
- Nmap—Not Just for Evil!