Militarised Police

In his drive to undo every single Obama policy, Trump has lifted restrictions on police getting military combat gear. This ban was put in place after images came out of the militarised response to protests in Ferguson. The problem with police having military gear is that they will use it in interactions with civilians.

Without a doubt, this is a national issue. However, it is also a local issue. Every police force has it’s own rules about what it can and can’t purchase. Your city can direct it’s police not to buy military hardware.

Many cities are organised into districts, so that every district elects a council member. I used google and my city’s web pages to find my district and from there, found the phone number for my council member’s office. The following is roughly what I said:

Hello, I am a registered voter in [District X] and I’m calling because Trump has just lifted the ban on police forces acquiring military hardware. I’d like to ask that our city police do not get an military equipment and get rid of any military equipment that they might already have.

I vote in Berkeley, and the person answering the phone had not heard of the new rules and was unhappy to hear of them. She assured me that my council member was in agreement and expressed hope that the whole council would feel similarly. It may seem like it’s unnecessary to make this call in Berkeley, but my concern was that some people might think that military kit would be an appropriate way to respond to the fascist violence that’s been rising in the city. However, I would argue that the danger of fascism is part of why we must ensure our police are de-militarised.

Because local politics are smaller scale, our voices are much more easily heard than they are in national politics. Calling about this issue can help make a difference in your community. Moreover, this does have a national effect. Cities refusing this hardware will help repudiate Trump. And keep our cities safer from police overreaction.

for more about local police reforms and reducing police violence, check out the excellent group Campaign Zero.

Tell congress you’re against nuclear war

Dear [Congress Person],

The constitution states that war can only be declared by congress. Launching a nuclear first strike is certainly an act of war. I urge you and members of congress to make clear your necessary role in declaring war and to remove from the president the ability to make unauthorised first strikes.

Best Regards,

[Your name]

[The address at which you are registered to vote]

You can fax your senators for free: https://faxzero.com/fax_senate.php. You do not need to create an account, but you do need to enter your email address. You should contact both senators.

You can also fax your representative for free: https://faxzero.com/fax_congress.php. You only have one representative. You can find out who they are here: https://www.house.gov/representatives/find/

If you are a US resident who cannot vote, you can, of course, still contact your local senator and representative. If you cannot vote in the US and do not live in the US, you should contact your local government representative and express your concerns. Especially if you government is a NATO member or allied with the US in some other way, this could be helpful.

Update

There’s already a bill in congress on this topic, the Restricting First Use of Nuclear Weapons act of 2017. Here’s a sample phone script if you want to call congress: https://www.wagingpeace.org/sample-phone-script-restricting-first-use-nuclear-weapons-act/

Everybody’s Free to Feel Good: Gay Clubs and Liberation

Listening to club mixes on Gaydio, I was struck by how often the word ‘free’ came up in the music, as a long, held, emphasised word. While some of this is undoubtedly due to the lure of endless granular stretching of the ‘eee’ sound, this is clearly an idea that resonates still within the gay club scene. For example, in Outrage’s 1996 hit, Tall N Handsome a low-pitched voice first says ‘I’m looking for a good man’ and then sings, ‘He’s got to be tall n handsome. and he’s got to be free.’

But what does it mean for the good man to be ‘free’? While an obvious interpretation would be ‘single’, when this song is played in a long set of club mixes, a more clubby interpretation of ‘free’ is suggested.

Although by 1996, gay men in England, where the song was recorded, had more freedom than previously, they still had much less than straight people. The song itself, however, is not a strident call for freedom or action. Freedom is an individual project – the good man must be free as a pre-requisite for the narrator. Again, the precise meaning of this is not specified, but the onus for attaining this freedom is squarely placed on him. Indeed, the vocal tones of the man-seeker suggest a political safeness. The spoken part sounds theatrical and light, as if they were spoken by a dame in a panto. The speaker says ‘Now, I’m looking for a good man, but not just any man. He’s got to be someone special.’ And then, as far as I can tell from the recording, he says, ‘Someone in like Popye.’ The sung part follows.

