Personal

I’m a senior music engineering student at the University of Miami. My research interests include music cognition, applications of psychoacoustics (e.g. spatial audio, audio codecs), audio signal processing, sound synthesis and, most recently, musical applications of machine learning. My principle instrument is classical percussion, but I also play drumset and a bit of guitar. I grew up in Atlanta, Georgia, where my family still lives. Here you can find a growing collection of some past projects and budding ideas – feel free to email me if you’re interested in any of it!

When not building music-stuffs or performing I prefer to be reading, traveling, running, playing chess or drinking coffee.

j.oneill2@umiami.edu

resume

Analog

ProtoPedal

Soft and hard clipping, drive level and ‘tone control’ potentiometers, input over-voltage protection, an LED in tandem with a Zener diode to indicate early battery loss, a hard bypass switch, and, of course, a volume control – in a breadboard, which is in a Peeps box. I suppose it’s not truly a ‘pedal’ yet, since stomping on it would do at least a bit more than just bypass the circuit.

Caution: may cause sweet riffs, free-flowing hair or spontaneous explosions.

Digital

Periodicity Block Calculator

This is a simple iPhone application which calculates 5-limit Fokker periodicity blocks. The user sets a comma tolerance, which determines the threshold of unison vector acceptance, and search limits for each dimension. The application then constructs a harmonic lattice in memory, searches for periodicity blocks, and returns the block with least-ratio unison vectors in coordinate form.

The harmonicLattice class @implementation code: harmonicLattice.m

More on periodicity blocks here.

Beat Detector

Here is some code for a beat detection algorithm based on this paper: beatDetector.m

More on this and examples very soon.

The ‘Noise’ and ‘Anything’ Transforms

Although the beloved Fourier transform is absolutely central to signal processing and extremely useful in all of its incarnations, there are plenty of different sorts of transforms – check out the Weierstrass and chirplet transforms, for instance. In a discrete domain, there are some simple rules to govern which sets of vectors can form a transform matrix. It’s simple: the matrix (let’s call it T) has to be invertible – that is, it’s a square (n by n) matrix where Ax = 0 has only the trivial solution – that is, T has n pivot points – that is, the columns of T are linearly independent – that is, the columns of A span the set of reals in which they exist – that is, it abides by all the equivalent statements in the invertible matrix theorem. Any set of basis vectors constitute a transform matrix! The question really is, is the transform useful? The Fourier transform, for instance, is remarkable because it transforms a signal in terms of the fundamental units of frequency – sinusoids. This makes the transform a powerful analysis and synthesis tool. Which other kinds of transforms can yield awesome results?

The Noise Transform

This technique uses the Gram-Schmidt process to generate an orthonormal basis set from pseudo-randomly generated vectors. This effectively transforms the signal into bursts of slightly different-colored noise. I’ve been experimenting with this, and most manipulations and inverse transformations of the signal in noise-domain result in the original signal plus… noise. The transform is most interesting when only a few of the elements of the noise-domain signal are inverse transformed back to the time domain. Since the basis vectors are broadband signals, the original signal sounds virtually undistorted when only a small portion of the noise-domain signal is transformed. This makes for an interesting effect where the original signal is present, but with an accompanying series of overlapping noise bursts, which follow the general contour of the original signal. Lo-fi.

Here’s some code that generates the noise-transform matrix, transforms an input signal to noise-domain, and inverse-transforms it (warning: this script takes about 45 minutes to process a 15-second 44.1k input on my computer): RandTransform.m

A sound example when applied to the method of granular synthesis below: randex

A Method of Additive Granular Synthesis

The paper

This is a method of granular synthesis that uses only sinusoidal grains to reconstruct or (more often) tear apart an input signal. The algorithm works by chunking the input signal into hamming windows with user-defined overlap, taking FFTs of the windows, and then reconstructing the signal using sinusoidal grains of varying amplitude and length. Although the algorithm can be quite expensive depending on the grain density, window size and such, most frequency-domain operations (such as pitch shifting) can be done at virtually no extra computational cost. This could make for a cool real-time synth with many possible user manipulations. Here are some sounds I’ve made:

These are most awesome over headphones or on a system with good stereo imaging.

