Class AudioWriter

  • All Implemented Interfaces:
    java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

    public class AudioWriter
    extends Sink
    This actor reads audio samples from the input port and writes the samples to the specified sound file. Any existing file with the same name will be silently overwritten. The input port is of type DoubleToken. Each DoubleToken read from the input port represents one sample of the audio data and should be in the range [-1.0, 1.0]. Any samples that are outside of this range will be hard-clipped to fall within this range before they are written to the sound file. Single channel (mono) and two channel (stereo) formats are supported. For single channel audio, tokens are written to channel 0 of the output port. For stereo , tokens are written to channel 0 (left) and channel 1 (right) of the output port.

    The following parameters should be set to specify the format of the file to write. In all cases, an exception is thrown if an illegal parameter value is used. Note that if a parameter is changed while audio writing is active, all data written so far will be saved, and the sound file will be closed. Subsequent audio samples will then be written to a new sound file with the new parameter values.

    • pathName should be set to the name of the output file. Any existing file with the same name will be silently overwritten. Relative filenames are supported. The default value is "outfile.wav". The audio format to use is determined by the file extension. E.g., "outfile.wav" will create a WAV format file. The supported file formats are AU, WAV, and, AIFF. For example, to write samples to a Sun AU format file with the name "test.au" in the directory "c:\tmp", this parameter should be set to the value c:\tmp\test.au. To write samples to a file with name "test.au" in the current directory, this parameter should be set to the value test.au.
    • 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.
    • sampleRate should be set to desired sample rate, in Hz. The DoubleTokens read in by this actor will be interpreted as having this sample rate. Allowable values are 8000, 11025, 22050, 44100, and 48000. The default value is 8000.
    • bitsPerSample should be set to desired bit resolution. Allowable values are 8 and 16. The default value is 16.

    There are security issues involved with accessing files and audio resources in applets. By default, applets are not allowed to write files. The .java.policy file may be modified to grant applets more privileges.

    Since:
    Ptolemy II 1.0
    Version:
    $Id$
    Author:
    Brian K. Vogel
    See Also:
    AudioReader, AudioCapture, AudioPlayer
    Pt.AcceptedRating:
    Yellow (chf)
    Pt.ProposedRating:
    Yellow (vogel)
    • Field Detail

      • pathName

        public StringAttribute pathName
        The name of the file to write to. The default value of this parameter is "test.wav", which creates a file called test.wav in the current directory and writes samples to this file.

        The audio format to use is determined by the file extension. E.g., "outfile.wav" will create a WAV format file. The supported file formats are AU, WAV, and, AIFF.

        An exception will be occur if the path references an unsupported sound file.

      • sampleRate

        public Parameter sampleRate
        The desired sample rate to use, in Hz. Valid values include: 8000, 11025, 22050, 44100, and 48000. The default value of the sample rate is an IntToken equal to 8000.

        An exception will be thrown if an illegal value is used.

      • bitsPerSample

        public Parameter bitsPerSample
        The desired number of bits per sample. The default value is an IntToken equal to 16. Supported values are 8 and 16. An exception will be thrown if an illegal value is used.
      • channels

        public Parameter channels
        The number of audio channels to use. Supported values are 1 (single channel) and 2 (stereo). The default value is an IntToken equal to 1. An exception will be thrown if an illegal value is used.
    • Method Detail

      • iterate

        public int iterate​(int count)
                    throws IllegalActionException
        Invoke count iterations of this actor. If there at least count tokens on channel 0 (and also on channel 1 if stereo mode is used), then read count tokens from the corresponding channels and write the token values to the specified sound file. Otherwise, do nothing, and return a value of NOT_READY. Note that at most one token is read from each channel in an iteration.

        This method should be called instead of the prefire(), fire(), and postfire() methods when this actor is used in a domain that supports vectorized actors.

        Specified by:
        iterate in interface Executable
        Overrides:
        iterate in class AtomicActor<TypedIOPort>
        Parameters:
        count - The number of iterations to perform.
        Returns:
        COMPLETED if the actor was successfully iterated the specified number of times. Otherwise, return NOT_READY if there are not enough tokens on the input port, or throw an exception if there is a problem writing audio samples to the specified file.
        Throws:
        IllegalActionException - If there is a problem writing the audio sample(s) to the specified file.
        See Also:
        Executable
      • postfire

        public boolean postfire()
                         throws IllegalActionException
        If there is at least 1 token on channel 0 (and also on channel 1 if stereo mode is used), then read 1 token from the corresponding channels and write the token values to the specified sound file. Otherwise, do nothing, and return a value of false.
        Specified by:
        postfire in interface Executable
        Overrides:
        postfire in class AtomicActor<TypedIOPort>
        Returns:
        True if execution can continue into the next iteration.
        Throws:
        IllegalActionException - If there is a problem writing the audio sample(s) to the specified file.