The version of this song that I heard twice on Gaydio yesterday, mixed by Paul Morell, removes a lot of the comic ambiguity of the original. The original narrator is replaced by Boy George who sounds more typically like someone speaking over a love song, says, ‘Now, I’m looking for a good man, but not just any man. He’s got to be someone special. Someone who can light my fire.’ Of course, it’s possible that the lyrics are actually the same in both versions, but of the two, the newer one is clearly intended in earnest. The update suggests that some took the original song seriously from the 90s.

The repetition of the good man’s requirements, centres the importance of his freedom – a long held word at the end of the chorus. The good man’s individualised freedom, in a 90s context, may refer to a personal authenticity. A free gay man then was free of the closet – at least some of the time in at least some circumstances. This suggests he does not have a woman in his life acting as a ‘beard’ – he’s not married nor in a sham straight relationship. As to his outness more generally, then, as now, people make choices about how gay they feel they can act in various circumstances. I’m reminded of a shop in San Francisco’s Castro District in the 1990s called ‘Does Your Mother Know?’ Like the original song, this uses humour to get at a truth. Many gay people at that time were not out at work and had not told all or sometimes any members of their birth family. The freedom required was likely not this kind of political freedom – instead the good man was somebody who was liberated in certain circumstances.

I remember stickers and chalked slogans (again in California) from the mid 90s which said variations of ‘free your mind and your booty will follow.’ At the time, I took this to mean that free-thinking would lead broader horizons in one’s physical circumstances, but other interpretations are possible. One’s booty is, of course, one’s arse. This can be used to mean one’s whole, grounded physical self (‘get your ass out of here’), or it can refer more specifically to one’s undercarriage (‘shake your booty’). Another interpretation of the slogan is that a free mind will lead to a sexual freeing. It’s likely that the narrator wants somebody who is tall and handsome and who is not overly sexually inhibited.

However, the word ‘free’ is not unique to this song. Someone at a club would hear it several times in several songs over the course of an evening. The type(s) of freedom and paths to freedom may lead towards sexual openness, but that is a destination, not an origin. Indeed, given the distinct lack of personal freedom most gay men experienced most of the time, they could only be free in safe, gay spaces. Freedom thus comes from the club.

This extremely personal sense of release and liberation – a temporary reprieve from a hostile outside, is exhilarating. The club offers a chance to be as gay as one wishes to be, without significant risk. This is in stark contrasts to public outdoor spaces, which were really only safe on Gay Pride Day and sometimes not even then. Freedom in the club and the bedroom gave one enough space to exist and to live. It called for celebration and repetition in song.

However good it felt, though, it contained an inherent contradiction. Someone who was actually free, as this is understood in straight society, would not need to rely on clubs and bars to experience their freedom. Therefore, freedom while it is celebrated is also redefined to fit the circumstances. In 1991, Rozalla released the prototypical anthem to the freedom of the club, Everybody’s Free (to Feel Good). The chorus of the song lingers on a long held ‘free’, resolving with the less prominent but still affirming parenthetical. This is not a freedom of the mind, but a physically embodied sensation of drink, drugs and dance.

The circumstance and ritual of the clubs and bars does not lessen the temporary sensation of freedom, quite the contrary. The transient nature of the experience makes it al the more compelling, as the feeling of camaraderie, community and sexual possibility relies on physical access to the space. For decades, activists complained that most gay people were only interested in this temporary freedom and not doing the work to secure a more enduring political freedom. These spaces, however, provided a launchpad for gay culture, like the charting Tall N Handsome to enter straight spaces and slowly normalise the idea that a man might be looking for a good man who is tall, handsome and free.

Domifare – still a rough draft

Today’s diff. Everything compiles, but most things aren’t tested!

Today, I wrote the functions for most of the language structures, except the scheduling ones. And the shaking one, which I’ve just realised I’ve forgotten to include! For the variable classes, I am borrowing a lot of code from DubInstrument in AlgoRLib. Probably, this project and that should be folded into one repo or one should directly depend on the other.

For DubInstruments, asking for a random pattern can trigger the creation of a new one, but not here, as all patterns are entered by the performer.

I need some GUI, including sliders for thresholds and a text print out of entered stuff. Ideally, there should also be a record light for when the performer is entering loops.

