AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness > Class Template Reference

Used as a template parameter for AudioData::Pointer. More...

Inherits InterleavingType.

Public Member Functions

 Pointer (typename Constness::VoidType *sourceData) noexcept
 Creates a non-interleaved pointer from some raw data in the appropriate format. More...
 
 Pointer (typename Constness::VoidType *sourceData, int numInterleaved) noexcept
 Creates a pointer from some raw data in the appropriate format with the specified number of interleaved channels. More...
 
 Pointer (const Pointer &other) noexcept
 Creates a copy of another pointer. More...
 
Pointeroperator= (const Pointer &other) noexcept
 
float getAsFloat () const noexcept
 Returns the value of the first sample as a floating point value. More...
 
void setAsFloat (float newValue) noexcept
 Sets the value of the first sample as a floating point value. More...
 
int32 getAsInt32 () const noexcept
 Returns the value of the first sample as a 32-bit integer. More...
 
void setAsInt32 (int32 newValue) noexcept
 Sets the value of the first sample as a 32-bit integer. More...
 
Pointeroperator++ () noexcept
 Moves the pointer along to the next sample. More...
 
Pointeroperator-- () noexcept
 Moves the pointer back to the previous sample. More...
 
Pointeroperator+= (int samplesToJump) noexcept
 Adds a number of samples to the pointer's position. More...
 
void convertSamples (Pointer source, int numSamples) const noexcept
 Writes a stream of samples into this pointer from another pointer. More...
 
template<class OtherPointerType >
void convertSamples (OtherPointerType source, int numSamples) const noexcept
 Writes a stream of samples into this pointer from another pointer. More...
 
void clearSamples (int numSamples) const noexcept
 Sets a number of samples to zero. More...
 
Range< float > findMinAndMax (size_t numSamples) const noexcept
 Scans a block of data, returning the lowest and highest levels as floats. More...
 
void findMinAndMax (size_t numSamples, float &minValue, float &maxValue) const noexcept
 Scans a block of data, returning the lowest and highest levels as floats. More...
 
int getNumInterleavedChannels () const noexcept
 Returns the number of interleaved channels in the format. More...
 
int getNumBytesBetweenSamples () const noexcept
 Returns the number of bytes between the start address of each sample. More...
 
const void * getRawData () const noexcept
 Returns a pointer to the underlying data. More...
 

Static Public Member Functions

static bool isFloatingPoint () noexcept
 Returns true if the pointer is using a floating-point format. More...
 
static bool isBigEndian () noexcept
 Returns true if the format is big-endian. More...
 
static int getBytesPerSample () noexcept
 Returns the number of bytes in each sample (ignoring the number of interleaved channels). More...
 
static int get32BitResolution () noexcept
 Returns the accuracy of this format when represented as a 32-bit integer. More...
 

Detailed Description

template<typename SampleFormat, typename Endianness, typename InterleavingType, typename Constness>
class AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >

Used as a template parameter for AudioData::Pointer.

Indicates that the samples can only be used for const data.. A pointer to a block of audio data with a particular encoding.

This object can be used to read and write from blocks of encoded audio samples. To create one, you specify the audio format as a series of template parameters, e.g.

// this creates a pointer for reading from a const array of 16-bit little-endian packed samples.
AudioData::Pointer <AudioData::Int16,
AudioData::LittleEndian,
AudioData::NonInterleaved,
AudioData::Const> pointer (someRawAudioData);
// These methods read the sample that is being pointed to
float firstSampleAsFloat = pointer.getAsFloat();
int32 firstSampleAsInt = pointer.getAsInt32();
++pointer; // moves the pointer to the next sample.
pointer += 3; // skips the next 3 samples.

The convertSamples() method lets you copy a range of samples from one format to another, automatically converting its format.

See also
AudioData::Converter

Constructor & Destructor Documentation

◆ Pointer() [1/3]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::Pointer ( typename Constness::VoidType *  sourceData)
noexcept

Creates a non-interleaved pointer from some raw data in the appropriate format.

This constructor is only used if you've specified the AudioData::NonInterleaved option - for interleaved formats, use the constructor that also takes a number of channels.

◆ Pointer() [2/3]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::Pointer ( typename Constness::VoidType *  sourceData,
int  numInterleaved 
)
noexcept

Creates a pointer from some raw data in the appropriate format with the specified number of interleaved channels.

For non-interleaved data, use the other constructor.

◆ Pointer() [3/3]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::Pointer ( const Pointer< SampleFormat, Endianness, InterleavingType, Constness > &  other)
noexcept

Creates a copy of another pointer.

Member Function Documentation

◆ operator=()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
Pointer& AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::operator= ( const Pointer< SampleFormat, Endianness, InterleavingType, Constness > &  other)
noexcept

