https://ccrma.stanford.edu/mediawiki/api.php?action=feedcontributions&user=Jrowell&feedformat=atomCCRMA Wiki - User contributions [en]2024-03-28T16:11:58ZUser contributionsMediaWiki 1.24.1https://ccrma.stanford.edu/mediawiki/index.php?title=Jrowell_220D&diff=16371Jrowell 220D2014-03-04T06:16:24Z<p>Jrowell: </p>
<hr />
<div>Collaborative Drum/Synth Instrument<br />
<br />
----<br />
<br />
The project is a collaborative two person instrument which integrates inputs from a keyboard and an electronic drum set to create a single pitched but highly rhythmic output.<br />
<br />
The basis for the sound of this project is the observation that the basis of much of modern electronic music (e.g. Bangarang by Skrillex) is a string of highly rhythmically varied, filtered, and processed single notes rather than a polyphonic texture. As a result, I often find live performance uninteresting as it is not significantly varied from the recorded version. One of the reasons for this is that the sequencing and controlling of the music is being controlled only by a single person at once and a person can only interact and control so much at once. To expand on the live performance aspects of this music I would like to see new control interfaces built which allow for greater collaborative playing; This project is one such attempt. <br />
<br />
Hardware-<br />
The keys are being controlled by an Akai Keyboard MIDI controller; the drum input is being controlled by a Yamaha DTX400K electronic drum set.<br />
<br />
<br />
Software-<br />
Pd is being used to integrate MIDI inputs and perform the synthesis. The model that ended up working most successfully was to have continuous generation of several complex tones with filters and parameters controlled by the keyboard knobs, and ADSR envelopes controlling output keyed by the drum input. The pitch of each tone is assigned by the keys pressed on the keyboard with the pitches being assigned from bottom to top to the kick, snare, hat, toms and cymbals in that order. In the event of insufficient keys being pressed to assign all pads, the higher pads are assigned the root and the fifth in varying octaves.<br />
<br />
Synthesis-<br />
The tone is an organ like tone based on the even harmonic series. Notes are produced by an ADSR filter with amplitude and sustain based on the amplitude of the pad signal and the frequency of the note. Controllable effects currently in development include an auto-wah function based on sweeping peaking filters and a basic overdrive/distortion controlled by the MIDI controller aux controls.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jrowell_220D&diff=16370Jrowell 220D2014-03-04T06:11:08Z<p>Jrowell: </p>
<hr />
<div>Collaborative Drum/Synth Instrument<br />
<br />
----<br />
<br />
The project is a collaborative two person instrument which integrates inputs from a keyboard and an electronic drum set to create a single pitched but highly rhythmic output.<br />
<br />
The basis for the sound of this project is the observation that the basis of much of modern electronic music (e.g. Bangarang by Skrillex) is a string of highly rhythmically varied, filtered, and processed single notes rather than a polyphonic texture. As a result, I often find live performance uninteresting as it is not significantly varied from the recorded version. One of the reasons for this is that the sequencing and controlling of the music is being controlled only by a single person at once and a person can only interact and control so much at once. To expand on the live performance aspects of this music I would like to see new control interfaces built which allow for greater collaborative playing; This project is one such attempt. <br />
<br />
Hardware-<br />
The keys are being controlled by an Akai Keyboard MIDI controller; the drum input is being controlled by a Yamaha DTX400K electronic drum set.<br />
<br />
<br />
Software-<br />
Pd is being used to integrate MIDI inputs and perform the synthesis. The model that ended up working most successfully was to have continuous generation of several complex tones with filters and parameters controlled by the keyboard knobs, and ADSR envelopes controlling output keyed by the drum input. The pitch of each tone is assigned by the keys pressed on the keyboard with the pitches being assigned from bottom to top to the kick, snare, hat, toms and cymbals in that order. In the event of insufficient keys being pressed to assign all pads, the higher pads are assigned the root and the fifth in varying octaves.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jrowell_220D&diff=14954Jrowell 220D2013-06-04T03:00:22Z<p>Jrowell: </p>
<hr />
<div>Collaborative Drum/Synth Instrument<br />
<br />
----<br />
This page is to document Jeff Rowell's 220D project.<br />
<br />
The project is a collaborative two person instrument which integrates inputs from a keyboard and an electronic drum set to create a single pitched but highly rhythmic output.<br />
<br />
<br />
Hardware-<br />
The keys are being controlled by an Akai Keyboard MIDI controller; the drum input is being controlled by a Yamaha DTX400K electronic drum set.<br />
<br />
<br />
Software-<br />
Pd is being used to integrate MIDI inputs and perform the synthesis. The model that ended up working most successfully was to have continuous generation of several complex tones with filters and parameters controlled by the keyboard knobs, and ADSR envelopes controlling output keyed by the drum input.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jrowell_220D&diff=14953Jrowell 220D2013-06-04T02:02:13Z<p>Jrowell: Created page with 'Collaborative Drum/Synth Instrument ---- This page is to document Jeff Rowell's 220D project. The project is a collaborative two person instrument which integrates inputs from …'</p>
<hr />
<div>Collaborative Drum/Synth Instrument<br />
<br />
----<br />
This page is to document Jeff Rowell's 220D project.<br />
<br />
The project is a collaborative two person instrument which integrates inputs from a keyboard and an electronic drum set to create a single pitched but highly rhythmic output.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14526Jeff Rowell 250B2013-03-15T23:07:03Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
An exploration of changing timbres, Keeping Time uses pickups set on pendulums to bring into relief the link between musical tempo and life tempo. <br />
<br />
A set of coupled pendulums with mounted electromagnetic pickups are set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer mounts directly behind the bridge, and is held in place with double sided padded tape. As the placement falls directly between the strap hooks, string is used to provide additional reinforcement. The amplifier driving the transducer is fed a signal by a small mp3 player; multiple overlapping sine wave frequency sweeps of varying velocity are used to excite the strings <br />
<br />
[[File:jrowell_overall.JPG|320px]]<br />
[[File:jrowell_transducer.JPG|350px]]<br />
<br />
<br />
2)Pendulums- Two linked pendulums are mounted over the strings. They are placed so that their neutral position is over the high and low strings to allow each pickup segments of time detecting various strings and detecting silence. The distance between the pendulums is approximately two and a half inches so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other. The pendulums are suspended by knife edge mounts, and project through an aluminum plate. The plate has grooves cut to allow placement of the pendulum mounts and to avoid slipping or walking as the pendulums swing.<br />
<br />
<br />
[[File:jrowell_pendulum.JPG|275px]]<br />
[[File:jrowell_pendulums.JPG|350px]]<br />
<br />
<br />
[[File:jrowell_pendulum3.jpg|350px]]<br />
[[File:jrowell_pendulum2.JPG|335px]]<br />
<br />
3)Pickups- Strat pickups are used. One is mounted above the pivot point of the pendulum and one below to catch different harmonic resonances on the strings. The distance between them is such that one will be mounted at approximately the 12th fret of the guitar and one above the 24th, placing them above the nodes of the first and second overtones of the strings.<br />
<br />
The relative volume of the tones generated by the transducer is low and a relatively high gain on the amplifier must be used. Unfortunately that means that if a spectator strums the strings or the pendulums are moved from their tracks in such a way as to contact the strings excessive volume would be produced and so a compressor/limiter pedal is used in the signal chain. <br />
<br />
<br />
4)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
5)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulum3.jpg&diff=14525File:Jrowell pendulum3.jpg2013-03-15T23:04:06Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulum2.JPG&diff=14524File:Jrowell pendulum2.JPG2013-03-15T23:03:34Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14523Jeff Rowell 250B2013-03-15T22:57:37Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
An exploration of changing timbres, Keeping Time uses pickups set on pendulums to bring into relief the link between musical tempo and life tempo. <br />
<br />
A set of coupled pendulums with mounted electromagnetic pickups are set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer mounts directly behind the bridge, and is held in place with double sided padded tape. As the placement falls directly between the strap hooks, string is used to provide additional reinforcement. The amplifier driving the transducer is fed a signal by a small mp3 player; multiple overlapping sine wave frequency sweeps of varying velocity are used to excite the strings <br />
<br />
[[File:jrowell_overall.JPG|320px]]<br />
[[File:jrowell_transducer.JPG|350px]]<br />
<br />
<br />
2)Pendulums- Two linked pendulums are mounted over the strings. They are placed so that their neutral position is over the high and low strings to allow each pickup segments of time detecting various strings and detecting silence. The distance between the pendulums is approximately two and a half inches so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other. The pendulums are suspended by knife edge mounts, and project through an aluminum plate. The plate has grooves cut to allow placement of the pendulum mounts and to avoid slipping or walking as the pendulums swing.<br />
<br />
<br />
[[File:jrowell_pendulum.JPG|275px]]<br />
[[File:jrowell_pendulums.JPG|350px]]<br />
<br />
3)Pickups- Strat pickups are used. One is mounted above the pivot point of the pendulum and one below to catch different harmonic resonances on the strings. The distance between them is such that one will be mounted at approximately the 12th fret of the guitar and one above the 24th, placing them above the nodes of the first and second overtones of the strings.<br />
<br />
The relative volume of the tones generated by the transducer is low and a relatively high gain on the amplifier must be used. Unfortunately that means that if a spectator strums the strings or the pendulums are moved from their tracks in such a way as to contact the strings excessive volume would be produced and so a compressor/limiter pedal is used in the signal chain. <br />
<br />
<br />
4)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
5)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14519Jeff Rowell 250B2013-03-13T22:01:57Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
A set of coupled pendulums with mounted electromagnetic pickups are set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer mounts directly behind the bridge, and is held in place with double sided padded tape. As the placement falls directly between the strap hooks, string is used to provide additional reinforcement. The amplifier driving the transducer is fed a signal by a small mp3 player; multiple overlapping sine wave frequency sweeps of varying velocity are used to excite the strings <br />
<br />
[[File:jrowell_overall.JPG|320px]]<br />
[[File:jrowell_transducer.JPG|350px]]<br />
<br />
<br />
2)Pendulums- Two linked pendulums are mounted over the strings. They are placed so that their neutral position is over the high and low strings to allow each pickup segments of time detecting various strings and detecting silence. The distance between the pendulums is approximately two and a half inches so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other. The pendulums are suspended by knife edge mounts, and project through an aluminum plate. The plate has grooves cut to allow placement of the pendulum mounts and to avoid slipping or walking as the pendulums swing.<br />
<br />
<br />
[[File:jrowell_pendulum.JPG|275px]]<br />
[[File:jrowell_pendulums.JPG|350px]]<br />
<br />
3)Pickups- Strat pickups are used. One is mounted above the pivot point of the pendulum and one below to catch different harmonic resonances on the strings. The distance between them is such that one will be mounted at approximately the 12th fret of the guitar and one above the 24th, placing them above the nodes of the first and second overtones of the strings.<br />
<br />
The relative volume of the tones generated by the transducer is low and a relatively high gain on the amplifier must be used. Unfortunately that means that if a spectator strums the strings or the pendulums are moved from their tracks in such a way as to contact the strings excessive volume would be produced and so a compressor/limiter pedal is used in the signal chain. <br />
<br />
<br />
4)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
5)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14518Jeff Rowell 250B2013-03-13T21:49:33Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
A set of coupled pendulums with mounted electromagnetic pickups are set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer mounts directly behind the bridge, and is held in place with double sided padded tape. As the placement falls directly between the strap hooks, string is used to provide additional reinforcement. The amplifier driving the transducer is fed a signal by a small mp3 player; multiple overlapping sine wave frequency sweeps of varying velocity are used to excite the strings <br />
<br />
[[File:jrowell_overall.JPG|320px]]<br />
[[File:jrowell_transducer.JPG|350px]]<br />
<br />
<br />
2)Pendulums- Two linked pendulums are mounted over the strings. They are placed so that their neutral position is over the high and low strings to allow each pickup segments of time detecting various strings and detecting silence. The distance between the pendulums is approximately two and a half inches so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other. The pendulums are suspended by knife edge mounts, and project through an aluminum plate. The plate has grooves cut to allow placement of the pendulum mounts and to avoid slipping or walking as the pendulums swing.<br />
<br />
<br />
[[File:jrowell_pendulum.JPG|275px]]<br />
[[File:jrowell_pendulums.JPG|350px]]<br />
<br />
<br />
3)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
4)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_transducer.JPG&diff=14517File:Jrowell transducer.JPG2013-03-13T21:32:29Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulums.JPG&diff=14516File:Jrowell pendulums.JPG2013-03-13T21:31:51Z<p>Jrowell: uploaded a new version of "File:Jrowell pendulums.JPG"</p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulums.JPG&diff=14515File:Jrowell pendulums.JPG2013-03-13T21:29:20Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14412Jeff Rowell 250B2013-03-06T23:59:58Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
The project is a set of coupled pendulums with mounted electromagnetic pickups set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer and an iPod shuffle playing the filter sweeps can be satisfactorily mounted on the back opposite the bridge and used to induce constant sound but shifting sympathetic vibration from the strings.<br />
<br />
[[File:jrowell_overall.JPG|350px]]<br />
<br />
2)Pendulums- Two pendulums must be built, spaced next to each other. They will be placed so that their neutral position is over the high and low strings; this is approximately two and a half inches, so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other.<br />
<br />
[[File:jrowell_pendulum.JPG|400px]]<br />
<br />
3)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
4)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_overall.JPG&diff=14411File:Jrowell overall.JPG2013-03-06T23:59:16Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14410Jeff Rowell 250B2013-03-06T23:53:37Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
The project is a set of coupled pendulums with mounted electromagnetic pickups set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer and an iPod shuffle playing the filter sweeps can be satisfactorily mounted on the back opposite the bridge and used to induce constant sound but shifting sympathetic vibration from the strings.<br />
<br />
2)Pendulums- Two pendulums must be built, spaced next to each other. They will be placed so that their neutral position is over the high and low strings; this is approximately two and a half inches, so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other.<br />
<br />
[[File:jrowell_pendulum.JPG|400px]]<br />
<br />
3)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
4)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14409Jeff Rowell 250B2013-03-06T23:53:22Z<p>Jrowell: /* "Keeping Time"- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
The project is a set of coupled pendulums with mounted electromagnetic pickups set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer and an iPod shuffle playing the filter sweeps can be satisfactorily mounted on the back opposite the bridge and used to induce constant sound but shifting sympathetic vibration from the strings.<br />
<br />
2)Pendulums- Two pendulums must be built, spaced next to each other. They will be placed so that their neutral position is over the high and low strings; this is approximately two and a half inches, so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other.<br />
<br />
[[File:jrowell_pendulum.JPG|500px]]<br />
<br />
3)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
4)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulum.JPG&diff=14408File:Jrowell pendulum.JPG2013-03-06T23:52:26Z<p>Jrowell: uploaded a new version of "File:Jrowell pendulum.JPG"</p>
<hr />
<div>photo of preliminary pendulum design</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulum.JPG&diff=14407File:Jrowell pendulum.JPG2013-03-06T23:50:32Z<p>Jrowell: uploaded a new version of "File:Jrowell pendulum.JPG"</p>
<hr />
<div>photo of preliminary pendulum design</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14398Jeff Rowell 250B2013-03-06T23:15:40Z<p>Jrowell: /* Keeping Time- Pendulum Guitar */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== "Keeping Time"- Pendulum Guitar ==<br />
<br />
The project is a set of coupled pendulums with mounted electromagnetic pickups set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
Elements-<br />
<br />
1)Guitar- A red Ibanez Artcore AS73 has been selected. The transducer and an iPod shuffle playing the filter sweeps can be satisfactorily mounted on the back opposite the bridge and used to induce constant sound but shifting sympathetic vibration from the strings.<br />
<br />
2)Pendulums- Two pendulums must be built, spaced next to each other. They will be placed so that their neutral position is over the high and low strings; this is approximately two and a half inches, so to allow free motion the bottom of one of the pendulum features an offset split structure that allows the pendulums to freely swing through each other.<br />
<br />
3)Mounting- The installation will be wall mounted, with the mounting supporting the pendulums and guitar, and the amplifier set below on the floor.<br />
<br />
4)Presentation- Ideally, the body of the guitar will be mounted around 4.5 feet off the ground, where the pendulums are easily touched but the headstock is uncomfortably high to reach. It should be lit with a spot from above to highlight the changing shadows as the pendulums move.<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell_pendulum.JPG&diff=14397File:Jrowell pendulum.JPG2013-03-06T23:15:06Z<p>Jrowell: photo of preliminary pendulum design</p>
<hr />
<div>photo of preliminary pendulum design</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14396Jeff Rowell 250B2013-03-06T22:45:15Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
<br />
== Keeping Time- Pendulum Guitar ==<br />
<br />
The project is a set of coupled pendulums with mounted electromagnetic pickups set in front of a semi-hollow electric guitar. The guitar has a mounted transducer attached to the soundboard on the back of the guitar and is playing several simultaneous frequency sweeps to induce vibrations in the strings, which are then detected in the pickups and played through a small amplifier on the ground below the installation.<br />
<br />
<br />
<br />
<br />
----<br />
<br />
== Preliminary Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14103Jeff Rowell 250B2013-01-30T23:23:17Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14102Jeff Rowell 250B2013-01-30T23:13:44Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Morse code through Spring Reverb<br />
<br />
Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)Clocking output through variable pendulum.<br />
<br />
A spring pendulum, such that the movement of the spring changes the center of mass of the pendulum and modulates the period. This would create a system linking the visual distortion of time and the audio distortion of time.<br />
<br />
<br />
6)Distortion of Visual projection by Reverb<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14101Jeff Rowell 250B2013-01-30T23:09:28Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)<br />
<br />
6)<br />
<br />
<br />
7) Wire over Ferrofluid<br />
<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14100Jeff Rowell 250B2013-01-30T23:09:06Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
<br />
5)<br />
<br />
6)<br />
<br />
<br />
7) Wire over Ferrofluid<br />
A wire suspended over ferrofluid, with a current applied based on the output of a set of speakers. The gain on the sound sources is then controlled by the tension on the wire, such that the increase in ferrofluid weight on the wire lowers the gain. This would create a reactive loop of (increase in fluid weight)->(lowering of gain)->(lowering of wire current)->(decrease in fluid weight on wire). Depending on the latency of the system, convergent, divergent or stable systems could be created.<br />
<br />
<br />
8) Ferrofluid reverberation tracker (most idea credit to Eoin)<br />
Ferrofluid held on a small powerful magnet forms a nice spiky mushroom shape, which is responsive to both motion and wind pressure.<br />
A few of these mounted in the ports of subwoofers would create a cool visualization of sounds run through the woofer, as well as pressure changes in the room caused by motion and door openings.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14099Jeff Rowell 250B2013-01-30T22:55:01Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
The control system would be a set of foot pedals/switches similar to organ foot pedals which would raise dampers off springs to allow them to transmit sound.<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding, explore the chaotic mistranslations that would occur given significant signal distortion.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]<br />
This is my favorite concept currently due to the combination of simple concepts and extremely complicated output.<br />
<br />
5)<br />
<br />
6)<br />
<br />
7)</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14091Jeff Rowell 250B2013-01-30T18:06:19Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
[[File:jrowell.JPG|500px]]<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding.<br />
<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
<br />
[[File:jrowell1.JPG|600px]]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14090Jeff Rowell 250B2013-01-30T18:05:39Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
[[File:jrowell3.JPG|600px]]<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
[[File:jrowell.JPG|600px]]<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding.<br />
[[File:jrowell2.JPG|600px]]<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
[[File:jrowell1.JPG|600px]]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14089Jeff Rowell 250B2013-01-30T18:05:00Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding.<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
[[File:jrowell.JPG|600px]]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14088Jeff Rowell 250B2013-01-30T18:04:21Z<p>Jrowell: /* Project Ideas */</p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding.<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.<br />
[[File:jrowell.JPG]]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell3.JPG&diff=14087File:Jrowell3.JPG2013-01-30T18:03:23Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell2.JPG&diff=14086File:Jrowell2.JPG2013-01-30T18:03:06Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell1.JPG&diff=14085File:Jrowell1.JPG2013-01-30T18:02:46Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=File:Jrowell.JPG&diff=14084File:Jrowell.JPG2013-01-30T18:02:25Z<p>Jrowell: </p>
<hr />
<div></div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14068Jeff Rowell 250B2013-01-28T23:14:24Z<p>Jrowell: </p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding.<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=Jeff_Rowell_250B&diff=14067Jeff Rowell 250B2013-01-28T23:14:16Z<p>Jrowell: </p>
<hr />
<div>Jeffrey Rowell-Reverberant Art<br />
<br />
----<br />
<br />
== Project Ideas ==<br />
1)Selectable Spring Reverb<br />
Two soundboards with high tension springs between them with a controllable damper on each spring. One sound is input on one side and picked up on the other with variable amounts of reverb.<br />
<br />
2)Variable Reverb Room<br />
A room with a microphone and moveable walls/ceiling which would analyze the pitch of voices within it and attempt to change the shape of the room to highlight harmonics in the voice.<br />
<br />
3)Sending Morse Code through reverb and then attempting decoding.<br />
<br />
<br />
4)Coupled Pendulum Pickups<br />
A pair of guitar pickups are mounted on a set of coupled pendulums, and then set in front of two strings vibrating at close but different frequencies. The output of the pickups is then fed into a loudspeaker mounted close behind the system for feedback.</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13183User:Jrowell/220C2012-06-12T23:21:00Z<p>Jrowell: </p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It was written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all necessary files, 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass.ck Example framework which moniters bass]<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (i,i,i,iv; i,VI,III,VII; i,VII,VII,i; etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_samp1.ck Example Bass, using Pitch Shifting]<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_moog.ck Example Bass, using Tempo Shifting]<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13180User:Jrowell/220C2012-06-12T23:08:22Z<p>Jrowell: /* Chord Progression */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It was written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass.ck Example framework which moniters bass]<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (i,i,i,iv; i,VI,III,VII; i,VII,VII,i; etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_samp1.ck Example Bass, using Pitch Shifting]<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_moog.ck Example Bass, using Tempo Shifting]<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13177User:Jrowell/220C2012-06-12T23:03:39Z<p>Jrowell: /* Bass */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It was written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass.ck Example framework which moniters bass]<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_samp1.ck Example Bass, using Pitch Shifting]<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_moog.ck Example Bass, using Tempo Shifting]<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13176User:Jrowell/220C2012-06-12T23:03:11Z<p>Jrowell: /* Bass */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It was written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
[https://ccrma.stanford.edu/~jrowell/220c/bass.ck Example framework which moniters bass]<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_samp1.ck Example Bass, using Pitch Shifting]<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_moog.ck Example Bass, using Tempo Shifting]<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13175User:Jrowell/220C2012-06-12T23:01:49Z<p>Jrowell: </p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It was written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_samp1.ck Example Bass, using Pitch Shifting]<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_moog.ck Example Bass, using Tempo Shifting]<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13172User:Jrowell/220C2012-06-12T22:59:22Z<p>Jrowell: /* Methods of Generation */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_samp1.ck Example Bass, using Pitch Shifting]<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/bass/bass_moog.ck Example Bass, using Tempo Shifting]<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13170User:Jrowell/220C2012-06-12T22:57:13Z<p>Jrowell: /* Generative */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord1.ck Example Chord, using unit generators]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13169User:Jrowell/220C2012-06-12T22:56:28Z<p>Jrowell: /* Generative */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
[https://ccrma.stanford.edu/~jrowell/220c/pitch/pads/chord2.ck Chuck file to determine phase]<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13168User:Jrowell/220C2012-06-12T22:53:32Z<p>Jrowell: </p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
[https://ccrma.stanford.edu/~jrowell/220c/phase.ck Chuck file to determine phase]<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13166User:Jrowell/220C2012-06-12T21:05:57Z<p>Jrowell: </p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip Zip of all playable files from 6/12/2012]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing, 6/12/2012]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13165User:Jrowell/220C2012-06-12T21:04:42Z<p>Jrowell: /* Log Updates */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Results ==<br />
<br />
I am fairly satisfied with the results at this point. The program plays with generally good sound quality, and it fulfills the stated goal of a constantly shifting rhythmic soundscape. That said, there are several modifications I will continue to work on-<br />
<br />
=== Grouping Sounds ===<br />
As I continue to add new instruments and rhythms into the database, I need to implement a method that groups them by texture to avoid conflicting sounds. It would function similarly to the density variable currently implemented, and track a scale from natural sounds to highly artificial and compressed sounds.<br />
<br />
=== Shifting Tempo ===<br />
It has been suggested, and I agree, that having the ability to shift the tempo while playing would add interest. There are a number of ways to implement this, but unfortunately the architecture of the current control structures doesn't allow it. I hope to have tempo shifting be a feature by mid-July, but doing so now would not allow any sound demos to be played.<br />
<br />
=== Adding more Instruments ===<br />
The best way to allow the program to play longer without becoming stale is to add new instruments; this will always be a continuing project. <br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13164User:Jrowell/220C2012-06-12T20:57:30Z<p>Jrowell: /* = Playback Tempo Shifted */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ====<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowellhttps://ccrma.stanford.edu/mediawiki/index.php?title=User:Jrowell/220C&diff=13163User:Jrowell/220C2012-06-12T20:57:11Z<p>Jrowell: /* Instrumental Piece */</p>
<hr />
<div>'''Charles''' is an attempt to make a non-repeating randomly driven music/soundscape generator. It is being written by Jeff Rowell for the Spring 2012 iteration of Music 220C, and hopefully will be used in performance as part of the Burning Man Art Car [http://www.youtube.com/watch?v=VXcbj8-ILJw Charlie the Unicorn]<br />
<br />
== Project Overview ==<br />
<br />
The goal of this project is to create a program that, when executed and then left alone, will generate unique music for the length of the run time (ideal run time for installation will be 3-5 hours). <br />
<br />
One of the problems with creating a generative and non-repeating music program is how to keep all the instruments on the same page sonically. My solution for this is to have a hierarchical program with several public classes to control the instruments. The base level holds the global variables (what level of intensity the music is at, what is the tempo). The next level consists of two programs- Drums, and Pitch. "Drums" holds the control variables for the drums- which sounds are playing, what the density of sound is, and then adds or removes shreds accordingly; Pitch holds the variable to control the chord progression and tonal center.<br />
<br />
The other main problem with having the program being generative is avoiding repeated sounds without relying on an overly large sample bank. To get around this problem, there are three kind of pitch instruments- generative ChucK based instruments, sample based instruments relying on variable playback, and sample based instruments based on pitch shifting.<br />
<br />
== ''Non-Melodic Functions'' ==<br />
Drums.ck moniters the "mood" of the piece at the beginning of every phrase. If the upcoming phrase calls for a higher density of drums, it uses Machine.add to call the appropriate drums code. Correspondingly, it uses Machine.remove to remove the proper code. The timbre of each drum is only selected at the sporking of the drum codes, and so will change only when an instrument encounters a section in which it is removed and added again later; merely changing phrases will not change the timbre of an instrument.<br />
<br />
===Layering===<br />
====Steady Drums====<br />
Steady drums (mainly the kick and snare) are easy to implement; When the shred for a steady drum is sporked it randomly selects a timbre and then plays that sound in a steady loop until removed by Drums.<br />
====Random Drums====<br />
Random drums (toms, aux percussion) are implemented by using a basic Markov code to select the time between hits based upon the previous time between hits, using a timber randomly selected at the sporking of the shred.<br />
====Patterned Drums====<br />
Patterned drums (hi-hat, aux percussion) have a number of pre-set rhythmic patterns held in an array. The patterns are then selected using Markov chains; once one is played through the next is selected.<br />
== ''Melodic Functions'' ==<br />
The harmonic tracking functions much the same way as the rhythmic tracking. The main harmonic control (pitch.ck) holds a variable to declare the main tonality of the song, and then an additional variable to hold the chord progressions the music will run through. The harmonic aspects also follow the general density rules outlined for the drums.<br />
<br />
===Harmony===<br />
There are two harmony controls- pads and pads2. Each is responsible for adding and subtracting melodic instruments, but they achieve it in different ways- the goal is that between the two methods there is a pattern created which is non-obvious and interesting to the ear.<br />
<br />
Pads is deterministic in its controls- it looks at the energy level of the piece, and adds or subtracts a pad accordingly. For example- if the energy level switches to 2, pads will remove it's pad if there is one playing or do nothing if there is no pad playing; for energy level 8 it will add a pad if there is nothing playing, but will do nothing if there is already something playing. For a few energy levels, it will replace the pad if one is playing but do nothing otherwise.<br />
<br />
Pads2 is probability based. If holds a Markov table, where the probability for each state is an integer modified by the energy level of the piece. In this model, the probability of the pad being added if there is no pad playing increases with the energy level and the probability of the pad being removed decreases as the energy level increases. This adds to the general shape of the piece, but makes it more difficult for the listener to determine exactly what will happen.<br />
<br />
===Bass===<br />
The bass is controlled by the same Markov process as pads2, but with a different weighting system.<br />
<br />
===Chord Progression===<br />
The chord progression is held in pitch.C and controlled by "progressions.ck". It holds a bank of common four measure chord progressions (for example i,i,i,iv, i,VI,III,VII, i,VII,VII,i, etc), and a probability chain for each one. The current chord progression influences the choice of the next progression to ensure a smooth and logical sounding flow.<br />
<br />
===Methods of Generation===<br />
<br />
==== Generative ====<br />
<br />
Using built in unit generators for Chuck, and some basic FM synthesis, timbres are created and played. This was the preferred method of generation in my original conception for the program, but there are some notable limitations. Due to the computationally intense nature of this method, my system quickly runs out of power if more than one or two shreds are running concurrently leading to some nasty clipping and audio drop-outs. In addition, due to the precisely periodic nature of the output, if the same instrument is chosen by both of the pad controllers, it results in severe clipping, even with the limiter and compressors I have running to control the output. Most pads are generative, while most of the bass notes rely on other methods.<br />
<br />
==== Pitch Shifted ====<br />
<br />
Using pitch shifting on single note samples allows for variation without require a huge database of samples, but has it's own limits. While it can be convincing on low notes and within small shifts, large jumps and higher sample notes start sounding quite odd quickly. However, it is quite useful for low samples which have an obvious attack that precludes changing the playback rate.<br />
<br />
==== Playback Tempo Shifted ===<br />
<br />
Using pre-recorded samples of a standard note while varying the playback rate to produce different notes is the main method I ended up using for bass generation. This method is light on the processor, while avoiding the odd artifact sounds often produced by delay line based pitch shifting. However, if the note sampled has an obvious and characteristic attack or distinct periodic variations that would be shifted, it is best to use other methods. For example, the playback of Moog Synthesizer samples works well tempo shifted, but a note played by a bassist is distracting, as the attack keeps varying in speed.<br />
<br />
== Log Updates ==<br />
<br />
=== 4/24 ===<br />
-basic architecture coded <br />
<br />
-drum sounds added <br />
<br />
-mood control variable implemented<br />
<br />
=== 4/30 ===<br />
[https://ccrma.stanford.edu/~jrowell/220c/5-1%20excerpt.wav Excerpt from running of program on 5/1]<br />
<br />
-melodic controls added<br />
<br />
-basic instrument types added<br />
<br />
=== 5/1 ===<br />
- Two types of harmony sounds have now been added, arpeggiators and block chord players. They both hold an array of all the chords that can be dictated by the harmonic progressions, and either play them back at various tempos and in various voices. As currently played, the selection of voice and tempo is dictated by a pure random number generator.<br />
The addition and subtraction of the harmonies is determined by the current energy level of the piece combined with the length of time the shred has been playing.<br />
<br />
=== 5/17 ===<br />
- The bass at this point consists only of tones which play the bass of the chord in a pulsing or non-pulsing rhythm. The introduction and removal of the bass is controlled by the current energy level of the piece.<br />
<br />
=== 5/19 ===<br />
- The bass and one of the pads controllers now work on a probabalistic level- The energy level of the piece is used as a variable in a Markov chain; when the energy level is low there is a low probability of adding or switching the bass, when there is a mid level of energy the odds of adding or subtracting are medium, as is the odds of switching the sound. When the energy level is high there is around a 95% chance that that bass will be playing, and if it is already playing there is a good chance it will be switched.<br />
<br />
=== 6/3 ===<br />
-bass and effects using pitch shifter and varying the playback rate on SndBuf implemented<br />
<br />
=== 6/12 ===<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C.zip "Final" version of program]<br />
<br />
[https://ccrma.stanford.edu/~jrowell/220c/220C%20Demo.mp3 Demo of program playing]</div>Jrowell