Allolib  1.0
C++ Components For Interactive Multimedia
al_StereoPanner.hpp
1 #ifndef INCLUDE_AL_PANNING_STEREO
2 #define INCLUDE_AL_PANNING_STEREO
3 
4 #include <cstring>
5 #include <memory>
6 
7 #include "al/math/al_Constants.hpp"
8 #include "al/math/al_Vec.hpp"
9 #include "al/sound/al_Spatializer.hpp"
10 #include "al/sound/al_Speaker.hpp"
11 #include "al/spatial/al_DistAtten.hpp"
12 #include "al/spatial/al_Pose.hpp"
13 
14 namespace al {
15 
20 class StereoPanner : public Spatializer {
21  public:
22  StereoPanner(Speakers& sl) : Spatializer(sl), numSpeakers(0) {
23  numSpeakers = mSpeakers.size();
24  if (numSpeakers != 2) {
25  std::cout << "Stereo Panner Requires exactly 2 speakers (" << numSpeakers
26  << " used). First two will be used!" << std::endl;
27  }
28  }
29 
31  virtual void renderSample(AudioIOData& io, const Pose& listeningPose,
32  const float& sample,
33  const unsigned int& frameIndex) override;
34 
36  virtual void renderBuffer(AudioIOData& io, const Pose& listeningPose,
37  const float* samples,
38  const unsigned int& numFrames) override;
39 
40  private:
41  size_t numSpeakers;
42 
43  void equalPowerPan(const Vec3d& relPos, float& gainL, float& gainR);
44 };
45 
46 } // namespace al
47 
48 #endif
A local coordinate frame.
Definition: al_Pose.hpp:63
virtual void numFrames(unsigned int v)
Set number of frames.
Spatializer(const Speakers &sl)
The StereoPanner class.
virtual void renderBuffer(AudioIOData &io, const Pose &listeningPose, const float *samples, const unsigned int &numFrames) override
Per Buffer Processing.
virtual void renderSample(AudioIOData &io, const Pose &listeningPose, const float &sample, const unsigned int &frameIndex) override
Per Sample Processing.
Definition: al_App.hpp:23
std::vector< Speaker > Speakers
A set of speakers.
Definition: al_Speaker.hpp:101