private String extractKeys(ModelConnectionBlock conn) { StringBuffer sb = new StringBuffer(); if (conn.getSources() != null) { sb.append("["); ModelSource[] srcs = conn.getSources(); ModelSource[] srcs2 = new ModelSource[srcs.length]; for (int i = 0; i < srcs.length; i++) srcs2[i] = srcs[i]; Arrays.sort(srcs2, keySortComparator); for (int i = 0; i < srcs.length; i++) { sb.append(srcs[i].getIdentifier()); sb.append(";"); } sb.append("]"); } sb.append(";"); if (conn.getDestination() != null) { sb.append(conn.getDestination().getIdentifier()); } sb.append(";"); return sb.toString(); }
private static void testDirector(ModelPerformer[] performers) throws Exception { final TreeSet<Integer> played = new TreeSet<Integer>(); ModelDirectedPlayer player = new ModelDirectedPlayer() { public void play(int performerIndex, ModelConnectionBlock[] connectionBlocks) { played.add(performerIndex); } }; ModelStandardIndexedDirector idirector = new ModelStandardIndexedDirector(performers, player); ModelStandardDirector director = new ModelStandardDirector(performers, player); for (int n = 0; n < 128; n++) { for (int v = 0; v < 128; v++) { director.noteOn(n, v); String p1 = treeToString(played); played.clear(); idirector.noteOn(n, v); String p2 = treeToString(played); played.clear(); if(!p1.equals(p2)) throw new Exception( "Note = " + n + ", Vel = " + v + " failed"); } } }
private void convertModulator(ModelPerformer performer, SF2Modulator modulator) { ModelSource src1 = convertSource(modulator.getSourceOperator()); ModelSource src2 = convertSource(modulator.getAmountSourceOperator()); if (src1 == null && modulator.getSourceOperator() != 0) return; if (src2 == null && modulator.getAmountSourceOperator() != 0) return; double amount = modulator.getAmount(); double[] amountcorrection = new double[1]; ModelSource[] extrasrc = new ModelSource[1]; amountcorrection[0] = 1; ModelDestination dst = convertDestination( modulator.getDestinationOperator(), amountcorrection, extrasrc); amount *= amountcorrection[0]; if (dst == null) return; if (modulator.getTransportOperator() == SF2Modulator.TRANSFORM_ABSOLUTE) { ((ModelStandardTransform)dst.getTransform()).setTransform( ModelStandardTransform.TRANSFORM_ABSOLUTE); } ModelConnectionBlock conn = new ModelConnectionBlock(src1, src2, amount, dst); if (extrasrc[0] != null) conn.addSource(extrasrc[0]); performer.getConnectionBlocks().add(conn); }
private void addTimecentValue(ModelPerformer performer, ModelIdentifier dest, short value) { double fvalue; if (value == -12000) fvalue = Double.NEGATIVE_INFINITY; else fvalue = value; performer.getConnectionBlocks().add( new ModelConnectionBlock(fvalue, new ModelDestination(dest))); }
public void play(int performerIndex, ModelConnectionBlock[] connectionBlocks) { int noteNumber = play_noteNumber; int velocity = play_velocity; boolean releasetriggered = play_releasetriggered; SoftPerformer p = current_instrument.getPerformers()[performerIndex]; if (firstVoice) { firstVoice = false; if (p.exclusiveClass != 0) { int x = p.exclusiveClass; for (int j = 0; j < voices.length; j++) { if (voices[j].active && voices[j].channel == channel && voices[j].exclusiveClass == x) { if (!(p.selfNonExclusive && voices[j].note == noteNumber)) voices[j].shutdown(); } } } } voiceNo = findFreeVoice(voiceNo); if (voiceNo == -1) return; initVoice(voices[voiceNo], p, prevVoiceID, noteNumber, velocity, connectionBlocks, current_mixer, releasetriggered); }
private void addValue(ModelPerformer performer, ModelIdentifier dest, short value) { double fvalue = value; performer.getConnectionBlocks().add( new ModelConnectionBlock(fvalue, new ModelDestination(dest))); }
private void addValue(ModelPerformer performer, ModelIdentifier dest, double value) { double fvalue = value; performer.getConnectionBlocks().add( new ModelConnectionBlock(fvalue, new ModelDestination(dest))); }
protected void initVoice(SoftVoice voice, SoftPerformer p, int voiceID, int noteNumber, int velocity, ModelConnectionBlock[] connectionBlocks, ModelChannelMixer channelmixer, boolean releaseTriggered) { if (voice.active) { // Voice is active , we must steal the voice voice.stealer_channel = this; voice.stealer_performer = p; voice.stealer_voiceID = voiceID; voice.stealer_noteNumber = noteNumber; voice.stealer_velocity = velocity; voice.stealer_extendedConnectionBlocks = connectionBlocks; voice.stealer_channelmixer = channelmixer; voice.stealer_releaseTriggered = releaseTriggered; for (int i = 0; i < voices.length; i++) if (voices[i].active && voices[i].voiceID == voice.voiceID) voices[i].soundOff(); return; } voice.extendedConnectionBlocks = connectionBlocks; voice.channelmixer = channelmixer; voice.releaseTriggered = releaseTriggered; voice.voiceID = voiceID; voice.tuning = tuning; voice.exclusiveClass = p.exclusiveClass; voice.softchannel = this; voice.channel = channel; voice.bank = bank; voice.program = program; voice.instrument = current_instrument; voice.performer = p; voice.objects.clear(); voice.objects.put("midi", co_midi[noteNumber]); voice.objects.put("midi_cc", co_midi_cc); voice.objects.put("midi_rpn", co_midi_rpn); voice.objects.put("midi_nrpn", co_midi_nrpn); voice.noteOn(noteNumber, velocity); voice.setMute(mute); voice.setSoloMute(solomute); if (releaseTriggered) return; if (portamento_control_note != -1) { voice.co_noteon_keynumber[0] = (tuning.getTuning(portamento_control_note) / 100.0) * (1f / 128f); voice.portamento = true; portamento_control_note = -1; } else if (portamento) { if (mono) { if (portamento_lastnote[0] != -1) { voice.co_noteon_keynumber[0] = (tuning.getTuning(portamento_lastnote[0]) / 100.0) * (1f / 128f); voice.portamento = true; portamento_control_note = -1; } portamento_lastnote[0] = noteNumber; } else { if (portamento_lastnote_ix != 0) { portamento_lastnote_ix--; voice.co_noteon_keynumber[0] = (tuning.getTuning( portamento_lastnote[portamento_lastnote_ix]) / 100.0) * (1f / 128f); voice.portamento = true; } } } }