|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
package com.sun.media.sound; |
|
|
|
import java.util.ArrayList; |
|
import java.util.List; |
|
import javax.sound.midi.Patch; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class SimpleInstrument extends ModelInstrument { |
|
|
|
private static class SimpleInstrumentPart { |
|
ModelPerformer[] performers; |
|
int keyFrom; |
|
int keyTo; |
|
int velFrom; |
|
int velTo; |
|
int exclusiveClass; |
|
} |
|
protected int preset = 0; |
|
protected int bank = 0; |
|
protected boolean percussion = false; |
|
protected String name = ""; |
|
protected List<SimpleInstrumentPart> parts |
|
= new ArrayList<SimpleInstrumentPart>(); |
|
|
|
public SimpleInstrument() { |
|
super(null, null, null, null); |
|
} |
|
|
|
public void clear() { |
|
parts.clear(); |
|
} |
|
|
|
public void add(ModelPerformer[] performers, int keyFrom, int keyTo, |
|
int velFrom, int velTo, int exclusiveClass) { |
|
SimpleInstrumentPart part = new SimpleInstrumentPart(); |
|
part.performers = performers; |
|
part.keyFrom = keyFrom; |
|
part.keyTo = keyTo; |
|
part.velFrom = velFrom; |
|
part.velTo = velTo; |
|
part.exclusiveClass = exclusiveClass; |
|
parts.add(part); |
|
} |
|
|
|
public void add(ModelPerformer[] performers, int keyFrom, int keyTo, |
|
int velFrom, int velTo) { |
|
add(performers, keyFrom, keyTo, velFrom, velTo, -1); |
|
} |
|
|
|
public void add(ModelPerformer[] performers, int keyFrom, int keyTo) { |
|
add(performers, keyFrom, keyTo, 0, 127, -1); |
|
} |
|
|
|
public void add(ModelPerformer[] performers) { |
|
add(performers, 0, 127, 0, 127, -1); |
|
} |
|
|
|
public void add(ModelPerformer performer, int keyFrom, int keyTo, |
|
int velFrom, int velTo, int exclusiveClass) { |
|
add(new ModelPerformer[]{performer}, keyFrom, keyTo, velFrom, velTo, |
|
exclusiveClass); |
|
} |
|
|
|
public void add(ModelPerformer performer, int keyFrom, int keyTo, |
|
int velFrom, int velTo) { |
|
add(new ModelPerformer[]{performer}, keyFrom, keyTo, velFrom, velTo); |
|
} |
|
|
|
public void add(ModelPerformer performer, int keyFrom, int keyTo) { |
|
add(new ModelPerformer[]{performer}, keyFrom, keyTo); |
|
} |
|
|
|
public void add(ModelPerformer performer) { |
|
add(new ModelPerformer[]{performer}); |
|
} |
|
|
|
public void add(ModelInstrument ins, int keyFrom, int keyTo, int velFrom, |
|
int velTo, int exclusiveClass) { |
|
add(ins.getPerformers(), keyFrom, keyTo, velFrom, velTo, exclusiveClass); |
|
} |
|
|
|
public void add(ModelInstrument ins, int keyFrom, int keyTo, int velFrom, |
|
int velTo) { |
|
add(ins.getPerformers(), keyFrom, keyTo, velFrom, velTo); |
|
} |
|
|
|
public void add(ModelInstrument ins, int keyFrom, int keyTo) { |
|
add(ins.getPerformers(), keyFrom, keyTo); |
|
} |
|
|
|
public void add(ModelInstrument ins) { |
|
add(ins.getPerformers()); |
|
} |
|
|
|
public ModelPerformer[] getPerformers() { |
|
|
|
int percount = 0; |
|
for (SimpleInstrumentPart part : parts) |
|
if (part.performers != null) |
|
percount += part.performers.length; |
|
|
|
ModelPerformer[] performers = new ModelPerformer[percount]; |
|
int px = 0; |
|
for (SimpleInstrumentPart part : parts) { |
|
if (part.performers != null) { |
|
for (ModelPerformer mperfm : part.performers) { |
|
ModelPerformer performer = new ModelPerformer(); |
|
performer.setName(getName()); |
|
performers[px++] = performer; |
|
|
|
performer.setDefaultConnectionsEnabled( |
|
mperfm.isDefaultConnectionsEnabled()); |
|
performer.setKeyFrom(mperfm.getKeyFrom()); |
|
performer.setKeyTo(mperfm.getKeyTo()); |
|
performer.setVelFrom(mperfm.getVelFrom()); |
|
performer.setVelTo(mperfm.getVelTo()); |
|
performer.setExclusiveClass(mperfm.getExclusiveClass()); |
|
performer.setSelfNonExclusive(mperfm.isSelfNonExclusive()); |
|
performer.setReleaseTriggered(mperfm.isReleaseTriggered()); |
|
if (part.exclusiveClass != -1) |
|
performer.setExclusiveClass(part.exclusiveClass); |
|
if (part.keyFrom > performer.getKeyFrom()) |
|
performer.setKeyFrom(part.keyFrom); |
|
if (part.keyTo < performer.getKeyTo()) |
|
performer.setKeyTo(part.keyTo); |
|
if (part.velFrom > performer.getVelFrom()) |
|
performer.setVelFrom(part.velFrom); |
|
if (part.velTo < performer.getVelTo()) |
|
performer.setVelTo(part.velTo); |
|
performer.getOscillators().addAll(mperfm.getOscillators()); |
|
performer.getConnectionBlocks().addAll( |
|
mperfm.getConnectionBlocks()); |
|
} |
|
} |
|
} |
|
|
|
return performers; |
|
} |
|
|
|
public Object getData() { |
|
return null; |
|
} |
|
|
|
public String getName() { |
|
return this.name; |
|
} |
|
|
|
public void setName(String name) { |
|
this.name = name; |
|
} |
|
|
|
public ModelPatch getPatch() { |
|
return new ModelPatch(bank, preset, percussion); |
|
} |
|
|
|
public void setPatch(Patch patch) { |
|
if (patch instanceof ModelPatch && ((ModelPatch)patch).isPercussion()) { |
|
percussion = true; |
|
bank = patch.getBank(); |
|
preset = patch.getProgram(); |
|
} else { |
|
percussion = false; |
|
bank = patch.getBank(); |
|
preset = patch.getProgram(); |
|
} |
|
} |
|
} |