ccAudio
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ost::AudioStream Class Reference

AudioStream accesses AudioFile base class content as fixed frames of streaming linear samples. More...

#include <audio2.h>

Inheritance diagram for ost::AudioStream:
ost::AudioFile ost::AudioBase ost::Audio

Public Member Functions

 AudioStream ()
 Create a new audiostream object. More...
 
 AudioStream (const char *name, Mode mode=modeRead, timeout_t framing=0)
 Create an audio stream object and open an existing audio file. More...
 
 AudioStream (const char *name, Info *info, bool exclusive=false, timeout_t framing=0)
 Create an audio stream object and a new audio file. More...
 
virtual ~AudioStream ()
 
ssize_t getBuffer (Encoded data, size_t count)
 Virtual for packet i/o intercept. More...
 
void open (const char *name, Mode mode=modeRead, timeout_t framing=0)
 Open existing audio file for streaming. More...
 
void create (const char *name, Info *info, bool exclusive=false, timeout_t framing=0)
 Create a new audio file for streaming. More...
 
void close (void)
 Close the currently open audio file for streaming. More...
 
void flush (void)
 flush any unsaved buffered data to disk. More...
 
bool isStreamable (void)
 Check if the audio file may be streamed. More...
 
unsigned getCount (void)
 Get the number of samples expected in a frame. More...
 
unsigned getEncoded (AudioCodec *codec, Encoded address, unsigned frames=1)
 Stream audio data from the file and convert into an alternate encoding based on the codec supplied. More...
 
unsigned putEncoded (AudioCodec *codec, Encoded address, unsigned frames=1)
 Stream audio data in an alternate codec into the currently opened file. More...
 
unsigned getEncoded (Encoded address, unsigned frames=1)
 Get data from the streamed file in it's native encoding. More...
 
unsigned putEncoded (Encoded address, unsigned frames=1)
 Put data encoded in the native format of the stream file. More...
 
ssize_t getPacket (Encoded data)
 Get a packet of data from the file. More...
 
unsigned getMono (Linear buffer, unsigned frames=1)
 Get and automatically convert audio file data into mono linear audio samples. More...
 
unsigned getStereo (Linear buffer, unsigned frames=1)
 Get and automatically convert audio file data into stereo (two channel) linear audio samples. More...
 
unsigned putMono (Linear buffer, unsigned frames=1)
 Automatically convert and put mono linear audio data into the audio file. More...
 
unsigned putStereo (Linear buffer, unsigned frames=1)
 Automatically convert and put stereo linear audio data into the audio file. More...
 
unsigned bufMono (Linear buffer, unsigned count)
 Automatically convert and put arbitrary linear mono data into the audio file. More...
 
unsigned bufStereo (Linear buffer, unsigned count)
 Automatically convert and put arbitrary linear stereo data into the audio file. More...
 
AudioCodecgetCodec (void)
 Return the codec being used if there is one. More...
 
- Public Member Functions inherited from ost::AudioFile
 AudioFile (const char *name, unsigned long offset=0)
 Construct and open an existing audio file for read/write. More...
 
 AudioFile (const char *name, Info *info, unsigned long minimum=0)
 Create and open a new audio file for writing. More...
 
 AudioFile ()
 Construct an audio file without attaching to the filesystem. More...
 
virtual ~AudioFile ()
 
void open (const char *name, Mode mode=modeWrite, timeout_t framing=0)
 Open an audio file and associate it with this object. More...
 
void create (const char *name, Info *info, bool exclusive=false, timeout_t framing=0)
 Create a new audio file and associate it with this object. More...
 
time_t getAge (void)
 Returns age since last prior access. More...
 
size_t getSize (void)
 Get maximum size of frame buffer for data use. More...
 
void close (void)
 Close an object associated with an open file. More...
 
void clear (void)
 Clear the AudioFile structure. More...
 
unsigned getLinear (Linear buffer, unsigned request=0)
 Retrieve and convert content to linear encoded audio data from it's original form. More...
 
