Harmonic Motion: a tool kit for processing gestural data for interactive sound

they want to turn movement data into music.
This has come out of a collaboration with a dancer, using kinect. It was an exploration. He added visualisation to his interface. And eventually 240 parameters. The interface ended up taking over compared to the sound design.
They did a user survey to find out what other people were doing. So they wanted to write something that people could use for prototyping, that’s easy, extensible, and re-usable.
They wanted something stable, fast, free and complementary, so you could use your prototype in production. Not GPL, so you can sell stuff.
A patch-based system, because MAX is awesome all of the time.
This system is easily modifiable. He’s making it sound extremely powerful. Paramters are easy to tweak and saved with the patch, because parameters are important.
Has a simple SDK. Save it as a library, so you can run it in your project without the gui. this really does sound very cool.
Still in alpha.http://harmonicmotion.timmb.com

Questions

CNMAT is doing something he should look at, says a CNMAT guy.

Creating music with leap motion and big bang rubette

Leap Motion is cool, he says.
rubato composer is software that allows people to do stuff with music and maths structures and transforms. It’s MAXish, but with maths.
The maths are forms and denotators, which is based on category theory and something about vector spaces. You can define vectors and do map stuff with them. He’s giving some examples, which I’m sure are meaningful to a lot of people in this room. Alas, both the music AND the math terms are outside of my experience. …. Oh no wait, you just define things and make associations between them. …. Or maybe not…..
It sounds complicated, but you can learning while doing it. They want to make it intuitive to enter matrixes via a visual interface, by drawing stuff.
This is built on ontological levels of embodiment. Facts, processes, gestures (and perhaps jargon). Fortunately, he has provided a helpful diagram of triangular planed in different colours, with little hand icons and wavy lines in a different set of colours, all floating in front of a star field.
Now we are looking at graphs that have many colours, which we could interact with.

Leap Motion

A cheap, small device that track hands above the device. More embodied than mouse or multitouch, as it’s in 3d and you cna use all your fingers.

Rubato

Is built in java, as all excellent music software is. You can grab many possible spaces. Here is a straightfoward one in a five dimensional space, which we can draw with a mouse, but sadly, not in five dimensions. Intuitively, his gui plays audio from right to left. The undo interface is actually kind of interesting. This also sends midi….
The demo seems fun.
Now he’s showing a demo of waving his hands over a MIDI piano.

Questions

Is the software available?
Yes, on sourceforge, but that’s crashy. And there will be an andriod version.
Are there strategies to use it without looking at the screen?
That’s what was in the video, apparently.
Can you use all 3 dimensions?
Yes

Triggering Dounds From Discrete Gestures

Studying air drumming
Air instruments, like the theremin need no physical contact. The kinect has expanded this.
Continuous air gestures are like the theremin.
Discrete movements are meant to be triggers.
Air instruments have no tactile feedback, which is hard. They work ok for continuous air gestures, though. Discrete ones work less well.
He asked users to air drum along to a recorded rhythm.
Sensorimotor Synchronization research found that people who tap along to metronomes are ahead of the beat by 100ms.
Recorded motion with sensors on people.
All participants had musical experience, were right handed.
They need to analyze the audio to find drum sounds.
anaylsis looks for ‘sudden change of direction’ in user hand motion.
The have envelope following that is slow and fast and then compare those results. Hit occurs at velocity minimum. (usually)
Acceleration peaks take place before audio events, but very close to it.
Fast notes and slow notes have different means for velocity, but acceleration is unaffected.

Questions

Can this system be used to predict notes to fight latency in the kinect system?
Hopefully
Will result be different if users have drum sticks?
Maybe?

Nime live blog: Conducting aanalysis

