How to talk about Pvt Manning

Some news outlets seem to have absolutely no idea how to talk about Chelsea Manning, who was known until last week as Bradley Manning and has been sentenced to 35 years in prison after she sent classified documents to wikileaks. They’re confused on how to describe her actions before she announced her social transition and which pronouns they should use to talk about the period in her life when she identified as a gay man.
(hint: see previous paragraph)
Chelsea Manning is already famous under a different name, so it’s fine to mention her former name. But really, don’t get cute about pronouns. It is more confusing, not less, to have a jumble of ‘he’s and ‘she’s. You know from her press release that she wants to go by ‘she’, so use ‘she’ whenever you’re writing about her, no matter what period of her life.
If you want to talk about something inherently gendered, then you might want a wee bit of vocabulary. She identified as a gay man for a while, meaning that’s what she told people she was. Other people at the time read her as male, because that’s how she presented herself. If ‘read’ is too jargony, try ‘viewed’, or ‘perceived.’
You can talk about her childhood, but again, avoid being cute about it. For example, if you want to use the word ‘boyhood’, is there a good reason for it? Is it somehow very important to the sentence or is it a word she used herself? Don’t project gender unless you’re using the subject’s own words or unless its needed. ‘She was a quiet child’ is fine. ‘She was a quiet boy.’ is confusing and unnecessary. ‘She seemed like a normal boy.’ is ok for two reasons – one is that the gender is an important part of the sentence. She didn’t just seem like a normal child, she seemed like a normal boy. The other reason that it’s acceptable is the word ‘seemed.’ She was perceived as a normal boy, which is about how she was viewed, not what she actually was. ‘She was a normal boy’ is not ok because it is factually incorrect (she already knew she wasn’t really a boy) and because it’s confusing and because it’s contrary and coercively assigning a gendered identity that the subject has not assigned themselves.
In summary, use ‘she’ all the time. If you have to use gendered terms to refer to the past, put wiggle words around it: seemed, appeared. (I’m sure journalists are well familiar with such words.)
If Manning keeps making headlines, at some point, it will become appropriate to drop the “who was previously known as Bradley Manning,” much like it’s no longer necessary to mention Wendy Carlos’s former first name. The point of mentioning the old name is not to draw attention to it, but to ensure that the reader knows who is meant.
Normally it’s rude and somewhat irrelevant to talk about the medical aspects of a person’s transition. However, because Manning is going to a prison that has specifically said it plans to violate her rights with regard to appropriate treatment, it’s definitely on topic in this case. Manning has said she wants hormones. She has not said that she wants surgery. It is not necessary to mention that she doesn’t currently want surgery. At some point, the repetition of this fact may become problematic. While media likes to make a big deal of ‘the operation,’ the reality for trans people is that hormones are much more important and that there is not one single dramatic moment during which transition occurs. Not all trans people have operations and there are a variety of operations available, rather than a single, monolithic process. The discourse around ‘the operation’ is a media construction. Which is not to say that trans people don’t often need operations, just that the context has been distorted in popular culture. This distorted context can cause statements about anyone’s lack of plan for surgery to make them seem as if they lack legitimacy or authenticity or further other them. Most trans people start out by seeking hormones and don’t immediately make further plans. Therefore Manning’s statement is entirely unremarkable and should not be treated otherwise.
Finally, and this should be obvious, people have a right to their gender identity that is inherently their own human right, unconnected to whatever else they’ve done in their lives. Whether you think Manning is a hero or a traitor, the only correct way to refer to her is through her current name and pronouns, as she has publicly requested.

New Flat!

First of all, I loved my old room in the co-op. The kitchen was chaotic and had moths and rodents and finally kittens, but the people were lovely. Having 18 housemates meant that it never got lonely, even if it occasionally was loud at times I wanted to be asleep. However, Sonia and I wanted to do the heteronormative couple-y thing and got a flat together.

It’s the newly-renovated top floor of a Victorian house, just around the corner form my previous room. The landlord just converted a single family home into three smaller flats. As far as I can tell we’re the first (not related to him) tenants in the house. Clues include the smell of paint and that I cannot seem to locate a phone jack anywhere in the flat.

