Friday, November 24, 2006

CC - Minor Project

Hi all,

Unfortunately I have not got my CC piece as an MP4 with me here in South Africa! It's still on my hard disk in good old Adelaide. So are my program note and analysis! However, the required files were in my CC submission on the server... I hope they find their way to assessment.

Best regards, Henry.

AA - Major Project - Process

Here is a summary of the process I following in creating the soundtrack for the animated short film, "A Perfect Hit".

Collaboration. The project began with a series of meetings with the animator, Zhou. At the first meeting I was presented with a storyboard (included in deliverables), which showed portraits of the characters and the main storyline. The next few meetings established the fact that a script would be needed for the comedy sketch, which I then wrote and approved with Zhou. By this time some of the fighting animation was being completed so I got to experiment with trialling some sound effects to fit the action.

Dialogue. As the most important element for communicating the story, the dialogue was the next task. With the script approved, I persuaded a friend and actor, Brendan Blue, to provide the voices for the animation. The dialogue was recorded in the Dead Room. As Brendan was doing the voices for the Student and Master characters, we recorded a separate series of takes for each role. During the takes, I would play the part of the other character for Brendan over the headphones, to make it easier for him to get into character. The best takes were then cut and combined into one "super take" for each character. Some of the dialogue was also cut or changed, and some ad-lib speech that had not been scripted was funny enough to be worthy of inclusion.

Sound Effects. At the same time as the script was being written, I was also sourcing the many sound effects I would need for all the martial arts body impacts, and for other key moments in the story. I was still waiting on animation to put these effects to however. By the time the dialogue was recorded, there was enough fighting animation ready to do a first run at selecting and placing effects. I firstly selected and placed the punches, kicks, whooshes (of dodging a punch) and falls, which have to be frame-accurate. I then found and inserted non-diegetic effects like the Chinese gong sound and some other sounds heard in the "sound montage" section where the screen fades to black (indicating the passing of time).

Atmoses. The story begins in the middle of the morning, outdoors, by the Shaolin Temple (which is in the Chinese countryside). As such, I selected an outdoor countryside atmosphere with plenty of birdsong. When the scene changes to the temple interior, I modified this atmosphere by cutting the high frequencies with EQ and adding some "room tone" to give the impression of being indoors. Later on, a period of time passes and the last few scenes take place in the early evening, when it has become much colder. For these scenes I used the sound of a chill wind, along with some night atmosphere (with the sound of crickets, and so on).

Music. I was lucky to source some excellent Chinese music from our instructor Ashley, as it is a distinctive style that would have been difficult to recreate. The "traditional Chinese" theme was placed during the fight scenes. Another quiet and tense piece with some great percussion sounds was placed underneath the "temple interior" scene, where we are first introduced to the Master. All that remained was some music for the opening scene, which sets the scene by panning around the exterior of a model of the Shaolin Monastery. I played the flute melody using one of the software instruments in the GarageBand program.

Foley. My friend Brendan stoically agreed to come back in and record the foley for the characters he had voiced. To record the sound of footsteps on the monastery courtyard, I used a cardboard tray filled with kitty litter placed next to a Neumann U-87 microphone (as the shotgun mike was not available). The Neumann was set to the highly directional figure-8 polar pattern to pick up Brendan's footsteps and scrapes. With the video patched into the EMU space, Brendan could watch the image on the screen while performing the character's movements. We then relocated to the Dead Room to record a "rustle track" to simulate the clothing rustles of the characters.

