import javax.swing.*;
import java.util.*;
/**
* Classe che incapsula una sequenza di Note, implementa Noteable e Runnable per suonare in un campo differente
* @author netarrow
* @version 1.2.00
* @since 1.2.01
*/
public class Sequenza
implements Noteable,
Runnable {
private Tastiera t;
/**
* inizializza il vettore per le note
* @param t tastiera da utilizzare
* @throws Exception
*/
this.t = t;
}
/**
* Metodo che pulisce la sequenze, svuotando il vettore
*/
public synchronized void clear() {
if(thread != null && thread.isAlive()) thread.stop();
note.clear();
}
/**
* Metodo sincronizzato che aggiunge una nota al vettore
* @see Nota
*/
public synchronized void addNota(Nota n) {
note.add(n);
}
/**
* Metodo che avvia il thread in cui si suona la sequenza
* @param isCanonic controlla se è attivato il canonico
* @throws Exception
*/
public void suonaSeq
(boolean isCanonic
) throws Exception {
if(isCanonic) {
thread.start();
} else {
if(thread != null && thread.isAlive()) {
thread.stop();
thread = null;
}
thread.start();
}
}
/**
* Thread che scorre le note della sequenze e le suona a seconda dell'altezza<br>
* a seconda della durata attente di suonare la nota seguente
*/
public void run() {
try {
for(int i = 0; i < note.size(); i++) {
t.suonaNota(((Nota)note.get(i)).getNome().toUpperCase().replace('#', 'd'), true);
Thread.
sleep(((Nota
)note.
get(i
)).
getDurata());
}
return;
}
}
}