org.xiph.speex

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 $
Authors:
Jim Lawrence, helloNetwork.com
Marc Gimpel, Wimba S.A. (mgimpel@horizonwimba.com)

Field Summary

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

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(File file)
Open the output file.
void
open(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(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, close, open, open, writeHeader, writeInt, writeInt, writeInt, writeLong, writeLong, writeOggPageHeader, writePacket, writeShort, writeShort, writeShort, writeSpeexComment, writeSpeexHeader, writeString

Field Details

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.

WAVE_FORMAT_PCM

public static final short WAVE_FORMAT_PCM
Wave type code of PCM
Field Value:
1

WAVE_FORMAT_SPEEX

public static final short WAVE_FORMAT_SPEEX
Wave type code of Speex
Field Value:
-24311

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.

channels

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

isPCM

private boolean isPCM

mode

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

nframes

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

quality

private int quality

raf

private RandomAccessFile raf

sampleRate

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

size

private int size

vbr

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

Constructor Details

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 Details

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

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

close

public void close()
            throws IOException
Closes the output file. MUST be called to have a correct stream.
Overrides:
close in interface AudioFileWriter

open

public void open(File file)
            throws IOException
Open the output file.
Overrides:
open in interface AudioFileWriter
Parameters:
file - - file to open.

open

public void open(String filename)
            throws IOException
Open the output file.
Overrides:
open in interface AudioFileWriter
Parameters:
filename - filename to open.

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 -

writeHeader

public void writeHeader(String comment)
            throws IOException
Writes the initial data chunks that start the wave file. Prepares file for data samples to written.
Overrides:
writeHeader in interface AudioFileWriter
Parameters:
comment - ignored by the WAV header.

writePacket

public void writePacket(byte[] data,
                        int offset,
                        int len)
            throws IOException
Writes a packet of audio.
Overrides:
writePacket in interface AudioFileWriter
Parameters:
data - audio data
offset - the offset from which to start reading the data.
len - the length of data to read.

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