ccAudio
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
ost::AudioCodec Class Referenceabstract

The codec class is a virtual used for transcoding audio samples between linear frames (or other known format) and an encoded "sample" buffer. More...

#include <audio2.h>

Inheritance diagram for ost::AudioCodec:
ost::Audio

Public Member Functions

 AudioCodec (const char *name, Encoding encoding)
 Base for codecs, create a named coded of a specific encoding. More...
 
virtual ~AudioCodec ()
 
virtual Level getImpulse (void *buffer, unsigned number=0)
 Get the impulse energy level of a frame of X samples in the specified codec format. More...
 
virtual Level getPeak (void *buffer, unsigned number=0)
 Get the peak energy level within the frame of X samples. More...
 
virtual bool isSilent (Level threashold, void *buffer, unsigned number=0)
 Signal if the current audio frame is silent. More...
 
virtual unsigned encode (Linear buffer, void *dest, unsigned number=0)=0
 Encode a linear sample frame into the codec sample buffer. More...
 
virtual unsigned encodeBuffered (Linear Buffer, Encoded dest, unsigned number)
 Encode linear samples buffered into the coded. More...
 
virtual unsigned decode (Linear buffer, void *source, unsigned number=0)=0
 Decode the sample frame into linear samples. More...
 
virtual unsigned decodeBuffered (Linear buffer, Encoded source, unsigned len)
 Buffer and decode data into linear samples. More...
 
virtual unsigned getEstimated (void)
 Get estimated data required for buffered operations. More...
 
virtual unsigned getRequired (void)
 get required samples for encoding. More...
 
virtual unsigned getPacket (Encoded destination, Encoded data, unsigned size)
 Get a packet of data rather than decode. More...
 
Info getInfo (void)
 Get an info description for this codec. More...
 

Static Public Member Functions

static void endCodec (AudioCodec *codec)
 End use of a requested codec. More...
 
static AudioCodecgetCodec (Encoding encoding, const char *format=NULL, bool loaded=false)
 Get the codec base class for accessing a specific derived codec identified by encoding type and optional spd info. More...
 
static AudioCodecgetCodec (Info &info, bool loaded=false)
 Get the codec base class for accessing a specific derived codec identified by audio source descriptor. More...
 
static bool load (const char *name)
 Load a named codec set into process memory. More...
 
static bool load (Encoding encoding)
 Find and load a codec file by it's encoding type. More...
 
- Static Public Member Functions inherited from ost::Audio
static Level tolevel (float dbm)
 Convert dbm power level to integer value (0-32768). More...
 
static float todbm (Level power)
 Convert integer power levels to dbm. More...
 
static bool hasDevice (unsigned device=0)
 Test for the presense of a specified (indexed) audio device. More...
 
static AudioDevicegetDevice (unsigned device=0, DeviceMode mode=PLAY)
 Get a audio device object that can be used to play or record audio. More...
 
static const char * getCodecPath (void)
 Get pathname to where loadable codec modules are stored. More...
 
static const char * getMIME (Info &info)
 Get the mime descriptive type for a given Audio encoding description, usually retrieved from a newly opened audio file. More...
 
static const char * getName (Encoding encoding)
 Get the short ascii description used for the given audio encoding type. More...
 
static const char * getExtension (Encoding encoding)
 Get the preferred file extension name to use for a given audio encoding type. More...
 
static Encoding getEncoding (const char *name)
 Get the audio encoding format that is specified by a short ascii name. More...
 
static Encoding getStereo (Encoding encoding)
 Get the stereo encoding format associated with the given format. More...
 
static Encoding getMono (Encoding encoding)
 Get the mono encoding format associated with the given format. More...
 
static bool isLinear (Encoding encoding)
 Test if the audio encoding format is a linear one. More...
 
static bool isBuffered (Encoding encoding)
 Test if the audio encoding format must be packetized (that is, has irregular sized frames) and must be processed only through buffered codecs. More...
 
static bool isMono (Encoding encoding)
 Test if the audio encoding format is a mono format. More...
 
static bool isStereo (Encoding encoding)
 Test if the audio encoding format is a stereo format. More...
 
static Rate getRate (Encoding encoding)
 Return default sample rate associated with the specified audio encoding format. More...
 
static Rate getRate (Encoding e, Rate request)
 Return optional rate setting effect. More...
 
