Duke Ellington Nutcracker

Way back in December of 2012, the University of Miami’s Henry Mancini Orchestra and Concert Jazz Band joined together for a concert of Americana, featuring Copland’s Appalachian Spring and Duke Ellington’s arrangement of The Nutcracker. I recorded this concert and later submitted the virtually-untouched multitrack recording from the live show to Downbeat Magazine’s Student Music Awards in the category ‘Best Engineered Live Recording’. They liked it, the recording won, and I’ve meant to get it posted online in its entirety ever since.

(a little proof, for good measure)

Its only taken a year and a half, but, the recordings are finally all online, too.

Listen to the recordings on the original blog post

SpaceyDelayer - a Multi-Tap Tape Delay Plugin

A fun, VST-compatible audio processing plugin that emulates classic multitap tape delay hardware like the Boss RE-20.

The novel feature of SpaceyDelayer is that the offset time between taps in the delay is configurable - in a typical multitap tape delay, the user can specify the time between the initial playback and the first delay, but with SpaceyDelayer, the interval between the plugin’s 3 delay taps is also configurable.

Nonlinear waveshaping and bandpass filtering round out the “tape” sound, emulating saturation and the frequency response weaknesses of these older devices.

All of the DSP “guts” are contained within SpaceyDelayer.cpp and DDLModule.cpp - in each file’s respective ProcessAudioFrame() function. The real magic is the getPastSample() function, which allows me to pull an arbitrary sample from the delay line without inserting a new sample (since we pull multiple taps within a single sample period).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// From CSpaceyDelayer::ProcessAudioFrame()

float xn_l = pInputBuffer[0];
float yn_l = 0.0;

// Do LEFT (MONO) Channel; there is always at least one input/one output
// (INSERT Effect)
m_DDL_Left.processAudioFrame(&xn_l, &yn_l, 1, 1);
if(m_uMultipleTaps == On)
{
    yn_l = (yn_l + m_DDL_Left.getPastSample((int)m_fTapSize));
    yn_l = (yn_l + m_DDL_Left.getPastSample((int)m_fTapSize*2));
    yn_l = yn_l * 0.33; //scale back to original-ish amplitude after 3 delay sums
}
pOutputBuffer[0] = m_fWetness*yn_l + (1.0 - m_fWetness)*xn_l;

Do a little scaling and summing to allow for wetness values and to avoid clipping, repeat more times if needed for other channels, and you’ve got the gist of it.

See the full source code here.

Naval Academy Next Wave

As part of a group of military band tracks I’m working to restore of 7” tapes, the US Naval Academy’s Next Wave big band was one of the first I finished. Listen below to several of the tunes from this tape, recorded live at an unknown venue in the late 1960s. Featured soloists include Barry Weinstein, Denny Davis, and several others (called out by the emcee as appropriate).

Barry Manilow - Lay Me Down

Chick Corea - Spain

George Benson - Unknown Song

Skip Clarke - Sweet Loveliness

Stan Kennedy - Yesterdays

Unknown Composer - Come Back to Me

The Single LAB Subwoofer

After seeing the Osprey Dual LAB in action, a friend of mine wanted me to help her pick out a subwoofer setup for her car. We decided we could do one better than something off the shelf, so it became time to take the great Dual LAB design and distill it down to something that would actually be reasonable for installation into a Honda Civic. The second goal here was to keep cost down and simplify construction, so that meant some interesting twists like keeping the external dimensions close to minimize need for internal bracing, using PVC pipe for port tubes, etc.

What’d I come up with?

The box was very compact, took a LAB 12 driver, and simulated really well (as evidenced by the plots below):

Time to build! The parts collection was indeed simple, which was perfect! A half-sheet of MDF was plenty, and since this was going into a car, MDF was a fine material, we didn’t need the birch plywood the Dual LAB got.

Unfortunately, I never got a picture of this one when it was all built. We finished the cabinet in your standard “rat fur” black carpet, and it still sits happily in the trunk of that Honda Civic. Maybe you’ve heard it if you’re in north Pinellas County.

A Simple Transistor Amplifier Design

As a part of my education at UMiami, I’ve taken a few courses that specifically apply electronics knowledge to audio applications. For a final project in one of these courses, I recently designed a pretty straightforward transistor amplifier with a peak limiter with the goals that I’d be able to build this thing (eventually) using a spare 1U rack chassis I have in storage and a nice Lundahl toroidal transformer, also in storage, that would make a great foundation for the power supply.

There is a complete writeup on the project (complete with schematics and simulations) available here.

Henry Mancini Institute Orchestra - Americana - November 30th 2012

Just recently the Henry Mancini Institute Orchestra put on a concert of Americana, featuring the best of American music. This is a group of (mostly) DMA candidates in the Frost School of Music, some of whom are also Fellows with the New World Symphony (a training program for soon-to-be orchestral player hopefuls, under the artistic direction of Michael Tilson Thomas).

The concert opened with an original staging of Aaron Copland’s Appalachian Spring, recorded into MAGIX Seqouia through a Yamaha DM-2000 console’s preamps and RME HDSP MADI interface at 24bit/96khz. Microphones were a 50cm spaced pair of DPA 4051, suspended roughly 12 feet above and 3 feet behind the conductor.

After the above Copland performance, the Mancini Institutes’s big band took the stage, for a performance of the complete Duke Ellington Nutcracker (music by Tchaikovsky, arranged by Ellington for big band).