They asked people to conduct however they wanted, to build a data set. Focus on the relationship between motion and loudness.
25 subjects conducting along to a recording. Used kinect to sample data. Used libxtract to measure loudness in the recordings.
Users listen to the recording twice and then conduct it 3 times
Got joint descriptors; velocity, acceleration and jerk; distance to torso.
Got general descriptors about quality of motion, maximum hand height.
they looked for descriptors highly correlated to loudness. they found none. some participants said they didn’t follow dynamics. 8 subjects were removed.
Some users used hand height for loudness, others used larger gestures. they separated users into two groups.

They have been able to find tendencies across users. However,a general model may not be the right approach.

Questions

How do they choose users?
People with no musical training were in the group that raised hand height.

Building SuperCollider 3.6 on Raspberry Pi

Raspberry Pi Wheezy ships with SuperCollider, but it ships with an old version that does not have support for Qt graphics. This post is only slightly modified from this (formerly) handy guide for building an unstable snapshot of 3.7 without graphic support. There are a few differences, however to add graphic support and maintain wii support.
This requires the Raspbian operating system, and should work if you get it via NOOBs. I could not get this to fit on a 4 gig SD card.
Note: This whole process takes many hours, but has long stretches where it’s chugging away and you can go work on something else.

Preparation

  1. log in and type sudo raspi-config, select expand file system, set timezone, finish and reboot
  2. sudo apt-get update
  3. sudo apt-get upgrade # this might take a while
  4. sudo apt-get remove supercollider # remove old supercollider
  5. sudo apt-get autoremove
  6. sudo apt-get install cmake libasound2-dev libsamplerate0-dev libsndfile1-dev libavahi-client-dev libicu-dev libreadline-dev libfftw3-dev libxt-dev libcwiid1 libcwiid-dev subversion libqt4-dev libqtwebkit-dev libjack-jackd2-dev
  7. sudo ldconfig

Build SuperCollider

  1. wget http://downloads.sourceforge.net/project/supercollider/Source/3.6/SuperCollider-3.6.6-Source.tar.bz2
  2. tar -xvf SuperCollider-3.6.6-Source.tar.bz2
  3. rm SuperCollider-3.6.6-Source.tar.bz2
  4. cd SuperCollider-Source
  5. mkdir build && cd build
  6. sudo dd if=/dev/zero of=/swapfile bs=1MB count=512 # create a temporary swap file
  7. sudo mkswap /swapfile
  8. sudo swapon /swapfile
  9. CC=”gcc” CXX=”g++” cmake -L -DCMAKE_BUILD_TYPE=”Release” -DBUILD_TESTING=OFF -DSSE=OFF -DSSE2=OFF -DSUPERNOVA=OFF -DNOVA_SIMD=ON -DNATIVE=OFF -DSC_ED=OFF -DSC_EL=OFF -DCMAKE_C_FLAGS=”-march=armv6 -mtune=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp” -DCMAKE_CXX_FLAGS=”-march=armv6 -mtune=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp” ..
    # should add ‘-ffast-math -O3’ here but then gcc4.6.3 fails
  10. make # this takes hours
  11. sudo make install
  12. cd ../..
  13. sudo rm -r SuperCollider-Source
  14. sudo swapoff /swapfile
  15. sudo rm /swapfile
  16. sudo ldconfig
  17. echo "export SC_JACK_DEFAULT_INPUTS="system"" >> ~/.bashrc
  18. echo "export SC_JACK_DEFAULT_OUTPUTS="system"" >> ~/.bashrc
  19. sudo reboot

Test SuperCollider

  1. jackd -p32 -dalsa -dhw:0,0 -p1024 -n3 -s & # built-in sound. change to -dhw:1,0 for usb sound card (see more below)
  2. scsynth -u 57110 &
  3. scide
  4. s.boot;
  5. {SinOsc.ar(440)}.play
  6. Control-.