◆ getAsFloat()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
float AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::getAsFloat ( ) const
noexcept

Returns the value of the first sample as a floating point value.

The value will be in the range -1.0 to 1.0 for integer formats. For floating point formats, the value could be outside that range, although -1 to 1 is the standard range.

◆ setAsFloat()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
void AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::setAsFloat ( float  newValue)
noexcept

Sets the value of the first sample as a floating point value.

(This method can only be used if the AudioData::NonConst option was used). The value should be in the range -1.0 to 1.0 - for integer formats, values outside that range will be clipped. For floating point formats, any value passed in here will be written directly, although -1 to 1 is the standard range.

◆ getAsInt32()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
int32 AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::getAsInt32 ( ) const
noexcept

Returns the value of the first sample as a 32-bit integer.

The value returned will be in the range 0x80000000 to 0x7fffffff, and shorter values will be shifted to fill this range (e.g. if you're reading from 24-bit data, the values will be shifted up by 8 bits when returned here). If the source data is floating point, values beyond -1.0 to 1.0 will be clipped so that -1.0 maps onto -0x7fffffff and 1.0 maps to 0x7fffffff.

◆ setAsInt32()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
void AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::setAsInt32 ( int32  newValue)
noexcept

Sets the value of the first sample as a 32-bit integer.

This will be mapped to the range of the format that is being written - see getAsInt32().

◆ operator++()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
Pointer& AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::operator++ ( )
noexcept

Moves the pointer along to the next sample.

◆ operator--()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
Pointer& AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::operator-- ( )
noexcept

Moves the pointer back to the previous sample.

◆ operator+=()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
Pointer& AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::operator+= ( int  samplesToJump)
noexcept

Adds a number of samples to the pointer's position.

◆ convertSamples() [1/2]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
void AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::convertSamples ( Pointer< SampleFormat, Endianness, InterleavingType, Constness >  source,
int  numSamples 
) const
noexcept

Writes a stream of samples into this pointer from another pointer.

This will copy the specified number of samples, converting between formats appropriately.

Referenced by AudioFormatReader::ReadHelper< DestSampleType, SourceSampleType, SourceEndianness >::read(), and AudioFormatWriter::WriteHelper< DestSampleType, SourceSampleType, DestEndianness >::write().

◆ convertSamples() [2/2]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
template<class OtherPointerType >
void AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::convertSamples ( OtherPointerType  source,
int  numSamples 
) const
noexcept

Writes a stream of samples into this pointer from another pointer.

This will copy the specified number of samples, converting between formats appropriately.

◆ clearSamples()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
void AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::clearSamples ( int  numSamples) const
noexcept

◆ findMinAndMax() [1/2]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
Range<float> AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::findMinAndMax ( size_t  numSamples) const
noexcept

Scans a block of data, returning the lowest and highest levels as floats.

Referenced by MemoryMappedAudioFormatReader::scanMinAndMaxInterleaved().

◆ findMinAndMax() [2/2]

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
void AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::findMinAndMax ( size_t  numSamples,
float &  minValue,
float &  maxValue 
) const
noexcept

Scans a block of data, returning the lowest and highest levels as floats.

References findMinAndMax(), Range< ValueType >::getEnd(), and Range< ValueType >::getStart().

◆ isFloatingPoint()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
static bool AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::isFloatingPoint ( )
staticnoexcept

Returns true if the pointer is using a floating-point format.

◆ isBigEndian()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
static bool AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::isBigEndian ( )
staticnoexcept

Returns true if the format is big-endian.

◆ getBytesPerSample()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
static int AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::getBytesPerSample ( )
staticnoexcept

Returns the number of bytes in each sample (ignoring the number of interleaved channels).

◆ getNumInterleavedChannels()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
int AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::getNumInterleavedChannels ( ) const
noexcept

Returns the number of interleaved channels in the format.

◆ getNumBytesBetweenSamples()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
int AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::getNumBytesBetweenSamples ( ) const
noexcept

Returns the number of bytes between the start address of each sample.

◆ get32BitResolution()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
static int AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::get32BitResolution ( )
staticnoexcept

Returns the accuracy of this format when represented as a 32-bit integer.

This is the smallest number above 0 that can be represented in the sample format, converted to a 32-bit range. E,g. if the format is 8-bit, its resolution is 0x01000000; if the format is 24-bit, its resolution is 0x100.

◆ getRawData()

template<typename SampleFormat , typename Endianness , typename InterleavingType , typename Constness >
const void* AudioData::Pointer< SampleFormat, Endianness, InterleavingType, Constness >::getRawData ( ) const
noexcept

Returns a pointer to the underlying data.


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