Input = Tom’s Diner – Suzanne Vega

1

2

3

4

5

Input = Double Violin Concerto in D minor, Largo – J.S. Bach

1

2

3

Input = 15 Step – Radiohead

1

2

Here is the code for the basis of the algorithm – gransynth_basis.m

ModCFS

The modular chorus-flanger-spreader is a plugin I wrote in C++ for Will Pirkle‘s DSPKit environment.

The idea here is that the user can implement a chorus or flanger without the limits that commercial plugins typically impose.  In stereo mode, each channel has four simple modulator waveforms to choose from: sine, square, triangle and sawtooth. The depth, rate and phase of each can be altered independently, yeilding a wide array of mostly-crazy sounds. By selecting appropriate delay, blend, feedforward, feedback, waveforms, depths and rates, this plugin has the capability of sounding like a conventional chorus or flanger. The RANDOM! function changes all of the inputs to values as random as rand() allows, while retaining the user’s previous inputs for when the function is switched off. The stereo spreader has second order low pass filters in each cross path to avoid a screechy timbre as the spread increases. The plugin uses an implementation for the Lagrange method of polynomial interpolation for the moment, but I will revert to linear interpolation if the plugin is ever used for real time processing.

LCRDelay

LCRDelay is another plugin I wrote for the same environment. There are three separate delay lines: left, center and right. The center delay has a feedback path with high and low pass filters, which are variable by cutoff frequency. Each line can be toggled between delay in milliseconds or delay according to BPM and division of that tempo (quarter notes through sextuplets) independently. WaCkY OvErIde performs a Reich-ish phasing effect, varying the delay time continuously throughout a delay window at a specific rate, each chosen by the user.


.

Acoustical

Refraction across medium boundary from a point source.

This problem arose specifically in regard to the propagation of sound across the boundary between air and water for low frequencies. The low frequency transducer is modeled as a trusty point source. It should be noted that some of the energy will be reflected at the boundary as a result of any impedance mismatch between the two media.

Characteristic acoustic impedance is equal to the product of the density and acoustic velocity of a medium. The AI of water is about 1.48 MRayls and the AI of air is about 420 Rayls: an impedance mismatch. Theoretically perfect energy transfer (no reflections at the boundary) can only be achieved when the two media have the same impedance. The immediately obvious instance of this is when the media are the same, in which case there is really no boundary at all: moot. Since I am most interested in the changing shape of the wavefront propagation, I model only the energy that is transmitted across the boundary.

Pondering the original question, I was able to find a cool .gif here and plenty of information on Snell’s law, but (although I’m sure it exists somewhere) I was unable to find an equation to describe the wavefront propagation of a point source across media as a function of the distance and angle from the source, the velocities of propagation in each medium, the orthogonal distance of the source from the boundary and the time elapsed since propagation. So I derived them in a particularly dry musicology class.

Ostensibly irrelevant to plainchant.

Awesome!

d = distance from point source (meters)
do = orthogonal distance from point source to second medium (meters)
Va = velocity of propagation in first medium (meters/second)
Vw = velocity of propagation in second medium (meters/second)
theta = angle from point source in radians, with 0 radians in the direction orthogonal to the second medium
t0 = time elapsed since origination (seconds)

Enter MATLAB.

This is the crux of some code I wrote to visualize the above:

theta = 0;
t0 = 3;
while t0>0
while (d0*sec(theta)/va) < t0
theta = theta + 0.005;
end
thetaH = theta;
theta = 0;
while (d0*sec(theta)/va) < t0
theta = theta – 0.005;
end
thetaL = theta;
tw = thetaL:0.005:thetaH;
ta = thetaH:0.005:(2*pi+thetaL);
polar(tw, vw*t0 + sec(tw).*d0*(1-(vw/va)),’–y’)
hold on
polar(ta, va*t0 + ta.*0,’–y’)
t0 = t0 – 0.05;
theta = 0;
end

theta = 0;
t0 = 1;
while t0>0
while (d0*sec(theta)/va) < t0
theta = theta + 0.005;
end
thetaH = theta;
theta = 0;
while (d0*sec(theta)/va) < t0
theta = theta – 0.005;
end
thetaL = theta;
tw = thetaL:0.005:thetaH;
ta = thetaH:0.005:(2*pi+thetaL);
polar(tw, vw*t0 + sec(tw).*d0*(1-(vw/va)))
polar(ta, va*t0 + ta.*0)
t0 = t0 – 0.05;
theta = 0;
end