We moved in and the management agent gave us two sets of keys to the house a a key to a meter. Well, sort of. When the removal van finally showed up and got all of my worldly possessions to to my new flat at 6pm on Friday, it emerged that the keys they gave me do not actually open the door. I tried calling the letting agency and the property manager, but they’d all gone home for the weekend. So I told the mover to leave all my stuff on the pavement outside the flat and then I waited for Sonia to get home. Thank goodness it wasn’t raining.

My American readers may be wondering why one would need a key to a meter. Remember reading Pygmalion in high school? Eliza Doolittle went home to her room and put an extra penny in the heater because the professor had overpaid her for her flowers. It all seemed so terribly Victorian that you would have a meter that you needed to put pennies into before you could run your heat. Well, they never quite got rid of this system in England, just updated it. Now it’s a fob system. Somebody gives you a ‘key.’ You take the key to a corner shop – the kind of store that mostly sells cheap alcohol to adults and magazines and candy to kids. You hand them the key and some cash (really, cash only) and they add money to the key. Them, when you get home, you stick the key in your meter and it will allow you to spend exactly that much money. Imagine if you were running it a bit tight on the electric bill. Under this system, your power might be cut a few days before every pay day. The bonus is that you don’t need to pay extra to turn it back on. The downside is that all your food spoils. Plus you get to pay loads more than middle class people get with their normal power bills. The Victorians were masters of screwing poor people. When conservatives in this country speak of ‘Victorian values’ they do so with nostalgic pride, not the deep shame the phrase deserves.

So I went down to the Londis and put all of my cash on the key and went back to the flat and looked everywhere for the meter. It was Saturday and the property manager was having his day off. I was slightly concerned that the power might turn off at any moment, but I had gig-related activities and anyway, there was no hot water and needed to find the boiler. Finally, I found a mysterious electrical switch in the bathroom and turned it on. There was a gurgling behind the wall. Aha! This must be the boiler. Of course, it would need time to heat up. So we gave it time. And Then more time. It was sealed behind a wall. So I took a cold shower and was grateful it’s August.

Maybe I could just do a load of laundry in the mean time. Augh! Water everywhere!

Meanwhile, Sonia asked the guy downstairs if he had any insight and it turned out he was the landlord’s brother. He came up and used a pen knife to get open the bit of the wall with the boiler behind it and thus we discovered that whoever had redone the bathroom had thought it was a good idea to seal the boiler behind a wall, having first left it in the ‘off’ position. So we waited again for it to heat up. Also, the power meter was located. In the basement flat, which is rented by yet another guy. So, we need to put money on the card, then knock on the door of the guy living in the basement, hope he’s home and charge up our power. Obviously, this will not do, so today Sonia rung up the power company and had a series of confusing conversations with them. And a series of conversations with the property manager. It gradually and painfully emerged that the card we had been given was actually for the gas meter, which is also in the basement apartment, locked behind a door that even the man who lives in the basement does not have a key for. So the reason we’ve got no hot water is because the gas meter was completely out of money. Meanwhile, the electric meter also has a key, which we don’t have. There was all of £3 left on the meter by the management company, so I’m just waiting for everything to turn off at any moment. Meanwhile, the guy in the basement has gotten extremely pissed off, as it took a few trips to his flat to figure out which meter was which and what’s going on.

Apparently, not having access to a gas valve is also something of a safety issue, but nevermind.

On the positive, I was able to arrange an appointment with the phone company to come and install internet and a phone line. In three weeks.

But at least there are no mice. And, this is not a phrase I’m ever likely to repeat, thank goodness the cooker is electric. And at least partly works

Linux Midi on SuperCollider

This is just how I got it to work and should not be considered a definitive guide.
I started Jack via QJackCntrl and then booted the SuperCollider server.
I’ve got a drum machine connected via a MIDI cable to an m-audio fast track ultra.
This code is Making some noises:

(
var ultra;

MIDIClient.init;
"init".postln;
MIDIClient.destinations.do({|m, i|
 //m.postln;
 //m.name.postln;
 m.name.contains("Ultra").if({
  ultra = MIDIOut(i);
  ultra.connect(0);
  i .postln;
 });
});

//u = ultra;

Pbind(
 midinote, Pseq((36..53), inf),
 amp, 1,
 type, midi,
 midiout, ultra,
 chan, 1,
 foo, Pfunc({|e|"tick % %n".postf(e[chan], e[midinote])}),
 dur, 0.2
).play


)

