.forum - week twelve.
Today's forum class was the last ever for me, which is really.
.sources.
Whittington, Stephen 23.10.08, "Stuff," Forum of EMU, Adelaide University.
iieiwrmeieweeiimeemmwreiweremweireeemeimwieewwrwweereireeiimeewmiwwwemwiewimeeeremeiewmemweewieewerwemwiimiewmeiwireiiwrrewmwewree |
30.10.08
0 comments copywrite 3:55 pm
28.10.08
Human Interface Devices (HID) in SuperCollider
.cc - week ten.
I've had some fun using the HIDDeviceService class in SuperCollider, which allows you to use USB devices like joysticks, mice and any other devices you have lying around your studio to input data into SuperCollider. Originally I programmed a patch to run with a 5-button Microsoft mouse, but the patch presented here is designed for a Apple/Logitech single button mouse.
// HUMAN INTERFACE DEVICE (HID)
// Initialise HID
(
// Searches all HID interface pages
HIDDeviceService.buildDeviceList(
usagePage: nil,
usage: nil
);
// Establish HID List
// Output Device Data
HIDDeviceService.devices.do({
// Args
arg dev, devIdx;
// Print out device information
["DEVICE:", devIdx, dev.manufacturer, dev.product, dev.usage, dev.vendorID, dev.productID, dev.locID].postln;
});
// Establish HID and element list
// Output Device Data
HIDDeviceService.devices.do({
// Args
arg dev, devIdx;
// Print out device information
["DEVICE:", devIdx, dev, dev.manufacturer, dev.product, dev.vendorID, dev.productID, dev.locID].postln;
// Loop and output elements
dev.elements.do({
// Args
arg ele;
// Output element information
["ELEMENT:", ele.type, ele.usage, ele.cookie, ele.min, ele.max].postln;
});
"------------------------------------------------".postln;
});
// Queue device for usage
// Queue Device
HIDDeviceService.devices.at(1).queueDevice; //apple mouse
// Establish HID List and query device for usage based upon Vendor and Product ID
// Device Information
~vendorID = 1452; //apple's vendor ID
~productID = 775; //apple's product ID
// Output Device Data
HIDDeviceService.devices.do({
// Args
arg dev, devIdx;
// Print out device information
if((dev.vendorID == ~vendorID) && (dev.productID == ~productID), {
HIDDeviceService.devices.at(devIdx).queueDevice;
["CONNECTED:", devIdx, dev.manufacturer, dev.product, dev.vendorID, dev.productID, dev.locID].postln;
});
});
// Attach action to a device
// Action for Device
HIDDeviceService.action_({
// Args
arg productID, vendorID, locID, cookie, val;
// Output
[productID, vendorID, locID, cookie, val].postln;
});
)
// Start / stop event loop (for device polling)
HIDDeviceService.runEventLoop; // 20 milliseconds
HIDDeviceService.stopEventLoop;
// BUFFer
(
var path = ((PathName.new(Document.current.path)).pathOnly) ++"sample/";
v = Buffer.alloc(s,2048,2);
b = Buffer.read(
server: s,
path: path++"macstartup.wav");
// SynthDef
//may need to run this code twice, although once should be fine.
SynthDef("skyBurn", { arg out=0, bufnum=0, trigRate = 0.5, wipeBins = 0.95;
var in, chain;
in = BrownNoise.ar(0.8); //try PinkNoise, WhiteNoise, BrownNoise, GrayNoise
chain = FFT(bufnum, in);
chain = PV_RandComb(chain, wipeBins, Impulse.kr(trigRate));
Out.ar(out, IFFT(chain).dup);
}).load(s);
)
// Create Instance
~randComb = Synth("skyBurn", [\out, 0, \bufnum, v]);
// Setup Action for skyBurn
(
var w, b, line, titleBox; //GUI
~paraOne;
~paraTwo;
~sliderOne;
~sliderTwo;
// Action for Device
HIDDeviceService.action_({
// Args
arg productID, vendorID, locID, cookie, val;
// Switch Parameter
~paraOne = switch (cookie)
{3} { rrand(95, 100) * 0.01 } //get a new value
{4} { rrand(0.0, 2.0) - 1.0 * 0.01 + ~paraOne } //mouse movement
{5} { rrand(0.0, 2.0) - 1.0 * 0.01 + ~paraOne }; //mouse movement
if((cookie == 3) && (val == 0), {
~paraTwo = rrand(1, 20) * 0.01; //{rrand(1, 100) * 0.01};
{~sliderTwo.valueAction_(~paraTwo)}.defer;
});
// Print feedback
["Button", cookie, "Value", val, "Para One", ~paraOne, "Para Two", ~paraTwo].postln; //feedback
// Input control information into GUI
{~sliderOne.valueAction_(~paraOne)}.defer;
{~sliderTwo.valueAction_(~paraTwo)}.defer;
});
//GUI
w = GUI.window.new( "Fonzeey", Rect( 128, 600, 408, 316 ));
w.view.decorator = FlowLayout( w.view.bounds );
w.view.background = Color( 0.0,0.714,0.96 );
//title
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, 100, 410, 65)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Phase Vocoder - Random Bin Comb");
titleBox.font_(Font("Arial Black", 25));
//heading one
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, 100, 410, 65)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Morph between Noise and Sample");
titleBox.font_(Font("Arial Black", 15));
//slider one
~sliderOne = SCSlider(w, Rect(20, 80, 400, 40));
~sliderOne.focusColor_(Color.white);
~sliderOne.action_({ // Input control information into Synth
~randComb.set(\wipeBins, [0.01, 0.99].asSpec.map(~sliderOne.value));
});
w.front;
//heading two
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, 100, 410, 65)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Trigger Rate for Random Ordering:");
titleBox.font_(Font("Arial Black", 15));
//slider two
~sliderTwo = SCSlider(w, Rect(20, 80, 400, 40));
~sliderTwo.focusColor_(Color.white);
~sliderTwo.action_({ // Input control information into Synth
~randComb.set(\trigRate, [0.1, 10.1].asSpec.map(~sliderTwo.value).round(0.1));
});
w.front;
)
HID.rtf (12 kB) | exampleHID.mp3 (1.2 mB)
.sources.
Haines, Christian 23.10.08, "Human Interface Device," Lecture of EMU, Adelaide University.
0 comments copywrite 12:30 pm
27.10.08
≤≥
.forum - week eleven.
During Music Technology forum class we viewed a DVD titled OHS, which features many multi-media works and interviews written by / featuring some of the key figures in the short history of electronic music. Namely, the film features work of Steve Reich, Max Matthews, Robert Moog, Robert Moog, John Chowning and many others. Steve Reich's work was one of favourites - it presented the future of human sociality in a world with digital technology has connected with humanity entirely, to make our interaction wholly automated and fast.
.sources.
Whittington, Stephen 23.10.08, "Music Technology Forum" Lecture of EMU, Adelaide University.
0 comments copywrite 9:17 am
22.10.08
.cc - week nine.
Still a work in progress. Currently this looks like it should, just all GUI elements are not working properly. I've had trouble doing this, as the BBCut Class Library is fairly difficult, or atleast unlike what I am used to when developing a GUI. While it probably looks a rushed effort, significant amounts of time went into this.
(
// Simplified Sound File Select Dialogue (Returns Handle to Sound File)
~sampleSelect = {
// Vars
var bufID;
// Read sound file into buffer and grab buffer id
bufID = Buffer.loadDialog(s);
// Return Buffer ID
bufID;
};
)
(
// Create Sample Handle
~sampleHandle = ~sampleSelect.value;
)
(
// Determine Sample Path
~samplePath = ~sampleHandle.path;
)
//use the GUI to find onsets for a loaded sample- use post to output the data array
Segmentation.new
(
// paste results here:
~data = [ [ 0, 0.44247916666667, 0.046009756624699, 1 ], [ 21239, 0.386375, 0.0027814882341772, 1 ], [ 39785, 0.8573125, 0.058457486331463, 2 ], [ 97502, 0.38320833333333, 0.015279575251043, 2 ], [ 115896, 0.78910416666667, 0.014642789959908, 2 ], [ 153773, 0.39583333333333, 0.044767320156097, 3 ], [ 172773, 0.40035416666667, 0.0050696325488389, 1 ], [ 191990, 0.84677083333333, 0.075923785567284, 1 ], [ 249257, 0.37785416666667, 0.018813425675035, 2 ], [ 267394, 0.37808333333333, 0.016685917973518, 2 ] ];
)
(
var w, clock, finalCut, finalCut2;
var buttonHi = 24, buttonStack = 20, textStack = 50, sliderStack = 80;
// GUI.window returns the window class for the current kit
// ; hence GUI.window.new instantiates a new window
w = GUI.window.new( "Cutter", Rect(128, 644, 520, 660));
// w.view.decorator = FlowLayout( w.view.bounds );
w.view.background = Color( 0.0,0.714,0.96 );
clock = ExternalClock(TempoClock(2.1));
clock.play;
5.do({ arg i; //, divLow = 1, divHigh = 2;
var b, line, titleBox;
var sf, cutSynth, cutProc, cutSlider;
b = SCButton(w, Rect(20, buttonStack, 75, buttonHi ))
.states_([
[ "Drum " ++ i ++ " Off", Color.black, Color.rand ],
[ "Drum " ++ i ++ " On", Color.white, Color.red ]
])
.action_({ arg butt;
//BUTTON ACTION
(
Routine.run({
sf = BBCutBuffer(~samplePath, 8, ~data);
s.sync; //this forces a wait for the Buffer to load
cutSynth = CutBuf3(sf); /*(
sf, //buffer
1.3, //random cut playback probab.
1.0, //ratio IOI
false, //attack env
false //release env
); */
cutProc = BBCutProc11.new; /*(
2, //sub division
4.0, //4.0, //barlength
2, //phrase bars 2
2, //numrepeats 2
1.0, //stutterchance
2, //stutterspeed divLow.round(1.0)
1.0 //stutterarea
);*/
finalCut = BBCut2(
cutSynth, // cut groups
cutProc // algorithm generating cuts
);
finalCut2 = finalCut.play;
});
)
//END BUTTON ACTION
});
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, textStack, 410, buttonHi)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Cut Length:");
titleBox.font_(Font("Arial Black", 15));
cutSlider = SCRangeSlider(w, Rect(20, sliderStack, 312, buttonHi));
cutSlider.lo_(0.2);
cutSlider.range_(0.4);
cutSlider.action_({ |slider|
cutProc.set(\divLow, (slider.lo * 8), \divHigh, (slider.hi * 8));
});
buttonStack = buttonStack + 100; //UI look
textStack = textStack + 100;
sliderStack = sliderStack + 100;
});
//END DO LOOP
//taken from here
{
arg divLow = 0.0;
var sliderPan, panL = 0.2; //v = SinOsc.ar(finalCut); //bad
var l, x, y, p, q, a, j, c, d;
p = LFSaw.ar(200);
q = LFSaw.ar(301);
sliderPan = SCSlider(w, Rect(400, 100, 40, 400));
sliderPan.focusColor_(Color.white);
sliderPan.action_({
//~randComb.set(\panL, [-1.0, 1.0].asSpec.map(sliderPan.value));
panL = ([-1.0, 1.0].asSpec.map(sliderPan.value).round(0.001));
});
sliderPan.value_(0.95);
//arg panVal = panL;
#l, x, y = BiPanB2.ar(
p,
q,
0.0,//panVal
0.1);
#a, j, c, d = DecodeB2.ar(4, l, x, y);
[a, j, d, c] // reorder to my speaker arrangement: Lf Rf Lr Rr
}.play;
// B-format encode
//from here
// B-format decode to quad
w.front;
)
//END
.sources.
Haines, Christian 16.10.08, "Spatialisation," Lecture of EMU, Adelaide University.
0 comments copywrite 4:29 pm
21.10.08
Nosferatu Re-Score Project Presentations
.aa - week eleven.
Today, students presented their re-score Nosferatu 'cuts' to the class.
My personal favourite re-scoring was presented was by John Delany. John composed an partially abstract electro-acoustic piece, which in my opinion worked beautifully to bring the film into a more fluid, enjoyable, emotional and (let's face it) electronic context. Dave Dowling's re-score was indeed quite typically Westernised - that is - conventional, however this is only a testament his fantastic re-score and hard work. I have approached film scoring with this method before and found although it might involve using 'clichés' it does not make the work any easier (much to my surprise). Again, an excellent project by Dave. Moving along, Ben Probert's piano re-score was brilliant I must admit - I am a sucker for Minimalism, and I give him full marks for his inventive use piano recording technique. Luke Digance's re-score was the most understated - not at all a busy score - though no other student used this approach it was actually quite effective. His decision to keep the score quiet made the 'scary' scenes all the more impacting.
.sources.
Harrald, Luke 21.10.08 "Class Presentations," Lecture of EMU, Adelaide University.
0 comments copywrite 8:32 pm
Nosferatu Re-Score Update
.aa - week ten.
My re-scoring project for the 1922 film "Nosferatu," is being developed into something that I did not originally have in mind - it's moving from a typical "sound-design" industrial soundtrack, to something more of a trash-goth '80s film clip. In the freedom that this project has given me - to create what ever I want (more or less), I would like to take the opportunity to create something not atypically Westernized in the soundtrack. As such, I want to firstly keep with the European culture of the film, but at the same time, bring it to a new demographic.
Nosferatu the Vampire VS. Adelaide's Night Train Theatre & Restaurant Logo
Ultimately I would like the re-score to feel a bit like a ride on the Ghost Train - 'cheesey' and fake but at the same time still very scary! This project has provided some challenges, working with a video of this length and requiring this many different tracks has caused my computer to get over encumbered at times.
.sources.
Harrald, Luke 14.10.08, “Sound Design for Film.” Lecture of EMU, Adelaide University.
0 comments copywrite 8:00 pm
15.10.08
pvFFT!
.cc - week eight.
Josh's and MCLD's extensions for SuperCollider did not integrate into my or the "most recent" build of SuperCollider for me. Basically, when I execute SuperCollider the post window prints errors. What I have created is a program that uses PV_RandComb, and I am hoping that once I have this issue resolved it will be a fairly simple process to add something like PV_OddBin or PV_EvenBin. These allow the author use selected bins from audio samples, and potentially to combine/morph them.
(
//create buffer
var path = ((PathName.new(Document.current.path)).pathOnly) ++"sample/";
v = Buffer.alloc(s,2048,2);
b = Buffer.read(
server: s,
path: path++"macstartup.wav");
)
(
//'enter' this code a couple of times to install it
SynthDef("Fonzeey", { arg out=0, bufnum=0, trigRate = 0.5, wipeBins = 0.95;
var in, chain;
in = BrownNoise.ar(0.8); //try PinkNoise, WhiteNoise, BrownNoise, GrayNoise
chain = FFT(bufnum, in);
chain = PV_RandComb(chain, wipeBins, Impulse.kr(trigRate));
Out.ar(out, IFFT(chain).dup);
}).load(s);
//make an instance
~randComb = Synth("Fonzeey", [\out, 0, \bufnum, v]);
)
(
//GUI
var w, b, line, titleBox;
w = GUI.window.new( "Fonzeey", Rect( 128, 600, 408, 316 ));
w.view.decorator = FlowLayout( w.view.bounds );
w.view.background = Color( 0.0,0.714,0.96 );
//title
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, 100, 410, 65)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Phase Vocoder - Random Bin Comb");
titleBox.font_(Font("Arial Black", 25));
//heading one
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, 100, 410, 65)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Morph between Noise and Sample");
titleBox.font_(Font("Arial Black", 15));
//slider one
y = SCSlider(w, Rect(20, 80, 400, 40));
y.focusColor_(Color.white);
y.action_({
~randComb.set(\wipeBins, [0.01, 0.90].asSpec.map(y.value));
});
y.value_(0.95);
w.front;
//heading two
titleBox = SCStaticText(
parent: w,
bounds: Rect(20, 100, 410, 65)
);
titleBox.stringColor_(Color.white);
titleBox.background_(Color(0.0,0.714,0.96));
titleBox.string_("Trigger Rate for Random Ordering:");
titleBox.font_(Font("Arial Black", 15));
//slider two
a = SCSlider(w, Rect(20, 80, 400, 40));
a.focusColor_(Color.white);
a.action_({
~randComb.set(\trigRate, [0.1, 20.1].asSpec.map(a.value).round(0.1));
});
w.front;
)
week8example.mp3 (1.4 mB) | jakesFFT2.zip (460 kB)
.sources.
Haines, Christian 09.10.08, "FFT (2)." Lecture of EMU, Adelaide University.
0 comments copywrite 12:06 am
13.10.08
Return of the Jedi
.aa - week nine.
This post is a review of an Kathryn Kalinak's article John Williams and "The Empire" Strike Back.
Kathryn quickly makes the point that "in composing the sound to go with the future, Williams doesn't look to any of the "avant-garde" composers like Varese or Cage..." (Kalinak) in discussing his landmark usage of late-Romantic orchestration. However one point I feel she neglects to raise is that the overarching story of Star Wars is about the colonialist power, the Imperials, warring against the liberal thinking rebels. Williams choice to use a style from probably the most nationalistic period of history seems fairly easily justified in my opinion. Warfare based cinematography and Romantically composed scores go together like beer and sunshine.
I found this excerpt that presents Williams approach to the project interesting:
"Steiner never reads scripts ("I run a mile everytime I see one"), Williams avoids them also, preferring to "react to the people and places and events ... of the film itself ... Williams taps cultural associations to create … persona." (Kalinak).
Williams' method to compose for the 'people and places and events' of the film itself, and to avoid the script is intriguing - while many composers would like to be involved in the project as much as possible (ie: read the script), I can understand why this would be the case. With so many specialists and figure-heads, like actors, costume and set designers having an impact on the film, it would be important to compose with an idea of how they combine toward a final product. I suppose at the end of the day the 'people and places and events' are the only things that will make the film - any of the concept designs and scripts are just plans of how to execute these.
.sources.
Harrald, Luke. “John Williams Film Music.” Lecture of EMU Space, Adelaide University.
Kalinak, Kathryn. “John Williams and ‘The Empire’ Strike Back.” Online article, accessed 9th of October, 2008.
0 comments copywrite 1:04 pm
12.10.08
And now...
.forum - week nine.
Today several third-year students presented work to the music technology school of the EMU.
Dave Dowling spoke about his SuperCollider work "Forced Unity." This piece has spawned a further interest into algorithmic composition, resulting in a extended research project for Dave. I curiously await to see what results from this project conducted by a highly dedicated student.
Luke Digance presented a piece which uses the audio programming language SuperCollider to imitate "retro" analogue music technology. Unfortunately the piece was not complete, however, what Luke has written so far is fantastic.
Ben Probert explained his Max/MSP program "Fantastical Metal" which creates piano music itself using mathematics, probability and statistics. While the music itself becomes boring after just a few minutes, it is none-the-less the work of a bright and patient mind.
And now...
.sources.
Whittington, Stephen 9.10.2008, "Third Year Presentations." Forum of EMU, Adelaide University.
0 comments copywrite 4:56 pm