ptolemy.actor.lib.javasound
Class SoundPlayer
java.lang.Object
ptolemy.kernel.util.NamedObj
ptolemy.kernel.InstantiableNamedObj
ptolemy.kernel.Entity
ptolemy.kernel.ComponentEntity
ptolemy.actor.AtomicActor
ptolemy.actor.TypedAtomicActor
ptolemy.actor.lib.javasound.SoundActor
ptolemy.actor.lib.javasound.SoundPlayer
- All Implemented Interfaces:
- java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
public class SoundPlayer
- extends SoundActor
This actor plays audio samples provided on the input port.
The audio samples that are supplied to
this actor should be doubles in the range -1.0 to 1.0, provided
as a DoubleMatrix, where the first index of the matrix represents
the channel and the second index is the sample number. That is,
each row is a sequence of samples for the channel corresponding
to the row number. Any input
value that is outside of the valid range will be hard-clipped
to fall within the range [-1.0, 1.0] before it is written
to the audio output port of the computer.
The parameters are as follows:
- sampleRate should be set to desired sample rate, in Hz.
The default value is 8000. Allowable values are 8000, 11025,
22050, 44100, and 48000 Hz.
- bytesPerSample gives the resolution of audio samples.
This is an integer that defaults to 2, meaning 16-bit samples.
- channels should be set to desired number of audio
channels. Allowable values are 1 (for mono) and 2 (for stereo).
The default value is 1. Some sound cards support more than two
audio channels, but this is not supported in Java.
FIXME: If this differs from the input dimensions?
- transferSize The number of samples that will
be transferred to the audio driver
together. This is an integer with default 128.
- The requested buffer size in the audio hardware. This
affects how far ahead of real time the model can get. There is no
harm in making this large because this actor will overwrite previously
queued values if necessary. This is an integer
that defaults to 8000, representing a buffer with
8000 samples per channel. At an 8 kHz sample rate,
this corresponds to one second of sound.
All of these parameters are shared by all audio actors that
use the audio hardware, so changing them in
one of those actors will cause it to change in all.
Note: Requires Java 2 v1.3.0 or later.
- Since:
- Ptolemy II 6.1
- Version:
- $Id: SoundPlayer.java 57040 2010-01-27 20:52:32Z cxh $
- Author:
- Edward A. Lee
- See Also:
LiveSound
,
AudioCapture
,
AudioReader
,
AudioWriter
,
Serialized Form
- Accepted Rating:
- Proposed Rating:
Fields inherited from class ptolemy.kernel.util.NamedObj |
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS |
Constructor Summary |
SoundPlayer(CompositeEntity container,
java.lang.String name)
Construct an actor with the given container and name. |
Method Summary |
void |
initialize()
Obtain access to the audio playback hardware, and start playback. |
boolean |
postfire()
Read an input array and send to the audio hardware. |
void |
wrapup()
Stop audio playback and free up any audio resources used
for audio playback. |
Methods inherited from class ptolemy.actor.AtomicActor |
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, clone, connectionsChanged, createReceivers, declareDelayDependency, fire, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate |
Methods inherited from class ptolemy.kernel.ComponentEntity |
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName |
Methods inherited from class ptolemy.kernel.Entity |
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName |
Methods inherited from class ptolemy.kernel.util.NamedObj |
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace |
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
input
public TypedIOPort input
- The input port. This port must receive double matrix tokens (in the
range of -1.0 to 1.0).
_playbackData
private byte[] _playbackData
- Byte buffer used for playback data.
_sourceDataLine
protected javax.sound.sampled.SourceDataLine _sourceDataLine
- The data line being used for playback.
SoundPlayer
public SoundPlayer(CompositeEntity container,
java.lang.String name)
throws IllegalActionException,
NameDuplicationException
- Construct an actor with the given container and name.
- Parameters:
container
- The container.name
- The name of this actor.
- Throws:
IllegalActionException
- If the actor cannot be contained
by the proposed container.
NameDuplicationException
- If the container already has an
actor with this name.
initialize
public void initialize()
throws IllegalActionException
- Obtain access to the audio playback hardware, and start playback.
An exception will occur if there is a problem starting
playback. This will occur if another SoundPlayer actor is
playing audio.
- Specified by:
initialize
in interface Initializable
- Overrides:
initialize
in class SoundActor
- Throws:
IllegalActionException
- If there is a problem
beginning audio playback.
postfire
public boolean postfire()
throws IllegalActionException
- Read an input array and send to the audio hardware.
If the audio buffer cannot accept the samples, then this
method will stall the calling thread until it can.
- Specified by:
postfire
in interface Executable
- Overrides:
postfire
in class AtomicActor
- Returns:
- True if execution can continue into the next iteration.
- Throws:
IllegalActionException
- If there is a problem
playing audio.
wrapup
public void wrapup()
throws IllegalActionException
- Stop audio playback and free up any audio resources used
for audio playback.
- Specified by:
wrapup
in interface Initializable
- Overrides:
wrapup
in class SoundActor
- Throws:
IllegalActionException
- If there is a problem
stopping audio playback.