Tags: compositionMSK 007musicPCBsscience!

Here's a diagram of something called the CNO process, encompassing many of the nuclear reactions by which stars shine.

CNO process diagram

I thought it would be fun to "sonify" the CNO process by building some kind of simulation of a star and making it generate music corresponding to what was going on in the simulation. Then maybe I could adjust the parameters and get something musically interesting from say the way it changed as the star got bigger and hotter and eventually exploded. I spent a fair bit of time on that this week, thinking to put the results in this Web log entry, and it didn't really work out the way I had planned. In order to get everything in that I wanted to include, by the simulation technique, it seemed like I would end up with something many hours long and mostly pretty boring. As I struggled with it trying to come up with a piece of music that human beings might realistically want to listen to, what ended up happening was that most of the computer-generated aspects got cut. Sadly, those were probably the most interesting parts to read about. What I'm down to, now as it's time to write the article, is a piece of pretty much completely human-composed music. I used the "modal transposition" features of Lilypond to save some drudgery writing out the notes, and I did perform the result on the modular synth (demoing some of my modules including the latest Leapfrog prototype), but there's not much left in the way of algorithmic composition. I hope you'll bear with me.

Let's talk about stars. Stars called "main sequence" stars (including our Sun) are mostly made of hydrogen (that is, protons), and they get their energy by converting the hydrogen into helium. That partly happens through the processes shown on the diagram. The star is assumed to contain at least a few carbon-12 nuclei (12C, lower left corner of the diagram), which are each made of six neutrons and six protons. Occasionally, a 12C nucleus will collide with, and capture, a proton; that changes it into a nitrogen-13 nucleus (13N, six neutrons and seven protons). The 13N is unstable and undergoes a process called beta decay, in which one of the protons in the nucleus changes into a neutron, spitting out a positron and a neutrino. Beta decay comes from the inherent instability of the 13N nucleus; there's no external cause needed, and not really anything external that affects it. The result is a seven-neutron, six-proton, nucleus called carbon-13 (13C). Following the heavy arrows on the diagram, the nucleus continues to take on two more protons, then it does another beta decay, leaving 15N; and when that reacts with one more proton, instead of the nucleus just getting heavier, the incoming proton nearly always carries away two neutrons and one proton from the 15N, changing it back into 12C. The chunk that goes flying away, containing two neutrons and two protons, is a helium nucleus. So the overall result of going once around the cycle is that four protons are consumed, one helium nucleus is created (and some positrons, neutrinos, gamma-ray photons, and a lot of heat), and we're back where we started with a fresh 12C ready for further reactions. This is called the "CNO cycle." The other stuff on the diagram beyond the heavy arrows puts the basic CNO cycle into context as part of a larger, more complicated, "process."

My diagram is laid out so that the horizontal axis is the total number of neutrons and protons in the nucleus, and the vertical axis is the number of neutrons alone, these choices made so that the arrows will mostly go in easy-to-read directions. Capturing a proton means moving one step to the right (it adds one to the total, but does not add a neutron). Undergoing a beta decay means moving one step upward (it adds one neutron and subtracts one proton, which doesn't change the total). Creating a helium nucleus means moving diagonally down two steps and left three (the helium nucleus is two protons and two neutrons, but this happens only when one ambient proton was involved also, so the net effect is losing two neutrons and three units from the total). You will note that some nuclei on the diagram have a choice of which way to go; more on that later.

In the Sun, the CNO cycle is not such a big deal. About 90% of the Sun's nuclear fusion actually goes through a different process not shown here, by which protons fuse directly into isotopes of hydrogen and then helium without involving heavier nuclei. But in bigger, heavier stars than the Sun, in particular those more than about 30% heavier, the CNO process becomes dominant. The speed at which nuclei move along the arrows of the diagram is not uniform. Beta decay takes a few minutes on average (depending which specific arrow we're talking about) and, critically, beta decay is a natural behaviour of the decaying nucleus. It doesn't depend on what else is going on inside the star. Proton capture, however, depends a lot on the temperature and density of the star. In a small, relatively cold star like the Sun or a little bigger (core temperature only about 15 million degrees) the proton captures take millions to hundreds of millions of years each (not an easy statistic to look up; see this PDF file) and the helium generation takes hundreds of thousands of years. So any time a nucleus has a chance to beta decay or generate helium, it will nearly always do so instead of capturing a proton, and that's why in smallish stars, the basic CNO cycle shown by the heavy arrows is the only one that happens significantly. Even if a nucleus off of that cycle does get generated by some means, it will find its way back onto the main cycle in just a few steps by always preferring beta decay and helium generation over any other options.

As stars get bigger, and as astronomical events get more energetic, the temperature rises. Beta decay does not speed up with temperature and density but the other reactions do, so once everything gets hot enough, the beta decays will no longer be the fastest options, and proton captures will start to be preferred, up to a limit called the "proton drip line." It helps that all of the reactions are probabilistic - when I say a beta decay takes a few minutes, I mean that on average if you wait a few minutes it will probably happen if nothing else does first, but sometimes it happens much faster than others, and something similar goes for the other reactions at their own temperature-dependent time scales. So as soon as something like a proton capture starts to be in roughly the same range of time spans as a beta decay, even if it's still slower on average it will start to happen at some percentage, which changes as the conditions change. It's that idea of things starting out simple and getting more complicated as temperature increases, that I wanted to capture in the music.