California time Table

Hello California friends. I am in your state. This is my schedule for the next few days:
Tonight, 28 May, I am going to the SF Sound show. Maggi Payne is playing, so it will be awesome. It’s at 55 taylor :: san francisco :: $10/7 :: 7:49p.
29 May, I will be going to see ReCardiacs Fly at the Hemlock Tavern. This is Polly Moller (and friends) new project, so it will be awesome. It’s at 1131 Polk St :: san francisco :: $7 :: 8:30p.
30 May, I will be playing as half of the duo No More Twist at the Berkeley Arts Festival Space. Jörg Hiller is also playing, so it will be awesome. It’s at 2133 University :: berkeley :: $10-20 (sliding scale) :: 7:30p.
I have a minor injury which makes it slightly painful for me to bicycle, so I’m being intentionally vague about my schedule. I hope to head down to the South Bay for a short while and available for socialising.
On June 3rd, my girlfriend flies in to San Francisco, so I’ll be back in the SF/Oakland part of the bay and doing tourist stuff and available for socialising.
On June 6th, I will be playing the piece Cloud Drawings at the Luggage Store Gallery. It’s at 1007 Market Street (by 6th) :: san francisco :: $6-$10 :: 8p.
On 7 June, I will be playing the piece Cloud Drawings at the SubZero festival in San Jose and will be around the South Bay and available for socialising. I also want to do some touristy stuff down there, so if anyone has any suggestions or wants to go to something, please let me know. I think we should probably see the Winchester Mystery House. We’ll also head for scruz at some point.
More details as they arise. contact me if you want to hang out.

A better script for Wacom with screen geometry changes

Why and how

This is a better script to set your stylus setting to match a changed resolution, like if you plugged in to a projector. If you are mirroring screens, the geometry may change, so that instead of using your whole 16/9 ratio screen, you’re only using a 4/3 box in the middle. The problem you may run into is that your stylus does not adjust and so where you’re pointing the stylus may differ significantly from where the pointer appears on the screen. This script fixes that.
There are some dependencies: xsetwacom xrandr, and wcalc. Make sure you have xsetwacom by typing:

which xsetwacom

If it doesn’t give you a path, you need to:

sudo apt-get install xsetwacom

Do the same for xrandr. Finally, you need wcalc, which is not installed by default. Type:

sudo apt-get install wcalc

The script is below. To save it, copy it to the clipboard starting from just below the ‘Script’ subheader and ending just above the ‘Commentary’ subheader. Then type the following in the terminal:

cd
mkdir bin
cd bin
touch stylus_script.sh
chmod +x stylus_script.sh
gedit stylus_script.sh

Don’t worry if you get an error saying bin already exists. Just carry on.

Gedit should open with a blank file. Paste the script into that file. Then save and quit. You may not need to make any changes. (See commentary.)
You’ll want to run this script when you plug into a projector (after you set the resolution you’re going to use) and then again when you unplug from it. Do this in the terminal by typing:

~/bin/stylus_script.sh

You can run these from any terminal window, at any time and it should work. If you get errors or it just doesn’t do anything, see the commentary below.

Script

#!/bin/bash


function touch_ratio {
 #get pen geometry
 LINE=`xsetwacom get "Wacom ISDv4 E6 Pen stylus" area`
 echo ${LINE}
 TabTx=`echo ${LINE} | awk '{ print $1 }'`
 TabTy=`echo ${LINE} | awk '{ print $2 }'`
 TabBx=`echo ${LINE} | awk '{ print $3 }'`
 TabBy=`echo ${LINE} | awk '{ print $4 }'`

 TouchHeight=$((${TabBy} -${TabTy}))
 TouchWidth=$((${TabBx} -${TabTx}))

 TouchRatio=`wcalc -q ${TouchWidth}/${TouchHeight}`

}



# get screen geometry
LINE=`xrandr -q | grep Screen`
WIDTH=`echo ${LINE} | awk '{ print $8 }'`
HEIGHT=`echo ${LINE} | awk '{ print $10 }' | awk -F"," '{ print $1 }'`
RATIO=`wcalc -q ${WIDTH}/${HEIGHT}`



touch_ratio

