Mercurial > hg > movesynth
diff HeresyBigBangDone/application.macosx/source/IO.pde @ 50:f4c6999ecfe9 tip
added the files on my computer that aren't aiff s> these shoudl be everything for the big bang fair 2011 - heresy, and tim's file's also here
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Sat, 08 Oct 2011 22:12:49 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HeresyBigBangDone/application.macosx/source/IO.pde Sat Oct 08 22:12:49 2011 +0100 @@ -0,0 +1,398 @@ +void sendNote(VPNote note, int channel){ // send note function gathers info to output to max + outputToMax(note.VPNotePitch, note.VPNoteVelocity, channel); +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void outputToMax(int note, int velocity, int channel){ // calculates the necessary note on and note offs depending on ducking and muting and sends them to max + String noteOut = ""; + if (!tracks[channel].mute){ + if (tracks[channel].ducking){ + if (velocity != 0){ + noteOut = ("" + note + " " + velocity + " " + (channel+8)); + } + if (velocity == 0 && !tracks[channel].cycled){ + noteOut = ("" + note + " " + velocity + " " + (channel+8)); + OscMessage message = new OscMessage("/pitch_vel_chan"); + message.add(noteOut); + oscP5return.send(message, ableton); + link.output(noteOut); + noteOut = ("" + note + " " + velocity + " " + channel); + } + if (velocity == 0 && tracks[channel].cycled){ + noteOut = ("" + note + " " + velocity + " " + (channel+8)); + } + } + if (!tracks[channel].ducking){ + if (velocity != 0){ + noteOut = ("" + note + " " + velocity + " " + channel); + } + if (velocity == 0 && !tracks[channel].cycled){ + noteOut = ("" + note + " " + velocity + " " + (channel+8)); + OscMessage message = new OscMessage("/pitch_vel_chan"); + message.add(noteOut); + oscP5return.send(message, ableton); + link.output(noteOut); + noteOut = ("" + note + " " + velocity + " " + channel); + } + if (velocity == 0 && tracks[channel].cycled){ + noteOut = ("" + note + " " + velocity + " " + channel); + } + } + link.output(noteOut); + OscMessage message = new OscMessage("/pitch_vel_chan"); + message.add(noteOut); + oscP5return.send(message, ableton); + + } + if (tracks[channel].mute){ + if (velocity == 0 && !tracks[channel].cycled){ + noteOut = ("" + note + " " + velocity + " " + (channel+8)); + link.output(noteOut); + OscMessage message = new OscMessage("/pitch_vel_chan"); + message.add(noteOut); + oscP5return.send(message, ableton); + noteOut = ("" + note + " " + velocity + " " + channel); + OscMessage message2 = new OscMessage("/pitch_vel_chan"); + message2.add(noteOut); + oscP5return.send(message, ableton); + link.output(noteOut); + } + } +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void mouseDragged(){ // not used +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void mouseReleased(){ // not used +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void mousePressed(){ // not used +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void keyPressed() { // takes keyboard input + if (key == 'c' || key == 'C') { + chordSelecter = !chordSelecter; + if (!chordSelecter) + trSelected = lastTrack; + else{ + lastTrack = trSelected; + trSelected = 0; + + } + } + + if (key == ' ') { + if (trSelected != 0){ + for (int i = 0; i < 16; i++){ + noteOnArray[i] = false; + finishNote(i); + displayNoteOnArray[i] = false; + } + + if (trSelected != 0){ + for (int i = 24; i < 109; i++) + outputToMax(i, 0, trSelected); + } + tracks[trSelected] = new Track(tracks[trSelected].name, true, tracks[trSelected].loopLength, tracks[trSelected].quantize, false, false); + imgNotes = null; + } + + if (trSelected == 0){ + for (int i = 0; i < 16; i++){ + noteOnArray[i] = false; + finishNote(i); + displayNoteOnArray[i] = false; + } + heresyMinor = false; + heresy7th = false; + heresy9th = false; + heresy11th = false; + heresy13th = false; + chordsTemp = new Track(tracks[trSelected].name, true, tracks[trSelected].loopLength, tracks[trSelected].quantize, false, false); + imgNotes = null; + } + } + + if (key == 'p' || key == 'P') { + for (int i = 0; i < 16; i++){ + for (int ii = 24; ii < 109; ii++) + outputToMax(ii, 0, trSelected); + noteOnArray[i] = false; + displayNoteOnArray[i] = false; + } + } + + if (key == 'd' || key == 'D') { + if (trSelected != 0 && trSelected != 1){ + tracks[trSelected].ducking = !tracks[trSelected].ducking; + tracks[trSelected].cycled = false; + tracks[trSelected].cycledPosition = currentPulse%tracks[trSelected].loopLength; + } + } + + if (key == 'w' || key == 'W') { + + trSelected = 0; + + for (int i = 0; i < 16; i++){ + noteOnArray[i] = false; + finishNoteCutOff(i); + displayNoteOnArray[i] = false; + } + heresyMinor = false; + heresy7th = false; + heresy9th = false; + heresy11th = false; + heresy13th = false; + + tracks[trSelected] = new Track(tracks[trSelected].name, true, tracks[trSelected].loopLength, tracks[trSelected].quantize, false, false); + chordsTemp = new Track(tracks[trSelected].name, true, tracks[trSelected].loopLength, tracks[trSelected].quantize, false, false); + imgNotes = null; + } + + if (key == 'q' || key == 'Q'){ + quantizeValueIn = true; + sendToScreen(tracks[trSelected].name + " quantize?"); + } + + if (key == 'x' || key == 'X'){ + clickTrackOn = !clickTrackOn; + } + + if (key == 'e' || key == 'E'){ + eraseOn = !eraseOn; + if (!eraseOn) imgNotes = null; + } + + if (key == 'r' || key == 'R'){ + imgNotes = null; + } + + if (key == 'l' || key == 'L'){ + loopLengthValueIn = true; + sendToScreen(tracks[trSelected].name + " loop length?"); + } + + if (key == 'm' || key == 'M'){ + if (trSelected != 0){ + muteValueIn = true; + if (!tracks[trSelected].mute) + sendToScreen(tracks[trSelected].name + " mute in?"); + if (tracks[trSelected].mute) + sendToScreen(tracks[trSelected].name + " unmute in?"); + } + } + + + if (key == '1') numberKey(1); + if (key == '2') numberKey(2); + if (key == '3') numberKey(3); + if (key == '4') numberKey(4); + if (key == '5') numberKey(5); + if (key == '6') numberKey(6); + if (key == '7') numberKey(7); + if (key == '8') numberKey(8); + if (key == '9') numberKey(9); + if (key == '0') numberKey(0); + + if (key == CODED) { + if (keyCode == UP && trSelected < Track.currentNumberOfTracks-1) + trSelected++; + if (keyCode == DOWN && trSelected > 1) { + trSelected--; + } + } + + if (key == 's' || key == 'S'){ + for (int i = 0; i < 16; i++){ + for (int ii = 0; ii < tracks[0].loopLength; ii++){ + if (chordsTemp.sequence[i][ii] != null) + tracks[0].sequence[i][ii] = chordsTemp.sequence[i][ii]; + } + } + } + + +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void numberKey(int input){ // if a number is enterd, this method works out what to do with it + if (quantizeValueIn == true) + if (input == 1 || input == 2 || input == 4 || input == 8 || input == 0){ + tracks[trSelected].quantize = input; + quantizeValueIn = false; + aniOut = true; + } + + if (loopLengthValueIn == true){ + if (input >= 1 && input <= 8 ){ + Track tempTrack = new Track(tracks[trSelected].name, tracks[trSelected].polyphonic, (input * loopLength / 2), tracks[trSelected].quantize, false, false); + NoteEvent tempNote; + + for (int i = 0; i < 16; i++){ + if (tempTrack.loopLength >= tracks[trSelected].loopLength){ + for (int ii = 0; ii < tracks[trSelected].loopLength; ii++){ + tempTrack.sequence[i][ii] = tracks[trSelected].sequence[i][ii]; + } + }else{ + for (int ii = 0; ii < tempTrack.loopLength; ii++){ + tempTrack.sequence[i][ii] = tracks[trSelected].sequence[i][ii]; + } + } + } + tracks[trSelected] = tempTrack; + for (int i = 0; i < 16; i++) + if (noteOnArray[i] = true){ + noteOnArray[i] = false; + finishNoteCutOff(i); + displayNoteOnArray[i] = false; + } + + + loopLengthValueIn = false; + aniOut = true; + if (trSelected ==0){ + Track tempTrack2 = new Track(chordsTemp.name, chordsTemp.polyphonic, (input * loopLength / 2), chordsTemp.quantize, false, false); + NoteEvent tempNote2; + + for (int i = 0; i < 16; i++){ + if (tempTrack2.loopLength >= chordsTemp.loopLength){ + for (int ii = 0; ii < chordsTemp.loopLength; ii++){ + tempTrack2.sequence[i][ii] = chordsTemp.sequence[i][ii]; + } + }else{ + for (int ii = 0; ii < tempTrack2.loopLength; ii++){ + tempTrack2.sequence[i][ii] = chordsTemp.sequence[i][ii]; + } + } + } + chordsTemp = tempTrack2; + } + imgNotes = null; + } + } + + if (muteValueIn == true){ + tracks[trSelected].muteIn = bar + input; + muteValueIn = false; + tracks[trSelected].muteDone = false; + aniOut = true; + } + + +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void sendToScreen(String name){ // prepares a question for asking the user and turns the question on + + screenQuestion = name; + screenAni = 0; + haveQuestion = true; + +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void checkCycled(){ // checks whether after ducking or muting all note offs are played. + for (int i = 1; i < Track.currentNumberOfTracks; i++) + if (tracks[i].cycled == false) + if (tracks[i].cycledPosition-1 == currentPulse%tracks[trSelected].loopLength) + tracks[i].cycled = true; + +} + + +//------------------------------------------------------------------------------------------------------------------------------- + + +void checkForMutes(){ // looks for mute / unmuted changes in tracks + for (int i = 1; i < Track.currentNumberOfTracks; i++) + if (tracks[i].muteIn == bar && !tracks[i].muteDone){ + tracks[i].mute = !tracks[i].mute; + tracks[i].muteDone = true; + tracks[trSelected].cycled = false; + tracks[trSelected].cycledPosition = currentPulse%tracks[trSelected].loopLength; + } +} + + + +//------------------------------------------------------------------------------------------------------------------------------- + +void writeQuestion(){ // animates screen questions + + if (screenAni < 10 && !aniOut){ + screenAni++; + } + + if (screenAni > 0 && aniOut){ + screenAni--; + } + + if (screenAni == 0){ + haveQuestion = false; + aniOut = false; + } + + fill(255,0,0, screenAni*12); + textSize((11-screenAni)*40); + text(screenQuestion, (screenAni*50)-200,(100-screenAni*10)+150); + + +} + + +//------------------------------------------------------------------------------------------------------------------------------- + +void oscEvent(OscMessage theOscMessage) { // recieves osc messages from openFrameworks + println("osc message : " + theOscMessage); + if(theOscMessage.checkAddrPattern("/test")==true) { + println("i1 : " + theOscMessage.get(1).intValue() + " i2 : " + theOscMessage.get(2).intValue() + " i3 : " + theOscMessage.get(3).intValue() + " i4 : " + theOscMessage.get(4).intValue()); + clickTrack = false; + String stringValue = theOscMessage.get(0).stringValue(); + int firstValue = theOscMessage.get(1).intValue(); + int secondValue = theOscMessage.get(2).intValue(); + int thirdValue = theOscMessage.get(3).intValue(); //velocity + int fourthValue = theOscMessage.get(4).intValue(); //channel + if (secondValue == 1){ + noteOnArray[firstValue] = true; + writeNote(firstValue, thirdValue, fourthValue); + } + else{ + noteOnArray[firstValue] = false; + writeNote(firstValue, 0, fourthValue); + } + } + if(theOscMessage.checkAddrPattern("/chord")==true) { + chordCalc(); + // writeNote(15, 80, 6); + writeNote(14, 80, 6); + writeNote(13, 80, 6); + writeNote(12, 80, 6); + writeNote(11, 80, 6); + writeNote(10, 80, 6); + writeNote(9, 80, 6); + } +} + + +