static timeout_t getFraming (Encoding encoding, timeout_t timeout=0)
 Return frame timing for an audio encoding format. More...
 
static timeout_t getFraming (Info &info, timeout_t timeout=0)
 Return frame time for an audio source description. More...
 
static bool isEndian (Encoding encoding)
 Test if the endian byte order of the encoding format is different from the machine's native byte order. More...
 
static bool isEndian (Info &info)
 Test if the endian byte order of the audio source description is different from the machine's native byte order. More...
 
static bool swapEndian (Encoding encoding, void *buffer, unsigned number)
 Optionally swap endian of audio data if the encoding format endian byte order is different from the machine's native endian. More...
 
static void swapEncoded (Info &info, Encoded data, size_t bytes)
 Optionally swap endian of encoded audio data based on the audio encoding type, and relationship to native byte order. More...
 
static bool swapEndian (Info &info, void *buffer, unsigned number)
 
Optionally swap endian of audio data if the audio source description byte order is different from the machine's native endian byte order. More...
 
static Level getImpulse (Encoding encoding, void *buffer, unsigned number)
 Get the energey impulse level of a frame of audio data. More...
 
static Level getImpulse (Info &info, void *buffer, unsigned number=0)
 Get the energey impulse level of a frame of audio data. More...
 
static Level getPeak (Encoding encoding, void *buffer, unsigned number)
 Get the peak (highest energy) level found in a frame of audio data. More...
 
static Level getPeak (Info &info, void *buffer, unsigned number=0)
 Get the peak (highest energy) level found in a frame of audio data. More...
 
static void toTimestamp (timeout_t duration, char *address, size_t size)
 Provide ascii timestamp representation of a timeout value. More...
 
static timeout_t toTimeout (const char *timestamp)
 Convert ascii timestamp representation to a timeout number. More...
 
static int getFrame (Encoding encoding, int samples=0)
 Returns the number of bytes in a sample frame for the given encoding type, rounded up to the nearest integer. More...
 
static int getCount (Encoding encoding)
 Returns the number of samples in all channels for a frame in the given encoding. More...
 
static unsigned long toSamples (Encoding encoding, size_t bytes)
 Compute byte counts of audio data into number of samples based on the audio encoding format used. More...
 
static unsigned long toSamples (Info &info, size_t bytes)
 Compute byte counts of audio data into number of samples based on the audio source description used. More...
 
static size_t toBytes (Info &info, unsigned long number)
 Compute the number of bytes a given number of samples in a given audio encoding will occupy. More...
 
static size_t toBytes (Encoding encoding, unsigned long number)
 Compute the number of bytes a given number of samples in a given audio encoding will occupy. More...
 
static void fill (unsigned char *address, int number, Encoding encoding)
 Fill an audio buffer with "empty" (silent) audio data, based on the audio encoding format. More...
 
static bool loadPlugin (const char *path)
 Load a dso plugin (codec plugin), used internally... More...
 
static size_t maxFramesize (Info &info)
 Maximum framesize for a given coding that may be needed to store a result. More...
 

Protected Member Functions

 AudioCodec ()
 
virtual AudioCodecgetByFormat (const char *format)
 often used to create a "new" codec of a subtype based on encoding format, default returns the current codec entity. More...
 
virtual AudioCodecgetByInfo (Info &info)
 get a codec by audio source info descriptor. More...
 

Protected Attributes

AudioCodecnext
 
Encoding encoding
 
const char * name
 
Info info
 

Static Protected Attributes

static AudioCodecfirst
 

Additional Inherited Members

- Public Types inherited from ost::Audio
enum  Rate {
  rateUnknown, rate6khz = 6000, rate8khz = 8000, rate16khz = 16000,
  rate32khz = 32000, rate44khz = 44100
}
 Audio encoding rate, samples per second. More...
 
enum  Mode {
  modeRead, modeReadAny, modeReadOne, modeWrite,
  modeCache, modeInfo, modeFeed, modeAppend,
  modeCreate
}
 File processing mode, whether to skip missing files, etc. More...
 