Optional: Low latency, RealTime, USB Soundcard etc

  1. sudo pico /etc/security/limits.conf
  2. and add the following lines somewhere before it says end of file.
  3. @audio – memlock 256000
  4. @audio – rtprio 99
  5. @audio – nice -19
  6. save and exit with ctrl+o, ctrl+x
  7. sudo halt
  8. power off the rpi and insert the sd card in your laptop.
  9. dwc_otg.speed=1 # add the following to beginning of /boot/cmdline.txt (see http://wiki.linuxaudio.org/wiki/raspberrypi under force usb1.1 mode)
  10. eject the sd card and put it back in the rpi, make sure usb soundcard is connected and power on again.
  11. log in with ssh and now you can start jack with a lower blocksize
  12. jackd -p32 -dalsa -dhw:1,0 -p256 -n3 -s & # uses an usb sound card and lower blocksize
  13. continue like in step5.2 above

links:

This post is licensed under the GNU General Public License.

Personalised Jpegs for emailed wedding invitations

Let’s say you want to invite a bunch of people to your wedding and your soon-to-be-spouse wants some nice graphic you can mail to folks that has their name in it. You can do this! This script works with Linux and should work with OS X. It will require a few changes to work with windows.

Install some nifty software

I’m using both imagemagick and OptiPNG, both of which I got through apt-get. Probably, the png step is overkill and you could go straight to jpeg.
I’m also using Inkscape, Python and LibreOffice, but you can use any spreadsheet you want.

Make the graphic template

  1. Find some nice border of some kind. I drew one and scanned it, but there are other options.
  2. Open your nice border in inkscape (or other svg editor).
  3. Put all the text you want into your graphic, with the font you want.
  4. In the part where you want their name, put GUEST_NAME
  5. Save your lovely creation as template.svg

Compile names and email addresses

In LibreOffice, open a new spreadsheet and make a bunch of entries for your guests.
The first column should be email addresses.
If you are NOT saving the images, then the next column can all say ‘invite’ for every single entry. If you want to save the jpegs (say to post them to facebook walls as well as emailing them), then give them a short name associated with the person. This will be a file name, so it should be all one word that starts with a letter and contains only letters, numbers and underscores.
The last column should be the name you want to appear in the invite. You know from making your template how much space you have for names, so keep that in mind, if you’re deciding to put in Reverend Doctor Julius Milliband Cameron III’s full name or not. Or you may need to go back and tweak your template.
Your speadsheet should look something like this:

foo@example.com jen Jennifer
bar@example.com ralph Ralph & Morris
dr_rev@example.com ju Dr Cameron

Save this spreadsheet as guests.csv

The script

Get ready

Save your template, your spreadsheet and the script (cut and past from below), all to the same folder on your system. Call the script doemail.py
You will need to modify this script a bit.
Put in your own text where you see the part that says YOUR OWN TEXT. You’ll see it asks for your own text twice. One of those times is plain text. The other one is HTML. the plain text one is just text. Don’t include any html tags. If you put in links, you just have to put in the link as plain text. In the HTML part, you can use a lot of markup, including <a href=”blah.com”>blahblah</a> tags and whatnot. You can do inline CSS, if you like, but it’s email, so keep it relatively simple. In both sections, don’t forget to include a link to your website. And if you are using an online form for RSVPs, link to that as well.
You’ll also need to put in your own email address, and your own password. If you are using gmail, you can use an application-specific password.
Finally, you will also need to put in the smpt server for your mail server. Near the top of the file, you’ll see lines for hotmail and gmail. Delete any that don’t apply to you. If you are using a different server, you’ll have to find out what to put there.
If you want to save the nice jpegs, say to also post them in facebook messages, then look for the line:

jpegname = "/tmp/"+name+".jpeg"

and change the ‘/tmp/’ part to another directory on your system.
You need to make the script executable. Open the terminal application and cd to the directory with the script, template, and spreadsheet. Type:

 chmod +x doemail.py

This will make the script executable as a program you can run. then, double check your spreadsheet is ok. Type:

less guests.csv

It should look like:

