ptolemy.actor.lib.javasound
Class AudioCapture

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.actor.lib.javasound.LiveSoundActor
                              extended by ptolemy.actor.lib.javasound.AudioCapture
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 AudioCapture
extends LiveSoundActor

This actor sequentially outputs audio samples that are captured from the audio input port of the computer. The audio input port typically corresponds to either the microphone input, line-in, or cd audio from the cdrom or dvd drive. It is not possible to select the desired input port under Java. This must be done from the operating system. This actor should be fired often enough to prevent overflow of the internal audio capture buffer. Overflow should be avoided, since it will result in loss of data. Each captured audio sample is converted to a double that may range from -1.0 to 1.0. Thus, the output type of this actor is DoubleToken.

The following parameters should be set accordingly. In all cases, an exception is thrown if an illegal parameter value is used. Note that these parameters may be changed while audio playback is active. If this actor is used in conjunction with an AudioPlayer actor, changing a parameter will cause the corresponding parameter value of the AudioPlayer to automatically be set to the same value. This behavior is required because the AudioCapture and AudioPlayer actors both share access to the audio hardware, which is associated with a single sample rate, bit resolution, and number of channels.

It should be noted that at most one AudioCapture and one AudioPlayer actor may be used simultaneously. Otherwise, an exception will occur. This restriction may be lifted in a future version of this actor.

There are security issues involved with accessing files and audio resources in applets. Applets are not allowed to capture audio from the audio input port (e.g., the microphone) by default since this could present a security risk. Therefore, the actor will not run in an applet by default. The .java.policy file may be modified to grant applets more privileges.

Note: Requires Java 2 v1.3.0 or later.

Since:
Ptolemy II 1.0
Version:
$Id: AudioCapture.java 59152 2010-09-21 04:04:01Z cxh $
Author:
Brian K. Vogel, Christopher Hylands, Steve Neuendorffer
See Also:
LiveSound, AudioPlayer, SoundReader, SoundWriter, Serialized Form
Accepted Rating:
Yellow (chf)
Proposed Rating:
Yellow (vogel)

Nested Class Summary
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
private  double[][] _audioInDoubleArray
           
private  DoubleToken[] _audioSendArray
           
 TypedIOPort output
          The output port.
 Parameter output_tokenProductionRate
          The output rate.
 TypedIOPort trigger
          The trigger port.
 
Fields inherited from class ptolemy.actor.lib.javasound.LiveSoundActor
_bitsPerSample, _bufferSize, _channels, _isExecuting, _sampleRate, _transferSize, bitsPerSample, bufferSize, channels, sampleRate, transferSize
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _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
AudioCapture(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
 java.lang.Object clone(Workspace workspace)
          Clone the actor into the specified workspace.
 void initialize()
          Read parameter values and begin the sound capture process.
 boolean postfire()
          Capture and output a single audio sample on each channel.
 void wrapup()
          Stop capturing audio.
 
Methods inherited from class ptolemy.actor.lib.javasound.LiveSoundActor
_initializeAudio, attributeChanged
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, 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
_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, _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
 
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
 
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
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

trigger

public TypedIOPort trigger
The trigger port.


output

public TypedIOPort output
The output port. This will always produce double data, between -1.0 and 1.0.


output_tokenProductionRate

public Parameter output_tokenProductionRate
The output rate.


_audioInDoubleArray

private double[][] _audioInDoubleArray

_audioSendArray

private DoubleToken[] _audioSendArray
Constructor Detail

AudioCapture

public AudioCapture(CompositeEntity container,
                    java.lang.String name)
             throws NameDuplicationException,
                    IllegalActionException
Construct an actor with the given container and name. In addition to invoking the base class constructors, construct the parameters and initialize them to their default values.

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

clone

public java.lang.Object clone(Workspace workspace)
                       throws java.lang.CloneNotSupportedException
Clone the actor into the specified workspace.

Overrides:
clone in class AtomicActor
Parameters:
workspace - The workspace for the new object.
Returns:
A new actor.
Throws:
java.lang.CloneNotSupportedException - If a derived class contains an attribute that cannot be cloned.
See Also:
NamedObj.exportMoML(Writer, int, String), NamedObj.setDeferringChangeRequests(boolean)

initialize

public void initialize()
                throws IllegalActionException
Read parameter values and begin the sound capture process. An exception will occur if there is a problem starting the audio capture. This will occur if another AudioCapture actor has already started capturing.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class LiveSoundActor
Throws:
IllegalActionException - If there is a problem starting audio capture.

postfire

public boolean postfire()
                 throws IllegalActionException
Capture and output a single audio sample on each channel. This method causes audio samples to be captured from the audio input device (e.g., the microphone or line-in). One token is written to the output port in an invocation. This method should be invoked often enough to prevent overflow of the internal audio capture buffer. Overflow should be avoided, since it will result in loss of data. This method will block until the samples have been read, so it is not possible to invoke this method too frequently.

Specified by:
postfire in interface Executable
Overrides:
postfire in class AtomicActor
Returns:
True
Throws:
IllegalActionException - If audio cannot be captured.

wrapup

public void wrapup()
            throws IllegalActionException
Stop capturing audio. Free up any system resources involved in the capturing process.

Specified by:
wrapup in interface Initializable
Overrides:
wrapup in class LiveSoundActor
Throws:
IllegalActionException - May be thrown by derived classes.