Class PeakMeter
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- de.sciss.gui.PeakMeter
-
- All Implemented Interfaces:
PeakMeterView,Disposable,java.awt.image.ImageObserver,java.awt.MenuContainer,java.io.Serializable,javax.swing.SwingConstants
public class PeakMeter extends javax.swing.JComponent implements PeakMeterView, Disposable, javax.swing.SwingConstants
A level (volume) meter GUI component. The component is a vertical bar displaying a green-to-reddish bar for the peak amplitude and a blue bar for RMS value.To animate the bar, call
setPeakAndRMSat a regular interval, typically around every 30 milliseconds for a smooth look.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static booleananimationNeedsSynctrue for bug: https://stackoverflow.com/questions/19480076static intDEFAULT_HOLD_DUR-
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
Fields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclearHold()Clears the peak hold indicator.voidclearMeter()Clears the peak, peak hold and rms values immediately (without ballistics).voiddispose()floatgetHoldDecibels()intgetNumChannels()floatgetPeakDecibels()booleanmeterUpdate(float[] peakRMSPairs, int offset, long time)voidpaintComponent(java.awt.Graphics g)protected voidrecalcPrefSize()voidsetHoldDuration(int millis)Sets the peak indicator hold time.voidsetHoldPainted(boolean onOff)Decides whether the peak indicator should be painted or not.voidsetOrientation(int orient)booleansetPeak(float newPeak)Updates the meter.booleansetPeakAndRMS(float peak, float rms)Updates the meter.booleansetPeakAndRMS(float newPeak, float newRMS, long time)voidsetRefreshParent(boolean onOff)voidsetRMSPainted(boolean onOff)Decides whether the blue RMS bar should be painted or not.voidsetTicks(int ticks)-
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUI, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
-
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Field Detail
-
DEFAULT_HOLD_DUR
public static final int DEFAULT_HOLD_DUR
- See Also:
- Constant Field Values
-
animationNeedsSync
public static final boolean animationNeedsSync
true for bug: https://stackoverflow.com/questions/19480076
-
-
Method Detail
-
setOrientation
public void setOrientation(int orient)
-
getNumChannels
public int getNumChannels()
- Specified by:
getNumChannelsin interfacePeakMeterView
-
meterUpdate
public boolean meterUpdate(float[] peakRMSPairs, int offset, long time)- Specified by:
meterUpdatein interfacePeakMeterView
-
setHoldPainted
public void setHoldPainted(boolean onOff)
Decides whether the peak indicator should be painted or not. By default the indicator is painted.- Parameters:
onOff-trueto have the indicator painted,falseto switch it off
-
setRMSPainted
public void setRMSPainted(boolean onOff)
Decides whether the blue RMS bar should be painted or not. By default the bar is painted.- Parameters:
onOff-trueto have the RMS values painted,falseto switch them off
-
clearMeter
public void clearMeter()
Clears the peak, peak hold and rms values immediately (without ballistics). This way the component can be reset when the metering task is stopped without waiting for the bars to fall down.- Specified by:
clearMeterin interfacePeakMeterView
-
setTicks
public void setTicks(int ticks)
-
setRefreshParent
public void setRefreshParent(boolean onOff)
-
setHoldDuration
public void setHoldDuration(int millis)
Sets the peak indicator hold time. Defaults to 1800 milliseconds.- Parameters:
millis- new peak hold time in milliseconds. Note that the special value-1means infinite peak hold. In this case, to clear the indicator, callclearHold
-
clearHold
public void clearHold()
Clears the peak hold indicator. Note that you will need to callsetPeakAndRMSsuccessively for the graphics to be updated.
-
recalcPrefSize
protected void recalcPrefSize()
-
getPeakDecibels
public float getPeakDecibels()
-
getHoldDecibels
public float getHoldDecibels()
-
setPeakAndRMS
public boolean setPeakAndRMS(float peak, float rms)Updates the meter. This will call the component's paint method to visually reflect the new values. Call this method regularly for a steady animated meter.If you have switched off RMS painted, you may want to call
setPeakalternatively.When your audio engine is idle, you may want to stop meter updates. You can use the following formula to calculate the maximum delay of the meter display to be safely at minimum levels after starting to send zero amplitudes:
- for peak hold indicator not painted : delay[sec] = abs(minAmplitude[dB]) / fallTime[dB/sec] + updatePeriod[sec]
- for painted peak hold : the maximum of the above value and delay[sec] = abs(minAmplitude[dB]) / holdFallTime[dB/sec] + holdTime[sec] + updatePeriod[sec]
Therefore, for the default values of 1.8 sec hold time, 15 dB/sec hold fall time and -40 dB minimum amplitude, at a display period of 30 milliseconds, this yields a delay of around 4.5 seconds. Accounting for jitter due to GUI slowdown, in ths case it should be safe to stop meter updates five seconds after the audio engine stopped. synchronization: this method is thread safe
- Parameters:
peak- peak amplitude (linear) between zero and one.rms- mean-square amplitude (linear). note : despite the name, this is considered mean-square, not root-mean-square. this method does the appropriate conversion on the fly!
-
setPeakAndRMS
public boolean setPeakAndRMS(float newPeak, float newRMS, long time)
-
setPeak
public boolean setPeak(float newPeak)
Updates the meter. This will call the component's paint method to visually reflect the peak amplitude. Call this method regularly for a steady animated meter. The RMS value is not changed, so this method is appropriate when having RMS painting turned off. synchronization: this method is thread safe- Parameters:
newPeak- peak amplitude (linear) between zero and one.
-
paintComponent
public void paintComponent(java.awt.Graphics g)
- Overrides:
paintComponentin classjavax.swing.JComponent
-
dispose
public void dispose()
- Specified by:
disposein interfaceDisposable
-
-