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 ‘Bristol sound’ of Portishead, a band from the Bristol area of England. Portishead is a group readily identifiable as trip hop in genre, although they lean toward a jazz fusion with electronic music. The characteristic mellow string sections, sedate drum beats, a slightly melancholy feel to the music and prominent chanteuse is a common to Portishead’s version of trip hop. This type of electronic music can and often does, include some elements and disregard others, making trip hop difficult to define. This flexibility made attempting to generate a song in this genre very agreeable to me.  

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 ‘Bristol’ feel, which my homework four had lacked. I explored the basic1.k and basic2.k files to find functions that would transform the usually upbeat songs into something darker and worthy of inclusion of an example of trip hop music.  I utilized the closest() function from basic to take my phrase and a randomly selected scale and match the notes of the phrase to the notes of the scale that were the closest to it. This new phrase was then appended to the end of the passed in phrase. The problem of using closest() in the for loop that I initialized was that then I had multiples of each note the was matched to the phrase, creating another sort of scale, but with each note being repeated nine times. This was remedied by shuffling the entire phrase, which took the notes at each end of the array and moving inward, would move them next to each other, effectively shuffling the phrase, like a deck of cards. This was an improvement, but still an imperfect solution. The shuffling would create a problem after the entire original phrase was shuffled. The sound was like the same two keys were being played, going up a scale. I added the use of swapnote() to switch every two notes with each other, which relieved the problem a bit, however it is still noticeable in some phrases, such as phrase six and seven.

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 Caribbean or Latin themed song, rather than a subdued and gloomy sound. The accompanying string sections were not suited for that sort of song. Instead of re-sampling the drum sections, I tested the Dreary Filter out on the drum section and was wildly pleased with my results.  Instead of something decidedly tropical, I had a slightly unpredictable and moody sounding percussion section. The percussion movement through the song was independent of the other phrases, but still appropriate in the song.

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 Caribbean sounding drums, as well as some collections that had a characteristically electronic music feel to them. After selecting the instruments that would be sampled, the number of steps and the step size in notes the user can sample or ‘snarf’ a section of music and write it to a file to be used later. After writing to a file you can insert the drum sample into a program to generate a drumbeat that you already have control over rather than randomly generating a drumbeat. When I developed the dreary filter, I carefully went over some of my samples and chose the one that was most pleasing after being filtered.

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.