At the Sounding Edge: Sounding Better All The Time
The second annual conference of Linux audio developers will be held in Karlsruhe from April 28 through May 2. If you're in Germany during that period and happen to be near Karlsruhe, you might want to stop by the very cool Zentrum fur Kunst und Medientechnologie (ZKM) and check out some of the many lectures and presentations about the cutting edge work going on in Linux audio software development.
For those of you who can't make it to the conference, I present a brief State Of The Art message here in this month's installment of my At the Sounding Edge series. There's so much going on in the Linux sound software world that I can't hope to cover everything--not even all of the most important developments--but hopefully I can give interested readers a sense of what's happening and what directions we're taking.
Without a doubt, the two most important development tracks are the ALSA and JACK projects. Both supply the foundation for much of the most interesting application development happening today, and support for ALSA/JACK rapidly is becoming de rigeur in new sound software for Linux. I can't explore the technical depths of these fundamental systems, but I'll briefly describe what they are and why they are so important to the Linux audio development and user communities.
I've covered ALSA in a previous column, so I'm going to be brief about it in this article. ALSA is becoming a more familiar acronym, thanks to its inclusion in the Linux kernel sources. The ALSA sound system effectively replaces the older OSS/Free system, greatly expanding the sound services available to developers and normal users. ALSA provides sound card drivers, a library (libasound) for easy access to audio system functions and a suite of handy utilities. Soundcard support ranges from consumer grade cards to high-end professional digital audio boards. This advanced hardware support is necessary for users wanting to use Linux in more demanding audio production environments. Thanks to the efforts of the ALSA team, we now can claim support for a small but significant number of pro-audio boards. Without that support the Linux kernel sound system would remain bound to consumer-grade audio, which may be effective enough for casual use but certainly is insufficient for deployment in a professional studio.
ALSA's utilities include tools for your soundcard mixer (alsamixer, amixer), MIDI connectivity (aconnect), simple record and play programs (aplay, arecord) and a variety of chipset-specific amenities. Almost all are command-line tools, and although they may seem humble mini-applications, they are quite powerful. I refer the interested reader to the information available from the ALSA Web site; if you already have ALSA installed, you can read the informative manual pages (e.g., man aplay).
The list of the wonders of ALSA goes on, but this is neither the time or place to explore them. Again, I refer the reader to the ALSA Web site for the most up-to-date information regarding ALSA's current capabilities.
JACK is perhaps one of the most amazing pieces of software yet written for the Linux audio system. The brainchild of Paul Davis (author of the Ardour hard-disk recording system), JACK's capabilities include these outstanding features :
An easy method of adding audio support to new applications
A robust professional-grade audio server designed especially for low-latency systems
A transport control mechanism for synchronizing the activity of JACK-aware clients
The first feature is, of course, of special interest to programmers. Writing directly for the ALSA API certainly is possible, but by comparison JACK is a much simpler way to provide audio services to a client application. It is no exaggeration to say that JACK has the potential to revolutionize Linux audio development. The list of applications already supporting it is an impressive testimony to its appeal and possibilities (see the JACK Web site for a list of current JACK-aware software).
JACK is fairly agnostic about the underlying audio system, supporting ALSA, OSS and PortAudio. It also is expanding to become a multi-platform solution, with some deployment already possible under the Mac OS X. Again, JACK relieves the developer of concerns about the lower-level audio system, providing a simple and clean interface to the underlying system without sacrificing the system's capabilities.
Inter-application communication is an important feature of both JACK and ALSA. The ALSA sequencer API provides a way for compliant MIDI applications to share I/O ports, permitting multiple access and destinations. JACK does the same for audio, a rather more spectacular feat of programming: MIDI streams are relatively thin compared to digital audio and somewhat easier to manage and synchronize. Digital audio is another kind of beast entirely, with inherent issues of latency effecting the perfect synchronization of I/O streams. JACK has been designed to address and resolve those issues, making it possible to route and connect audio streams in much the same manner as ALSA's sequencer handles MIDI data.
Another exciting aspect of JACK is its transport control. One of the Holy Grails of audio development on any platform is the smooth control (start/stop/continue) of various applications by using a master controller. JACK can do this now with a number of applications, although not all are completely transport-aware. An application must be written with specific support for the JACK transport API, and only recently has that interface stabilized to the point of wider acceptance and deployment. Many well-known Linux sound and music applications already support the JACK transport controls, and more are on the way.
Before leaving this section, I must note that the OSS/Linux driver package from 4Front Technologies still is alive and in active development. However, my focus here is on free and open-source projects. I will cover OSS/Linux and other commercial Linux audio ventures in a future column.
Similis sum folio de quo ludunt venti.
- Give new life to old phones and tablets with these tips!
- Readers' Choice Awards--Nominate Your Apps & Gadgets Now!
- Linux Systems Administrator
- Memory Ordering in Modern Microprocessors, Part I
- Senior Perl Developer
- Technical Support Rep
- Tech Tip: Really Simple HTTP Server with Python
- UX Designer
- Returning Values from Bash Functions