So I thought I could assign a chord to every nucleus on the diagram, and an interval to each of the three things that happens (proton capture, beta decay, helium generation). Then I could say that each proton capture shifts the chord by this many semitones, I'll write a "proton capture theme" and play it each time a proton capture happens, transposed to the current chords, and similarly for the other two kinds of events, and the result would get the idea of how the cycle works into a form people could perceive musically. The first thing that meant was that I needed to choose intervals for the three events that would be consistent (going around any cycle in the diagram brings me back to the same note) and have all of them be musically reasonable (changing from one chord to another by that interval will sound good). After some searching, I settled on +3 semitones (a minor third) for proton capture, -7 semitones (a perfect fifth) for beta decay, and +5 semitones (a perfect fourth) for helium generation. You can check that three proton captures, two beta decays, and one helium generation, add up to zero: going once around the cycle brings us back where we started. It also means that both the beta and helium generation reactions can be dominant-tonic kinds of resolutions, which go nicely with the concept that (at least in cooler stars) they are thermodynamically preferred: the nuclei want to react on those paths. Proton capture is something a little more tension-creating, which is analogous to what really happens with the nuclear physics: adding a proton to a nucleus makes it more charged and (within this context) more prone to have other things happen to it. Starting at C major for 12C, these intervals define the roots for all the chords.

Chords for sonifying the CNO process

I chose qualities (that is, major, minor, or diminished) for the chords by hand, with a view to keeping a single key as much as possible around the main and subsidiary cycles, and preferring to do a solid major-to-major V-I-IV chord change on the last couple of steps in each of the main low-temperature cycles. The chord qualities are shown on the diagram by the shapes of the nodes: squares (horizontal and vertical sides) for major, diamonds (really squares, but with diagonal sides) for minor, and circles for diminished chords. I'm following "SeeChord" for these symbols - they seem to be a useful way to visualize chord qualities. The main cycle at lower left is mostly chords that can fit into the G major scale, and the stuff to the right of the G chord (that is, the 15N nucleus) is split between the D major and F minor scales.

I'm not going to comment in detail on all the musical notes I wrote (you can read the PDF sheet music if you want) but here are the first few measures. After a four-measure intro, it plays the "proton capture" music transposed to be based on the C chord in the key of G, then switches to the key of A-flat (because there is no E-flat chord in G) and plays the "beta decay" music transposed to be based on the E-flat chord. There's a one-measure musical fragment for each of the three basic reactions, and for variety I wrote slightly different versions keyed to the number of neutrons. The number of notes in the measure (six for both of those shown here) matches the number of neutrons. Beta decay features an accented high note symbolizing the lightweight positron and neutrino flying away, and helium generation features an accented low note for the heavy helium nucleus. I manually separated the music into three monophonic voices because I planned to record this on the modular synth with a monophonic patch. The actual sequence of which reactions to include - which, as I mentioned, I'd first intended to be automatically generated from a simulation - was manually chosen in the final version. I tried to have it more or less proceed from the reactions in smaller, cooler stars up to those in larger, hotter, and exploding stars, while still maintaining a musical kind of structure.

The first few measures of "Nucleosynthesis"

The recorded version uses all the modules I sell in my shop, even the yet-to-be-released Leapfrog. I set up a basic monophonic subtractive synthesis patch, using the built-in VCA on the Leapfrog, separate ADSR envelopes for amplitude and filter cutoff, the usual stuff. A sine wave from the Fixed Sine Bank goes into the Leapfrog's linear FM input - which is the vibrato effect you hear on the longer notes - and the filter cutoff envelope goes through a VCA controlled by the MIDI velocity before being applied to the Leapfrog's exponential FM. That way, the accented notes have a different sound to them. My MIDI interface cannot actually hit the highest notes in this piece of music, so I transposed the MIDI track containing them down an octave and used my Octave Switch to transpose the control voltage back up. So it makes for a nice demo of all three modules working together in a patch.

And now, here's the recording.

[MP3] [FLAC]

Some news on the status of the Leapfrog: I built the next prototype, finding a few errors in my build document along the way, and then when I went to adjust it, I found I couldn't get the DC offset as small as I wanted it to be. The control range wasn't wide enough - I had the trimmers all the way to the ends of their ranges and it was still more than a volt off. Input offsets really add up in this filter topology because of the multiple feedback loops and LM13700 chips; it takes a fair bit of effort to trim them out, and there will always be a little bit of offset left over which I'm calling part of the analog charm of this filter. Fortunately the range thing is an easy fix, the range-setting resistor for one of those trimmers just needs to be smaller. Here's a photo of the latest prototype with an extra resistor bodged in by clip leads in parallel with the original to lower the overall resistance (I have subsequently soldered it in, and the prototype with the mod is the one you hear above). You can tell it's not the same prototype you see in the online store because this one has blue circuit boards.

MSK 007 prototype with mod resistor

So, the board silkscreen is now slightly wrong, but not very wrong - it says "1M" and I think the new value is going to be 390k. I've gone through the small batch of boards currently on hand and have put masking tape over the 1M, and I'll include a note in the manual about this. A future version of the boards will have that and some other minor silkscreen modifications. So far I haven't found any electrical issues that would require actually changing traces, so I still feel okay about selling these boards - it's just a matter of assembling them with 390k resistors instead of 1M at that particular spot. And I'm making progress on the other things that need to happen before the Leapfrog can launch.