import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.sound.midi.*;
ArrayList<JCheckBox> arrLstJChBox_listaPolWyboru;
public static void main
(String[] args
) {
new MuzMachina().tworzGUI();
}
public void tworzGUI() {
//---
jFrame_RamkaGlowna
= new JFrame("MuzMachina");
jFrame_RamkaGlowna.
setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
jFrame_RamkaGlowna.setBounds(50,50,500,300);
//---
jPanel_PanelTla.
setBorder(BorderFactory.
createEmptyBorder(10,
10,
10,
10));
jFrame_RamkaGlowna.getContentPane().add(jPanel_PanelTla);
//---
jPanel_PanelTla.
add(BorderLayout.
CENTER, jPanel_PanelCentralny
);
//---
arrLstJChBox_listaPolWyboru = new ArrayList<JCheckBox>();
for (int i=0; i<256; i++) {
jCheckBox.setSelected(false);
arrLstJChBox_listaPolWyboru.add(jCheckBox); // !!!
jPanel_PanelCentralny.add(jCheckBox); // !!!
}
//---
String[] nazwyInstrumentow
= { "Bass Drum",
"Closed Hi-Hat",
"Open Hi-Hat",
"Acoustic Snare",
"Crash Cymbal", "Hand Clap", "High Tom", "Hi Bongo", "Maracas", "Whistle",
"Low Conga", "Cowbell", "Vibraslap", "Low-mid Tom", "High Agogo", "Open Hi Conga" };
for (int i = 0; i < 16; i++) {
box_ObszarNazw.
add( new Label( nazwyInstrumentow
[i
] ) );
}
//---
{
start.addActionListener(new MojStartListener());
box_ObszarPrzyciskow.add(start);
stop.addActionListener(new MojStopListener());
box_ObszarPrzyciskow.add(stop);
tempoG.addActionListener(new MojTempoGListener());
box_ObszarPrzyciskow.add(tempoG);
tempoD.addActionListener(new MojTempoDListener());
box_ObszarPrzyciskow.add(tempoD);
zapisz.addActionListener(new ZapiszListener());
box_ObszarPrzyciskow.add(zapisz);
odtworz.addActionListener(new OdtworzListener());
box_ObszarPrzyciskow.add(odtworz);
}
jPanel_PanelTla.
add(BorderLayout.
EAST, box_ObszarPrzyciskow
);
//---
konfigurujMidi(); // public void konfigurujMidi()
jFrame_RamkaGlowna.pack();
jFrame_RamkaGlowna.setVisible(true);
}
//--- end of -> twórzGUI ----------------------------------------------------------------
public void konfigurujMidi() { // deklaracja metody -> class MuzMachina
try {
sequencer.open();
sequencer.addMetaEventListener(this);
sequencer.setTempoInBPM(120);
track = sequence.createTrack();
} // metoda pomocnicza metody twórzGUI
public void utworzSciezkeIOdtworz() { // metoda wywoływana przez ActionListener
int[] instrumenty = {35,42,46,38,49,39,50,60,70,72,64,56,58,47,67,63}; // 16 instr
sequence.deleteTrack(track);
track = sequence.createTrack();
//--- analizujemy wszystkie pola wyboru i dla zaznaczonych tworzymy zdarzenia MIDI
for (int y=0; y<16; y++) {
for (int x=0; x<16; x++) {
if ( jCheckBox.isSelected() ) {
track.add( makeMidiEvent(144,9, instrumenty[y], 100, x ) );
track.add( makeMidiEvent(128,9, instrumenty[y], 100, x+1 ) );
}
} // koniec for x
track.add(makeMidiEvent(176,1,127,0,16)); // ??
} // koniec for y
track.add(makeMidiEvent(192,9,1,0,15)); // ??
try {
sequencer.setSequence(sequence);
sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY);
sequencer.start();
}
public static MidiEvent makeMidiEvent
(int plc,
int kanal,
int jeden,
int dwa,
int takt
) {
// metoda pomocniczna metody utworzSciezkeIOdtworz() <-- ActionListener
try {
shortMessage.setMessage(plc, kanal, jeden, dwa);
midiEvent
= new MidiEvent(shortMessage, takt
);
} catch(Exception e
) { e.
printStackTrace(); }
return midiEvent;
}
//--- seria deklaracji klas wew -> JButton-actionPerformed ----------------------------------------
utworzSciezkeIOdtworz();
}
}
sequencer.stop();
}
}
float wspTempa = sequencer.getTempoFactor();
sequencer.setTempoFactor((float)(wspTempa * 1.03));
}
}
float wspTempa = sequencer.getTempoFactor();
sequencer.setTempoFactor((float)(wspTempa * .97));
}
}
boolean[] stanyPol = new boolean[256]; // tworzymy talbice ze stanami pól wyboru
for (int i = 0; i < 256; i++) {
if ( jCheckBox.isSelected() ) stanyPol[i] = true;
}
try {
objOutStr.writeObject(stanyPol);
} catch(Exception ex
) { ex.
printStackTrace(); }
}
}
boolean[] stanyPol = null;
try {
stanyPol = (boolean[]) objInStr.readObject();
} catch(Exception ex
) { ex.
printStackTrace(); }
// teraz odtwarzamy sekwencje
for (int i = 0; i < 256; i++) {
if ( stanyPol[i] ) jCheckBox.setSelected(true);
}
sequencer.stop();
utworzSciezkeIOdtworz();
}
} // koniec klasy wewnętrznej
} // koniec klasy