INFINITY 1.0 (WIN)/BUILDING BLOCKS 2.1 (WIN)Build customized music applications with object-oriented MIDI toolkits.
Sometimes I imagine coming home at night to an empty house and discovering all my MIDI instruments jamming together. The idea isn't really that far-fetched: software tools like Sound Quest's Infinity and AuReality's Building Blocks, combined with a modest computer-and-MIDI setup, let you create sophisticated and customized automatic "music machines" that become interesting and useful very quickly.
Using algorithms to generate musical information is not a new idea. In fact, such algorithmic composition is one of the earliest uses of general-purpose computers. But the visual tools offered in Infinity and Building Blocks make the technique much more accessible and enjoyable to explore.
Infinity 1.0, described by its creators as a "graphic real-time control language," arrives on CD-ROM with a compact yet thorough printed manual. Building Blocks 2.1, the latest version of a similar but somewhat smaller-scale program that has been around for a few years, introduces many new features and offers significantly improved performance over that of previous releases. You can order Building Blocks through the Internet; you will receive it as an e-mail attachment within a day or so after you place your order. Although Infinity and Building Blocks are quite similar in many ways, each has its unique strengths and features.
WHAT'S THE OBJECT?Both programs provide a work space on which you place functional components and interconnect them to achieve the results you want. (Building Blocks calls these Modules, and Infinity refers to them as Objects.) Some components let you get data into the work space from your MIDI keyboard, mouse, or computer keyboard, and you can then employ a random number generator, to name a couple of typical possibilities. Other components process the data: you can create a chord from each note in a riff - perhaps with a slight time delay - or constrain notes in a pattern to fit in a scale. And of course some Objects or Modules send the data back to a synthesizer so you can hear the results. Building Blocks calls the completed design network a Structure; in Infinity it's known as a Patch.
You can use these programs for just about anything imaginable that can be done with MIDI data - customized MIDI arpeggiators and echo effects, various kinds of MIDI event filters and processors, experiments with automated compositional structures, specialized drumming machines, or even ear-training exercises. You can create hypnotic and constantly changing background music, innovative compositional processes, and interactive "intelligent" electronic orchestras. Or you can develop simple, practical control functions for your studio.
IT'S A SETUPI found that both programs were easy to set up, both located all my MIDI devices, and both made it easy to establish default ports and other settings. Building Blocks has a sequencerlike tape transport with a tempo setting, and you click on the Play button to activate a Structure you've created. Infinity has no similar tape transport, although you could easily set up a timer to regulate tempo.
Both programs offer contextual help and tutorials. In general, the help is clear and consistently organized. Infinity employs a standard Windows help system; Building Blocks' HTML-based help is less convenient because it requires you to load your Web browser and doesn't provide a search function.
I recommend that you spend time getting acquainted with each Object or Module, one by one, before you start building Patches or Structures of any complexity. Also look over the numerous examples each program offers. You will need to be comfortable with MIDI - what Velocity values are, how controllers work, how MIDI channels are organized, and the like - to get the most out of Infinity or Building Blocks.
MAKE ME A PALETTEBoth programs organize Objects or Modules by category and make them available in a hierarchical menu. The categories include math functions, timing functions, and input and output functions (see each manufacturer's Web site for a complete list of components). Infinity gives you the option of either seeing a huge palette containing all Objects or just viewing single-category palettes; you can also place commonly used Objects on the program's main toolbar. Building Blocks, with its smaller number of categories and Modules, offers a tabbed palette always located at the bottom of the screen - a handy feature.
Infinity's Objects tend to be simpler and more abstract than the Modules in Building Blocks, and as a rule you'll use more components to accomplish a task in Infinity than in Building Blocks. For example, with Infinity you use one Object to select the port from which to get MIDI data, and another Object to receive a note value from your synthesizer; a third Object might filter out Note Off messages. In Building Blocks, a single Note In Module allows you to select the port and choose whether to send just Note On, just Note Off, or both.
Say you want to build a simple application that follows every note played on the MIDI keyboard with two notes a fifth and a ninth above the original, with a prescribed delay. Building Blocks has Modules to read the notes in, delay and alter the pitch, and then send the results to an output (see Fig. 1); you use a Control Panel slider to set the delay. Near the top of the screen is the tape transport that controls the program, and at the bottom is the collection of Modules. You can follow the flow of the signal from left to right.
Infinity performs the task in a similar way: a MIDI port receives MIDI data that it sends directly to an output port but also routes to two delay lines (see Fig. 2; note that the signal flows from top to bottom). Two MIDI Processor Objects, shown by the icons with the notehead and blue arrows, handle transposition. (A MIDI Processor is a versatile Object that you can program to perform a wide range of operations on MIDI messages.) A slider controls the delay time. Note Infinity's use of Comment Objects (Adjust Delay and Transposition) - you'll find these text labels useful for keeping track of a Patch's elements.
MODULES ON STEROIDSAlthough some components of Building Blocks and Infinity are fairly simple (for instance, "add two numbers together"), others are quite elaborate, almost like complete programs in themselves. Building Blocks has Echo and Arpeggiator Modules, ready to use right out of the box. Other extremely useful Modules include the Bias Clock, which allows random variations in a timing pattern and can serve many musically interesting uses. The program also provides Drummer, Normal Sequencer, Pattern Sequencer, and Phrase Modules, all with varied means of recording and playing back notes.
Infinity comes with a full-fledged multitrack sequencer, complete with conductor track, piano-roll views, track views, editing features, and more. You could create your own special-purpose sequencer with this Object, or use it within a larger Patch for any number of sophisticated functions - all easily controlled with user-installed buttons or by signals generated elsewhere in the Patch or from other MIDI instruments. You could even create polyrhythmic pieces by simultaneously playing several sequencer Objects, each with its own tempo map. (Most sequencers, including those in the Cakewalk line, by contrast have only one tempo map that regulates all tracks at once.) I also expect that user-created Object libraries will be available soon; in fact, Infinity's Other menu category provides a place for third-party objects.
Infinity's Sub Patch and Disc Patch Objects let you easily create customized and reusable Objects of your own. Building Blocks has a similar component called a Macro Module. With these features, you can encapsulate complex functions into single custom Objects or Modules of your own design that you can reuse elsewhere within a Patch or Structure - or even in different programs - increasing the power and clarity of your designs.
TOOLS FOR CONTROL FREAKSInfinity includes a large number of control Objects such as buttons, sliders, monitors, and LED indicators. It is extremely helpful to insert these items into a Patch to allow interactive changes in values (through a slider, say) or to indicate that a timer or a MIDI output is working correctly. You could, for example, place LED Objects along a circuit to observe the transfer of data at several points.
Building Blocks now features a Control Panel that lets you create input controls for any Module that has at least one input. Although the program lacks similar monitoring features for its outputs, you can view the value an Object is outputting by simply placing the mouse over that Object or double-clicking on a Module to bring up an enlarged panel that displays changing input and output values in real time.
Infinity, reflecting its complexity and resemblance to a computer language, provides several different data types: Int (integer), Float (floating point), Symbol, MIDI event, SysX event, List (a listing of more than one number so that you can work with, say, multiple-byte MIDI messages as single units), Message (any combination of data types), and Hit (a trigger event). The program helps you keep track of all these data types by color-coding the "patch cords" of each, and it won't allow connections between incompatible data categories. (Note, for example, that the blue connectors shown in Fig. 2 represent MIDI messages, while gray connectors indicate numerical data.)
INFINITY AND BEYONDInfinity offers several unique and quite powerful features. Among these is a collection of graphics Objects: you can actually have the program draw simple designs in real time in response to MIDI or other data. The graphics performance is a bit sluggish, but the possibilities are intriguing. For instance, you could use these Objects to create images that change in response to your music, interactive ear-training tools that respond to user input, or colorful visual MIDI monitors.
Infinity also supports playback of audio and video clips, and although you can play only one clip at a time, it's still a useful option. A particularly wild and wonderful feature is the ability to create Cakewalk MFX (MIDI effects) and Steinberg Cubase VST plug-ins - a significant extension of Infinity's functionality. (See the sidebar "Creating Cakewalk MFX Plug-Ins with Infinity.") Also, you can load and send MIDI Quest files directly to your synthesizer. (MIDI Quest is Sound Quest's universal patch editor/librarian. The company reports that communications between Infinity and MIDI Quest will become even more integrated with the release of MIDI Quest 8.0, which features a sophisticated new command set, automation of operations, and the ability to edit MIDI Quest windows from within Infinity.)
With Building Blocks, you can easily record the output of your Structure as a standard MIDI file. First, you simply click the Record button instead of Play, and once you've stopped recording you just save the data as a MIDI file. Recording the MIDI-file data is not quite as straightforward with Infinity, because you first have to create a Sequencer Object and then record your music into it. However, the sequencer can also record all of the program's command and control messages, so you can actually create a sequence that, besides playing MIDI data, executes various Infinity commands at specific times in a song.
Other people can play your Infinity Patches using the free Infinity Player, an essential if your files include audio, video, or graphics. (Player is not available for download, but Infinity users can freely distribute it along with their Patches.) Of course, you can easily save the Patches themselves in their native formats in both programs.
ROOM FOR IMPROVEMENTBuilding Blocks and Infinity are impressive performers, but they're not perfect. I wish both programs made it easier to move multiple patch cords; I often found myself wanting to move a group of patch cords from one input or output to another, or to insert an Object or a Module into a circuit, but both programs require that you remove and then reconnect patch cords one at a time. Infinity does let you substitute one Object for another, automatically replacing appropriate connectors if possible. More automated features like this would be helpful. I would also love to see "monitor" Modules added to Building Blocks for observing outputs - or at least have the option to create output-monitoring options in the Control Panel.
A small operational annoyance with Infinity is that you must aim the mouse on a minuscule area of an Object to move it or make a connection. I did get used to doing this, but it still felt like a bad day at a video target-shooting parlor. Similarly, when I connected cables to inputs in Building Blocks, I had to aim the cursor a little low to hit the target.
I also wish that Infinity had a better way to organize its huge number of Objects: the small palettes for each of the 13 categories quickly clutter your screen, and you can't resize or close them with the mouse (although you can go through a menu to do so). In addition, the program has a huge and comprehensive palette, organized alphabetically, but it is too large and undifferentiated to be of much use. You can add frequently used items to the toolbar, but only as many as will fit in one row; the option of a user-customized palette, divided into categories, would be wonderful.
I really like Infinity's "smart cords" feature, which automatically routes patch cords in neat square angles within the work space (as shown in Fig. 2). But I'd prefer that the cords stay smart when you move Objects! As the program works now, once you start moving your neatly wired Objects, you quickly end up with a scary-looking screen because the cords no longer line up.
Here's a pie-in-the-sky wish: wouldn't it be wonderful if Infinity Player could run in Java? That way, any Patches you create could function on any platform, as well as on the Web. It may not be technically feasible (especially considering that the program makes direct use of Windows routines), but if it could implement Java support, Infinity would be the MIDI toolkit to own.
LAST WORDSIf you want to take control of MIDI, customize your studio, process music data in imaginative ways, explore algorithmic composition, or create interesting rhythms and sound structures, Building Blocks and Infinity will be welcome additions to your studio. Try the demos and see which program suits your style. In my opinion, Building Blocks is almost too cheap not to buy, especially given all that it can do. On the other hand, the much pricier Infinity offers many tempting features, including the ability to create Cakewalk MFX and Cubase VST plug-ins; audio, video, and graphics support; and an interface with the MIDI Quest editor/librarian. With its serious programming power, Infinity is an important new tool for electronic musicians.
Cakewalk MFX (MIDI effects) plug-ins are surprisingly easy to build in Infinity, and the program's documentation explains the process very well. An installation of Infinity should include the Infinity MFX option automatically, assuming you have a copy of one of these Cakewalk programs: Pro Audio 8.0 or higher, Home Studio 8.0 or higher, and Guitar Studio 2.0 or higher.
To create an MFX plug-in, you first create a sequence in your software, then select any number of tracks and open up a Console window. Right-click in the area at the top of the track console on which you want to create MIDI effects - that is, the space above the controls where effects are displayed - and select Infinity MFX on the submenu that appears. (You should find the process so far familiar; it's the same as selecting the built-in Cakewalk FX.) This action inserts an empty MFX Patch into the circuit, and an Infinity work space will come up.
Now let's create a MIDI effect that echoes every note in the designated track with a delay of 30 ticks, a decrease in Velocity of 50 percent, and a change in pitch of 7 semitones.
In the Infinity work space, you can create Patches that read and process data recorded in your sequencer tracks. Fig. A shows what such a Patch looks like. On the left, a Cakewalk Event In Object and a Cakewalk Event Out Object are connected; this setup simply plays back each note of your sequence without any changes.
On the right, a second Cakewalk Event In Object gets sent to Processor Objects that delay the note and adjust its Velocity. A MIDI In Note Object splits out the MIDI note information, so you can add 7 to the pitch number using a math Object. All the MIDI data then returns to a MIDI Out Note, where it is reassembled into a MIDI message and forwarded to another Cakewalk Event Out Object. Once you've created this effect, you could apply it to any tracks of your sequence. The Patch operates in real time while the sequence is playing.
The program works with Steinberg Cubase VST in a similar way. I purposely selected a very basic effect for demonstration, but Infinity's flexibility and your imagination could take you far beyond this simple example. You can amplify the power of Infinity significantly by combining it with all of the sophisticated tools that live in your sequencer.