foo@example.com,jen,Jennifer
bar@example.com,ralph,Ralph & Morris
dr_rev@example.com,ju,Dr Cameron

If you see semicolons instead of commas, then you need to change your script to tell it that. Change

guestreader = csv.reader(csvfile)

to

guestreader = csv.reader(csvfile, delimiter=';')

To run the script, still from your terminal, type:

 ./doemail.py

The Actual script to cut and paste

#! /usr/bin/python

import smtplib
import re
import subprocess
import os
import cgi
import uuid
import csv

from subprocess import call
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text      import MIMEText
from email.mime.image     import MIMEImage
from email.header         import Header    



# me == my email address
me = "example@hotmail.co.uk"
password = "yourEmailPassword"
smpt_server = "smtp.live.com:587" #hotmail
smpt_server = "smtp.gmail.com:587" #gmail

with open('guests.csv') as csvfile:
    guestreader = csv.reader(csvfile)
    for row in guestreader:
        you = row[0]
        name = row[1]
        salutation = row[2]

        name = ''.join(name.split())



        text = "Dear " + salutation + ",nn  YOUR TEXT GOES HERE http://YOURWEBSITE.COM"


        html = """
<html>
  <head></head>
  <body>
    <p>
<a href="YOUR WEDDING WEBSITE">
        """
        html = html + "<img src="cid:{}@example.com" alt="[More Information]" /></a></p>n<p>Dear {},</p>".format(img['cid'], salutation)
        html = html + """
<p>YOUR TEXT GOES HERE</p>
</body></html>
    </p>
  </body>
</html>
        """


        print (salutation)

        # Create message container - the correct MIME type is multipart/alternative.
        msg = MIMEMultipart('related')
        text_msg = MIMEMultipart('alternative')
        msg['Subject'] = Header(u'Wedding Invitation', 'utf-8')
        msg['From'] = me
        msg['To'] = you



        # make the image

        filename = "/tmp/"+name+".svg"
        pngname = "/tmp/"+name+".png"
        jpegname = "/tmp/"+name+".jpeg"

        svg = open("template.svg");
        svgn = open(filename, 'w');
        lines = svg.read().split('n')
        for line in lines:
            line = re.sub('GUEST_NAME',re.sub('&', '&amp;', salutation), line)
            svgn.write(line)
        #endfor

        svg.close()
        svgn.close()

        os.system("inkscape -f " + filename + " -e " + pngname)
        os.system("optipng " + pngname);
        os.system("convert -compress JPEG -quality 87 " + pngname + " " + jpegname);

        os.system("rm " + filename)

    
        # attach the image to the email

        img = dict(title=u'Invitation', path=jpegname, cid=str(uuid.uuid4()))
                                                        #cid=name)
                                                        #cid=str(uuid.uuid4()))
        with open(img['path'], 'rb') as file:
            msg_img = MIMEImage(file.read(), name=os.path.basename(img['path']))
            #msg.attach(msg_img)
            msg_img.add_header('Content-ID', '<{}@example.com>'.format(img['cid']))
            msg_img.add_header('Content-Name', img['cid'])
            msg_img.add_header('X-Attachment-ID', '{}@example.com'.format(img['cid']))
            #msg_img.add_header('Content-Disposition', 'attachment', filename=os.path.basename(img['path']))
            msg_img.add_header('Content-Disposition', 'inline', filename=os.path.basename(img['path']))

        print('<{}>'.format(img['cid']))



        # Create the body of the message (a plain-text and an HTML version).



        # Record the MIME types of both parts - text/plain and text/html.
        part1 = MIMEText(text, 'plain')
        part2 = MIMEText(html, 'html')

        # Attach parts into message container.
        # According to RFC 2046, the last part of a multipart message, in this case
        # the HTML message, is best and preferred.
        text_msg.attach(part1)
        text_msg.attach(part2)
        msg.attach(text_msg)
        msg.attach(msg_img)


        # Send the message via local SMTP server.
        server = smtplib.SMTP(smpt_server)
        server.ehlo()
        server.starttls()
        server.login(me,password)
        # sendmail function takes 3 arguments: sender's address, recipient's address
        # and message to send - here it is sent as one string.
        server.sendmail(me, you, msg.as_string())
        server.close()
        #server.quit()

        os.system("rm " + pngname)

    #end for (going through rows in the database)
    csvfile.close()
#end with    

I’m using Firefox because it’s great in programming and politics

Update: Eich has stepped down.
Yeah, so OkCupid says I should switch to a Google product because it’s better on LGBT rights. Um, have they been paying attention to anything? The new Mozilla CEO gave $1k to overturn marriage quality in California, whereas Google sponsored a national conference of prominent right-wing politicians who want to overturn all LGBT rights everywhere.
You know what, I love having equal marriage rights in California, really I do. And like most LGBT people, I thought prop 8 was terrible. But what I don’t like is ‘pink washing’, where some company makes some lame claim to be a sponsor of LGBT rights, (usually by having a health insurance policy that is vaguely equal or, thse days, by supporting something that a large majority of American agree with anyway (how bold!)) and then we’re supposed to forgive them all their other sins. Even if Google weren’t sponsoring CPAC, they’d still be in bed with the NSA.
We don’t hear much about ‘don’t be evil’ these days, because, alas, Google is making a fuckload of money by being evil. Mozilla never needed a corporate slogan like that because their mission has always been to do good from the very outset. I agree with this queer Mozilla employee who doesn’t want the open internet to get caught up in the American political football match of left vs right wedge issues and distraction. Open internet and NSA spying is more important than a relative small donation to an odious cause, which, by the way, does not mean we should be ‘tolerant’ of some asshole’s concrete political actions to take away rights from a minority which includes some of this own employees. If every other browser was also open source and pro-open standards and on the right side of LGBT rights, then this would be worth switching browsers over, for sure, but that’s not what’s going on here. The CEO says he won’t resign, which is a poor choice, but, again, really not worth a boycott. Especially when the other choices are closed source or blatantly on the side of evil.
So keep Firefox, and install Lightbeam if you want to see just how bloody much Google is spying on your every move. And if you’re an ally or whatever like OKCupid, how about doing a tiny bit of research and not telling LGBT people what to think or do? LGBT people and Mozilla employees can all speak for themselves/ourselves. Because, hey, we’ve got the internet, which is still open, thanks largely to the efforts of Mozilla.
Disclaimers of various sorts: I used to work for Netscape and I got the first same sex divorce in the state of California.

Bullying as Journalism

EDIT: ESPN actually is the publisher of the article, since they own Grantland.
Submitted to https://r.espn.go.com/members/contact/tvindex

Dear sir or Madam,

I am writing because I saw an advertisement for you on an article that I think you may not wish to be associated with. You may be aware of article on Grantland in which the journalist, Caleb Hannan, harasses his subject to the point of suicide. He is clearly aware of the harm he knows he causing her and uses it as part of his narrative arc. I’m sure that you do not wish to have your name associated with this kind of horrific bullying. Yet there is a link to you at the top of the page, implying endorsement. I would like to strongly encourage you to end your relationship with Grantland. I would also like to enquire if you have any policies which would apply if one of your own journalists submitted a similar story.

Thank you for your time,

Charles Hutchins