enum  Encoding {
  unknownEncoding = 0, g721ADPCM, g722Audio, g722_7bit,
  g722_6bit, g723_2bit, g723_3bit, g723_5bit,
  gsmVoice, msgsmVoice, mulawAudio, alawAudio,
  mp1Audio, mp2Audio, mp3Audio, okiADPCM,
  voxADPCM, sx73Voice, sx96Voice, cdaStereo,
  cdaMono, pcm8Stereo, pcm8Mono, pcm16Stereo,
  pcm16Mono, pcm32Stereo, pcm32Mono, speexVoice,
  speexAudio, g729Audio, ilbcAudio, speexUltra,
  speexNarrow = speexVoice, speexWide = speexAudio, g723_4bit = g721ADPCM
}
 Audio encoding formats. More...
 
enum  Format {
  raw, snd, riff, mpeg,
  wave
}
 Audio container file format. More...
 
enum  DeviceMode { PLAY, RECORD, PLAYREC }
 Audio device access mode. More...
 
enum  Error {
  errSuccess = 0, errReadLast, errNotOpened, errEndOfFile,
  errStartOfFile, errRateInvalid, errEncodingInvalid, errReadInterrupt,
  errWriteInterrupt, errReadFailure, errWriteFailure, errReadIncomplete,
  errWriteIncomplete, errRequestInvalid, errTOCFailed, errStatFailed,
  errInvalidTrack, errPlaybackFailed, errNotPlaying, errNoCodec
}
 Audio error conditions. More...
 
typedef int16_t snd16_t
 
typedef int32_t snd32_t
 
typedef int16_t Level
 
typedef int16_t Sample
 
typedef int16_t * Linear
 
typedef unsigned long timeout_t
 
typedef unsigned char * Encoded
 
typedef enum Rate Rate
 
typedef enum Mode Mode
 
typedef enum Encoding Encoding
 
typedef enum Format Format
 
typedef enum DeviceMode DeviceMode
 
typedef enum Error Error
 
- Static Public Attributes inherited from ost::Audio
static const unsigned ndata
 

Detailed Description

The codec class is a virtual used for transcoding audio samples between linear frames (or other known format) and an encoded "sample" buffer.

This class is only abstract and describes the core interface for loadable codec modules. This class is normally merged with AudioSample. A derived AudioCodecXXX will typically include a AudioRegisterXXX static class to automatically initialize and register the codec with the codec registry.

Author
David Sugar dyfet.nosp@m.@ost.nosp@m.el.co.nosp@m.m process codec interface.

Constructor & Destructor Documentation

◆ AudioCodec() [1/2]

ost::AudioCodec::AudioCodec ( )
protected

◆ AudioCodec() [2/2]

ost::AudioCodec::AudioCodec ( const char *  name,
Encoding  encoding 
)

Base for codecs, create a named coded of a specific encoding.

Parameters
nameof codec.
encodingtype of codec.

◆ ~AudioCodec()

virtual ost::AudioCodec::~AudioCodec ( )
inlinevirtual

Member Function Documentation

◆ decode()

virtual unsigned ost::AudioCodec::decode ( Linear  buffer,
void *  source,
unsigned  number = 0 
)
pure virtual

Decode the sample frame into linear samples.

Returns
number of bytes scanned or returned
Parameters
buffersample buffer to save linear samples into.
sourcefor encoded data.
numberof samples to extract.

◆ decodeBuffered()

virtual unsigned ost::AudioCodec::decodeBuffered ( Linear  buffer,
Encoded  source,
unsigned  len 
)
virtual

Buffer and decode data into linear samples.

This is needed for audio formats that have irregular packet sizes.

Returns
number of samples actually decoded.
Parameters
destinationfor decoded data.
sourcefor encoded data.
numberof bytes being sent.

◆ encode()

virtual unsigned ost::AudioCodec::encode ( Linear  buffer,
void *  dest,
unsigned  number = 0 
)
pure virtual

Encode a linear sample frame into the codec sample buffer.

Returns
number of bytes written.
Parameters
bufferlinear sample buffer to use.
destbuffer to store encoded results.
numberof samples.

◆ encodeBuffered()

virtual unsigned ost::AudioCodec::encodeBuffered ( Linear  Buffer,
Encoded  dest,
unsigned  number 
)
virtual

Encode linear samples buffered into the coded.

Returns
number of bytes written or 0 if incomplete.
Parameters
bufferlinear samples to post.
destinationof encoded audio.
numberof samples being buffered.

