view HeresyBigBangDone/application.macosx/source/HeresyBigBangDone.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 source
 

void setup(){
    markovStuff();
    for (int i = 0; i < 16; i++)
        VPA[i] = new VPArray(); // creates the virtual playing array for Heresy AI.
    for (int i = 0; i < noteOnArray.length; i++)   
        noteOnArray[i] = false; // makes sure there are initial random inputs from openFrameworks
        
    oscP5return = new OscP5(this,12346); 
 
    frameRate(tempo);
    img = createGraphics(imageWidth,imageHeight,P2D);
    size(800,imageHeight,P2D);
    arial = createFont("Arial",32);
    textFont(arial,15);
    
    // initialize the tracks
    
    tracks[0] = new Track("Chord track", true, grid * beatsPerBar, 8, true, true);
    tracks[1] = new Track("Drums", true, grid * beatsPerBar, 8, false, true);
    tracks[2] = new Track("Bass", true, grid * beatsPerBar, 8, false, true);
    tracks[3] = new Track("Pizz Strings", true, grid * beatsPerBar, 8, false, true);
    tracks[4] = new Track("Synth", true, grid * beatsPerBar, 8, false, true);
    tracks[5] = new Track("Voice", true, grid * beatsPerBar, 8, false, true);
    tracks[6] = new Track("Voice", true, grid * beatsPerBar, 8, false, true);
    chordsTemp = new Track("Chord track", true, loopLength, 8, true, false);
    trSelected = 1;
    backgroundColour();
    drawLines();
    drawBarLines();
    imgNoteFan = createGraphics(fanWidth,imageHeight,P2D);
    lastTrack = trSelected;
    clickTrackOn = true;
 //   loadSequences();
 //   tracks[2].sequence[15][16] = new NoteEvent (14, 2, bar,beat,fraction,pulse);
 //   tracks[2].sequence[15][grid * beatsPerBar -20] = new NoteEvent (14, 2, bar,beat,fraction,pulse, true);
  
 //   tracks[3].sequence[13][16] = new NoteEvent (13, 3, bar,beat,fraction,pulse);
 //   tracks[3].sequence[13][20] = new NoteEvent (13, 3, bar,beat,fraction,pulse, true); 
 //   tracks[3].sequence[12][16] = new NoteEvent (12, 3, bar,beat,fraction,pulse);
 //   tracks[3].sequence[12][20] = new NoteEvent (12, 3, bar,beat,fraction,pulse, true);     
 //   tracks[3].sequence[11][16] = new NoteEvent (11, 3, bar,beat,fraction,pulse);
 //   tracks[3].sequence[11][20] = new NoteEvent (11, 3, bar,beat,fraction,pulse, true);   
 //   tracks[3].sequence[10][16] = new NoteEvent (10, 3, bar,beat,fraction,pulse);
 //   tracks[3].sequence[10][20] = new NoteEvent (10, 3, bar,beat,fraction,pulse, true);  
}


//-------------------------------------------------------------------------------------------------------------------------------

