/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* JavaWorld Library, Copyright 2011 Bryan Chadwick *
* *
* FILE: ./world/sound/tunes/Melody.java *
* *
* This file is part of JavaWorld. *
* *
* JavaWorld is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation, either version *
* 3 of the License, or (at your option) any later version. *
* *
* JavaWorld is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with JavaWorld. If not, see . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package world.sound.tunes;
import java.util.*;
/** Represents a collection of chords that can be played in sequence.
*
* Based in part on a class originally designed by Viera K. Proulx. */
public class Melody implements SoundConstants, Iterable{
/** The list of Chords to play */
ArrayList chords;
/** Index for the current Chord to play */
int current;
/** The number of Chords in this melody */
int size;
/** Construct an melody with the given sequence of Chords. */
public Melody(Chord ... chords){
this(new ArrayList(Arrays.asList(chords)));
}
/** Construct a melody from the given list of chords. */
public Melody(ArrayList chords){
this.chords = chords;
this.current = 0;
this.size = this.chords.size();
}
/** Initialize the melody from a monotone sequence of notes */
public Melody(Note ... notes){
this(new ArrayList());
for(Note note : notes)
this.chords.add(new Chord(note));
this.size = this.chords.size();
}
/** Return an Iterator over the Chords in this Melody. */
public Iterator iterator(){
return this.chords.iterator();
}
}