# is the touch ratio different from the screen ratio?
change=`wcalc -q abs(${TouchRatio}-${RATIO})>0.01`
wcalc -q abs(${TouchRatio}-${RATIO})
if [[ ${change} != 0 ]] 
  then

 #they differ

 # first try resetting
 xsetwacom set "Wacom ISDv4 E6 Pen stylus" ResetArea
 xsetwacom set "Wacom ISDv4 E6 Pen eraser" ResetArea 
 xsetwacom set "Wacom ISDv4 E6 Finger touch" ResetArea

 # how about now?
 touch_ratio
 
 if [[ `wcalc -q abs(${TouchRatio}-${RATIO})>0.01` != 0 ]] #they differ
   then

  if [[ ${TouchRatio} > ${RATIO} ]] # width has shrunk
    then
   # use existing height values
   TYOFFSET=${TabTy};
   BYOFFSET=${TabBy};

   # calculate new width values
   # width = ratio * height
   
   NewTabWidth=`wcalc -q -P0 ${RATIO}*${TouchHeight}`
   TabDiff=$(( (${TouchWidth} - ${NewTabWidth}) / 2));

   TXOFFSET=$((${TabTx} + ${TabDiff}));
   BXOFFSET=$((${TabBx}- ${TabDiff}));

    else # height has shrunk

   # use existing width values
   TXOFFSET=${TabTx};
   BXOFFSET=${TabBx};

   # calculate new height values
   # height = width / ratio

   NewTabHeight=`wcalc -q -P0 ${TouchWidth}/${RATIO}`
   TabDiff=`wcalc -q (${TouchHeight}-${NewTabHeight})/2`
   
   TYOFFSET=`wcalc -q ${TabTy}+${TabDiff}`
   BYOFFSET=`wcalc -q ${TabBy}-${TabDiff}`

    fi


  echo ${TXOFFSET} ${TYOFFSET} ${BXOFFSET} ${BYOFFSET}
  xsetwacom set "Wacom ISDv4 E6 Pen stylus" Area ${TXOFFSET} ${TYOFFSET} ${BXOFFSET} ${BYOFFSET}
  xsetwacom set "Wacom ISDv4 E6 Pen eraser" Area ${TXOFFSET} ${TYOFFSET} ${BXOFFSET} ${BYOFFSET}
  xsetwacom set "Wacom ISDv4 E6 Finger touch" Area ${TXOFFSET} ${TYOFFSET} ${BXOFFSET} ${BYOFFSET}

   fi
 #gnome-control-center wacom
  else
 echo normal resolution
fi

Commentary

If this script doesn’t work, it may be because the name of your wacom devices differs from mine. To find the names of your devices, type:

xsetwacom --list

You will get a list of your wacom devices. Mine looks like this:

Wacom ISDv4 E6 Pen stylus        id: 10 type: STYLUS    
Wacom ISDv4 E6 Finger touch      id: 11 type: TOUCH     
Wacom ISDv4 E6 Pen eraser        id: 15 type: ERASER    

In this script, I use the information at the far left: ‘Wacom ISDv4 E6 Pen stylus’ and the two identifiers below that. If your device list has different names, then replace the names in the script with the names of your devices. So if you have, ‘Wacom ISDv7 E13 Pen Stylus’, you would use that instead. These lines show up multiple places in the script, so if you need to change it, make sure you get it every time, down to the bottom of the file.

How it works

This script gets the geometry of your screen and the geometry of your stylus and calculates the width/height ratio for each. If this differs by more than a fractional amount, it calculates a new width or height for your stylus.

Anxiety and Musical Form

My gf asked me why I don’t blog about having anxiety. There’s a few reasons I haven’t mentioned it much of late. Part of the reason for this is that while it shapes a certain amount of my experience, I absolutely do not want it to become a point of identity. Partly, I’d rather talk about things that are more interesting, like music. (There’s nothing quite so boring as other people’s health problems.) And maybe most importantly, I’m embarrassed about it.
But yeah, something about my fight-or-flight response is not working correctly and I get panic attacks.
I’m going to get a referral for CBT – cognitive behavioural therapy, which has been shown to be effective. I kind of know what leads to them. If I’m stressed or not eating right or especially if I’m short on sleep, I’m much more likely to get them. I read some place that they normally last about half an hour and I don’t know if this is true or not, but I do know that if I wait and take deep breaths, they tend to go away.
In case you’ve never had a panic attack, (lucky you), I shall attempt to describe it. For me, it is what it sounds like, a sudden stab of panic. You know when you go out and you’re nearly to the tube station and think, ‘oh my god, did I leave the stove on?!’ It’s like that, but I tend to think maybe I have cancer or something. While one can turn around and go home and check if they’ve forgotten a pan of beans bubbling away, one can’t do that with a sudden fear of dread disease. So I try to talk myself out of it, but can get into a loop: ‘I’m fine because of X. But what about Y?’ Repeat for several minutes. This is very annoying. Especially when I know I’m in a loop. I know I’m being irrational. But I can’t seem to shake it. Because what about Y??! And maybe it just goes away quietly, or maybe I start shaking and phone NHS Direct.
What sets these off? Sometimes it’s because something is actually wrong with me. And, indeed, when I said I phone NHS Direct, this is actually not entirely true – I have a stone in one of my spit glands. It hurts occasionally and once in a great while, it blocks something and swells a bit. Eventually, somebody is going to remove it. But anyway, one day, before it was x-rayed, my neck swelled slightly and I saw it in the mirror and went into a panic. Sure, the dentist said he thought it was probably a stone, but what if it’s actually a terrible infection that’s spread to something important in my neck before it turns into blood poisoning or gets into my brain and might kill me by morning. (‘I’m fine because if I had a horrible infection, I would have a fever. But what about my swollen neck?’ Repeat for several minutes.) It was a Friday evening, so I phoned NHS Direct and they said it sounded like something that might happen with a spit gland stone and if it hadn’t gone down by Monday morning, I should ring my dentist. This was exactly the calm reassurance I wanted from the NHS. (God bless the NHS.) Then, unexpectedly, they started reading a list of diseases that might be associated with swollen necks. Glandular fever. (Mononucleosis to Americans.) ‘No, I already had that.’ Mumps. ‘I’m vaccinated.’ Meningitis. ‘Doesn’t that usually have a fever?’ I was starting to get alarmed. The woman on the phone was starting to get annoyed. She just had a script to read through (I guess so nobody can say they weren’t warned?) and didn’t want to be interrupted. Lupus. ‘Wait, what? How do I know if I have lupus??’ I hadn’t even considered this possibility. The woman sighed in an irritated manner. I have not rung the NHS Direct since.
Most often what sets off a panic attack is that I’m trying to ignore some emotion I’m having. Something has upset me. I don’t want to deal with it. I tell myself I’m fine and carry on. And then: ‘Wait, what if that cat I just pet has rabies?’ Sometimes, I can identify what emotion or thought I’m trying to nullify and go deal with it and be fine. Often it’s just some really small erasure. Very often, I’m not even aware that I’m doing it. Some part of my brain has intercepted my experience and tried to overwrite it and I haven’t even noticed. This is what I hope CBT can help with, since I really want to stop doing that. I mean, I don’t like having negative emotions, but they’re vastly preferrable to panic attacks.
Also, these erased emotions are sometimes important ones, but often are fairly small. So let’s say I’ve read something that reminds me of LGBT-phobia in schools and its affecting and I just don’t feel like thinking about that at the moment, so there’s an erasure. ‘What if that friendly cat is actually rabid?’ I try to ignore the thought, so there’s another avoidance. ‘I am feeling panicked about this cat and this is stupid, so I must try to hide it or else everyone will know I’m crazy.’ And thus something small builds.

Musical Forms

I did my undergraduate music education sort of the wrong way around. I didn’t expect to want to get a degree in it, so I started by taking all the upper division classes and seminars because they were most interesting. So I learned about how John Cage rejected all the old way of doing things that were not useful any more in the 20th century. Music theory is a old and unneeded! I accepted this at face value. (Never mind how a lot of minimalists, who I loved, worked a lot with harmony.) Then, after I decided I wanted to get a music degree, I had to take all the first year classes in counterpoint, history and all of this stuff I had already rejected. I insisted that John Cage had said it was useless. My teachers disagreed, but since they were the same ones who had told me a few months earlier that this was the stuff of the past, I felt their position was somewhat weakened. Anyway, I graduated, having learned as little traditional stuff as possible.
It wasn’t long after graduation that I became aware that perhaps I had been overzealous in my embracing of Cagean values. I wanted to write something harmonic, but all I actually knew how to do were chorales and I didn’t even know most of the rules for them. How to structure anything was a mystery. I know that forms existed and they had names, but what those meant, I had no idea.
I got to grad school (a decade ago) and somebody commented that everything I wrote was in sonata form. I had no idea. Maybe I should mix this up a bit more? I didn’t know any other forms.
Obviously the thing to do about this gap in my knowledge was to feel deep shame and attempt to hide it. So rather than read a book or ask a teacher, I just hoped nobody noticed how I was nowhere near good enough to actually be qualified to be in an MA program. (To be fair, I was REALLY busy trying to learn every other thing that everybody around me already seemed to know.)
At some point, I finally learned that while there are named forms that exist, form is arbitrary. It’s just any structure you can use to make sense of things. It can sometimes be implied by the material, or it can be decided in advance. Some Cage pieces are all about form. They are vessels into which you can pour any material and the structure somehow causes the material to sound better. Forms are like that. I don’t feel worried about them any more and while my classical vocabulary is still a bit lacking, I’m not overly concerned about this. Anyway, since I moved to England, I don’t even know note names any more, so not knowing how to organise a minuet is somewhat less important than not being able to remember the duration of a semi-quaver or a minim.
If you are hoping for some insight: The important thing to remember about structures is that they fix musical problems. This is how to write a piece of music: Put your material into a structure, then get the ending perfect, then get the beginning nice, then do the middle bits. Then write some glue to hold everything together. If your middle section is supposed to be 5 minutes long but is getting dull by minute three, you can either make it shorter or subdivide it – so instead of being one long thing, it’s got an ABA or ABC structure within it, so it moves between related ideas. That is to say, add some stuff.
As I recall, Cage didn’t talk much about the importance of structure directly, but he implied the hell out of it. Lecture on Nothing is nothing but structure. This is much more vital than the ‘ignore harmony’ that I first got from my youthful introduction. I was over-eager to be freed from a prison I’d never even been in. But aren’t we all? Especially when we’re young.

What’s the Connection?

This post is in AB form, with a small coda.

My Talk at the Sc Symposium

Picking Musical Tones

One of the great problems in electronic music is picking pitches and tunings.

The TuningLib quark helps manage this process.

First, there is some Scale stuff already in SuperColider.
How to use a scale in a Pbind:

(
s.waitForBoot({
     a = Scale.ionian;

     p = Pbind(
          degree, Pseq([0, 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, rest], 2),
          scale, a,
          dur, 0.25
     );

     q = p.play;
})
)

Key

Key tracks key changes and modulations, so you can keep modulating or back out of modulations:

k = Key(Scale.choose);
k.scale.degrees;
k.scale.cents;
k.change(4); // modulate to the 5th scale degree (we start counting with 0)
k.scale.degrees;
k.scale.cents;
k.change; // go back

k.scale.degrees;

This will keep up through as many layers of modulations as you want.

It also does rounding:

quantizeFreq (freq, base, round , gravity )
Snaps the feq value in Hz to the nearest Hz value in the current key

gravity changes the level of attraction to the in tune frequency.

k.quantizeFreq(660, 440, down, 0.5) // half way in tune

By changing gravity over time, you can have pitched tend towards being in or out of tune.

Scala

There is a huge library of pre-cooked tunings for the scala program. ( at http://www.huygens-fokker.org/scala/scl_format.html
) This class opens those files.

a = Scala("slendro.scl");
b = a.scale;

Lattice

This is actually a partchian tuning diamond (and this class may get a new name in a new release)

l = Lattice([ 2, 5, 3, 7, 9])

The array is numbers to use in generated tuning ratios, so this gives:

1/1 5/4 3/2 7/4 9/8   for otonality
1/1 8/5 4/3 8/7 16/9  for utonality

otonality is overtones – the numbers you give are in the numerator
utonality is undertones – the numbers are in denominator

all of the other numbers are powers of 2. You could change that with an optional second argument to any other number, such as 3:

l = Lattice([ 2, 3, 5, 7, 11], 3)

Lattices also generate a table:

