package jmsltutorial; import java.util.Enumeration; import com.softsynth.jmsl.*; import com.softsynth.jmsl.score.*; import com.softsynth.jmsl.util.BeanEditor; /** HocketTransform
@author Nick Didkovsky, copyright 2001 Nick Didkovsky, all rights reserved */ public class HocketTransform extends UnaryCopyBufferTransform implements JMSLPlugin { double hocketProb = 0.5; int numParts = 2; public HocketTransform() { setName("Hocket"); } public void setHocketProbability(double p) { hocketProb = p; } public double getHocketProbability() { return hocketProb; } public void setNumParts(int n) { numParts = n; } public int getNumParts() { return numParts; } public void operate(CopyBuffer copyBuffer) { try { BeanEditor beanEditor = new BeanEditor(new java.awt.Frame(), null, this, true); beanEditor.setVisible(true); // copy clones off all notes, erase their originating staff info CopyBuffer temp = new CopyBuffer(); for (Enumeration e = copyBuffer.elements(); e.hasMoreElements();) { Note sourceNote = (Note) e.nextElement(); Note n = Note.cloneNote(sourceNote); temp.addElement(n); n.setTrack(null); n.setMeasureIndex(sourceNote.getMeasureIndex()); } copyBuffer.removeAllElements(); MusicShape shape = new MusicShape(1); for (int i = 0; i < numParts; i++) { shape.add(0); } shape.set(1, 0, 0); for (Enumeration e = temp.elements(); e.hasMoreElements();) { Note sourceNote = Note.cloneNote((Note) e.nextElement()); if (JMSLRandom.choose() < hocketProb) { shape.scramble(0, numParts - 1, 0); } for (int i = 0; i < numParts; i++) { Note n = Note.cloneNote(sourceNote); n.setStaffIndex(i); // System.out.println("Part " + i + ", Note: " + n); if (shape.get(i, 0) != 1) { n.setPitchData(0); } copyBuffer.addElement(n); } } System.out.println("Size: " + copyBuffer.size()); } catch (Exception e) { e.printStackTrace(); System.out.println("ERROR in Hocket Transform: " + e); } } public static final String copyright = "copyright (C) 2000 Nick Didkovsky, all rights reserved"; }