Package org.xiph.speex
Class PcmWaveWriter
- java.lang.Object
-
- org.xiph.speex.AudioFileWriter
-
- 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
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 PCMstatic short
WAVE_FORMAT_SPEEX
Wave type code of Speexstatic 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.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description 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
-
-
-
-
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 classAudioFileWriter
- 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 classAudioFileWriter
- 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 classAudioFileWriter
- 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 classAudioFileWriter
- 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 classAudioFileWriter
- Parameters:
data
- audio dataoffset
- 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).
-
-