◆ endCodec()

static void ost::AudioCodec::endCodec ( AudioCodec codec)
static

End use of a requested codec.

If constructed then will be deleted.

Parameters
codecpointer to getCodec returned coded pointer.

◆ getByFormat()

virtual AudioCodec* ost::AudioCodec::getByFormat ( const char *  format)
inlineprotectedvirtual

often used to create a "new" codec of a subtype based on encoding format, default returns the current codec entity.

Returns
pointer to an active codec or NULL if not found.
Parameters
formatname from spd.

◆ getByInfo()

virtual AudioCodec* ost::AudioCodec::getByInfo ( Info info)
inlineprotectedvirtual

get a codec by audio source info descriptor.

Returns
pointer to an active codec or NULL if not found.
Parameters
infoaudio source descriptor.

◆ getCodec() [1/2]

static AudioCodec* ost::AudioCodec::getCodec ( Encoding  encoding,
const char *  format = NULL,
bool  loaded = false 
)
static

Get the codec base class for accessing a specific derived codec identified by encoding type and optional spd info.

Returns
pointer to codec for processing.
Parameters
encodingformat requested.
formatspd options to pass to codec being created.
loadedtrue to load if not already in memory.

◆ getCodec() [2/2]

static AudioCodec* ost::AudioCodec::getCodec ( Info info,
bool  loaded = false 
)
static

Get the codec base class for accessing a specific derived codec identified by audio source descriptor.

Returns
pointer to codec for processing.
Parameters
infosource descriptor for codec being requested.
loadedtrue to load codec if not already in memory.

◆ getEstimated()

virtual unsigned ost::AudioCodec::getEstimated ( void  )
virtual

Get estimated data required for buffered operations.

Returns
estimated number of bytes required for decode.

◆ getImpulse()

virtual Level ost::AudioCodec::getImpulse ( void *  buffer,
unsigned  number = 0 
)
virtual

Get the impulse energy level of a frame of X samples in the specified codec format.

Returns
average impulse energy of frame (sumnation).
Parameters
bufferof encoded samples.
numberof encoded samples.

◆ getInfo()

Info ost::AudioCodec::getInfo ( void  )
inline

Get an info description for this codec.

Returns
info.

◆ getPacket()

virtual unsigned ost::AudioCodec::getPacket ( Encoded  destination,
Encoded  data,
unsigned  size 
)
virtual

Get a packet of data rather than decode.

This is tied with getEstimated.

Returns
size of data packet or 0 if not complete.
Parameters
destinationto save.
datato push into buffer.
numberof bytes to push.

◆ getPeak()

virtual Level ost::AudioCodec::getPeak ( void *  buffer,
unsigned  number = 0 
)
virtual

Get the peak energy level within the frame of X samples.

Returns
peak energy impulse in frame (largest).
Parameters
bufferof encoded samples.
numberof encoded samples.

◆ getRequired()

virtual unsigned ost::AudioCodec::getRequired ( void  )
virtual

get required samples for encoding.

Returns
required number of samples for encoder buffer.

◆ isSilent()

virtual bool ost::AudioCodec::isSilent ( Level  threashold,
void *  buffer,
unsigned  number = 0 
)
virtual

Signal if the current audio frame is silent.

This can be deterimed either by an impulse computation, or, in some cases, some codecs may signal and flag silent packets.

Returns
true if silent
Parameters
threasholdto use if not signaled.
bufferof encoded samples.
numberof encoded samples.

◆ load() [1/2]

static bool ost::AudioCodec::load ( const char *  name)
static

Load a named codec set into process memory.

Returns
true if successful.
Parameters
nameof codec set to load.

◆ load() [2/2]

static bool ost::AudioCodec::load ( Encoding  encoding)
static

Find and load a codec file by it's encoding type.

Converts the type into a codec name and invokes the other loader...

Returns
true if successful.
Parameters
encodingtype for file.

Member Data Documentation

◆ encoding

Encoding ost::AudioCodec::encoding
protected

◆ first

AudioCodec* ost::AudioCodec::first
staticprotected

◆ info

Info ost::AudioCodec::info
protected

◆ name

const char* ost::AudioCodec::name
protected

◆ next

AudioCodec* ost::AudioCodec::next
protected

The documentation for this class was generated from the following file: