/* * @(#)GainControlAdapter.java 1.10 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package com.sun.media.controls; import javax.media.*; import java.util.*; import com.sun.media.ui.*; import java.awt.*; public class GainControlAdapter implements GainControl { private Vector listeners = null; private boolean muteState; private Component component; // Default level is whatever that maps to 0db. // If we set it to 1.0f, then the gain won't go pass // 0db. private float DefLevel = 0.4f; private float dB = 0f; private float level = DefLevel; public GainControlAdapter() { } public GainControlAdapter(float defLevel) { DefLevel = defLevel; level = defLevel; } public GainControlAdapter(boolean mute) { this.muteState = mute; setLevel(DefLevel); } public void setMute(boolean mute) { if (muteState != mute) { muteState = mute; informListeners(); } } public boolean getMute() { return muteState; } public float setDB(float gain) { if (dB != gain) { dB = gain; float mult = (float) Math.pow(10.0, dB/20.0); level = mult * DefLevel; if (level < 0.0) setLevel(0.0f); else if (level > 1.0) setLevel(1.0f); else { setLevel(level); informListeners(); } } return dB; } public float getDB() { return dB; } public float setLevel(float level) { if (level < 0.0) level = 0.0f; if (level > 1.0) level = 1.0f; if (this.level != level) { this.level = level; float mult = level/DefLevel; dB = (float) (Math.log((double)((mult==0.0)?0.0001:mult))/Math.log(10.0) * 20.0); informListeners(); } return this.level; } public float getLevel() { return level; } public synchronized void addGainChangeListener(GainChangeListener listener) { if (listener != null) { if (listeners == null) listeners = new Vector(); listeners.addElement(listener); } } public synchronized void removeGainChangeListener(GainChangeListener listener) { if (listener != null && listeners != null) listeners.removeElement(listener); } public java.awt.Component getControlComponent() { return null; } protected synchronized void informListeners() { if (listeners != null) { GainChangeEvent gce = new GainChangeEvent(this, muteState, dB, level); for (int i = 0; i < listeners.size(); i++) { GainChangeListener gcl = (GainChangeListener) listeners.elementAt(i); gcl.gainChange(gce); } } } }