org.xiph.speex.spi
Class Speex2PcmAudioInputStream
public class Speex2PcmAudioInputStream
Converts an Ogg Speex bitstream into a PCM 16bits/sample audio stream.
- Marc Gimpel, Wimba S.A. (mgimpel@horizonwimba.com)
private Bits | bits - Speex bit packing and unpacking class.
|
private int | channelCount - The number of audio channels (1=mono, 2=stereo).
|
private float[] | decodedData - Array containing the decoded audio samples.
|
private Decoder | decoder - Speex Decoder.
|
private int | frameSize - The frame size, in samples.
|
private int | framesPerPacket - The number of Speex frames that will be put in each Ogg packet.
|
private boolean | initialised - Flag to indicate if this Stream has been initialised.
|
private byte[] | outputData - Array containing the decoded audio samples converted into bytes.
|
private int | packetCount - The number of Ogg packets that have been decoded in the current page.
|
private byte[] | packetSizes - Array containing the sizes of Ogg packets in the current page.
|
private int | packetsPerOggPage - The number of Ogg packets that are in each Ogg page.
|
private int | sampleRate - The sample rate of the audio, in samples per seconds (Hz).
|
private int | streamSerialNumber - A unique serial number that identifies the Ogg stream.
|
DEFAULT_BUFFER_SIZE , buf , count , in , marklimit , markpos , pos , prebuf , precount , prepos , single |
int | available() - Returns the number of bytes that can be read from this inputstream without
blocking.
|
protected void | decode(byte[] data, int offset, int len) - This is where the actual decoding takes place.
|
protected void | fill() - Fills the buffer with more data, taking into account shuffling and other
tricks for dealing with marks.
|
protected void | initialise(boolean blocking) - Initialises the Ogg Speex to PCM InputStream.
|
private static int | readInt(byte[] data, int offset) - Converts Little Endian (Windows) bytes to an int (Java uses Big Endian).
|
private void | readOggPageHeader() - Read the Ogg Page header and extract the speex packet sizes.
|
long | skip(long n) - See the general contract of the
skip method of
InputStream .
|
available , checkIfStillOpen , close , fill , makeSpace , mark , markSupported , read , read , reset , skip |
bits
private Bits bits
Speex bit packing and unpacking class.
channelCount
private int channelCount
The number of audio channels (1=mono, 2=stereo).
decodedData
private float[] decodedData
Array containing the decoded audio samples.
decoder
private Decoder decoder
Speex Decoder.
frameSize
private int frameSize
The frame size, in samples.
framesPerPacket
private int framesPerPacket
The number of Speex frames that will be put in each Ogg packet.
initialised
private boolean initialised
Flag to indicate if this Stream has been initialised.
outputData
private byte[] outputData
Array containing the decoded audio samples converted into bytes.
packetCount
private int packetCount
The number of Ogg packets that have been decoded in the current page.
packetSizes
private byte[] packetSizes
Array containing the sizes of Ogg packets in the current page.
packetsPerOggPage
private int packetsPerOggPage
The number of Ogg packets that are in each Ogg page.
sampleRate
private int sampleRate
The sample rate of the audio, in samples per seconds (Hz).
streamSerialNumber
private int streamSerialNumber
A unique serial number that identifies the Ogg stream.
Speex2PcmAudioInputStream
public Speex2PcmAudioInputStream(InputStream in,
AudioFormat format,
long length)
Constructor
in
- the underlying input stream.format
- the target format of this stream's audio data.length
- the length in sample frames of the data in this stream.
Speex2PcmAudioInputStream
public Speex2PcmAudioInputStream(InputStream in,
AudioFormat format,
long length,
int size)
Constructor
in
- the underlying input stream.format
- the target format of this stream's audio data.length
- the length in sample frames of the data in this stream.size
- the buffer size.
available
public int available()
throws IOException
Returns the number of bytes that can be read from this inputstream without
blocking.
The
available
method of
FilteredAudioInputStream
returns the sum of the the number of bytes remaining to be read in the
buffer (
count - pos
).
The result of calling the
available
method of the underlying
inputstream is not used, as this data will have to be filtered, and thus
may not be the same size after processing (although subclasses that do the
filtering should override this method and use the amount of data available
in the underlying inputstream).
- available in interface FilteredAudioInputStream
- the number of bytes that can be read from this inputstream without
blocking.
decode
protected void decode(byte[] data,
int offset,
int len)
throws StreamCorruptedException
This is where the actual decoding takes place.
data
- the array of data to decode.offset
- the offset from which to start reading the data.len
- the length of data to read from the array.
fill
protected void fill()
throws IOException
Fills the buffer with more data, taking into account shuffling and other
tricks for dealing with marks.
Assumes that it is being called by a synchronized method.
This method also assumes that all data has already been read in, hence
pos > count.
- fill in interface FilteredAudioInputStream
initialise
protected void initialise(boolean blocking)
throws IOException
Initialises the Ogg Speex to PCM InputStream.
Read the Ogg Speex header and extract the speex decoder parameters to
initialise the decoder. Then read the Comment header.
Ogg Header description:
0 - 3: capture_pattern
4: stream_structure_version
5: header_type_flag (2=bos: beginning of sream)
6 - 13: absolute granule position
14 - 17: stream serial number
18 - 21: page sequence no
22 - 25: page checksum
26: page_segments
27 -...: segment_table
Speex Header description
0 - 7: speex_string
8 - 27: speex_version
28 - 31: speex_version_id
32 - 35: header_size
36 - 39: rate
40 - 43: mode (0=narrowband, 1=wb, 2=uwb)
44 - 47: mode_bitstream_version
48 - 51: nb_channels
52 - 55: bitrate
56 - 59: frame_size
60 - 63: vbr
64 - 67: frames_per_packet
68 - 71: extra_headers
72 - 75: reserved1
76 - 79: reserved2
blocking
- whether the method should block until initialisation is
successfully completed or not.
readInt
private static int readInt(byte[] data,
int offset)
Converts Little Endian (Windows) bytes to an int (Java uses Big Endian).
data
- the data to read.offset
- the offset from which to start reading.
- the integer value of the reassembled bytes.
readOggPageHeader
private void readOggPageHeader()
throws IOException
Read the Ogg Page header and extract the speex packet sizes.
Note: the checksum is ignores.
Note: the method should no block on a read because it will not read more
then is available
skip
public long skip(long n)
throws IOException
See the general contract of the skip
method of
InputStream
.
- skip in interface FilteredAudioInputStream
n
- the number of bytes to be skipped.
- the actual number of bytes skipped.
Copyright © 1999-2004 Wimba S.A. All Rights Reserved.