BIGGER SOUNDS

 

Janet Kim

 

 

 

Name:                Bigger Sounds

Wand Controls:   Button 1 – turn on/off theremin

                           Button 2 – turn on/off sequencer

                           Button 3 – grab/release sound object (e.g. a “note”)

 

This piece structures a virtual environment around the generation of music and sound.  Motivated by the enjoyment and fulfillment obtained from creating and performing music, the application allows the user to craft unique rhythms and melodies.  In this piece it is the music that is enhanced by the visuals, rather than the visuals being enhanced by sound and score.  Music visualization adds an additional dimension to the experience of sound that is ordinarily “felt” though the ear.

 

This application consists of three different parts.  To create a musical environment, I constructed three instruments that can be played in the virtual space.  These instruments are a piano or keyboard, a theremin, and a sequencer.

 


The theremin is initially turned off.  To turn the theremin on, button 1 on the wand should be pressed.  In general, button 1 will toggle the theremin on and off.  When the theremin is on, it will turn a bright greenish-yellow.  When it is off, it will be brown to indicate that it will not make any sound.  The user must be close enough to the antenna in order for the sound to be heard due to amplitude and frequency (i.e. if the user is too far from the antenna, the pitch will be too high to be heard as well as the loudness being too soft.)  As the user’s wand approaches the antenna, the pitch should decrease.  As the user’s wand moves farther away from the antenna, the pitch should become higher.

 

 

Figure 1: Playing the Theremin.



 

 

The second instrument in this virtual space is the sequencer.  The sequencer consists of two nodes, a measure and note nodes.  The note nodes appear in the space as boxes of the same size, each with a unique texture and sound.  These are the only “grabable” objects in the space.  The user can pick a box up with the wand by pressing the third button on the wand.  To release, the user can press the third button again.  When a note is grabbed, it’s associated sound is played.  In the space is a transparent dome that contains the theremin antenna.  This dome defines the confines of the measure.  To start the sequencer, button 2 on the wand is pressed.

 

 

Figure 2: Positioning a note.


 

 

Now that the sequencer is on, circles on the ground appear after every 8 beats to give the user an idea of timing and note positioning.  When a note is grabbed and placed inside the dome, it is played depending on its position with respect to the antenna if the sequencer is turned on.  When the note is played, it also bounces.  In the dome are “faeries” that fly towards the note that is being played.  If the sequencer is off, the faeries fly around in random directions.  The faery color should change depending on where the faery is positioned in the dome – through the entire spectrum.  When the faeries get to the dome wall, they will disappear and reappear randomly within the dome.

 


 

Figure 3: Changing the tempo.

 

 

I also added a lever in the transparent dome space that allows for real-time tempo control.  The lever has a continuum of settings that can range on or between the following:

·        “adagio” - slow

·        “andante” – moderately slow

·        “allegro” - fast

·        “:presto” – fast, rapid

 

When the user gets with in range of the lever with the wand, the lever can be moved up and down a certain distance to change the tempo.  Moving the lever up will accelerate the tempo, while moving the lever down will decelerate the tempo.  The performance of the lever and its effect on the tempo of the notes played directly depends on the framerate of the server it is running on.  Since the timing of the notes played is calculated with respect to real time and not frames, the acceleration of the tempo may skip notes for slow frame rates.  I’d like to get the exact calculations of how many frames per second must be available to different tempos at some point.



 

Finally the third instrument is the piano.  The piano is located in a different opaque dome a short distance from the transparent dome.  Walking up to the dome will slide the dome up for entrance and back down again when the user has entered the dome.  To exit to dome, the same basic rules apply (i.e. walk to the dome, it will slide up allowing the user to pass under it, then will slide back down when the user has exited the dome area).  The piano is at the center of this dome room. “Pushing” the wand down on the keys plays the keys of the piano.  I also modified Kyoung Park’s fadeIn node so that an object will fade in when the key is played, and out again when the key is depressed.

 

 

Figure 4: Playing the piano.


 

 

 

 

                 

Figures 5 and 6: Application views below (5) and above(6).

 

 

 

 

 

Appendix

 

 

Primary Nodes

 

THEREMIN

Based on a real theremin.  Works by calculating the user’s wand position to get pitch.

 

o       Strength – how quickly the pitch changes with distance

o       Amplitude – how loud the sound is

o       Play – plays the theremin

o       Stop – stops theremin sound

o       Toggle – toggles theremin sound on and off

o       Volume – the space in which the amplitude is at full level.

o       FalloffDistance – how quickly amplitude fades from volume as user moves away from sound

Theremin song ( falloffDistance(100), amplitude(0.5), strength(5) )

{

         object ant ( file(antenna.pfb), position(0 0 0) )

}

Wandtrigger trig ( when( button1, song.toggle ) )

 

 

 

NOTE

Couples ygSound with Grabber.

 

·        Derived from ygNode

o       Sound – sound node part of the note

o       Object – object node part of the note

o       Occur – how often per measure the sound will be played

o       Play – play the note

o       Stop – stop playing the note

note1 ( object(grabb1), sound(boombox1), occur(2) )

 

 

 

MEASURE

Plays note nodes that are children.  Notes are played based on their position “in” the measure (i.e. timing depends on each notes distance from the center of the measure).

 

o       Center – center of the measure

o       Tempo – how fast to play measure

o       MaxTempo – maximum tempo – depends on framerate

o       MeasureLength – how long measure is

o       Color – change color of faeries wrt position

o       Toggle – toggle measure playing on and off

o       Start – begin playing the measure

o       Stop – stop playing the measure

o       Loop – loop the measure

o       FaeryCount – number of faeries

o       FaerySize – size of each faery

o       FaeryRange – where faeries are generate from

o       Speed – how fast the faeries move

o       Lever – node that is the lever

o       LeverDisplace – how much the lever will be displaced in one direction

o       LeverRange – how close the wand needs to be to the lever to move it.

·        Example

Measure music ( center(), loop, tempo() measureLength(), faerySize(), faeryCount(), faeryRange(), speed(), color )

{

    Note note1 ( object( file(myObj.pfb) ), sound( file(mysound.aiff) ), occur(2) )

    Note note2 ( object( file(myOtherObj.pfb)), sound( file(mysound2.wav) ), when(playing, b1.bounce) )

}

 

 

 

 

PIANO

A simple piano node that plays tones in the frequencies of a scale or in evenly calculated frequency intervals.

·        Example

Piano Pianosaurus ( range(), keyRange(), keyStart(), keyDisplace(), amplitude() )

{

         object C ( file( obj1.pfb ), position(0 0 0) )

                   …..

         object G ( file( obj2.pfb ), position(10 0 0) )

         object A ( file( obj3.pfb), position(0 10 0) )

         object B ( file( obj4.pfb ), position(-10 0 0) )

         object C_octave ( file( obj5.pfb ), position(0 –10 0) )

}

 

 

 

 

Secondary Nodes (i.e. nodes modified for my own evil purposes)

 

BACKANDFORTH

Allows children to be moved back and forth between two locations.  The major change here from toAndFrom is that if an object is moving “here” and gets a message to move “there” before it has completed the movement, the object won’t jump to the starting position of there.  Instead it will move from whatever location it is at to the there position.  This works also when moving here and receiving a message to move there.

 

·        Derived from ygTransform

·        Based on toAndFrom, probably written by Dave Pape

·        Messages

o       Startpos – starting position of the object

o       Endpos – ending position of the object

o       Duration – how long it takes to move from one location to the other

o       Toggle – toggles between here and there

o       Loop – loops the movement

o       Stoploop – stops looping the movement

o       Here – moves the object to the start position

o       There – moves the object to the end position

·        Example

backAndForth moveDome ( startpos(), endpos(), duration() )

{

object dome ( file( obj.pfb ), position( 0 0 0 ) )

}

 

                                     

 

FADEINOUT

This node basically uses fadeIn to fade objects in and out.  A few messages were added to allow the user to fade both in and out.  The main difference with fadeInOut from fadeIn is that if an object is in the middle of fading in and receives a message to fade out, it will not jump to its full opacity.  Instead it will fade out from whatever alpha value it is at and vice versa.  I also added separate duration messages for fading in and fading out.

 

·        Derived from ygNode

·        Based on Kyoung Park’s fadeIn node

·        Messages:

o       Startalpha – starting transparency

o       Endalpha – ending transparency

o       FadeInDuration – how long to fade object in

o       FadeOutDuration – how long to fade the object out

o       Active – enable fading

o       FadeIn – fade the object in

o       FadeOut – fade the object out

·        Example

fadeInOut fadeC ( startalpha(1), endalpha(0), fadeInDuration(1), fadeOutDuration(3) )

{

object objC ( file( obj1.pfb ), position(0 0 0) )

}

 

 

 

Extra

All models and textures created by me except for:

Piano fade objects included in data/FADE_OBJS.h file – created by Yalu Lin.

All sounds either generated by myself and my COMM 494 group or found on the web at the following sites:

www.musicrobot.com

www.fortunecity.com/meltingpot/finland/830/categories.html

members.tripod.com/ushk/sounds/sounds.html

Special thanks to my COMM 494 group - Matt Wilson, Mindy Frakes and Rob Aeschlimann for helping find sound samples.

 

Web version at: www.evl.uic.edu/jkim/biggerSounds.htm.