1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
/*############################################################################*/
/*# #*/
/*# Ambisonic C++ Library #*/
/*# CAmbisonicEncoderDist - Ambisonic Encoder with distance #*/
/*# Copyright © 2007 Aristotel Digenis #*/
/*# #*/
/*# Filename: AmbisonicEncoderDist.h #*/
/*# Version: 0.1 #*/
/*# Date: 19/05/2007 #*/
/*# Author(s): Aristotel Digenis #*/
/*# Licence: MIT #*/
/*# #*/
/*############################################################################*/
#ifndef _AMBISONIC_ENCODER_DIST_H
#define _AMBISONIC_ENCODER_DIST_H
#include "AmbisonicEncoder.h"
const unsigned knSpeedOfSound = 344;
const unsigned knMaxDistance = 150;
/// Ambisonic encoder with distance cues.
/** This is similar to a normal the ambisonic encoder, but takes the source's
distance into account, delaying the signal, adjusting its gain, and
implementing "W-Panning"(interior effect). If distance is not an issue,
then use CAmbisonicEncoder which is more efficient. */
class CAmbisonicEncoderDist : public CAmbisonicEncoder
{
public:
CAmbisonicEncoderDist();
~CAmbisonicEncoderDist();
/**
Re-create the object for the given configuration. Previous data is
lost. Returns true if successful.
*/
virtual bool Configure(unsigned nOrder, bool b3D, unsigned nSampleRate);
/**
Resets members such as delay lines.
*/
virtual void Reset();
/**
Refreshes coefficients.
*/
virtual void Refresh();
/**
Encode mono stream to B-Format.
*/
void Process(float* pfSrc, unsigned nSamples, CBFormat* pBFDst);
/**
Set the radius of the intended playback speaker setup which is used for
the interior effect (W-Panning).
*/
void SetRoomRadius(float fRoomRadius);
/**
Returns the radius of the intended playback speaker setup, which is
used for the interior effect (W-Panning).
*/
float GetRoomRadius();
protected:
unsigned m_nSampleRate;
float m_fDelay;
int m_nDelay;
unsigned m_nDelayBufferLength;
float* m_pfDelayBuffer;
int m_nIn;
int m_nOutA;
int m_nOutB;
float m_fRoomRadius;
float m_fInteriorGain;
float m_fExteriorGain;
};
#endif // _AMBISONIC_ENCODER_DIST_H
|