final project - mus 174a
3-5 minute piece
- use at least 3 different microphones
- majority of tracks should be miked
- use close and distant miking
- record into protools at 24bit/44.1k
- make at least two overdubs
- at least 5 edits, and at least 10 tracks
- do a basic rough mix
no effects with the following exceptions:
- electric/electronic instrument can use their own effects/pedals
acoustic effects can be used (hallway reverb, etc.)
individual microphone tracks can have their own effects
you must present your piece in finals week, playing the piece, explaining what you did and answering questions.
you should hand in a cd-r or dvd-r with the project (session file and soundfiles), and a separate stereo interleaved soundfile with the final edit/rough mix.
you should also hand in documentation as follows:
- microphone/instrument diagram
- track listing with mic, settings
take listing with time, description, notes
groups (swapping allowed)
1 Abbaszadeh Carroll Deuchars
2 Kim Ma Okerblom Shon
3 Wohl Allen Castro Doshier
4 LeVieux Miller Park
5 Sridharan Yuan Askounis Cox
6 Estrada Levine Obrien Riney
7 Tan Zwicker Bray
8 Katawazi Oczkowski Rohm Vargas
you may do your own project on your own or with those in your group. however, you should be available to help or play for your group...
music 176 - music programming with vst plugins
- create a vst plugin project by copying the sdk example
rename the class, project name and output file to your own
give your own company name and product name in appropriate methods
have at least 2 parameters, that don’t display from 0 to 1
- rename the parameters and labels
the process function can do anything - gain, phase, mute, add noise, clip, etc. just do it under parameter control
- implement a function from musicdsp.org
- hand in a week from tuesday 10-27 (zipped project directories and files)
// i was wrong in class about this code being broken... it should calculate RMS values just fine
// psuedo-code for amplitude detection - envelope follower
EF::EF()
{
envelopePosition = 0;
envelopeArraySize = 16384;
envelopeArrayTotal = 0.0;
envelopeArray = new float[envelopeArraySize];
squareRoot = new float [65536];
// since we scale the index from 0.0-1.0 to 0-65536
// the answer needs to be scaled from 0.0-256.0 to 0.0-1.0
for(i = 0; i < 65536; i++)
squareRoot[i] = pow((float)i, 0.5f) / 256.0f;
peak = 0.0f
}
EF::~EF()
{
if(envelopeArray)
delete [] envelopeArray;
if(squareRoot)
delete [] squareRoot;
}
float EF::GetMean(float sample)
{
if(envelopePosition >= envelopeArraySize)
envelopePosition = 0;
if(envelopePosition < 0)
envelopePosition = 0;
// FIRST: rectify the input
if(sample < 0.0)
sample = -sample;
// SECOND: add to array to calculate mean
envelopeArrayTotal = envelopeArrayTotal - envelopeArray[envelopePosition] + sample;
envelopeArray[envelopePosition] = sample;
envelopePosition++;
// THIRD: mean is total/arraysize
return(envelopeArrayTotal/(float)envelopeArraySize);
}
float EF::GetRMS(float sample)
{
long meansquare;
float square;
if(envelopePosition >= compRMSArraySize)
envelopePosition = 0;
if(envelopePosition < 0)
envelopePosition = 0;
// FIRST: square the new sample
// square range 0.0 to 1.0
square = sample * sample;
// SECOND: add to array to calculate mean
envelopeArrayTotal = envelopeArrayTotal - envelopeArray[envelopePosition] + square;
envelopeArray[envelopePosition] = square;
envelopePosition++;
// THIRD: meansquare needs to be scaled up to 65535 for root table lookup
meansquare = (long)(envelopeArrayTotal * 65536.0);
if(meansquare > 65535)
meansquare = 65535;
// FOURTH: return the root of the mean of squares
return(squareRoot[meansquare]);
}
// this works by continually taken a wieghted average of peak and sample
// eventually the peak gets up (or down) to the sample
float EF::GetPeakAttackRelase(float attack, float release, float sample)
{
float attackMultiplier;
float releaseMultiplier;
if(sample < 0.0)
sample = -sample;
attackMultiplier = pow(0.01, 1.0/( attack * samplerate));
releaseMultiplier = pow(0.01, 1.0/( release * samplerate));
if(sample > peak)
peak = attackMultiplier * (peak - sample) + sample;
else
peak = releaseMultiplier * (peak - sample) + sample;
return(peak);
}
// psuedo code table lookup oscillator
// phasePerSecond = CPS
// phasePerSample = CPS/sampleRate
// tableEntryPerSample (CPS * tableSize)/sampleRate
Osc::Osc(long tableSize)
{
twoPi = 8.0 * atan(1.0);
// create and fill wavetable
wavetable = new float[tableSize];
for(i = 0; i < tableSize; i++)
*(wavetable + i) = sin(twoPi * (float)i/(float)tableSize);
phase = 0.0;
phaseIncrement = 0.0;
sinZ = 0.0;
cosZ = 1.0;
}
Osc::~Osc()
{
if(wavetable)
delete {} wavetable;
}
// with frequency as a block of floats, a new frequency for each sample
// method one - truncate phase
void Osc::TruncatePhase(float *frequency, float *output, long samplesPerBlock)
{
long sample;
long longPhase;
for(sample = 0; sample
phaseIncrement = *(frequency + sample) * tablesize/sampleRate;
longPhase = phase;
*(output+sample) = *(wavetable+longPhase);
phase += phaseIncrement;
while(phase >= tableSize)
phase = phase - tableSize;
while(phase < 0.0)
phase = phase + tableSize;
}
}
// method two - interpolate phase
void Osc::InterpolatePhase(float *frequency, float *output, long samplesPerBlock)
{
long sample;
for(sample = 0; sample
phaseIncrement = *(frequency + sample) * tablesize/sampleRate;
*(output+sample) = QuadInterpolate();
phase = phase + phaseIncrement;
while(phase >= tableSize)
phase = phase - tableSize;
while(phase < 0.0)
phase = phase + tableSize;
}
}
float Osc::QuadInterpolate()
{
long truncphase = (long) phase;
float fr = phase - (float)truncphase;
float inm1 = wavetable[(truncphase - 1) % tablesize];
float in = wavetable[(truncphase + 0) % tablesize];
float inp1 = wavetable[(truncphase + 1) % tablesize];
float inp2 = wavetable[(truncphase + 2) % tablesize];
return in + 0.5 * fr * (inp1 - inm1 +
fr * (4.0 * inp1 + 2.0 * inm1 - 5.0 * in - inp2 +
fr * (3.0 * (in - inp1) - inm1 + inp2)));
}
// method three - resonant network
void Osc::ResonantFilterSine(float *frequency, float *output, long samplesPerBlock)
{
long sample;
float freqAngle;
for(sample = 0; sample
freqAngle = twoPi * *(frequency + sample)/sampleRate
*(output+sample) = sinZ = sinZ + freqAngle * cosZ;
cosZ = cosZ - freqAngle * sinZ;
}
}
0) 268
set mixing board clock
bring up scene which connects to protools (scene 6)
switch main monitor to view video
check channels 41-42, bus sends, bus levels, surround montor select bus, surround monitor level
1) protools
start protools
set clock in setup dialog
create new session (rate, depth, type)
check i/o
create tracks
check input and output assigns
check monitoring with noise
check phantom power (turn off)
2) set up talkback
plug cue out to tie line
tie line to amplifier
3) microphone
setup stand
attach mic clip
attach mic
attach mic cable
4) microphone preamp
check protools remote connection
check phantom power
set gain
5) protools
arm for record or monitor inputs
check microphones
test talkback
check levels
reset gain
record
Due 10/27/09 (Tuesday)
room 268
Choose 3 channels on the first layer that correspond to letters in your first name (A=1, B=2, etc).
Turn those channels on, turn all other channels off
Bring the faders up to -6dB on those channels
Assign all 3 channels to stereo buss and direct out
Pan the 3 channels to different left right locations
Turn on the stereo fader and bring up the level to 0dB
Save this setup to scene memory with your last name in the name
Lock the scene
Email the scene number to William and I when you are done.
room 269
Create a ProTools Session at 44.1k, 24 bits, WAV files
Create 3 or 4 mono or stereo tracks
Name the tracks
Place a comment in one the tracks
Save it in your named Folder as Assignment 1 on the Class disk