Example #1
0
    public void PlayLoop(double[][] loopBeats, AudioSource[] originalAudioSources, int loopNumber)
    {
        RemoveLoop(loopNumber);

        Loop loopToAdd = new Loop();

        loopToAdd.noteBeats = new List <List <double> >();
        for (int i = 0; i < loopBeats.Length; i++)
        {
            List <double> loopBeatList = new List <double>(loopBeats[i]);
            loopToAdd.noteBeats.Add(loopBeatList);
        }

        loops[loopNumber] = loopToAdd;
        Loop fixedLoop = GetLoopWithRedundantNotesRemoved(loopToAdd);

        for (int trackNumber = 0; trackNumber < fixedLoop.noteBeats.Count; trackNumber++)
        {
            if (fixedLoop.noteBeats[trackNumber].Count > 0)
            {
                // Clean up old beats and loop sources
                // TODO: Recycle loop sources when possible


                // Setup next note time
                TrackLoopInfo track = AddNoteBeatsToTrack(fixedLoop.noteBeats[trackNumber].ToArray(), tracks [trackNumber], originalAudioSources [trackNumber]);
                track.currentNoteIndex = 0;
                double startOfMeasure = SongController.GetNextStartOfMeasure();
                track.nextNoteTime   = startOfMeasure + track.noteBeats [0] / SongController.GetBPM() * 60.0;
                tracks [trackNumber] = track;
            }
        }
    }
Example #2
0
    TrackLoopInfo RemoveNoteBeatsFromTrack(TrackLoopInfo track, List <double> noteBeats)
    {
        // Remove note beats
        // TODO: Efficiency improvements
        for (int i = 0; i < noteBeats.Count; i++)
        {
            for (int trackNoteBeatIndex = 0; trackNoteBeatIndex < track.noteBeats.Count; trackNoteBeatIndex++)
            {
                if (Mathf.Approximately((float)track.noteBeats[trackNoteBeatIndex], (float)noteBeats[i]))
                {
                    track.noteBeats.RemoveAt(trackNoteBeatIndex);
                    Object.Destroy(track.audioSources[trackNoteBeatIndex]);
                    track.audioSources.RemoveAt(trackNoteBeatIndex);
                    break;
                }
            }
        }

        // Recalculate next note stuff for track
        if (track.noteBeats.Count > 0)
        {
            track.currentNoteIndex = 0;
            double startOfMeasure = SongController.GetNextStartOfMeasure();
            track.nextNoteTime = startOfMeasure + track.noteBeats[0] / SongController.GetBPM() * 60.0;
        }

        return(track);
    }
Example #3
0
 public void StartRecording()
 {
     startRecordingDSPTime = SongController.GetNextStartOfMeasure();
     startRecordingQueued  = true;
     Debug.Log("start recording at " + startRecordingDSPTime);
 }