OpenDAFF C++ API  v1.7
Directional Audio File Format
Public Member Functions | List of all members
DAFFContent Class Referenceabstract

Common content interface. More...

#include <DAFFContent.h>

Inheritance diagram for DAFFContent:
DAFFContentDFT DAFFContentIR DAFFContentMPS DAFFContentMS DAFFContentPS DAFFContentDFTRealization DAFFReaderImpl DAFFReaderImpl DAFFReaderImpl DAFFReaderImpl DAFFReaderImpl

Public Member Functions

virtual ~DAFFContent ()
 
virtual DAFFReadergetParent () const =0
 Returns the parent reader. More...
 
virtual const DAFFPropertiesgetProperties () const =0
 Returns the properties. More...
 
virtual const DAFFMetadatagetRecordMetadata (int iRecordIndex) const =0
 Returns the metadata of a record. More...
 
virtual int getRecordCoords (int iRecordIndex, int iView, float &fAngle1Deg, float &fAngle2Deg) const =0
 Determines the spherical coordinates of a record (grid point on spherical regular grid) More...
 
virtual void getNearestNeighbour (int iView, float fAngle1Deg, float fAngle2Deg, int &iRecordIndex) const =0
 Determine the nearest neighbour record and return its index. More...
 
virtual void getNearestNeighbour (int iView, float fAngle1Deg, float fAngle2Deg, int &iRecordIndex, bool &bOutOfBounds) const =0
 Determine the nearest neighbour record and return its index (with boundary validatsion) More...
 
virtual void getCell (int iView, float fAngle1Deg, float fAngle2Deg, DAFFQuad &qIndices) const =0
 Determines the cell of a given direction on the sphere grid and delivers its surrounding record indices. More...
 
virtual void transformAnglesD2O (float fAlphaDeg, float fBetaDeg, float &fAzimuthDeg, float &fElevationDeg) const =0
 Transforms data spherical coordinates into object spherical coordinates. More...
 
virtual void transformAnglesO2D (float fAzimuthDeg, float fElevationDeg, float &fAlphaDeg, float &fBetaDeg) const =0
 Transforms object spherical coordinates into data spherical coordinates. More...
 

Detailed Description

Common content interface.

This purely abstract class defines the common interface for DAFF content. Special (non-common) attributes of content are defined in subinterfaces (e.g. DAFFContentIR or DAFFContentMS).

The interface covers operations on the sphere grid, like nearest neighbour search, cell determination, etc. as well as spherical coordinate transformations.

See also
DAFFContent
DAFFContentDFT
DAFFContentIR
DAFFContentMPS
DAFFContentMS
DAFFContentPS

Definition at line 40 of file DAFFContent.h.

Constructor & Destructor Documentation

virtual DAFFContent::~DAFFContent ( )
inlinevirtual

Definition at line 43 of file DAFFContent.h.

Member Function Documentation

virtual void DAFFContent::getCell ( int  iView,
float  fAngle1Deg,
float  fAngle2Deg,
DAFFQuad qIndices 
) const
pure virtual

Determines the cell of a given direction on the sphere grid and delivers its surrounding record indices.

This method takes a direction in form of an angular pair and searches for the valid surrounding grid points which are related to a record. In a full covered sphere, this means a rectangular cell at any point except of the area near the poles, where we obtain triangular cells. Nevertheless, the method will return four valid record indices in any given case. It makes heavy use of the getNearestNeighbour method (which does not make it that fast) and is invented for custom interpolation purposes.

Sequence convention

Imagine you are sitting at the origin of the sphere and you point in a random direction. What you prickle will be a cell similar to this one:

(3)--—(2) | | | | ^ (4)--—(1) | (direction beta increases)

       <--

(direction alpha increases)

The first index will always be the lower grid point of both given angles, the second is the first point increased by the beta resolution at beta angle. The third point is represented by both the increase of the alpha and beta angle each with their resolution steps. The fourth point is the first point only with an increase by alpha resolution of the alpha angle.

Let's discuss an example: Requested direction: alpha = 2°, beta = 2° object view coordinate system (front direction would be 0°,0°) Resolution: alpha = 10°, beta = 5° Index1 -> alpha = 0°, beta = 0° (object view) Index2 -> alpha = 0°, beta = 5° (object view) Index3 -> alpha = 10°, beta = 5° (object view) Index4 -> alpha = 10°, beta = 0° (object view)

Special cases

  • if a pole is directly hitten and the full sphere is covered, it will return 4 times the pole's record index.
  • if the requested direction is near a pole or out of boundaries, the method will simply search for the nearest neighbouring directions for each of the four cell points as if the cell would exists on a regular sphere grid. This will result in the return of at least two indices indicating the same record. You most certainly will discover something like that near north pole

    (3,2) / \ / \ (4)-—(1)

    or that near south pole
    

(3)-—(2) \ / \ / (4,1)

or, if out of bounds, something similar to

(3,4)--—(1,2)

or

(3,2)
  |
  |
(4,1)