ssize_t putBuffer (Encoded buffer, size_t len=0)
 Insert bytes into the file from a memory buffer. More...
 
unsigned putLinear (Linear buffer, unsigned request=0)
 Convert and store content from linear encoded audio data to the format of the audio file. More...
 
Error getSamples (void *buffer, unsigned samples=0)
 Retrieve samples from the file into a memory buffer. More...
 
Error putSamples (void *buffer, unsigned samples=0)
 Insert samples into the file from a memory buffer. More...
 
Error skip (long number)
 Change the file position by skipping a specified number of audio samples of audio data. More...
 
Error setPosition (unsigned long samples=~0l)
 Seek a file position by sample count. More...
 
Error position (const char *timestamp)
 Seek a file position by timestamp. More...
 
void getPosition (char *timestamp, size_t size)
 Return the timestamp of the current absolute file position. More...
 
Error setLimit (unsigned long maximum=0l)
 Set the maximum file position for reading and writing of audio data by samples. More...
 
Error getInfo (Info *info)
 Copy the source description of the audio file into the specified object. More...
 
Error setMinimum (unsigned long minimum)
 Set minimum file size for a created file. More...
 
unsigned long getAbsolutePosition (void)
 Get the current file pointer in bytes relative to the start of the file. More...
 
unsigned long getPosition (void)
 Get the current file pointer in samples relative to the start of the sample buffer. More...
 
virtual bool isOpen (void)
 Test if the file is opened. More...
 
virtual bool hasPositioning (void)
 Return true if underlying derived class supports direct access to file positioning. More...
 
Encoding getEncoding (void)
 Return audio encoding format for this audio file. More...
 
Format getFormat (void)
 Return base file format of containing audio file. More...
 
unsigned getSampleRate (void)
 Get audio encoding sample rate, in samples per second, for this audio file. More...
 
char * getAnnotation (void)
 Get annotation extracted from header of containing file. More...
 
Error getError (void)
 Get last error code. More...
 
bool operator! (void)
 
bool isSigned (void)
 Return if the current content is signed or unsigned samples. More...
 
- Public Member Functions inherited from ost::AudioBase
 AudioBase ()
 Create audio base object with no info. More...
 
 AudioBase (Info *info)
 Create audio base object with audio source description. More...
 
virtual ~AudioBase ()
 Destroy an audio base object. More...
 
Encoding getEncoding (void)
 Generic get encoding. More...
 
unsigned getSampleRate (void)
 Generic sample rate. More...
 
ssize_t putNative (Encoded data, size_t size)
 Puts raw data and does native to refined endian swapping if needed based on encoding type and local machine endian. More...
 
ssize_t getPacket (Encoded data)
 Get's a packet of audio data. More...
 
ssize_t getNative (Encoded data, size_t size)
 Get raw data and assure is in native machine endian. More...
 

Protected Member Functions

unsigned bufAudio (Linear samples, unsigned count, unsigned size)
 
- Protected Member Functions inherited from ost::AudioFile
void initialize (void)
 
void getWaveFormat (int size)
 
void mp3info (mpeg_audio *mp3)
 
virtual bool afCreate (const char *path, bool exclusive=false)
 
virtual bool afOpen (const char *path, Mode m=modeWrite)
 
virtual bool afPeek (unsigned char *data, unsigned size)
 
AudioCodecgetCodec (void)
 
virtual int afRead (unsigned char *data, unsigned size)
 Read a given number of bytes from the file, starting from the current file pointer. More...
 
virtual int afWrite (unsigned char *data, unsigned size)
 Write a number of bytes into the file at the current file pointer. More...
 
virtual bool afSeek (unsigned long pos)
 Seek to the given position relative to the start of the file and set the file pointer. More...
 
virtual void afClose (void)
 Close the derived file handling system's file handle. More...
 
virtual char * getContinuation (void)
 This function is used to splice multiple audio files together into a single stream of continues audio data. More...
 
