org.xiph.speex
Class PcmWaveWriter

java.lang.Object
  extended by org.xiph.speex.AudioFileWriter
      extended by org.xiph.speex.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
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
PcmWaveWriter()
          Constructor.
PcmWaveWriter(int sampleRate, int channels)
          Constructor.
PcmWaveWriter(int mode, int quality, int sampleRate, int channels, int nframes, boolean vbr)
          Constructor.
 
Method Summary
private static int calculateBlockSize(int mode, int channels, int quality)
          Calculates block size (considering padding).
private static int calculateEffectiveBitrate(int mode, int channels, int quality)
          Calculates effective bitrate (considering padding).
 void close()
          Closes the output file.
 void open(java.io.File file)
          Open the output file.
 void open(java.lang.String filename)
          Open the output file.
private  void setPCMFormat(int sampleRate, int channels)
          Sets the output format for a PCM Wave file.
private  void setSpeexFormat(int mode, int quality, int sampleRate, int channels, int nframes, boolean vbr)
          Sets the output format for a Speex Wave file.
 void writeHeader(java.lang.String comment)
          Writes the initial data chunks that start the wave file.
 void writePacket(byte[] data, int offset, int len)
          Writes a packet of audio.
 
Methods inherited from class org.xiph.speex.AudioFileWriter
buildOggPageHeader, buildSpeexComment, buildSpeexHeader, writeInt, writeInt, writeInt, writeLong, writeLong, writeOggPageHeader, writeShort, writeShort, writeShort, writeSpeexComment, writeSpeexHeader, writeString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

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).


Copyright © 1999-2004 Wimba S.A. All Rights Reserved.