CUGL 2.0
Cornell University Game Library
|
#include <CUWAVDecoder.h>
Public Types | |
enum | Type : int { Type::PCM_DATA = 0, Type::IEEE_FLOAT = 1, Type::MS_ADPCM = 2, Type::IMA_ADPCM = 3, Type::MP3_DATA = 4, Type::UNKNOWN = 5 } |
Public Member Functions | |
WAVDecoder () | |
~WAVDecoder () | |
bool | init (const char *file) override |
bool | init (const std::string &file) override |
void | dispose () override |
Type | getType () const |
virtual Sint32 | pagein (float *buffer) override |
void | setPage (Uint64 page) override |
Public Member Functions inherited from cugl::audio::AudioDecoder | |
AudioDecoder () | |
~AudioDecoder () | |
double | getDuration () const |
Uint32 | getSampleRate () const |
Uint64 | getLength () const |
Uint32 | getChannels () const |
std::string | getFile () const |
Uint32 | getPageSize () const |
bool | ready () |
Uint64 | getPage () const |
Uint64 | getPageCount () const |
void | rewind () |
Sint32 | decode (float *buffer) |
Static Public Member Functions | |
static std::shared_ptr< AudioDecoder > | alloc (const char *file) |
static std::shared_ptr< AudioDecoder > | alloc (const std::string &file) |
Protected Attributes | |
SDL_RWops * | _source |
Uint8 * | _chunker |
Type | _datatype |
Uint32 | _sampbits |
Uint32 | _sampsize |
Sint64 | _datamark |
std::shared_ptr< ADPCMDecoder > | _adpcm |
Protected Attributes inherited from cugl::audio::AudioDecoder | |
Uint8 | _channels |
Uint32 | _rate |
Uint64 | _frames |
std::string | _file |
Uint32 | _pagesize |
Uint64 | _currpage |
Uint64 | _lastpage |
This class represents an WAV decoder.
This decoder supports supports PCM, IEEE Float, and ADPCM encoding (both MS and IMA). However, it does not support MP3 data stored in a WAV file.
MP3 data should be stored in an MP3 file.
WAV files are not normally paged (except in the case of AD PCM). This decoder tries to balance memory requirements with efficiency in paging the WAV data. For ADPCM files, the page size is the same as the block alignment size.
All channels are interleaved. ADPCM only supports stereo, but more channels may be supported in general WAV files. SDL supports up to 6 channels in general.
A decoder is NOT thread safe. If a decoder is used by an audio thread, then it should not be accessed directly in the main thread, and vice versa.
|
strong |
This represents the supported WAV encoding types
More obscure coding types (e.g. DTS WAV) may or may not be supported.
cugl::audio::WAVDecoder::WAVDecoder | ( | ) |
Creates an initialized audio decoder
NEVER USE A CONSTRUCTOR WITH NEW. If you want to allocate an asset on the heap, use one of the static constructors instead.
cugl::audio::WAVDecoder::~WAVDecoder | ( | ) |
Deletes this decoder, disposing of all resources.
|
inlinestatic |
Creates a newly allocated decoder for the given WAV file.
This method will fail and return nullptr if the file is not a supported WAV file.
file | the source file for the decoder |
|
static |
Creates a newly allocated decoder for the given WAV file.
This method will fail and return nullptr if the file is not a supported WAV file.
file | the source file for the decoder |
|
overridevirtual |
Deletes the decoder resources and resets all attributes.
This will close the associated file. You must reinitialize the decoder to use it.
Implements cugl::audio::AudioDecoder.
|
inline |
Returns the WAV encoding type
|
inlineoverridevirtual |
Initializes a new decoder for the given WAV file.
This method will fail if the file is not a supported WAV file.
file | the source file for the decoder |
Reimplemented from cugl::audio::AudioDecoder.
|
overridevirtual |
Initializes a new decoder for the given WAV file.
This method will fail if the file is not a supported WAV file.
file | the source file for the decoder |
Implements cugl::audio::AudioDecoder.
|
overridevirtual |
Reads a page of data into the provided buffer.
The buffer should be able to hold channels * page size many elements. The data is interpretted as floats and channels are all interleaved. If a full page is read, this method should return the page size. If it reads less, it will return the number of frames read. It will return -1 on a processing error.
buffer | The buffer to store the audio data |
Implements cugl::audio::AudioDecoder.
|
overridevirtual |
Sets the current page of this decoder
This value is the next page to be read in with the pagein() command. If the page is greater than the total number of pages, it will be set just beyond the last page.
page | The new page of this decoder |
Implements cugl::audio::AudioDecoder.
|
protected |
An optional proxy for decoding ACPCM data
|
protected |
The buffer for reading pages
|
protected |
The start of the audio stream, just after the header
|
protected |
The encoding type
|
protected |
The number of bits per sample represented as a flag mask
|
protected |
The number of bytes per sample
|
protected |
The file for loading in information