/* * Created on Sep 22, 2003 * */ package jmsltestsuite; import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLMixerContainer; import com.softsynth.jmsl.jsyn2.JSynMusicDevice; import com.softsynth.jmsl.jsyn2.JSynUnitVoiceInstrument; /** * Test update() on JSynUnitVoiceInstrument. Enter pitch, amplitude, hold values * and click play() Then change amplitude value while it is sustaining and click * update(). The amplitude should change. While sustaining, change both the * pitch and the amplitude and click update(). You will hear it change since * JMSL uses voice tokens to look up allocated voices instead of pitches (old * way) * * @author Nick Didkovsky, email: nick@didkovsky.com, (c) 2003 Nick Didkovsky, * all rights reserved. * */ public class UpdateJSynUnitVoiceInstrumentTest extends Frame implements ActionListener { TextField durationField; TextField pitchField; TextField amplitudeField; TextField holdField; Button onButton; Button updateButton; Button offButton; JSynUnitVoiceInstrument ins; JMSLMixerContainer mixer; public UpdateJSynUnitVoiceInstrumentTest() { String title = "JSynUnitVoiceInstrument update() test"; setTitle(title); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { JMSL.closeMusicDevices(); System.exit(0); } }); setUpJSyn(); setUpGUI(); } private void setUpGUI() { setLayout(new GridLayout(0, 2)); add(new Label("duration")); add(durationField = new TextField("10.0")); add(new Label("pitch")); add(pitchField = new TextField("60.0")); add(new Label("amplitude")); add(amplitudeField = new TextField("0.5")); add(new Label("hold")); add(holdField = new TextField("9.0")); add(onButton = new Button("on()")); add(updateButton = new Button("update()")); add(offButton = new Button("off()")); updateButton.setEnabled(false); offButton.setEnabled(false); onButton.addActionListener(this); updateButton.addActionListener(this); offButton.addActionListener(this); } private void setUpJSyn() { JSynMusicDevice.instance().open(); mixer = new JMSLMixerContainer(); mixer.start(); String className = com.softsynth.jmsl.jsyn2.unitvoices.AutoPanningSawtoothBL.class.getName(); ins = new JSynUnitVoiceInstrument(8, className); mixer.addInstrument(ins); } public static void main(String[] args) { JMSL.clock.setAdvance(0.5); UpdateJSynUnitVoiceInstrumentTest testUpdate = new UpdateJSynUnitVoiceInstrumentTest(); testUpdate.pack(); testUpdate.setVisible(true); } Integer voiceToken = null; public void actionPerformed(ActionEvent ev) { Object source = ev.getSource(); if (source == onButton) { voiceToken = (Integer) ins.on(JMSL.now(), 1.0, getDoubleArr()); System.out.println("Turned on instrument, storing voiceToken " + voiceToken); onButton.setEnabled(false); updateButton.setEnabled(true); offButton.setEnabled(true); } if (source == updateButton) { if (voiceToken != null) { ins.update(JMSL.now(), 1.0, getDoubleArr(), voiceToken); } else { System.out.println("Cannot update() with null voiceToken"); } } if (source == offButton) { if (voiceToken != null) { ins.off(JMSL.now(), voiceToken); onButton.setEnabled(true); updateButton.setEnabled(false); offButton.setEnabled(false); } else { System.out.println("Cannot update() with null voiceToken"); } } } private double[] getDoubleArr() { double[] data = new double[4]; data[0] = Double.parseDouble(durationField.getText()); data[1] = Double.parseDouble(pitchField.getText()); data[2] = Double.parseDouble(amplitudeField.getText()); data[3] = Double.parseDouble(holdField.getText()); return data; } }