Recording of ‘Jing’ for Jing and Computer

Here I would like to share one of my pieces called ‘Jing.’

This was composed in 2010, quite challenged piece, and I worked together with the percussionist ‘Mei-Yi Lee.’

Everything was written on score (sample below) and the live electronics was done with SuperCollider.

The recording was made with two microphones, (Thanks to Kassen and Rob) and it was very challenging due to the characteristics of the instruments and how the composition itself was aimed. More specifically, the range of the dynamic goes from Zero to .. I don’t know.. easily up to 120 db. I was having a hard time when I was right beside the instrument in order not to change my facial expression because it was just really really loud.

We needed to record several times because of this, avoiding clipping, and very small editing was involved because of the soft parts.

Of course live music should be heard in live for sure. But it was a happy moment when we finally managed to finish this recording, and now I can share with many more people.

Oh, by the way, Jing is a Korean percussion that is used in many other occasions especially in rituals. It has both a very gentle warm, embracing base sound to very hard crazy complex noise. So that I wanted to show all the character, and the percussionist is shown as he/she is communicating and triggering it. So in the piece, Jing is answering, expressing, angry, and so on. It has its own personality. Electronics is used for this conversation and also help to create what moods it is going to be.

I hope anyone who reads this can enjoy the piece. Thanks!

SuperCollider 3.5 Release!

This is the post from the SuperCollider mailing list.

———————————————————————————————-

finally 3.5 is out! it contains many new features and bugfixes. the highlights
are new help system, a new cross-platform gui and a new multiprocessor-aware
audio-synthesis server. for details, please consult the `News in 3.5′ section
of the new help system, which can be found online at:
http://doc.sccode.org/Guides/News-3_5.html

source tarballs:
https://sourceforge.net/projects/supercollider/files/Source/3.5.0/SuperCollider-3.5.0-Source.tar.bz2
https://sourceforge.net/projects/supercollider/files/Source/3.5.0/SuperCollider-3.5.0-Source-linux.tar.bz2

osx installer:
http://sourceforge.net/projects/supercollider/files/Mac%20OS%20X/3.5.0/SuperCollider-3.5.0-OSX-x86.dmg

windows installer (should be used with gedit [1]):
http://sourceforge.net/projects/supercollider/files/Windows/3.5.0/SuperCollider-3.5.0-win32.exe/download

thanks a lot to everyone that has been involved in this release!

cheers, tim

SuperCollider: Long code to Short Using Array

I know that there are many SuperCollider gurus out there, so that many people could have their own ways to make their code ‘pretty.’
But I would like to share what I have done regarding ‘Removing some repetition and making it simple.’

Here is the example.

This happens quite often on GUI making. I would like to make several sliders:

/////////////////////Sliders///////////////////////////////
slider1 = EZSlider(w, 350 @ 20, "conVar", cs.conVar,
 { |slider| if (b.notNil)
 { b.set(\conVar, slider.value) } });
slider2 = EZSlider(w, 350 @ 20, "LPF", buf1cs.lpf,
 { |slider| if (~buff1.notNil)
 { ~buff1.set(\freq, slider.value) } });
slider3 = EZSlider(w, 350 @ 20, "amp1", buf1cs.amp,
 { |slider| if (~buff1.notNil)
 { ~buff1.set(\amp, slider.value) } });
slider4 = EZSlider(w, 350 @ 20, "amp2", buf2cs.amp,
 { |slider| if (~buff2.notNil)
 { ~buff2.set(\amp, slider.value) } });
slider5 = EZSlider(w, 350 @ 20, "amp3", buf3cs.amp,
 { |slider| if (~buff3.notNil)
 { ~buff3.set(\amp, slider.value) } });
slider6 = EZSlider(w, 350 @ 20, "amp4", buf4cs.amp,
 { |slider| if (~buff4.notNil)
 { ~buff4.set(\amp, slider.value) } });

Here, there are many parameters that are repeated, and many are different.

So that I bound the same things together, and make arrays for the differences.

/////////////////////Sliders///////////////////////////////
slider = Array.new(6);
sliderItem=["conVar","LPF","amp1","amp2","amp3","amp4"];
sliderCs = [cs.conVar,buf1cs.lpf,buf1cs.amp,buf2cs.amp,buf3cs.amp,buf4cs.amp];
synthVar = [b, ~buff1, ~buff1, ~buff2, ~buff3, ~buff4];
sliderAction = [\conVar,\freq,\amp,\amp,\amp,\amp];
sliderItem.do({
 arg item, i;
 slider.add('item'++i);
 slider[i]=EZSlider(w, 350 @ 20, item, sliderCs[i],
 { |slid|
 if (synthVar[i].notNil)
 { synthVar[i].set(sliderAction[i], slid.value) }
 });
});

One might argue that the number of lines are not so different. But thinking of creating 20 different sliders, then definitely, the line of the later example will stays the same. This will save quite amount of codes, at the same time it is more convenient when one needs to fix and add a part of the code.

More specific explanations here:

I make an array for 6 sliders without giving names to each slider, but just creating a space for each.

slider = Array.new(6);

Here are the different paramaters like the name of arguments and control specs, and synthname for each slider.

sliderItem=["conVar","LPF","amp1","amp2","amp3","amp4"];
sliderCs = [cs.conVar,buf1cs.lpf,buf1cs.amp,buf2cs.amp,buf3cs.amp,buf4cs.amp];
synthVar = [b, ~buff1, ~buff1, ~buff2, ~buff3, ~buff4];
sliderAction = [\conVar,\freq,\amp,\amp,\amp,\amp];

Here I use ‘do’ . The argument ‘item’ will be ‘slideritem’ in order, and ‘i’ will simply count the number of the items.

sliderItem.do({
 arg item, i;
 slider.add('item'++i);
 slider[i]=EZSlider(w, 350 @ 20, item, sliderCs[i],
 { |slid|
 if (synthVar[i].notNil)
 { synthVar[i].set(sliderAction[i], slid.value) }
 });
});

I have given names to the slider by doing

slider.add('item'++i);

The reason is to connect with midi controller :
For instance,

ccNum = [2, 3, 4, 5, 6, 8];//this is the number of midi fader on midi controllder
CCResponder({ |port, chan, num, val|
 ccNum.do({
 arg item, i;
 if (num ==item.value)
 { {slider[i].value = slider[i].controlSpec.map(val/127.0)}.defer;
 slider[i].doAction}; // defer makes it move
 });
});