When I
first finished processing Final.mid, I thought it was well put together and
transitioned beautifully. The cellos in
the beginning section, actually dueled with one another and the ending section
was breathtaking. Unfortunately it was also two minutes and thirty-nine seconds
too long. From this realization, came my private joke that the final song was a
five and a half minute song trapped in three minutes.
The production of Final.mid was inspired by
the ‘
The stochastic
algorithm was the ‘backbone’ of the final song. The stochastic method uses the
idea of cumulative probabilities to pick notes and generate a phrase, with
certain notes having a higher probability of being selected than others. I used
a moderately modified version of Jesse Hiestand’s stochastic() function. The
generated notes served as the main phrases of my song. The three phrases
generated from my modified stocast() function were the overall reoccurring
melody and several of the other parts derived from those phrases. The
reoccurring melody was hard coded to be added to the generated phrase after
leaving the for-loop. I further modified the stochastic function for this
program to customize each phrase that I generated. I changed the function to
allow for a number of notes to be generated to be passed into the function.
This allowed me to make several different phrases of any desired length,
without worrying about changing the function or making numerous for-loops for
more variety of phrases that I would be able to generate. I also wanted an
additional note or two and added more to the array and cumulative array. This
function really lends itself to lengthier compositions than the original
function did. This is largely because the phrase that is added at the end of
the stochastic process. The refrain that is attached, is much more meaningful
after a lengthy melody, than a few notes, as was noticeable in my short
composition.
The use
of pentatonic scales adds an interesting feel to the piece, which is largely in
C scale, with some accidentals, unless it was processed in the dreary filter,
in which case the actual key is questionable. Only one of the stochastically
generated phrases was converted to a pentatonic scale, however, that phrase was
passed to other phrases and changed the overall sound of the song when played
in parallel with another phrase. To implement this, I utilized the cmajpent()
function that Heidi Johnson wrote to take the
scattered accidentals and otherwise bland notation of phrase one, and
create a new feel.
The dreary filter was created from my over
thinking the glissando function. I started out with setting up a random table
with the options of choosing from one of four major scales and a C chromatic
scale. After working through this, I wanted to add more to the function so that
if I passed a phrase in, it would be changed in multiple ways and return
something that would give the song more texture. I was still looking for an
answer to my desire of the ‘
What truly makes dreary different from all of the other
filters was the use of echomaster() to give a mellow and dreary sound to what
would otherwise be an uninteresting phrase. The echomaster() function creates
echos from the front of the phrase to the back of the phrase, sandwiching in
the phrase itself and lengthening the entire returned phrase. The function
takes in a phrase, a number of forward echoes, the timing of the echo and the
volume reduction factor. The last three values the function takes are for the
backward echoes.Originally, I was going to use the spread() function, which
included echomaster(), when I was planning the song. After a few successful
trial runs with spread, the function became cumbersome to use in conjunction
with what I already had planned for the piece. I spent some time trying to fix
it, to no avail. In the end I settle for using echomaster, which gave a more
edgy and raw feel to the phrases. After appending the echomastered phrase to
the already processed phrase, the pitch is dropped by twelve notes to further
give the result a certain flavor that would be similar to the music form of
trip hop.
The
dreary filter was also used on the drum section of the song. The original drums
selected were unsuitable for the genre of music that they were used for. The open
bongo, high tom and rim shot that were in that sample were more appropriate if
I wanted to create a
The
gliss() function was created to make a
glissando that I felt was a complete necessity for leading into other sections
of the song. Gliss() was used to also generate notes that could be fed into the
dreary filter or edited in another way. This function would provide an
immediate sign that the song was going from one section to another and also not
detract from what was already generated. This function was the idea that led to
the creation of the dreary filter. The function randomly chooses a scale that
has a duration of twenty-four clicks and returns that scale lengthened in
legato() and reversed. I added the legato to give a fuller sound and the
reverse was personal preference. The glissando allowed me to not have to
stochastically generate all of the phrases before they were further processed
by giving me another option.
The
drumbkgnd() function was a was based on a
drum function, drumbeat() by Judy Franklin. This particular function’s purpose
was to take sampled drumbeats and copy them into a new phrase in a for-loop.
This new phrase was then processed in the dreary filter and reversed. This
changed the drumbeats that were initially sampled drastically. The bongo and
rimshot that were sampled for the song were completely unrecognizable once
filtered. The purpose behind filtering them in such a way is to take the
sampled beat that wasn’t appropriate in its current form and to make it work in
the given situation. Another reason behind making this function filter and
reverse the drum phrase was that there was difficulty getting the correct
instruments sampled and at the right intervals for the particular genre that I
was emulating. In the end, filtering the already sampled piece was a better
solution than endlessly sampling in hopes of getting the right mix.
To get
the drumbeats that I needed initially, I used a series of keykit tools,
techno1, techno2 and techno3. These tools consisted of a range of drums that
are found in channel ten and different options to generate samples for the
user. I sampled some of the more
In my
main functions there were a few minor functions that were called on that
created some of my most exciting dynamics for the final song. The reverse()
function enabled me to have two similar phrases playing together without
sounding like they are two instruments that playing almost the exact same
thing. The reverse() with a nested crescendo() was another preferred function
combination. This was particularly useful for when I wanted a reversed phrase
and reversed crescendo, or decrescendo. The reversed crescendo was often used
on one phrase that was to be played in parallel to a phrase that was going to
crescendo. The crossing over of each phrase is used in the end section of the
final song.
The
shuffle() and swapnote() functions were used largely with the dreary filter and
the processing of phrase seven. Without shuffle() and swapnote() the results of
the dreary filter would have been less than pleasing and would have probably
stalled the development of the final song. The use of shuffle() and swapnote()
can be distinctly heard in all of the
phrases processed by the dreary filter and produced a sound like a low trilling
or oscillations from one note to the next.
For
most of the phrases, I selected a string instrument such that the piece would
emulate the ‘mellow string section’ of trip hop. The plans called for a single
dreary filtered violin to introduce the piece followed by two dueling cello,
one stochastically generated, matching the C Major pentatonic scale and then
dreary filtered whilst the other is a combination of the first cello without
being filtered and a stochastically generated phrase, played in parallel. The
filtered cello is difficult to distinguish for part of the section; however the
struggle between the two instruments becomes very clear before a glissando
sweeps the listener into the middle section.
The middle section is thankfully less complicated and only two
stochastically generated phrases, but one as a viola and the other as a string
ensemble. The power struggle between the cellos is truly noticeable by
comparison to the two other sections of the song. This struggle is only
resolved in the middle and end sections by the viola, violin and synthetic
strings.
Additional
dynamics were created through dropping the pitch of phrases to given a deeper
and thusly darker sound to the phrases. I modified the legato() function found
in basic.k so that I would have a more dramatic legato and created a staccato()
function. I used the legato largely to create a richer tone that was a little
sustained and thusly more realistic to someone actually playing an instrument
rather than a machine generating the notes. The changes in dynamics make the
piece sound as if someone actually composed the piece as well. Slight flaws in
tone and pauses would have helped the piece more and increase the reality of
the final song and make it more believable, which would make the song better.
The
final song was an experimental foray into a specific sub genre of electronic
music. Part of the song could use some fine turning and perhaps some more
processing. The drum section has come a great distance, but it was still not
mellow enough to fit very comfortably into the genre of trip hop. The overall
song was a success though. The dreary filter and the new phrase generator in
conjunction with the stochastic method and the pentatonic scale algorithms made
for a fairly close emulation of a trip hop song.