As far as shaking goes, that’s sort of straight forward for the rhythm lines. For the melody lines, I might be looking at BufferTool. It’s designed to split up spoken text rather than played notes and relies on pauses. Another possibility is to keep onset data for melodic loops and use it to decide where cuts should be. I’ll need another trigger that gets sent by the recording synthdef when it’s gate opens, so I can relate the onset timings to the position in the buffer.

Tomorrow my wife is having a party and I’m doing marking on Monday and Tuesday, so it might be a few days before I can test properly.

Domifare Classes

Key still had some problems with transposition that related to frequency quanitsation, so those are (hopefully?) now sorted. I got rid of the gravity argument for freqToDegree because it doesn’t make sense, imo and calculating it is a tiny bit of a faff.

For Domifare, as with a spoken language, breaks between commands are articulated as pauses, so I’ve added a DetectSilence ugen. The threshold will need to be connected to a fader to actually be useful, as the margin of background noise will vary massively based on environment.

The next step is parsing. It’s been a loooong time since I’ve worried about how to do this… IxiLang uses a switch statement with string matching.

I need to draw out how this is going to work, since the repeat and the chance commands both take commands as arguments.

This might work as a statement data array:

[key, min_args, max_args, [types], function]

Types can be: \var, \number, \operator, \data. If it’s \operator, then the operator received will be the key for another statement, and the parser will listen for that too…. If it’s \data, that means start the fucntion asap….

Also, since variables are actually loop holders, I’m going to need to make a class for them.

My original plan to was to use pitch recognition to enter in midi notes, but that’s not going to work, so some commands are now defunct.


