mozy
LLM generated MIDI with human synth selection- homage to Wendy Carlos' Switched on Bach. The piece started with a Mozart symphony, the menuetto from Symphony No. 25 in G minor, K.183. We ran the score through a small pipeline that pulls every note from the MIDI and turns each instrument's part into a list of (pitch, start time, duration) tuples. Once you have that representation, you can ask precise questions about how the voices relate and how the form is built, and the answers come back as group-theoretic statements. The first thing the analysis finds is the bass octave graph. The cello, contrabass, and (in the corner movements) bassoon don't really play three different parts. They play the same line at three different octaves. In the code this shows up as a perfect match for the transposition relation T zero between cello and contrabass, with every shared bar carrying identical pitch classes. The new composition does this on purpose. There's one bass line, and the bass_pattern functions write it three times into the contrabass, cello, and bassoon tracks at pitch offsets of zero, plus twelve, and plus twelve more semitones. You can see it in the bottom three oscilloscope rows, locked rhythmically with shifted spectra. The second finding is about the horns. In 1773 horns were valveless and could only sound the harmonic series of whatever brass crook was attached, which restricts each horn to a small subset of pitch classes. Pulling the per-pitch-class histograms out of Mozart's score recovers the crooks directly. Horn One sits on a B flat crook with B flat, D, C, and F as its top pcs. Horn Two sits on a G crook with G, D, and A. The make_horns function in v3 takes the current chord, intersects it with each horn's preferred pcs in priority order, and refuses to write any note the historical instrument could not have produced. The third finding is the form. Each bar gets a discrete fingerprint, namely the union of pitch classes across all voices, and then we scan for integer offsets where the bar sequence repeats. Mozart's menuet falls out as deltas of 12, 24, 14, 80, and 104, which correspond to the first half repeat, the second half repeat, the trio second half repeat, and two longer offsets that connect the menuet, trio, and da capo. The texture schedule in v3 places its tutti and piano blocks at exactly these offsets, and when you re-run the same form analysis on v3's output you get the same top three deltas (104, 80, and 116) with comparable match counts. The fourth finding is motivic. The opening Violin One figure, taken as a sequence of interval steps, recurs throughout Mozart's piece in nearly every voice under elements of the Klein four group V four, which is the four element group consisting of identity, retrograde, inversion, and retrograde inversion. In v3 this is the weakest link. The Violin One melody is hand written by section, with one function per region (vn1_M1_v3, vn1_M2_v3, vn1_T1_v3, vn1_T2_v3), and only Oboe and Horn Two reliably pick up the head motif under T or RI. Three voices (Violin Two, Viola, Horn One) never carry the head motif at any group element. The fix is to derive Violin Two and Viola pitches from an inverted copy of the Violin One contour rather than from chord tone selection, but that is v4 territory. For texture itself, the schedule is a Python dictionary mapping bar number to a set of active voice names: forte tutti for four bars, piano strings for four, wind dialogue for four, and so on. There is a one bar grand pause at bar 45 where every voice falls silent, and a one bar Violin One solo at bar 46. Each instrument's pattern functions check is_active before writing notes, so when the schedule says no horns this bar, the horn voices simply rest. For ornaments there are three primitives. The triplet_beat function subdivides one quarter into three equal sub beats, switching the local sub grid from sixteenths to triplets. The trill function alternates rapidly between two adjacent pitches at about eight oscillations per beat. The passing_tones function inserts a stepwise note between two chord tones a third apart. The Violin One melody calls these at section endings to weight cadences. To render the video, the voices are separated into linear oscilloscopes and given different hues, projected and distorted for texture in ZGameEditor Visualizer in FL Studio. The DAW was used to voice the MIDI file, sing MiniSynth for most voices, GMS for bass and 3x Osc for contrabass. Just a few balancing adjustments to the mixer panel, no effects to the audio other than the in-instrument settings.
Download
0 formatsNo download links available.