The big band consisted of 4 trumpets, 4 trombones, 5 woodwinds, piano, drums, and bass. Microphone selections consisted of Neumann KMS-105s on trumpets and snare drum, Neumann TLM-103s on trombones and baritone sax / bass clarinet, Schoeps CMC 6xt5g on all other woodwinds, AKG C414 EBs on piano, a Sennheiser MD-421 on kick drum, DPA 4007 drum overheads, and a DPA 4099 on string bass. The string bass was equipped with a pickup, run though a Summit Audio variable impedance tube DI. An additional solo mic (Neumann U-89i) was placed in the trombone section for use as needed.

1 - Overture

2 - Too Toot Tootie Toot

3 - Peanut Brittle Brigade

4 - Sugar Rum Cheery

5 - Entracte

6 - Volga Vouty

7 - Chinoiserie

8 - Dance of the Floredores

9 - Arabesque Cookie

The entire Nutracker Suite in one file:

Enjoy!

The Osprey LAB Subwoofer

The Osprey LAB Sub is named for the company name I was operating under a few years ago when I built it, Osprey Audio, and the Eminence LAB 12 drivers it uses. The rough basis for the project’s design was a dual 12” subwoofer built by Art Welter of Welter Systems in New Mexico, who had some old w-bin subwoofers he wanted to modernize and gutting them to install the LAB 12 drivers was his solution. I liked the form factor of his work, and his choice in drivers, so I set out to put my own spin on them without the constraints of the existing boxes he worked with.

A few pictures from the construction process…

After caulk and foam, before the drivers go in:

Note that the lid of the box makes up the top wall of the top port, also. The port design was intended to keep things as simple as possible internally.

At the first sound check…

Drivers are wired in parallel, and the box eventually was finished in a thick black outdoor deck sealant, with a 14ga steel grille from Parts Express.

What can it do?

Pretty good.

If you want the full design documents or CAD files, send me an email!

USB RNDIS Modem as WAN on Tomato Firmware

I recently ran into a situation where it was desirable for me to be able to plug my Clear Clearstick Atlas (a plug-and-play USB WiMax modem) into the USB port on my router and use it as the internet connection for all the devices on my network. Below is how I accomplished this task using my Netgear WNR3500L router, running the …. build of the awesome Tomato router firmware.

First, I set up the Clearstick in it’s NAT operation mode, rather than IP passthrough. This let me use the Clearstick as a traditional modem, where the modem assigns an IP address to the router via DHCP. In the Clearstick’s configuration:

Modem IP: 192.168.1.10 (for the Clearstick)
Host IP: 192.168.1.40 (for the router)

A few kernel modules are required to get the Clearstick recognized by the router. You’ll need the following files:

mii.ko
usbnet.ko
cdc_ether.ko
rndis_host.ko

You can get these from the “extras-mips” tarballs from whatever the latest build available is here: Shibby’s Tomato Site

The best place to put these files is in the router’s JFFS partition, so they’re available to you even after reboots of the hardware. Google around for a tutorial on setting that up, there are plenty available.

Once you’ve got the kernel modules onto the router, insert them in the order they are listed above like so:

1
2
$ insmod mii.ko
$ insmod usbnet.ko

…etc…

After that is done, check to see that all the right modules are loaded:

1
$ lsmod

If everything looks good there, plug in the Clearstick, wait for it to indicate that it has a signal, and then check to make sure you have a new network interface available. Make note of what the network interface is (for me, the new CDC_Ether device was eth2)

1
$ dmesg

When we’ve got the interface name, now we just need to bring the interface up, have the router request an IP via DHCP from the modem, add the modem to the default bridge (so our other interfaces can talk to it), and make sure we route all outbound traffic through the modem. Use these commands. Substitute your interface name for eth2 and the modem’s IP for 192.168.1.10.

1
2
3
4
$ ifconfig eth2 up
$ udhcpc -i eth2
$ brctl addif br0 eth2
$ route add default gw 192.168.1.10

In the router’s configuration menu, set the DNS servers to 8.8.8.8 and 8.8.4.4 - this isn’t really required, but I’d rather use Google’s DNS than Clearwire’s.

FFilter - a Simple Python Script for Spectral Filtering of Audio Files

FFilter is a project I worked on to implement spectral filtering of audio files in Python using some simple FFT libraries. Its sorta neat, give it a look!

Example usage:

1
$ python FFilter.py -f audio.wav -o output.wav -hp 100 -lp 2000 -n 1024

Use…

1
$ FFilter.py --help

…for a full breakdown of command line arguments.

Downloads:

FFilter.zip (contains both project source code and paper)

Full codebase on GitHub: FFilter

BoosterWorks - a Volunteer Scheduling System

About:

(This post references an old version of Boosterworks - a complete rewrite of the software, using Ruby on Rails, is underway prior to a real public launch as a SaaS product.)

BoosterWorks is a piece of software that is designed to help parent booster organizations schedule volunteers for their events more efficiently, while increasing accountability and reducing event coordinator workloads. Currently, BoosterWorks is entering its second year of use with the Tarpon Springs High School Band Boosters.

The program is free (both to use and to build upon) and will run on just about any web server with a recent version of PHP (5.x or higher) and a database server like MySQL or PostgreSQL.

If you’d like a custom feature or set of features added to BoosterWorks, please email me and we’ll discuss how this might could be done. Requests that are general enough to be put into the main program can be done for free. A request that either isn’t general enough to be put into the main code, or that is specific to your group (including visual changes to match your organizations colors and style) can be performed for a reasonable fee. Please email to get a discussion going!

Don’t have time to set it up, or don’t know how? If the included documentation isn’t enough (see the INSTALL.txt file), I can perform the installation and configuration for you for a small fee to cover my time.

Get It:

BoosterWorks on GitHub

No package releases are available at this time, pending the software leaving the beta test phase.