Development
The synthesizers of Sean Bolton
The community of Linux audio developers is a relatively small group that includes a core of programmers committed to the evolution of the Linux audio ecosystem. Some developers work on the unglamorous but necessary system components — sound card drivers, kernel interfaces, function libraries, etc. — while others work on the shinier applications level. Developer/musician Sean M. Bolton wears hats in both domains, with a special attachment to the DSSI plugin interface. His contributions include code for the interface specification, a DSSI plugin host, and three software synthesizers.This article profiles Sean's synthesizers, Xsynth, WhySynth, and Hexter. As we might expect, they are DSSI-compatible plugins, so any host that supports DSSI should run them without complaint. You'll need the DSSI library and utilities first, but most mainstream distributions include the software in their package repositories. Check your system's package manager for an installable bundle. If you need to build the DSSI system yourself, have no fear, the software is easy to build, with no extraordinary dependencies. The synthesizers are equally straightforward to build and install.
For those who want to quickly play with these synthesizers, the complete DSSI system includes a handy command-line utility for running DSSI plugins as standalone applications. My tests were made with this invocation from an xterm command prompt:
jack-dssi-host /usr/lib/dssi/somesynth.so
The synthesizers were correctly listed in the audio and ALSA MIDI tabs in QJackCtl. I connected my Akai LP25 keyboard and various sequencers to play each synthesizer, and I'm happy to report that I experienced no problems. Sean's synthesizers are stable applications, ALSA and JACK compatible, with great sound and copious presets. Let's look at each one in some detail.
Xsynth 0.9.4
Xsynth
is a 2-oscillator subtractive
synthesizer based on an original design by Steve Brookes. The synthesizer's
architecture is revealed by its patch editor (right) — the output from
the oscillators is mixed, filtered, amplified, and modulated before
reaching the audio output stage, a typical arrangement for a subtractive
synthesizer. Each oscillator can select one of seven cyclic waveforms, the
pulse-width duty
cycle is user-definable, and oscillator sync is
available. The filter is relatively simple, with controls only for cutoff
frequency, resonance, and rolloff mode. The amplifier envelope is likewise
uncomplicated, with a typical ADSR (attack/decay/sustain/release) envelope
to control the evolution of the sound's amplitude. The LFO
includes a set of six waveforms, a single control for the frequency of the
selected waveform, and two controls for pitch modulation and filter
modulation sensitivity. No on-board effects are available, but I prefer
mine external anyway. JACK-Rack or the awesome Rakarrak make good processing
companions for Xsynth.
Xsynth's documentation consists of a README file in the source package and a default collection of 50+ presets. The README contains much valuable information regarding the synthesizer's architecture and controls, and the presets include excellent examples of commonly encountered analog synthesizer sounds such as string pads, resonant filter sweeps, and fat basses. From the README and the presets you can learn all you need to know to master the synthesis method. You can also learn that Xsynth responds to various MIDI messages, including note-on/off, velocity, aftertouch, program change, mod wheel, volume control, and others. See the file for the complete details.
Xsynth is a standard item in the full DSSI package, so if you've installed DSSI you've already installed Xsynth and you're ready to roll with it. The DSSI software is available in the repositories for most mainstream Linux distributions, but if yours doesn't have it you can pick up the source code on the DSSI site.
There's not much more to say about Xsynth. It's an uncomplicated realization of a classic analog synthesis method, presented in an uncluttered interface, easy to learn and use. I like the sound of many of its presets, especially when they're routed through an external effects processor, and it's great fun to program for my own sounds. But Xsynth is no mere toy — even simple subtractive synthesis is capable of making wonderful rich sounds, and you may well lose track of time while you explore its capabilities.
WhySynth 120903
WhySynth is what Xsynth dreams of becoming when it grows up. Both synthesizers are designed with the same large-scale architecture, that of the analog subtractive synthesizer, but WhySynth's implementation of the synthesis method differs profoundly at the detail level. The number of oscillators has been doubled over what Xsynth offers, the waveform selection has increased to more than 168 waves, and each oscillator can be configured to a unique modality (e.g., wavecycle, frequency modulation (FM), noise). The number of filters has increased to two, we now have three LFOs, and the number of envelope generators (EGs) has grown from two to five. WhySynth adds an effects stage to the classic design, though it is wisely restricted to only two reverbs and a delay line. The parameter set for each stage has likewise expanded for considerably finer control over your sounds.
WhySynth's UI follows the design set by Xsynth. The program opens to a
single panel with tabs for the preset patch list and the synthesizer's global
configuration. The patch editor is considerably more complex
than Xsynth's, so it gets its own window, available from the Edit
menu. Like its sibling, WhySynth's editor clarifies the organization of the
synthesis method. WhySynth is a deep synthesizer, meaning that it allows
very fine
control of the sound-shaping process, and it is capable of timbres and
effects not available with a simpler architecture.
WhySynth can import Xsynth patches and banks, so work done in that synthesizer can be brought into WhySynth for more detailed design. WhSynth also includes a facility for interpreting patches in sysex format for Kawai's K4 synthesizer. Actually, Sean indicates that WhySynth mis-interprets them, but it's obvious that those patches provided a great resource during the creation of WhySynth's 280+ presets, of which more than 130 have been derived from patches for the K4.
The documentation is slim but informative. The WhySynth web site and the source package README contain the same material describing the synthesizer's design in detail. Given the complexity of the program, I suggest reading the documentation thoroughly if you plan on making your own sounds. Of course the default patches are instructive, and WhySynth provides a number of "development" patches to be used as starter material. You'll also want to read the docs to find out what MIDI controllers have been mapped to WhySynth's synthesis parameters for dynamic control of your sound's evolution.
Hexter 1.0.1
According to its "About" panel, Hexter is a "Yamaha DX7 modeling software synthesizer for the DSSI Soft Synth Interface". The DX7 was Yamaha's most famous synthesizer built with FM (frequency modulation) audio technology licensed from Stanford University, where Dr. John Chowning invented the method. This review is not the place for an explanation of FM, please see the Wikipedia on FM synthesis for a good summary and some excellent external links. It suffices here to note that FM differs substantially from the synthesis methods seen and heard in Xsynth and WhySynth.
Hexter opens to a display similar to its siblings, a single panel with tabs for patch selection, global configuration, and performance settings. The patch selector is self-explanatory. The "Configuration" tab sets the synthesizer master tuning, output volume, and polyphony. It also toggles access to ALSA "sysex" editing, about which I'll have more to say later. The additional "Performance" tab includes settings for pitch bend, modulation wheel, foot controller, and breath controller. The bend and mod wheels were parts of the original DX7 hardware, the controllers were external devices. All these devices were designed to add greater expressive capabilities during performance, for example, by modulating a sustained tone by controlling its vibrato with the mod wheel.
The DX7 spawned an industry of third-party extensions, add-ons, and designer
patch libraries. The hardware-based DX7 additions are history, but a vast
number of
DX7 patches are still available as systems-exclusive (sysex) data
files. Hexter can read a variety of DX-related sysex files, but only so far
as they contain the basic elements of the original DX7. Alas, there's no
support for the extended features of other members of Yamaha's DX
family. However, Hexter also supports the file format for the Sideman D/TX
patch editor/librarian by Voyetra. That's great news
for me, as I used that software for many years to program my beloved TX802, a rack-mount
synthesizer in the mkII family of Yamaha's DX/TX synthesizers. Alas, the 802 is
gone, but my patch collection has received a new lease on life thanks to
Hexter.
Catching up with Xsynth and WhySynth, Hexter now has a graphic editor for basic DX7 patch parameters. Unlike its siblings, Hexter's editor includes graphic envelope displays for relevant parameters. Alas, the envelope breakpoints can't be adjusted directly, but the visual feedback is immediate when values are set in the scroll boxes.
As I mentioned earlier, the Configuration tab includes a toggle for
enabling patch edits via system-exclusive messages. A separate ALSA MIDI
port is opened for receiving sysex messages from an appropriate device or
program, such as a hardware DX/TX synthesizer or a software
editor/librarian. The integrated editor will be sufficient for most users,
but I found a very helpful purpose for the sysex connection. The Voyetra
Sideman editor includes a well-designed patch randomizer, and Hexter
conveniently provides a compatible target synthesizer for the editor's
patches. The Sideman software runs smoothly under DOSemu, I use a MIDI connections utility
such as aconnect or QJackCtl to route its output to Hexter's sysex port,
and voilà: I can program Hexter in realtime with an editor running in an
emulated MS-DOS environment.
Hexter includes no on-board effects processors. No problem, it's a JACK-savvy application, so just route its output to JACK-Rack or Rakarrak. The original DX never sounded so good.
Regarding external control: Hexter's synthesis parameters are controllable with a set of pre-assigned MIDI continuous controllers, including a lengthy list of parameters addressed by the NRPN (non-registered parameter numbers). The default assignments can be found in the source package's README. Hexter also supports OpenSound Control (OSC) but I haven't yet looked into its possibilities.
I've owned four FM synthesizers from Yamaha. My first synthesizer was a TX81Z, followed by an FB01, both of which were 4-operator FM boxes. I stepped up to the 6-operator machines with the TX802 and the massively powerful TG77. I've also tested FM7 and FM8, excellent FM synthesis programs from Native Instruments. Alas, my hardware boxes are gone now, and the proprietary software isn't made for Linux. However, I'm not complaining at all — I have Hexter. I won't compare it to the hardware or the Native Instruments synthesizers, I'll just say that I'm happy to hear my favorite FM sounds again.
Sounding Out
By now I hear you say, "But how do they sound?". Well, you can check out the following links for some demonstrations of the Sean Bolton synthesizer collection:
- Xsynth DSSI on YouTube
- The Infinite Repeat — DJ AutoStatic on YouTube (The artist uses WhySynth among other synthesizers)
- Demos comparing Hexter to a Yamaha TX7
Subtractive and FM synthesizers are staple items in the complete modern computer-controlled studio. The two synthesis methods make a good pair; subtractive synthesizers are often used for dense, rich, layered sounds and strings, while FM excels in metallic and bell-like sounds. Sean Bolton has given us three capable synthesizers, now it's up to us to show off their capabilities. Try them all — they're all free and open-source Linux software licensed under the GPL — and do let us know if you make some joyful noises with them.
Brief items
Quotes of the week
GNU Guile 2.0.7 released
Version 2.0.7 of the GNU Guile language is out. It adds an implementation of "curly infix expressions," per-port reader options, a number of extension loading improvements, and something known as "nested futures": "Futures may now be nested: a future can itself spawn and then `touch' other futures. In addition, any thread that touches a future that has not completed now processes other futures while waiting for the touched future to completed."
Mozilla joins Internet Society
Mozilla's Josh Aas announced on his blog that the browser maker was joining the Internet Society (ISOC) as a "Silver" member, in order to support its Internet Engineering Task Force (IETF) work on core protocols beyond HTTP. "Today we’re heavily involved in IETF working groups relating to key Internet technologies such as TLS, HTTP and HTTP/2, RTCWeb, WebSockets, and others.
" ISOC, of course, is the parent organization of IETF and an alphabet soup of other Internet standards bodies.
Ekiga 4.0 released
Version 4.0 of the Ekiga telephony application is out. It features a new user interface, some new codecs, auto-answer functionality, a number of improvements in SIP support, and more.The first "shim" UEFI secure bootloader released
Matthew Garrett has announced the availability of the first "usable" version of the "shim" UEFI secure bootloader. "If you want, you're then free to impose any level of additional signing restrictions - it's entirely possible to use this signing as the basis of a complete chain of trust, including kernel lockdowns and signed module loading. However, since the end-user has explicitly indicated that they trust your code, you're under no obligation to do so. You should make it clear to your users what level of trust they'll be able to place in their system after installing your key, if only to allow them to make an informed decision about whether they want to or not."
Nmap 6.25 released
Version 6.25 of the Nmap network scanner is out; it contains a lot of new stuff. "Nmap 6.25 contains hundreds of improvements, including 85 new NSE scripts, nearly 1,000 new OS and service detection fingerprints, performance enhancements such as the new kqueue and poll I/O engines, better IPv6 traceroute support, Windows 8 improvements, and much more."
Buildroot 2012.11 available
Version 2012.11 of the buildroot embedded Linux system-creation tool has been released. This stable release adds initial support for Aarch64, a large number of new packages, and updates to several core components, including: "Binutils 2.23.1, GCC 4.7.2. We're now defaulting to GCC 4.6. Newer Codebench and Linaro external toolchains. Libtirpc support for modern Glibc variants
"
Newsletters and articles
Development newsletters from the past week
- Caml Weekly News (November 4)
- What's cooking in git.git (November 29)
- Haskell Weekly News (November 28)
- Mozilla Hacks Weekly (November 29)
- OpenStack Weekly Newsletter (November 30)
- Perl Weekly (December 3)
- PostgreSQL Weekly News (December 2)
- Ruby Weekly (November 29)
Taylor: Avoiding Jitter in Composited Frame Display
Owen Taylor has written a detailed update about his ongoing work on compositor frame timing (to which we provided an introduction back in August). This time, the issue at hand is coping with video playback or other sources that need a fixed frame rate not equal to the display's refresh rate. "I’m pretty happy with how this algorithm works out in testing, and it may be as good as we can get for X. The main downside I know of is that it only individually solves the two problems – handling clients that need all the rendering resources of the system and handling clients that want minimum jitter for displayed frames, it doesn’t solve the combination.
"
GIMP Magazine issue 2 available
The second issue of Gimp Magazine has been released as a 100-page, 65MB PDF file. covered topics include a graphic novel tutorial, oil painting, using graphic tablets, a number of artist interviews, and more.
Page editor: Nathan Willis
Next page:
Announcements>>