Package ptolemy.actor.lib.javasound
Class SoundPlayer
- java.lang.Object
-
- All Implemented Interfaces:
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.
- sampleRate 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.
- Since:
- Ptolemy II 6.1
- Version:
- $Id$
- Author:
- Edward A. Lee
- See Also:
LiveSound
,AudioCapture
,AudioReader
,AudioWriter
- Pt.AcceptedRating:
- Red (eal)
- Pt.ProposedRating:
- Yellow (eal)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
-
-
Field Summary
Fields Modifier and Type Field Description protected javax.sound.sampled.SourceDataLine
_sourceDataLine
The data line being used for playback.TypedIOPort
input
The input port.-
Fields inherited from class ptolemy.actor.lib.javasound.SoundActor
_bufferSize, _bytesPerSample, _channels, _isExecuting, _sampleRate, bufferSize, bytesPerSample, channels, sampleRate
-
Fields inherited from class ptolemy.actor.TypedAtomicActor
_typesValid
-
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
-
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
-
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
-
-
Constructor Summary
Constructors Constructor Description SoundPlayer(CompositeEntity container, java.lang.String name)
Construct an actor with the given container and name.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.lib.javasound.SoundActor
_doubleArrayToByteArray, attributeChanged
-
Methods inherited from class ptolemy.actor.TypedAtomicActor
_containedTypeConstraints, _customTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
-
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, 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
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
-
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
-
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, decorators, 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, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, 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
-
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
-
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
-
Methods inherited from interface ptolemy.actor.Executable
fire, isFireFunctional, isStrict, iterate, prefire, stop, stopFire, terminate
-
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable
-
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
-
-
-
-
Field Detail
-
input
public TypedIOPort input
The input port. This port must receive double matrix tokens (in the range of -1.0 to 1.0).
-
_sourceDataLine
protected javax.sound.sampled.SourceDataLine _sourceDataLine
The data line being used for playback.
-
-
Constructor Detail
-
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.
-
-
Method Detail
-
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 interfaceInitializable
- Overrides:
initialize
in classSoundActor
- 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 interfaceExecutable
- Overrides:
postfire
in classAtomicActor<TypedIOPort>
- 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 interfaceInitializable
- Overrides:
wrapup
in classSoundActor
- Throws:
IllegalActionException
- If there is a problem stopping audio playback.
-
-