Anyway, using getCell out of the boundaries does not make that much sense. In case you run
out of bounds onsider using getNearestNeighbour with boundary flag instead.
Parameters
[in]iViewView, one of DAFF_VIEWS
[in]fAngle1DegAngle of first value in degree
[in]fAngle2DegAngle of first value in degree
[out]qIndicesQuad struct with index values

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual void DAFFContent::getNearestNeighbour ( int  iView,
float  fAngle1Deg,
float  fAngle2Deg,
int &  iRecordIndex 
) const
pure virtual

Determine the nearest neighbour record and return its index.

This method takes a direction in form of an angular pair and searches the grid for the nearest neighbouring record (grid point). The distance measure is the angle on the great circle (spherical law of cosines).

Note: The method always returns a valid record index, even if the angular pair points outside the spherical grid (e.g. consider boundaries). Thereby we maintain a consistent behaviour. You can check if the point was within the boundaries using the bOutOfBounds argument.

Parameters
[in]iViewThe view that should be used for the given pair of angles, one of DAFF_VIEWS
[in]fAngle1DegFirst angle (Phi or Alpha, depending on view)
[in]fAngle2DegSecond angle (Theta or Beta, depending on view)
[out]iRecordIndexIndex that corresponds to this pair of angles

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual void DAFFContent::getNearestNeighbour ( int  iView,
float  fAngle1Deg,
float  fAngle2Deg,
int &  iRecordIndex,
bool &  bOutOfBounds 
) const
pure virtual

Determine the nearest neighbour record and return its index (with boundary validatsion)

This method takes a direction in form of an angular pair and searches the grid for the nearest neighbouring record (grid point). The distance measure is the angle on the great circle (spherical law of cosines).

Note: The method always returns a valid record index, even if the angular pair points outside the spherical grid (e.g. consider boundaries). Thereby we maintain a consistent behaviour. You can check if the point was within the boundaries using the bOutOfBounds argument.

Parameters
[in]iViewThe view that should be used for the given pair of angles, one of DAFF_VIEWS
[in]fAngle1DegFirst angle (Phi or Alpha, depending on view)
[in]fAngle2DegSecond angle (Theta or Beta, depending on view)
[out]iRecordIndexIndex that corresponds to this pair of angles
[out]bOutOfBoundsIndicator if requested direction was out of bounds (true in this case)

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual DAFFReader* DAFFContent::getParent ( ) const
pure virtual

Returns the parent reader.

Implemented in DAFFReaderImpl, and DAFFContentDFTRealization.

virtual const DAFFProperties* DAFFContent::getProperties ( ) const
pure virtual

Returns the properties.

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual int DAFFContent::getRecordCoords ( int  iRecordIndex,
int  iView,
float &  fAngle1Deg,
float &  fAngle2Deg 
) const
pure virtual

Determines the spherical coordinates of a record (grid point on spherical regular grid)

Parameters
[in]iRecordIndexThe index of the record on regular spherical grid
[in]iViewThe view that should be used for the given pair of angles, one of DAFF_VIEWS
[out]fAngle1DegFirst angle that corresponds to this index (Phi or Alpha, depending on view)
[out]fAngle2DegSecond angle that corresponds to this index (Theta or Beta, depending on view)
Returns
DAFF_NO_ERROR on success, another DAFF_ERROR otherwise

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual const DAFFMetadata* DAFFContent::getRecordMetadata ( int  iRecordIndex) const
pure virtual

Returns the metadata of a record.

Note: The method always returns a valid DAFFMetadata, even if there is none specified in the file. Thereby we maintain a consistent behaviour. Metadata may therefore be empty.

Parameters
[in]iRecordIndexThe index of the record on regular spherical grid
Returns
The const pointer to metadata

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual void DAFFContent::transformAnglesD2O ( float  fAlphaDeg,
float  fBetaDeg,
float &  fAzimuthDeg,
float &  fElevationDeg 
) const
pure virtual

Transforms data spherical coordinates into object spherical coordinates.

This methods takes an angular pair (alpha, beta) in data spherical coordinates (DSC) and transforms it into the equivalent direction expressed in object spherical coordinates (OSC) as an angular pair (azimuth, elevation).

Parameters
[in]fAlphaDegAlpha angle in the DSC [degrees] (input)
[in]fBetaDegBeta angle in the DSC [degrees] (input)
[out]fAzimuthDegAzimuthal angle in the OSC [degrees] (output)
[out]fElevationDegElevation angle in the OSC [degrees] (output)

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.

virtual void DAFFContent::transformAnglesO2D ( float  fAzimuthDeg,
float  fElevationDeg,
float &  fAlphaDeg,
float &  fBetaDeg 
) const
pure virtual

Transforms object spherical coordinates into data spherical coordinates.

This methods takes an angular pair (alpha, beta) in object spherical coordinates (OSC) and transforms it into the equivalent direction expressed in data spherical coordinates (DSC) as an angular pair (azimuth, elevation).

Parameters
[in]fAzimuthDegAzimuthal angle in the OSC [degrees] (input)
[in]fElevationDegElevation angle in the OSC [degrees] (input)
[out]fAlphaDegAlpha angle in the DSC [degrees] (output)
[out]fBetaDegBeta angle in the DSC [degrees] (output)

Implemented in DAFFContentDFTRealization, and DAFFReaderImpl.


The documentation for this class was generated from the following file:
OpenDAFF is a project from the Institute of Technical Acoustics, RWTH Aachen University, Germany.