1/1  5/4  3/2  7/4  9/8
8/5  1/1  6/5  7/5  9/5
4/3  5/3  1/1  7/6  3/2
8/7  10/7 12/7 1/1  9/7
16/9 10/9 4/3  14/9 1/1

It is possible to walk around this table to make nice triads that are harmonically related:

(
s.waitForBoot({

 var lat, orientation, startx, starty, baseFreq;

 SynthDef("sine", {arg out = 0, dur = 5, freq, amp=0.2, pan = 0;
  var env, osc;
  env = EnvGen.kr(Env.sine(dur, amp), doneAction: 2);
  osc = SinOsc.ar(freq, 0, env);
  Out.ar(out, osc * amp);
 }).add;

 s.sync;


 lat = Lattice.new;
 orientation = true;
 startx = 0;
 starty = 0;
 baseFreq = 440;

 Pbind(
  instrument, sine,
  amp, 0.3,
  freq, Pfunc({
   var starts, result;
     orientation = orientation.not;
     starts = lat.d3Pivot(startx, starty, orientation);
     startx = starts.first;
     starty = starts.last;
   result = lat.makeIntervals(startx, starty, orientation);
   (result * baseFreq)
  })
 ).play
})
)

Somewhat embarrassingly, I got confused between 2 and 3 dimensions when I wrote this code. A forthcoming version will have different method names, but the old ones will still be kept around so as not to break your code.

DissonanceCurve

This is not the only quark that does dissonance curves in SuperCollider.

Dissonance curves are used to compute tunings based on timbre, which is to say the spectrum.

d = DissonanceCurve([440], [1])
d.plot

The high part of the graph is highly dissonant and the low part is not dissonant. (The horizontal access is cents.) This is for just one pitch, but with additional pitches, the graph changes:

d = DissonanceCurve([335, 440], [0.7, 0.3])
d.plot

The combination of pitches produces a more complex graph with minima. Those minima are good scale steps.

This class is currently optimised for FM, but subsequent versions will calculate spectra for Ring Modulation, AM Modulation, Phase Modulation and combinations of all of those things.

(

s.waitForBoot({

 var carrier, modulator, depth, curve, scale, degrees;

 SynthDef("fm", {arg out, amp, carrier, modulator, depth, dur, midinote = 0;
  var sin, ratio, env;

  ratio = midinote.midiratio;
  carrier = carrier * ratio;
  modulator = modulator * ratio;
  depth = depth * ratio;

  sin = SinOsc.ar(SinOsc.ar(modulator, 0, depth, carrier));
  env = EnvGen.kr(Env.perc(releaseTime: dur)) * amp;
  Out.ar(out, (sin * env).dup);
 }).add;

 s.sync;

 carrier = 440;
 modulator = 600;
 depth = 100;
 curve = DissonanceCurve.fm(carrier, modulator, depth, 1200);
 scale = curve.scale;


 degrees = (0..scale.size); // make an array of all the scale degrees


// We don't know how many pitches per octave  will be until after the
// DissonanceCurve is calculated.  However, deprees outside of the range
// will be mapped accordingly.


 Pbind(

  instrument, fm,
  octave, 0,
  scale, scale,
  degree, Pseq([
   Pseq(degrees, 1), // play one octave
   Pseq([-3, 2, 0, -1, 3, 1], 1) // play other notes
  ], 1),

  carrier, carrier,
  modulator, modulator,
  depth, depth
 ).play
});
)

The only problem here is that this conflicts entirely with Just Intonation!

For just tunings based on spectra, we would calculate dissonance based on the ratios of the partials of the sound. Low numbers are more in tune, high numbers are less in tune.

There’s only one problem with this:
Here’s a graph of just a sine tone:

d = DissonanceCurve([440], [1])
d.just_curve.collect({|diss| diss.dissonance}).plot

How do we pick tuning degrees?

We use a moving window where we pick the most consonant tuning within that window. This defaults to 100 cents, assuming you want something with roughly normal step sizes.

Then to pick scale steps, we can ask for the n most consonant tunings