const char * getErrorStr (Error err)
 Return a human-readable error message given a numeric error code of type Audio::Error. More...
 
Error setError (Error err)
 
unsigned long getHeader (void)
 Get number of bytes in the file header. More...
 
unsigned short getShort (unsigned char *data)
 Convert binary 2 byte data stored in the order specified in the source description into a short variable. More...
 
void setShort (unsigned char *data, unsigned short value)
 Save a short as two byte binary data stored in the endian order specified in the source description. More...
 
unsigned long getLong (unsigned char *data)
 Convert binary 4 byte data stored in the order specified in the source description into a long variable. More...
 
void setLong (unsigned char *data, unsigned long value)
 Save a long as four byte binary data stored in the endian order specified in the source description. More...
 

Protected Attributes

AudioCodeccodec
 
Encoded framebuf
 
bool streamable
 
Linear bufferFrame
 
unsigned bufferPosition
 
unsigned bufferChannels
 
Linear encBuffer
 
Linear decBuffer
 
unsigned encSize
 
unsigned decSize
 
- Protected Attributes inherited from ost::AudioFile
char * pathname
 
Error error
 
unsigned long header
 
unsigned long minimum
 
unsigned long length
 
union {
   int   fd
 
   void *   handle
 
file
 
Mode mode
 
unsigned long iolimit
 
- Protected Attributes inherited from ost::AudioBase
Info info
 

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 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...
 
- Static Public Attributes inherited from ost::Audio
static const unsigned ndata
 

Detailed Description

AudioStream accesses AudioFile base class content as fixed frames of streaming linear samples.

If a codec must be assigned to perform conversion to/from linear data, AudioStream will handle conversion automatically. AudioStream will also convert between mono and stereo audio content. AudioStream uses linear samples in the native machine endian format and perform endian byte swapping as needed.

Author
David Sugar dyfet.nosp@m.@ost.nosp@m.el.co.nosp@m.m Audio Streaming with Linear Conversion

Constructor & Destructor Documentation

ost::AudioStream::AudioStream ( )

Create a new audiostream object.

ost::AudioStream::AudioStream ( const char *  name,
Mode  mode = modeRead,
timeout_t  framing = 0 
)

Create an audio stream object and open an existing audio file.

Parameters
nameof file to open.
modeof file access.
framingtime in milliseconds.
ost::AudioStream::AudioStream ( const char *  name,
Info info,
bool  exclusive = false,
timeout_t  framing = 0 
)

Create an audio stream object and a new audio file.

Parameters
nameof file to open.
infosource description for properties of new file.
exclusiveaccess if true.
framingtime in milliseconds.
virtual ost::AudioStream::~AudioStream ( )
virtual

Member Function Documentation

unsigned ost::AudioStream::bufAudio ( Linear  samples,
unsigned  count,
unsigned  size 
)
protected
unsigned ost::AudioStream::bufMono ( Linear  buffer,
unsigned  count 
)

Automatically convert and put arbitrary linear mono data into the audio file.

Convert to stereo and buffer incomplete frames as needed by the streaming file.

Parameters
bufferto save linear audio from.
countof linear audio to write.
Returns
number of linear audio samples written to file.
unsigned ost::AudioStream::bufStereo ( Linear  buffer,
unsigned  count 
)

Automatically convert and put arbitrary linear stereo data into the audio file.

Convert to mono and buffer incomplete frames as needed by the streaming file.

Parameters
bufferto save linear audio from.
countof linear audio to write.
Returns
number of linear audio samples written to file.
void ost::AudioStream::close ( void  )

Close the currently open audio file for streaming.

void ost::AudioStream::create ( const char *  name,
Info info,
bool  exclusive = false,
timeout_t  framing = 0 
)

Create a new audio file for streaming.

Parameters
nameof file to create.
infosource description for file properties.
exclusivetrue for exclusive access.
framingtiming in milliseconds.
void ost::AudioStream::flush ( void  )

flush any unsaved buffered data to disk.

ssize_t ost::AudioStream::getBuffer ( Encoded  data,
size_t  count 
)
virtual

Virtual for packet i/o intercept.

Returns
bytes read.
Parameters
dataencoding buffer.
countrequested.

Reimplemented from ost::AudioFile.

AudioCodec* ost::AudioStream::getCodec ( void  )
inline

Return the codec being used if there is one.

Returns
codec used.
unsigned ost::AudioStream::getCount ( void  )

Get the number of samples expected in a frame.

unsigned ost::AudioStream::getEncoded ( AudioCodec codec,
Encoded  address,
unsigned  frames = 1 
)

Stream audio data from the file and convert into an alternate encoding based on the codec supplied.

Parameters
codecto apply before saving.
addressof data to save.
framesto stream by the codec.
Returns
number of frames processed.
unsigned ost::AudioStream::getEncoded ( Encoded  address,
unsigned  frames = 1 
)

Get data from the streamed file in it's native encoding.

Parameters
addressto save encoded audio.
framesof audio to load.
Returns
number of frames read.
unsigned ost::AudioStream::getMono ( Linear  buffer,
unsigned  frames = 1 
)

Get and automatically convert audio file data into mono linear audio samples.

Parameters
bufferto save linear audio into.
framesof audio to read.
Returns
number of frames read from file.
ssize_t ost::AudioStream::getPacket ( Encoded  data)

Get a packet of data from the file.

This uses the codec to determine what a true packet boundry is.

Parameters
bufferto save encoded data.
Returns
number of bytes read as packet.
unsigned ost::AudioStream::getStereo ( Linear  buffer,
unsigned  frames = 1 
)

Get and automatically convert audio file data into stereo (two channel) linear audio samples.

Parameters
bufferto save linear audio into.
framesof audio to read.
Returns
number of frames read from file.
bool ost::AudioStream::isStreamable ( void  )

Check if the audio file may be streamed.

Files can be streamed if a codec is available or if they are linear.

Returns
true if streamable.
void ost::AudioStream::open ( const char *  name,
Mode  mode = modeRead,
timeout_t  framing = 0 
)

Open existing audio file for streaming.

Parameters
nameof file to open.
modeto use file.
framingtimer in milliseconds.
unsigned ost::AudioStream::putEncoded ( AudioCodec codec,
Encoded  address,
unsigned  frames = 1 
)

Stream audio data in an alternate codec into the currently opened file.

Parameters
codecto convert incoming data from.
addressof data to convert and stream.
framesof audio to stream.
Returns
number of frames processed.
unsigned ost::AudioStream::putEncoded ( Encoded  address,
unsigned  frames = 1 
)

Put data encoded in the native format of the stream file.

Parameters
addressto load encoded audio.
framesof audio to save.
Returns
number of frames written.
unsigned ost::AudioStream::putMono ( Linear  buffer,
unsigned  frames = 1 
)

Automatically convert and put mono linear audio data into the audio file.

Convert to stereo as needed by file format.

Parameters
bufferto save linear audio from.
framesof audio to write.
Returns
number of frames written to file.
unsigned ost::AudioStream::putStereo ( Linear  buffer,
unsigned  frames = 1 
)

Automatically convert and put stereo linear audio data into the audio file.

Convert to mono as needed by file format.

Parameters
bufferto save linear audio from.
framesof audio to write.
Returns
number of frames written to file.

Member Data Documentation

unsigned ost::AudioStream::bufferChannels
protected
Linear ost::AudioStream::bufferFrame
protected
unsigned ost::AudioStream::bufferPosition
protected
AudioCodec* ost::AudioStream::codec
protected
Linear ost::AudioStream::decBuffer
protected
unsigned ost::AudioStream::decSize
protected
Linear ost::AudioStream::encBuffer
protected
unsigned ost::AudioStream::encSize
protected
Encoded ost::AudioStream::framebuf
protected
bool ost::AudioStream::streamable
protected

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