void draw(){
 /*   if (currentPulse % (grid * beatsPerBar) == grid * beatsPerBar -1){
        int tempTrackSelected = trSelected;
        for (int j = 0; j < 16; j++){
            trSelected = j; 
            if (tracks[j] != null){
                for (int i = 0; i < 16; i++){
                    noteOnArray[i] = false;
                    finishNote(i);
                    displayNoteOnArray[i] = false;
                    for (int z = 24; z < 109; z++)
                        outputToMax(z, 0, j);
                }
                tracks[j] = new Track(tracks[j].name, true,  tracks[j].loopLength, tracks[j].quantize, false, false);
                imgNotes = null;
            }
        }
        trSelected = tempTrackSelected;
    }
    */
  //  tracks[0] = new Track("Chord track", true, grid * beatsPerBar, 8, true, true);
  //  tracks[1] = new Track("Drums", true, grid * beatsPerBar, 8, false, true);
  //  tracks[2] = new Track("Bass", true, grid * beatsPerBar, 8, false, true);
  //  tracks[3] = new Track("Pizz Strings", true, grid * beatsPerBar, 8, false, true);
  //  tracks[4] = new Track("Synth", true, grid * beatsPerBar, 8, false, true);
  //  tracks[5] = new Track("Voice", true, grid * beatsPerBar, 8, false, true);
  //  }
    workOutPosition(); // calculates current bar, beat and pulse position
    //println(bar + " " + beat + " " + fraction + " " + pulse);
//    if (chordAI && bar > 1)
//        chordCalc();
    if (eraseOn)
        eraseNotes();
    calcColours(); // calcs chord colours for background and grid
    heresyChange = false;
    heresyChordChanged = false;
    if (trackStorer != trSelected){ // resets display when changing tracks
        for (int i = 0; i < 16; i++)
            if (noteOnArray[i] = true){
                noteOnArray[i] = false;
                displayNoteOnArray[i] = false;
            }
        trackStorer = trSelected;    
        imgNotes = null;
    }
    if (imgNotes == null)
        imgNotes = createGraphics(tracks[trSelected].loopLength,imageHeight,P2D);
    background(0);
    image (img,width-x2-playArea,0);
    drawTempImageGrid();
    createNoteFan(); 
    drawNotes();
    fill (0);
    noStroke();
    rect (width-playArea,0,playArea,height);
    image (imgNoteFan, width-playArea+3,0);
    pulseFrame(x); // Draws a pulsing white line at the left edge of the edit area
    if (haveQuestion) writeQuestion(); // for input request messages
    x++; // counter for grid movement
    x2++; // counter for note image movement
    if (x2 == width - playArea + grid * beatsPerBar)
        x2 = width - playArea;
    if (x == width - playArea + tracks[trSelected].loopLength)
        x = width - playArea;

    
   /* if (clickTrackOn){ // click track
        if (fraction == 1){
            if (pulse == 1){
                String noteOut = ("37 80 1");
                link.output(noteOut);
            }
            if (pulse == 2){
                String noteOut = ("37 0 1" );
                link.output(noteOut); 
            } 
        }
    }
    */
    checkForMutes();
    checkCycled();
    playTrackEvents();

    fill(255,255,255);
    textSize(15);
    text(bar + " " + beat + " " + fraction + " " + pulse, 10,20); // draws current time position to screen

    fill(200,0,0);
    textSize(15);
    // this section draws current track and track info to screen
    if (tracks[trSelected].ducking) 
        text(tracks[trSelected].name + " ducking", 100,20); 
    else
        text(tracks[trSelected].name, 100,20); 
    if (tracks[trSelected].muteIn > bar)
        if (!tracks[trSelected].mute)
             text("mute in " + (tracks[trSelected].muteIn - bar), 200,20);
         else 
             text("unmute in " + (tracks[trSelected].muteIn - bar), 200,20);
             
    if (haveQuestion){ // asks input questions
        writeQuestion();
    }
 //   println(currentPulse + " ");


    currentPulse++; // advances the sequencer to next pulse
}
        

//-------------------------------------------------------------------------------------------------------------------------------

void eraseNotes(){ // erases notes in current track if selected
    if (trSelected != 0){
        for (int i = 0; i < 16; i++){
           if (tracks[trSelected].sequence[i][(currentPulse%(tracks[trSelected].loopLength))] != null){
               tracks[trSelected].sequence[i][(currentPulse%(tracks[trSelected].loopLength))] = null;
           }
        }
    }
    if (trSelected == 0){
        for (int i = 0; i < 16; i++){
           if (chordsTemp.sequence[i][(currentPulse%(tracks[trSelected].loopLength))] != null){
               chordsTemp.sequence[i][(currentPulse%(tracks[trSelected].loopLength))] = null;
           }
        }
    }     
}  
           

//-------------------------------------------------------------------------------------------------------------------------------

void workOutPosition(){ // works out current position
  if (currentPulse%(grid*beatsPerBar) == 0)
    ++bar;
  if (currentPulse%grid == 0)
    ++beat;
  if (beat > beatsPerBar)
    beat = 1;
  if (currentPulse%(grid/fractions) == 0)
    ++fraction;
  if (fraction > fractions)
    fraction = 1;
    ++pulse;
  if (pulse > (grid/fractions))
    pulse = 1;
}


//-------------------------------------------------------------------------------------------------------------------------------

public void finishNote(int noteArrayPosition){ // writes note offs into the sequencers
  if (trSelected != 0)
      tracks[trSelected].sequence[noteArrayPosition][(currentPulse%(tracks[trSelected].loopLength))] = new NoteEvent (noteArrayPosition, trSelected+1, bar,beat,fraction,pulse, true);
  if (trSelected == 0)
      chordsTemp.sequence[noteArrayPosition][(currentPulse%(chordsTemp.loopLength))] = new NoteEvent (noteArrayPosition, trSelected+1, bar,beat,fraction,pulse, true);
  displayNoteOnArray[noteArrayPosition] = false;
}

