Composer
Model was written in NetLogo 5.0.4
•
Viewed 444 times
•
Downloaded 123 times
•
Run 2 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
Composer is a toy model that lets you write songs and play them using the sound extension.
HOW TO USE IT
Click SETUP to draw a staff. Then choose a note length (quarter notes or half notes), click on DRAW-NOTES and draw notes on the staff. Pick an instrument, click PLAY and listen to your music.
EXTENDING THE MODEL
Add eighth notes.
Add sharps and flats.
Support several instruments at once.
Comments and Questions
Click to Run Model
extensions [ sound ] breed [ players player ] ;; the players move across the world and play notes breed [ notes note ] ;; half or quarter notes breed [ cursors cursor ] ;; the gray note places notes on the staff breed [ marks mark ] ;; vertical lines break up measures players-own [ tone ] notes-own [ duration ] globals [ current-note current-beat x-offset y-offset scale note-names ] to setup clear-all set scale (list 60 62 64 65 67 69 71 72) set note-names (list "C" "D" "E" "F" "G" "A" "B" "C") set x-offset -12 set y-offset -3 ;; create the players create-players 8 [ ht set xcor x-offset set ycor who + y-offset set tone item who scale set heading 0 set color black set shape "line left" set plabel item who note-names st ] ask turtles [ rt 90 ] ask patches [ set plabel-color gray ] ;; alternate white and gray lines ask patches with [ pycor mod 2 = 1 ] [ set pcolor white ] ask patches with [ pycor mod 2 = 0 ] [ set pcolor 9 ] ;; create marks to indicate measures ask patches[ if pxcor mod 4 = 0 [ sprout-marks 1 [ set shape "line left" set color gray ] ] ] ;; create the cursor create-cursors 1 [ set heading 0 set color gray set label-color gray hide-turtle ] reset-ticks end to play every quarter-note-length [ if metronome? [ sound:play-drum "Hi Wood Block" 80 ] ask players [ if ( any? notes-here ) [ sound:play-note (item instrument-number sound:instruments) tone 120 ( quarter-note-length * [duration] of one-of notes-here) ] fd 1 ] tick ] end to draw-notes carefully [ ;; we use carefully so we don't have to check for every possible ;; out of bounds condition ask cursors [ show-turtle setxy mouse-xcor mouse-ycor set shape note-shape ] set current-note item ( round mouse-ycor - y-offset ) note-names set current-beat round mouse-xcor - x-offset ask patches [ set plabel-color gray ] ask patches with [ plabel = item ( round mouse-ycor - y-offset ) note-names ] [ set plabel-color black ] ;; highlight the note name label if mouse-down? [ if not any? notes-on patch mouse-xcor mouse-ycor [ ask patch mouse-xcor mouse-ycor [ sprout-notes 1 [ set heading 0 ;; upright set color black set shape note-shape if note-length = "1/4" [ set duration 1 ] if note-length = "1/2" [ set duration 2 ] ] ] ] ] ] [ ;; ignore errors ] if not mouse-inside? [ ask cursors [ hide-turtle ] ] display end to erase-notes ask cursors [ st setxy mouse-xcor mouse-ycor set shape "X" set current-note item ( round mouse-ycor - y-offset ) note-names set current-beat round mouse-xcor - x-offset ] if mouse-down? [ ask notes-on patch mouse-xcor mouse-ycor [ die ] ] if not mouse-inside? [ ask cursors [ hide-turtle ] ] display end to-report note-shape if note-length = "1/4" [ report "quarter note" ] if note-length = "1/2" [ report "half note" ] end ; Public Domain: ; To the extent possible under law, Uri Wilensky has waived all ; copyright and related or neighboring rights to this model.
There are 10 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Composer.png | preview | Preview for 'Composer' | over 12 years ago, by Uri Wilensky | Download |
This model does not have any ancestors.
This model does not have any descendants.