Propagation of sound into water with radial distance in meters. Spans 1 second for sound, arbitrarily small amount of time for light. Blue = sound, Yellow = light. Boundary at 20m from point source.

Performant

Impressions, by Nicolas Martynciow – Movement 1

Martynciow – Impressions – Movement 1 from Jimmy O'Neill on Vimeo.

Musical

These are projects for a film music class that I took during a semester at the Sibelius Academy. The segments are realized via MIDI files with Logic Pro’s stock string and piano samples.

The end of a short film – for string quartet and two pianos.

End Cut from Jimmy O'Neill on Vimeo.

Trailer for a romance – for string trio.

Romance Trailer from Jimmy O'Neill on Vimeo.

Hypothetical

“Psychoacoustic properties of musical distance sets which exhibit the deep scale property in n-tone equal temperament: an empirical study”

This thesis, which combines the disciplines of music technology, music theory, and combinatorial mathematics, will examine the properties of musical scale sets which exhibit the ‘deep scale property’, first recognized in the 1960’s by Terry Winograd, soon after expounded upon by Carlton Gamer, and most recently examined in relation to rhythmic distance sets in “The Distance Geometry of Music,” an article in published in the Computer Music Journal in 2007 by eight computer scientists, including Winograd himself. I will first implement a brute-force algorithm to generate and store all of the possible deep scales in 12-31 tone equal temperament. Using methods to determine distance set properties such as ‘evenness’, I will then determine which higher-order deep scales most closely resemble the common 12-tone equal temperament major scale, with an emphasis on 19 and 31-tone equal temperament, as the frequency ratios of specific intervals in these temperaments best approximate those in 12-tone equal temperament, which has become a visceral part of Western tonality. After these sets are narrowed down mathematically and the most proper sets are chosen, I will conduct an empirical study, the crux of which will lie in a graphical user interface which I program in MATLAB. The study will consist of a test that rests on a simple idea: if a subject were given 7 unlabeled buttons, where each button sounds a separate note belonging to a sequential major scale in an arbitrary configuration and modal position, and was given a fixed amount of time to experiment with this interface, the subject would be able to correctly identify which button sounds the tonic of the scale to which the buttons were ‘tuned’. A similar process will be conducted for select deep scales in higher order temperaments, to test the ‘learnability’ of the scales and to search for correlations between  recognizability, temperament order, deepness, eveness, musical training of the subject, and other parameters. Musically trained and non-musically trained subjects will be evaluated in approximately equal-sized groups. Such an experiment and rigorous mining of deep scales has never been conducted, or at least published, according to the research I have done already.

some relevant literature:

Distance Geometry in Music (pdf)

Some Combinational Resources of Equal-Tempered Systems (jstor)
Thought: self-organizing maps for intuitive abstractions and queries of chess openings.
The encyclopedia of chess openings, while universally accepted for the study and classification of openings, is bulky, rigid and unintuitive in its navigation, requiring  a student to have either a preconception of the opening she or he will study, or to have a coach guide them though variations and transpositions. Altering the node/training set ratio by node quantity variation has the potential to create intuitive alternative map-space abstractions to the ECO’s subsets A-E and allow mapping of a user-defined point in input space (a synthesized opening line), effectively creating a searching mechanism which, when queried, returns training data (i.e. established openings in the ECO) encapsulated by the winning node. This set may include positions which are geometrically similar, but not considered the same ‘class’ of opening by the ECO, and could be useful in study.

problems:

- Methodologies for storing the positions in memory which allow for executable computation of feature space.

- Non-Euclidean algorithms for feature space mapping to account for the properties of positions which are not necessarily geometrically similar to each other, but conceptually similar in some way (contrasted with an algorithm which compares distances between locations of the same piece in different opening configurations), to be clustered using a GMM. This would be useful, but exceedingly difficult, as openings typically involve little to no tactical play and are primarily strategic. Even the most powerful chess engines use book openings.

- Book openings are variable-length.