Mixing. After the animation was delivered to me by Zhou, I made a "director's cut" for sound using the program iMovie. I rearranged the order of some scenes according to the script, and extended or reduced the length of some scenes in order to fit the recorded dialogue. The final visuals could then be loaded into Pro Tools for the mix. The first job was to add some reverb to the vocals in the outdoor setting. I then pitch shifted the Master's voice down and the Student's voice up to make the characters sound different (as they were originally the same person's voice). The dialogue was then fairly extensively re-cut to fit the new scene order and timings. Items such as the SFX were also fine-tuned, and the final position of all the material was set in place.

I then recorded volume automation for the tracks. The tracks were then bussed into separate 5.1 faders for each of the five stems (Dialogue, Foley, FX, Atmoses and Music). Tracks such as the dialogue, foley and diegetic SFX were panned front-centre, while the music and atmoses were panned to the centre of the 5.1 mix. After a final level and automation check, the final mix was bounced to 6 mono audio files. Another "summed mono" bounce was then performed for the TV and Web mixes.


Watch this space for the web friendly movie file! I'm going to have to cut a bit off the end, as BlogUpload only allows 8MB files and mine is 8.2MB =\

AA - Sound Script

The objective of this exercise was to write a 30-60s "sound script" for a film. The criteria required footsteps on at least two different surfaces, an indoors and outdoors scene, and the dialogue "What the hell's going on?!" Following is my plot synopsis, and a link to an Excel worksheet containing the scene by scene analysis.

Synopsis

Two children are having a competition to see who can ride a bike down a steep hill and skid to a stop closest to the river bank. They are creeping out of the house to do this stunt in the early morning, hence not a word is spoken. The children walk out of their house and down the gravel driveway (first footstep type). The challenger wheels his bike up the hill (tick-tick of bicycle gears) while the current champion walks down the muddy side of the river bank and marks his best skid position.

The challenger reaches the top of the hill and stops, taking a deep breath. He goes for it. The whirring of bicycle gears ticking at high speed is heard. He pedals hard, trying to get up as much speed as possible. At the last minute, he brakes – but the back brakes come loose (small noise) and the front brakes lock the front wheel. The challenger turns head over heels and literally flies 10m out into the centre of the river, landing with a huge splash!

The splash disturbs many waterfowl sitting on the river and there is a huge ruckus. It is enough to wake the champion’s parents, who are sleeping in the house quite close to the river. Cuts to interior of the bedroom. A man’s angry voice booms into the early morning air: “What the hell’s going on?!”

Tuesday, September 12, 2006

CC - Week 1 - Clocks and Scheduling

The Description

I created a program using scheduling with three sound sources. All three use a "string" SynthDef. Sound sources 1 and 2 are gradually detuned and panned left and right; the one is detuned down and panned right, the other is detuned up and panned left. The parameter changes occur at different rates due to the different clocks being used. The 3rd sound source is panned dead centre but has its amplitude modulated by values that are scheduled by a similar system.

The Code

(
a = Array.series(100,0,0.01);
b = a.mirror1;
c = Array.series(100,-1,0.01);
d = c.mirror1;


//Strings 1: Centre

~r1 = Routine({
var count = 0,
ampNow,
str = Synth("cfstring2");

while( { true }, {
ampNow = b.wrapAt(count) / 2;
//postln("Centre amp is " ++ ampNow);
str.set(\amp, ampNow);
ampNow.yield;

count = count + 1;
});
});



//Strings 2: Panning left to centre

~r2 = Routine({

var
initFreq = 360,
count = 0,
str = Synth("cfstring2");

str.set(\amp, 0.2);

while( { true }, {
//postln("The count is " ++ count);
str.set(\pan, d.wrapAt(count));
str.set(\freq, initFreq + (50 * d.wrapAt(count)));

count = count + 1;
d.wrapAt(count).yield;
});

});

//Strings 3: Panning Centre to Right
~r3 = Routine({
var
initFreq = 360,
count = 0,
str = Synth("cfstring2");

str.set(\amp, 0.2);

while( { true }, {
//postln("The count is " ++ count);
str.set(\pan, b.wrapAt(count));
str.set(\freq, initFreq + (50 * b.wrapAt(count)));

count = count + 1;
b.wrapAt(count).yield;
});

})
)

SCHEDULING
(
~r1.reset;
SystemClock.sched(0.0, {
~r1.next;
0.13
});


~r2.reset;
SystemClock.sched(0.0, {
//~r1.next;
//~r2.next;
~r2.next;
0.11
});

~r3.reset;
SystemClock.sched(0.0, {
~r3.next;
0.17
});
)


The Outcome
Very smooth.

Wednesday, September 06, 2006

CC - Week 5 - MIDI Input

A simple program that filters NoteOn events and selectively executes a function (in this case, to print the note port, channel, note number and velocity).

MIDIClient.init //Initialise MIDI services, defaults to one device only
//other commands
MIDIClient.restart
MIDIClient.stop
MIDIClient.prList //print a list of system IDs

MIDIIn.connect; //start listening to MIDI events on 1 port MIDI interface
//These can't be dynamically allocated - use the MIDIResponder class
MIDIIn.noteOn = { |port, chan, note, vel| [port, chan, note, vel].postln };
MIDIIn.noteOn = nil; // stop responding


//attach a dynamic handler to NoteOn events
n = NoteOnResponder({
arg src, chan, num, vel;
[src, chan, num, vel].postln
});

n.remove; //remove the handler

//handler that only responds to even value notes of velocity greater than 50
//use this technique to filter keyboard events, achieve velocity splits etc.
(
o = NoteOnResponder({ |src, chan, num, vel| [src, chan, num, vel].postln },
nil,
nil,
(0, 2..126), // could also be { |num| num.even } or _.even
{ |vel| vel > 50 }
);
)
o.remove

//stop listening to MIDI events
MIDIIn.disconnect;

//Quick start for 2 or more ports:
(
var inPorts = 12;
var outPorts = 2;
MIDIClient.init(inPorts,outPorts); // explicitly initialise the client
inPorts.do({ arg i;
MIDIIn.connect(i, MIDIClient.sources.at(i));
});
)

Wednesday, August 30, 2006

Week 2 - AA - Analysis of 2 scenes from a feature film

Scene: A shot or series of shots in a movie constituting a unit of continuous related action.

The film I chose to analyse for this exercise is the sci-fi movie Serenity, which is one of my favourites. Serenity is based on the TV series Firefly and has a large ensemble cast of 9 main characters; the opening sequence does a very good job of introducing both them and most of the background story in the space of only a few minutes. I chose this scene as the one "with dialogue". The second scene is the climax of the film; a dual fight scene. The first struggle is between the captain and the principal antagonist, the "Operative". The second fight takes place between the rest of the crew and the bloodthirsty "Reavers".

First Scene: With Dialogue
The Serenity graphic slowly fades in, and we see the graphic is actually painted on the side of the spaceship Serenity. The camera zooms out so that we can see the whole of the ship, apparently sitting motionless. It is quite a beautiful shot, totally C.G. No SFX can be heard as we are in the void of space. The music is gentle and quiet; "serene", I suppose.

The music begins to pick up in intensity, and as it builds to a climax, we see a warm glow surround the underside of the ship and a bang and rush of air as Serenity's retro rockets engage. We realise the ship is actually moving very fast and has just embarked on re-entry into a planet's atmosphere.

Dialogue: None (yet)
Music: Serenity theme (a lively "frontier" song)
SFX: Roaring sound of rockets, rushing air
Foley: None
Atmoses: None

The camera pans round the ship until we can see a figure standing in the cockpit. It is Mal, the principal protagonist. We then cut to inside the ship with Mal. There is an almighty bang and the sound of tearing metal as a small but important part of the ship breaks off.

Dialogue: Mal ("What was that? Was that the primary buffer panel? That sounded like the primary buffer panel!")
Music: Fades out
SFX: Bang of panel breaking off, followed by rattling of items in cockpit. Emergency klaxon sounding in the background. Also faint creaking sounds of stressed metal.
Foley: Mal's footsteps around the cockpit.
Atmoses: Faint roar of the craft's engines in the background. ("Aircraft ambience").

Mal (the captain) and the pilot converse. Mal addresses the crew through the intercom, so his voice is temporarily effected. He then moves out of the cockpit to find out what is happening.

Dialogue: Mal addressing the other crew members as he does the rounds.
Music: None
SFX: More creaking of stressed metal, shuddering sounds. Periodic loud bangs which are synchronised with shaking of the camera. The sounds of breaking glass and items falling to the floor. Sparks as Mal enters the engine room.
Foley: Metallic ringing of Mal's footsteps on the steel catwalks.
Atmoses: Same aircraft-type ambience

The sound effects above repeat in a similar fashion until Serenity eventually makes a safe landing.



Second Scene: Minimal Dialogue

Mal must get to the transmitter to send out a message to the known galaxy about the wrongdoings of the Alliance government. The Operative of the Alliance intends to stop him.

As Mal approaches the transmitter (which is on a floating platform in the middle of the space, and quite hard to reach), the Operative shoots him in the back with a stun pistol. Mal retaliates by outdrawing the Operative in a shootout. He then struggles to reach the transmitter while continuing to fight the Operative, who is hot on his heels.

While this is going on, the rest of the crew are fighting the Reavers amidst a flurry of gunshots, grunts, moans and roars.

Mal and the Operative
Dialogue: Limited dialogue (mostly grunts of combat and groans of pain); pithy jibes
Music: None
SFX: The full gamut of punches, kicks, cracks and keening, clanging sound of the Operative's sword
Foley: Thuds as the combatants fall to the floor or are thrown against railings, etc. Running, frantic footsteps.
Atmoses: There is an ominous, cyclic hum in the background; a reminder that the combatants are never far from the danger of falling into the power generator underneath the platform.

The Crew and the Reavers
Dialogue: Minimal dialogue from the main characters ("Go that way! Fall back!" etc.) accompanied by a thick texture of hair-raising roars and snarls from the Reavers.
Music: In contrast with the other fight scene, there is loud, tension building music present in these scenes. The only time the music goes quiet in these scenes is when Simon is shot. Then, everything goes silent as the camera focuses on his slow motion fall to ground.
SFX: A very thick sound texture of gunfire and the aforementioned snarls. In the pivotal moment where Simon is shot, the gunfire is still audible but sounds like it is coming from far away.
Foley: Crashes and bumps as the crew take cover from the onslaught.
Atmoses: More of an effect in general; it is a warehouse-type space so there is a ringing reverb on most of the FX.

Tuesday, August 29, 2006

Week 1 - AA - Sans Analysis

The following is a scene by scene "Sans Analysis" of Vertov's Man With The Movie Camera.

0'00" Man walking through crowded street with movie camera on shoulder
Diegetic Sound / On Screen: Crowd ambience of a busy market street. Possibly footsteps of man carrying the camera (quite soft).
Diegetic Sound / Off Screen: Various sellers vocally advertising their wares.
Non-diegetic Sound: Light and up-tempo folk music.

0'04" Women talking / gossiping
Diegetic Sound / On Screen: The conversation of the two women (over their washing). Softer crowd noises to allow their dialogue to be heard.

0'09" Arrival of the Tram
Diegetic Sound / On Screen: Sounds of tram bells and noise of tram carriage on the rails. Bicycle bells near the end of scene.

0'16" Hanging the washing
Diegetic Sound / On Screen: Dialogue as the women on the left greets the other lady.

0'18" Man with eggs
Diegetic Sound / On Screen: Soft conversation of the two people in the background.
Diegetic Sound / Off Screen: Children's laughter.

0'20" Above the street
Diegetic Sound / On Screen: Crowd noises as from a distance. Sound of the wind in the trees. Distant car horns.
Non-diegetic Sound: Folk song draws to a close.

0'27" The shutters open
Diegetic Sound / On Screen: Creak as shutters open.
Diegetic Sound / Off Screen: Soft sound of teeth being brushed.

0'29" Teethbrush
Diegetic Sound / On Screen: Very loud and 'close' sound of teeth being brushed (no much reverb or ambience).

0'31" The Fence
Diegetic Sound / On Screen: Clang of metal as the grating is swung into position. Uncrowded street ambience.

0'35" Post the letter
Diegetic Sound / Off Screen: Footsteps as the lady walks towards frame.
Diegetic Sound / On Screen: Lady's footsteps in frame. Rustle of paper as the letter is posted.

0'40" Blind man
Diegetic Sound / On Screen: Sound of shutters being winched up as the man opens his store. Footsteps of the lady walking past.

0'46" Rotation
Diegetic Sound / On Screen: The same crowded street ambience. Squeak SFX as the man rotates the sign post.

0'48" The Voyage
Diegetic Sound / On Screen: Sound of shutters rolling up (much closer than in "Blind man").
Non-diegetic Sound: Slow, majestic music begins.

0'52" Slow Motion
Non-diegetic Sound: Slow, majestic music complements the period of slow motion. No other sound effects.

1'06" Wide fountain
Diegetic Sound / On Screen: Distant bubbling of the fountain over the music.

1'08" Close up fountain
Diegetic Sound / On Screen: The fountain bubbles close, loudly.

1'13" Woman in the window x3
Diegetic Sound / On Screen: Shutters opening (soft). Repeated in a slightly different way each time the shutters are opened in this series of dissolves.
Non-diegetic Sound: Slow, majestic music becomes sad and nostalgic. This woman seems sad, for some reason.

1'20" Sewing
Diegetic Sound / On Screen: Whirring of the sewing machine.
Diegetic Sound / Off Screen: Sound of woman singing.

1'24" More shutters
Diegetic Sound / On Screen: Shutter sound effect.

-End of excerpt-

Saturday, August 26, 2006

Week 4: CC2 - SC - GUI

Picture of the interface for controlling the granular synthesis patch:




In the "sonic outcome", I adjusted each of the sliders in turn and then at random to achieve some interesting sounds.

Friday, August 25, 2006

CC2 - SC - Granular Synthesis

This entry is a simple 30 second example of the TGrains UGen in SuperCollider 3. A SynthDef built around TGrains runs on the SC server and its parameters are controlled by my main program. This program reads from a 2-dimensional array at a random interval between 2 and 3 seconds, and sends the composition parameters to the Synth to change its sound.

The sample I chose to granulate is also a synthesised loop with a good frequency distribution. I especially like the end of the example, where a grain of large duration is repeated softly which I thought sounded quite eerie.



The SynthDef:
(
SynthDef("hprGranulator", {
arg
buffer,
centerPos,
trigRate = 1,
dur = 1,
speed = 1,
pan = 0,
amp = 0.5,
out = 0;

var
theTGrains;

theTGrains = TGrains.ar(
2,
Impulse.ar(trigRate),
buffer,
speed,
centerPos,
dur,
pan,
amp,
2
);

Out.ar(out, theTGrains)

}).send(s);
)


The main program, with SystemClock and 2D array data generation:
(

var
data = #[
[\amp, \dur, \centerPos, \trigRate, \pan],
[0.1, 4.0, 1, 5, -1],
[0.2, 0.2, 2, 10, 1],
[0.4, 0.2, 2.5, 10, 0],
[0.5, 0.2, 3, 15, 0.7],
[0.5, 0.5, 3.5, 15, 0.5],
[0.5, 0.5, 3.7, 15, 0.3],
[0.7, 0.5, 2, 15, 0.0],
[0.5, 0.1, 2, 10, -1],
[0.2, 0.2, 2, 10, 0],
[0.5, 0.2, 2, 2, 0],
[0.1, 0.8, 2, 1, -1],
[0, 0.8, 2, 1, -1]
],

count = 0,
numParams = 5,
gran;


//Create Synth

gran = Synth(
"hprGranulator",
[
\buffer, ~bufnum,
\centerPos, 4,
//\trigRate, 2,
//\dur, 4,
//\amp, 0.1
],
s
);

//Create Clock

SystemClock.sched(0.0, {
//arg time;
//time.postln;

count = count + 1;
count.postln;

//data[0][count].postln;

for(0, numParams - 1, {
arg paramID;
[ data[0][paramID], data[count][paramID] ].postln;

gran.set( data[0][paramID], data[count][paramID] );

});

if(count < (data.size - 1),
{ rrand(2.0, 3.5); //cause task to be rescheduled in 3 seconds' time
},
{ nil; //returning nil cancels rescheduling
//gran.free;
}
)

}); //end SystemClock.sched


) //end code



The sound file: