From 8c86c8e56d5948f44ba7524284824bbc6eff952b Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Sun, 12 Apr 2015 22:20:30 +0100 Subject: initial commit --- TSITOplayer/.DS_Store | Bin 0 -> 6148 bytes TSITOplayer/TSITOplayer.pde | 218 ++ TSITOplayer/TSITOtest2.mp4 | Bin 0 -> 4053166 bytes TSITOplayer/data/.DS_Store | Bin 0 -> 6148 bytes TSITOplayer/data/TSITO.csv | 3174 ++++++++++++++++++++ .../data/The Son is the One Midi 113bpm.mid | Bin 0 -> 11961 bytes TSITOplayer/data/The Son is the One.mp3 | Bin 0 -> 7568113 bytes TSITOplayer/frames/.DS_Store | Bin 0 -> 6148 bytes TSITOplayer2/.DS_Store | Bin 0 -> 6148 bytes TSITOplayer2/MetaListener.pde | 17 + TSITOplayer2/MidiReceiver.pde | 26 + TSITOplayer2/Pianola.pde | 9 + TSITOplayer2/TSITOplayer2.pde | 234 ++ TSITOplayer2/data/.DS_Store | Bin 0 -> 6148 bytes .../data/The Son is the One Midi 113bpm.mid | Bin 0 -> 11961 bytes TSITOplayer2/data/The Son is the One.mp3 | Bin 0 -> 7568113 bytes liveengine/Makefile | 2 + liveengine/addons.make | 9 + liveengine/config.make | 56 + liveengine/liveengine.cbp | 87 + liveengine/liveengine.layout | 49 + liveengine/src/layers.cpp | 229 ++ liveengine/src/layers.h | 131 + liveengine/src/main.cpp | 20 + liveengine/src/playlist.cpp | 126 + liveengine/src/playlist.h | 30 + liveengine/src/testApp.cpp | 646 ++++ liveengine/src/testApp.h | 243 ++ liveengine/src/viewport.cpp | 458 +++ liveengine/src/viewport.h | 69 + sunkenEngine/.DS_Store | Bin 0 -> 6148 bytes sunkenEngine/.gitignore | 1 + sunkenEngine/Makefile | 13 + sunkenEngine/Project.xcconfig | 17 + sunkenEngine/addons.make | 7 + sunkenEngine/bin/.DS_Store | Bin 0 -> 6148 bytes sunkenEngine/bin/data/.DS_Store | Bin 0 -> 6148 bytes sunkenEngine/bin/data/.gitkeep | 0 sunkenEngine/bin/data/Aerobics.xml | 68 + .../bin/data/divers mac/._LBOAT022.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01606A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01631A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01730A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01745A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01776A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01811A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01812A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LF01814A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LH01152A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._LH01219A.WMF.svg | Bin 0 -> 4096 bytes .../bin/data/divers mac/._RD01449A.WMF.svg | Bin 0 -> 4096 bytes sunkenEngine/bin/data/divers mac/._rd01c70a.svg | Bin 0 -> 4096 bytes sunkenEngine/bin/data/divers mac/._rd01c71a.svg | Bin 0 -> 4096 bytes sunkenEngine/bin/data/divers mac/._rd01c72a.svg | Bin 0 -> 4096 bytes sunkenEngine/bin/data/divers mac/LBOAT022.WMF.svg | 372 +++ sunkenEngine/bin/data/divers mac/LF01606A.WMF.svg | 413 +++ sunkenEngine/bin/data/divers mac/LF01631A.WMF.svg | 710 +++++ sunkenEngine/bin/data/divers mac/LF01730A.WMF.svg | 713 +++++ sunkenEngine/bin/data/divers mac/LF01745A.WMF.svg | 1865 ++++++++++++ sunkenEngine/bin/data/divers mac/LF01776A.WMF.svg | 669 +++++ sunkenEngine/bin/data/divers mac/LF01811A.WMF.svg | 491 +++ sunkenEngine/bin/data/divers mac/LF01812A.WMF.svg | 532 ++++ sunkenEngine/bin/data/divers mac/LF01814A.WMF.svg | 595 ++++ sunkenEngine/bin/data/divers mac/LH01152A.WMF.svg | 875 ++++++ sunkenEngine/bin/data/divers mac/LH01219A.WMF.svg | 790 +++++ sunkenEngine/bin/data/divers mac/RD01449A.WMF.svg | 390 +++ sunkenEngine/bin/data/divers mac/rd01c70a.svg | 737 +++++ sunkenEngine/bin/data/divers mac/rd01c71a.svg | 609 ++++ sunkenEngine/bin/data/divers mac/rd01c72a.svg | 572 ++++ sunkenEngine/bin/data/images | 1 + sunkenEngine/bin/data/settings.xml | 7 + sunkenEngine/bin/data/settings_atrl.xml | 9 + sunkenEngine/bin/data/settings_parlour.xml | 7 + .../bin/data/settings_parlour_onscreen.xml | 7 + sunkenEngine/bin/data/settings_picos.xml | 5 + sunkenEngine/bin/data/settings_picos2.xml | 13 + sunkenEngine/bin/data/settings_picos_unmapped.xml | 7 + sunkenEngine/bin/data/settings_testing.xml | 9 + sunkenEngine/bin/data/settings_tv.xml | 5 + sunkenEngine/config.make | 142 + sunkenEngine/makefile_xcode_project/.DS_Store | Bin 0 -> 6148 bytes .../sunkenEngine.xcodeproj/project.pbxproj | 203 ++ .../project.xcworkspace/contents.xcworkspacedata | 7 + .../tim.xcuserdatad/UserInterfaceState.xcuserstate | Bin 0 -> 11115 bytes .../xcschemes/sunkenEngine.xcscheme | 77 + .../xcschemes/xcschememanagement.plist | 22 + sunkenEngine/of_xcode_project/.DS_Store | Bin 0 -> 6148 bytes sunkenEngine/openFrameworks-Info.plist | 22 + sunkenEngine/people from your block ----> | 19 + sunkenEngine/src/layers.cpp | 229 ++ sunkenEngine/src/layers.h | 134 + sunkenEngine/src/main.cpp | 62 + sunkenEngine/src/ofApp.cpp | 378 +++ sunkenEngine/src/ofApp.h | 119 + sunkenEngine/src/playlist.cpp | 127 + sunkenEngine/src/playlist.h | 30 + sunkenEngine/src/viewport.cpp | 136 + sunkenEngine/src/viewport.h | 34 + sunkenEngine/sunkenEngine.cbp | 52 + sunkenEngine/sunkenEngine.layout | 4 + .../sunkenEngine.xcodeproj/project.pbxproj | 723 +++++ .../project.xcworkspace/contents.xcworkspacedata | 7 + .../tim.xcuserdatad/UserInterfaceState.xcuserstate | Bin 0 -> 27360 bytes .../tim.xcuserdatad/WorkspaceSettings.xcsettings | 22 + .../xcschemes/emptyExample Debug.xcscheme | 88 + .../xcschemes/emptyExample Release.xcscheme | 88 + .../xcdebugger/Breakpoints_v2.xcbkptlist | 23 + .../xcschemes/xcschememanagement.plist | 14 + 108 files changed, 19104 insertions(+) create mode 100644 TSITOplayer/.DS_Store create mode 100644 TSITOplayer/TSITOplayer.pde create mode 100644 TSITOplayer/TSITOtest2.mp4 create mode 100644 TSITOplayer/data/.DS_Store create mode 100644 TSITOplayer/data/TSITO.csv create mode 100644 TSITOplayer/data/The Son is the One Midi 113bpm.mid create mode 100644 TSITOplayer/data/The Son is the One.mp3 create mode 100644 TSITOplayer/frames/.DS_Store create mode 100644 TSITOplayer2/.DS_Store create mode 100755 TSITOplayer2/MetaListener.pde create mode 100644 TSITOplayer2/MidiReceiver.pde create mode 100755 TSITOplayer2/Pianola.pde create mode 100644 TSITOplayer2/TSITOplayer2.pde create mode 100644 TSITOplayer2/data/.DS_Store create mode 100644 TSITOplayer2/data/The Son is the One Midi 113bpm.mid create mode 100644 TSITOplayer2/data/The Son is the One.mp3 create mode 100755 liveengine/Makefile create mode 100755 liveengine/addons.make create mode 100755 liveengine/config.make create mode 100755 liveengine/liveengine.cbp create mode 100755 liveengine/liveengine.layout create mode 100755 liveengine/src/layers.cpp create mode 100755 liveengine/src/layers.h create mode 100755 liveengine/src/main.cpp create mode 100755 liveengine/src/playlist.cpp create mode 100755 liveengine/src/playlist.h create mode 100755 liveengine/src/testApp.cpp create mode 100755 liveengine/src/testApp.h create mode 100755 liveengine/src/viewport.cpp create mode 100755 liveengine/src/viewport.h create mode 100644 sunkenEngine/.DS_Store create mode 100644 sunkenEngine/.gitignore create mode 100644 sunkenEngine/Makefile create mode 100644 sunkenEngine/Project.xcconfig create mode 100644 sunkenEngine/addons.make create mode 100644 sunkenEngine/bin/.DS_Store create mode 100644 sunkenEngine/bin/data/.DS_Store create mode 100644 sunkenEngine/bin/data/.gitkeep create mode 100644 sunkenEngine/bin/data/Aerobics.xml create mode 100644 sunkenEngine/bin/data/divers mac/._LBOAT022.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01606A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01631A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01730A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01745A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01776A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01811A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01812A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LF01814A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LH01152A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._LH01219A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._RD01449A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/._rd01c70a.svg create mode 100644 sunkenEngine/bin/data/divers mac/._rd01c71a.svg create mode 100644 sunkenEngine/bin/data/divers mac/._rd01c72a.svg create mode 100644 sunkenEngine/bin/data/divers mac/LBOAT022.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01606A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01631A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01730A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01745A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01776A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01811A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01812A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LF01814A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LH01152A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/LH01219A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/RD01449A.WMF.svg create mode 100644 sunkenEngine/bin/data/divers mac/rd01c70a.svg create mode 100644 sunkenEngine/bin/data/divers mac/rd01c71a.svg create mode 100644 sunkenEngine/bin/data/divers mac/rd01c72a.svg create mode 120000 sunkenEngine/bin/data/images create mode 100644 sunkenEngine/bin/data/settings.xml create mode 100644 sunkenEngine/bin/data/settings_atrl.xml create mode 100644 sunkenEngine/bin/data/settings_parlour.xml create mode 100644 sunkenEngine/bin/data/settings_parlour_onscreen.xml create mode 100755 sunkenEngine/bin/data/settings_picos.xml create mode 100755 sunkenEngine/bin/data/settings_picos2.xml create mode 100644 sunkenEngine/bin/data/settings_picos_unmapped.xml create mode 100644 sunkenEngine/bin/data/settings_testing.xml create mode 100755 sunkenEngine/bin/data/settings_tv.xml create mode 100644 sunkenEngine/config.make create mode 100644 sunkenEngine/makefile_xcode_project/.DS_Store create mode 100644 sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.pbxproj create mode 100644 sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/sunkenEngine.xcscheme create mode 100644 sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 sunkenEngine/of_xcode_project/.DS_Store create mode 100644 sunkenEngine/openFrameworks-Info.plist create mode 100644 sunkenEngine/people from your block ----> create mode 100755 sunkenEngine/src/layers.cpp create mode 100755 sunkenEngine/src/layers.h create mode 100644 sunkenEngine/src/main.cpp create mode 100644 sunkenEngine/src/ofApp.cpp create mode 100644 sunkenEngine/src/ofApp.h create mode 100755 sunkenEngine/src/playlist.cpp create mode 100755 sunkenEngine/src/playlist.h create mode 100755 sunkenEngine/src/viewport.cpp create mode 100755 sunkenEngine/src/viewport.h create mode 100644 sunkenEngine/sunkenEngine.cbp create mode 100644 sunkenEngine/sunkenEngine.layout create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/project.pbxproj create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/TSITOplayer/.DS_Store b/TSITOplayer/.DS_Store new file mode 100644 index 0000000..d14ab4a Binary files /dev/null and b/TSITOplayer/.DS_Store differ diff --git a/TSITOplayer/TSITOplayer.pde b/TSITOplayer/TSITOplayer.pde new file mode 100644 index 0000000..1de0862 --- /dev/null +++ b/TSITOplayer/TSITOplayer.pde @@ -0,0 +1,218 @@ +//pixelstick image generator +// +//pixelstick playing at 20fps, 400 pixel frame makes a 20 second shot +//200 pixels height +//notes 36-45 velocities 3-122 +//notes vary by 9 +//multiply notes movement by 9 = 81 +//add 60 + + +import java.io.File; +import ddf.minim.*; +import java.util.NavigableMap; +import java.util.TreeMap; +import java.util.Iterator; +import java.util.Map; + +Table table; + +String audioFileName = "The Son is the One.mp3"; +int NOTE_LOW = 36, NOTE_HIGH = 45; + +int[] notes=new int[NOTE_HIGH+1]; +int[] oldnotes=new int[NOTE_HIGH+1]; +color[] cols={#FF0000,#FF00BF,#8000FF,#013ADF,#00FFFF,#00FF40,#80FF00,#FFFF00,#FF8000}; + +int NOTE_SCALE=12,NOTE_OFFSET=60; + +Minim minim; +AudioPlayer audioPlayer; + +int pw,ph; + +int ln=200, hn=0, lv= 200, hv=0; + +boolean loaded=false; + +PImage sc; + +class Event { + int pitch; + int velocity; + Event(int p,int v){ + pitch=p; + velocity=v; + } +} +//NavigableMap> events = new NavigableMap(); +NavigableMap events= new TreeMap(); +Iterator iterator; +ArrayList eventlist; +int startTime; +int noteTime=0; + +void setup(){ + size(400, 200); + sc=createImage(width,height,RGB); + + + table= loadTable("TSITO.csv", "header"); + println(table.getRowCount() + " total rows in table"); + for (TableRow row : table.rows()) { + + + int pitch = row.getInt("pitch"); + int velocity = row.getInt("velocity"); + String event = row.getString("event"); + int time = (int)(row.getInt("time")*0.55309734513274); //tick to ms + if (event.equals("Note_on_c")||event.equals("Note_off_c")){ + ArrayList templist; + if (!events.containsKey(time)){ + templist=new ArrayList(); + } + else templist=(ArrayList)events.get(time); + templist.add(new Event(pitch,velocity)); + events.put(time,templist); + } + + + //println(event + " " + time+","+pitch); + } + println("stored "+events.size()+" note events"); + + for (int i=NOTE_LOW;i + //is the number of 'ticks' from the previous event + //and is represented as a variable length quantity + /* +The formula is 60000 / (BPM * PPQ) (milliseconds). + +Where BPM is the tempo of the track (Beats Per Minute). + +(i.e. a 120 BPM track would have a MIDI time of (60000 / (120 * 192)) or 2.604 ms for 1 tick. +*/ + +//tempo = 530973 +//bpm = 127.43352 +//ms per tick= 60000 / (113 * 192) ms +//2.765486725663717 ms per tick +/* + +apparently logic is 960 ppq (hearsay) + +ms per tick = 60000 / (113 * 960) = 0.55309734513274 + + +strategy: +create a data structure of events with time in ms +AT EVERY FRAME +check for a new event that has just passed +turn on/off notes as necessary + +map data structure? +given a time in millis, need to be able to find note with biggest time less than this time +*/ + + background(0); + rectMode(CORNER); + //noStroke(); + colorMode(RGB, 255); + + frameRate(50); + +} + +void draw(){ + + + loadPixels(); + for (int x=1;x)eventlist){ + notes[e.pitch]=e.velocity; + //println(e.velocity+" "+noteTime+" "+e.pitch+" (time now "+trackTime+")"); + } + if(iterator.hasNext()){ + noteTime = (Integer)iterator.next(); + } + } + + NavigableMap laternotes = events.tailMap(millis(), true); + //println(laternotes.size()+" notes after "+millis()); + + + for(int i = NOTE_LOW; i < NOTE_HIGH; i++){ + int notecentre=((i-NOTE_LOW)*NOTE_SCALE)+NOTE_OFFSET; + if (notes[i]!=oldnotes[i]){ + if (notes[i]>0) { + //println("startnote "+i); + } + else { + //println("stopnote "+i); + } + for (int j=notecentre-(NOTE_SCALE*2);j<=notecentre+(NOTE_SCALE*2);j++){ + pixels[(j*width)+(width-1)]=cols[i-NOTE_LOW]; + } + } + else if (notes[i]>0){ + //println("note "+i); + pixels[((notecentre-(NOTE_SCALE*2))*width)+(width-1)]=cols[i-NOTE_LOW]; + pixels[((notecentre+(NOTE_SCALE*2))*width)+(width-1)]=cols[i-NOTE_LOW]; + } + oldnotes[i]=notes[i]; + } + + updatePixels(); + + //saveFrame("frames/img####.png"); + if (!audioPlayer.isPlaying()) { + println("notes "+ln+"-"+hn+" velocities "+lv+"-"+hv); + exit(); + } +} + +//change rate of drop? +//veering?? + + +void keyPressed() { + println("notes "+ln+"-"+hn+" velocities "+lv+"-"+hv); +} + + + diff --git a/TSITOplayer/TSITOtest2.mp4 b/TSITOplayer/TSITOtest2.mp4 new file mode 100644 index 0000000..ddd43a5 Binary files /dev/null and b/TSITOplayer/TSITOtest2.mp4 differ diff --git a/TSITOplayer/data/.DS_Store b/TSITOplayer/data/.DS_Store new file mode 100644 index 0000000..1f0b302 Binary files /dev/null and b/TSITOplayer/data/.DS_Store differ diff --git a/TSITOplayer/data/TSITO.csv b/TSITOplayer/data/TSITO.csv new file mode 100644 index 0000000..001dd2a --- /dev/null +++ b/TSITOplayer/data/TSITO.csv @@ -0,0 +1,3174 @@ +1,time,event,channel,pitch,velocity +1,0,Tempo,530973 +1,240,Note_on_c,0,39,52 +1,240,Note_on_c,0,45,70 +1,315,Note_off_c,0,39,0 +1,315,Note_off_c,0,45,0 +1,480,Note_on_c,0,38,91 +1,555,Note_off_c,0,38,0 +1,612,Note_on_c,0,38,87 +1,687,Note_off_c,0,38,0 +1,720,Note_on_c,0,39,52 +1,795,Note_off_c,0,39,0 +1,843,Note_on_c,0,38,80 +1,918,Note_off_c,0,38,0 +1,960,Note_on_c,0,39,104 +1,960,Note_on_c,0,44,39 +1,1035,Note_off_c,0,39,0 +1,1035,Note_off_c,0,44,0 +1,1083,Note_on_c,0,37,15 +1,1158,Note_off_c,0,37,0 +1,1200,Note_on_c,0,37,87 +1,1200,Note_on_c,0,39,52 +1,1275,Note_off_c,0,37,0 +1,1275,Note_off_c,0,39,0 +1,1440,Note_on_c,0,38,80 +1,1515,Note_off_c,0,38,0 +1,1803,Note_on_c,0,41,104 +1,1878,Note_off_c,0,41,0 +1,2160,Note_on_c,0,39,52 +1,2160,Note_on_c,0,45,70 +1,2235,Note_off_c,0,39,0 +1,2235,Note_off_c,0,45,0 +1,2400,Note_on_c,0,38,91 +1,2475,Note_off_c,0,38,0 +1,2640,Note_on_c,0,39,52 +1,2715,Note_off_c,0,39,0 +1,2763,Note_on_c,0,38,80 +1,2838,Note_off_c,0,38,0 +1,2880,Note_on_c,0,39,104 +1,2880,Note_on_c,0,44,39 +1,2955,Note_off_c,0,39,0 +1,2955,Note_off_c,0,44,0 +1,3003,Note_on_c,0,37,15 +1,3078,Note_off_c,0,37,0 +1,3120,Note_on_c,0,37,87 +1,3120,Note_on_c,0,39,52 +1,3195,Note_off_c,0,37,0 +1,3195,Note_off_c,0,39,0 +1,3360,Note_on_c,0,38,80 +1,3435,Note_off_c,0,38,0 +1,3723,Note_on_c,0,41,104 +1,3798,Note_off_c,0,41,0 +1,4080,Note_on_c,0,39,52 +1,4080,Note_on_c,0,45,70 +1,4155,Note_off_c,0,39,0 +1,4155,Note_off_c,0,45,0 +1,4320,Note_on_c,0,38,91 +1,4395,Note_off_c,0,38,0 +1,4452,Note_on_c,0,38,87 +1,4527,Note_off_c,0,38,0 +1,4560,Note_on_c,0,39,52 +1,4635,Note_off_c,0,39,0 +1,4683,Note_on_c,0,38,80 +1,4758,Note_off_c,0,38,0 +1,4800,Note_on_c,0,39,104 +1,4800,Note_on_c,0,44,39 +1,4875,Note_off_c,0,39,0 +1,4875,Note_off_c,0,44,0 +1,4923,Note_on_c,0,37,15 +1,4998,Note_off_c,0,37,0 +1,5040,Note_on_c,0,37,87 +1,5040,Note_on_c,0,39,52 +1,5115,Note_off_c,0,37,0 +1,5115,Note_off_c,0,39,0 +1,5280,Note_on_c,0,38,80 +1,5355,Note_off_c,0,38,0 +1,5643,Note_on_c,0,41,104 +1,5718,Note_off_c,0,41,0 +1,6000,Note_on_c,0,39,52 +1,6000,Note_on_c,0,45,70 +1,6075,Note_off_c,0,39,0 +1,6075,Note_off_c,0,45,0 +1,6240,Note_on_c,0,38,91 +1,6315,Note_off_c,0,38,0 +1,6372,Note_on_c,0,38,87 +1,6447,Note_off_c,0,38,0 +1,6480,Note_on_c,0,39,52 +1,6555,Note_off_c,0,39,0 +1,6603,Note_on_c,0,38,80 +1,6678,Note_off_c,0,38,0 +1,6720,Note_on_c,0,39,104 +1,6720,Note_on_c,0,44,39 +1,6795,Note_off_c,0,39,0 +1,6795,Note_off_c,0,44,0 +1,6960,Note_on_c,0,37,87 +1,6960,Note_on_c,0,39,52 +1,7035,Note_off_c,0,37,0 +1,7035,Note_off_c,0,39,0 +1,7200,Note_on_c,0,38,80 +1,7275,Note_off_c,0,38,0 +1,7563,Note_on_c,0,36,108 +1,7563,Note_on_c,0,41,104 +1,7638,Note_off_c,0,41,0 +1,7638,Note_on_c,0,36,0 +1,7803,Note_on_c,0,39,71 +1,7878,Note_off_c,0,39,0 +1,7920,Note_on_c,0,39,52 +1,7920,Note_on_c,0,45,70 +1,7995,Note_off_c,0,39,0 +1,7995,Note_off_c,0,45,0 +1,8160,Note_on_c,0,38,91 +1,8160,Note_on_c,0,39,104 +1,8235,Note_off_c,0,38,0 +1,8235,Note_off_c,0,39,0 +1,8292,Note_on_c,0,38,87 +1,8294,Note_on_c,0,39,77 +1,8367,Note_off_c,0,38,0 +1,8369,Note_off_c,0,39,0 +1,8400,Note_on_c,0,36,121 +1,8400,Note_on_c,0,39,52 +1,8475,Note_off_c,0,36,0 +1,8475,Note_off_c,0,39,0 +1,8523,Note_on_c,0,38,80 +1,8598,Note_off_c,0,38,0 +1,8640,Note_on_c,0,39,104 +1,8640,Note_on_c,0,44,39 +1,8715,Note_off_c,0,39,0 +1,8715,Note_off_c,0,44,0 +1,8763,Note_on_c,0,37,15 +1,8763,Note_on_c,0,39,11 +1,8838,Note_off_c,0,37,0 +1,8838,Note_off_c,0,39,0 +1,8880,Note_on_c,0,37,87 +1,8880,Note_on_c,0,39,52 +1,8955,Note_off_c,0,37,0 +1,8955,Note_off_c,0,39,0 +1,9120,Note_on_c,0,38,80 +1,9120,Note_on_c,0,39,108 +1,9195,Note_off_c,0,38,0 +1,9195,Note_off_c,0,39,0 +1,9243,Note_on_c,0,36,14 +1,9318,Note_off_c,0,36,0 +1,9483,Note_on_c,0,36,108 +1,9483,Note_on_c,0,41,104 +1,9558,Note_off_c,0,41,0 +1,9558,Note_on_c,0,36,0 +1,9723,Note_on_c,0,39,71 +1,9798,Note_off_c,0,39,0 +1,9840,Note_on_c,0,39,52 +1,9840,Note_on_c,0,45,70 +1,9915,Note_off_c,0,39,0 +1,9915,Note_off_c,0,45,0 +1,10080,Note_on_c,0,38,91 +1,10080,Note_on_c,0,39,104 +1,10155,Note_off_c,0,38,0 +1,10155,Note_off_c,0,39,0 +1,10214,Note_on_c,0,39,77 +1,10289,Note_off_c,0,39,0 +1,10320,Note_on_c,0,36,121 +1,10320,Note_on_c,0,39,52 +1,10395,Note_off_c,0,36,0 +1,10395,Note_off_c,0,39,0 +1,10443,Note_on_c,0,38,80 +1,10518,Note_off_c,0,38,0 +1,10560,Note_on_c,0,39,104 +1,10560,Note_on_c,0,44,39 +1,10635,Note_off_c,0,39,0 +1,10635,Note_off_c,0,44,0 +1,10683,Note_on_c,0,37,15 +1,10683,Note_on_c,0,39,11 +1,10758,Note_off_c,0,37,0 +1,10758,Note_off_c,0,39,0 +1,10800,Note_on_c,0,37,87 +1,10800,Note_on_c,0,39,52 +1,10875,Note_off_c,0,37,0 +1,10875,Note_off_c,0,39,0 +1,10927,Note_on_c,0,36,51 +1,11002,Note_off_c,0,36,0 +1,11040,Note_on_c,0,38,80 +1,11040,Note_on_c,0,39,108 +1,11115,Note_off_c,0,38,0 +1,11115,Note_off_c,0,39,0 +1,11163,Note_on_c,0,36,14 +1,11163,Note_on_c,0,39,65 +1,11238,Note_off_c,0,36,0 +1,11238,Note_off_c,0,39,0 +1,11403,Note_on_c,0,36,108 +1,11403,Note_on_c,0,41,104 +1,11478,Note_off_c,0,41,0 +1,11478,Note_on_c,0,36,0 +1,11643,Note_on_c,0,39,71 +1,11718,Note_off_c,0,39,0 +1,11760,Note_on_c,0,39,52 +1,11760,Note_on_c,0,45,70 +1,11835,Note_off_c,0,39,0 +1,11835,Note_off_c,0,45,0 +1,12000,Note_on_c,0,38,91 +1,12000,Note_on_c,0,39,104 +1,12075,Note_off_c,0,38,0 +1,12075,Note_off_c,0,39,0 +1,12132,Note_on_c,0,38,87 +1,12134,Note_on_c,0,39,77 +1,12207,Note_off_c,0,38,0 +1,12209,Note_off_c,0,39,0 +1,12240,Note_on_c,0,36,121 +1,12240,Note_on_c,0,39,52 +1,12315,Note_off_c,0,36,0 +1,12315,Note_off_c,0,39,0 +1,12363,Note_on_c,0,38,80 +1,12438,Note_off_c,0,38,0 +1,12480,Note_on_c,0,39,104 +1,12480,Note_on_c,0,44,39 +1,12555,Note_off_c,0,39,0 +1,12555,Note_off_c,0,44,0 +1,12603,Note_on_c,0,37,15 +1,12603,Note_on_c,0,39,11 +1,12678,Note_off_c,0,37,0 +1,12678,Note_off_c,0,39,0 +1,12720,Note_on_c,0,37,87 +1,12720,Note_on_c,0,39,52 +1,12795,Note_off_c,0,37,0 +1,12795,Note_off_c,0,39,0 +1,12847,Note_on_c,0,36,3 +1,12922,Note_off_c,0,36,0 +1,12960,Note_on_c,0,38,80 +1,12960,Note_on_c,0,39,108 +1,13035,Note_off_c,0,38,0 +1,13035,Note_off_c,0,39,0 +1,13083,Note_on_c,0,36,14 +1,13083,Note_on_c,0,39,65 +1,13158,Note_off_c,0,36,0 +1,13158,Note_off_c,0,39,0 +1,13323,Note_on_c,0,36,108 +1,13323,Note_on_c,0,41,104 +1,13398,Note_off_c,0,41,0 +1,13398,Note_on_c,0,36,0 +1,13563,Note_on_c,0,39,71 +1,13638,Note_off_c,0,39,0 +1,13680,Note_on_c,0,39,52 +1,13680,Note_on_c,0,45,70 +1,13755,Note_off_c,0,39,0 +1,13755,Note_off_c,0,45,0 +1,13920,Note_on_c,0,38,91 +1,13920,Note_on_c,0,39,104 +1,13995,Note_off_c,0,38,0 +1,13995,Note_off_c,0,39,0 +1,14052,Note_on_c,0,38,87 +1,14054,Note_on_c,0,39,77 +1,14127,Note_off_c,0,38,0 +1,14129,Note_off_c,0,39,0 +1,14160,Note_on_c,0,36,121 +1,14160,Note_on_c,0,39,52 +1,14235,Note_off_c,0,36,0 +1,14235,Note_off_c,0,39,0 +1,14283,Note_on_c,0,38,80 +1,14358,Note_off_c,0,38,0 +1,14400,Note_on_c,0,39,104 +1,14400,Note_on_c,0,44,39 +1,14475,Note_off_c,0,39,0 +1,14475,Note_off_c,0,44,0 +1,14640,Note_on_c,0,37,87 +1,14640,Note_on_c,0,39,52 +1,14715,Note_off_c,0,37,0 +1,14715,Note_off_c,0,39,0 +1,14880,Note_on_c,0,38,80 +1,14880,Note_on_c,0,39,108 +1,14955,Note_off_c,0,38,0 +1,14955,Note_off_c,0,39,0 +1,15243,Note_on_c,0,36,108 +1,15243,Note_on_c,0,41,104 +1,15318,Note_off_c,0,41,0 +1,15318,Note_on_c,0,36,0 +1,15483,Note_on_c,0,39,71 +1,15558,Note_off_c,0,39,0 +1,15600,Note_on_c,0,39,52 +1,15600,Note_on_c,0,45,70 +1,15675,Note_off_c,0,39,0 +1,15675,Note_off_c,0,45,0 +1,15840,Note_on_c,0,38,91 +1,15840,Note_on_c,0,39,104 +1,15915,Note_off_c,0,38,0 +1,15915,Note_off_c,0,39,0 +1,16080,Note_on_c,0,36,121 +1,16080,Note_on_c,0,39,52 +1,16155,Note_off_c,0,36,0 +1,16155,Note_off_c,0,39,0 +1,16203,Note_on_c,0,38,80 +1,16278,Note_off_c,0,38,0 +1,16320,Note_on_c,0,39,104 +1,16320,Note_on_c,0,44,39 +1,16395,Note_off_c,0,39,0 +1,16395,Note_off_c,0,44,0 +1,16443,Note_on_c,0,37,15 +1,16443,Note_on_c,0,39,11 +1,16518,Note_off_c,0,37,0 +1,16518,Note_off_c,0,39,0 +1,16560,Note_on_c,0,37,87 +1,16560,Note_on_c,0,39,52 +1,16635,Note_off_c,0,37,0 +1,16635,Note_off_c,0,39,0 +1,16800,Note_on_c,0,38,80 +1,16800,Note_on_c,0,39,108 +1,16875,Note_off_c,0,38,0 +1,16875,Note_off_c,0,39,0 +1,16923,Note_on_c,0,36,14 +1,16998,Note_off_c,0,36,0 +1,17163,Note_on_c,0,36,108 +1,17163,Note_on_c,0,41,104 +1,17238,Note_off_c,0,41,0 +1,17238,Note_on_c,0,36,0 +1,17403,Note_on_c,0,39,71 +1,17478,Note_off_c,0,39,0 +1,17520,Note_on_c,0,39,52 +1,17520,Note_on_c,0,45,70 +1,17595,Note_off_c,0,39,0 +1,17595,Note_off_c,0,45,0 +1,17760,Note_on_c,0,38,91 +1,17760,Note_on_c,0,39,104 +1,17835,Note_off_c,0,38,0 +1,17835,Note_off_c,0,39,0 +1,18000,Note_on_c,0,36,121 +1,18000,Note_on_c,0,39,52 +1,18075,Note_off_c,0,36,0 +1,18075,Note_off_c,0,39,0 +1,18123,Note_on_c,0,38,80 +1,18198,Note_off_c,0,38,0 +1,18240,Note_on_c,0,39,104 +1,18240,Note_on_c,0,44,39 +1,18315,Note_off_c,0,39,0 +1,18315,Note_off_c,0,44,0 +1,18363,Note_on_c,0,37,15 +1,18363,Note_on_c,0,39,11 +1,18438,Note_off_c,0,37,0 +1,18438,Note_off_c,0,39,0 +1,18480,Note_on_c,0,37,87 +1,18480,Note_on_c,0,39,52 +1,18555,Note_off_c,0,37,0 +1,18555,Note_off_c,0,39,0 +1,18607,Note_on_c,0,36,51 +1,18682,Note_off_c,0,36,0 +1,18720,Note_on_c,0,38,80 +1,18720,Note_on_c,0,39,108 +1,18795,Note_off_c,0,38,0 +1,18795,Note_off_c,0,39,0 +1,18843,Note_on_c,0,36,14 +1,18918,Note_off_c,0,36,0 +1,19083,Note_on_c,0,36,108 +1,19083,Note_on_c,0,41,104 +1,19158,Note_off_c,0,41,0 +1,19158,Note_on_c,0,36,0 +1,19323,Note_on_c,0,39,71 +1,19398,Note_off_c,0,39,0 +1,19440,Note_on_c,0,39,52 +1,19440,Note_on_c,0,45,70 +1,19515,Note_off_c,0,39,0 +1,19515,Note_off_c,0,45,0 +1,19680,Note_on_c,0,38,91 +1,19680,Note_on_c,0,39,104 +1,19755,Note_off_c,0,38,0 +1,19755,Note_off_c,0,39,0 +1,19920,Note_on_c,0,36,121 +1,19920,Note_on_c,0,39,52 +1,19995,Note_off_c,0,36,0 +1,19995,Note_off_c,0,39,0 +1,20043,Note_on_c,0,38,80 +1,20118,Note_off_c,0,38,0 +1,20160,Note_on_c,0,39,104 +1,20160,Note_on_c,0,44,39 +1,20235,Note_off_c,0,39,0 +1,20235,Note_off_c,0,44,0 +1,20283,Note_on_c,0,37,15 +1,20283,Note_on_c,0,39,11 +1,20358,Note_off_c,0,37,0 +1,20358,Note_off_c,0,39,0 +1,20400,Note_on_c,0,37,87 +1,20400,Note_on_c,0,39,52 +1,20475,Note_off_c,0,37,0 +1,20475,Note_off_c,0,39,0 +1,20527,Note_on_c,0,36,3 +1,20602,Note_off_c,0,36,0 +1,20640,Note_on_c,0,38,80 +1,20640,Note_on_c,0,39,108 +1,20715,Note_off_c,0,38,0 +1,20715,Note_off_c,0,39,0 +1,20763,Note_on_c,0,36,14 +1,20838,Note_off_c,0,36,0 +1,21003,Note_on_c,0,36,108 +1,21003,Note_on_c,0,41,104 +1,21078,Note_off_c,0,41,0 +1,21078,Note_on_c,0,36,0 +1,21243,Note_on_c,0,39,71 +1,21318,Note_off_c,0,39,0 +1,21360,Note_on_c,0,39,52 +1,21360,Note_on_c,0,45,70 +1,21435,Note_off_c,0,39,0 +1,21435,Note_off_c,0,45,0 +1,21600,Note_on_c,0,38,91 +1,21600,Note_on_c,0,39,104 +1,21675,Note_off_c,0,38,0 +1,21675,Note_off_c,0,39,0 +1,21840,Note_on_c,0,36,121 +1,21840,Note_on_c,0,39,52 +1,21915,Note_off_c,0,36,0 +1,21915,Note_off_c,0,39,0 +1,21963,Note_on_c,0,38,80 +1,22038,Note_off_c,0,38,0 +1,22080,Note_on_c,0,39,104 +1,22080,Note_on_c,0,44,39 +1,22155,Note_off_c,0,39,0 +1,22155,Note_off_c,0,44,0 +1,22320,Note_on_c,0,37,87 +1,22320,Note_on_c,0,39,52 +1,22395,Note_off_c,0,37,0 +1,22395,Note_off_c,0,39,0 +1,22447,Note_on_c,0,36,95 +1,22522,Note_off_c,0,36,0 +1,22560,Note_on_c,0,38,80 +1,22560,Note_on_c,0,39,108 +1,22635,Note_off_c,0,38,0 +1,22635,Note_off_c,0,39,0 +1,22683,Note_on_c,0,36,14 +1,22683,Note_on_c,0,39,65 +1,22758,Note_off_c,0,36,0 +1,22758,Note_off_c,0,39,0 +1,22923,Note_on_c,0,36,108 +1,22923,Note_on_c,0,41,104 +1,22998,Note_off_c,0,41,0 +1,22998,Note_on_c,0,36,0 +1,23163,Note_on_c,0,39,71 +1,23238,Note_off_c,0,39,0 +1,23280,Note_on_c,0,39,52 +1,23280,Note_on_c,0,45,70 +1,23355,Note_off_c,0,39,0 +1,23355,Note_off_c,0,45,0 +1,23520,Note_on_c,0,38,91 +1,23520,Note_on_c,0,39,104 +1,23595,Note_off_c,0,38,0 +1,23595,Note_off_c,0,39,0 +1,23760,Note_on_c,0,36,121 +1,23760,Note_on_c,0,39,52 +1,23835,Note_off_c,0,36,0 +1,23835,Note_off_c,0,39,0 +1,23883,Note_on_c,0,38,80 +1,23958,Note_off_c,0,38,0 +1,24000,Note_on_c,0,39,104 +1,24000,Note_on_c,0,44,39 +1,24075,Note_off_c,0,39,0 +1,24075,Note_off_c,0,44,0 +1,24123,Note_on_c,0,37,15 +1,24123,Note_on_c,0,39,11 +1,24198,Note_off_c,0,37,0 +1,24198,Note_off_c,0,39,0 +1,24240,Note_on_c,0,37,87 +1,24240,Note_on_c,0,39,52 +1,24315,Note_off_c,0,37,0 +1,24315,Note_off_c,0,39,0 +1,24480,Note_on_c,0,38,80 +1,24480,Note_on_c,0,39,108 +1,24555,Note_off_c,0,38,0 +1,24555,Note_off_c,0,39,0 +1,24603,Note_on_c,0,36,14 +1,24678,Note_off_c,0,36,0 +1,24843,Note_on_c,0,36,108 +1,24843,Note_on_c,0,41,104 +1,24918,Note_off_c,0,41,0 +1,24918,Note_on_c,0,36,0 +1,25083,Note_on_c,0,39,71 +1,25158,Note_off_c,0,39,0 +1,25200,Note_on_c,0,39,52 +1,25200,Note_on_c,0,45,70 +1,25275,Note_off_c,0,39,0 +1,25275,Note_off_c,0,45,0 +1,25440,Note_on_c,0,38,91 +1,25440,Note_on_c,0,39,104 +1,25515,Note_off_c,0,38,0 +1,25515,Note_off_c,0,39,0 +1,25680,Note_on_c,0,36,121 +1,25680,Note_on_c,0,39,52 +1,25755,Note_off_c,0,36,0 +1,25755,Note_off_c,0,39,0 +1,25803,Note_on_c,0,38,80 +1,25878,Note_off_c,0,38,0 +1,25920,Note_on_c,0,39,104 +1,25920,Note_on_c,0,44,39 +1,25995,Note_off_c,0,39,0 +1,25995,Note_off_c,0,44,0 +1,26043,Note_on_c,0,37,15 +1,26043,Note_on_c,0,39,11 +1,26118,Note_off_c,0,37,0 +1,26118,Note_off_c,0,39,0 +1,26160,Note_on_c,0,37,87 +1,26160,Note_on_c,0,39,52 +1,26235,Note_off_c,0,37,0 +1,26235,Note_off_c,0,39,0 +1,26287,Note_on_c,0,36,51 +1,26362,Note_off_c,0,36,0 +1,26400,Note_on_c,0,38,80 +1,26400,Note_on_c,0,39,108 +1,26475,Note_off_c,0,38,0 +1,26475,Note_off_c,0,39,0 +1,26523,Note_on_c,0,36,14 +1,26598,Note_off_c,0,36,0 +1,26763,Note_on_c,0,36,108 +1,26763,Note_on_c,0,41,104 +1,26838,Note_off_c,0,41,0 +1,26838,Note_on_c,0,36,0 +1,27003,Note_on_c,0,39,71 +1,27078,Note_off_c,0,39,0 +1,27120,Note_on_c,0,39,52 +1,27120,Note_on_c,0,45,70 +1,27195,Note_off_c,0,39,0 +1,27195,Note_off_c,0,45,0 +1,27360,Note_on_c,0,38,91 +1,27360,Note_on_c,0,39,104 +1,27435,Note_off_c,0,38,0 +1,27435,Note_off_c,0,39,0 +1,27600,Note_on_c,0,36,121 +1,27600,Note_on_c,0,39,52 +1,27675,Note_off_c,0,36,0 +1,27675,Note_off_c,0,39,0 +1,27723,Note_on_c,0,38,80 +1,27798,Note_off_c,0,38,0 +1,27840,Note_on_c,0,39,104 +1,27840,Note_on_c,0,44,39 +1,27915,Note_off_c,0,39,0 +1,27915,Note_off_c,0,44,0 +1,27963,Note_on_c,0,37,15 +1,27963,Note_on_c,0,39,11 +1,28038,Note_off_c,0,37,0 +1,28038,Note_off_c,0,39,0 +1,28080,Note_on_c,0,37,87 +1,28080,Note_on_c,0,39,52 +1,28155,Note_off_c,0,37,0 +1,28155,Note_off_c,0,39,0 +1,28207,Note_on_c,0,36,3 +1,28282,Note_off_c,0,36,0 +1,28320,Note_on_c,0,38,80 +1,28320,Note_on_c,0,39,108 +1,28395,Note_off_c,0,38,0 +1,28395,Note_off_c,0,39,0 +1,28443,Note_on_c,0,36,14 +1,28518,Note_off_c,0,36,0 +1,28683,Note_on_c,0,36,108 +1,28683,Note_on_c,0,41,104 +1,28758,Note_off_c,0,41,0 +1,28758,Note_on_c,0,36,0 +1,28923,Note_on_c,0,39,71 +1,28998,Note_off_c,0,39,0 +1,29040,Note_on_c,0,39,52 +1,29040,Note_on_c,0,45,70 +1,29115,Note_off_c,0,39,0 +1,29115,Note_off_c,0,45,0 +1,29280,Note_on_c,0,38,91 +1,29280,Note_on_c,0,39,104 +1,29355,Note_off_c,0,38,0 +1,29355,Note_off_c,0,39,0 +1,29412,Note_on_c,0,38,87 +1,29414,Note_on_c,0,39,77 +1,29487,Note_off_c,0,38,0 +1,29489,Note_off_c,0,39,0 +1,29520,Note_on_c,0,36,121 +1,29520,Note_on_c,0,39,52 +1,29595,Note_off_c,0,36,0 +1,29595,Note_off_c,0,39,0 +1,29643,Note_on_c,0,38,80 +1,29718,Note_off_c,0,38,0 +1,29760,Note_on_c,0,39,104 +1,29760,Note_on_c,0,44,39 +1,29835,Note_off_c,0,39,0 +1,29835,Note_off_c,0,44,0 +1,30603,Note_on_c,0,36,108 +1,30603,Note_on_c,0,41,104 +1,30678,Note_off_c,0,41,0 +1,30678,Note_on_c,0,36,0 +1,30843,Note_on_c,0,39,71 +1,30918,Note_off_c,0,39,0 +1,30960,Note_on_c,0,39,52 +1,30960,Note_on_c,0,45,70 +1,31035,Note_off_c,0,39,0 +1,31035,Note_off_c,0,45,0 +1,31200,Note_on_c,0,38,91 +1,31200,Note_on_c,0,39,104 +1,31275,Note_off_c,0,38,0 +1,31275,Note_off_c,0,39,0 +1,31332,Note_on_c,0,38,87 +1,31334,Note_on_c,0,39,77 +1,31407,Note_off_c,0,38,0 +1,31409,Note_off_c,0,39,0 +1,31440,Note_on_c,0,36,121 +1,31440,Note_on_c,0,39,52 +1,31515,Note_off_c,0,36,0 +1,31515,Note_off_c,0,39,0 +1,31563,Note_on_c,0,38,80 +1,31638,Note_off_c,0,38,0 +1,31680,Note_on_c,0,39,104 +1,31680,Note_on_c,0,44,39 +1,31755,Note_off_c,0,39,0 +1,31755,Note_off_c,0,44,0 +1,31803,Note_on_c,0,37,15 +1,31803,Note_on_c,0,39,11 +1,31878,Note_off_c,0,37,0 +1,31878,Note_off_c,0,39,0 +1,31920,Note_on_c,0,37,87 +1,31920,Note_on_c,0,39,52 +1,31995,Note_off_c,0,37,0 +1,31995,Note_off_c,0,39,0 +1,32160,Note_on_c,0,38,80 +1,32160,Note_on_c,0,39,108 +1,32160,Note_on_c,0,42,121 +1,32235,Note_off_c,0,38,0 +1,32235,Note_off_c,0,39,0 +1,32250,Note_off_c,0,42,0 +1,32283,Note_on_c,0,36,14 +1,32358,Note_off_c,0,36,0 +1,32523,Note_on_c,0,36,108 +1,32523,Note_on_c,0,41,104 +1,32598,Note_off_c,0,41,0 +1,32598,Note_on_c,0,36,0 +1,32763,Note_on_c,0,39,71 +1,32838,Note_off_c,0,39,0 +1,32880,Note_on_c,0,39,52 +1,32880,Note_on_c,0,45,70 +1,32955,Note_off_c,0,39,0 +1,32955,Note_off_c,0,45,0 +1,33120,Note_on_c,0,38,91 +1,33120,Note_on_c,0,39,104 +1,33195,Note_off_c,0,38,0 +1,33195,Note_off_c,0,39,0 +1,33254,Note_on_c,0,39,77 +1,33329,Note_off_c,0,39,0 +1,33360,Note_on_c,0,36,121 +1,33360,Note_on_c,0,39,52 +1,33435,Note_off_c,0,36,0 +1,33435,Note_off_c,0,39,0 +1,33483,Note_on_c,0,38,80 +1,33558,Note_off_c,0,38,0 +1,33600,Note_on_c,0,39,104 +1,33600,Note_on_c,0,44,39 +1,33675,Note_off_c,0,39,0 +1,33675,Note_off_c,0,44,0 +1,33723,Note_on_c,0,37,15 +1,33723,Note_on_c,0,39,11 +1,33798,Note_off_c,0,37,0 +1,33798,Note_off_c,0,39,0 +1,33840,Note_on_c,0,37,87 +1,33840,Note_on_c,0,39,52 +1,33915,Note_off_c,0,37,0 +1,33915,Note_off_c,0,39,0 +1,33967,Note_on_c,0,36,51 +1,34042,Note_off_c,0,36,0 +1,34080,Note_on_c,0,38,80 +1,34080,Note_on_c,0,39,108 +1,34080,Note_on_c,0,42,121 +1,34155,Note_off_c,0,38,0 +1,34155,Note_off_c,0,39,0 +1,34170,Note_off_c,0,42,0 +1,34203,Note_on_c,0,36,14 +1,34203,Note_on_c,0,39,65 +1,34278,Note_off_c,0,36,0 +1,34278,Note_off_c,0,39,0 +1,34443,Note_on_c,0,36,108 +1,34443,Note_on_c,0,41,104 +1,34518,Note_off_c,0,41,0 +1,34518,Note_on_c,0,36,0 +1,34683,Note_on_c,0,39,71 +1,34758,Note_off_c,0,39,0 +1,34800,Note_on_c,0,39,52 +1,34800,Note_on_c,0,45,70 +1,34875,Note_off_c,0,39,0 +1,34875,Note_off_c,0,45,0 +1,35040,Note_on_c,0,38,91 +1,35040,Note_on_c,0,39,104 +1,35115,Note_off_c,0,38,0 +1,35115,Note_off_c,0,39,0 +1,35172,Note_on_c,0,38,87 +1,35174,Note_on_c,0,39,77 +1,35247,Note_off_c,0,38,0 +1,35249,Note_off_c,0,39,0 +1,35280,Note_on_c,0,36,121 +1,35280,Note_on_c,0,39,52 +1,35355,Note_off_c,0,36,0 +1,35355,Note_off_c,0,39,0 +1,35403,Note_on_c,0,38,80 +1,35478,Note_off_c,0,38,0 +1,35520,Note_on_c,0,39,104 +1,35520,Note_on_c,0,44,39 +1,35595,Note_off_c,0,39,0 +1,35595,Note_off_c,0,44,0 +1,35643,Note_on_c,0,37,15 +1,35643,Note_on_c,0,39,11 +1,35718,Note_off_c,0,37,0 +1,35718,Note_off_c,0,39,0 +1,35760,Note_on_c,0,37,87 +1,35760,Note_on_c,0,39,52 +1,35835,Note_off_c,0,37,0 +1,35835,Note_off_c,0,39,0 +1,35887,Note_on_c,0,36,3 +1,35962,Note_off_c,0,36,0 +1,36000,Note_on_c,0,38,80 +1,36000,Note_on_c,0,39,108 +1,36000,Note_on_c,0,42,121 +1,36075,Note_off_c,0,38,0 +1,36075,Note_off_c,0,39,0 +1,36090,Note_off_c,0,42,0 +1,36123,Note_on_c,0,36,14 +1,36123,Note_on_c,0,39,65 +1,36198,Note_off_c,0,36,0 +1,36198,Note_off_c,0,39,0 +1,36363,Note_on_c,0,36,108 +1,36363,Note_on_c,0,41,104 +1,36438,Note_off_c,0,41,0 +1,36438,Note_on_c,0,36,0 +1,36603,Note_on_c,0,39,71 +1,36678,Note_off_c,0,39,0 +1,36720,Note_on_c,0,39,52 +1,36720,Note_on_c,0,45,70 +1,36795,Note_off_c,0,39,0 +1,36795,Note_off_c,0,45,0 +1,36960,Note_on_c,0,38,91 +1,36960,Note_on_c,0,39,104 +1,37035,Note_off_c,0,38,0 +1,37035,Note_off_c,0,39,0 +1,37092,Note_on_c,0,38,87 +1,37094,Note_on_c,0,39,77 +1,37167,Note_off_c,0,38,0 +1,37169,Note_off_c,0,39,0 +1,37200,Note_on_c,0,36,121 +1,37200,Note_on_c,0,39,52 +1,37275,Note_off_c,0,36,0 +1,37275,Note_off_c,0,39,0 +1,37323,Note_on_c,0,38,80 +1,37398,Note_off_c,0,38,0 +1,37440,Note_on_c,0,39,104 +1,37440,Note_on_c,0,44,39 +1,37515,Note_off_c,0,39,0 +1,37515,Note_off_c,0,44,0 +1,37680,Note_on_c,0,37,87 +1,37680,Note_on_c,0,39,52 +1,37755,Note_off_c,0,37,0 +1,37755,Note_off_c,0,39,0 +1,37807,Note_on_c,0,36,95 +1,37882,Note_off_c,0,36,0 +1,37920,Note_on_c,0,38,80 +1,37920,Note_on_c,0,39,108 +1,37920,Note_on_c,0,42,121 +1,37995,Note_off_c,0,38,0 +1,37995,Note_off_c,0,39,0 +1,38010,Note_off_c,0,42,0 +1,38043,Note_on_c,0,36,14 +1,38043,Note_on_c,0,39,65 +1,38118,Note_off_c,0,36,0 +1,38118,Note_off_c,0,39,0 +1,38283,Note_on_c,0,36,108 +1,38283,Note_on_c,0,41,104 +1,38358,Note_off_c,0,41,0 +1,38358,Note_on_c,0,36,0 +1,38523,Note_on_c,0,39,71 +1,38598,Note_off_c,0,39,0 +1,38640,Note_on_c,0,39,52 +1,38640,Note_on_c,0,45,70 +1,38715,Note_off_c,0,39,0 +1,38715,Note_off_c,0,45,0 +1,38880,Note_on_c,0,38,91 +1,38880,Note_on_c,0,39,104 +1,38955,Note_off_c,0,38,0 +1,38955,Note_off_c,0,39,0 +1,39012,Note_on_c,0,38,87 +1,39014,Note_on_c,0,39,77 +1,39087,Note_off_c,0,38,0 +1,39089,Note_off_c,0,39,0 +1,39120,Note_on_c,0,36,121 +1,39120,Note_on_c,0,39,52 +1,39195,Note_off_c,0,36,0 +1,39195,Note_off_c,0,39,0 +1,39243,Note_on_c,0,38,80 +1,39318,Note_off_c,0,38,0 +1,39360,Note_on_c,0,39,104 +1,39360,Note_on_c,0,44,39 +1,39435,Note_off_c,0,39,0 +1,39435,Note_off_c,0,44,0 +1,39483,Note_on_c,0,37,15 +1,39483,Note_on_c,0,39,11 +1,39558,Note_off_c,0,37,0 +1,39558,Note_off_c,0,39,0 +1,39600,Note_on_c,0,37,87 +1,39600,Note_on_c,0,39,52 +1,39675,Note_off_c,0,37,0 +1,39675,Note_off_c,0,39,0 +1,39840,Note_on_c,0,38,80 +1,39840,Note_on_c,0,39,108 +1,39840,Note_on_c,0,42,121 +1,39915,Note_off_c,0,38,0 +1,39915,Note_off_c,0,39,0 +1,39930,Note_off_c,0,42,0 +1,39963,Note_on_c,0,36,14 +1,40038,Note_off_c,0,36,0 +1,40203,Note_on_c,0,36,108 +1,40203,Note_on_c,0,41,104 +1,40278,Note_off_c,0,41,0 +1,40278,Note_on_c,0,36,0 +1,40443,Note_on_c,0,39,71 +1,40518,Note_off_c,0,39,0 +1,40560,Note_on_c,0,39,52 +1,40560,Note_on_c,0,45,70 +1,40635,Note_off_c,0,39,0 +1,40635,Note_off_c,0,45,0 +1,40800,Note_on_c,0,38,91 +1,40800,Note_on_c,0,39,104 +1,40875,Note_off_c,0,38,0 +1,40875,Note_off_c,0,39,0 +1,40934,Note_on_c,0,39,77 +1,41009,Note_off_c,0,39,0 +1,41040,Note_on_c,0,36,121 +1,41040,Note_on_c,0,39,52 +1,41115,Note_off_c,0,36,0 +1,41115,Note_off_c,0,39,0 +1,41163,Note_on_c,0,38,80 +1,41238,Note_off_c,0,38,0 +1,41280,Note_on_c,0,39,104 +1,41280,Note_on_c,0,44,39 +1,41355,Note_off_c,0,39,0 +1,41355,Note_off_c,0,44,0 +1,41403,Note_on_c,0,37,15 +1,41403,Note_on_c,0,39,11 +1,41478,Note_off_c,0,37,0 +1,41478,Note_off_c,0,39,0 +1,41520,Note_on_c,0,37,87 +1,41520,Note_on_c,0,39,52 +1,41595,Note_off_c,0,37,0 +1,41595,Note_off_c,0,39,0 +1,41647,Note_on_c,0,36,51 +1,41722,Note_off_c,0,36,0 +1,41760,Note_on_c,0,38,80 +1,41760,Note_on_c,0,39,108 +1,41760,Note_on_c,0,42,121 +1,41835,Note_off_c,0,38,0 +1,41835,Note_off_c,0,39,0 +1,41850,Note_off_c,0,42,0 +1,41883,Note_on_c,0,36,14 +1,41883,Note_on_c,0,39,65 +1,41958,Note_off_c,0,36,0 +1,41958,Note_off_c,0,39,0 +1,42123,Note_on_c,0,36,108 +1,42123,Note_on_c,0,41,104 +1,42198,Note_off_c,0,41,0 +1,42198,Note_on_c,0,36,0 +1,42363,Note_on_c,0,39,71 +1,42438,Note_off_c,0,39,0 +1,42480,Note_on_c,0,39,52 +1,42480,Note_on_c,0,45,70 +1,42555,Note_off_c,0,39,0 +1,42555,Note_off_c,0,45,0 +1,42720,Note_on_c,0,38,91 +1,42720,Note_on_c,0,39,104 +1,42795,Note_off_c,0,38,0 +1,42795,Note_off_c,0,39,0 +1,42852,Note_on_c,0,38,87 +1,42854,Note_on_c,0,39,77 +1,42927,Note_off_c,0,38,0 +1,42929,Note_off_c,0,39,0 +1,42960,Note_on_c,0,36,121 +1,42960,Note_on_c,0,39,52 +1,43035,Note_off_c,0,36,0 +1,43035,Note_off_c,0,39,0 +1,43083,Note_on_c,0,38,80 +1,43158,Note_off_c,0,38,0 +1,43200,Note_on_c,0,39,104 +1,43200,Note_on_c,0,44,39 +1,43275,Note_off_c,0,39,0 +1,43275,Note_off_c,0,44,0 +1,43323,Note_on_c,0,37,15 +1,43323,Note_on_c,0,39,11 +1,43398,Note_off_c,0,37,0 +1,43398,Note_off_c,0,39,0 +1,43440,Note_on_c,0,37,87 +1,43440,Note_on_c,0,39,52 +1,43515,Note_off_c,0,37,0 +1,43515,Note_off_c,0,39,0 +1,43567,Note_on_c,0,36,3 +1,43642,Note_off_c,0,36,0 +1,43680,Note_on_c,0,38,80 +1,43680,Note_on_c,0,39,108 +1,43680,Note_on_c,0,42,121 +1,43755,Note_off_c,0,38,0 +1,43755,Note_off_c,0,39,0 +1,43770,Note_off_c,0,42,0 +1,43803,Note_on_c,0,36,14 +1,43803,Note_on_c,0,39,65 +1,43878,Note_off_c,0,36,0 +1,43878,Note_off_c,0,39,0 +1,44043,Note_on_c,0,36,108 +1,44043,Note_on_c,0,41,104 +1,44118,Note_off_c,0,41,0 +1,44118,Note_on_c,0,36,0 +1,44283,Note_on_c,0,39,71 +1,44358,Note_off_c,0,39,0 +1,44400,Note_on_c,0,39,52 +1,44400,Note_on_c,0,45,70 +1,44475,Note_off_c,0,39,0 +1,44475,Note_off_c,0,45,0 +1,44640,Note_on_c,0,38,91 +1,44640,Note_on_c,0,39,104 +1,44715,Note_off_c,0,38,0 +1,44715,Note_off_c,0,39,0 +1,44772,Note_on_c,0,38,87 +1,44774,Note_on_c,0,39,77 +1,44847,Note_off_c,0,38,0 +1,44849,Note_off_c,0,39,0 +1,44880,Note_on_c,0,36,121 +1,44880,Note_on_c,0,39,52 +1,44955,Note_off_c,0,36,0 +1,44955,Note_off_c,0,39,0 +1,45003,Note_on_c,0,38,80 +1,45078,Note_off_c,0,38,0 +1,45120,Note_on_c,0,39,104 +1,45120,Note_on_c,0,44,39 +1,45195,Note_off_c,0,39,0 +1,45195,Note_off_c,0,44,0 +1,45360,Note_on_c,0,37,87 +1,45360,Note_on_c,0,39,52 +1,45435,Note_off_c,0,37,0 +1,45435,Note_off_c,0,39,0 +1,45487,Note_on_c,0,36,95 +1,45562,Note_off_c,0,36,0 +1,45600,Note_on_c,0,38,80 +1,45600,Note_on_c,0,39,108 +1,45600,Note_on_c,0,42,121 +1,45675,Note_off_c,0,38,0 +1,45675,Note_off_c,0,39,0 +1,45690,Note_off_c,0,42,0 +1,45723,Note_on_c,0,36,14 +1,45723,Note_on_c,0,39,65 +1,45798,Note_off_c,0,36,0 +1,45798,Note_off_c,0,39,0 +1,45963,Note_on_c,0,36,108 +1,45963,Note_on_c,0,41,104 +1,46038,Note_off_c,0,41,0 +1,46038,Note_on_c,0,36,0 +1,46203,Note_on_c,0,39,71 +1,46278,Note_off_c,0,39,0 +1,46320,Note_on_c,0,39,52 +1,46320,Note_on_c,0,45,70 +1,46395,Note_off_c,0,39,0 +1,46395,Note_off_c,0,45,0 +1,46560,Note_on_c,0,38,91 +1,46560,Note_on_c,0,39,104 +1,46635,Note_off_c,0,38,0 +1,46635,Note_off_c,0,39,0 +1,46800,Note_on_c,0,36,121 +1,46800,Note_on_c,0,39,52 +1,46875,Note_off_c,0,36,0 +1,46875,Note_off_c,0,39,0 +1,46923,Note_on_c,0,38,80 +1,46998,Note_off_c,0,38,0 +1,47040,Note_on_c,0,39,104 +1,47040,Note_on_c,0,44,39 +1,47115,Note_off_c,0,39,0 +1,47115,Note_off_c,0,44,0 +1,47163,Note_on_c,0,37,15 +1,47163,Note_on_c,0,39,11 +1,47238,Note_off_c,0,37,0 +1,47238,Note_off_c,0,39,0 +1,47280,Note_on_c,0,37,87 +1,47280,Note_on_c,0,39,52 +1,47355,Note_off_c,0,37,0 +1,47355,Note_off_c,0,39,0 +1,47520,Note_on_c,0,38,80 +1,47520,Note_on_c,0,39,108 +1,47520,Note_on_c,0,42,121 +1,47595,Note_off_c,0,38,0 +1,47595,Note_off_c,0,39,0 +1,47610,Note_off_c,0,42,0 +1,47643,Note_on_c,0,36,14 +1,47718,Note_off_c,0,36,0 +1,47883,Note_on_c,0,36,108 +1,47883,Note_on_c,0,41,104 +1,47958,Note_off_c,0,41,0 +1,47958,Note_on_c,0,36,0 +1,48123,Note_on_c,0,39,71 +1,48198,Note_off_c,0,39,0 +1,48240,Note_on_c,0,39,52 +1,48240,Note_on_c,0,45,70 +1,48315,Note_off_c,0,39,0 +1,48315,Note_off_c,0,45,0 +1,48480,Note_on_c,0,38,91 +1,48480,Note_on_c,0,39,104 +1,48555,Note_off_c,0,38,0 +1,48555,Note_off_c,0,39,0 +1,48720,Note_on_c,0,36,121 +1,48720,Note_on_c,0,39,52 +1,48795,Note_off_c,0,36,0 +1,48795,Note_off_c,0,39,0 +1,48843,Note_on_c,0,38,80 +1,48918,Note_off_c,0,38,0 +1,48960,Note_on_c,0,39,104 +1,48960,Note_on_c,0,44,39 +1,49035,Note_off_c,0,39,0 +1,49035,Note_off_c,0,44,0 +1,49083,Note_on_c,0,37,15 +1,49083,Note_on_c,0,39,11 +1,49158,Note_off_c,0,37,0 +1,49158,Note_off_c,0,39,0 +1,49200,Note_on_c,0,37,87 +1,49200,Note_on_c,0,39,52 +1,49275,Note_off_c,0,37,0 +1,49275,Note_off_c,0,39,0 +1,49327,Note_on_c,0,36,51 +1,49402,Note_off_c,0,36,0 +1,49440,Note_on_c,0,38,80 +1,49440,Note_on_c,0,39,108 +1,49440,Note_on_c,0,42,121 +1,49515,Note_off_c,0,38,0 +1,49515,Note_off_c,0,39,0 +1,49530,Note_off_c,0,42,0 +1,49563,Note_on_c,0,36,14 +1,49638,Note_off_c,0,36,0 +1,49803,Note_on_c,0,36,108 +1,49803,Note_on_c,0,41,104 +1,49878,Note_off_c,0,41,0 +1,49878,Note_on_c,0,36,0 +1,50043,Note_on_c,0,39,71 +1,50118,Note_off_c,0,39,0 +1,50160,Note_on_c,0,39,52 +1,50160,Note_on_c,0,45,70 +1,50235,Note_off_c,0,39,0 +1,50235,Note_off_c,0,45,0 +1,50400,Note_on_c,0,38,91 +1,50400,Note_on_c,0,39,104 +1,50475,Note_off_c,0,38,0 +1,50475,Note_off_c,0,39,0 +1,50640,Note_on_c,0,36,121 +1,50640,Note_on_c,0,39,52 +1,50715,Note_off_c,0,36,0 +1,50715,Note_off_c,0,39,0 +1,50763,Note_on_c,0,38,80 +1,50838,Note_off_c,0,38,0 +1,50880,Note_on_c,0,39,104 +1,50880,Note_on_c,0,44,39 +1,50955,Note_off_c,0,39,0 +1,50955,Note_off_c,0,44,0 +1,51003,Note_on_c,0,37,15 +1,51003,Note_on_c,0,39,11 +1,51078,Note_off_c,0,37,0 +1,51078,Note_off_c,0,39,0 +1,51120,Note_on_c,0,37,87 +1,51120,Note_on_c,0,39,52 +1,51195,Note_off_c,0,37,0 +1,51195,Note_off_c,0,39,0 +1,51247,Note_on_c,0,36,3 +1,51322,Note_off_c,0,36,0 +1,51360,Note_on_c,0,38,80 +1,51360,Note_on_c,0,39,108 +1,51360,Note_on_c,0,42,121 +1,51435,Note_off_c,0,38,0 +1,51435,Note_off_c,0,39,0 +1,51450,Note_off_c,0,42,0 +1,51483,Note_on_c,0,36,14 +1,51558,Note_off_c,0,36,0 +1,51723,Note_on_c,0,36,108 +1,51723,Note_on_c,0,41,104 +1,51798,Note_off_c,0,41,0 +1,51798,Note_on_c,0,36,0 +1,51963,Note_on_c,0,39,71 +1,52038,Note_off_c,0,39,0 +1,52080,Note_on_c,0,39,52 +1,52080,Note_on_c,0,45,70 +1,52155,Note_off_c,0,39,0 +1,52155,Note_off_c,0,45,0 +1,52320,Note_on_c,0,38,91 +1,52320,Note_on_c,0,39,104 +1,52395,Note_off_c,0,38,0 +1,52395,Note_off_c,0,39,0 +1,52452,Note_on_c,0,38,87 +1,52454,Note_on_c,0,39,77 +1,52527,Note_off_c,0,38,0 +1,52529,Note_off_c,0,39,0 +1,52560,Note_on_c,0,36,121 +1,52560,Note_on_c,0,39,52 +1,52635,Note_off_c,0,36,0 +1,52635,Note_off_c,0,39,0 +1,52683,Note_on_c,0,38,80 +1,52758,Note_off_c,0,38,0 +1,52800,Note_on_c,0,39,104 +1,52800,Note_on_c,0,44,39 +1,52807,Note_on_c,0,36,95 +1,52875,Note_off_c,0,39,0 +1,52875,Note_off_c,0,44,0 +1,52882,Note_off_c,0,36,0 +1,53644,Note_on_c,0,36,108 +1,53644,Note_on_c,0,41,104 +1,53719,Note_off_c,0,41,0 +1,53719,Note_on_c,0,36,0 +1,53884,Note_on_c,0,39,71 +1,53959,Note_off_c,0,39,0 +1,54000,Note_on_c,0,39,52 +1,54000,Note_on_c,0,45,70 +1,54075,Note_off_c,0,39,0 +1,54075,Note_off_c,0,45,0 +1,54240,Note_on_c,0,38,91 +1,54240,Note_on_c,0,39,104 +1,54315,Note_off_c,0,38,0 +1,54315,Note_off_c,0,39,0 +1,54372,Note_on_c,0,38,87 +1,54374,Note_on_c,0,39,77 +1,54447,Note_off_c,0,38,0 +1,54449,Note_off_c,0,39,0 +1,54480,Note_on_c,0,36,121 +1,54480,Note_on_c,0,39,52 +1,54555,Note_off_c,0,36,0 +1,54555,Note_off_c,0,39,0 +1,54603,Note_on_c,0,38,80 +1,54678,Note_off_c,0,38,0 +1,54720,Note_on_c,0,39,104 +1,54720,Note_on_c,0,44,39 +1,54795,Note_off_c,0,39,0 +1,54795,Note_off_c,0,44,0 +1,54843,Note_on_c,0,37,15 +1,54843,Note_on_c,0,39,11 +1,54918,Note_off_c,0,37,0 +1,54918,Note_off_c,0,39,0 +1,54960,Note_on_c,0,37,87 +1,54960,Note_on_c,0,39,52 +1,55035,Note_off_c,0,37,0 +1,55035,Note_off_c,0,39,0 +1,55200,Note_on_c,0,38,80 +1,55200,Note_on_c,0,39,108 +1,55200,Note_on_c,0,42,121 +1,55275,Note_off_c,0,38,0 +1,55275,Note_off_c,0,39,0 +1,55290,Note_off_c,0,42,0 +1,55323,Note_on_c,0,36,14 +1,55398,Note_off_c,0,36,0 +1,55563,Note_on_c,0,36,108 +1,55563,Note_on_c,0,41,104 +1,55638,Note_off_c,0,41,0 +1,55638,Note_on_c,0,36,0 +1,55803,Note_on_c,0,39,71 +1,55878,Note_off_c,0,39,0 +1,55920,Note_on_c,0,39,52 +1,55920,Note_on_c,0,45,70 +1,55995,Note_off_c,0,39,0 +1,55995,Note_off_c,0,45,0 +1,56160,Note_on_c,0,38,91 +1,56160,Note_on_c,0,39,104 +1,56235,Note_off_c,0,38,0 +1,56235,Note_off_c,0,39,0 +1,56294,Note_on_c,0,39,77 +1,56369,Note_off_c,0,39,0 +1,56400,Note_on_c,0,36,121 +1,56400,Note_on_c,0,39,52 +1,56475,Note_off_c,0,36,0 +1,56475,Note_off_c,0,39,0 +1,56523,Note_on_c,0,38,80 +1,56598,Note_off_c,0,38,0 +1,56640,Note_on_c,0,39,104 +1,56640,Note_on_c,0,44,39 +1,56715,Note_off_c,0,39,0 +1,56715,Note_off_c,0,44,0 +1,56763,Note_on_c,0,37,15 +1,56763,Note_on_c,0,39,11 +1,56838,Note_off_c,0,37,0 +1,56838,Note_off_c,0,39,0 +1,56880,Note_on_c,0,37,87 +1,56880,Note_on_c,0,39,52 +1,56955,Note_off_c,0,37,0 +1,56955,Note_off_c,0,39,0 +1,57007,Note_on_c,0,36,51 +1,57082,Note_off_c,0,36,0 +1,57120,Note_on_c,0,38,80 +1,57120,Note_on_c,0,39,108 +1,57120,Note_on_c,0,42,121 +1,57195,Note_off_c,0,38,0 +1,57195,Note_off_c,0,39,0 +1,57210,Note_off_c,0,42,0 +1,57243,Note_on_c,0,36,14 +1,57243,Note_on_c,0,39,65 +1,57318,Note_off_c,0,36,0 +1,57318,Note_off_c,0,39,0 +1,57483,Note_on_c,0,36,108 +1,57483,Note_on_c,0,41,104 +1,57558,Note_off_c,0,41,0 +1,57558,Note_on_c,0,36,0 +1,57723,Note_on_c,0,39,71 +1,57798,Note_off_c,0,39,0 +1,57840,Note_on_c,0,39,52 +1,57840,Note_on_c,0,45,70 +1,57915,Note_off_c,0,39,0 +1,57915,Note_off_c,0,45,0 +1,58080,Note_on_c,0,38,91 +1,58080,Note_on_c,0,39,104 +1,58155,Note_off_c,0,38,0 +1,58155,Note_off_c,0,39,0 +1,58212,Note_on_c,0,38,87 +1,58214,Note_on_c,0,39,77 +1,58287,Note_off_c,0,38,0 +1,58289,Note_off_c,0,39,0 +1,58320,Note_on_c,0,36,121 +1,58320,Note_on_c,0,39,52 +1,58395,Note_off_c,0,36,0 +1,58395,Note_off_c,0,39,0 +1,58443,Note_on_c,0,38,80 +1,58518,Note_off_c,0,38,0 +1,58560,Note_on_c,0,39,104 +1,58560,Note_on_c,0,44,39 +1,58635,Note_off_c,0,39,0 +1,58635,Note_off_c,0,44,0 +1,58800,Note_on_c,0,37,87 +1,58875,Note_off_c,0,37,0 +1,59040,Note_on_c,0,38,80 +1,59040,Note_on_c,0,39,108 +1,59040,Note_on_c,0,42,121 +1,59115,Note_off_c,0,38,0 +1,59115,Note_off_c,0,39,0 +1,59130,Note_off_c,0,42,0 +1,60000,Note_on_c,0,39,44 +1,60075,Note_off_c,0,39,0 +1,60240,Note_on_c,0,39,52 +1,60315,Note_off_c,0,39,0 +1,60363,Note_on_c,0,38,80 +1,60438,Note_off_c,0,38,0 +1,60480,Note_on_c,0,39,104 +1,60480,Note_on_c,0,44,39 +1,60555,Note_off_c,0,39,0 +1,60555,Note_off_c,0,44,0 +1,60720,Note_on_c,0,37,87 +1,60720,Note_on_c,0,39,52 +1,60795,Note_off_c,0,37,0 +1,60795,Note_off_c,0,39,0 +1,60847,Note_on_c,0,36,95 +1,60922,Note_off_c,0,36,0 +1,60960,Note_on_c,0,38,80 +1,60960,Note_on_c,0,39,108 +1,60960,Note_on_c,0,42,121 +1,61035,Note_off_c,0,38,0 +1,61035,Note_off_c,0,39,0 +1,61050,Note_off_c,0,42,0 +1,61083,Note_on_c,0,36,14 +1,61083,Note_on_c,0,39,65 +1,61158,Note_off_c,0,36,0 +1,61158,Note_off_c,0,39,0 +1,61323,Note_on_c,0,36,108 +1,61323,Note_on_c,0,41,104 +1,61398,Note_off_c,0,41,0 +1,61398,Note_on_c,0,36,0 +1,61569,Note_on_c,0,39,42 +1,61644,Note_off_c,0,39,0 +1,61680,Note_on_c,0,39,71 +1,61755,Note_off_c,0,39,0 +1,61803,Note_on_c,0,43,122 +1,61809,Note_on_c,0,36,89 +1,61879,Note_off_c,0,43,0 +1,61885,Note_off_c,0,36,0 +1,61920,Note_on_c,0,38,106 +1,61920,Note_on_c,0,39,104 +1,61995,Note_off_c,0,38,0 +1,61995,Note_off_c,0,39,0 +1,62160,Note_on_c,0,39,52 +1,62235,Note_off_c,0,39,0 +1,62283,Note_on_c,0,36,121 +1,62283,Note_on_c,0,38,80 +1,62358,Note_off_c,0,36,0 +1,62358,Note_off_c,0,38,0 +1,62400,Note_on_c,0,39,104 +1,62400,Note_on_c,0,44,39 +1,62475,Note_off_c,0,39,0 +1,62475,Note_off_c,0,44,0 +1,62523,Note_on_c,0,37,15 +1,62523,Note_on_c,0,39,11 +1,62598,Note_off_c,0,37,0 +1,62598,Note_off_c,0,39,0 +1,62640,Note_on_c,0,36,79 +1,62715,Note_off_c,0,36,0 +1,62763,Note_on_c,0,37,70 +1,62763,Note_on_c,0,39,74 +1,62768,Note_on_c,0,36,33 +1,62839,Note_off_c,0,37,0 +1,62839,Note_off_c,0,39,0 +1,62844,Note_off_c,0,36,0 +1,62880,Note_on_c,0,38,112 +1,62880,Note_on_c,0,39,88 +1,62955,Note_off_c,0,38,0 +1,62955,Note_off_c,0,39,0 +1,63120,Note_on_c,0,39,22 +1,63120,Note_on_c,0,40,61 +1,63195,Note_off_c,0,39,0 +1,63195,Note_off_c,0,40,0 +1,63243,Note_on_c,0,36,108 +1,63243,Note_on_c,0,41,104 +1,63318,Note_off_c,0,41,0 +1,63318,Note_on_c,0,36,0 +1,63489,Note_on_c,0,39,42 +1,63564,Note_off_c,0,39,0 +1,63600,Note_on_c,0,39,71 +1,63675,Note_off_c,0,39,0 +1,63723,Note_on_c,0,43,122 +1,63729,Note_on_c,0,36,89 +1,63799,Note_off_c,0,43,0 +1,63805,Note_off_c,0,36,0 +1,63840,Note_on_c,0,38,106 +1,63840,Note_on_c,0,39,104 +1,63915,Note_off_c,0,38,0 +1,63915,Note_off_c,0,39,0 +1,64080,Note_on_c,0,39,52 +1,64155,Note_off_c,0,39,0 +1,64203,Note_on_c,0,36,121 +1,64203,Note_on_c,0,38,80 +1,64278,Note_off_c,0,36,0 +1,64278,Note_off_c,0,38,0 +1,64320,Note_on_c,0,39,104 +1,64320,Note_on_c,0,44,39 +1,64395,Note_off_c,0,39,0 +1,64395,Note_off_c,0,44,0 +1,64443,Note_on_c,0,37,15 +1,64443,Note_on_c,0,39,11 +1,64518,Note_off_c,0,37,0 +1,64518,Note_off_c,0,39,0 +1,64560,Note_on_c,0,36,79 +1,64635,Note_off_c,0,36,0 +1,64683,Note_on_c,0,37,70 +1,64683,Note_on_c,0,39,74 +1,64688,Note_on_c,0,36,33 +1,64759,Note_off_c,0,37,0 +1,64759,Note_off_c,0,39,0 +1,64764,Note_off_c,0,36,0 +1,64800,Note_on_c,0,38,112 +1,64800,Note_on_c,0,39,88 +1,64875,Note_off_c,0,38,0 +1,64875,Note_off_c,0,39,0 +1,65040,Note_on_c,0,39,22 +1,65040,Note_on_c,0,40,61 +1,65115,Note_off_c,0,39,0 +1,65115,Note_off_c,0,40,0 +1,65163,Note_on_c,0,36,108 +1,65163,Note_on_c,0,41,104 +1,65238,Note_off_c,0,41,0 +1,65238,Note_on_c,0,36,0 +1,65409,Note_on_c,0,39,42 +1,65484,Note_off_c,0,39,0 +1,65520,Note_on_c,0,39,71 +1,65595,Note_off_c,0,39,0 +1,65643,Note_on_c,0,43,122 +1,65649,Note_on_c,0,36,89 +1,65719,Note_off_c,0,43,0 +1,65725,Note_off_c,0,36,0 +1,65760,Note_on_c,0,38,106 +1,65760,Note_on_c,0,39,104 +1,65835,Note_off_c,0,38,0 +1,65835,Note_off_c,0,39,0 +1,66000,Note_on_c,0,39,52 +1,66075,Note_off_c,0,39,0 +1,66123,Note_on_c,0,36,121 +1,66123,Note_on_c,0,38,80 +1,66198,Note_off_c,0,36,0 +1,66198,Note_off_c,0,38,0 +1,66240,Note_on_c,0,39,104 +1,66240,Note_on_c,0,44,39 +1,66315,Note_off_c,0,39,0 +1,66315,Note_off_c,0,44,0 +1,66363,Note_on_c,0,37,15 +1,66363,Note_on_c,0,39,11 +1,66438,Note_off_c,0,37,0 +1,66438,Note_off_c,0,39,0 +1,66480,Note_on_c,0,36,79 +1,66555,Note_off_c,0,36,0 +1,66603,Note_on_c,0,37,70 +1,66603,Note_on_c,0,39,74 +1,66608,Note_on_c,0,36,33 +1,66679,Note_off_c,0,37,0 +1,66679,Note_off_c,0,39,0 +1,66684,Note_off_c,0,36,0 +1,66720,Note_on_c,0,38,112 +1,66720,Note_on_c,0,39,88 +1,66795,Note_off_c,0,38,0 +1,66795,Note_off_c,0,39,0 +1,66960,Note_on_c,0,39,22 +1,66960,Note_on_c,0,40,61 +1,67035,Note_off_c,0,39,0 +1,67035,Note_off_c,0,40,0 +1,67083,Note_on_c,0,36,108 +1,67083,Note_on_c,0,41,104 +1,67158,Note_off_c,0,41,0 +1,67158,Note_on_c,0,36,0 +1,67329,Note_on_c,0,39,42 +1,67404,Note_off_c,0,39,0 +1,67440,Note_on_c,0,39,71 +1,67515,Note_off_c,0,39,0 +1,67563,Note_on_c,0,43,122 +1,67569,Note_on_c,0,36,89 +1,67639,Note_off_c,0,43,0 +1,67645,Note_off_c,0,36,0 +1,67680,Note_on_c,0,38,106 +1,67680,Note_on_c,0,39,104 +1,67755,Note_off_c,0,38,0 +1,67755,Note_off_c,0,39,0 +1,67920,Note_on_c,0,39,52 +1,67995,Note_off_c,0,39,0 +1,68043,Note_on_c,0,36,121 +1,68043,Note_on_c,0,38,80 +1,68118,Note_off_c,0,36,0 +1,68118,Note_off_c,0,38,0 +1,68160,Note_on_c,0,39,104 +1,68160,Note_on_c,0,44,39 +1,68235,Note_off_c,0,39,0 +1,68235,Note_off_c,0,44,0 +1,68283,Note_on_c,0,37,15 +1,68283,Note_on_c,0,39,11 +1,68358,Note_off_c,0,37,0 +1,68358,Note_off_c,0,39,0 +1,68400,Note_on_c,0,36,79 +1,68475,Note_off_c,0,36,0 +1,68523,Note_on_c,0,37,70 +1,68523,Note_on_c,0,39,74 +1,68528,Note_on_c,0,36,33 +1,68599,Note_off_c,0,37,0 +1,68599,Note_off_c,0,39,0 +1,68604,Note_off_c,0,36,0 +1,68640,Note_on_c,0,38,112 +1,68640,Note_on_c,0,39,88 +1,68715,Note_off_c,0,38,0 +1,68715,Note_off_c,0,39,0 +1,68880,Note_on_c,0,39,22 +1,68880,Note_on_c,0,40,61 +1,68955,Note_off_c,0,39,0 +1,68955,Note_off_c,0,40,0 +1,69003,Note_on_c,0,36,108 +1,69003,Note_on_c,0,41,104 +1,69078,Note_off_c,0,41,0 +1,69078,Note_on_c,0,36,0 +1,69249,Note_on_c,0,39,42 +1,69324,Note_off_c,0,39,0 +1,69360,Note_on_c,0,39,71 +1,69435,Note_off_c,0,39,0 +1,69483,Note_on_c,0,43,122 +1,69489,Note_on_c,0,36,89 +1,69559,Note_off_c,0,43,0 +1,69565,Note_off_c,0,36,0 +1,69600,Note_on_c,0,38,106 +1,69600,Note_on_c,0,39,104 +1,69675,Note_off_c,0,38,0 +1,69675,Note_off_c,0,39,0 +1,69840,Note_on_c,0,39,52 +1,69915,Note_off_c,0,39,0 +1,69963,Note_on_c,0,36,121 +1,69963,Note_on_c,0,38,80 +1,70038,Note_off_c,0,36,0 +1,70038,Note_off_c,0,38,0 +1,70080,Note_on_c,0,39,104 +1,70080,Note_on_c,0,44,39 +1,70155,Note_off_c,0,39,0 +1,70155,Note_off_c,0,44,0 +1,70203,Note_on_c,0,37,15 +1,70203,Note_on_c,0,39,11 +1,70278,Note_off_c,0,37,0 +1,70278,Note_off_c,0,39,0 +1,70320,Note_on_c,0,36,79 +1,70395,Note_off_c,0,36,0 +1,70443,Note_on_c,0,37,70 +1,70443,Note_on_c,0,39,74 +1,70448,Note_on_c,0,36,33 +1,70519,Note_off_c,0,37,0 +1,70519,Note_off_c,0,39,0 +1,70524,Note_off_c,0,36,0 +1,70560,Note_on_c,0,38,112 +1,70560,Note_on_c,0,39,88 +1,70635,Note_off_c,0,38,0 +1,70635,Note_off_c,0,39,0 +1,70800,Note_on_c,0,39,22 +1,70800,Note_on_c,0,40,61 +1,70875,Note_off_c,0,39,0 +1,70875,Note_off_c,0,40,0 +1,70923,Note_on_c,0,36,108 +1,70923,Note_on_c,0,41,104 +1,70998,Note_off_c,0,41,0 +1,70998,Note_on_c,0,36,0 +1,71169,Note_on_c,0,39,42 +1,71244,Note_off_c,0,39,0 +1,71280,Note_on_c,0,39,71 +1,71355,Note_off_c,0,39,0 +1,71403,Note_on_c,0,43,122 +1,71409,Note_on_c,0,36,89 +1,71479,Note_off_c,0,43,0 +1,71485,Note_off_c,0,36,0 +1,71520,Note_on_c,0,38,106 +1,71520,Note_on_c,0,39,104 +1,71595,Note_off_c,0,38,0 +1,71595,Note_off_c,0,39,0 +1,71760,Note_on_c,0,39,52 +1,71835,Note_off_c,0,39,0 +1,71883,Note_on_c,0,36,121 +1,71883,Note_on_c,0,38,80 +1,71958,Note_off_c,0,36,0 +1,71958,Note_off_c,0,38,0 +1,72000,Note_on_c,0,39,104 +1,72000,Note_on_c,0,44,39 +1,72075,Note_off_c,0,39,0 +1,72075,Note_off_c,0,44,0 +1,72123,Note_on_c,0,37,15 +1,72123,Note_on_c,0,39,11 +1,72198,Note_off_c,0,37,0 +1,72198,Note_off_c,0,39,0 +1,72240,Note_on_c,0,36,79 +1,72315,Note_off_c,0,36,0 +1,72363,Note_on_c,0,37,70 +1,72363,Note_on_c,0,39,74 +1,72368,Note_on_c,0,36,33 +1,72439,Note_off_c,0,37,0 +1,72439,Note_off_c,0,39,0 +1,72444,Note_off_c,0,36,0 +1,72480,Note_on_c,0,38,112 +1,72480,Note_on_c,0,39,88 +1,72555,Note_off_c,0,38,0 +1,72555,Note_off_c,0,39,0 +1,72720,Note_on_c,0,39,22 +1,72720,Note_on_c,0,40,61 +1,72795,Note_off_c,0,39,0 +1,72795,Note_off_c,0,40,0 +1,72843,Note_on_c,0,36,108 +1,72843,Note_on_c,0,41,104 +1,72918,Note_off_c,0,41,0 +1,72918,Note_on_c,0,36,0 +1,73089,Note_on_c,0,39,42 +1,73164,Note_off_c,0,39,0 +1,73200,Note_on_c,0,39,71 +1,73275,Note_off_c,0,39,0 +1,73323,Note_on_c,0,43,122 +1,73329,Note_on_c,0,36,89 +1,73399,Note_off_c,0,43,0 +1,73405,Note_off_c,0,36,0 +1,73440,Note_on_c,0,38,106 +1,73440,Note_on_c,0,39,104 +1,73515,Note_off_c,0,38,0 +1,73515,Note_off_c,0,39,0 +1,73680,Note_on_c,0,39,52 +1,73755,Note_off_c,0,39,0 +1,73803,Note_on_c,0,36,121 +1,73803,Note_on_c,0,38,80 +1,73878,Note_off_c,0,36,0 +1,73878,Note_off_c,0,38,0 +1,73920,Note_on_c,0,39,104 +1,73920,Note_on_c,0,44,39 +1,73995,Note_off_c,0,39,0 +1,73995,Note_off_c,0,44,0 +1,74043,Note_on_c,0,37,15 +1,74043,Note_on_c,0,39,11 +1,74118,Note_off_c,0,37,0 +1,74118,Note_off_c,0,39,0 +1,74160,Note_on_c,0,36,79 +1,74235,Note_off_c,0,36,0 +1,74283,Note_on_c,0,37,70 +1,74283,Note_on_c,0,39,74 +1,74288,Note_on_c,0,36,33 +1,74359,Note_off_c,0,37,0 +1,74359,Note_off_c,0,39,0 +1,74364,Note_off_c,0,36,0 +1,74400,Note_on_c,0,38,112 +1,74400,Note_on_c,0,39,88 +1,74475,Note_off_c,0,38,0 +1,74475,Note_off_c,0,39,0 +1,74640,Note_on_c,0,39,22 +1,74640,Note_on_c,0,40,61 +1,74715,Note_off_c,0,39,0 +1,74715,Note_off_c,0,40,0 +1,74763,Note_on_c,0,36,108 +1,74763,Note_on_c,0,41,104 +1,74838,Note_off_c,0,41,0 +1,74838,Note_on_c,0,36,0 +1,75009,Note_on_c,0,39,42 +1,75084,Note_off_c,0,39,0 +1,75120,Note_on_c,0,39,71 +1,75195,Note_off_c,0,39,0 +1,75243,Note_on_c,0,43,122 +1,75249,Note_on_c,0,36,89 +1,75319,Note_off_c,0,43,0 +1,75325,Note_off_c,0,36,0 +1,75360,Note_on_c,0,38,106 +1,75360,Note_on_c,0,39,104 +1,75435,Note_off_c,0,38,0 +1,75435,Note_off_c,0,39,0 +1,75600,Note_on_c,0,39,52 +1,75675,Note_off_c,0,39,0 +1,75723,Note_on_c,0,36,121 +1,75723,Note_on_c,0,38,80 +1,75798,Note_off_c,0,36,0 +1,75798,Note_off_c,0,38,0 +1,75840,Note_on_c,0,39,104 +1,75840,Note_on_c,0,44,39 +1,75915,Note_off_c,0,39,0 +1,75915,Note_off_c,0,44,0 +1,75963,Note_on_c,0,37,15 +1,75963,Note_on_c,0,39,11 +1,76038,Note_off_c,0,37,0 +1,76038,Note_off_c,0,39,0 +1,76080,Note_on_c,0,36,79 +1,76155,Note_off_c,0,36,0 +1,76203,Note_on_c,0,37,70 +1,76203,Note_on_c,0,39,74 +1,76208,Note_on_c,0,36,33 +1,76279,Note_off_c,0,37,0 +1,76279,Note_off_c,0,39,0 +1,76284,Note_off_c,0,36,0 +1,76320,Note_on_c,0,38,112 +1,76320,Note_on_c,0,39,88 +1,76395,Note_off_c,0,38,0 +1,76395,Note_off_c,0,39,0 +1,76560,Note_on_c,0,39,22 +1,76560,Note_on_c,0,40,61 +1,76635,Note_off_c,0,39,0 +1,76635,Note_off_c,0,40,0 +1,76683,Note_on_c,0,36,108 +1,76683,Note_on_c,0,41,104 +1,76758,Note_off_c,0,41,0 +1,76758,Note_on_c,0,36,0 +1,76929,Note_on_c,0,39,42 +1,77004,Note_off_c,0,39,0 +1,77040,Note_on_c,0,39,71 +1,77115,Note_off_c,0,39,0 +1,77163,Note_on_c,0,43,122 +1,77169,Note_on_c,0,36,89 +1,77239,Note_off_c,0,43,0 +1,77245,Note_off_c,0,36,0 +1,77280,Note_on_c,0,38,106 +1,77280,Note_on_c,0,39,104 +1,77355,Note_off_c,0,38,0 +1,77355,Note_off_c,0,39,0 +1,77520,Note_on_c,0,39,52 +1,77595,Note_off_c,0,39,0 +1,77643,Note_on_c,0,36,121 +1,77643,Note_on_c,0,38,80 +1,77718,Note_off_c,0,36,0 +1,77718,Note_off_c,0,38,0 +1,77760,Note_on_c,0,39,104 +1,77760,Note_on_c,0,44,39 +1,77835,Note_off_c,0,39,0 +1,77835,Note_off_c,0,44,0 +1,77883,Note_on_c,0,37,15 +1,77883,Note_on_c,0,39,11 +1,77958,Note_off_c,0,37,0 +1,77958,Note_off_c,0,39,0 +1,78000,Note_on_c,0,36,79 +1,78075,Note_off_c,0,36,0 +1,78123,Note_on_c,0,37,70 +1,78123,Note_on_c,0,39,74 +1,78128,Note_on_c,0,36,33 +1,78199,Note_off_c,0,37,0 +1,78199,Note_off_c,0,39,0 +1,78204,Note_off_c,0,36,0 +1,78240,Note_on_c,0,38,112 +1,78240,Note_on_c,0,39,88 +1,78240,Note_on_c,0,42,121 +1,78315,Note_off_c,0,38,0 +1,78315,Note_off_c,0,39,0 +1,78330,Note_off_c,0,42,0 +1,78480,Note_on_c,0,39,22 +1,78480,Note_on_c,0,40,61 +1,78555,Note_off_c,0,39,0 +1,78555,Note_off_c,0,40,0 +1,78603,Note_on_c,0,36,108 +1,78603,Note_on_c,0,41,104 +1,78678,Note_off_c,0,41,0 +1,78678,Note_on_c,0,36,0 +1,78849,Note_on_c,0,39,42 +1,78924,Note_off_c,0,39,0 +1,78960,Note_on_c,0,39,71 +1,79035,Note_off_c,0,39,0 +1,79083,Note_on_c,0,43,122 +1,79089,Note_on_c,0,36,89 +1,79159,Note_off_c,0,43,0 +1,79165,Note_off_c,0,36,0 +1,79200,Note_on_c,0,38,106 +1,79200,Note_on_c,0,39,104 +1,79275,Note_off_c,0,38,0 +1,79275,Note_off_c,0,39,0 +1,79440,Note_on_c,0,39,52 +1,79515,Note_off_c,0,39,0 +1,79563,Note_on_c,0,36,121 +1,79563,Note_on_c,0,38,80 +1,79638,Note_off_c,0,36,0 +1,79638,Note_off_c,0,38,0 +1,79680,Note_on_c,0,39,104 +1,79680,Note_on_c,0,44,39 +1,79755,Note_off_c,0,39,0 +1,79755,Note_off_c,0,44,0 +1,79803,Note_on_c,0,37,15 +1,79803,Note_on_c,0,39,11 +1,79878,Note_off_c,0,37,0 +1,79878,Note_off_c,0,39,0 +1,79920,Note_on_c,0,36,79 +1,79995,Note_off_c,0,36,0 +1,80043,Note_on_c,0,37,70 +1,80043,Note_on_c,0,39,74 +1,80048,Note_on_c,0,36,33 +1,80119,Note_off_c,0,37,0 +1,80119,Note_off_c,0,39,0 +1,80124,Note_off_c,0,36,0 +1,80160,Note_on_c,0,38,112 +1,80160,Note_on_c,0,39,88 +1,80160,Note_on_c,0,42,121 +1,80235,Note_off_c,0,38,0 +1,80235,Note_off_c,0,39,0 +1,80250,Note_off_c,0,42,0 +1,80400,Note_on_c,0,39,22 +1,80400,Note_on_c,0,40,61 +1,80475,Note_off_c,0,39,0 +1,80475,Note_off_c,0,40,0 +1,80523,Note_on_c,0,36,108 +1,80523,Note_on_c,0,41,104 +1,80598,Note_off_c,0,41,0 +1,80598,Note_on_c,0,36,0 +1,80769,Note_on_c,0,39,42 +1,80844,Note_off_c,0,39,0 +1,80880,Note_on_c,0,39,71 +1,80955,Note_off_c,0,39,0 +1,81003,Note_on_c,0,43,122 +1,81009,Note_on_c,0,36,89 +1,81079,Note_off_c,0,43,0 +1,81085,Note_off_c,0,36,0 +1,81120,Note_on_c,0,38,106 +1,81120,Note_on_c,0,39,104 +1,81195,Note_off_c,0,38,0 +1,81195,Note_off_c,0,39,0 +1,81360,Note_on_c,0,39,52 +1,81435,Note_off_c,0,39,0 +1,81483,Note_on_c,0,36,121 +1,81483,Note_on_c,0,38,80 +1,81558,Note_off_c,0,36,0 +1,81558,Note_off_c,0,38,0 +1,81600,Note_on_c,0,39,104 +1,81600,Note_on_c,0,44,39 +1,81675,Note_off_c,0,39,0 +1,81675,Note_off_c,0,44,0 +1,81723,Note_on_c,0,37,15 +1,81723,Note_on_c,0,39,11 +1,81798,Note_off_c,0,37,0 +1,81798,Note_off_c,0,39,0 +1,81840,Note_on_c,0,36,79 +1,81915,Note_off_c,0,36,0 +1,81963,Note_on_c,0,37,70 +1,81963,Note_on_c,0,39,74 +1,81968,Note_on_c,0,36,33 +1,82039,Note_off_c,0,37,0 +1,82039,Note_off_c,0,39,0 +1,82044,Note_off_c,0,36,0 +1,82080,Note_on_c,0,38,112 +1,82080,Note_on_c,0,39,88 +1,82080,Note_on_c,0,42,121 +1,82155,Note_off_c,0,38,0 +1,82155,Note_off_c,0,39,0 +1,82170,Note_off_c,0,42,0 +1,82320,Note_on_c,0,39,22 +1,82320,Note_on_c,0,40,61 +1,82395,Note_off_c,0,39,0 +1,82395,Note_off_c,0,40,0 +1,82443,Note_on_c,0,36,108 +1,82443,Note_on_c,0,41,104 +1,82518,Note_off_c,0,41,0 +1,82518,Note_on_c,0,36,0 +1,82689,Note_on_c,0,39,42 +1,82764,Note_off_c,0,39,0 +1,82800,Note_on_c,0,39,71 +1,82875,Note_off_c,0,39,0 +1,82923,Note_on_c,0,43,122 +1,82929,Note_on_c,0,36,89 +1,82999,Note_off_c,0,43,0 +1,83005,Note_off_c,0,36,0 +1,83040,Note_on_c,0,38,106 +1,83040,Note_on_c,0,39,104 +1,83115,Note_off_c,0,38,0 +1,83115,Note_off_c,0,39,0 +1,83280,Note_on_c,0,39,52 +1,83355,Note_off_c,0,39,0 +1,83403,Note_on_c,0,36,121 +1,83403,Note_on_c,0,38,80 +1,83478,Note_off_c,0,36,0 +1,83478,Note_off_c,0,38,0 +1,83520,Note_on_c,0,39,104 +1,83520,Note_on_c,0,44,39 +1,83595,Note_off_c,0,39,0 +1,83595,Note_off_c,0,44,0 +1,83643,Note_on_c,0,37,15 +1,83643,Note_on_c,0,39,11 +1,83718,Note_off_c,0,37,0 +1,83718,Note_off_c,0,39,0 +1,83760,Note_on_c,0,36,79 +1,83835,Note_off_c,0,36,0 +1,83883,Note_on_c,0,37,70 +1,83883,Note_on_c,0,39,74 +1,83888,Note_on_c,0,36,33 +1,83959,Note_off_c,0,37,0 +1,83959,Note_off_c,0,39,0 +1,83964,Note_off_c,0,36,0 +1,84000,Note_on_c,0,38,112 +1,84000,Note_on_c,0,39,88 +1,84000,Note_on_c,0,42,121 +1,84075,Note_off_c,0,38,0 +1,84075,Note_off_c,0,39,0 +1,84090,Note_off_c,0,42,0 +1,84240,Note_on_c,0,39,22 +1,84240,Note_on_c,0,40,61 +1,84315,Note_off_c,0,39,0 +1,84315,Note_off_c,0,40,0 +1,84363,Note_on_c,0,36,108 +1,84363,Note_on_c,0,41,104 +1,84438,Note_off_c,0,41,0 +1,84438,Note_on_c,0,36,0 +1,84609,Note_on_c,0,39,42 +1,84684,Note_off_c,0,39,0 +1,84720,Note_on_c,0,39,71 +1,84795,Note_off_c,0,39,0 +1,84843,Note_on_c,0,43,122 +1,84849,Note_on_c,0,36,89 +1,84919,Note_off_c,0,43,0 +1,84925,Note_off_c,0,36,0 +1,84960,Note_on_c,0,38,106 +1,84960,Note_on_c,0,39,104 +1,85035,Note_off_c,0,38,0 +1,85035,Note_off_c,0,39,0 +1,85920,Note_on_c,0,42,121 +1,86010,Note_off_c,0,42,0 +1,87840,Note_on_c,0,42,121 +1,87930,Note_off_c,0,42,0 +1,89760,Note_on_c,0,42,121 +1,89850,Note_off_c,0,42,0 +1,91083,Note_on_c,0,36,121 +1,91083,Note_on_c,0,38,80 +1,91158,Note_off_c,0,36,0 +1,91158,Note_off_c,0,38,0 +1,91200,Note_on_c,0,39,104 +1,91200,Note_on_c,0,44,39 +1,91275,Note_off_c,0,39,0 +1,91275,Note_off_c,0,44,0 +1,91323,Note_on_c,0,37,15 +1,91323,Note_on_c,0,39,11 +1,91398,Note_off_c,0,37,0 +1,91398,Note_off_c,0,39,0 +1,91440,Note_on_c,0,36,79 +1,91515,Note_off_c,0,36,0 +1,91563,Note_on_c,0,37,70 +1,91563,Note_on_c,0,39,74 +1,91568,Note_on_c,0,36,33 +1,91639,Note_off_c,0,37,0 +1,91639,Note_off_c,0,39,0 +1,91644,Note_off_c,0,36,0 +1,91680,Note_on_c,0,38,112 +1,91680,Note_on_c,0,39,88 +1,91680,Note_on_c,0,42,121 +1,91755,Note_off_c,0,38,0 +1,91755,Note_off_c,0,39,0 +1,91770,Note_off_c,0,42,0 +1,91920,Note_on_c,0,39,22 +1,91920,Note_on_c,0,40,61 +1,91995,Note_off_c,0,39,0 +1,91995,Note_off_c,0,40,0 +1,92043,Note_on_c,0,36,108 +1,92043,Note_on_c,0,41,104 +1,92118,Note_off_c,0,41,0 +1,92118,Note_on_c,0,36,0 +1,92400,Note_on_c,0,39,52 +1,92400,Note_on_c,0,45,70 +1,92475,Note_off_c,0,39,0 +1,92475,Note_off_c,0,45,0 +1,92640,Note_on_c,0,38,91 +1,92715,Note_off_c,0,38,0 +1,92880,Note_on_c,0,36,121 +1,92880,Note_on_c,0,39,52 +1,92955,Note_off_c,0,36,0 +1,92955,Note_off_c,0,39,0 +1,93003,Note_on_c,0,38,80 +1,93078,Note_off_c,0,38,0 +1,93120,Note_on_c,0,39,104 +1,93120,Note_on_c,0,44,39 +1,93195,Note_off_c,0,39,0 +1,93195,Note_off_c,0,44,0 +1,93243,Note_on_c,0,37,15 +1,93318,Note_off_c,0,37,0 +1,93360,Note_on_c,0,37,87 +1,93360,Note_on_c,0,39,52 +1,93435,Note_off_c,0,37,0 +1,93435,Note_off_c,0,39,0 +1,93600,Note_on_c,0,38,80 +1,93600,Note_on_c,0,42,121 +1,93675,Note_off_c,0,38,0 +1,93690,Note_off_c,0,42,0 +1,93723,Note_on_c,0,36,14 +1,93798,Note_off_c,0,36,0 +1,93963,Note_on_c,0,36,108 +1,94038,Note_on_c,0,36,0 +1,94320,Note_on_c,0,39,52 +1,94320,Note_on_c,0,45,70 +1,94395,Note_off_c,0,39,0 +1,94395,Note_off_c,0,45,0 +1,94560,Note_on_c,0,38,91 +1,94635,Note_off_c,0,38,0 +1,94800,Note_on_c,0,36,121 +1,94800,Note_on_c,0,39,52 +1,94875,Note_off_c,0,36,0 +1,94875,Note_off_c,0,39,0 +1,94923,Note_on_c,0,38,80 +1,94998,Note_off_c,0,38,0 +1,95040,Note_on_c,0,39,104 +1,95040,Note_on_c,0,44,39 +1,95115,Note_off_c,0,39,0 +1,95115,Note_off_c,0,44,0 +1,95163,Note_on_c,0,37,15 +1,95238,Note_off_c,0,37,0 +1,95280,Note_on_c,0,37,87 +1,95280,Note_on_c,0,39,52 +1,95355,Note_off_c,0,37,0 +1,95355,Note_off_c,0,39,0 +1,95407,Note_on_c,0,36,51 +1,95482,Note_off_c,0,36,0 +1,95520,Note_on_c,0,38,80 +1,95520,Note_on_c,0,42,121 +1,95595,Note_off_c,0,38,0 +1,95610,Note_off_c,0,42,0 +1,95643,Note_on_c,0,36,14 +1,95718,Note_off_c,0,36,0 +1,95883,Note_on_c,0,36,108 +1,95958,Note_on_c,0,36,0 +1,96240,Note_on_c,0,39,52 +1,96240,Note_on_c,0,45,70 +1,96315,Note_off_c,0,39,0 +1,96315,Note_off_c,0,45,0 +1,96480,Note_on_c,0,38,91 +1,96555,Note_off_c,0,38,0 +1,96720,Note_on_c,0,36,121 +1,96720,Note_on_c,0,39,52 +1,96795,Note_off_c,0,36,0 +1,96795,Note_off_c,0,39,0 +1,96843,Note_on_c,0,38,80 +1,96918,Note_off_c,0,38,0 +1,96960,Note_on_c,0,39,104 +1,96960,Note_on_c,0,44,39 +1,97035,Note_off_c,0,39,0 +1,97035,Note_off_c,0,44,0 +1,97083,Note_on_c,0,37,15 +1,97158,Note_off_c,0,37,0 +1,97200,Note_on_c,0,37,87 +1,97200,Note_on_c,0,39,52 +1,97275,Note_off_c,0,37,0 +1,97275,Note_off_c,0,39,0 +1,97327,Note_on_c,0,36,3 +1,97402,Note_off_c,0,36,0 +1,97440,Note_on_c,0,38,80 +1,97440,Note_on_c,0,42,121 +1,97515,Note_off_c,0,38,0 +1,97530,Note_off_c,0,42,0 +1,97563,Note_on_c,0,36,14 +1,97638,Note_off_c,0,36,0 +1,97803,Note_on_c,0,36,108 +1,97878,Note_on_c,0,36,0 +1,98160,Note_on_c,0,39,52 +1,98160,Note_on_c,0,45,70 +1,98235,Note_off_c,0,39,0 +1,98235,Note_off_c,0,45,0 +1,98400,Note_on_c,0,38,91 +1,98475,Note_off_c,0,38,0 +1,98640,Note_on_c,0,36,121 +1,98640,Note_on_c,0,39,52 +1,98715,Note_off_c,0,36,0 +1,98715,Note_off_c,0,39,0 +1,98763,Note_on_c,0,38,80 +1,98838,Note_off_c,0,38,0 +1,98880,Note_on_c,0,39,104 +1,98880,Note_on_c,0,44,39 +1,98955,Note_off_c,0,39,0 +1,98955,Note_off_c,0,44,0 +1,99120,Note_on_c,0,37,87 +1,99120,Note_on_c,0,39,52 +1,99195,Note_off_c,0,37,0 +1,99195,Note_off_c,0,39,0 +1,99247,Note_on_c,0,36,95 +1,99322,Note_off_c,0,36,0 +1,99360,Note_on_c,0,38,80 +1,99360,Note_on_c,0,42,121 +1,99435,Note_off_c,0,38,0 +1,99450,Note_off_c,0,42,0 +1,99483,Note_on_c,0,36,14 +1,99558,Note_off_c,0,36,0 +1,99723,Note_on_c,0,36,108 +1,99798,Note_on_c,0,36,0 +1,99963,Note_on_c,0,39,71 +1,100038,Note_off_c,0,39,0 +1,100080,Note_on_c,0,39,52 +1,100080,Note_on_c,0,45,70 +1,100155,Note_off_c,0,39,0 +1,100155,Note_off_c,0,45,0 +1,100320,Note_on_c,0,38,91 +1,100320,Note_on_c,0,39,104 +1,100395,Note_off_c,0,38,0 +1,100395,Note_off_c,0,39,0 +1,100452,Note_on_c,0,38,87 +1,100454,Note_on_c,0,39,77 +1,100527,Note_off_c,0,38,0 +1,100529,Note_off_c,0,39,0 +1,100560,Note_on_c,0,36,121 +1,100560,Note_on_c,0,39,52 +1,100635,Note_off_c,0,36,0 +1,100635,Note_off_c,0,39,0 +1,100683,Note_on_c,0,38,80 +1,100758,Note_off_c,0,38,0 +1,100800,Note_on_c,0,39,104 +1,100800,Note_on_c,0,44,39 +1,100875,Note_off_c,0,39,0 +1,100875,Note_off_c,0,44,0 +1,100923,Note_on_c,0,37,15 +1,100923,Note_on_c,0,39,11 +1,100998,Note_off_c,0,37,0 +1,100998,Note_off_c,0,39,0 +1,101040,Note_on_c,0,37,87 +1,101040,Note_on_c,0,39,52 +1,101115,Note_off_c,0,37,0 +1,101115,Note_off_c,0,39,0 +1,101280,Note_on_c,0,38,80 +1,101280,Note_on_c,0,39,108 +1,101280,Note_on_c,0,42,121 +1,101355,Note_off_c,0,38,0 +1,101355,Note_off_c,0,39,0 +1,101370,Note_off_c,0,42,0 +1,101403,Note_on_c,0,36,14 +1,101478,Note_off_c,0,36,0 +1,101643,Note_on_c,0,36,108 +1,101643,Note_on_c,0,41,104 +1,101718,Note_off_c,0,41,0 +1,101718,Note_on_c,0,36,0 +1,101883,Note_on_c,0,39,71 +1,101958,Note_off_c,0,39,0 +1,102000,Note_on_c,0,39,52 +1,102000,Note_on_c,0,45,70 +1,102075,Note_off_c,0,39,0 +1,102075,Note_off_c,0,45,0 +1,102240,Note_on_c,0,38,91 +1,102240,Note_on_c,0,39,104 +1,102315,Note_off_c,0,38,0 +1,102315,Note_off_c,0,39,0 +1,102374,Note_on_c,0,39,77 +1,102449,Note_off_c,0,39,0 +1,102480,Note_on_c,0,36,121 +1,102480,Note_on_c,0,39,52 +1,102555,Note_off_c,0,36,0 +1,102555,Note_off_c,0,39,0 +1,102603,Note_on_c,0,38,80 +1,102678,Note_off_c,0,38,0 +1,102720,Note_on_c,0,39,104 +1,102720,Note_on_c,0,44,39 +1,102795,Note_off_c,0,39,0 +1,102795,Note_off_c,0,44,0 +1,102843,Note_on_c,0,37,15 +1,102843,Note_on_c,0,39,11 +1,102918,Note_off_c,0,37,0 +1,102918,Note_off_c,0,39,0 +1,102960,Note_on_c,0,37,87 +1,102960,Note_on_c,0,39,52 +1,103035,Note_off_c,0,37,0 +1,103035,Note_off_c,0,39,0 +1,103087,Note_on_c,0,36,51 +1,103162,Note_off_c,0,36,0 +1,103200,Note_on_c,0,38,80 +1,103200,Note_on_c,0,39,108 +1,103200,Note_on_c,0,42,121 +1,103275,Note_off_c,0,38,0 +1,103275,Note_off_c,0,39,0 +1,103290,Note_off_c,0,42,0 +1,103323,Note_on_c,0,36,14 +1,103323,Note_on_c,0,39,65 +1,103398,Note_off_c,0,36,0 +1,103398,Note_off_c,0,39,0 +1,103563,Note_on_c,0,36,108 +1,103563,Note_on_c,0,41,104 +1,103638,Note_off_c,0,41,0 +1,103638,Note_on_c,0,36,0 +1,103803,Note_on_c,0,39,71 +1,103878,Note_off_c,0,39,0 +1,103920,Note_on_c,0,39,52 +1,103920,Note_on_c,0,45,70 +1,103995,Note_off_c,0,39,0 +1,103995,Note_off_c,0,45,0 +1,104160,Note_on_c,0,38,91 +1,104160,Note_on_c,0,39,104 +1,104235,Note_off_c,0,38,0 +1,104235,Note_off_c,0,39,0 +1,104292,Note_on_c,0,38,87 +1,104294,Note_on_c,0,39,77 +1,104367,Note_off_c,0,38,0 +1,104369,Note_off_c,0,39,0 +1,104400,Note_on_c,0,36,121 +1,104400,Note_on_c,0,39,52 +1,104475,Note_off_c,0,36,0 +1,104475,Note_off_c,0,39,0 +1,104523,Note_on_c,0,38,80 +1,104598,Note_off_c,0,38,0 +1,104640,Note_on_c,0,39,104 +1,104640,Note_on_c,0,44,39 +1,104715,Note_off_c,0,39,0 +1,104715,Note_off_c,0,44,0 +1,104763,Note_on_c,0,37,15 +1,104763,Note_on_c,0,39,11 +1,104838,Note_off_c,0,37,0 +1,104838,Note_off_c,0,39,0 +1,104880,Note_on_c,0,37,87 +1,104880,Note_on_c,0,39,52 +1,104955,Note_off_c,0,37,0 +1,104955,Note_off_c,0,39,0 +1,105007,Note_on_c,0,36,3 +1,105082,Note_off_c,0,36,0 +1,105120,Note_on_c,0,38,80 +1,105120,Note_on_c,0,39,108 +1,105120,Note_on_c,0,42,121 +1,105195,Note_off_c,0,38,0 +1,105195,Note_off_c,0,39,0 +1,105210,Note_off_c,0,42,0 +1,105243,Note_on_c,0,36,14 +1,105243,Note_on_c,0,39,65 +1,105318,Note_off_c,0,36,0 +1,105318,Note_off_c,0,39,0 +1,105483,Note_on_c,0,36,108 +1,105483,Note_on_c,0,41,104 +1,105558,Note_off_c,0,41,0 +1,105558,Note_on_c,0,36,0 +1,105723,Note_on_c,0,39,71 +1,105798,Note_off_c,0,39,0 +1,105840,Note_on_c,0,39,52 +1,105840,Note_on_c,0,45,70 +1,105915,Note_off_c,0,39,0 +1,105915,Note_off_c,0,45,0 +1,106080,Note_on_c,0,38,91 +1,106080,Note_on_c,0,39,104 +1,106155,Note_off_c,0,38,0 +1,106155,Note_off_c,0,39,0 +1,106560,Note_on_c,0,36,121 +1,106560,Note_on_c,0,39,104 +1,106560,Note_on_c,0,44,39 +1,106635,Note_off_c,0,36,0 +1,106635,Note_off_c,0,39,0 +1,106635,Note_off_c,0,44,0 +1,106800,Note_on_c,0,37,87 +1,106800,Note_on_c,0,39,52 +1,106875,Note_off_c,0,37,0 +1,106875,Note_off_c,0,39,0 +1,106927,Note_on_c,0,36,95 +1,107002,Note_off_c,0,36,0 +1,107040,Note_on_c,0,38,80 +1,107040,Note_on_c,0,39,108 +1,107040,Note_on_c,0,42,121 +1,107115,Note_off_c,0,38,0 +1,107115,Note_off_c,0,39,0 +1,107130,Note_off_c,0,42,0 +1,107163,Note_on_c,0,36,14 +1,107163,Note_on_c,0,39,65 +1,107238,Note_off_c,0,36,0 +1,107238,Note_off_c,0,39,0 +1,107403,Note_on_c,0,36,108 +1,107403,Note_on_c,0,41,104 +1,107478,Note_off_c,0,41,0 +1,107478,Note_on_c,0,36,0 +1,107643,Note_on_c,0,39,71 +1,107718,Note_off_c,0,39,0 +1,107760,Note_on_c,0,39,52 +1,107760,Note_on_c,0,45,70 +1,107835,Note_off_c,0,39,0 +1,107835,Note_off_c,0,45,0 +1,108000,Note_on_c,0,38,91 +1,108000,Note_on_c,0,39,104 +1,108075,Note_off_c,0,38,0 +1,108075,Note_off_c,0,39,0 +1,108132,Note_on_c,0,38,87 +1,108134,Note_on_c,0,39,77 +1,108207,Note_off_c,0,38,0 +1,108209,Note_off_c,0,39,0 +1,108240,Note_on_c,0,36,121 +1,108240,Note_on_c,0,39,52 +1,108315,Note_off_c,0,36,0 +1,108315,Note_off_c,0,39,0 +1,108363,Note_on_c,0,38,80 +1,108438,Note_off_c,0,38,0 +1,108480,Note_on_c,0,39,104 +1,108480,Note_on_c,0,44,39 +1,108555,Note_off_c,0,39,0 +1,108555,Note_off_c,0,44,0 +1,108603,Note_on_c,0,37,15 +1,108603,Note_on_c,0,39,11 +1,108678,Note_off_c,0,37,0 +1,108678,Note_off_c,0,39,0 +1,108720,Note_on_c,0,37,87 +1,108720,Note_on_c,0,39,52 +1,108795,Note_off_c,0,37,0 +1,108795,Note_off_c,0,39,0 +1,108960,Note_on_c,0,38,80 +1,108960,Note_on_c,0,39,108 +1,108960,Note_on_c,0,42,121 +1,109035,Note_off_c,0,38,0 +1,109035,Note_off_c,0,39,0 +1,109050,Note_off_c,0,42,0 +1,109083,Note_on_c,0,36,14 +1,109158,Note_off_c,0,36,0 +1,109323,Note_on_c,0,36,108 +1,109323,Note_on_c,0,41,104 +1,109398,Note_off_c,0,41,0 +1,109398,Note_on_c,0,36,0 +1,109563,Note_on_c,0,39,71 +1,109638,Note_off_c,0,39,0 +1,109680,Note_on_c,0,39,52 +1,109680,Note_on_c,0,45,70 +1,109755,Note_off_c,0,39,0 +1,109755,Note_off_c,0,45,0 +1,109920,Note_on_c,0,38,91 +1,109920,Note_on_c,0,39,104 +1,109995,Note_off_c,0,38,0 +1,109995,Note_off_c,0,39,0 +1,110054,Note_on_c,0,39,77 +1,110129,Note_off_c,0,39,0 +1,110160,Note_on_c,0,36,121 +1,110160,Note_on_c,0,39,52 +1,110235,Note_off_c,0,36,0 +1,110235,Note_off_c,0,39,0 +1,110283,Note_on_c,0,38,80 +1,110358,Note_off_c,0,38,0 +1,110400,Note_on_c,0,39,104 +1,110400,Note_on_c,0,44,39 +1,110475,Note_off_c,0,39,0 +1,110475,Note_off_c,0,44,0 +1,110523,Note_on_c,0,37,15 +1,110523,Note_on_c,0,39,11 +1,110598,Note_off_c,0,37,0 +1,110598,Note_off_c,0,39,0 +1,110640,Note_on_c,0,37,87 +1,110640,Note_on_c,0,39,52 +1,110715,Note_off_c,0,37,0 +1,110715,Note_off_c,0,39,0 +1,110767,Note_on_c,0,36,51 +1,110842,Note_off_c,0,36,0 +1,110880,Note_on_c,0,38,80 +1,110880,Note_on_c,0,39,108 +1,110880,Note_on_c,0,42,121 +1,110955,Note_off_c,0,38,0 +1,110955,Note_off_c,0,39,0 +1,110970,Note_off_c,0,42,0 +1,111003,Note_on_c,0,36,14 +1,111003,Note_on_c,0,39,65 +1,111078,Note_off_c,0,36,0 +1,111078,Note_off_c,0,39,0 +1,111243,Note_on_c,0,36,108 +1,111243,Note_on_c,0,41,104 +1,111318,Note_off_c,0,41,0 +1,111318,Note_on_c,0,36,0 +1,111483,Note_on_c,0,39,71 +1,111558,Note_off_c,0,39,0 +1,111600,Note_on_c,0,39,52 +1,111600,Note_on_c,0,45,70 +1,111675,Note_off_c,0,39,0 +1,111675,Note_off_c,0,45,0 +1,111840,Note_on_c,0,38,91 +1,111840,Note_on_c,0,39,104 +1,111915,Note_off_c,0,38,0 +1,111915,Note_off_c,0,39,0 +1,111972,Note_on_c,0,38,87 +1,111974,Note_on_c,0,39,77 +1,112047,Note_off_c,0,38,0 +1,112049,Note_off_c,0,39,0 +1,112080,Note_on_c,0,36,121 +1,112080,Note_on_c,0,39,52 +1,112155,Note_off_c,0,36,0 +1,112155,Note_off_c,0,39,0 +1,112203,Note_on_c,0,38,80 +1,112278,Note_off_c,0,38,0 +1,112320,Note_on_c,0,39,104 +1,112320,Note_on_c,0,44,39 +1,112395,Note_off_c,0,39,0 +1,112395,Note_off_c,0,44,0 +1,112443,Note_on_c,0,37,15 +1,112443,Note_on_c,0,39,11 +1,112518,Note_off_c,0,37,0 +1,112518,Note_off_c,0,39,0 +1,112560,Note_on_c,0,37,87 +1,112560,Note_on_c,0,39,52 +1,112635,Note_off_c,0,37,0 +1,112635,Note_off_c,0,39,0 +1,112687,Note_on_c,0,36,3 +1,112762,Note_off_c,0,36,0 +1,112800,Note_on_c,0,38,80 +1,112800,Note_on_c,0,39,108 +1,112800,Note_on_c,0,42,121 +1,112875,Note_off_c,0,38,0 +1,112875,Note_off_c,0,39,0 +1,112890,Note_off_c,0,42,0 +1,112923,Note_on_c,0,36,14 +1,112923,Note_on_c,0,39,65 +1,112998,Note_off_c,0,36,0 +1,112998,Note_off_c,0,39,0 +1,113163,Note_on_c,0,36,108 +1,113163,Note_on_c,0,41,104 +1,113238,Note_off_c,0,41,0 +1,113238,Note_on_c,0,36,0 +1,113403,Note_on_c,0,39,71 +1,113478,Note_off_c,0,39,0 +1,113520,Note_on_c,0,39,52 +1,113520,Note_on_c,0,45,70 +1,113595,Note_off_c,0,39,0 +1,113595,Note_off_c,0,45,0 +1,113760,Note_on_c,0,38,91 +1,113760,Note_on_c,0,39,104 +1,113835,Note_off_c,0,38,0 +1,113835,Note_off_c,0,39,0 +1,113892,Note_on_c,0,38,87 +1,113894,Note_on_c,0,39,77 +1,113967,Note_off_c,0,38,0 +1,113969,Note_off_c,0,39,0 +1,114000,Note_on_c,0,36,121 +1,114000,Note_on_c,0,39,52 +1,114075,Note_off_c,0,36,0 +1,114075,Note_off_c,0,39,0 +1,114123,Note_on_c,0,38,80 +1,114198,Note_off_c,0,38,0 +1,114240,Note_on_c,0,39,104 +1,114240,Note_on_c,0,44,39 +1,114315,Note_off_c,0,39,0 +1,114315,Note_off_c,0,44,0 +1,114480,Note_on_c,0,37,87 +1,114480,Note_on_c,0,39,52 +1,114555,Note_off_c,0,37,0 +1,114555,Note_off_c,0,39,0 +1,114607,Note_on_c,0,36,95 +1,114682,Note_off_c,0,36,0 +1,114720,Note_on_c,0,38,80 +1,114720,Note_on_c,0,39,108 +1,114720,Note_on_c,0,42,121 +1,114795,Note_off_c,0,38,0 +1,114795,Note_off_c,0,39,0 +1,114810,Note_off_c,0,42,0 +1,114843,Note_on_c,0,36,14 +1,114843,Note_on_c,0,39,65 +1,114918,Note_off_c,0,36,0 +1,114918,Note_off_c,0,39,0 +1,115083,Note_on_c,0,36,108 +1,115083,Note_on_c,0,41,104 +1,115158,Note_off_c,0,41,0 +1,115158,Note_on_c,0,36,0 +1,115323,Note_on_c,0,39,71 +1,115398,Note_off_c,0,39,0 +1,115440,Note_on_c,0,39,52 +1,115440,Note_on_c,0,45,70 +1,115515,Note_off_c,0,39,0 +1,115515,Note_off_c,0,45,0 +1,115680,Note_on_c,0,38,91 +1,115680,Note_on_c,0,39,104 +1,115755,Note_off_c,0,38,0 +1,115755,Note_off_c,0,39,0 +1,115812,Note_on_c,0,38,87 +1,115814,Note_on_c,0,39,77 +1,115887,Note_off_c,0,38,0 +1,115889,Note_off_c,0,39,0 +1,115920,Note_on_c,0,36,121 +1,115920,Note_on_c,0,39,52 +1,115995,Note_off_c,0,36,0 +1,115995,Note_off_c,0,39,0 +1,116043,Note_on_c,0,38,80 +1,116118,Note_off_c,0,38,0 +1,116160,Note_on_c,0,39,104 +1,116160,Note_on_c,0,44,39 +1,116235,Note_off_c,0,39,0 +1,116235,Note_off_c,0,44,0 +1,116283,Note_on_c,0,37,15 +1,116283,Note_on_c,0,39,11 +1,116358,Note_off_c,0,37,0 +1,116358,Note_off_c,0,39,0 +1,116400,Note_on_c,0,37,87 +1,116400,Note_on_c,0,39,52 +1,116475,Note_off_c,0,37,0 +1,116475,Note_off_c,0,39,0 +1,116640,Note_on_c,0,38,80 +1,116640,Note_on_c,0,39,108 +1,116715,Note_off_c,0,38,0 +1,116715,Note_off_c,0,39,0 +1,116763,Note_on_c,0,36,14 +1,116838,Note_off_c,0,36,0 +1,117003,Note_on_c,0,36,108 +1,117003,Note_on_c,0,41,104 +1,117078,Note_off_c,0,41,0 +1,117078,Note_on_c,0,36,0 +1,117243,Note_on_c,0,39,71 +1,117318,Note_off_c,0,39,0 +1,117360,Note_on_c,0,39,52 +1,117360,Note_on_c,0,45,70 +1,117435,Note_off_c,0,39,0 +1,117435,Note_off_c,0,45,0 +1,117600,Note_on_c,0,38,91 +1,117600,Note_on_c,0,39,104 +1,117675,Note_off_c,0,38,0 +1,117675,Note_off_c,0,39,0 +1,117734,Note_on_c,0,39,77 +1,117809,Note_off_c,0,39,0 +1,117840,Note_on_c,0,36,121 +1,117840,Note_on_c,0,39,52 +1,117915,Note_off_c,0,36,0 +1,117915,Note_off_c,0,39,0 +1,117963,Note_on_c,0,38,80 +1,118038,Note_off_c,0,38,0 +1,118080,Note_on_c,0,39,104 +1,118080,Note_on_c,0,44,39 +1,118155,Note_off_c,0,39,0 +1,118155,Note_off_c,0,44,0 +1,118203,Note_on_c,0,37,15 +1,118203,Note_on_c,0,39,11 +1,118278,Note_off_c,0,37,0 +1,118278,Note_off_c,0,39,0 +1,118320,Note_on_c,0,37,87 +1,118320,Note_on_c,0,39,52 +1,118395,Note_off_c,0,37,0 +1,118395,Note_off_c,0,39,0 +1,118447,Note_on_c,0,36,51 +1,118522,Note_off_c,0,36,0 +1,118560,Note_on_c,0,38,80 +1,118560,Note_on_c,0,39,108 +1,118635,Note_off_c,0,38,0 +1,118635,Note_off_c,0,39,0 +1,118683,Note_on_c,0,36,14 +1,118683,Note_on_c,0,39,65 +1,118758,Note_off_c,0,36,0 +1,118758,Note_off_c,0,39,0 +1,118923,Note_on_c,0,36,108 +1,118923,Note_on_c,0,41,104 +1,118998,Note_off_c,0,41,0 +1,118998,Note_on_c,0,36,0 +1,119163,Note_on_c,0,39,71 +1,119238,Note_off_c,0,39,0 +1,119280,Note_on_c,0,39,52 +1,119280,Note_on_c,0,45,70 +1,119355,Note_off_c,0,39,0 +1,119355,Note_off_c,0,45,0 +1,119520,Note_on_c,0,38,91 +1,119520,Note_on_c,0,39,104 +1,119595,Note_off_c,0,38,0 +1,119595,Note_off_c,0,39,0 +1,119652,Note_on_c,0,38,87 +1,119654,Note_on_c,0,39,77 +1,119727,Note_off_c,0,38,0 +1,119729,Note_off_c,0,39,0 +1,119760,Note_on_c,0,36,121 +1,119760,Note_on_c,0,39,52 +1,119835,Note_off_c,0,36,0 +1,119835,Note_off_c,0,39,0 +1,119883,Note_on_c,0,38,80 +1,119958,Note_off_c,0,38,0 +1,120000,Note_on_c,0,39,104 +1,120000,Note_on_c,0,44,39 +1,120075,Note_off_c,0,39,0 +1,120075,Note_off_c,0,44,0 +1,120123,Note_on_c,0,37,15 +1,120123,Note_on_c,0,39,11 +1,120198,Note_off_c,0,37,0 +1,120198,Note_off_c,0,39,0 +1,120240,Note_on_c,0,37,87 +1,120240,Note_on_c,0,39,52 +1,120315,Note_off_c,0,37,0 +1,120315,Note_off_c,0,39,0 +1,120367,Note_on_c,0,36,3 +1,120442,Note_off_c,0,36,0 +1,120480,Note_on_c,0,38,80 +1,120480,Note_on_c,0,39,108 +1,120555,Note_off_c,0,38,0 +1,120555,Note_off_c,0,39,0 +1,120603,Note_on_c,0,36,14 +1,120603,Note_on_c,0,39,65 +1,120678,Note_off_c,0,36,0 +1,120678,Note_off_c,0,39,0 +1,120843,Note_on_c,0,36,108 +1,120843,Note_on_c,0,41,104 +1,120918,Note_off_c,0,41,0 +1,120918,Note_on_c,0,36,0 +1,121083,Note_on_c,0,39,71 +1,121158,Note_off_c,0,39,0 +1,121200,Note_on_c,0,39,52 +1,121200,Note_on_c,0,45,70 +1,121275,Note_off_c,0,39,0 +1,121275,Note_off_c,0,45,0 +1,121440,Note_on_c,0,38,91 +1,121440,Note_on_c,0,39,104 +1,121515,Note_off_c,0,38,0 +1,121515,Note_off_c,0,39,0 +1,121572,Note_on_c,0,38,87 +1,121574,Note_on_c,0,39,77 +1,121647,Note_off_c,0,38,0 +1,121649,Note_off_c,0,39,0 +1,121680,Note_on_c,0,36,121 +1,121680,Note_on_c,0,39,52 +1,121755,Note_off_c,0,36,0 +1,121755,Note_off_c,0,39,0 +1,121803,Note_on_c,0,38,80 +1,121878,Note_off_c,0,38,0 +1,121920,Note_on_c,0,39,104 +1,121920,Note_on_c,0,44,39 +1,121995,Note_off_c,0,39,0 +1,121995,Note_off_c,0,44,0 +1,122160,Note_on_c,0,37,87 +1,122160,Note_on_c,0,39,52 +1,122235,Note_off_c,0,37,0 +1,122235,Note_off_c,0,39,0 +1,122287,Note_on_c,0,36,95 +1,122362,Note_off_c,0,36,0 +1,122400,Note_on_c,0,38,80 +1,122400,Note_on_c,0,39,108 +1,122475,Note_off_c,0,38,0 +1,122475,Note_off_c,0,39,0 +1,122523,Note_on_c,0,36,14 +1,122523,Note_on_c,0,39,65 +1,122598,Note_off_c,0,36,0 +1,122598,Note_off_c,0,39,0 +1,122760,Note_on_c,0,42,121 +1,122763,Note_on_c,0,36,108 +1,122763,Note_on_c,0,41,104 +1,122838,Note_off_c,0,41,0 +1,122838,Note_on_c,0,36,0 +1,122850,Note_off_c,0,42,0 +1,124320,Note_on_c,0,42,121 +1,124410,Note_off_c,0,42,0 +1,126240,Note_on_c,0,42,121 +1,126330,Note_off_c,0,42,0 +1,128160,Note_on_c,0,42,121 +1,128250,Note_off_c,0,42,0 +1,129483,Note_on_c,0,36,121 +1,129483,Note_on_c,0,38,80 +1,129558,Note_off_c,0,36,0 +1,129558,Note_off_c,0,38,0 +1,129601,Note_on_c,0,39,104 +1,129601,Note_on_c,0,44,39 +1,129676,Note_off_c,0,39,0 +1,129676,Note_off_c,0,44,0 +1,129724,Note_on_c,0,37,15 +1,129724,Note_on_c,0,39,11 +1,129799,Note_off_c,0,37,0 +1,129799,Note_off_c,0,39,0 +1,129840,Note_on_c,0,36,79 +1,129915,Note_off_c,0,36,0 +1,129963,Note_on_c,0,37,70 +1,129963,Note_on_c,0,39,74 +1,129968,Note_on_c,0,36,33 +1,130039,Note_off_c,0,37,0 +1,130039,Note_off_c,0,39,0 +1,130044,Note_off_c,0,36,0 +1,130080,Note_on_c,0,42,121 +1,130080,Note_on_c,0,38,112 +1,130080,Note_on_c,0,39,88 +1,130155,Note_off_c,0,38,0 +1,130155,Note_off_c,0,39,0 +1,130170,Note_off_c,0,42,0 +1,130320,Note_on_c,0,39,22 +1,130320,Note_on_c,0,40,61 +1,130395,Note_off_c,0,39,0 +1,130395,Note_off_c,0,40,0 +1,130443,Note_on_c,0,36,108 +1,130443,Note_on_c,0,41,104 +1,130518,Note_off_c,0,41,0 +1,130518,Note_on_c,0,36,0 +1,130689,Note_on_c,0,39,42 +1,130764,Note_off_c,0,39,0 +1,130800,Note_on_c,0,39,71 +1,130875,Note_off_c,0,39,0 +1,130923,Note_on_c,0,43,122 +1,130929,Note_on_c,0,36,89 +1,130999,Note_off_c,0,43,0 +1,131005,Note_off_c,0,36,0 +1,131040,Note_on_c,0,38,106 +1,131040,Note_on_c,0,39,104 +1,131115,Note_off_c,0,38,0 +1,131115,Note_off_c,0,39,0 +1,132000,Note_on_c,0,42,121 +1,132090,Note_off_c,0,42,0 +1,133920,Note_on_c,0,42,121 +1,134010,Note_off_c,0,42,0 +1,135840,Note_on_c,0,42,121 +1,135930,Note_off_c,0,42,0 +1,137163,Note_on_c,0,36,121 +1,137163,Note_on_c,0,38,80 +1,137238,Note_off_c,0,36,0 +1,137238,Note_off_c,0,38,0 +1,137281,Note_on_c,0,39,104 +1,137281,Note_on_c,0,44,39 +1,137356,Note_off_c,0,39,0 +1,137356,Note_off_c,0,44,0 +1,137404,Note_on_c,0,37,15 +1,137404,Note_on_c,0,39,11 +1,137479,Note_off_c,0,37,0 +1,137479,Note_off_c,0,39,0 +1,137520,Note_on_c,0,36,79 +1,137595,Note_off_c,0,36,0 +1,137643,Note_on_c,0,37,70 +1,137643,Note_on_c,0,39,74 +1,137648,Note_on_c,0,36,33 +1,137719,Note_off_c,0,37,0 +1,137719,Note_off_c,0,39,0 +1,137724,Note_off_c,0,36,0 +1,137760,Note_on_c,0,42,121 +1,137760,Note_on_c,0,38,112 +1,137760,Note_on_c,0,39,88 +1,137835,Note_off_c,0,38,0 +1,137835,Note_off_c,0,39,0 +1,137850,Note_off_c,0,42,0 +1,138000,Note_on_c,0,39,22 +1,138000,Note_on_c,0,40,61 +1,138075,Note_off_c,0,39,0 +1,138075,Note_off_c,0,40,0 +1,138123,Note_on_c,0,36,108 +1,138123,Note_on_c,0,41,104 +1,138198,Note_off_c,0,41,0 +1,138198,Note_on_c,0,36,0 +1,138369,Note_on_c,0,39,42 +1,138444,Note_off_c,0,39,0 +1,138481,Note_on_c,0,39,71 +1,138556,Note_off_c,0,39,0 +1,138604,Note_on_c,0,43,122 +1,138610,Note_on_c,0,36,89 +1,138678,Note_off_c,0,43,0 +1,138684,Note_off_c,0,36,0 +1,138721,Note_on_c,0,38,106 +1,138721,Note_on_c,0,39,104 +1,138796,Note_off_c,0,38,0 +1,138796,Note_off_c,0,39,0 +1,138961,Note_on_c,0,39,52 +1,139036,Note_off_c,0,39,0 +1,139084,Note_on_c,0,36,121 +1,139084,Note_on_c,0,38,80 +1,139159,Note_off_c,0,36,0 +1,139159,Note_off_c,0,38,0 +1,139200,Note_on_c,0,39,104 +1,139200,Note_on_c,0,44,39 +1,139275,Note_off_c,0,39,0 +1,139275,Note_off_c,0,44,0 +1,139323,Note_on_c,0,37,15 +1,139323,Note_on_c,0,39,11 +1,139398,Note_off_c,0,37,0 +1,139398,Note_off_c,0,39,0 +1,139441,Note_on_c,0,36,79 +1,139516,Note_off_c,0,36,0 +1,139564,Note_on_c,0,37,70 +1,139564,Note_on_c,0,39,74 +1,139569,Note_on_c,0,36,33 +1,139638,Note_off_c,0,37,0 +1,139638,Note_off_c,0,39,0 +1,139643,Note_off_c,0,36,0 +1,139680,Note_on_c,0,42,121 +1,139680,Note_on_c,0,38,112 +1,139680,Note_on_c,0,39,88 +1,139755,Note_off_c,0,38,0 +1,139755,Note_off_c,0,39,0 +1,139770,Note_off_c,0,42,0 +1,139920,Note_on_c,0,39,22 +1,139920,Note_on_c,0,40,61 +1,139995,Note_off_c,0,39,0 +1,139995,Note_off_c,0,40,0 +1,140043,Note_on_c,0,36,108 +1,140043,Note_on_c,0,41,104 +1,140118,Note_off_c,0,41,0 +1,140118,Note_on_c,0,36,0 +1,140289,Note_on_c,0,39,42 +1,140364,Note_off_c,0,39,0 +1,140401,Note_on_c,0,39,71 +1,140476,Note_off_c,0,39,0 +1,140524,Note_on_c,0,43,122 +1,140530,Note_on_c,0,36,89 +1,140598,Note_off_c,0,43,0 +1,140604,Note_off_c,0,36,0 +1,140641,Note_on_c,0,38,106 +1,140641,Note_on_c,0,39,104 +1,140716,Note_off_c,0,38,0 +1,140716,Note_off_c,0,39,0 +1,140881,Note_on_c,0,39,52 +1,140956,Note_off_c,0,39,0 +1,141004,Note_on_c,0,36,121 +1,141004,Note_on_c,0,38,80 +1,141079,Note_off_c,0,36,0 +1,141079,Note_off_c,0,38,0 +1,141120,Note_on_c,0,39,104 +1,141120,Note_on_c,0,44,39 +1,141195,Note_off_c,0,39,0 +1,141195,Note_off_c,0,44,0 +1,141243,Note_on_c,0,37,15 +1,141243,Note_on_c,0,39,11 +1,141318,Note_off_c,0,37,0 +1,141318,Note_off_c,0,39,0 +1,141361,Note_on_c,0,36,79 +1,141436,Note_off_c,0,36,0 +1,141484,Note_on_c,0,37,70 +1,141484,Note_on_c,0,39,74 +1,141489,Note_on_c,0,36,33 +1,141558,Note_off_c,0,37,0 +1,141558,Note_off_c,0,39,0 +1,141563,Note_off_c,0,36,0 +1,141600,Note_on_c,0,42,121 +1,141600,Note_on_c,0,38,112 +1,141600,Note_on_c,0,39,88 +1,141675,Note_off_c,0,38,0 +1,141675,Note_off_c,0,39,0 +1,141690,Note_off_c,0,42,0 +1,141840,Note_on_c,0,39,22 +1,141840,Note_on_c,0,40,61 +1,141915,Note_off_c,0,39,0 +1,141915,Note_off_c,0,40,0 +1,141963,Note_on_c,0,36,108 +1,141963,Note_on_c,0,41,104 +1,142038,Note_off_c,0,41,0 +1,142038,Note_on_c,0,36,0 +1,142209,Note_on_c,0,39,42 +1,142284,Note_off_c,0,39,0 +1,142321,Note_on_c,0,39,71 +1,142396,Note_off_c,0,39,0 +1,142444,Note_on_c,0,43,122 +1,142450,Note_on_c,0,36,89 +1,142518,Note_off_c,0,43,0 +1,142524,Note_off_c,0,36,0 +1,142561,Note_on_c,0,38,106 +1,142561,Note_on_c,0,39,104 +1,142636,Note_off_c,0,38,0 +1,142636,Note_off_c,0,39,0 +1,142801,Note_on_c,0,39,52 +1,142876,Note_off_c,0,39,0 +1,142924,Note_on_c,0,36,121 +1,142924,Note_on_c,0,38,80 +1,142999,Note_off_c,0,36,0 +1,142999,Note_off_c,0,38,0 +1,143040,Note_on_c,0,39,104 +1,143040,Note_on_c,0,44,39 +1,143115,Note_off_c,0,39,0 +1,143115,Note_off_c,0,44,0 +1,143163,Note_on_c,0,37,15 +1,143163,Note_on_c,0,39,11 +1,143238,Note_off_c,0,37,0 +1,143238,Note_off_c,0,39,0 +1,143281,Note_on_c,0,36,79 +1,143356,Note_off_c,0,36,0 +1,143404,Note_on_c,0,37,70 +1,143404,Note_on_c,0,39,74 +1,143409,Note_on_c,0,36,33 +1,143478,Note_off_c,0,37,0 +1,143478,Note_off_c,0,39,0 +1,143483,Note_off_c,0,36,0 +1,143520,Note_on_c,0,42,121 +1,143520,Note_on_c,0,38,112 +1,143520,Note_on_c,0,39,88 +1,143595,Note_off_c,0,38,0 +1,143595,Note_off_c,0,39,0 +1,143610,Note_off_c,0,42,0 +1,143760,Note_on_c,0,39,22 +1,143760,Note_on_c,0,40,61 +1,143835,Note_off_c,0,39,0 +1,143835,Note_off_c,0,40,0 +1,143883,Note_on_c,0,36,108 +1,143883,Note_on_c,0,41,104 +1,143958,Note_off_c,0,41,0 +1,143958,Note_on_c,0,36,0 +1,144129,Note_on_c,0,39,42 +1,144204,Note_off_c,0,39,0 +1,144241,Note_on_c,0,39,71 +1,144316,Note_off_c,0,39,0 +1,144364,Note_on_c,0,43,122 +1,144370,Note_on_c,0,36,89 +1,144438,Note_off_c,0,43,0 +1,144444,Note_off_c,0,36,0 +1,144481,Note_on_c,0,38,106 +1,144481,Note_on_c,0,39,104 +1,144556,Note_off_c,0,38,0 +1,144556,Note_off_c,0,39,0 +1,144721,Note_on_c,0,39,52 +1,144796,Note_off_c,0,39,0 +1,144844,Note_on_c,0,36,121 +1,144844,Note_on_c,0,38,80 +1,144919,Note_off_c,0,36,0 +1,144919,Note_off_c,0,38,0 +1,144960,Note_on_c,0,39,104 +1,144960,Note_on_c,0,44,39 +1,145035,Note_off_c,0,39,0 +1,145035,Note_off_c,0,44,0 +1,145083,Note_on_c,0,37,15 +1,145083,Note_on_c,0,39,11 +1,145158,Note_off_c,0,37,0 +1,145158,Note_off_c,0,39,0 +1,145201,Note_on_c,0,36,79 +1,145276,Note_off_c,0,36,0 +1,145324,Note_on_c,0,37,70 +1,145324,Note_on_c,0,39,74 +1,145329,Note_on_c,0,36,33 +1,145398,Note_off_c,0,37,0 +1,145398,Note_off_c,0,39,0 +1,145403,Note_off_c,0,36,0 +1,145440,Note_on_c,0,42,121 +1,145440,Note_on_c,0,38,112 +1,145440,Note_on_c,0,39,88 +1,145515,Note_off_c,0,38,0 +1,145515,Note_off_c,0,39,0 +1,145530,Note_off_c,0,42,0 +1,145680,Note_on_c,0,39,22 +1,145680,Note_on_c,0,40,61 +1,145755,Note_off_c,0,39,0 +1,145755,Note_off_c,0,40,0 +1,145803,Note_on_c,0,36,108 +1,145803,Note_on_c,0,41,104 +1,145878,Note_off_c,0,41,0 +1,145878,Note_on_c,0,36,0 +1,146049,Note_on_c,0,39,42 +1,146124,Note_off_c,0,39,0 +1,146161,Note_on_c,0,39,71 +1,146236,Note_off_c,0,39,0 +1,146284,Note_on_c,0,43,122 +1,146290,Note_on_c,0,36,89 +1,146358,Note_off_c,0,43,0 +1,146364,Note_off_c,0,36,0 +1,146401,Note_on_c,0,38,106 +1,146401,Note_on_c,0,39,104 +1,146476,Note_off_c,0,38,0 +1,146476,Note_off_c,0,39,0 +1,146641,Note_on_c,0,39,52 +1,146716,Note_off_c,0,39,0 +1,146764,Note_on_c,0,36,121 +1,146764,Note_on_c,0,38,80 +1,146839,Note_off_c,0,36,0 +1,146839,Note_off_c,0,38,0 +1,146880,Note_on_c,0,39,104 +1,146880,Note_on_c,0,44,39 +1,146955,Note_off_c,0,39,0 +1,146955,Note_off_c,0,44,0 +1,147003,Note_on_c,0,37,15 +1,147003,Note_on_c,0,39,11 +1,147078,Note_off_c,0,37,0 +1,147078,Note_off_c,0,39,0 +1,147121,Note_on_c,0,36,79 +1,147196,Note_off_c,0,36,0 +1,147244,Note_on_c,0,37,70 +1,147244,Note_on_c,0,39,74 +1,147249,Note_on_c,0,36,33 +1,147318,Note_off_c,0,37,0 +1,147318,Note_off_c,0,39,0 +1,147323,Note_off_c,0,36,0 +1,147360,Note_on_c,0,42,121 +1,147360,Note_on_c,0,38,112 +1,147360,Note_on_c,0,39,88 +1,147435,Note_off_c,0,38,0 +1,147435,Note_off_c,0,39,0 +1,147450,Note_off_c,0,42,0 +1,147600,Note_on_c,0,39,22 +1,147600,Note_on_c,0,40,61 +1,147675,Note_off_c,0,39,0 +1,147675,Note_off_c,0,40,0 +1,147723,Note_on_c,0,36,108 +1,147723,Note_on_c,0,41,104 +1,147798,Note_off_c,0,41,0 +1,147798,Note_on_c,0,36,0 +1,147969,Note_on_c,0,39,42 +1,148044,Note_off_c,0,39,0 +1,148081,Note_on_c,0,39,71 +1,148156,Note_off_c,0,39,0 +1,148204,Note_on_c,0,43,122 +1,148210,Note_on_c,0,36,89 +1,148278,Note_off_c,0,43,0 +1,148284,Note_off_c,0,36,0 +1,148321,Note_on_c,0,38,106 +1,148321,Note_on_c,0,39,104 +1,148396,Note_off_c,0,38,0 +1,148396,Note_off_c,0,39,0 +1,148561,Note_on_c,0,39,52 +1,148636,Note_off_c,0,39,0 +1,148684,Note_on_c,0,36,121 +1,148684,Note_on_c,0,38,80 +1,148759,Note_off_c,0,36,0 +1,148759,Note_off_c,0,38,0 +1,148800,Note_on_c,0,39,104 +1,148800,Note_on_c,0,44,39 +1,148875,Note_off_c,0,39,0 +1,148875,Note_off_c,0,44,0 +1,148923,Note_on_c,0,37,15 +1,148923,Note_on_c,0,39,11 +1,148998,Note_off_c,0,37,0 +1,148998,Note_off_c,0,39,0 +1,149041,Note_on_c,0,36,79 +1,149116,Note_off_c,0,36,0 +1,149164,Note_on_c,0,37,70 +1,149164,Note_on_c,0,39,74 +1,149169,Note_on_c,0,36,33 +1,149238,Note_off_c,0,37,0 +1,149238,Note_off_c,0,39,0 +1,149243,Note_off_c,0,36,0 +1,149280,Note_on_c,0,42,121 +1,149280,Note_on_c,0,38,112 +1,149280,Note_on_c,0,39,88 +1,149355,Note_off_c,0,38,0 +1,149355,Note_off_c,0,39,0 +1,149370,Note_off_c,0,42,0 +1,149520,Note_on_c,0,39,22 +1,149520,Note_on_c,0,40,61 +1,149595,Note_off_c,0,39,0 +1,149595,Note_off_c,0,40,0 +1,149643,Note_on_c,0,36,108 +1,149643,Note_on_c,0,41,104 +1,149718,Note_off_c,0,41,0 +1,149718,Note_on_c,0,36,0 +1,149889,Note_on_c,0,39,42 +1,149964,Note_off_c,0,39,0 +1,150001,Note_on_c,0,39,71 +1,150076,Note_off_c,0,39,0 +1,150124,Note_on_c,0,43,122 +1,150130,Note_on_c,0,36,89 +1,150198,Note_off_c,0,43,0 +1,150204,Note_off_c,0,36,0 +1,150241,Note_on_c,0,38,106 +1,150241,Note_on_c,0,39,104 +1,150316,Note_off_c,0,38,0 +1,150316,Note_off_c,0,39,0 +1,150481,Note_on_c,0,39,52 +1,150556,Note_off_c,0,39,0 +1,150604,Note_on_c,0,36,121 +1,150604,Note_on_c,0,38,80 +1,150679,Note_off_c,0,36,0 +1,150679,Note_off_c,0,38,0 +1,150720,Note_on_c,0,39,104 +1,150720,Note_on_c,0,44,39 +1,150795,Note_off_c,0,39,0 +1,150795,Note_off_c,0,44,0 +1,150843,Note_on_c,0,37,15 +1,150843,Note_on_c,0,39,11 +1,150918,Note_off_c,0,37,0 +1,150918,Note_off_c,0,39,0 +1,150961,Note_on_c,0,36,79 +1,151036,Note_off_c,0,36,0 +1,151084,Note_on_c,0,37,70 +1,151084,Note_on_c,0,39,74 +1,151089,Note_on_c,0,36,33 +1,151158,Note_off_c,0,37,0 +1,151158,Note_off_c,0,39,0 +1,151163,Note_off_c,0,36,0 +1,151200,Note_on_c,0,42,121 +1,151200,Note_on_c,0,38,112 +1,151200,Note_on_c,0,39,88 +1,151275,Note_off_c,0,38,0 +1,151275,Note_off_c,0,39,0 +1,151290,Note_off_c,0,42,0 +1,151440,Note_on_c,0,39,22 +1,151440,Note_on_c,0,40,61 +1,151515,Note_off_c,0,39,0 +1,151515,Note_off_c,0,40,0 +1,151563,Note_on_c,0,36,108 +1,151563,Note_on_c,0,41,104 +1,151638,Note_off_c,0,41,0 +1,151638,Note_on_c,0,36,0 +1,151809,Note_on_c,0,39,42 +1,151884,Note_off_c,0,39,0 +1,151921,Note_on_c,0,39,71 +1,151996,Note_off_c,0,39,0 +1,152044,Note_on_c,0,43,122 +1,152050,Note_on_c,0,36,89 +1,152118,Note_off_c,0,43,0 +1,152124,Note_off_c,0,36,0 +1,152161,Note_on_c,0,38,106 +1,152161,Note_on_c,0,39,104 +1,152236,Note_off_c,0,38,0 +1,152236,Note_off_c,0,39,0 +1,152401,Note_on_c,0,39,52 +1,152476,Note_off_c,0,39,0 +1,152524,Note_on_c,0,36,121 +1,152524,Note_on_c,0,38,80 +1,152599,Note_off_c,0,36,0 +1,152599,Note_off_c,0,38,0 +1,152640,Note_on_c,0,39,104 +1,152640,Note_on_c,0,44,39 +1,152715,Note_off_c,0,39,0 +1,152715,Note_off_c,0,44,0 +1,152763,Note_on_c,0,37,15 +1,152763,Note_on_c,0,39,11 +1,152838,Note_off_c,0,37,0 +1,152838,Note_off_c,0,39,0 +1,152881,Note_on_c,0,36,79 +1,152956,Note_off_c,0,36,0 +1,153004,Note_on_c,0,37,70 +1,153004,Note_on_c,0,39,74 +1,153009,Note_on_c,0,36,33 +1,153078,Note_off_c,0,37,0 +1,153078,Note_off_c,0,39,0 +1,153083,Note_off_c,0,36,0 +1,153120,Note_on_c,0,42,121 +1,153120,Note_on_c,0,38,112 +1,153120,Note_on_c,0,39,88 +1,153195,Note_off_c,0,38,0 +1,153195,Note_off_c,0,39,0 +1,153210,Note_off_c,0,42,0 +1,153360,Note_on_c,0,39,22 +1,153360,Note_on_c,0,40,61 +1,153435,Note_off_c,0,39,0 +1,153435,Note_off_c,0,40,0 +1,153483,Note_on_c,0,36,108 +1,153483,Note_on_c,0,41,104 +1,153558,Note_off_c,0,41,0 +1,153558,Note_on_c,0,36,0 +1,153729,Note_on_c,0,39,42 +1,153804,Note_off_c,0,39,0 +1,153841,Note_on_c,0,39,71 +1,153916,Note_off_c,0,39,0 +1,153964,Note_on_c,0,43,122 +1,153970,Note_on_c,0,36,89 +1,154038,Note_off_c,0,43,0 +1,154044,Note_off_c,0,36,0 +1,154081,Note_on_c,0,38,106 +1,154081,Note_on_c,0,39,104 +1,154156,Note_off_c,0,38,0 +1,154156,Note_off_c,0,39,0 +1,154321,Note_on_c,0,39,52 +1,154396,Note_off_c,0,39,0 +1,154444,Note_on_c,0,36,121 +1,154444,Note_on_c,0,38,80 +1,154519,Note_off_c,0,36,0 +1,154519,Note_off_c,0,38,0 +1,154560,Note_on_c,0,39,104 +1,154560,Note_on_c,0,44,39 +1,154635,Note_off_c,0,39,0 +1,154635,Note_off_c,0,44,0 +1,154683,Note_on_c,0,37,15 +1,154683,Note_on_c,0,39,11 +1,154758,Note_off_c,0,37,0 +1,154758,Note_off_c,0,39,0 +1,154801,Note_on_c,0,36,79 +1,154876,Note_off_c,0,36,0 +1,154924,Note_on_c,0,37,70 +1,154924,Note_on_c,0,39,74 +1,154929,Note_on_c,0,36,33 +1,154998,Note_off_c,0,37,0 +1,154998,Note_off_c,0,39,0 +1,155003,Note_off_c,0,36,0 +1,155041,Note_on_c,0,38,112 +1,155041,Note_on_c,0,39,88 +1,155116,Note_off_c,0,38,0 +1,155116,Note_off_c,0,39,0 +1,155281,Note_on_c,0,39,22 +1,155281,Note_on_c,0,40,61 +1,155356,Note_off_c,0,39,0 +1,155356,Note_off_c,0,40,0 +1,155404,Note_on_c,0,36,108 +1,155404,Note_on_c,0,41,104 +1,155479,Note_off_c,0,41,0 +1,155479,Note_on_c,0,36,0 +1,155650,Note_on_c,0,39,42 +1,155725,Note_off_c,0,39,0 +1,155760,Note_on_c,0,39,71 +1,155835,Note_off_c,0,39,0 +1,155883,Note_on_c,0,43,122 +1,155889,Note_on_c,0,36,89 +1,155959,Note_off_c,0,43,0 +1,155965,Note_off_c,0,36,0 +1,156000,Note_on_c,0,38,106 +1,156000,Note_on_c,0,39,104 +1,156075,Note_off_c,0,38,0 +1,156075,Note_off_c,0,39,0 +1,156240,Note_on_c,0,39,52 +1,156315,Note_off_c,0,39,0 +1,156363,Note_on_c,0,36,121 +1,156363,Note_on_c,0,38,80 +1,156438,Note_off_c,0,36,0 +1,156438,Note_off_c,0,38,0 +1,156481,Note_on_c,0,39,104 +1,156481,Note_on_c,0,44,39 +1,156556,Note_off_c,0,39,0 +1,156556,Note_off_c,0,44,0 +1,156604,Note_on_c,0,37,15 +1,156604,Note_on_c,0,39,11 +1,156679,Note_off_c,0,37,0 +1,156679,Note_off_c,0,39,0 +1,156720,Note_on_c,0,36,79 +1,156795,Note_off_c,0,36,0 +1,156843,Note_on_c,0,37,70 +1,156843,Note_on_c,0,39,74 +1,156848,Note_on_c,0,36,33 +1,156919,Note_off_c,0,37,0 +1,156919,Note_off_c,0,39,0 +1,156924,Note_off_c,0,36,0 +1,156960,Note_on_c,0,38,112 +1,156960,Note_on_c,0,39,88 +1,157035,Note_off_c,0,38,0 +1,157035,Note_off_c,0,39,0 +1,157200,Note_on_c,0,39,22 +1,157200,Note_on_c,0,40,61 +1,157275,Note_off_c,0,39,0 +1,157275,Note_off_c,0,40,0 +1,157323,Note_on_c,0,36,108 +1,157323,Note_on_c,0,41,104 +1,157398,Note_off_c,0,41,0 +1,157398,Note_on_c,0,36,0 +1,157569,Note_on_c,0,39,42 +1,157644,Note_off_c,0,39,0 +1,157681,Note_on_c,0,39,71 +1,157756,Note_off_c,0,39,0 +1,157804,Note_on_c,0,43,122 +1,157810,Note_on_c,0,36,89 +1,157878,Note_off_c,0,43,0 +1,157884,Note_off_c,0,36,0 +1,157921,Note_on_c,0,38,106 +1,157921,Note_on_c,0,39,104 +1,157996,Note_off_c,0,38,0 +1,157996,Note_off_c,0,39,0 +1,158161,Note_on_c,0,39,52 +1,158236,Note_off_c,0,39,0 +1,158284,Note_on_c,0,36,121 +1,158284,Note_on_c,0,38,80 +1,158359,Note_off_c,0,36,0 +1,158359,Note_off_c,0,38,0 +1,158400,Note_on_c,0,39,104 +1,158400,Note_on_c,0,44,39 +1,158475,Note_off_c,0,39,0 +1,158475,Note_off_c,0,44,0 +1,158523,Note_on_c,0,37,15 +1,158523,Note_on_c,0,39,11 +1,158598,Note_off_c,0,37,0 +1,158598,Note_off_c,0,39,0 +1,158641,Note_on_c,0,36,79 +1,158716,Note_off_c,0,36,0 +1,158764,Note_on_c,0,37,70 +1,158764,Note_on_c,0,39,74 +1,158769,Note_on_c,0,36,33 +1,158838,Note_off_c,0,37,0 +1,158838,Note_off_c,0,39,0 +1,158843,Note_off_c,0,36,0 +1,158881,Note_on_c,0,38,112 +1,158881,Note_on_c,0,39,88 +1,158956,Note_off_c,0,38,0 +1,158956,Note_off_c,0,39,0 +1,159121,Note_on_c,0,39,22 +1,159121,Note_on_c,0,40,61 +1,159196,Note_off_c,0,39,0 +1,159196,Note_off_c,0,40,0 +1,159244,Note_on_c,0,36,108 +1,159244,Note_on_c,0,41,104 +1,159319,Note_off_c,0,41,0 +1,159319,Note_on_c,0,36,0 +1,159490,Note_on_c,0,39,42 +1,159565,Note_off_c,0,39,0 +1,159600,Note_on_c,0,39,71 +1,159675,Note_off_c,0,39,0 +1,159723,Note_on_c,0,43,122 +1,159729,Note_on_c,0,36,89 +1,159799,Note_off_c,0,43,0 +1,159805,Note_off_c,0,36,0 +1,159840,Note_on_c,0,38,106 +1,159840,Note_on_c,0,39,104 +1,159915,Note_off_c,0,38,0 +1,159915,Note_off_c,0,39,0 +1,160080,Note_on_c,0,39,52 +1,160155,Note_off_c,0,39,0 +1,160203,Note_on_c,0,36,121 +1,160203,Note_on_c,0,38,80 +1,160278,Note_off_c,0,36,0 +1,160278,Note_off_c,0,38,0 +1,160321,Note_on_c,0,39,104 +1,160321,Note_on_c,0,44,39 +1,160396,Note_off_c,0,39,0 +1,160396,Note_off_c,0,44,0 +1,160444,Note_on_c,0,37,15 +1,160444,Note_on_c,0,39,11 +1,160519,Note_off_c,0,37,0 +1,160519,Note_off_c,0,39,0 +1,160560,Note_on_c,0,36,79 +1,160635,Note_off_c,0,36,0 +1,160683,Note_on_c,0,37,70 +1,160683,Note_on_c,0,39,74 +1,160688,Note_on_c,0,36,33 +1,160759,Note_off_c,0,37,0 +1,160759,Note_off_c,0,39,0 +1,160764,Note_off_c,0,36,0 +1,160800,Note_on_c,0,38,112 +1,160800,Note_on_c,0,39,88 +1,160875,Note_off_c,0,38,0 +1,160875,Note_off_c,0,39,0 +1,161040,Note_on_c,0,39,22 +1,161040,Note_on_c,0,40,61 +1,161115,Note_off_c,0,39,0 +1,161115,Note_off_c,0,40,0 +1,161163,Note_on_c,0,36,108 +1,161163,Note_on_c,0,41,104 +1,161238,Note_off_c,0,41,0 +1,161238,Note_on_c,0,36,0 +1,161238,End_track +0,0,End_of_file diff --git a/TSITOplayer/data/The Son is the One Midi 113bpm.mid b/TSITOplayer/data/The Son is the One Midi 113bpm.mid new file mode 100644 index 0000000..33d25c6 Binary files /dev/null and b/TSITOplayer/data/The Son is the One Midi 113bpm.mid differ diff --git a/TSITOplayer/data/The Son is the One.mp3 b/TSITOplayer/data/The Son is the One.mp3 new file mode 100644 index 0000000..409249b Binary files /dev/null and b/TSITOplayer/data/The Son is the One.mp3 differ diff --git a/TSITOplayer/frames/.DS_Store b/TSITOplayer/frames/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/TSITOplayer/frames/.DS_Store differ diff --git a/TSITOplayer2/.DS_Store b/TSITOplayer2/.DS_Store new file mode 100644 index 0000000..7ee8283 Binary files /dev/null and b/TSITOplayer2/.DS_Store differ diff --git a/TSITOplayer2/MetaListener.pde b/TSITOplayer2/MetaListener.pde new file mode 100755 index 0000000..bf0f177 --- /dev/null +++ b/TSITOplayer2/MetaListener.pde @@ -0,0 +1,17 @@ +class MetaListener implements MetaEventListener{ + + void MetaListner(){ + } + + void meta(MetaMessage message){ + switch(message.getType()){ + case 47: //end of track + s.setMicrosecondPosition(0); + s.start(); + break; + default: + break; + } + } +} + diff --git a/TSITOplayer2/MidiReceiver.pde b/TSITOplayer2/MidiReceiver.pde new file mode 100644 index 0000000..133dfd0 --- /dev/null +++ b/TSITOplayer2/MidiReceiver.pde @@ -0,0 +1,26 @@ +class MidiReceiver implements Receiver{ + + void MidiReceiver(){ + } + + void close(){ + } + + void send(MidiMessage message, long lTimeStamp){ + //println(lTimeStamp+" "+message.getStatus()+" "+message.getMessage()[1]+" "+message.getMessage()[2]); + if(((message.getStatus())>143)&&((message.getStatus())<160)){ + println("NOTEON "+message.getMessage()[1]+" "+message.getMessage()[2]); + notes[message.getMessage()[1]].velocity = message.getMessage()[2]; //set to velocity + //keys[message.getMessage()[1]].downColor= color(random(0, 360), 70, 100); + } + if(((message.getStatus())>127)&&((message.getStatus())<144)){ + println("NOTEOFF "+message.getMessage()[1]+" "+message.getMessage()[2]); + notes[message.getMessage()[1]].velocity = 0; //clear + } + if(((message.getStatus())>175)&&((message.getStatus())<192)){ + println("CCHANGE "+message.getMessage()[1]+" "+message.getMessage()[2]); + //midiOut.sendController(0, message.getMessage()[1], message.getMessage()[2]); + } + } +} + diff --git a/TSITOplayer2/Pianola.pde b/TSITOplayer2/Pianola.pde new file mode 100755 index 0000000..732dc14 --- /dev/null +++ b/TSITOplayer2/Pianola.pde @@ -0,0 +1,9 @@ +class Note{ + int velocity; + + Note(){ + velocity=0; + } + +} + diff --git a/TSITOplayer2/TSITOplayer2.pde b/TSITOplayer2/TSITOplayer2.pde new file mode 100644 index 0000000..80a1b62 --- /dev/null +++ b/TSITOplayer2/TSITOplayer2.pde @@ -0,0 +1,234 @@ + +import javax.sound.midi.*; +import java.io.File; +import ddf.minim.*; + +String midiFileName = "The Son is the One Midi 113bpm.mid"; +String audioFileName = "The Son is the One.mp3"; +Sequencer s; +MetaListener metaListener; +Note[] notes = new Note[128]; +int NOTE_LOW = 0, NOTE_HIGH = 29; + +Minim minim; +AudioPlayer audioPlayer; + +int pw=10;int ph=10; +PImage sc; //=createImage(width,height); + +//convolution matrix +float[][] matrix = { { 0,.2, 0 }, + {0, .59, 0 }, + { 0, .2,0 } }; + +//vary size and matrix over piece +//matrix comes in slowly +// +//overall weighting of matrix is strongly determinant +//functions that map the frequency of change +//stepped by the notes will tend to maximise change where the music is busiest. +//map the notes to cyclers- independently - no cant be done +class FMcycler { + float cycleA; + float cycleB; + float offset; + float weight; + //takes a normalised coordinate and calculates a zeroed FM cycle + FMcycler(float _A, float _B) { + cycleA=_A; + cycleB=_B; + offset=0; + weight=1; + } + FMcycler(float _A, float _B,float _offs,float _wei) { + cycleA=_A; + cycleB=_B; + offset=_offs; + weight=_wei; + } + float map(float f) { + return offset+(weight*sin(cycleB*sin(cycleA*f*2*PI)*2*PI)); + } +} +FMcycler off=new FMcycler(0,0,1.0,0); +FMcycler[][] cyclematrix = { { off, new FMcycler(0.5,1.2,0,0), off }, + { off, new FMcycler(0.5,1.2,1.0,0), off}, + { off, new FMcycler(0.5,1.2,0,0), off } }; +FMcycler poscycler; +FMcycler scalecycler; +FMcycler vertcycler; +void setup(){ + poscycler=new FMcycler(0.5,1.7); + scalecycler=new FMcycler(0.5,3.1); + vertcycler=new FMcycler(0.5,0.9); + size(300, 110, P3D); + frameRate(15); + for(int i = NOTE_LOW; i < NOTE_HIGH; i++){ + notes[i]=new Note(); + } + //load audio file + minim = new Minim(this); + audioPlayer = minim.loadFile(audioFileName, 2048); + audioPlayer.play(); + //audioPlayer.loop(9999999); + //audioPlayer is started when midi sequencer is started + + startMidiFile(); + + sc=createImage(width,height,RGB); + background(0); + rectMode(CORNER); + noStroke(); + + colorMode(RGB, 255); + + //app=new PlayApp(this,"localhost","Backing & Veering","Sunken Foal",153f); + swidth=width-2; + soffset=1; +} +int swidth; +int soffset; +float time=0; +void draw(){ + time+=(1f/(153f*25)); + + // for (int i=0;i0.6) matrix[1][1]=0.6+(sin(((time-0.6)*0.25)*PI)*0.2); + sc=convolution(matrix,get(0,0,width,height)); + background(0); + //image(sc,1,15,width,height); + image(sc,1,3.2+(vertcycler.map(time)*1.7),width-1,height); + //image(sc,soffset,5,swidth,height); + //image(sc,(int)(poscycler.map(time)*0)+1,5,width-2+(int)(scalecycler.map(time)*0),height); + //for (int i=15*width;i0) { + //draw the note + colorMode(HSB, 255); + fill(200-v,255,255); + colorMode(RGB, 255); + rect(i*pw,0,pw,ph); + } + } + + + saveFrame("frames/img####.png"); + if (!audioPlayer.isPlaying()) exit(); +} + +//change rate of drop? +//veering?? + + +void startMidiFile(){ + InputStream midiFileStream = createInput(midiFileName); + + try { + s = MidiSystem.getSequencer(false); + s.setSequence(MidiSystem.getSequence(midiFileStream)); + + //Create a MidiReceiver that listens to NOTE ON and OFF events + Receiver midiReceiver = new MidiReceiver(); + Transmitter midiTransmitter = s.getTransmitter(); + midiTransmitter.setReceiver(midiReceiver); + + //Create a MetaEventListener that listens to the END OF TRACK event + metaListener = new MetaListener(); + s.addMetaEventListener(metaListener); + s.open(); + s.setTickPosition(0L); + s.start(); + } + catch(Exception e) { + println(e); + background(0, 100, 100); //red screen if erro + //stop(); + } + +} + + +void stop(){ + s.stop(); +} + + +PImage convolution(float[][] matrix, PImage img) +{ + //return img; + + PImage newimg=createImage(img.width,img.height,RGB); + newimg.loadPixels(); + int matrixsize = matrix[0].length; + int offset = matrixsize / 2; + for (int x=0;x + + + + + diff --git a/liveengine/liveengine.layout b/liveengine/liveengine.layout new file mode 100755 index 0000000..b42382b --- /dev/null +++ b/liveengine/liveengine.layout @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/liveengine/src/layers.cpp b/liveengine/src/layers.cpp new file mode 100755 index 0000000..a0fb213 --- /dev/null +++ b/liveengine/src/layers.cpp @@ -0,0 +1,229 @@ +#include "layers.h" + +svglayer::svglayer() { + xo=0;yo=0; +} +svglayer::svglayer(string _f) +{ + load(_f); +} + +void svglayer::load(string _f){ + //check if files exits + svg.load(_f); + printf("%s: %i paths\n",_f.c_str(),svg.getNumPath()); + for (int i=0;i0); +} +void svglayer::getCentre(int cx,int cy) { + if (svg.getNumPath()>0) { + xo=(cx-svg.getWidth())/2; + yo=(cy-svg.getHeight())/2; + } +} + +void svglayer::draw(float a,int cx,int cy,float colShift) { + getCentre(cx,cy); + for (int i=0;i0.0f) { + c.setHue(fmod(c.getHue()+colShift,255.0f)); + //printf ("shift from %f to %f\n",c.getHue(),c.getHue()+colShift); + } + svg.getPathAt(i).setFillColor(c); + svg.getPathAt(i).draw(xo,yo); + } +} +/* +void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift) { + getCentre(cx,cy); + //draw layers tinted by controllers + for (int i=0;i0.1) { + svg.getPathAt(i).draw(xo,yo); + } + } +} +*/ + +void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift) { + getCentre(cx,cy); + //draw layers grouped by controllers + float layerspercontroller=((float)svg.getNumPath())/6.0f; + + for (int i=0;i<6;i++) { + //for (int j=(int)((i+1)*layerspercontroller)-1;j>(int)(i*layerspercontroller);j--) { + for (int j=(int)(i*layerspercontroller);j<(int)((i+1)*layerspercontroller);j++) { + svg.getPathAt(j).setFillColor(fills[j]*a*(((float)controllers[5-i])/127.0f)); //try to reverse order of these + if (!transparentBlack||((a*controllers[5-i])/127.0f)>0.1) { + svg.getPathAt(j).draw(xo,yo); + } + } + } + //printf("counted %i layers of %i\n",(int)(6*layerspercontroller),svg.getNumPath()); +} + + +svglayer::~svglayer() +{ + //dtor +} + +//------------------------------------------------------------------------ +imglayer::imglayer() { + //sprite.setUseTexture(false); +} +imglayer::imglayer(string _filename,int _frames,int _start,float _rate,int n, int e){ + load(_filename,_frames,_start,_rate,n,e); +} + +void imglayer::load(string _filename,int _frames,int _start,float _rate,int n, int e){ + startNote=n; + endNote=e; + sprite.load(_filename,_frames,_start); + sprite.setFrameRate(_rate); +} + + +void imglayer::draw(float a,int cx,int cy,float colShift) { + //if (sprite.isAllocated()) if (!sprite.isUsingTexture()) sprite.setUseTexture(true); //has to be done from the main thread? still doesn't work + + sprite.update(); + int x,y,w,h; + if ((((float)cx)/cy)<(((float)sprite.getWidth())/sprite.getHeight())){ + x=0; + w=cx; + h=((float)cx)*(((float)sprite.getHeight())/sprite.getWidth()); + y=(cy-h)/2; + } + else { + y=0; + h=cy; + w=((float)cy)*(((float)sprite.getWidth())/sprite.getHeight()); + x=(cx-w)/2; + } + ofEnableAlphaBlending(); + sprite.draw(x,y,w,h); + ofDisableAlphaBlending(); +} + +void imglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f) { + imglayer::draw(a,cx,cy,colShift); +} + +void imglayer::setNote(int note) +{ + //is called rerpeatedly no startNote,endNote + //printf("note %i (%i - %i)\n",note,startNote,endNote); + if ((startNote<=note)&&(endNote>=note)) { + if (!sprite.getIsPlaying()) { + + sprite.play(); + + } + //printf("triggered frame %i of %i\n",(int)(((((float)note-startNote)/((float)endNote-startNote)))*sprite.getTotalFrames()),sprite.getTotalFrames()); + sprite.setCurrentFrame((int)(((((float)note-startNote)/((float)endNote-startNote)))*sprite.getTotalFrames())); + //printf("movie %i (%i - %i) frame: %i\n",note,startNote,endNote,(int)(((((float)note-startNote)/((float)endNote-startNote)))*mov.getTotalNumFrames())); + } + else { + if (sprite.getIsPlaying()) { + sprite.stop(); + } + } + +}; + + +imglayer::~imglayer() +{ + //sprite.setUseTexture(false); //free texture +} +//------------------------------------------------------------------------ +videolayer::videolayer() { + //sprite.setUseTexture(false); +} +videolayer::videolayer(string _f,int n,int e,float s) +{ + startNote=n; + endNote=e; + speed=s; + load(_f); +} + +void videolayer::load(string _f){ + name=_f; + mov.setPixelFormat(OF_PIXELS_BGRA); + mov.setUseTexture(false); + bool success=mov.loadMovie(_f); + if (success) { + mov.stop(); + } + printf("%s %s %i bpp\n",success?"loaded":"not loaded",_f.c_str(),success?mov.getPixelsRef().getBytesPerPixel():0); +} + +void videolayer::draw(float a,int cx,int cy,float colShift) { + if (mov.isPlaying()) { + mov.update(); + //unsigned char *pix=mov.getPixels(); + //for (int i=0;i>2)+(pix[i+1]>>1)+(pix[i+2]>>2); + int x,y,w,h; + if ((((float)cx)/cy)<(((float)mov.getWidth())/mov.getHeight())){ + x=0; + w=cx; + h=((float)cx)*(((float)mov.getHeight())/mov.getWidth()); + y=(cy-h)/2; + } + else { + y=0; + h=cy; + w=((float)cy)*(((float)mov.getWidth())/mov.getHeight()); + x=(cx-w)/2; + } + ofEnableAlphaBlending(); + mov.draw(x,y,w,h); + ofDisableAlphaBlending(); + } +} + +void videolayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f) { + draw(a,cx,cy,colShift); +} + +void videolayer::setNote(int note) +{ + + if ((startNote<=note)&&(endNote>=note)) { + if (!mov.isPlaying()) { + //printf("starting movie!\n"); + mov.setUseTexture(true); + mov.play(); + mov.setSpeed(speed); + } + mov.setFrame((int)(((((float)note-startNote)/((float)endNote-startNote)))*mov.getTotalNumFrames())); + //printf("movie %i (%i - %i) frame: %i\n",note,startNote,endNote,(int)(((((float)note-startNote)/((float)endNote-startNote)))*mov.getTotalNumFrames())); + } + else { + if (mov.isPlaying()) { + mov.stop(); + } + } + +}; + + +videolayer::~videolayer() +{ +} diff --git a/liveengine/src/layers.h b/liveengine/src/layers.h new file mode 100755 index 0000000..f8ed650 --- /dev/null +++ b/liveengine/src/layers.h @@ -0,0 +1,131 @@ +#ifndef SVGLAYER_H +#define SVGLAYER_H + +#include "ofxSVGTiny.h" +#include "ofMain.h" +#include "ofxSprite.h" + +class layer +{ + public: + layer(){}; + layer(string _f) {load(_f);}; + virtual ~layer(){}; + virtual void load(string _f){}; + virtual void draw(float a,int cx,int cy,float colShift){}; + virtual void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f){ draw(a,cx,cy,colShift);}; + bool getLoaded() {return isLoaded;}; + virtual void setNote(int note) {}; + string name; + int startNote,endNote; + protected: + bool isLoaded; + private: + +}; + +class svglayer: public layer +{ + public: + svglayer(); + svglayer(string _f); + virtual ~svglayer(); + void load(string _f); + void draw(float a,int cx,int cy,float colShift); + void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f); + void getCentre(int cx,int cy); + protected: + private: + ofxSVGTiny svg; + vector fills; + vector strokes; + float xo,yo; +}; + +class sunkenSprite: public ofxSprite { + public: + float playhead,frameRate; + void setFrameRate(float frameRate) { this->frameRate = frameRate;}; + void play() { + startTime=ofGetElapsedTimef(); + ofxSprite::play(); + } + void update() { + if (!getIsPlaying()) return; + playhead=fmod(speed * frameRate * (ofGetElapsedTimef()-startTime),(float)getTotalFrames()); + ofxSprite::setCurrentFrame(playhead); + + } + void setCurrentFrame(float frame) { + //this idea doesn't work - fucks up when frameRate is 0 - + //need to rethink + + //when frameRate is 0 startTime doesn't matter + //this still might not be not entirely correct + if (frameRate>0) startTime-=(frame-pos) / ((float)(frameRate * speed )); + //printf("sunkensprite setting frame %i of %i\n",(int)frame,getTotalFrames()); + //printf("1 checking frame %i of %i\n",(int)frame,getTotalFrames()); + ofxSprite::setCurrentFrame(frame); + /* + pos = frame; + printf("2 checking frame %i of %i\n",(int)frame,getTotalFrames()); + printf("requesting movie frame %i of %i\n",(int)pos,getTotalFrames()); + if (pos<0) if (loop) { pos += totalFrames; } else stop(); + if (pos>=totalFrames) if (loop) { + while (pos>=totalFrames) pos -= totalFrames; + } else { pos = totalFrames-.00001f; isPlaying=false; } + printf("set movie frame %i of %i\n",(int)pos,totalFrames); + */ + } + void draw(int x,int y,int w,int h) { + + int f=playhead; + float fr=fmod(playhead,1.0); + ofSetColor(255,255,255,(1.0-fr)*255); + //not always? + getImageAtFrame(f).setUseTexture(true); + getImageAtFrame(f).reloadTexture(); + getImageAtFrame(f).draw(x,y,w,h); + ofSetColor(255,255,255,fr*255); + f=(f+1)%getTotalFrames(); + getImageAtFrame(f).setUseTexture(true); + getImageAtFrame(f).reloadTexture(); + getImageAtFrame(f).draw(x,y,w,h); + } + + private: + float startTime; + +}; + +class imglayer: public layer +{ + public: + imglayer(); + imglayer(string _f,int _frames=1,int _start=1,float _rate=0,int note=0,int endnote=0); + virtual ~imglayer(); + void load(string _filename,int _frames=1,int _start=1,float _rate=0.0,int note=0,int endnote=0); + void draw(float a,int cx,int cy,float colShift); + void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift); + void setNote(int n); + protected: + private: + sunkenSprite sprite; +}; + +class videolayer: public layer +{ + public: + videolayer(); + videolayer(string _f,int n,int e,float s); + virtual ~videolayer(); + void load(string _f); + void draw(float a,int cx,int cy,float colShift); + void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift); + void setNote(int n); + protected: + private: + float speed; + ofVideoPlayer mov; +}; +#endif // SVGLAYER_H diff --git a/liveengine/src/main.cpp b/liveengine/src/main.cpp new file mode 100755 index 0000000..d22025f --- /dev/null +++ b/liveengine/src/main.cpp @@ -0,0 +1,20 @@ +#include "ofMain.h" +#include "testApp.h" +#include "ofxFensterManager.h" +#include "ofAppGlutWindow.h" + +//======================================================================== +int main( ){ + + ofAppGlutWindow window; + ofSetupOpenGL(ofxFensterManager::get(),4080,768, OF_WINDOW); //2048,768 + //ofSetupOpenGL(&window, 1024,768, OF_WINDOW); // <-------- setup the GL context + //ofSetupOpenGL(&window, 1024,768, OF_WINDOW); + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + //ofRunApp( new testApp()); + ofRunFensterApp( new testApp()); + +} diff --git a/liveengine/src/playlist.cpp b/liveengine/src/playlist.cpp new file mode 100755 index 0000000..683cd3c --- /dev/null +++ b/liveengine/src/playlist.cpp @@ -0,0 +1,126 @@ +#include "playlist.h" + +playlist::playlist() +{ + name=""; + thumbnail.allocate(128,128,GL_RGB); + thumbnailed=false; +} + +void playlist::load(string _name){ + //printf("loading %s\n",_name.c_str()); + + + if( !XML.loadFile(_name) ){ + printf("unable to load %s check data/ folder\n",_name.c_str()); + }else { + printf("starting loader thread\n"); + loadimg(); //how to do this from the worker thread??? + startThread(false, false); //blocking, verbose + } + + + +} + +void playlist::threadedFunction(){ + if( lock() ){ + loadLayers(); + unlock(); + } +} + +void playlist::loadLayers(){ + int numLayers=0; + layers.clear(); + name=XML.getAttribute("playlist", "name", ""); + float speed=XML.getAttribute("playlist", "speed", 0); + if(XML.pushTag("playlist")) { + numLayers=XML.getNumTags("svglayer"); + if(numLayers) { + for (int i=0;inote) { + for (int j=note+1;jnote) { + for (int j=note+1;j<=endnote;j++) { + layers[j]=layers[note]; + } + } + } + thumbnailed=false; + } + XML.popTag(); + } + +} + +void playlist::makeThumbnail(){ + if (layers.size()) { + thumbnail.begin(); + ofBackground(0,0,0); + ofPushMatrix(); + ofTranslate(64,64); + ofScale(0.2,0.2,0.2); + ofTranslate(-64,-64); + map::iterator i=layers.begin(); + i->second->draw(1.0,64,64,0.0); + ofPopMatrix(); + thumbnail.end(); + thumbnailed=true; + } +} + + +void playlist::loadimg(){ + int numLayers=0; + layers.clear(); + if(XML.pushTag("playlist")) { + numLayers=XML.getNumTags("imglayer"); + if(numLayers) { + for (int i=0;i layers; + string name; + protected: + private: +}; + +#endif // PLAYLIST_H diff --git a/liveengine/src/testApp.cpp b/liveengine/src/testApp.cpp new file mode 100755 index 0000000..ced71d4 --- /dev/null +++ b/liveengine/src/testApp.cpp @@ -0,0 +1,646 @@ +#include "testApp.h" +previewWindow::~previewWindow(){ + cout << "preview window destroyed" << endl; +} +void previewWindow::setup(){} +void previewWindow::setBuffer(ofFbo *buffer){ + rb=buffer; +} +void previewWindow::draw(){ + + rb->draw(0,0,ofGetWidth(),ofGetHeight()); //why crash? + +} +//-------------------------------------------------------------- +guiWindow::~guiWindow(){ + cout << "gui window destroyed" << endl; +} +void guiWindow::setup(){} +void guiWindow::setParent(testApp *p){ + parent=p; +} +void guiWindow::draw(){ + + parent->gui.draw(); + if (parent->list.lock()) { //if loaded + if (!parent->list.thumbnailed) parent->list.makeThumbnail(); + if (parent->list.thumbnailed) parent->list.thumbnail.draw(20,ofGetHeight()-150); + parent->list.unlock(); + } + ofDrawBitmapString(parent->list.name,20,ofGetHeight()-10); + +} +void guiWindow::dragEvent(ofDragInfo dragInfo, ofxFenster* win){ + parent->dragEvent(dragInfo); +} +void guiWindow::windowMoved(int x,int y){ + //printf("window moved!\n"); +} + +//---------------------------------------------------------------------- + +kinectWindow::~kinectWindow(){ + cout << "kinect window destroyed" << endl; +} +void kinectWindow::setup(){ + ofSetBackgroundAuto(false); +} +void kinectWindow::setParent(testApp *p){ + parent=p; +} +void kinectWindow::draw(){ + //parent->NIinstance.drawpreview(); + //parent->NIinstance.recordDepth.draw(0,0,ofGetWidth(),ofGetHeight()); + parent->NIinstance.recordUser.draw(ofGetWidth(),ofGetHeight()); +} + + +//-------------------------------------------------------------- +void testApp::setup(){ + int midiPort=0; + midiChannel=0; + useKinect=false; + if( !XML.loadFile("settings.xml") ){ + printf("unable to load settings.xml check data/ folder\n"); + }else{ + printf("settings loaded!\n"); + midiPort=ofToInt(XML.getAttribute("liveEngine", "port", "0")); //default to 0/all + midiChannel=ofToInt(XML.getAttribute("liveEngine", "channel", "0")); + if (midiChannel) printf("listening on port %d, midi channel %d\n",midiPort,midiChannel); + else printf("listening on port %d, all midi channels\n",midiPort); + if(XML.pushTag("liveEngine")) { + int numViews=XML.getNumTags("viewport"); + if(numViews) { + for (int i=0;icreateFenster(0, 0, 320, 240, OF_WINDOW); + kw->setWindowTitle("kinect"); + kw->addListener(kinectWin); + kinectWin->setup(); + kinectWin->setParent(this); + + NIinstance.start(); + + } + viewports.push_back(new viewport(w,h,x,y,rot,ox,oy)); + viewports[i]->setUG(&NIinstance.recordUser); + + XML.pushTag("viewport",i); + vectorkeys; + XML.getAttributeNames("settings", keys, 0); + mapsettings; + for (int k=0;ksetcam(settings); + XML.popTag(); + + } + else viewports.push_back(new viewport(w,h,x,y,rot,ox,oy)); + } + } + else printf("no viewports!\n"); + + XML.popTag(); + + } + } + + activeView=-1; + + midiIn.listPorts(); + midiIn.openPort(midiPort); + midiIn.addListener(this); + + // to register only to one controller pass the id as first argument + // midiIn.addListener(84,this); + // to debug + // midiIn.setVerbose(true); + + controllers=new unsigned char[NUM_CONTROLLERS]; + memset(controllers,NUM_CONTROLLERS,0); + note=0; + + makeColours(); + + colShift=0; + + controlColours=false; + debug=false; + noteRandomiseColours=false; + transparentBlack=false; + reversemain=false; + + //vp1.setup(768,1024,1024,0,-90,-256,-384); + //vp2.setup(1024,768,0,0,0,-512,-384); + + showFPS=false; + ofBackground(0,0,0); + + ofSetBackgroundAuto(false); + + xshift=-1; + yshift=-1; + + fadetime=0; + + mode=BLOCKS; + + lastnoteTime=ofGetElapsedTimef(); + decayTime=1.0f; + + //ofSetVerticalSync(true); deosn't seem effective + //glXSwapIntervalSGI(1); + /* + printf("hue of red is %f\n",ofColor(255,0,0).getHue()); + printf("hue of green is %f\n",ofColor(0,255,0).getHue()); + printf("hue of blue is %f\n",ofColor(0,0,255).getHue()); + hue is float from 0.0-255.0 + */ + ofSetFrameRate(60); + rotate=-90; + scale=1.0f; + fscale=1.0f; + + + //preview window stuff + prevWin=new previewWindow(); + win=ofxFensterManager::get()->createFenster(0, 0, 600, 800, OF_WINDOW); + ofAddListener(win->events.mouseDragged, this, &testApp::mousePressedEvent); + ofAddListener(win->events.mousePressed, this, &testApp::mousePressedEvent); + ofAddListener(win->events.keyPressed, this, &testApp::keyPressedEvent); + win->setWindowTitle("preview"); + win->addListener(prevWin); + prevWin->setup(); + prevWin->setBuffer(&viewports[0]->rb2); + + fullscreenoutput=false; + + guiWin=new guiWindow(); + gui.setup("","panel.xml",0,0); + gui.add(reversemain.setup("reverse main", false)); + gui.add(controlColours.setup("control colours", false)); + gui.add(noteRandomiseColours.setup("randomise note colours", false)); + gui.add(transparentBlack.setup("transparent black", false)); + gui.add(resetDrawscale.setup("reset draw scale")); + gui.add(resetFBscale.setup("reset FB scale")); + fadeScale=128; + gui.add(fS.setup("fade scale",fadeScale,0,255,255)); + decayTime=1.0f; + gui.add(dT.setup("decay time",decayTime,0,10.0,255)); + + gui.add(oscScale.setup("scale size LFO", false)); + gui.add(breakOsc.setup("break oscillators", false)); + gui.add(randomOsc.setup("randomise oscillators", false)); + scaleAmplitude=0.5f; + gui.add(sA.setup("fade scale",scaleAmplitude,0,2.0,255)); + scaleFrequency=1.0f; + gui.add(sF.setup("fade freq",scaleFrequency,0,5.0,255)); + gui.add(drawCloud.setup("draw pointCloud",false)); + gui.add(drawSkel.setup("draw Skeleton",false)); + + resetDrawscale.addListener(this,&testApp::resetDrawscalePressed); + resetFBscale.addListener(this,&testApp::resetFBscalePressed); + + //gui window stuff + ofxFenster* win2=ofxFensterManager::get()->createFenster(0, 0, 200, 400, OF_WINDOW); + + ofAddListener(win2->events.windowResized, this, &testApp::windowEvent); + + win2->setWindowTitle("config"); + win2->addListener(guiWin); + guiWin->setup(); + guiWin->setParent(this); + + debug=false; + +} + +void testApp::resetDrawscalePressed(bool & pressed){ + scale=1.0f; +} +void testApp::resetFBscalePressed(bool & pressed){ + fscale=1.0f; +} + +void testApp::makeColours() { + controller_colours=new ofColor[NUM_CONTROLLERS]; + for (int i=0;iupdate(); +} +void testApp::saveSettings(string filename){ + + if(XML.pushTag("liveEngine")) { + for (int i=0;iisMapped) { + XML.pushTag("viewport",i); + vectorkeys; + XML.getAttributeNames("settings", keys, 0); + for (int k=0;kgetSetting(keys[k]),0); + } + XML.popTag(); + } + } + XML.popTag(); + } + XML.saveFile(filename); + printf("saved %s\n",filename.c_str()); +} +//-------------------------------------------------------------- +void testApp::draw(){ + + float lambda=max(0.0f,1.0f-((ofGetElapsedTimef()-lastnoteTime)/decayTime)); + + int ft=255-(fadetime*((float)fadeScale)*0.1f); + //if(ofGetFrameNum()%25==0) printf("fadeScale %i\n",(int)fadeScale); + ofSetColor(ft,ft,ft); //for feedback + + float os=oscScale?(sin((breakOsc?ofGetElapsedTimef()-(randomOsc?randOffs:lastnoteTime):ofGetElapsedTimef()))*scaleFrequency)*scaleAmplitude:0.0f; + //vp1.draw(lambda,controllers,xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,scale,fscale,noteRandomiseColours?colShift:0.0f); + //vp2.draw(lambda,controllers,reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,reversemain?1.0f/scale:scale,reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f); + for (int i=0;iisMapped) viewports[i]->mapdraw(lambda,controllers,even&&reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,even&&reversemain?1.0f/(scale+os):scale+os,even&&reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f,drawCloud,drawSkel); + else viewports[i]->draw(lambda,controllers,even&&reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,even&&reversemain?1.0f/(scale+os):scale+os,even&&reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f); + } + + ofSetColor(255,255,255); + if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20); + + /* + rb1.begin(); + + + // can this work? + //grab.setAnchorPoint(xshift,yshift); + //grab.setTextureWrap( GL_WRAP_BORDER, GL_WRAP_BORDER); + //grab.draw(0,0); // xshift,yshift); + + ofSetColor(255-fadetime,255-fadetime,255-fadetime); + for (int i=(xshift>0?xshift-rb1.getWidth():xshift);i0?yshift-rb1.getHeight():yshift);j0) { + switch(mode) { + case BLOCKS: + for (int i=0;i>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7)); + ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight); + } + break; + case LIST: + if (list.lock()) { //if playlist is loaded + ofPushMatrix(); + ofTranslate(rb1.getWidth()/2,rb1.getHeight()/2); + ofScale(scale,scale,scale); + ofRotate(rotate); + ofTranslate(-rb1.getWidth()/2,-rb1.getHeight()/2); + if (list.layers.find(note)!=list.layers.end()) { + if (controlColours) list.layers[note]->draw(lamda,controllers,512,384,transparentBlack); + else list.layers[note]->draw(lamda,512,384); + } + ofPopMatrix(); + list.unlock(); + } + break; + } + } + + //for (int i=0;idraw(); + ofSetColor(255,255,255); + if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20); + + rb1.end(); + + rb2.begin(); + ofSetColor(255,255,255); + rb1.draw(0,0); + rb2.end(); + + rb2.draw(1024,0); + + rb3.begin(); //landscape + + + + ofSetColor(255-fadetime,255-fadetime,255-fadetime); + for (int i=(xshift>0?xshift-rb3.getWidth():xshift);i0?yshift-rb3.getHeight():yshift);j0) { + switch(mode) { + case BLOCKS: + for (int i=0;i>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7)); + ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight); + } + break; + case LIST: + if (list.lock()) { //if playlist is loaded + ofPushMatrix(); + ofTranslate(rb3.getWidth()/2,rb3.getHeight()/2); + ofScale(scale,scale,scale); + ofRotate(rotate); + ofTranslate(-rb3.getWidth()/2,-rb3.getHeight()/2); + if (list.layers.find(note)!=list.layers.end()) { + if (controlColours) list.layers[note]->draw(lamda,controllers,512,384,transparentBlack); + else list.layers[note]->draw(lamda,512,384); + } + ofPopMatrix(); + list.unlock(); + } + break; + } + } + + ofPopMatrix(); + + //for (int i=0;idraw(); + ofSetColor(255,255,255); + if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20); + + rb3.end(); + + rb4.begin(); + ofSetColor(255,255,255); + rb3.draw(0,0); + rb4.end(); + + rb4.draw(0,0); + + */ + + /* test screen shape + ofSetColor(255,0,0); + ofRect(0,0,1024,768); + ofSetColor(0,255,0); + ofRect(1024,0,1024,768); + */ + +} + +//-------------------------------------------------------------- +void testApp::keyPressed(int key, ofxFenster* win){ + if(key == ' '){ + fullscreenoutput=!fullscreenoutput; + win->setFullscreen(fullscreenoutput); + printf("resolution: %ix%i %s\n",win->getWidth(),win->getHeight(),fullscreenoutput?"fullscreen":"windowed"); + } + else keyPressed(key); +} +void testApp::keyPressed(int key){ + + if (activeView==-1) { + for (int i=0;iisMapped) viewports[i]->keyPressed(key); + } + else if (activeView>-1&&activeViewisMapped) viewports[activeView]->keyPressed(key); + + + if (key>='0' && key <='5'){ + activeView=min(key-'2',(int)viewports.size()-1); + switch (activeView){ + case -2: + printf("deactivating viewport adjustment\n"); + break; + case -1: + printf("adjusting all viewports\n"); + break; + case 0: + case 1: + case 2: + case 3: + printf("adjusting viewport %i of %i\n",activeView,viewports.size()); + break; + } + } + if(key =='q'){ + nmidiMessage(144,ofRandom(64)+36,127); + } + if(key == 'p'){ + saveSettings("settings.xml"); + printf("settings saved!\n"); + } + if(key == 'f'){ + toggleFPS(); + } + if(key >='6' && key <= '9'){ + mode=key-'6'; + } + if(key == 267){ + xshift--; + } + if(key == 268){ + xshift++; + } + if(key == 269){ + yshift--; + } + if(key == 270){ + yshift++; + } + if(key == '='){ + makeColours(); + } + if(key == '+'){ + fadetime=min(128,fadetime+1); + } + if(key == '_'){ + fadetime=max(0,fadetime-1); + } + if(key == ']'){ + scale*=1.01; + } + if(key == '['){ + scale/=1.01; + } + if(key == '}'){ + rotate+=90; + } + if(key == '{'){ + rotate-=90; + } + + + if(key == 'd'){ + debug=!debug; + } + + if (key=='j') { + fscale=1.0f; + } + if (key=='h') { + scale=1.0f; + } + +} + +//-------------------------------------------------------------- +void testApp::keyReleased(int key){ + if (activeView<0) for (int i=0;ikeyReleased(key); + else if (activeViewkeyReleased(key); +} + +//-------------------------------------------------------------- +void testApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void testApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void testApp::mouseReleased(int x, int y, int button){ + + +} +void testApp::mousePressed(int x, int y, int button) { +} + +//-------------------------------------------------------------- +void testApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void testApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- + +void testApp::dragEvent(ofDragInfo dragInfo, ofxFenster* win){ + dragEvent(dragInfo); +} +void testApp::dragEvent(ofDragInfo dragInfo){ + printf("got draginfo: %s\n",dragInfo.files[0].c_str()); + int sta=dragInfo.files[0].find_last_of("\\/")+1; + int len=(dragInfo.files[0].find_last_of(".")+4)-sta; + string filename=dragInfo.files[0].substr(sta,len); + printf("loading %s\n",filename.c_str()); + + list.load(filename); +} +void testApp::windowEvent(ofResizeEventArgs &args){ + printf("window event\n"); +} + +void testApp::mousePressedEvent(ofMouseEventArgs &args) { + //printf("mouse: %i,%i %i of %ix%i\n",args.x,args.y,args.button,win->getWidth(),win->getHeight()); + //0-2 + switch (args.button) { + case 0: + xshift=args.x-(win->getWidth()/2); + yshift=args.y-(win->getHeight()/2); + break; + case 1: + scale=pow(pow(args.x-(win->getWidth()/2),2)+pow(args.y-(win->getHeight()/2),2),0.5)/(win->getWidth()*.1); + break; + case 2: + fscale=(pow(pow(args.x-(win->getWidth()/2),2)+pow(args.y-(win->getHeight()/2),2),0.5)/(win->getWidth()))+0.5; + break; + } +} + +void testApp::keyPressedEvent(ofKeyEventArgs &args) { + //printf("window key pressed: %i (%c)\n",args.key,args.key); + keyPressed(args.key); +} + +void testApp::toggleFPS(){ + showFPS=!showFPS; +} + +void testApp::newMidiMessage(ofxMidiEventArgs& eventArgs){ + if ((midiChannel==0)||(eventArgs.channel==midiChannel)) { + nmidiMessage(eventArgs.status,eventArgs.byteOne,eventArgs.byteTwo); + } +} + + //newMessage(eventArgs.port, eventArgs.channel, eventArgs.byteTwo, eventArgs.timestamp); + +//byteOne : message type + + /* + int port; + int channel; + int status; + int byteOne; + int byteTwo; + double timestamp; + */ + + //printf("%d %d %d %d %d\n",eventArgs.port,eventArgs.channel,eventArgs.status,eventArgs.byteOne,eventArgs.byteTwo); +void testApp::nmidiMessage(int event,int data1, int data2) { + if (debug) printf("midi: %i %i\n",event,data1); + bool noteOn; //this old thing! + int i; + switch(event) { + case 144: //noteon-off channel 0 + noteOn=(data2==0?false:true); + //for (int i=0;inote==eventArgs.byteOne) layers[i]->setActive(noteOn); + //} + + note=data1; + lastnoteTime=ofGetElapsedTimef(); + if (list.layers.size()&&list.lock()) { //if playlist is loaded + map::iterator itr; + //for(itr = list.layers.begin(); itr != list.layers.end(); ++itr){ + // list.layers[itr->first]->setNote(note); + //} + list.layers[note]->setNote(note); + list.unlock(); + } + if (noteRandomiseColours) { + makeColours(); // + } + randOffs=ofRandom(100.0f); + break; + case 176: //control change channel 0 + //for (int i=0;imix==eventArgs.byteOne) layers[i]->setMixAmt(((float)eventArgs.byteTwo)/127.0f); + //} + if (debug) printf("cc: %i %i\n",data1,data2); + if (data1>=START_CONTROLLER) controllers[data1-START_CONTROLLER]=data2; + } +} + diff --git a/liveengine/src/testApp.h b/liveengine/src/testApp.h new file mode 100755 index 0000000..fa04e0b --- /dev/null +++ b/liveengine/src/testApp.h @@ -0,0 +1,243 @@ +#pragma once + +//#include + +#include "ofMain.h" +#include "ofxXmlSettings.h" + +/* +modprobe snd-virmidi +have had problems with it not being recognised - rebuild seemed to fix it + + +6 controllers +each note switches in 6 new visuals which are at the same strengths +as the previous bunch + +is it necessary to represent them seperately? + +maybe take them all in, but initially modulate one picture on the strength of the strongest + +maybe each object is a plugin and the 6 controllers affect 6 parameters of it +ie speed, matting type, colour tweak + +object that plays when a note is received can be called a track, a sample, a bank, a layer? + +object remembers playback head/ heads + +initial footage set for each track: program change? +(does this leave any room for creative input) or set via gui? + +video playback object +still image object + +load files in gui - loadable area + +creative input - alter layers live via AVS compatible system which also allows local MIDI control, +scripting, manipulating layers etc + +probably pretty tricky to create a .ape loader - difficulty in recreating the windows GUI + +probably a lot easier to think about a way of making a modular editor that can be manipulated live +nice to think about making scripted layers - using nseel or other + +initially - divide screen into grid - play notes with fade + +class that loads an svg and maps controllers to layers +layers are there but maybe its best to draw all of the colours mapped in some way rather than cutting out layers - colour transformation based on a hue angle + + +fix feedback - direction etc +all drawn/ scaled from middle +colours for svgs +multi screen +loader/ programme changer - seperate xml for main programme and for each content section +script engine for scaling +more specific colour filtering for photos +auto masks based on colour + +wrap around/ scale textures + +3d blocks +non random colours + +option to randomise colours on each note + +--make transparent + +--interface for exploring and saving - swapping? + + +*/ + + + +#define OF_ADDON_USING_OFXMIDIIN + + +#include "ofxMidi.h" +#include "ofxFensterManager.h" + +#include "ofxGui.h" + + +#include "viewport.h" +#include "threadNI.h" + + +/* +enum PropertyAttribute { + None = 0, + ReadOnly = 1 << 0, + DontEnum = 1 << 1, + DontDelete = 1 << 2 +}; +*/ + +class previewWindow; +class guiWindow; +class kinectWindow; + +//#define GRAB_TEXTURE + +class testApp : public ofxFensterListener, public ofxMidiListener{ + + public: + + void setup(); + void update(); + void draw(); + + void keyPressed(int key, ofxFenster* win); + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void windowResized(int w, int h); + void gotMessage(ofMessage msg); + void dragEvent(ofDragInfo dragInfo); + void dragEvent(ofDragInfo dragInfo,ofxFenster* win); + + void saveSettings(string filename); + + void mousePressedEvent(ofMouseEventArgs &args); + void keyPressedEvent(ofKeyEventArgs &args); + void windowEvent(ofResizeEventArgs &args); + + void nmidiMessage(int event,int data1, int data2); + + void makeColours(); + + void toggleFPS(); + bool showFPS; + + ofxXmlSettings XML; + + unsigned char* controllers; + int note, mode; + + //to be moved into svg object gui + + bool debug; + + bool fullscreenoutput; + + float lastnoteTime; + + int fadetime; + int rotate; + float scale,fscale; + + int xshift,yshift; + + ofColor* controller_colours; + + float colShift; + + viewport vp1,vp2; + vector viewports; + int activeView; + + previewWindow *prevWin; + guiWindow *guiWin; + kinectWindow *kinectWin; + + ofxFenster* win; + + int midiChannel; + + ofxMidiIn midiIn; + + void newMidiMessage(ofxMidiEventArgs& eventArgs); + + playlist list; + + + ofxPanel gui; + ofxToggle reversemain; + ofxToggle controlColours; + ofxToggle noteRandomiseColours; + ofxToggle transparentBlack; + ofxButton resetDrawscale; + ofxButton resetFBscale; + ofxIntSlider fS; + ofxParameter fadeScale; + ofxFloatSlider dT; + ofxParameter decayTime; + ofxToggle oscScale; + ofxToggle breakOsc; + ofxToggle randomOsc; + ofxFloatSlider sA; + ofxParameter scaleAmplitude; + ofxFloatSlider sF; + ofxParameter scaleFrequency; + ofxToggle drawCloud; + ofxToggle drawSkel; + + float randOffs; + + void resetDrawscalePressed(bool & pressed); + void resetFBscalePressed(bool & pressed); + + + //kinect stuff + + bool useKinect; + + threadNI NIinstance; + +}; + +class kinectWindow: public ofxFensterListener{ +public: + ~kinectWindow(); + testApp *parent; + void setup(); + void setParent(testApp *p); + void draw(); +}; + + +class previewWindow: public ofxFensterListener{ +public: + ~previewWindow(); + ofFbo *rb; + void setup(); + void setBuffer(ofFbo *buffer); + void draw(); +}; + +class guiWindow: public ofxFensterListener{ +public: + ~guiWindow(); + testApp *parent; + void setup(); + void setParent(testApp *p); + void draw(); + void dragEvent(ofDragInfo dragInfo,ofxFenster* win); + void windowMoved(int x, int y); +}; + + diff --git a/liveengine/src/viewport.cpp b/liveengine/src/viewport.cpp new file mode 100755 index 0000000..f86110f --- /dev/null +++ b/liveengine/src/viewport.cpp @@ -0,0 +1,458 @@ +#include "viewport.h" +#define DEBUG 0 + +//texture binding with normalised coords +void bindTexture(ofBaseHasTexture &t) { + ofTexture &tex = t.getTextureReference(); + tex.bind(); + + glMatrixMode(GL_TEXTURE); + glPushMatrix(); + glLoadIdentity(); + + ofTextureData texData = tex.getTextureData(); + if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) { + glScalef(tex.getWidth(), tex.getHeight(), 1.0f); + } else { + glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f); + } + + glMatrixMode(GL_MODELVIEW); +} +void unbindTexture(ofBaseHasTexture &t) { + t.getTextureReference().unbind(); + + glMatrixMode(GL_TEXTURE); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); +} +void bindTex(ofTexture &tex) { + tex.bind(); + + glMatrixMode(GL_TEXTURE); + glPushMatrix(); + glLoadIdentity(); + + ofTextureData texData = tex.getTextureData(); + if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) { + glScalef(tex.getWidth(), tex.getHeight(), 1.0f); + } else { + glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f); + } + + glMatrixMode(GL_MODELVIEW); +} +void unbindTex(ofTexture &tex) { + tex.unbind(); + + glMatrixMode(GL_TEXTURE); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); +} +//-------------------------------------------------- + +viewport::viewport() +{ + + //ctor +} +viewport::viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) { + setup(_w,_h,_x,_y,_r,_ox,_oy); +} + +void viewport::setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) { + r=_r; + w=_w; + h=_h; + x=_x; + y=_y; + ox=_ox; + oy=_oy; + rb1.allocate(w,h,GL_RGB); + rb2.allocate(w,h,GL_RGB); + rb3.allocate(w,h,GL_RGB); + isMapped=false; + printf("%ix%i, vp offset: %f,%f\n",w,h,-(sin(ofDegToRad(r))*h/2)-(cos(ofDegToRad(r))*w/2),-(sin(ofDegToRad(r))*w/2)-(cos(ofDegToRad(r))*h/2)); +} + +void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift){ + + + + // test screen shape + /* + ofSetColor(255,0,0); + ofRect(0,0,w/2,h/2); + ofRect(w/2,h/2,w/2,h/2); + ofSetColor(0,255,0); + ofRect(0,h/2,w/2,h/2); + ofRect(w/2,0,w/2,h/2); + */ + + rb1.begin(); + + //can be done with texture offset? + + int startx=((w-(w*fscale))/2)+xshift; + while (startx>0) startx-=(w*fscale); + int starty=((h-(h*fscale))/2)+yshift; + while (starty>0) starty-=(h*fscale); + + for (int i=startx;i0||mode==SOLID) { + switch(mode) { + case SOLID: + ofSetColor(255,0,0); + ofRect(0,0,ofGetWidth(),ofGetHeight()); + break; + case BLOCKS: + for (int i=0;i>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7)); + ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight); + } + break; + case LIST: + if (list.lock()) { //if playlist is loaded + if (list.layers.find(note)!=list.layers.end()) { + ofPushMatrix(); + ofTranslate(w/2,h/2); + ofScale(scale,scale,scale); + ofTranslate(-w/2,-h/2); + ofSetColor(255,255,255); + if (controlColours) list.layers[note]->draw(a,controllers,w,h,transparentBlack,colShift); + else list.layers[note]->draw(a,w,h,colShift); + ofPopMatrix(); + } + list.unlock(); + } + break; + } + } + + rb1.end(); + + rb2.begin(); + ofSetColor(255,255,255); + rb1.draw(0,0); + rb2.end(); + + ofPushMatrix(); + ofTranslate(x+(w/2),y+(h/2)); + ofRotate(r); + //ofTranslate(-abs(sin(ofDegToRad(r))*h/2)-abs(cos(ofDegToRad(r))*w/2),-abs(sin(ofDegToRad(r))*w/2)-abs(cos(ofDegToRad(r))*h/2)); + ofTranslate(ox,oy); + + rb2.draw(0,0); + + ofPopStyle(); + + ofPopMatrix(); + +} + +viewport::~viewport() +{ + //dtor +} + +void viewport::setUG(ofxUserGenerator *_rUser){ + rUser=_rUser; + isMapped=true; +} + +//------------------------- +mappedviewport::mappedviewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) { + setup(_w,_h,_x,_y,_r,_ox,_oy); +} +void mappedviewport::setUG(ofxUserGenerator *_rUser){ + rUser=_rUser; +} +void viewport::setcam(map&settings){ + + vars=new keyVar[9]; + vars[0].set('w','s',ofToFloat(settings["fov"]),0.2,1.0,3.0); + vars[1].set('g','d',ofToFloat(settings["targX"]),10,1.0,3.0); + vars[2].set('r','v',ofToFloat(settings["targY"]),10,1.0,3.0); + vars[3].set('t','c',ofToFloat(settings["targZ"]),10,1.0,3.0); + vars[4].set('u','n',ofToFloat(settings["lat"]),.03,1.0,3.0); + vars[5].set('j','h',ofToFloat(settings["lng"]),.03,1.0,3.0); + vars[6].set(',','m',ofToFloat(settings["roll"]),0.03,1.0,3.0); + vars[7].set('o','l',ofToFloat(settings["dolly"]),25,1.0,3.0); + vars[8].set('q','a',ofToFloat(settings["distort"]),.00001,1.0,3.0); +} +double viewport::getSetting(const string& setting){ + if (setting=="fov") return vars[0].getVal(); + if (setting=="targX") return vars[1].getVal(); + if (setting=="targY") return vars[2].getVal(); + if (setting=="targZ") return vars[3].getVal(); + if (setting=="lat") return vars[4].getVal(); + if (setting=="lng") return vars[5].getVal(); + if (setting=="roll") return vars[6].getVal(); + if (setting=="dolly") return vars[7].getVal(); + if (setting=="distort") return vars[8].getVal(); + return 0.0; +} +void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift,bool drawCloud,bool drawSkel){ + + //printf("drawing mapped frame %i\n",ofGetFrameNum()); + ofNode c=ofNode(); + ofNode t=ofNode(); + t.setParent(c); + t.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal()); + //make target controls relative to rotation + c.rotate(vars[5].getVal(), ofVec3f(0, 1, 0)); + + target.setPosition(t.getGlobalPosition()); + //camera.orbit(vars[5].getVal(), vars[4].getVal(), vars[7].getVal(), target); + camera.setFov(vars[0].getVal()); + ofVec3f p(0, 0, vars[7].getVal()); + //p.rotate(ofClamp(vars[2].getVal(), -89, 89), ofVec3f(1, 0, 0)); + p.rotate(vars[4].getVal(), ofVec3f(1, 0, 0)); + p.rotate(vars[5].getVal(), ofVec3f(0, 1, 0)); + p += target.getPosition(); + camera.setPosition(p); + camera.lookAt(target,ofVec3f(0,1,0).rotate(vars[6].getVal(),ofVec3f(0,0,1)).rotate(vars[5].getVal(),ofVec3f(0,1,0))); + + rb1.begin(); + + + int startx=((w-(w*fscale))/2)+xshift; + while (startx>0) startx-=(w*fscale); + int starty=((h-(h*fscale))/2)+yshift; + while (starty>0) starty-=(h*fscale); + + for (int i=startx;i0||mode==SOLID) { + switch(mode) { + case SOLID: + ofSetColor(255,0,0); + ofRect(0,0,ofGetWidth(),ofGetHeight()); + break; + case BLOCKS: + for (int i=0;i>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7)); + ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight); + } + break; + case LIST: + if (list.lock()) { //if playlist is loaded + if (list.layers.find(note)!=list.layers.end()) { + ofPushMatrix(); + ofTranslate(w/2,h/2); + ofScale(scale,scale,scale); + ofTranslate(-w/2,-h/2); + if (controlColours) list.layers[note]->draw(a,controllers,w,h,transparentBlack,colShift); + else list.layers[note]->draw(a,w,h,colShift); + ofPopMatrix(); + } + list.unlock(); + } + break; + } + } + + + rb1.end(); + + rb2.begin(); + ofSetColor(255,255,255); + rb1.draw(0,0); + rb2.end(); + + rb3.begin(); + ofSetColor(255,255,255); + ofBackground(0,0,0); + //rb1.draw(0,0); + + //map onto kinect skeleton + + + camera.begin(); + + if (drawCloud) { + int step = 1; + glBegin(GL_POINTS); + for(int y = 0; y < 480; y += step) { + for(int x = 0; x < 640; x += step) { + ofPoint pos = rUser->getWorldCoordinateAt(x, y, 0); //userID); + //if (pos.z == 0 ) continue; // gets rid of background -> still a bit weird if userID > 0... //&& isCPBkgnd + ofColor color = rUser->getWorldColorAt(x,y, 0); //userID); + glColor4ub((unsigned char)color.r, (unsigned char)color.g, (unsigned char)color.b, (unsigned char)color.a); + glVertex3f(pos.x, pos.y, pos.z); + } + } + glEnd(); + glColor3f(1.0f, 1.0f, 1.0f); + } + if (drawSkel) { + ofSetColor(255,0,0); + glBegin(GL_LINES); + for (int i=0;igetNumberOfTrackedUsers();i++) { + ofxTrackedUser *u=rUser->getTrackedUser(i); + glVertex3f(u->left_shoulder.position[0].X,u->left_shoulder.position[0].Y,u->left_shoulder.position[0].Z); + glVertex3f(u->left_shoulder.position[1].X,u->left_shoulder.position[1].Y,u->left_shoulder.position[1].Z); + + glVertex3f(u-> left_upper_arm.position[0].X,u->left_upper_arm.position[0].Y,u-> left_upper_arm.position[0].Z); + glVertex3f(u-> left_upper_arm.position[1].X,u->left_upper_arm.position[1].Y,u-> left_upper_arm.position[1].Z); + + glVertex3f(u-> left_lower_arm.position[0].X,u->left_lower_arm.position[0].Y,u-> left_lower_arm.position[0].Z); + glVertex3f(u-> left_lower_arm.position[1].X,u->left_lower_arm.position[0].Y,u-> left_lower_arm.position[1].Z); + + glVertex3f(u-> right_shoulder.position[0].X,u->right_shoulder.position[0].Y,u-> right_shoulder.position[0].Z); + glVertex3f(u-> right_shoulder.position[1].X,u->right_shoulder.position[1].Y,u-> right_shoulder.position[1].Z); + + glVertex3f(u-> right_upper_arm.position[0].X,u-> right_upper_arm.position[0].Y,u-> right_upper_arm.position[0].Z); + glVertex3f(u-> right_upper_arm.position[1].X,u-> right_upper_arm.position[1].Y,u-> right_upper_arm.position[1].Z); + + glVertex3f(u-> right_lower_arm.position[0].X,u-> right_lower_arm.position[0].Y,u-> right_lower_arm.position[0].Z); + glVertex3f(u-> right_lower_arm.position[1].X,u-> right_lower_arm.position[1].Y,u-> right_lower_arm.position[1].Z); + + glVertex3f(u-> left_upper_torso.position[0].X,u-> left_upper_torso.position[0].Y,u-> left_upper_torso.position[0].Z); + glVertex3f(u-> left_upper_torso.position[1].X,u-> left_upper_torso.position[1].Y,u-> left_upper_torso.position[1].Z); + + glVertex3f(u->right_upper_torso.position[0].X,u->right_upper_torso.position[0].Y,u->right_upper_torso.position[0].Z); + glVertex3f(u->right_upper_torso.position[1].X,u->right_upper_torso.position[1].Y,u->right_upper_torso.position[1].Z); + + glVertex3f(u->left_lower_torso.position[0].X,u->left_lower_torso.position[0].Y,u->left_lower_torso.position[0].Z); + glVertex3f(u->left_lower_torso.position[1].X,u->left_lower_torso.position[1].Y,u->left_lower_torso.position[1].Z); + + glVertex3f(u->left_upper_leg.position[0].X,u->left_upper_leg.position[0].Y,u->left_upper_leg.position[0].Z); + glVertex3f(u->left_upper_leg.position[1].X,u->left_upper_leg.position[1].Y,u->left_upper_leg.position[1].Z); + + glVertex3f(u->left_lower_leg.position[0].X,u->left_lower_leg.position[0].Y,u->left_lower_leg.position[0].Z); + glVertex3f(u->left_lower_leg.position[1].X,u->left_lower_leg.position[1].Y,u->left_lower_leg.position[1].Z); + + glVertex3f(u->right_lower_torso.position[0].X,u->right_lower_torso.position[0].Y,u->right_lower_torso.position[0].Z); + glVertex3f(u->right_lower_torso.position[1].X,u->right_lower_torso.position[1].Y,u->right_lower_torso.position[1].Z); + + glVertex3f(u->right_upper_leg.position[0].X,u->right_upper_leg.position[0].Y,u->right_upper_leg.position[0].Z); + glVertex3f(u->right_upper_leg.position[1].X,u->right_upper_leg.position[1].Y,u->right_upper_leg.position[1].Z); + + glVertex3f(u->right_lower_leg.position[0].X,u->right_lower_leg.position[0].Y,u->right_lower_leg.position[0].Z); + glVertex3f(u->right_lower_leg.position[1].X,u->right_lower_leg.position[1].Y,u->right_lower_leg.position[1].Z); + + glVertex3f(u->hip.position[0].X,u->hip.position[0].Y,u->hip.position[0].Z); + glVertex3f(u->hip.position[1].X,u->hip.position[1].Y,u->hip.position[1].Z); + } + glEnd(); + ofSetColor(255,255,255); + } + + bindTexture(rb1); + + for (int i=0;igetNumberOfTrackedUsers();i++){ + + ofxTrackedUser* u=(rUser->getTrackedUser(i+1)); + + if (u->neck.found) { + + float ratio=16.0f/9.0f; + float heightratio=0.8f; + float widthratio=0.8f; + + float ax=((float)(u->hip.position[1].X-u->hip.position[0].X)); //hip vector + float ay=((float)(u->hip.position[1].Y-u->hip.position[0].Y)); + float az=((float)(u->hip.position[1].Z-u->hip.position[0].Z)); + + float cx=(float)(u->hip.position[0].X)+(ax*0.5f); //centre of hips + float cy=(float)(u->hip.position[0].Y)+(ay*0.5f); + float cz=(float)(u->hip.position[0].Z)+(az*0.5f); + + float hx=(((float)(u->left_shoulder.position[0].X))-cx); //torso vector + float hy=(((float)(u->left_shoulder.position[0].Y))-cy); + float hz=(((float)(u->left_shoulder.position[0].Z))-cz); + + float p1x=cx+(hx*(1.0f-heightratio)*0.5f); //centre of frame bottom + float p1y=cy+(hy*(1.0f-heightratio)*0.5f); + float p1z=cz+(hz*(1.0f-heightratio)*0.5f); + + float p2x=cx+(hx*(1.0f-((1.0f-heightratio)*0.5f))); //centre of frame top + float p2y=cy+(hy*(1.0f-((1.0f-heightratio)*0.5f))); + float p2z=cz+(hz*(1.0f-((1.0f-heightratio)*0.5f))); + + ofVec3f c1=ofVec3f(p2x-(ax*0.5*widthratio), p2y-(ay*0.5*widthratio), p2z-(az*0.5*widthratio)); + ofVec3f c2=ofVec3f(p2x+(ax*0.5*widthratio), p2y+(ay*0.5*widthratio), p2z+(az*0.5*widthratio)); + ofVec3f c3=ofVec3f(p1x-(ax*0.5*widthratio), p1y-(ay*0.5*widthratio), p1z-(az*0.5*widthratio)); + ofVec3f c4=ofVec3f(p1x+(ax*0.5*widthratio), p1y+(ay*0.5*widthratio), p1z+(az*0.5*widthratio)); + + ofMesh targ; + targ.addVertex(c1); + targ.addTexCoord(ofVec2f(0,0)); + targ.addVertex(c2); + targ.addTexCoord(ofVec2f(1,0)); + targ.addVertex(c3); + targ.addTexCoord(ofVec2f(0,1)); + targ.addVertex(c3); + targ.addTexCoord(ofVec2f(0,1)); + targ.addVertex(c2); + targ.addTexCoord(ofVec2f(1,0)); + targ.addVertex(c4); + targ.addTexCoord(ofVec2f(1,1)); + targ.draw(); + + } + } + + camera.end(); + + unbindTexture(rb1); + + + rb3.end(); + + ofPushMatrix(); + ofTranslate(x+(w/2),y+(h/2)); + ofRotate(r); + //ofTranslate(-abs(sin(ofDegToRad(r))*h/2)-abs(cos(ofDegToRad(r))*w/2),-abs(sin(ofDegToRad(r))*w/2)-abs(cos(ofDegToRad(r))*h/2)); + ofTranslate(ox,oy); + + rb3.draw(0,0); + + ofPopStyle(); + + ofPopMatrix(); + +} +//-------------------------------------------------------------- +void viewport::setDefaults(){ + vars[0].setVal(17.25); + vars[1].setVal(0.0); + vars[2].setVal(112.0); + vars[3].setVal(0.0); + vars[4].setVal(0.0); + vars[5].setVal(0.0); + vars[6].setVal(0.0); + vars[7].setVal(1000.0); + vars[8].setVal(0.0); +} +//-------------------------------------------------------------- + +void viewport::keyPressed(int key){ + for (int i=0;i<8;i++) vars[i].keyPressed(key); + if (DEBUG) printf("fov: %f distort: %f\n",vars[0].getVal(),vars[7].getVal()); + if (key=='!') setDefaults(); +} +//-------------------------------------------------------------- +void viewport::keyReleased(int key){ + for (int i=0;i<8;i++) vars[i].keyReleased(key); +} diff --git a/liveengine/src/viewport.h b/liveengine/src/viewport.h new file mode 100755 index 0000000..c401c17 --- /dev/null +++ b/liveengine/src/viewport.h @@ -0,0 +1,69 @@ +#ifndef VIEWPORT_H +#define VIEWPORT_H + +#include "ofxOpenNI.h" +#include "ofMain.h" +#include "playlist.h" + +#define NUM_NOTES 64 +#define START_NOTE 36 +#define NUM_CONTROLLERS 26 +#define START_CONTROLLER 102 + +#define NOTHING 0 +#define BLOCKS 1 +#define LIST 2 +#define SOLID 3 + +void bindTexture(ofBaseHasTexture &t); +void unbindTexture(ofBaseHasTexture &t); +void bindTex(ofTexture &tex); +void unbindTex(ofTexture &tex); + +#include "keyVar.h" + +class viewport +{ + public: + viewport(); + viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); + void setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); + void draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift); + void mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift,bool drawCloud,bool drawSkel); + void setcam(map&settings); + double getSetting(const string& setting); + + ofImage testtexture; + virtual ~viewport(); + void setUG(ofxUserGenerator *_rUser); + ofFbo rb1,rb2,rb3; + float r; + bool isMapped; + + void setDefaults(); + void keyPressed(int key); + void keyReleased(int key); + + protected: + int x, y,w,h,ox,oy; + ofxUserGenerator *rUser; + private: + keyVar* vars; + + ofCamera camera; + ofNode target; + +}; + +class mappedviewport: public viewport { + public: + + mappedviewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); + void setUG(ofxUserGenerator *_rUser); + void mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift); + ofxUserGenerator *rUser; + private: + +}; + +#endif // VIEWPORT_H diff --git a/sunkenEngine/.DS_Store b/sunkenEngine/.DS_Store new file mode 100644 index 0000000..45a2605 Binary files /dev/null and b/sunkenEngine/.DS_Store differ diff --git a/sunkenEngine/.gitignore b/sunkenEngine/.gitignore new file mode 100644 index 0000000..b672fde --- /dev/null +++ b/sunkenEngine/.gitignore @@ -0,0 +1 @@ +obj diff --git a/sunkenEngine/Makefile b/sunkenEngine/Makefile new file mode 100644 index 0000000..7a7fe8b --- /dev/null +++ b/sunkenEngine/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=../../.. +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/sunkenEngine/Project.xcconfig b/sunkenEngine/Project.xcconfig new file mode 100644 index 0000000..b172545 --- /dev/null +++ b/sunkenEngine/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../openFrameworks + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../openFrameworks/libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/sunkenEngine/addons.make b/sunkenEngine/addons.make new file mode 100644 index 0000000..aa4531f --- /dev/null +++ b/sunkenEngine/addons.make @@ -0,0 +1,7 @@ +ofxXmlSettings +ofxGui +ofxMidi +ofxSVGTiny +ofxAssets +ofxSpriteManager +ofxExtras diff --git a/sunkenEngine/bin/.DS_Store b/sunkenEngine/bin/.DS_Store new file mode 100644 index 0000000..34090e9 Binary files /dev/null and b/sunkenEngine/bin/.DS_Store differ diff --git a/sunkenEngine/bin/data/.DS_Store b/sunkenEngine/bin/data/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/sunkenEngine/bin/data/.DS_Store differ diff --git a/sunkenEngine/bin/data/.gitkeep b/sunkenEngine/bin/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sunkenEngine/bin/data/Aerobics.xml b/sunkenEngine/bin/data/Aerobics.xml new file mode 100644 index 0000000..e4b4362 --- /dev/null +++ b/sunkenEngine/bin/data/Aerobics.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/._LBOAT022.WMF.svg b/sunkenEngine/bin/data/divers mac/._LBOAT022.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LBOAT022.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01606A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01606A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01606A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01631A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01631A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01631A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01730A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01730A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01730A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01745A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01745A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01745A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01776A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01776A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01776A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01811A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01811A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01811A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01812A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01812A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01812A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LF01814A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LF01814A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LF01814A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LH01152A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LH01152A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LH01152A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._LH01219A.WMF.svg b/sunkenEngine/bin/data/divers mac/._LH01219A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._LH01219A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._RD01449A.WMF.svg b/sunkenEngine/bin/data/divers mac/._RD01449A.WMF.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._RD01449A.WMF.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._rd01c70a.svg b/sunkenEngine/bin/data/divers mac/._rd01c70a.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._rd01c70a.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._rd01c71a.svg b/sunkenEngine/bin/data/divers mac/._rd01c71a.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._rd01c71a.svg differ diff --git a/sunkenEngine/bin/data/divers mac/._rd01c72a.svg b/sunkenEngine/bin/data/divers mac/._rd01c72a.svg new file mode 100644 index 0000000..57b4f31 Binary files /dev/null and b/sunkenEngine/bin/data/divers mac/._rd01c72a.svg differ diff --git a/sunkenEngine/bin/data/divers mac/LBOAT022.WMF.svg b/sunkenEngine/bin/data/divers mac/LBOAT022.WMF.svg new file mode 100644 index 0000000..390283e --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LBOAT022.WMF.svg @@ -0,0 +1,372 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01606A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01606A.WMF.svg new file mode 100644 index 0000000..ea19525 --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01606A.WMF.svg @@ -0,0 +1,413 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01631A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01631A.WMF.svg new file mode 100644 index 0000000..c651930 --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01631A.WMF.svg @@ -0,0 +1,710 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01730A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01730A.WMF.svg new file mode 100644 index 0000000..14fcc7a --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01730A.WMF.svg @@ -0,0 +1,713 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01745A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01745A.WMF.svg new file mode 100644 index 0000000..55ecb6d --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01745A.WMF.svg @@ -0,0 +1,1865 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01776A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01776A.WMF.svg new file mode 100644 index 0000000..98d6279 --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01776A.WMF.svg @@ -0,0 +1,669 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01811A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01811A.WMF.svg new file mode 100644 index 0000000..e2d10c4 --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01811A.WMF.svg @@ -0,0 +1,491 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01812A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01812A.WMF.svg new file mode 100644 index 0000000..4f3c66c --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01812A.WMF.svg @@ -0,0 +1,532 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LF01814A.WMF.svg b/sunkenEngine/bin/data/divers mac/LF01814A.WMF.svg new file mode 100644 index 0000000..90d5083 --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LF01814A.WMF.svg @@ -0,0 +1,595 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LH01152A.WMF.svg b/sunkenEngine/bin/data/divers mac/LH01152A.WMF.svg new file mode 100644 index 0000000..4b372ce --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LH01152A.WMF.svg @@ -0,0 +1,875 @@ + + + + +wmf2svg + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/LH01219A.WMF.svg b/sunkenEngine/bin/data/divers mac/LH01219A.WMF.svg new file mode 100644 index 0000000..18c235c --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/LH01219A.WMF.svg @@ -0,0 +1,790 @@ + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/RD01449A.WMF.svg b/sunkenEngine/bin/data/divers mac/RD01449A.WMF.svg new file mode 100644 index 0000000..648042c --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/RD01449A.WMF.svg @@ -0,0 +1,390 @@ + + + + +wmf2svg + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/rd01c70a.svg b/sunkenEngine/bin/data/divers mac/rd01c70a.svg new file mode 100644 index 0000000..7cca60d --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/rd01c70a.svg @@ -0,0 +1,737 @@ + + + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/rd01c71a.svg b/sunkenEngine/bin/data/divers mac/rd01c71a.svg new file mode 100644 index 0000000..42e2c9e --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/rd01c71a.svg @@ -0,0 +1,609 @@ + + + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/divers mac/rd01c72a.svg b/sunkenEngine/bin/data/divers mac/rd01c72a.svg new file mode 100644 index 0000000..d4a4e60 --- /dev/null +++ b/sunkenEngine/bin/data/divers mac/rd01c72a.svg @@ -0,0 +1,572 @@ + + + + + + +wmf2svg + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/images b/sunkenEngine/bin/data/images new file mode 120000 index 0000000..4dd3347 --- /dev/null +++ b/sunkenEngine/bin/data/images @@ -0,0 +1 @@ +../../../images \ No newline at end of file diff --git a/sunkenEngine/bin/data/settings.xml b/sunkenEngine/bin/data/settings.xml new file mode 100644 index 0000000..92be4ba --- /dev/null +++ b/sunkenEngine/bin/data/settings.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sunkenEngine/bin/data/settings_atrl.xml b/sunkenEngine/bin/data/settings_atrl.xml new file mode 100644 index 0000000..c0fff7a --- /dev/null +++ b/sunkenEngine/bin/data/settings_atrl.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sunkenEngine/bin/data/settings_parlour.xml b/sunkenEngine/bin/data/settings_parlour.xml new file mode 100644 index 0000000..fc0fe8f --- /dev/null +++ b/sunkenEngine/bin/data/settings_parlour.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sunkenEngine/bin/data/settings_parlour_onscreen.xml b/sunkenEngine/bin/data/settings_parlour_onscreen.xml new file mode 100644 index 0000000..90240c1 --- /dev/null +++ b/sunkenEngine/bin/data/settings_parlour_onscreen.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sunkenEngine/bin/data/settings_picos.xml b/sunkenEngine/bin/data/settings_picos.xml new file mode 100755 index 0000000..03fb2d2 --- /dev/null +++ b/sunkenEngine/bin/data/settings_picos.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sunkenEngine/bin/data/settings_picos2.xml b/sunkenEngine/bin/data/settings_picos2.xml new file mode 100755 index 0000000..9693bcd --- /dev/null +++ b/sunkenEngine/bin/data/settings_picos2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/sunkenEngine/bin/data/settings_picos_unmapped.xml b/sunkenEngine/bin/data/settings_picos_unmapped.xml new file mode 100644 index 0000000..92be4ba --- /dev/null +++ b/sunkenEngine/bin/data/settings_picos_unmapped.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sunkenEngine/bin/data/settings_testing.xml b/sunkenEngine/bin/data/settings_testing.xml new file mode 100644 index 0000000..a693cca --- /dev/null +++ b/sunkenEngine/bin/data/settings_testing.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sunkenEngine/bin/data/settings_tv.xml b/sunkenEngine/bin/data/settings_tv.xml new file mode 100755 index 0000000..9c9f9b6 --- /dev/null +++ b/sunkenEngine/bin/data/settings_tv.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sunkenEngine/config.make b/sunkenEngine/config.make new file mode 100644 index 0000000..a2f4f86 --- /dev/null +++ b/sunkenEngine/config.make @@ -0,0 +1,142 @@ +################################################################################ +# CONFIGURE PROJECT MAKEFILE (optional) +# This file is where we make project specific configurations. +################################################################################ + +################################################################################ +# OF ROOT +# The location of your root openFrameworks installation +# (default) OF_ROOT = ../../.. +################################################################################ +OF_ROOT = ../../openFrameworks + +################################################################################ +# PROJECT ROOT +# The location of the project - a starting place for searching for files +# (default) PROJECT_ROOT = . (this directory) +# +################################################################################ +# PROJECT_ROOT = . + +################################################################################ +# PROJECT SPECIFIC CHECKS +# This is a project defined section to create internal makefile flags to +# conditionally enable or disable the addition of various features within +# this makefile. For instance, if you want to make changes based on whether +# GTK is installed, one might test that here and create a variable to check. +################################################################################ +# None + +################################################################################ +# PROJECT EXTERNAL SOURCE PATHS +# These are fully qualified paths that are not within the PROJECT_ROOT folder. +# Like source folders in the PROJECT_ROOT, these paths are subject to +# exlclusion via the PROJECT_EXLCUSIONS list. +# +# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXTERNAL_SOURCE_PATHS = + +################################################################################ +# PROJECT EXCLUSIONS +# These makefiles assume that all folders in your current project directory +# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations +# to look for source code. The any folders or files that match any of the +# items in the PROJECT_EXCLUSIONS list below will be ignored. +# +# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete +# string unless teh user adds a wildcard (%) operator to match subdirectories. +# GNU make only allows one wildcard for matching. The second wildcard (%) is +# treated literally. +# +# (default) PROJECT_EXCLUSIONS = (blank) +# +# Will automatically exclude the following: +# +# $(PROJECT_ROOT)/bin% +# $(PROJECT_ROOT)/obj% +# $(PROJECT_ROOT)/%.xcodeproj +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXCLUSIONS = + +################################################################################ +# PROJECT LINKER FLAGS +# These flags will be sent to the linker when compiling the executable. +# +# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ + +# Currently, shared libraries that are needed are copied to the +# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to +# add a runtime path to search for those shared libraries, since they aren't +# incorporated directly into the final executable application binary. +# TODO: should this be a default setting? +# PROJECT_LDFLAGS=-Wl,-rpath=./libs + +################################################################################ +# PROJECT DEFINES +# Create a space-delimited list of DEFINES. The list will be converted into +# CFLAGS with the "-D" flag later in the makefile. +# +# (default) PROJECT_DEFINES = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_DEFINES = + +################################################################################ +# PROJECT CFLAGS +# This is a list of fully qualified CFLAGS required when compiling for this +# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS +# defined in your platform specific core configuration files. These flags are +# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. +# +# (default) PROJECT_CFLAGS = (blank) +# +# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in +# your platform specific configuration file will be applied by default and +# further flags here may not be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CFLAGS = + +################################################################################ +# PROJECT OPTIMIZATION CFLAGS +# These are lists of CFLAGS that are target-specific. While any flags could +# be conditionally added, they are usually limited to optimization flags. +# These flags are added BEFORE the PROJECT_CFLAGS. +# +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) +# +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) +# +# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the +# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration +# file will be applied by default and further optimization flags here may not +# be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = + +################################################################################ +# PROJECT COMPILERS +# Custom compilers can be set for CC and CXX +# (default) PROJECT_CXX = (blank) +# (default) PROJECT_CC = (blank) +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CXX = +# PROJECT_CC = diff --git a/sunkenEngine/makefile_xcode_project/.DS_Store b/sunkenEngine/makefile_xcode_project/.DS_Store new file mode 100644 index 0000000..002fd5e Binary files /dev/null and b/sunkenEngine/makefile_xcode_project/.DS_Store differ diff --git a/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.pbxproj b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.pbxproj new file mode 100644 index 0000000..25d9c8e --- /dev/null +++ b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.pbxproj @@ -0,0 +1,203 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXFileReference section */ + 2272A6311AC74F65004F5CBF /* viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = viewport.h; path = ../src/viewport.h; sourceTree = ""; }; + 2272A6321AC74F65004F5CBF /* viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = viewport.cpp; path = ../src/viewport.cpp; sourceTree = ""; }; + 2272A6331AC74F65004F5CBF /* playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist.h; path = ../src/playlist.h; sourceTree = ""; }; + 2272A6341AC74F65004F5CBF /* playlist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist.cpp; path = ../src/playlist.cpp; sourceTree = ""; }; + 2272A6351AC74F65004F5CBF /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = ../src/ofApp.h; sourceTree = ""; }; + 2272A6361AC74F65004F5CBF /* ofApp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofApp.cpp; path = ../src/ofApp.cpp; sourceTree = ""; }; + 2272A6371AC74F65004F5CBF /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../src/main.cpp; sourceTree = ""; }; + 2272A6381AC74F65004F5CBF /* layers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = layers.h; path = ../src/layers.h; sourceTree = ""; }; + 2272A6391AC74F65004F5CBF /* layers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = layers.cpp; path = ../src/layers.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 2272A6261AC74F32004F5CBF = { + isa = PBXGroup; + children = ( + 2272A6311AC74F65004F5CBF /* viewport.h */, + 2272A6321AC74F65004F5CBF /* viewport.cpp */, + 2272A6331AC74F65004F5CBF /* playlist.h */, + 2272A6341AC74F65004F5CBF /* playlist.cpp */, + 2272A6351AC74F65004F5CBF /* ofApp.h */, + 2272A6361AC74F65004F5CBF /* ofApp.cpp */, + 2272A6371AC74F65004F5CBF /* main.cpp */, + 2272A6381AC74F65004F5CBF /* layers.h */, + 2272A6391AC74F65004F5CBF /* layers.cpp */, + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + 2272A62B1AC74F32004F5CBF /* sunkenEngine */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "$(ACTION)"; + buildConfigurationList = 2272A62E1AC74F32004F5CBF /* Build configuration list for PBXLegacyTarget "sunkenEngine" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/make; + buildWorkingDirectory = /work/workspace/sunkenfoal/sunkenEngine; + dependencies = ( + ); + name = sunkenEngine; + passBuildSettingsInEnvironment = 1; + productName = sunkenEngine; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXProject section */ + 2272A6271AC74F32004F5CBF /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0620; + ORGANIZATIONNAME = "Tim Redfern"; + TargetAttributes = { + 2272A62B1AC74F32004F5CBF = { + CreatedOnToolsVersion = 6.2; + }; + }; + }; + buildConfigurationList = 2272A62A1AC74F32004F5CBF /* Build configuration list for PBXProject "sunkenEngine" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 2272A6261AC74F32004F5CBF; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2272A62B1AC74F32004F5CBF /* sunkenEngine */, + ); + }; +/* End PBXProject section */ + +/* Begin XCBuildConfiguration section */ + 2272A62C1AC74F32004F5CBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 2272A62D1AC74F32004F5CBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 2272A62F1AC74F32004F5CBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEBUGGING_SYMBOLS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 2272A6301AC74F32004F5CBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2272A62A1AC74F32004F5CBF /* Build configuration list for PBXProject "sunkenEngine" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2272A62C1AC74F32004F5CBF /* Debug */, + 2272A62D1AC74F32004F5CBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2272A62E1AC74F32004F5CBF /* Build configuration list for PBXLegacyTarget "sunkenEngine" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2272A62F1AC74F32004F5CBF /* Debug */, + 2272A6301AC74F32004F5CBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2272A6271AC74F32004F5CBF /* Project object */; +} diff --git a/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ef0fbe9 --- /dev/null +++ b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..4e3c5f9 Binary files /dev/null and b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/sunkenEngine.xcscheme b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/sunkenEngine.xcscheme new file mode 100644 index 0000000..104966c --- /dev/null +++ b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/sunkenEngine.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..4e402a2 --- /dev/null +++ b/sunkenEngine/makefile_xcode_project/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + sunkenEngine.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2272A62B1AC74F32004F5CBF + + primary + + + + + diff --git a/sunkenEngine/of_xcode_project/.DS_Store b/sunkenEngine/of_xcode_project/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/sunkenEngine/of_xcode_project/.DS_Store differ diff --git a/sunkenEngine/openFrameworks-Info.plist b/sunkenEngine/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/sunkenEngine/openFrameworks-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleIconFile + ${ICON} + + diff --git a/sunkenEngine/people from your block ----> b/sunkenEngine/people from your block ----> new file mode 100644 index 0000000..e1d325f --- /dev/null +++ b/sunkenEngine/people from your block ----> @@ -0,0 +1,19 @@ +people from your block ----> + +aeraobics +tennis +judo +dancing / divers +gym + +cutty's advice ----> + +archaeology +religious dudes +yoga + + +piss into the smash ---> + +pasta +fruit and veg \ No newline at end of file diff --git a/sunkenEngine/src/layers.cpp b/sunkenEngine/src/layers.cpp new file mode 100755 index 0000000..bd0f1ce --- /dev/null +++ b/sunkenEngine/src/layers.cpp @@ -0,0 +1,229 @@ +#include "layers.h" + +svglayer::svglayer() { + xo=0;yo=0; +} +svglayer::svglayer(string _f) +{ + load(_f); +} + +void svglayer::load(string _f){ + //check if files exits + svg.load(_f); + printf("%s: %i paths\n",_f.c_str(),svg.getNumPath()); + for (int i=0;i0); +} +void svglayer::getCentre(int cx,int cy) { + if (svg.getNumPath()>0) { + xo=(cx-svg.getWidth())/2; + yo=(cy-svg.getHeight())/2; + } +} + +void svglayer::draw(float a,int cx,int cy,float colShift) { + getCentre(cx,cy); + for (int i=0;i0.0f) { + c.setHue(fmod(c.getHue()+colShift,255.0f)); + //printf ("shift from %f to %f\n",c.getHue(),c.getHue()+colShift); + } + svg.getPathAt(i).setFillColor(c); + svg.getPathAt(i).draw(xo,yo); + } +} +/* +void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift) { + getCentre(cx,cy); + //draw layers tinted by controllers + for (int i=0;i0.1) { + svg.getPathAt(i).draw(xo,yo); + } + } +} +*/ + +void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift) { + getCentre(cx,cy); + //draw layers grouped by controllers + float layerspercontroller=((float)svg.getNumPath())/6.0f; + + for (int i=0;i<6;i++) { + //for (int j=(int)((i+1)*layerspercontroller)-1;j>(int)(i*layerspercontroller);j--) { + for (int j=(int)(i*layerspercontroller);j<(int)((i+1)*layerspercontroller);j++) { + svg.getPathAt(j).setFillColor(fills[j]*a*(((float)controllers[5-i])/127.0f)); //try to reverse order of these + if (!transparentBlack||((a*controllers[5-i])/127.0f)>0.1) { + svg.getPathAt(j).draw(xo,yo); + } + } + } + //printf("counted %i layers of %i\n",(int)(6*layerspercontroller),svg.getNumPath()); +} + + +svglayer::~svglayer() +{ + //dtor +} + +//------------------------------------------------------------------------ +imglayer::imglayer() { + //sprite.setUseTexture(false); +} +imglayer::imglayer(string _filename,int _frames,int _start,float _rate,int n, int e){ + load(_filename,_frames,_start,_rate,n,e); +} + +void imglayer::load(string _filename,int _frames,int _start,float _rate,int n, int e){ + startNote=n; + endNote=e; + sprite.load(_filename,_frames,_start); + sprite.setFrameRate(_rate); +} + + +void imglayer::draw(float a,int cx,int cy,float colShift) { + //if (sprite.isAllocated()) if (!sprite.isUsingTexture()) sprite.setUseTexture(true); //has to be done from the main thread? still doesn't work + + sprite.update(); + int x,y,w,h; + if ((((float)cx)/cy)<(((float)sprite.getWidth())/sprite.getHeight())){ + x=0; + w=cx; + h=((float)cx)*(((float)sprite.getHeight())/sprite.getWidth()); + y=(cy-h)/2; + } + else { + y=0; + h=cy; + w=((float)cy)*(((float)sprite.getWidth())/sprite.getHeight()); + x=(cx-w)/2; + } + ofEnableAlphaBlending(); + sprite.draw(x,y,w,h); + ofDisableAlphaBlending(); +} + +void imglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f) { + imglayer::draw(a,cx,cy,colShift); +} + +void imglayer::setNote(int note) +{ + //is called rerpeatedly no startNote,endNote + //printf("note %i (%i - %i)\n",note,startNote,endNote); + if ((startNote<=note)&&(endNote>=note)) { + if (!sprite.getIsPlaying()) { + + sprite.play(); + + } + //printf("triggered frame %i of %i\n",(int)(((((float)note-startNote)/((float)endNote-startNote)))*sprite.getTotalFrames()),sprite.getTotalFrames()); + sprite.setCurrentFrame((int)(((((float)note-startNote)/((float)endNote-startNote)))*sprite.getTotalFrames())); + //printf("movie %i (%i - %i) frame: %i\n",note,startNote,endNote,(int)(((((float)note-startNote)/((float)endNote-startNote)))*mov.getTotalNumFrames())); + } + else { + if (sprite.getIsPlaying()) { + sprite.stop(); + } + } + +}; + + +imglayer::~imglayer() +{ + //sprite.setUseTexture(false); //free texture +} +//------------------------------------------------------------------------ +videolayer::videolayer() { + //sprite.setUseTexture(false); +} +videolayer::videolayer(string _f,int n,int e,float s) +{ + startNote=n; + endNote=e; + speed=s; + load(_f); +} + +void videolayer::load(string _f){ + name=_f; + mov.setPixelFormat(OF_PIXELS_BGRA); + mov.setUseTexture(false); + bool success=mov.loadMovie(_f); + if (success) { + mov.stop(); + } + printf("%s %s %i bpp\n",success?"loaded":"not loaded",_f.c_str(),success?mov.getPixelsRef().getBytesPerPixel():0); +} + +void videolayer::draw(float a,int cx,int cy,float colShift) { + if (mov.isPlaying()) { + mov.update(); + //unsigned char *pix=mov.getPixels(); + //for (int i=0;i>2)+(pix[i+1]>>1)+(pix[i+2]>>2); + int x,y,w,h; + if ((((float)cx)/cy)<(((float)mov.getWidth())/mov.getHeight())){ + x=0; + w=cx; + h=((float)cx)*(((float)mov.getHeight())/mov.getWidth()); + y=(cy-h)/2; + } + else { + y=0; + h=cy; + w=((float)cy)*(((float)mov.getWidth())/mov.getHeight()); + x=(cx-w)/2; + } + ofEnableAlphaBlending(); + mov.draw(x,y,w,h); + ofDisableAlphaBlending(); + } +} + +void videolayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f) { + draw(a,cx,cy,colShift); +} + +void videolayer::setNote(int note) +{ + + if ((startNote<=note)&&(endNote>=note)) { + if (!mov.isPlaying()) { + //printf("starting movie!\n"); + mov.setUseTexture(true); + mov.play(); + mov.setSpeed(speed); + } + mov.setFrame((int)(((((float)note-startNote)/((float)endNote-startNote)))*mov.getTotalNumFrames())); + //printf("movie %i (%i - %i) frame: %i\n",note,startNote,endNote,(int)(((((float)note-startNote)/((float)endNote-startNote)))*mov.getTotalNumFrames())); + } + else { + if (mov.isPlaying()) { + mov.stop(); + } + } + +}; + + +videolayer::~videolayer() +{ +} diff --git a/sunkenEngine/src/layers.h b/sunkenEngine/src/layers.h new file mode 100755 index 0000000..d34664a --- /dev/null +++ b/sunkenEngine/src/layers.h @@ -0,0 +1,134 @@ +#ifndef SVGLAYER_H +#define SVGLAYER_H + +#include "ofxSVGTiny.h" +#include "ofMain.h" +#include "ofxSprite.h" + +#include + +class layer +{ + public: + layer(){}; + layer(string _f) {load(_f);}; + virtual ~layer(){}; + virtual void load(string _f){}; + virtual void draw(float a,int cx,int cy,float colShift){}; + virtual void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f){ draw(a,cx,cy,colShift);}; + bool getLoaded() {return isLoaded;}; + virtual void setNote(int note) {}; + string name; + int startNote,endNote; + protected: + bool isLoaded; + private: + +}; + +class svglayer: public layer +{ + public: + svglayer(); + svglayer(string _f); + virtual ~svglayer(); + void load(string _f); + void draw(float a,int cx,int cy,float colShift); + void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack=false,float colShift=0.0f); + void getCentre(int cx,int cy); + protected: + private: + ofxSVGTiny svg; + vector fills; + vector strokes; + float xo,yo; +}; + +class sunkenSprite: public ofxSprite { + public: + float playhead,frameRate; + void setFrameRate(float frameRate) { this->frameRate = frameRate;}; + void play() { + startTime=ofGetElapsedTimef(); + ofxSprite::play(); + } + void update() { + if (!getIsPlaying()) return; + playhead=fmod(speed * frameRate * (ofGetElapsedTimef()-startTime),(float)getTotalFrames()); + ofxSprite::setCurrentFrame(playhead); + + } + void setCurrentFrame(float frame) { + //this idea doesn't work - fucks up when frameRate is 0 - + //need to rethink + + //when frameRate is 0 startTime doesn't matter + //this still might not be not entirely correct + if (frameRate>0) startTime-=(frame-pos) / ((float)(frameRate * speed )); + //printf("sunkensprite setting frame %i of %i\n",(int)frame,getTotalFrames()); + //printf("1 checking frame %i of %i\n",(int)frame,getTotalFrames()); + ofxSprite::setCurrentFrame(frame); + /* + pos = frame; + printf("2 checking frame %i of %i\n",(int)frame,getTotalFrames()); + printf("requesting movie frame %i of %i\n",(int)pos,getTotalFrames()); + if (pos<0) if (loop) { pos += totalFrames; } else stop(); + if (pos>=totalFrames) if (loop) { + while (pos>=totalFrames) pos -= totalFrames; + } else { pos = totalFrames-.00001f; isPlaying=false; } + printf("set movie frame %i of %i\n",(int)pos,totalFrames); + */ + } + void draw(int x,int y,int w,int h) { + + int f=playhead; + float fr=fmod(playhead,1.0f); + ofSetColor(255,255,255,(1.0-fr)*255); + //not always? + getImageAtFrame(f).setUseTexture(true); + //getImageAtFrame(f).reloadTexture(); ->190315 still necessary? + getImageAtFrame(f).draw(x,y,w,h); + ofSetColor(255,255,255,fr*255); + f=(f+1)%getTotalFrames(); + getImageAtFrame(f).setUseTexture(true); + //getImageAtFrame(f).reloadTexture(); ->190315 still necessary? + getImageAtFrame(f).draw(x,y,w,h); + } + + private: + float startTime; + float speed,pos; //will this override the base class speed correctly? + +}; + +class imglayer: public layer +{ + public: + imglayer(); + imglayer(string _f,int _frames=1,int _start=1,float _rate=0,int note=0,int endnote=0); + virtual ~imglayer(); + void load(string _filename,int _frames=1,int _start=1,float _rate=0.0,int note=0,int endnote=0); + void draw(float a,int cx,int cy,float colShift); + void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift); + void setNote(int n); + protected: + private: + sunkenSprite sprite; +}; + +class videolayer: public layer +{ + public: + videolayer(); + videolayer(string _f,int n,int e,float s); + virtual ~videolayer(); + void load(string _f); + void draw(float a,int cx,int cy,float colShift); + void draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift); + void setNote(int n); + protected: + private: + float speed; + ofVideoPlayer mov; +}; +#endif // SVGLAYER_H diff --git a/sunkenEngine/src/main.cpp b/sunkenEngine/src/main.cpp new file mode 100644 index 0000000..6d5ff5c --- /dev/null +++ b/sunkenEngine/src/main.cpp @@ -0,0 +1,62 @@ +#include "ofMain.h" +#include "ofApp.h" +#include "ofAppGLFWWindow.h" + +//======================================================================== +int main( ){ + + if (false){ + + ofSetupOpenGL(1360,256, OF_WINDOW); + ofRunApp( new ofApp()); + } + else { + + ofGLFWWindowSettings settings; + settings.width = 2560; //1280; // + settings.height = 720; //360; // + settings.position.x = 0; + settings.position.y = 50; + settings.resizable = true; + + shared_ptr mainWindow = ofCreateWindow(settings); + + + settings.width = 600; + settings.height = 800; + settings.position.x = 300; + settings.position.y = 400; + settings.resizable = true; + settings.shareContextWith = mainWindow; //YES + + shared_ptr previewWindow = ofCreateWindow(settings); + previewWindow->setVerticalSync(false); + //previewWindow->showCursor(); + + + settings.width = 224; + settings.height = 480; + settings.position.x = 0; + settings.position.y = 400; + settings.resizable = false; + shared_ptr guiWindow = ofCreateWindow(settings); + guiWindow->setVerticalSync(false); + + + shared_ptr mainApp(new ofApp); + mainApp->setupGui(); + + ofAddListener(guiWindow->events().draw,mainApp.get(),&ofApp::drawGui); + ofAddListener(guiWindow->events().fileDragEvent,mainApp.get(),&ofApp::dragGui); + ofAddListener(guiWindow->events().keyPressed,mainApp.get(),&ofApp::keyPreview); + + ofAddListener(previewWindow->events().draw,mainApp.get(),& ofApp::drawPreview); + ofAddListener(previewWindow->events().keyPressed,mainApp.get(),&ofApp::keyPreview); + ofAddListener(previewWindow->events().mouseDragged,mainApp.get(),&ofApp::previewMousePressedEvent); + + + ofRunApp(mainWindow, mainApp); + ofRunMainLoop(); + } + +} diff --git a/sunkenEngine/src/ofApp.cpp b/sunkenEngine/src/ofApp.cpp new file mode 100644 index 0000000..2c3b2f3 --- /dev/null +++ b/sunkenEngine/src/ofApp.cpp @@ -0,0 +1,378 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + + //setupGui(); + + int midiPort=0; + midiChannel=0; + if( !XML.loadFile("settings_parlour.xml") ){ //_onscreen + printf("unable to load settings.xml check data/ folder\n"); + }else{ + printf("settings loaded!\n"); + midiPort=ofToInt(XML.getAttribute("liveEngine", "port", "0")); //default to 0/all + midiChannel=ofToInt(XML.getAttribute("liveEngine", "channel", "0")); + if (midiChannel) printf("listening on port %d, midi channel %d\n",midiPort,midiChannel); + else printf("listening on port %d, all midi channels\n",midiPort); + if(XML.pushTag("liveEngine")) { + int numViews=XML.getNumTags("viewport"); + if(numViews) { + for (int i=0;irb1); + +} + + +void ofApp::resetDrawscalePressed(bool & pressed){ + scale=1.0f; +} +void ofApp::resetFBscalePressed(bool & pressed){ + fscale=1.0f; +} +//-------------------------------------------------------------- +void ofApp::setupGui(){ + parameters.setName("parameters"); + + parameters.add(reverse.set("reverse", false)); + parameters.add(reversemain.set("reverse main", false)); + parameters.add(controlColours.set("control colours", false)); + parameters.add(noteRandomiseColours.set("randomise note colours", false)); + parameters.add(transparentBlack.set("transparent black", false)); + parameters.add(resetDrawscale.set("reset draw scale",false)); + parameters.add(resetFBscale.set("reset FB scale",false)); + parameters.add(fadeScale.set("fade scale",0,0,255)); + parameters.add(fadeBackground.set("decay background",255,0,255)); + parameters.add(decayTime.set("decay time",0,0,10.0f)); + parameters.add(oscScale.set("scale size LFO", false)); + parameters.add(breakOsc.set("break oscillators", false)); + parameters.add(randomOsc.set("randomise oscillators", false)); + parameters.add(scaleAmplitude.set("fade scale",0,0,2.0f)); + parameters.add(scaleFrequency.set("fade freq",0,0,5.0f)); + gui.setup(parameters); + + resetDrawscale.addListener(this,&ofApp::resetDrawscalePressed); + resetFBscale.addListener(this,&ofApp::resetFBscalePressed); + + ofSetBackgroundColor(0); + +} + +void ofApp::makeColours() { + controller_colours=new ofColor[NUM_CONTROLLERS]; + for (int i=0;idraw(lambda,controllers,do_reverse?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,do_reverse?1.0f/(scale+os):scale+os,do_reverse?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f,fadeBackground); + } + + ofSetColor(255,255,255); + if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20); + +} + +void ofApp::drawPreview(ofEventArgs & args){ + //ofBackground(0); + previewBuffer->draw(0,0,ofGetWidth(),ofGetHeight()); + +} + +//-------------------------------------------------------------- +void ofApp::drawGui(ofEventArgs & args){ + gui.draw(); + + if (list.lock()) { //if loaded + if (!list.thumbnailed) list.makeThumbnail(); + if (list.thumbnailed) list.thumbnail.draw(20,ofGetHeight()-150); + list.unlock(); + } + ofDrawBitmapString(list.name,20,ofGetHeight()-10); + +} + +void ofApp::dragGui(ofDragInfo & dragInfo){ + printf("got draginfo: %s\n",dragInfo.files[0].c_str()); + int sta=dragInfo.files[0].find_last_of("\\/")+1; + int len=(dragInfo.files[0].find_last_of(".")+4)-sta; + string filename="images/"+dragInfo.files[0].substr(sta,len); + printf("loading %s\n",filename.c_str()); + + list.load(filename); +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + cerr<<"key: "<='0' && key <= '9'){ + mode=key-'0'; + } + if(key == 267||key==OF_KEY_LEFT){ + xshift--; + } + if(key == 268||key==OF_KEY_RIGHT){ + xshift++; + } + if(key == 269||key==OF_KEY_UP){ + yshift--; + } + if(key == 270||key==OF_KEY_DOWN){ + yshift++; + } + if(key == '='){ + makeColours(); + } + if(key == '+'){ + fadetime=min(128,fadetime+1); + } + if(key == '_'){ + fadetime=max(0,fadetime-1); + } + if(key == ']'){ + scale*=1.01; + } + if(key == '['){ + scale/=1.01; + } + if(key == '}'){ + rotate+=90; + } + if(key == '{'){ + rotate-=90; + } + + + if(key == 'd'){ + debug=!debug; + } + + if (key=='j') { + fscale=1.0f; + } + if (key=='h') { + scale=1.0f; + } + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} + +void ofApp::toggleFPS(){ + showFPS=!showFPS; +} + +void ofApp::newMidiMessage(ofxMidiMessage& eventArgs){ + if ((midiChannel==0)||(eventArgs.channel==midiChannel)) { + nmidiMessage(eventArgs.status,eventArgs.bytes[2],eventArgs.bytes[1]); + } +} + + //newMessage(eventArgs.port, eventArgs.channel, eventArgs.byteTwo, eventArgs.timestamp); + +//byteOne : message type + + /* + int port; + int channel; + int status; + int byteOne; + int byteTwo; + double timestamp; + */ + + //printf("%d %d %d %d %d\n",eventArgs.port,eventArgs.channel,eventArgs.status,eventArgs.byteOne,eventArgs.byteTwo); +void ofApp::nmidiMessage(int event,int data1, int data2) { + //printf("midi: %i %i %i\n",event,data1,data2); + bool noteOn; //this old thing! + int i; + switch(event) { + case 144: //noteon-off channel 0 + //printf("note %i %i %i\n",event,data1,data2); + noteOn=(data1==0?false:true); + //for (int i=0;inote==eventArgs.byteOne) layers[i]->setActive(noteOn); + //} + + note=data2; + lastnoteTime=ofGetElapsedTimef(); + if (list.layers.size()&&list.lock()) { //if playlist is loaded + map::iterator itr; + //for(itr = list.layers.begin(); itr != list.layers.end(); ++itr){ + // list.layers[itr->first]->setNote(note); + //} + if (list.layers.find(note)!=list.layers.end()) list.layers[note]->setNote(note); + list.unlock(); + } + if (noteRandomiseColours) { + makeColours(); // + } + randOffs=ofRandom(100.0f); + break; + case 176: //control change channel 0 + //for (int i=0;imix==eventArgs.byteOne) layers[i]->setMixAmt(((float)eventArgs.byteTwo)/127.0f); + //} + //maybe the CC are coming in <127? + //if (debug) + //printf("cc: %i %i\n",data1,data2); + if (data2>=START_CONTROLLER&&data2<(NUM_CONTROLLERS-START_CONTROLLER)) controllers[data2-START_CONTROLLER]=data1; + } + +} +void ofApp::previewMousePressedEvent(ofMouseEventArgs &args) { + //printf("mouse: %i,%i %i of %ix%i\n",args.x,args.y,args.button,win->getWidth(),win->getHeight()); + //0-2 + switch (args.button) { + case 0: + xshift=args.x-(ofGetWidth()/2); + yshift=args.y-(ofGetHeight()/2); + break; + case 1: + //cerr<<"" + scale=pow((float)pow((float)args.x-(ofGetWidth()/2),2.0f)+pow((float)args.y-(ofGetHeight()/2),2),0.5f)/(ofGetWidth()*.1); + break; + case 2: + fscale=(pow((float)pow((float)args.x-(ofGetWidth()/2),2.0f)+pow((float)args.y-(ofGetHeight()/2),2),0.5f)/(ofGetWidth()))+0.5; + break; + } +} \ No newline at end of file diff --git a/sunkenEngine/src/ofApp.h b/sunkenEngine/src/ofApp.h new file mode 100644 index 0000000..04f63dd --- /dev/null +++ b/sunkenEngine/src/ofApp.h @@ -0,0 +1,119 @@ +#pragma once + +#include "ofMain.h" +#include "ofxGui.h" +#include "ofxXmlSettings.h" +#include "ofxMidi.h" + +#include "viewport.h" + +class ofApp : public ofBaseApp, public ofxMidiListener{ + + public: + void setup(); + void setupGui(); + void update(); + void draw(); + void drawGui(ofEventArgs & args); + void dragGui(ofDragInfo & dragInfo); + void previewMousePressedEvent(ofMouseEventArgs &args); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + void newMidiMessage(ofxMidiMessage& eventArgs); + + bool fullscreenoutput; + + + void nmidiMessage(int event,int data1, int data2); + + + void makeColours(); + + void toggleFPS(); + bool showFPS; + + + ofxXmlSettings XML; + + unsigned char* controllers; + int note, mode; + + //to be moved into svg object gui + bool debug; + + + + float lastnoteTime; + + int fadetime; + int rotate; + float scale,fscale; + + int xshift,yshift; + + ofColor* controller_colours; + + float colShift; + + + + viewport vp1,vp2; + vector viewports; + + int midiChannel; + + ofxMidiIn midiIn; + ofxMidiMessage midiMessage; + + playlist list; + + + ofParameterGroup parameters; + + + + ofParameter reverse; + ofParameter reversemain; + ofParameter controlColours; + ofParameter noteRandomiseColours; + ofParameter transparentBlack; + ofParameter resetDrawscale; + ofParameter resetFBscale; + + ofParameter fadeScale; + ofParameter fadeBackground; + ofParameter decayTime; + + ofParameter oscScale; + ofParameter breakOsc; + ofParameter randomOsc; + + ofParameter scaleAmplitude; + ofParameter scaleFrequency; + + + ofxPanel gui; + + + float randOffs; + + void resetDrawscalePressed(bool & pressed); + void resetFBscalePressed(bool & pressed); + + void keyPreview(ofKeyEventArgs& eventArgs); + + void drawPreview(ofEventArgs & args); + ofFbo *previewBuffer; + + + +}; diff --git a/sunkenEngine/src/playlist.cpp b/sunkenEngine/src/playlist.cpp new file mode 100755 index 0000000..eac895f --- /dev/null +++ b/sunkenEngine/src/playlist.cpp @@ -0,0 +1,127 @@ +#include "playlist.h" + +playlist::playlist() +{ + name=""; + +} + +void playlist::load(string _name){ + //printf("loading %s\n",_name.c_str()); + thumbnail.allocate(128,128,GL_RGB); //segfault here orig 128,128,GL_RGB + thumbnailed=false; + + if( !XML.loadFile(_name) ){ + printf("unable to load %s check data/ folder\n",_name.c_str()); + }else { + //printf("starting loader thread\n"); + loadimg(); //how to do this from the worker thread??? + startThread(false, false); //blocking, verbose + } + + + +} + +void playlist::threadedFunction(){ + if( lock() ){ + loadLayers(); + unlock(); + printf("unlocking thread\n"); + } +} + +void playlist::loadLayers(){ + int numLayers=0; + layers.clear(); + name=XML.getAttribute("playlist", "name", ""); + float speed=XML.getAttribute("playlist", "speed", 0); + if(XML.pushTag("playlist")) { + numLayers=XML.getNumTags("svglayer"); + if(numLayers) { + for (int i=0;inote) { + for (int j=note+1;jnote) { + for (int j=note+1;j<=endnote;j++) { + layers[j]=layers[note]; + } + } + } + thumbnailed=false; + } + XML.popTag(); + } + +} + +void playlist::makeThumbnail(){ + if (layers.size()) { + thumbnail.begin(); + ofBackground(0,0,0); + ofPushMatrix(); + ofTranslate(64,64); + ofScale(0.2,0.2,0.2); + ofTranslate(-64,-64); + map::iterator i=layers.begin(); + i->second->draw(1.0,64,64,0.0); + ofPopMatrix(); + thumbnail.end(); + thumbnailed=true; + } +} + + +void playlist::loadimg(){ + int numLayers=0; + layers.clear(); + if(XML.pushTag("playlist")) { + numLayers=XML.getNumTags("imglayer"); + if(numLayers) { + for (int i=0;i layers; + string name; + protected: + private: +}; + +#endif // PLAYLIST_H diff --git a/sunkenEngine/src/viewport.cpp b/sunkenEngine/src/viewport.cpp new file mode 100755 index 0000000..a169146 --- /dev/null +++ b/sunkenEngine/src/viewport.cpp @@ -0,0 +1,136 @@ +#include "viewport.h" + + + +viewport::viewport() +{ + //ctor +} +viewport::viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) { + setup(_w,_h,_x,_y,_r,_ox,_oy); +} + +void viewport::setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) { + r=_r; + w=_w; + h=_h; + x=_x; + y=_y; + ox=_ox; + oy=_oy; + rb1.allocate(w,h,GL_RGB); + rb2.allocate(w,h,GL_RGB); + + printf("%ix%i, vp offset: %f,%f\n",w,h,-(sin(ofDegToRad(r))*h/2)-(cos(ofDegToRad(r))*w/2),-(sin(ofDegToRad(r))*w/2)-(cos(ofDegToRad(r))*h/2)); +} + +void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift,int fadeBG){ + + //http://forum.xfce.org/viewtopic.php?id=6580 + + // test screen shape + /* + ofSetColor(255,0,0); + ofRect(0,0,w/2,h/2); + ofRect(w/2,h/2,w/2,h/2); + ofSetColor(0,255,0); + ofRect(0,h/2,w/2,h/2); + ofRect(w/2,0,w/2,h/2); + */ + + ofPushMatrix(); + + rb1.begin(); + + //can be done with texture offset? + + int startx=((w-(w*fscale))/2)+xshift; + while (startx>0) startx-=(w*fscale); + int starty=((h-(h*fscale))/2)+yshift; + while (starty>0) starty-=(h*fscale); + + for (int i=startx;i0) { + //fadeout part + ofEnableAlphaBlending(); + ofSetColor(0,0,0,fadeBG); + ofRect(0,0,w,h); + ofDisableAlphaBlending(); + } + + float notewidth=w/NUM_NOTES; + float noteheight=h/NUM_CONTROLLERS; + + ofPushStyle(); + + if (note>0) { + switch(mode) { + case BLOCKS: + for (int i=0;i>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7)); + ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight); + } + break; + case LIST: + if (list.lock()) { //if playlist is loaded + if (list.layers.find(note)!=list.layers.end()) { + ofPushMatrix(); + ofTranslate(w/2,h/2); + ofScale(scale,scale,scale); + ofTranslate(-w/2,-h/2); + ofSetColor(255,255,255); + if (controlColours) list.layers[note]->draw(a,controllers,w,h,transparentBlack,colShift); + else list.layers[note]->draw(a,w,h,colShift); + ofPopMatrix(); + } + list.unlock(); + } + break; + } + } + + ofPopStyle(); + + rb1.end(); + + rb2.begin(); + ofSetColor(255,255,255); + rb1.draw(0,0); + rb2.end(); + + ofPopMatrix(); + + ofPushMatrix(); + //ofTranslate(x+(w/2),y+(h/2)); this was the one that was working + //ofTranslate(abs(sin(ofDegToRad(r))*h/2)+abs(cos(ofDegToRad(r))*w/2),abs(sin(ofDegToRad(r))*w/2)+abs(cos(ofDegToRad(r))*h/2)); + ofTranslate(x,y); + + ofTranslate(((w/2)*abs(cos(ofDegToRad(r))))+((h/2)*abs(sin(ofDegToRad(r)))), + ((w/2)*abs(sin(ofDegToRad(r))))+((h/2)*abs(cos(ofDegToRad(r))))); + + ofRotate(r); + ofTranslate(-w/2,-h/2); + //ofTranslate(-abs(sin(ofDegToRad(r))*h/2)-abs(cos(ofDegToRad(r))*w/2),-abs(sin(ofDegToRad(r))*w/2)-abs(cos(ofDegToRad(r))*h/2)); + //ofTranslate(ox,oy); get rid of this and get the rotation right + + ofDisableAlphaBlending(); + + rb2.draw(0,0); + + ofPopMatrix(); + + + + + +} + +viewport::~viewport() +{ + //dtor +} diff --git a/sunkenEngine/src/viewport.h b/sunkenEngine/src/viewport.h new file mode 100755 index 0000000..e28a347 --- /dev/null +++ b/sunkenEngine/src/viewport.h @@ -0,0 +1,34 @@ +#ifndef VIEWPORT_H +#define VIEWPORT_H + +#include "ofMain.h" +#include "playlist.h" + +#define NUM_NOTES 64 +#define START_NOTE 36 +#define NUM_CONTROLLERS 120 +#define START_CONTROLLER 102 + +#define NOTHING 0 +#define BLOCKS 1 +#define LIST 2 + + + +class viewport +{ + public: + viewport(); + viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); + void setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); + void draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift,int fadeBG); + virtual ~viewport(); + ofFbo rb1,rb2; + float r; + protected: + private: + int x, y,w,h,ox,oy; + +}; + +#endif // VIEWPORT_H diff --git a/sunkenEngine/sunkenEngine.cbp b/sunkenEngine/sunkenEngine.cbp new file mode 100644 index 0000000..2dc335b --- /dev/null +++ b/sunkenEngine/sunkenEngine.cbp @@ -0,0 +1,52 @@ + + + + + + diff --git a/sunkenEngine/sunkenEngine.layout b/sunkenEngine/sunkenEngine.layout new file mode 100644 index 0000000..1053280 --- /dev/null +++ b/sunkenEngine/sunkenEngine.layout @@ -0,0 +1,4 @@ + + + + diff --git a/sunkenEngine/sunkenEngine.xcodeproj/project.pbxproj b/sunkenEngine/sunkenEngine.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8501447 --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/project.pbxproj @@ -0,0 +1,723 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 22592A6C1AC7530700C5B29E /* ofxSVGTiny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A631AC7530700C5B29E /* ofxSVGTiny.cpp */; }; + 22592A6D1AC7530700C5B29E /* src_colors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A661AC7530700C5B29E /* src_colors.cpp */; }; + 22592A6E1AC7530700C5B29E /* svgtiny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A671AC7530700C5B29E /* svgtiny.cpp */; }; + 22592A6F1AC7530700C5B29E /* svgtiny_gradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A691AC7530700C5B29E /* svgtiny_gradient.cpp */; }; + 22592A701AC7530700C5B29E /* svgtiny_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A6B1AC7530700C5B29E /* svgtiny_list.cpp */; }; + 22592A7A1AC7531300C5B29E /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A731AC7531300C5B29E /* ofxXmlSettings.cpp */; }; + 22592A7B1AC7531300C5B29E /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A761AC7531300C5B29E /* tinyxml.cpp */; }; + 22592A7C1AC7531300C5B29E /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A781AC7531300C5B29E /* tinyxmlerror.cpp */; }; + 22592A7D1AC7531300C5B29E /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A791AC7531300C5B29E /* tinyxmlparser.cpp */; }; + 22592A841AC7531D00C5B29E /* ofxSprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A801AC7531D00C5B29E /* ofxSprite.cpp */; }; + 22592A851AC7531D00C5B29E /* ofxSpriteManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A821AC7531D00C5B29E /* ofxSpriteManager.cpp */; }; + 22592A8A1AC7532100C5B29E /* ofxAssets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A881AC7532100C5B29E /* ofxAssets.cpp */; }; + 22592ABA1AC7532F00C5B29E /* ofxRtMidiIn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A8E1AC7532F00C5B29E /* ofxRtMidiIn.cpp */; }; + 22592ABB1AC7532F00C5B29E /* ofxRtMidiOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A901AC7532F00C5B29E /* ofxRtMidiOut.cpp */; }; + 22592ABC1AC7532F00C5B29E /* ofxBaseMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A9D1AC7532F00C5B29E /* ofxBaseMidi.cpp */; }; + 22592ABD1AC7532F00C5B29E /* ofxMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592A9F1AC7532F00C5B29E /* ofxMidi.cpp */; }; + 22592ABE1AC7532F00C5B29E /* ofxMidiIn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AA21AC7532F00C5B29E /* ofxMidiIn.cpp */; }; + 22592ABF1AC7532F00C5B29E /* ofxMidiMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AA41AC7532F00C5B29E /* ofxMidiMessage.cpp */; }; + 22592AC01AC7532F00C5B29E /* ofxMidiOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AA61AC7532F00C5B29E /* ofxMidiOut.cpp */; }; + 22592AC11AC7532F00C5B29E /* RtMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AB61AC7532F00C5B29E /* RtMidi.cpp */; }; + 22592AC21AC7532F00C5B29E /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22592AB81AC7532F00C5B29E /* CoreMIDI.framework */; }; + 22592AC31AC7532F00C5B29E /* CoreMIDI.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 22592AB81AC7532F00C5B29E /* CoreMIDI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 22592AD71AC7533800C5B29E /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AC61AC7533800C5B29E /* ofxBaseGui.cpp */; }; + 22592AD81AC7533800C5B29E /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AC81AC7533800C5B29E /* ofxButton.cpp */; }; + 22592AD91AC7533800C5B29E /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592ACB1AC7533800C5B29E /* ofxGuiGroup.cpp */; }; + 22592ADA1AC7533800C5B29E /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592ACD1AC7533800C5B29E /* ofxLabel.cpp */; }; + 22592ADB1AC7533800C5B29E /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592ACF1AC7533800C5B29E /* ofxPanel.cpp */; }; + 22592ADC1AC7533800C5B29E /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AD11AC7533800C5B29E /* ofxSlider.cpp */; }; + 22592ADD1AC7533800C5B29E /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AD31AC7533800C5B29E /* ofxSliderGroup.cpp */; }; + 22592ADE1AC7533800C5B29E /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AD51AC7533800C5B29E /* ofxToggle.cpp */; }; + 22592AE31AC7535100C5B29E /* ofxExtras.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22592AE11AC7535100C5B29E /* ofxExtras.cpp */; }; + 22592AE61AC7557300C5B29E /* libopenFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22592AE41AC7557300C5B29E /* libopenFrameworksDebug.a */; }; + 22592AE71AC7557300C5B29E /* libopenFrameworks.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22592AE51AC7557300C5B29E /* libopenFrameworks.a */; }; + 2272A6221AC7487B004F5CBF /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2272A61D1AC7487B004F5CBF /* viewport.cpp */; }; + 2272A6231AC7487B004F5CBF /* playlist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2272A61F1AC7487B004F5CBF /* playlist.cpp */; }; + 2272A6241AC7487B004F5CBF /* layers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2272A6211AC7487B004F5CBF /* layers.cpp */; }; + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E4B27C1510CBEB8E00536013; + remoteInfo = openFrameworks; + }; + E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = E4B27C1410CBEB8E00536013; + remoteInfo = openFrameworks; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E4C2427710CC5ABF004149E2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 22592AC31AC7532F00C5B29E /* CoreMIDI.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 22592A631AC7530700C5B29E /* ofxSVGTiny.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSVGTiny.cpp; sourceTree = ""; }; + 22592A641AC7530700C5B29E /* ofxSVGTiny.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSVGTiny.h; sourceTree = ""; }; + 22592A661AC7530700C5B29E /* src_colors.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = src_colors.cpp; sourceTree = ""; }; + 22592A671AC7530700C5B29E /* svgtiny.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = svgtiny.cpp; sourceTree = ""; }; + 22592A681AC7530700C5B29E /* svgtiny.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = svgtiny.h; sourceTree = ""; }; + 22592A691AC7530700C5B29E /* svgtiny_gradient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = svgtiny_gradient.cpp; sourceTree = ""; }; + 22592A6A1AC7530700C5B29E /* svgtiny_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = svgtiny_internal.h; sourceTree = ""; }; + 22592A6B1AC7530700C5B29E /* svgtiny_list.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = svgtiny_list.cpp; sourceTree = ""; }; + 22592A731AC7531300C5B29E /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxXmlSettings.cpp; sourceTree = ""; }; + 22592A741AC7531300C5B29E /* ofxXmlSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxXmlSettings.h; sourceTree = ""; }; + 22592A761AC7531300C5B29E /* tinyxml.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; + 22592A771AC7531300C5B29E /* tinyxml.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; + 22592A781AC7531300C5B29E /* tinyxmlerror.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; + 22592A791AC7531300C5B29E /* tinyxmlparser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; + 22592A801AC7531D00C5B29E /* ofxSprite.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSprite.cpp; sourceTree = ""; }; + 22592A811AC7531D00C5B29E /* ofxSprite.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSprite.h; sourceTree = ""; }; + 22592A821AC7531D00C5B29E /* ofxSpriteManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSpriteManager.cpp; sourceTree = ""; }; + 22592A831AC7531D00C5B29E /* ofxSpriteManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSpriteManager.h; sourceTree = ""; }; + 22592A881AC7532100C5B29E /* ofxAssets.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxAssets.cpp; sourceTree = ""; }; + 22592A891AC7532100C5B29E /* ofxAssets.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxAssets.h; sourceTree = ""; }; + 22592A8E1AC7532F00C5B29E /* ofxRtMidiIn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxRtMidiIn.cpp; sourceTree = ""; }; + 22592A8F1AC7532F00C5B29E /* ofxRtMidiIn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxRtMidiIn.h; sourceTree = ""; }; + 22592A901AC7532F00C5B29E /* ofxRtMidiOut.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxRtMidiOut.cpp; sourceTree = ""; }; + 22592A911AC7532F00C5B29E /* ofxRtMidiOut.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxRtMidiOut.h; sourceTree = ""; }; + 22592A9D1AC7532F00C5B29E /* ofxBaseMidi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseMidi.cpp; sourceTree = ""; }; + 22592A9E1AC7532F00C5B29E /* ofxBaseMidi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxBaseMidi.h; sourceTree = ""; }; + 22592A9F1AC7532F00C5B29E /* ofxMidi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxMidi.cpp; sourceTree = ""; }; + 22592AA01AC7532F00C5B29E /* ofxMidi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxMidi.h; sourceTree = ""; }; + 22592AA11AC7532F00C5B29E /* ofxMidiConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxMidiConstants.h; sourceTree = ""; }; + 22592AA21AC7532F00C5B29E /* ofxMidiIn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxMidiIn.cpp; sourceTree = ""; }; + 22592AA31AC7532F00C5B29E /* ofxMidiIn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxMidiIn.h; sourceTree = ""; }; + 22592AA41AC7532F00C5B29E /* ofxMidiMessage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxMidiMessage.cpp; sourceTree = ""; }; + 22592AA51AC7532F00C5B29E /* ofxMidiMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxMidiMessage.h; sourceTree = ""; }; + 22592AA61AC7532F00C5B29E /* ofxMidiOut.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxMidiOut.cpp; sourceTree = ""; }; + 22592AA71AC7532F00C5B29E /* ofxMidiOut.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxMidiOut.h; sourceTree = ""; }; + 22592AA81AC7532F00C5B29E /* ofxMidiTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxMidiTypes.h; sourceTree = ""; }; + 22592AB51AC7532F00C5B29E /* readme */ = {isa = PBXFileReference; lastKnownFileType = text; path = readme; sourceTree = ""; }; + 22592AB61AC7532F00C5B29E /* RtMidi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RtMidi.cpp; sourceTree = ""; }; + 22592AB71AC7532F00C5B29E /* RtMidi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RtMidi.h; sourceTree = ""; }; + 22592AB81AC7532F00C5B29E /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = ../../../../System/Library/Frameworks/CoreMIDI.framework; sourceTree = ""; }; + 22592AC61AC7533800C5B29E /* ofxBaseGui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 22592AC71AC7533800C5B29E /* ofxBaseGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 22592AC81AC7533800C5B29E /* ofxButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 22592AC91AC7533800C5B29E /* ofxButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 22592ACA1AC7533800C5B29E /* ofxGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 22592ACB1AC7533800C5B29E /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 22592ACC1AC7533800C5B29E /* ofxGuiGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 22592ACD1AC7533800C5B29E /* ofxLabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 22592ACE1AC7533800C5B29E /* ofxLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; + 22592ACF1AC7533800C5B29E /* ofxPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 22592AD01AC7533800C5B29E /* ofxPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 22592AD11AC7533800C5B29E /* ofxSlider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 22592AD21AC7533800C5B29E /* ofxSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 22592AD31AC7533800C5B29E /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 22592AD41AC7533800C5B29E /* ofxSliderGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 22592AD51AC7533800C5B29E /* ofxToggle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 22592AD61AC7533800C5B29E /* ofxToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; + 22592AE11AC7535100C5B29E /* ofxExtras.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxExtras.cpp; sourceTree = ""; }; + 22592AE21AC7535100C5B29E /* ofxExtras.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxExtras.h; sourceTree = ""; }; + 22592AE41AC7557300C5B29E /* libopenFrameworksDebug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libopenFrameworksDebug.a; path = ../../openFrameworks/libs/openFrameworksCompiled/lib/osx/libopenFrameworksDebug.a; sourceTree = ""; }; + 22592AE51AC7557300C5B29E /* libopenFrameworks.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libopenFrameworks.a; path = ../../openFrameworks/libs/openFrameworksCompiled/lib/osx/libopenFrameworks.a; sourceTree = ""; }; + 2272A61C1AC7487B004F5CBF /* viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = viewport.h; sourceTree = ""; }; + 2272A61D1AC7487B004F5CBF /* viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = viewport.cpp; sourceTree = ""; }; + 2272A61E1AC7487B004F5CBF /* playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist.h; sourceTree = ""; }; + 2272A61F1AC7487B004F5CBF /* playlist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = playlist.cpp; sourceTree = ""; }; + 2272A6201AC7487B004F5CBF /* layers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layers.h; sourceTree = ""; }; + 2272A6211AC7487B004F5CBF /* layers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = layers.cpp; sourceTree = ""; }; + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; + E4B69B5B0A3A1756003C02F2 /* sunkenEngineDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = sunkenEngineDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E4B69B590A3A1756003C02F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 22592AE71AC7557300C5B29E /* libopenFrameworks.a in Frameworks */, + 22592AC21AC7532F00C5B29E /* CoreMIDI.framework in Frameworks */, + 22592AE61AC7557300C5B29E /* libopenFrameworksDebug.a in Frameworks */, + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 22592A611AC7530700C5B29E /* ofxSVGTiny */ = { + isa = PBXGroup; + children = ( + 22592A621AC7530700C5B29E /* src */, + 22592A651AC7530700C5B29E /* libs */, + ); + name = ofxSVGTiny; + sourceTree = ""; + }; + 22592A621AC7530700C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592A631AC7530700C5B29E /* ofxSVGTiny.cpp */, + 22592A641AC7530700C5B29E /* ofxSVGTiny.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxSVGTiny/src; + sourceTree = ""; + }; + 22592A651AC7530700C5B29E /* libs */ = { + isa = PBXGroup; + children = ( + 22592A661AC7530700C5B29E /* src_colors.cpp */, + 22592A671AC7530700C5B29E /* svgtiny.cpp */, + 22592A681AC7530700C5B29E /* svgtiny.h */, + 22592A691AC7530700C5B29E /* svgtiny_gradient.cpp */, + 22592A6A1AC7530700C5B29E /* svgtiny_internal.h */, + 22592A6B1AC7530700C5B29E /* svgtiny_list.cpp */, + ); + name = libs; + path = ../../openFrameworks/addons/ofxSVGTiny/libs; + sourceTree = ""; + }; + 22592A711AC7531300C5B29E /* ofxXmlSettings */ = { + isa = PBXGroup; + children = ( + 22592A721AC7531300C5B29E /* src */, + 22592A751AC7531300C5B29E /* libs */, + ); + name = ofxXmlSettings; + sourceTree = ""; + }; + 22592A721AC7531300C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592A731AC7531300C5B29E /* ofxXmlSettings.cpp */, + 22592A741AC7531300C5B29E /* ofxXmlSettings.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxXmlSettings/src; + sourceTree = ""; + }; + 22592A751AC7531300C5B29E /* libs */ = { + isa = PBXGroup; + children = ( + 22592A761AC7531300C5B29E /* tinyxml.cpp */, + 22592A771AC7531300C5B29E /* tinyxml.h */, + 22592A781AC7531300C5B29E /* tinyxmlerror.cpp */, + 22592A791AC7531300C5B29E /* tinyxmlparser.cpp */, + ); + name = libs; + path = ../../openFrameworks/addons/ofxXmlSettings/libs; + sourceTree = ""; + }; + 22592A7E1AC7531D00C5B29E /* ofxSpriteManager */ = { + isa = PBXGroup; + children = ( + 22592A7F1AC7531D00C5B29E /* src */, + ); + name = ofxSpriteManager; + sourceTree = ""; + }; + 22592A7F1AC7531D00C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592A801AC7531D00C5B29E /* ofxSprite.cpp */, + 22592A811AC7531D00C5B29E /* ofxSprite.h */, + 22592A821AC7531D00C5B29E /* ofxSpriteManager.cpp */, + 22592A831AC7531D00C5B29E /* ofxSpriteManager.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxSpriteManager/src; + sourceTree = ""; + }; + 22592A861AC7532100C5B29E /* ofxAssets */ = { + isa = PBXGroup; + children = ( + 22592A871AC7532100C5B29E /* src */, + ); + name = ofxAssets; + sourceTree = ""; + }; + 22592A871AC7532100C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592A881AC7532100C5B29E /* ofxAssets.cpp */, + 22592A891AC7532100C5B29E /* ofxAssets.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxAssets/src; + sourceTree = ""; + }; + 22592A8B1AC7532F00C5B29E /* ofxMidi */ = { + isa = PBXGroup; + children = ( + 22592A8C1AC7532F00C5B29E /* src */, + 22592AA91AC7532F00C5B29E /* libs */, + 22592AB81AC7532F00C5B29E /* CoreMIDI.framework */, + ); + name = ofxMidi; + sourceTree = ""; + }; + 22592A8C1AC7532F00C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592A8D1AC7532F00C5B29E /* desktop */, + 22592A9D1AC7532F00C5B29E /* ofxBaseMidi.cpp */, + 22592A9E1AC7532F00C5B29E /* ofxBaseMidi.h */, + 22592A9F1AC7532F00C5B29E /* ofxMidi.cpp */, + 22592AA01AC7532F00C5B29E /* ofxMidi.h */, + 22592AA11AC7532F00C5B29E /* ofxMidiConstants.h */, + 22592AA21AC7532F00C5B29E /* ofxMidiIn.cpp */, + 22592AA31AC7532F00C5B29E /* ofxMidiIn.h */, + 22592AA41AC7532F00C5B29E /* ofxMidiMessage.cpp */, + 22592AA51AC7532F00C5B29E /* ofxMidiMessage.h */, + 22592AA61AC7532F00C5B29E /* ofxMidiOut.cpp */, + 22592AA71AC7532F00C5B29E /* ofxMidiOut.h */, + 22592AA81AC7532F00C5B29E /* ofxMidiTypes.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxMidi/src; + sourceTree = ""; + }; + 22592A8D1AC7532F00C5B29E /* desktop */ = { + isa = PBXGroup; + children = ( + 22592A8E1AC7532F00C5B29E /* ofxRtMidiIn.cpp */, + 22592A8F1AC7532F00C5B29E /* ofxRtMidiIn.h */, + 22592A901AC7532F00C5B29E /* ofxRtMidiOut.cpp */, + 22592A911AC7532F00C5B29E /* ofxRtMidiOut.h */, + ); + path = desktop; + sourceTree = ""; + }; + 22592AA91AC7532F00C5B29E /* libs */ = { + isa = PBXGroup; + children = ( + 22592AB41AC7532F00C5B29E /* rtmidi */, + ); + name = libs; + path = ../../openFrameworks/addons/ofxMidi/libs; + sourceTree = ""; + }; + 22592AB41AC7532F00C5B29E /* rtmidi */ = { + isa = PBXGroup; + children = ( + 22592AB51AC7532F00C5B29E /* readme */, + 22592AB61AC7532F00C5B29E /* RtMidi.cpp */, + 22592AB71AC7532F00C5B29E /* RtMidi.h */, + ); + path = rtmidi; + sourceTree = ""; + }; + 22592AC41AC7533800C5B29E /* ofxGui */ = { + isa = PBXGroup; + children = ( + 22592AC51AC7533800C5B29E /* src */, + ); + name = ofxGui; + sourceTree = ""; + }; + 22592AC51AC7533800C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592AC61AC7533800C5B29E /* ofxBaseGui.cpp */, + 22592AC71AC7533800C5B29E /* ofxBaseGui.h */, + 22592AC81AC7533800C5B29E /* ofxButton.cpp */, + 22592AC91AC7533800C5B29E /* ofxButton.h */, + 22592ACA1AC7533800C5B29E /* ofxGui.h */, + 22592ACB1AC7533800C5B29E /* ofxGuiGroup.cpp */, + 22592ACC1AC7533800C5B29E /* ofxGuiGroup.h */, + 22592ACD1AC7533800C5B29E /* ofxLabel.cpp */, + 22592ACE1AC7533800C5B29E /* ofxLabel.h */, + 22592ACF1AC7533800C5B29E /* ofxPanel.cpp */, + 22592AD01AC7533800C5B29E /* ofxPanel.h */, + 22592AD11AC7533800C5B29E /* ofxSlider.cpp */, + 22592AD21AC7533800C5B29E /* ofxSlider.h */, + 22592AD31AC7533800C5B29E /* ofxSliderGroup.cpp */, + 22592AD41AC7533800C5B29E /* ofxSliderGroup.h */, + 22592AD51AC7533800C5B29E /* ofxToggle.cpp */, + 22592AD61AC7533800C5B29E /* ofxToggle.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxGui/src; + sourceTree = ""; + }; + 22592ADF1AC7535100C5B29E /* ofxExtras */ = { + isa = PBXGroup; + children = ( + 22592AE01AC7535100C5B29E /* src */, + ); + name = ofxExtras; + sourceTree = ""; + }; + 22592AE01AC7535100C5B29E /* src */ = { + isa = PBXGroup; + children = ( + 22592AE11AC7535100C5B29E /* ofxExtras.cpp */, + 22592AE21AC7535100C5B29E /* ofxExtras.h */, + ); + name = src; + path = ../../openFrameworks/addons/ofxExtras/src; + sourceTree = ""; + }; + BB4B014C10F69532006C3DED /* addons */ = { + isa = PBXGroup; + children = ( + 22592A611AC7530700C5B29E /* ofxSVGTiny */, + 22592A711AC7531300C5B29E /* ofxXmlSettings */, + 22592A7E1AC7531D00C5B29E /* ofxSpriteManager */, + 22592A861AC7532100C5B29E /* ofxAssets */, + 22592A8B1AC7532F00C5B29E /* ofxMidi */, + 22592AC41AC7533800C5B29E /* ofxGui */, + 22592ADF1AC7535100C5B29E /* ofxExtras */, + ); + name = addons; + sourceTree = ""; + }; + E4328144138ABC890047C5CB /* Products */ = { + isa = PBXGroup; + children = ( + E4328148138ABC890047C5CB /* openFrameworksDebug.a */, + ); + name = Products; + sourceTree = ""; + }; + E4B69B4A0A3A1720003C02F2 = { + isa = PBXGroup; + children = ( + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, + E4B69E1C0A3A1BDC003C02F2 /* src */, + E4EEC9E9138DF44700A80321 /* openFrameworks */, + BB4B014C10F69532006C3DED /* addons */, + E4B69B5B0A3A1756003C02F2 /* sunkenEngineDebug.app */, + ); + sourceTree = ""; + }; + E4B69E1C0A3A1BDC003C02F2 /* src */ = { + isa = PBXGroup; + children = ( + 2272A61C1AC7487B004F5CBF /* viewport.h */, + 2272A61D1AC7487B004F5CBF /* viewport.cpp */, + 2272A61E1AC7487B004F5CBF /* playlist.h */, + 2272A61F1AC7487B004F5CBF /* playlist.cpp */, + 2272A6201AC7487B004F5CBF /* layers.h */, + 2272A6211AC7487B004F5CBF /* layers.cpp */, + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, + ); + path = src; + sourceTree = SOURCE_ROOT; + }; + E4EEC9E9138DF44700A80321 /* openFrameworks */ = { + isa = PBXGroup; + children = ( + 22592AE51AC7557300C5B29E /* libopenFrameworks.a */, + 22592AE41AC7557300C5B29E /* libopenFrameworksDebug.a */, + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, + ); + name = openFrameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4B69B5A0A3A1756003C02F2 /* sunkenEngine */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "sunkenEngine" */; + buildPhases = ( + E4B69B580A3A1756003C02F2 /* Sources */, + E4B69B590A3A1756003C02F2 /* Frameworks */, + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, + E4C2427710CC5ABF004149E2 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, + ); + name = sunkenEngine; + productName = myOFApp; + productReference = E4B69B5B0A3A1756003C02F2 /* sunkenEngineDebug.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4B69B4C0A3A1720003C02F2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0600; + }; + buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "sunkenEngine" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = E4B69B4A0A3A1720003C02F2; + productRefGroup = E4B69B4A0A3A1720003C02F2; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = E4328144138ABC890047C5CB /* Products */; + ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + E4B69B5A0A3A1756003C02F2 /* sunkenEngine */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = openFrameworksDebug.a; + remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXShellScriptBuildPhase section */ + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\ncp -f \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E4B69B580A3A1756003C02F2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 22592ADD1AC7533800C5B29E /* ofxSliderGroup.cpp in Sources */, + 22592A6E1AC7530700C5B29E /* svgtiny.cpp in Sources */, + 22592A7B1AC7531300C5B29E /* tinyxml.cpp in Sources */, + 2272A6241AC7487B004F5CBF /* layers.cpp in Sources */, + 22592AD91AC7533800C5B29E /* ofxGuiGroup.cpp in Sources */, + 22592ABD1AC7532F00C5B29E /* ofxMidi.cpp in Sources */, + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, + 22592A851AC7531D00C5B29E /* ofxSpriteManager.cpp in Sources */, + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, + 22592ADB1AC7533800C5B29E /* ofxPanel.cpp in Sources */, + 22592AD81AC7533800C5B29E /* ofxButton.cpp in Sources */, + 22592ADE1AC7533800C5B29E /* ofxToggle.cpp in Sources */, + 22592AE31AC7535100C5B29E /* ofxExtras.cpp in Sources */, + 22592ABE1AC7532F00C5B29E /* ofxMidiIn.cpp in Sources */, + 22592A6D1AC7530700C5B29E /* src_colors.cpp in Sources */, + 22592ABF1AC7532F00C5B29E /* ofxMidiMessage.cpp in Sources */, + 22592ABC1AC7532F00C5B29E /* ofxBaseMidi.cpp in Sources */, + 2272A6221AC7487B004F5CBF /* viewport.cpp in Sources */, + 22592A8A1AC7532100C5B29E /* ofxAssets.cpp in Sources */, + 22592A7A1AC7531300C5B29E /* ofxXmlSettings.cpp in Sources */, + 22592ADC1AC7533800C5B29E /* ofxSlider.cpp in Sources */, + 22592A701AC7530700C5B29E /* svgtiny_list.cpp in Sources */, + 22592AC01AC7532F00C5B29E /* ofxMidiOut.cpp in Sources */, + 22592A6C1AC7530700C5B29E /* ofxSVGTiny.cpp in Sources */, + 22592A841AC7531D00C5B29E /* ofxSprite.cpp in Sources */, + 22592A7D1AC7531300C5B29E /* tinyxmlparser.cpp in Sources */, + 22592AC11AC7532F00C5B29E /* RtMidi.cpp in Sources */, + 2272A6231AC7487B004F5CBF /* playlist.cpp in Sources */, + 22592ABB1AC7532F00C5B29E /* ofxRtMidiOut.cpp in Sources */, + 22592A6F1AC7530700C5B29E /* svgtiny_gradient.cpp in Sources */, + 22592A7C1AC7531300C5B29E /* tinyxmlerror.cpp in Sources */, + 22592AD71AC7533800C5B29E /* ofxBaseGui.cpp in Sources */, + 22592ADA1AC7533800C5B29E /* ofxLabel.cpp in Sources */, + 22592ABA1AC7532F00C5B29E /* ofxRtMidiIn.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = openFrameworks; + targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + E4B69B4E0A3A1720003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-lpthread", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Debug; + }; + E4B69B4F0A3A1720003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = YES; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_UNROLL_LOOPS = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + MACOSX_DEPLOYMENT_TARGET = 10.6; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-lpthread", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Release; + }; + E4B69B600A3A1757003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + ICON = "$(ICON_NAME_DEBUG)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + /work/workspace/openFrameworks/libs/openFrameworksCompiled/lib/osx, + ); + PRODUCT_NAME = sunkenEngineDebug; + USER_HEADER_SEARCH_PATHS = ""; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + E4B69B610A3A1757003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + ICON = "$(ICON_NAME_RELEASE)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + /work/workspace/openFrameworks/libs/openFrameworksCompiled/lib/osx, + ); + PRODUCT_NAME = sunkenEngine; + USER_HEADER_SEARCH_PATHS = ""; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "sunkenEngine" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B4E0A3A1720003C02F2 /* Debug */, + E4B69B4F0A3A1720003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "sunkenEngine" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B600A3A1757003C02F2 /* Debug */, + E4B69B610A3A1757003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; +} diff --git a/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ef0fbe9 --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate b/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..ec81f02 Binary files /dev/null and b/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/WorkspaceSettings.xcsettings b/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..938b724 --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,22 @@ + + + + + BuildLocationStyle + UseAppPreferences + CustomBuildLocationType + RelativeToDerivedData + DerivedDataLocationStyle + Default + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + IssueFilterStyle + ShowActiveSchemeOnly + LiveSourceIssuesEnabled + + SnapshotAutomaticallyBeforeSignificantChanges + + SnapshotLocationStyle + Default + + diff --git a/sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme b/sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme new file mode 100644 index 0000000..b40045f --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Debug.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme b/sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme new file mode 100644 index 0000000..1fc5401 --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/xcshareddata/xcschemes/emptyExample Release.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..860b676 --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist b/sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..13dfb6e --- /dev/null +++ b/sunkenEngine/sunkenEngine.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SuppressBuildableAutocreation + + E4B69B5A0A3A1756003C02F2 + + primary + + + + + -- cgit v1.2.3