VISR  0.11.1
Versatile Interactive Scene Renderer
audio_output.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_AUDIO_OUTPUT_HPP_INCLUDED
4 #define VISR_AUDIO_OUTPUT_HPP_INCLUDED
5 
6 #include "audio_port_base.hpp"
7 
8 #include "constants.hpp" // for the default SampleType
9 #include "export_symbols.hpp"
10 
11 #include <stdexcept>
12 
13 namespace visr
14 {
15 
20 class VISR_CORE_LIBRARY_SYMBOL AudioOutputBase: public AudioPortBase
21 {
22 public:
30  /*VISR_CORE_LIBRARY_SYMBOL*/ AudioOutputBase( char const * name, Component & container, AudioSampleType::Id typeId, std::size_t width );
31 
36  /*VISR_CORE_LIBRARY_SYMBOL*/ virtual ~AudioOutputBase() override;
37 };
38 
43 template<typename DataType>
45 {
46 public:
55  AudioOutputT( char const * name, Component & container, std::size_t width = 0 )
56  : AudioOutputBase( name, container, AudioSampleType::TypeToId<DataType>::id, width )
57  {
58  }
59 
63  virtual ~AudioOutputT() override = default;
64 
70  DataType * data() { return static_cast<DataType *>(AudioPortBase::basePointer()); }
71 
77  DataType * at( std::size_t idx )
78  {
79  if( idx >= width() )
80  {
81  throw std::out_of_range( "AudioOutput::at() exceeds port width." );
82  }
83  return operator[]( idx );
84  }
85 
90  DataType * operator[]( std::size_t idx )
91  {
92  return data() + idx * channelStrideSamples();
93  }
94 
102  template< class OutputIterator >
103  OutputIterator getChannelPointers( OutputIterator outIt )
104  {
105  std::size_t const wd( width() );
106  std::size_t const stride( channelStrideSamples() );
107  DataType * ptr( data() );
108  for( std::size_t chIdx( 0 ); chIdx < wd; ++chIdx, ptr += stride, ++outIt )
109  {
110  *outIt = ptr;
111  }
112  return outIt;
113  }
114  };
115 
120 
121 } // namespace visr
122 
123 #endif // #ifndef VISR_AUDIO_OUTPUT_HPP_INCLUDED
AudioOutputT(char const *name, Component &container, std::size_t width=0)
Definition: audio_output.hpp:55
Definition: audio_port_base.hpp:28
DataType * data()
Definition: audio_output.hpp:70
Definition: audio_output.hpp:44
Definition: component.hpp:38
Definition: options.cpp:10
Id
Definition: audio_sample_type.hpp:35
Definition: audio_output.hpp:20
DataType * operator[](std::size_t idx)
Definition: audio_output.hpp:90
DataType * at(std::size_t idx)
Definition: audio_output.hpp:77
OutputIterator getChannelPointers(OutputIterator outIt)
Definition: audio_output.hpp:103
void * basePointer()
Definition: audio_port_base.cpp:59