public void finishNote(int noteArrayPosition, int channel){ // writes note offs into the sequencers
  if (trSelected != 0)
      tracks[trSelected].sequence[noteArrayPosition][(currentPulse%(tracks[trSelected].loopLength))] = new NoteEvent (noteArrayPosition, channel, bar,beat,fraction,pulse, true);
  if (trSelected == 0)
      chordsTemp.sequence[noteArrayPosition][(currentPulse%(chordsTemp.loopLength))] = new NoteEvent (noteArrayPosition, channel, bar,beat,fraction,pulse, true);
  displayNoteOnArray[noteArrayPosition] = false;
}


//-----------------------------------------------------------------------------------------------------------------------------

public void finishNoteCutOff(int noteArrayPosition){ // writes note offs for unfinished notes in to the last track if track is changed and note ons are active
    tracks[lastTrack].sequence[noteArrayPosition][(currentPulse%(tracks[lastTrack].loopLength))] = new NoteEvent (noteArrayPosition, lastTrack+1, bar,beat,fraction,pulse, true);
}


//-------------------------------------------------------------------------------------------------------------------------------

public void writeNote(int noteArrayPosition, int veloc){ // writes note ons into the sequencers
    if (trSelected != 0){
        int quantizeOffset = getQuantizeOffset();
        if (quantizeOffset >= 0){
            tracks[trSelected].sequence[noteArrayPosition][(currentPulse+quantizeOffset)%(tracks[trSelected].loopLength)] = new NoteEvent (noteArrayPosition, trSelected+1, bar,beat,fraction,pulse);
        }
        if (quantizeOffset < 0){
            tracks[trSelected].sequence[noteArrayPosition][(currentPulse+quantizeOffset)%(tracks[trSelected].loopLength)] = new NoteEvent (noteArrayPosition, trSelected+1, bar,beat,fraction,pulse);  

            VPA[trSelected].VPArrayNotes[noteArrayPosition].VPNoteOn = true;
            if (trSelected !=1 && trSelected !=5)
                VPA[trSelected].VPArrayNotes[noteArrayPosition].VPNotePitch = heresyPitch(noteArrayPosition, 3);
            else
                VPA[trSelected].VPArrayNotes[noteArrayPosition].VPNotePitch = heresyPitch(noteArrayPosition, 1);
            VPA[trSelected].VPArrayNotes[noteArrayPosition].VPNoteVelocity = veloc;
            sendNote(VPA[trSelected].VPArrayNotes[noteArrayPosition], trSelected);
            displayNoteOnArray[noteArrayPosition] = true;
            
        }
    }
    if (trSelected == 0){
        int quantizeOffset = getQuantizeOffset();
        if (quantizeOffset >= 0){
            chordsTemp.sequence[noteArrayPosition][(currentPulse+quantizeOffset)%(tracks[trSelected].loopLength)] = new NoteEvent (noteArrayPosition, trSelected+1, bar,beat,fraction,pulse);
        }
        if (quantizeOffset < 0){
            chordsTemp.sequence[noteArrayPosition][(currentPulse+quantizeOffset)%(tracks[trSelected].loopLength)] = new NoteEvent (noteArrayPosition, trSelected+1, bar,beat,fraction,pulse);  

            if (noteArrayPosition > 3)
                currentChord = 15 - noteArrayPosition;
             displayNoteOnArray[noteArrayPosition] = true;
        }
    }
}

public void writeNote(int noteArrayPosition, int veloc, int channel){ // writes note ons into the sequencers
    VPA[channel].VPArrayNotes[noteArrayPosition].VPNoteOn = true;
    VPA[channel].VPArrayNotes[noteArrayPosition].VPNotePitch = heresyPitch(noteArrayPosition, 1);
    VPA[channel].VPArrayNotes[noteArrayPosition].VPNoteVelocity = veloc;
    sendNote(VPA[channel].VPArrayNotes[noteArrayPosition], channel);
}




//-------------------------------------------------------------------------------------------------------------------------------

public int getQuantizeOffset(){  // tells write note method the quantize offset.
    int quantizeInPulses = pulsesPerBar/(tracks[trSelected].quantize);
    int quantizeOffset = currentPulse % quantizeInPulses;
    if (quantizeOffset > quantizeInPulses/2.0){
        return ((quantizeOffset - quantizeInPulses) * -1) ;
    }
    else{
        return quantizeOffset * -1;
    }
}