I’m not linking to the article. A ‘journalist’ decided to investigate the inventor of a new kind of putter. He speaks to her former employer who had used the threat of outing to get her to drop a discrimination lawsuit and then decided to out her anyway. He then called up everyone she knew to tell them personally that she was trans and ask them for comment. Having completely socially isolated her, he then calls her on the phone and tells her he’s going to out her in the press. She wrote him an email saying he was engaging in hate crime, which he included in the story. She took her own life, and he made sure to mention that the person who told him about this hated her and quote that person’s misgendering. He straight up caused somebody to die and then reported his role in it without a hint of remorse.
I’ve read some hateful shit. I’ve read bullying. I’ve read things that are intended to make the victim feel bad. But this, this kind of bloodless dispassionate, emotionally blank destruction of another human being is something I’ve never seen before. This is worse than anything I’ve ever encountered before. He kills someone and really is not at all bothered by it.
There’s a link to ESPN at the top of the socippath’s article and so I wrote to them. Their other adverts are automatically served by outbrain and are the same meaningless shit you see at the bottom of every article on earth. I clicked through on something that’s gone viral and the website is making money off of this. Because they have no qualms about bullying someone to death. Because it’s just a trans woman, so who cares.

Writing a bio

Charles Celeste Hutchins was born in 1976 and things went downhill from there. However, despite this, in 1989, he won his school’s raffle. He has not won a prize since.

He is one of the lucky few men to have completed an undergraduate degree at Mills College, where he studied composition with Maggi Payne. He graduated in 1998 and then, predictably, got caught up in the dot com boom. When that ended, he followed the path of most young people unsure of what to do next and went to grad school. He studied at Wesleyan University, working most closely on computer music with Ron Kuivila, and also studied improvisation with Anthony Braxton. They recorded an album together in 2005 which is still awaiting release.

After his 2005 graduation, he went to France to study at CCMIX, a musical center founded by Xenakis, who was no longer teaching there, having died some years previous. After that, he went to the Royal Conservatory of the Netherlands and took the year long Sonology course.

In 2007, he moved to England and began studying at the University of Birmingham, which awarded him a PhD in 2012. There, he studied with Scott Wilson. Also while a student, he was the instigator of BiLE, the Birmingham Laptop Ensemble – his colleagues claim he pressured them to sign up while drunk, but he has no memory of this. He also co-organised the Network Music Festival in 2012 and 2013, which is due to return in in 2014. It was while at Birmingham that he took the first name Charles, in honor of his recently deceased uncle Chuck Forge, and, of course, Charles Amirkhanian.

Since graduating, Charles has again followed a predictable path, working as an adjunct professor. He has taught at Anglia Ruskin University in Cambridge and now is teaching at the University of Kent.

During the nomadic wanderings of his last decade, he has played gigs in Europe and the US and also gotten some radio play in both places. He is relatively well-known to the users of SuperCollider both for his compositions and his contributions to the language’s libraries, although not so well known that people always get his name right when he comes up in discussion.

His current projects involve work with BiLE in making pieces that musically engage digital surveillance and writing computer-generated graphic notation in a piece for the Vocal Constructivists, a London-based choir.

Live blogging flossie: sound body gender

I’m reduced to taking notes with my phone, as my laptop battery life is not great.
i didn’t catch the name of the speaker, but she has a very impressive cv…
gender art started in ancient greece w sappho. She referenced her body and emotion. Women artists get recognised more in ethnography than art history.
Now a slide of Ada Lovelace’s program. Lovelace was the beginning of software. Sylvia Plath also represents a lack of support of women creatives. …..
Conceptual art and performance art of the 70s allowed a feminist critique. Women’s identity is opposed to a masculine tradition. New technologies allows new images and new thoughts. Ideals of masculinity and feminity are dominant in online communities. Most editors of wikipedia are men.
She is now talking aboout the anarchistic and artistic value of floss, talking about the ideology of collaborative working.
Now she is talking about the Art+FOSS book, which is really good. Fcforum.net is a useful resource for artists, tech and activism. Artists were prosecuted under anti-terrorism laws and fcforum helped them.
Free Culture has festivals like piksel in norway. They support a lot of hacker artists.
Composer Shelly Knotts has a controversial post about women in live coding on her website. Norah Lorway is also a live coder, who works collectively. She is part of the OpenLab underground London collective.
Many performers are activists. She seems to be assrting that live code is a path to utopian, collective futures.
Gender art paratice can queer technologies.