(
var lang, vars, numbers;
vars = (solfasire:nil, solfasisol:nil, soldosifa:nil);
numbers = (redodo: 1, remimi:2, refafa: 3, resolsol: 4, relala: 5, resisi: 6, mimido: 7, mimire:8);
lang = (
larelasi: [\larelasi, 2, 2, [\var, \data], nil], // func adds the name to the var array, runs the recorder
dolamido: [\dolamido, 0, 1, [\var], nil], // func stops names loop or all loops
domilado: [\domilado, 0, 1, [\var], nil], // func resumes named loop or all loops
mifasol: [\mifasol, 0, 1, [\var], nil], // func raises an octave, which is probably impossible
solfami: [\solfami, 0, 1, [\var], nil], // func lowers an octave- also impossible
lamidore: [\lamidore, 2, 2, [\var, \data], nil], // add notes to existing loop
dosolresi: [\dosolresi, 1, 1, [\var], nil], // shake the loop, which is possible with recordings also...
misisifa: [\misisifa, 0, 1, [\var], nil], // next rhythm
fasisimi: [\fasisimi, 0, 1, [\var], nil], //previous rhythm
misoldola: [\misoldola, 0, 1, [\var], nil], //random rhytm
refamido: [\refamido, 0, 0, [], nil], // die
sifala: [\sifala, 2, 2, [\number, \operator], nil], // repeat N times (1x/bar)
larefami: [\larefami, 2, 2, [\number, \operator], nil] // X in 8 chance of doing the command
);

After pondering this for a bit, I decided to write some classes, because that’s how I solve all my problems. I created a github project. This is the state of the sole file today.

Tested with human voice

Testing showed that for human voice, the frequency domain onsets and pitch tracking were more accurate and faster than the time domain, which is good to know.

Once the frequency is detected, it needs to be mapped to a scale degree. I’ve added this functionality to the Tuning Lib quark. While doing this, I could the help file was confusing and badly laid out and some of the names of flags on the quantisations were not helpful, so I fixed the helpfile, documented the new method, renamed some of the flags (the old ones still work). And then I found it wasn’t handling octaves correctly – it assumed the octave ratio is always 2, which is not true for Bohlen Pierce scales, or some scales derived by Dissonance Curve. So this was good because that bug is not fixed after a mere 8 years of lurking there. HOWEVER, the more I think about it, the less I think this belongs in Key….

Pitch detecting is flaky as hell, but onsets are solid, which is going to make the creation of melodic loops difficult, unless they actually just record the tuba and do stuff with it.

This is the code that’s working with my voice:


(

s.waitForBoot({

s.meter;

SynthDef(\domifare_input, { arg gate=0, in=0;

var input, env, fft_pitch, onset, chain, hasfreq;

input = SoundIn.ar(in, 1);
env = EnvGen.kr(Env.asr, gate, doneAction:2);

chain = FFT(LocalBuf(2048), input);
onset = Onsets.kr(chain, odftype:\phase);//odftype:\wphase);
#fft_pitch, hasfreq = Pitch.kr(input);

//send pitch
SendTrig.kr(hasfreq, 2, fft_pitch);

// send onsets
SendTrig.kr(onset, 4, 1);

//sin = SinOsc.ar(xings/2);

//Out.ar(out, sin);

// audio routing
//Out.ar(out, input);

}).add;

k = Key(Scale.major); // A maj
//k.change(6); // C maj - changing to c maj puts degree[0] to 6!

b = [\Do, \Re, \Mi, \Fa, \So, \La, \Si];
(scale:k.scale, note:k.scale.degrees[0]).play;

OSCdef(\domifare_in, {|msg, time, addr, recvPort|
var tag, node, id, value;

#tag, node, id, value = msg;
case
{ id == 2 } {
//value.postln;
//c = k.freqToDegree(value.asFloat).postln;
//b[c.asInt].postln;
b[k.freqToDegree(value.asFloat)].postln;
}
{ id == 4 } { "4 freq dom onset".postln; }

}, '/tr', s.addr);

s.sync;

a = Synth(\domifare_input, [\in, 0 , \out, 3, \rmswindow, 50, \gate, 1, \thresh, 0.01]);

})
)

Domifare input

Entering code requires the ability to determine pitch and entering data requires both pitch and onset. Ergo, we need a synthdef to listen for both things. There is also two ways to determine pitch, one in the time domain and the other in the frequency domain.

The frequency domain, of course, refers to FFT and is probably the best method for instruments like flute. It has a pure tone, where the loudest one is the fundamental. However, brass instruments and the human voice both have formants (loud overtones). In the case of tuba, in low notes, the overtones can be louder than the main pitch. I’ve described time-domain frequency tracking for brass and voice in an old post.

The following is completely untested sample code…. It’s my wife’s birthday and I had to go out before I could try it. It does both time and frequency domain tracking, using the fft code to trigger sending the pitch in both cases. For time domain tracking, it could -and possibly should- use the amplitude follower as a gate/trigger in combination with a frequency change of greater than some threshold. The onset cannot be used as the trigger, as the pitch doesn’t stabilise for some time after the note begins. A good player will get it within two periods, which is still rather a long time in such a low instrument. A less good player will take longer to stabilise on a pitch.

Everything in the code is default values, aside from the RMS window, so some tweaking is probably required. Presumably, every performer of this language would need to make some changes to reflect their instrument and playing technique.


(

s.waitForBoot({

SynthDef(\domifare_input, { arg in=0, out=3, rmswindow = 200;

var rms, xings, input, amp, peaks, sin, time_pitch, fft_pitch, onset, chain, hasfreq;

input = SoundIn.ar(in, 1);
amp = Amplitude.kr(input);
rms = RunningSum.rms(input, window);
peaks = input - rms;
xings = ZeroCrossing.ar(peaks);
time_pitch = xings * 2;

chain = FFT(LocalBuf(2048), input);
onset = Onsets.kr(chain, odftype:\wphase);
#fft_pitch, hasfreq = Pitch.kr(input);

//send pitch
SendTrig.kr(hasfreq, 0, time_pitch);
SendTrig.kr(hasfreq, 1, fft_pitch);

// send onsets
SendTrig.kr(onset, 2, 1);

//sin = SinOsc.ar(xings/2);

//Out.ar(out, sin);

// audio routing
//Out.ar(out, input);

}).add;

OSCdef(\domifare_in, {|msg, time, addr, recvPort|
var tag, node, id, value;

#tag, node, id, value = msg;
case
{ id == 0 } { "time dom pitch is %".format(value).postln; }
{ id == 1 } { "freq dom pitch is %".format(value).postln; }
{ id == 2 } { "onset".postln; }

}, '/tr', s.addr);

s.sync;

a = Synth(\domifare_input, [\in, 0 , \out, 3, \rmswindow, 200]);

})
)

Domifare fonts

Solresol can be notated in many ways: solfedge, numbers, notes and via two competing sets of special glyphs. These glyphs are a proposed edition to the unicode standard and part of a set of glyphs known as the CSUR. They’re included in some fonts, like the amazingly ugly Unifoundry includes the more abstract glyphs

      

and Constructium which just has single characters of solfedge

       

(and this is boring, but well-rendered and easy to understand – aside from the duplication of the final syllable as both ‘si’ and ‘ti’.).

Both sets of glyphs above should render in modern web browsers, but allow some time.

Many of my compuer music projects seem to quickly get bogged down in font issues and learning a new script is probably too much to ask of performers (myself included), even if it’s only 8 glyphs. However Constructum is, essentially, a monospace font in the sence that all 4-note words will render the same length, so it’s my likely choice for a display. It is a lot more easy to do than to draw actual music notation.

Like ixilang users type into a dedicated Document window Domifare users will be provided with an auto-transcription of their input. This is enough problem to solve by itself in early versions, but ixi-lang’s page re-writing properties seem like a good plan for later ones.

Domifare sisidomi

‘Domifare sisidomi’ means ‘live code’ in solresol, which is the first ever ‘constructed language’. That is, it was the first ever language to be intentionally designed. And, as this was a new idea, the creator, François Sudre, apparently felt like new syllables were needed. He used musical tones.

This last weekend, I played at an algorave in Newcastle with tuba and algorithms. The idea was to use a foot pedal to control things, but (despite working perfectly at home), it was non-responsive when the gig started, so my set included some live coding. Live coding with one hand while holding a tuba is not terribly efficient and it’s impossible to live code and play tuba at the same time . . . unless, playing the tuba is the live coding.

And thus, I’ve now specified an ixi lang-like language, domifare sisidomi. It’s a bit sparse, but there’s only so much a player can be expected to remember.

All variables are loops. There are three built in: solfasire, solfasisol and soldosifa (low percussion, high percussion and bassline). These are entered by playing the name of the variable followed by a rhythm or melody. As there is more than one kind low or high percussion instruments, different ones can be specified by playing different pitches.

The full (rough, unimplemented) specification follows:

// Enter a loop

solfasire [rhythm] //kick & toms
solfasisol [rhythm] // higher drums
soldosifa [melody] // bassline

larelasi [4 notes = the name] [melody] // declare a new loop

// start stop and modify a loop

dolamido [name] -- silence loop
domilado [name] -- resume loop
mifasol [name] -- raise an octave
solfami [name] -- lower an octave

lamidore [name] [rhythm] -- add notes to the loop
dosolresi [name] -- randomise loop // shake in ixilang

// every time a loop is changed by playing in new notes, shaking or adding, it gets added to a list of rhythms

// moving between loops in the list

misisifa / fasisimi [optional name] - move to next or previous rhythms
misoldola [optional name] - move to a random rhythm

// if no name is given, applies to all playing loops

// control structures

refamido - die

sifala dofadore [number] [next/prev/rand/randomise/chance/octave shift] [optional name] -- repeat the command x times

larefami [number] [next/prev/rand/randomise/repeat/octave shift/die] [optional name] - x in 8 chance of doing the command

//numbers

redodo - 1
remimi - 2
refafa - 3
resolsol - 4
relala - 5
resisi - 6
mimido - 7
mimire - 8

Writing a letter

Dear Hon. [Representative],

Today, I read an article about Guatemalans who were injured in unethical medical experiments carried out under the auspices of the US government.

I would like it if you could sponsor legislation to provide treatment for those injured and their families. I would also like the US to establish firm ethical rules regarding conducting overseas medical research, such that researchers are bound by rules at least as strict as they are bound by here.

Many Guatemalans were deliberately infected with syphilis and gonorrhea without their knowledge or consent and never received any treatment. They have since unwittingly passed the infection on to their partners and children, who were infected at birth and who have since passed it on to their own children. Few of those effected could afford medical treatment, even if it was available in their region. I would like to see the US provide treatment and compensation, as well as help establish health clinics in remote parts of that country. Failing that, I would like to see the US waive sovereign immunity in this case so that those effected can proceed with a class action lawsuit.

As American pharmaceutical companies are performing more and more research abroad, it’s important that subjects give meaningful informed consent, adequate compensation, and appropriate treatment for injuries during the study. Going overseas cannot be a way to dodge ethical guidelines.

Thank you for your time.

Charles Hutchins