Class PcmWaveWriter


  • public class PcmWaveWriter
    extends AudioFileWriter
    Writes basic PCM wave files from binary audio data.

    Here's an example that writes 2 seconds of silence

     PcmWaveWriter s_wsw = new PcmWaveWriter(2, 44100);
     byte[] silence = new byte[16*2*44100];
     wsw.Open("C:\\out.wav");
     wsw.WriteHeader(); 
     wsw.WriteData(silence, 0, silence.length);
     wsw.WriteData(silence, 0, silence.length);
     wsw.Close(); 
     
    Version:
    $Revision: 1.2 $
    Author:
    Jim Lawrence, helloNetwork.com, Marc Gimpel, Wimba S.A. (mgimpel@horizonwimba.com)
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private int channels
      Defines the number of channels of the audio input (1=mono, 2=stereo).
      private boolean isPCM  
      private int mode
      Defines the encoder mode (0=NB, 1=WB and 2-UWB).
      private int nframes
      Defines the number of frames per speex packet.
      private int quality  
      private java.io.RandomAccessFile raf  
      private int sampleRate
      Defines the sampling rate of the audio input.
      private int size  
      private boolean vbr
      Defines whether or not to use VBR (Variable Bit Rate).
      static int[][][] WAVE_BITS_PER_FRAME
      Table describing the number of bit per Speex frame, depending on its mode-1 (1=NB, 2=WB, 3=UWB), channels-1 (1=mono, 2=stereo) and the quality setting (0 to 10).
      static short WAVE_FORMAT_PCM
      Wave type code of PCM
      static short WAVE_FORMAT_SPEEX
      Wave type code of Speex
      static int[][][] WAVE_FRAME_SIZES
      Table describing the number of frames per packet in a Speex Wave file, depending on its mode-1 (1=NB, 2=WB, 3=UWB), channels-1 (1=mono, 2=stereo) and the quality setting (0 to 10).
    • Constructor Summary

      Constructors 
      Constructor Description
      PcmWaveWriter()
      Constructor.
      PcmWaveWriter​(int sampleRate, int channels)
      Constructor.
      PcmWaveWriter​(int mode, int quality, int sampleRate, int channels, int nframes, boolean vbr)
      Constructor.
    • Field Detail

      • WAVE_FORMAT_PCM

        public static final short WAVE_FORMAT_PCM
        Wave type code of PCM
        See Also:
        Constant Field Values
      • WAVE_FORMAT_SPEEX

        public static final short WAVE_FORMAT_SPEEX
        Wave type code of Speex
        See Also:
        Constant Field Values
      • WAVE_FRAME_SIZES

        public static final int[][][] WAVE_FRAME_SIZES
        Table describing the number of frames per packet in a Speex Wave file, depending on its mode-1 (1=NB, 2=WB, 3=UWB), channels-1 (1=mono, 2=stereo) and the quality setting (0 to 10). See end of file for exerpt from SpeexACM code for more explanations.
      • WAVE_BITS_PER_FRAME

        public static final int[][][] WAVE_BITS_PER_FRAME
        Table describing the number of bit per Speex frame, depending on its mode-1 (1=NB, 2=WB, 3=UWB), channels-1 (1=mono, 2=stereo) and the quality setting (0 to 10). See end of file for exerpt from SpeexACM code for more explanations.
      • raf

        private java.io.RandomAccessFile raf
      • mode

        private int mode
        Defines the encoder mode (0=NB, 1=WB and 2-UWB).
      • quality

        private int quality
      • sampleRate

        private int sampleRate
        Defines the sampling rate of the audio input.
      • channels

        private int channels
        Defines the number of channels of the audio input (1=mono, 2=stereo).
      • nframes

        private int nframes
        Defines the number of frames per speex packet.
      • vbr

        private boolean vbr
        Defines whether or not to use VBR (Variable Bit Rate).
      • size

        private int size
      • isPCM

        private boolean isPCM
    • Constructor Detail

      • PcmWaveWriter

        public PcmWaveWriter()
        Constructor.
      • PcmWaveWriter

        public PcmWaveWriter​(int sampleRate,
                             int channels)
        Constructor.
        Parameters:
        sampleRate - the number of samples per second.
        channels - the number of audio channels (1=mono, 2=stereo, ...).
      • PcmWaveWriter

        public PcmWaveWriter​(int mode,
                             int quality,
                             int sampleRate,
                             int channels,
                             int nframes,
                             boolean vbr)
        Constructor.
        Parameters:
        mode - the mode of the encoder (0=NB, 1=WB, 2=UWB).
        quality -
        sampleRate - the number of samples per second.
        channels - the number of audio channels (1=mono, 2=stereo, ...).
        nframes - the number of frames per speex packet.
        vbr -
    • Method Detail

      • setPCMFormat

        private void setPCMFormat​(int sampleRate,
                                  int channels)
        Sets the output format for a PCM Wave file. Must be called before WriteHeader().
        Parameters:
        sampleRate - the number of samples per second.
        channels - the number of audio channels (1=mono, 2=stereo, ...).
      • setSpeexFormat

        private void setSpeexFormat​(int mode,
                                    int quality,
                                    int sampleRate,
                                    int channels,
                                    int nframes,
                                    boolean vbr)
        Sets the output format for a Speex Wave file. Must be called before WriteHeader().
        Parameters:
        mode - the mode of the encoder (0=NB, 1=WB, 2=UWB).
        quality -
        sampleRate - the number of samples per second.
        channels - the number of audio channels (1=mono, 2=stereo, ...).
        nframes - the number of frames per speex packet.
        vbr -
      • close

        public void close()
                   throws java.io.IOException
        Closes the output file. MUST be called to have a correct stream.
        Specified by:
        close in class AudioFileWriter
        Throws:
        java.io.IOException - if there was an exception closing the Audio Writer.
      • open

        public void open​(java.io.File file)
                  throws java.io.IOException
        Open the output file.
        Specified by:
        open in class AudioFileWriter
        Parameters:
        file - - file to open.
        Throws:
        java.io.IOException - if there was an exception opening the Audio Writer.
      • open

        public void open​(java.lang.String filename)
                  throws java.io.IOException
        Open the output file.
        Specified by:
        open in class AudioFileWriter
        Parameters:
        filename - filename to open.
        Throws:
        java.io.IOException - if there was an exception opening the Audio Writer.
      • writeHeader

        public void writeHeader​(java.lang.String comment)
                         throws java.io.IOException
        Writes the initial data chunks that start the wave file. Prepares file for data samples to written.
        Specified by:
        writeHeader in class AudioFileWriter
        Parameters:
        comment - ignored by the WAV header.
        Throws:
        java.io.IOException
      • writePacket

        public void writePacket​(byte[] data,
                                int offset,
                                int len)
                         throws java.io.IOException
        Writes a packet of audio.
        Specified by:
        writePacket in class AudioFileWriter
        Parameters:
        data - audio data
        offset - the offset from which to start reading the data.
        len - the length of data to read.
        Throws:
        java.io.IOException
      • calculateEffectiveBitrate

        private static final int calculateEffectiveBitrate​(int mode,
                                                           int channels,
                                                           int quality)
        Calculates effective bitrate (considering padding). See end of file for exerpt from SpeexACM code for more explanations.
        Parameters:
        mode -
        channels -
        quality -
        Returns:
        effective bitrate (considering padding).
      • calculateBlockSize

        private static final int calculateBlockSize​(int mode,
                                                    int channels,
                                                    int quality)
        Calculates block size (considering padding). See end of file for exerpt from SpeexACM code for more explanations.
        Parameters:
        mode -
        channels -
        quality -
        Returns:
        block size (considering padding).