t = d.digestibleScale(100, 7); // pick the 7 most consonant tunings
(
var carrier, modulator, depth, curve, scale, degrees;
carrier = 440;
modulator = 600;
depth = 100;
curve = DissonanceCurve.fm(carrier, modulator, depth, 1200);
scale = curve.digestibleScale(100, 7); // pick the 7 most consonant tunings
degrees = (0..(scale.size - 1)); // make an array of all the scale degrees (you can't assume the size is 7)

Pbind(
 instrument, fm,
 octave, 0,
 scale, scale,
 degree, Pseq([
  Pseq(degrees, 1), // play one octave
  Pseq([-7, 2, 0, -5, 4, 1], 1)], 1), // play other notes
 carrier, carrier,
 modulator, modulator,
 depth, depth
).play
)

Future plans

  • Update the help files!
  • Add the ability to calculate more spectra – PM, RM AM, etc
  • Make some of the method names more reasonable

Comments

Comments from the audience.

  • key – does it recalc the scale or not? Let the user decide
  • just dissonance curve – limit tuning ratios
  • lattice – make n dimensional
  • digestible scale – print scale ratios

Sc symposium – chris brown – ritmos

software to explore perception and performance of polyrhythms
inspired by afro-cuban music
ritmos can play in polyrythmic modes and can listen to a live input. It deals with a difference between a player and a clave.
this was first implemented in HMSL!! As a piece called Talking Drum.
Branches is in sc2 and is in the same series of pieces.
so now there’s a new version in sc3.

classes

RitmosPlay defines a voice stream heirachy and scheduling
RitmosCtlGUI
RitmosSeqGUI
RitmosSynthDefs
RitmosXfrm F interaction algorythms
MIDIListener
he uses a genetic algorithm to balance between the specified clave and the input.
he’s got presets and sequences that deal w current settings.
he’s going into a lot of detail about how this works. It’s complex.
this has an impressive gui. And indeed an impressive functionality. And sounds great.
graphics library… I wish i’d caught the name of…

Sc symposium – lily play – bernardo barros

music notation with supercollider
he used to use OpenMusic, but then moved to linux.
OpenMusic is IRCAM software in common lisp for algorithmic music composition. It looks like max, but makes notation.
SC can do everything om can do except the notation visualisation.
he uses LilyPond. INScore might be faster.
LilyPond is free and cross-platform. It’s simple.
He’s done 3 projects? superFomus and LilyCollider.

Fomus

Uses fomus (fomus.sf.net). Works with events and patterns. It outputs to lillypond and mjusescore
this is cool
he’s showing a useage case with xenakis’s sieves. He’s got some functions as sieves and then does set operations.
this doesn’t work well with metric structures. You’re stuck wrt bar lengths.

LilyCollider

division and addition models of rhythm
rhythm trees can represent almost all kins of rythm. It’s an array of duration and division that can be nested.
he is using a syntax that i don’t know at all… Someone in front of me has a help file open on list comprehensions.
he’s got a very compelling looking score open.
in future he wants to use spanners by abjad to handle some markings. And also he wants some help and feedback for future versions.

questions

can you use this to get from MIDI to LilyPond? Yes, with Fomus.
what about includes? You can make a template.

Live blogging the sc symposium – ron kuivila

naming is the fundamental control mechanism of supercollider (unnamed gets garbage collected).
‘play’ generates instances. It returns a new object of a different class, which confuses n00bs. What you see on the screen does not give you a clue.
The object that defines the work gets misidentified as the one doing the work.
jIT lib’s def classes solves this problem. It makes it easier to share code. Play messages go to the def class. The def classs gives it all a name.
node proxies give you a gui for free also and is also useful pedagogically.
PatternConductor is a interactive control easier than EventStreamPlayer. It deals better with sustain issues.
CV is a control value constrained by an associated Spec. CV can bbe applied to several different contexts simutaneously. Touch is a companion class that does something complex about a CV’s value.
Ron is rewriting Conductor and I should talk to him about this.
yield is a bummer for beginners writing co-routines.

x=(x**i).yield

is confusing.
Pspawnern is a class that seeks to be less confusing syntactically. It does something with Prouts that’s slightly confusing….
Syntactic convience yields conceptual confusion…
he’s asking if Pspawnern is a good idea.
Pspawner is a hybrid between patterns and Routines. One of my students would have loved this. He says it’s a compositional strategy about notation and direction in scores. I may also come to love this class.
And he took no questions!