/** FMSpectrumApplet.java GUI provides controls to plot spectrum of simple FM pair. * @author Phil Burk and Nick Didkovsky */ /* * (C) 1997 Phil Burk and Nick Didkovsky, All Rights Reserved * JMSL is based upon HMSL (C) Phil Burk, Larry Polansky and David Rosenboom. */ package jmsltutorial; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import com.softsynth.jmsl.view.JMSLScrollbar; import com.softsynth.jmsl.view.JMSLScrollbarProcessor; public class FMSpectrumApplet extends JFrame implements JMSLScrollbarProcessor { FMSpectrumCalculator myFMSpectrumCalculator; SpectrumCanvas mySpectrumCanvas; JMSLScrollbar carrFreqScrollbar; JMSLScrollbar modAmpScrollbar; JMSLScrollbar modFreqScrollbar; JLabel carrFreqLabel; JLabel modAmpLabel; JLabel modFreqLabel; JLabel modIndexLabel; public void init() { myFMSpectrumCalculator = new FMSpectrumCalculator(); carrFreqScrollbar = new JMSLScrollbar(this, (int) myFMSpectrumCalculator.getCarrierFreq(), 20, 20000); carrFreqScrollbar.setSize(320, 25); modAmpScrollbar = new JMSLScrollbar(this, (int) myFMSpectrumCalculator.getModAmp(), 0, 20000); modAmpScrollbar.setSize(320, 25); modFreqScrollbar = new JMSLScrollbar(this, (int) myFMSpectrumCalculator.getModFreq(), 20, 20000); modFreqScrollbar.setSize(320, 25); carrFreqLabel = new JLabel("Carrier Freq =" + myFMSpectrumCalculator.getCarrierFreq() + " "); modAmpLabel = new JLabel("Mod Amp =" + myFMSpectrumCalculator.getModAmp() + " "); modFreqLabel = new JLabel("Mod Freq =" + myFMSpectrumCalculator.getModFreq() + " "); modIndexLabel = new JLabel("Modulation Index "); Panel controlPanel = new Panel(); controlPanel.setLayout(new GridLayout(0, 1)); JPanel p = new JPanel(); p.add(carrFreqScrollbar); p.add(carrFreqLabel); controlPanel.add(p); p = new JPanel(); p.add(modAmpScrollbar); p.add(modAmpLabel); controlPanel.add(p); p = new JPanel(); p.add(modFreqScrollbar); p.add(modFreqLabel); controlPanel.add(p); p = new JPanel(); p.add(modIndexLabel); controlPanel.add(p); setLayout(new BorderLayout()); add(BorderLayout.SOUTH, controlPanel); mySpectrumCanvas = new SpectrumCanvas(); add(BorderLayout.NORTH, mySpectrumCanvas); } public void start() { newSpectrum(); } public void stop() { } void recalculateSpectrum() { myFMSpectrumCalculator.setModAmp((double) modAmpScrollbar.getValue()); myFMSpectrumCalculator.setModFreq((double) modFreqScrollbar.getValue()); myFMSpectrumCalculator.setCarrierFreq((double) carrFreqScrollbar.getValue()); myFMSpectrumCalculator.calculateSpectrum(); } void handleModFreq() { modFreqLabel.setText("Mod Freq =" + modFreqScrollbar.getValue()); } void handleModAmp() { modAmpLabel.setText("Mod Amp =" + modAmpScrollbar.getValue()); } void handleCarrFreq() { carrFreqLabel.setText("Carrier Freq =" + carrFreqScrollbar.getValue()); } void setModIndexLabel() { modIndexLabel.setText("Modulation Index = " + myFMSpectrumCalculator.getIndexOfModulation()); } void newSpectrum() { recalculateSpectrum(); setModIndexLabel(); mySpectrumCanvas.setSpectrum(myFMSpectrumCalculator.getSpectrum()); mySpectrumCanvas.repaint(); } public void JMSLScrollbarValueChanged(JMSLScrollbar jsb) { if (jsb == modFreqScrollbar) handleModFreq(); if (jsb == modAmpScrollbar) handleModAmp(); if (jsb == carrFreqScrollbar) handleCarrFreq(); newSpectrum(); } public static void main(String[] args) { FMSpectrumApplet toot = new FMSpectrumApplet(); toot.init(); toot.start(); toot.pack(); toot.setVisible(true); toot.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }