VISR  0.11.1
Versatile Interactive Scene Renderer
portaudio_interface.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_LIBRRL_PORTAUDIO_INTERFACE_HPP_INCLUDED
4 #define VISR_LIBRRL_PORTAUDIO_INTERFACE_HPP_INCLUDED
5 
6 #include "audio_interface.hpp"
7 #include "export_symbols.hpp"
8 
9 #include <libvisr/constants.hpp>
10 
11 #include <memory>
12 #include <string>
13 #include <vector>
14 #include <map>
15 #include <iostream>
16 
17 namespace visr
18 {
19 namespace audiointerfaces
20 {
21 
22 class VISR_AUDIOINTERFACES_LIBRARY_SYMBOL
24 {
25 public:
29  struct Config
30  {
31  public:
33  {
34  public:
35  enum Type
36  {
45  float32Bit
46  };
47  };
49 
50  using TranslateSampleFormatMapTypeString = std::map<std::string, SampleFormat::Type >;
51  TranslateSampleFormatMapTypeString const cTranslateSampleFormatMapString = {
52  {"signedInt8Bit", SampleFormat::signedInt8Bit },
53  {"unsignedInt8Bit", SampleFormat::unsignedInt8Bit },
54  {"signedInt16Bit", SampleFormat::signedInt16Bit },
55  {"unsignedInt16Bit", SampleFormat::unsignedInt16Bit },
56  {"signedInt24Bit", SampleFormat::signedInt24Bit },
57  {"unsignedInt24Bit", SampleFormat::unsignedInt24Bit },
58  {"signedInt32Bit", SampleFormat::signedInt32Bit },
59  {"unsignedInt32Bit", SampleFormat::unsignedInt32Bit },
60  {"float32Bit", SampleFormat::float32Bit }
61  };
62 
64  {
65  auto const findIt = cTranslateSampleFormatMapString.find( format );
66  if( findIt == cTranslateSampleFormatMapString.end() ) {
67  throw std::invalid_argument( "The given sample format does not match a sample format in portaudio." );
68  }
69  return findIt->second;
70  }
71 
72  Config( std::string sampleFormat, bool interleaved, std::string mHostApi);
73 
76  std::size_t mPeriodSize;
77 
81  using SamplingRateType = std::size_t;
83 
90 
96  std::string mHostApi;
97 
98  };
99 
101 
102  explicit PortaudioInterface( Configuration const & baseConfig, std::string const & config);
103 
104  ~PortaudioInterface( );
105 
106 
107  /* virtual */ void start() override;
108 
109  /* virtual */ void stop() override;
110 
111  /*virtual*/ bool registerCallback( AudioCallback callback, void* userData ) override;
112 
113  /*virtual*/ bool unregisterCallback( AudioCallback audioCallback ) override;
114 
118  /*virtual*/ std::size_t numberOfCaptureChannels() const override;
119 
123  /*virtual*/ std::size_t numberOfPlaybackChannels() const override;
124 
128  /*virtual*/ std::size_t period() const override;
129 
133  /*virtual*/ std::size_t samplingFrequency() const override;
134 
135 private:
139  class Impl;
143  std::unique_ptr<Impl> mImpl;
144 };
145 
146 } // namespace rrl
147 } // namespace visr
148 
149 #endif // #ifndef VISR_LIBRRL_PORTAUDIO_INTERFACE_HPP_INCLUDED
Definition: portaudio_interface.hpp:29
std::map< std::string, SampleFormat::Type > TranslateSampleFormatMapTypeString
Definition: portaudio_interface.hpp:50
std::string mHostApi
Definition: portaudio_interface.hpp:96
SampleFormat::Type translateToSampleFormat(std::string format)
Definition: portaudio_interface.hpp:63
std::size_t mNumberOfPlaybackChannels
Definition: portaudio_interface.hpp:75
Definition: audio_interface.hpp:19
Definition: portaudio_interface.hpp:22
std::size_t SamplingRateType
Definition: portaudio_interface.hpp:81
Definition: options.cpp:10
bool mInterleaved
Definition: portaudio_interface.hpp:89
void(*)(void *, ExternalSampleType const *const *, ExternalSampleType *const *, bool &) AudioCallback
Definition: audio_interface.hpp:75
SamplingRateType mSampleRate
Definition: portaudio_interface.hpp:82
std::size_t mPeriodSize
Definition: portaudio_interface.hpp:76
std::size_t mNumberOfCaptureChannels
Definition: portaudio_interface.hpp:74
SampleFormat::Type mSampleFormat
Definition: portaudio_interface.hpp:48
Definition: portaudio_interface.cpp:93