package com.frinika.project; import java.io.IOException; import java.io.ObjectOutputStream; import com.frinika.midi.DrumMapper; import com.frinika.sequencer.gui.mixer.SynthWrapper; public class DrumMapperDescriptor extends MidiDeviceDescriptor { private static final long serialVersionUID = 1L; transient ProjectContainer project; MidiDeviceDescriptor target; int [] noteMap=new int[128]; public DrumMapperDescriptor(SynthWrapper midiDevice,ProjectContainer proj) { super(midiDevice); assert(midiDevice.getRealDevice() instanceof DrumMapper); project=proj; } @Override protected void installImp(ProjectContainer project) { // super will sort out setting my real device super.installImp(project); this.project=project; System.out.println("Installing DRUMMAPER "); if (target != null) { // target might not be installed at this point. target.install(project); ((DrumMapper)((SynthWrapper)midiDevice).getRealDevice()).setDefaultMidiDevice(target.getMidiDevice()); } ((DrumMapper)((SynthWrapper)midiDevice).getRealDevice()).setNoteMap(noteMap); } private void writeObject(ObjectOutputStream out) throws IOException { System.out.println("Saving DRUMMAPPER"); DrumMapper mapper=(DrumMapper) ((SynthWrapper) midiDevice).getRealDevice(); for (int i=0;i<128;i++) { DrumMapper.NoteMap map=mapper.getNoteMap(i); noteMap[i]=map.note; } target=project.getMidiDeviceDescriptor(mapper.getDefaultMidiDevice()); out.defaultWriteObject(); } }