VISR  0.11.8
Versatile Interactive Scene Renderer
audio_input.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_AUDIO_INPUT_HPP_INCLUDED
4 #define VISR_AUDIO_INPUT_HPP_INCLUDED
5 
6 #include "audio_port_base.hpp"
7 
8 #include "constants.hpp"
9 #include "export_symbols.hpp"
10 
11 #include <stdexcept>
12 
13 namespace visr
14 {
15 
22 class VISR_CORE_LIBRARY_SYMBOL AudioInputBase: public AudioPortBase
23 {
24 public:
32  /*VISR_CORE_LIBRARY_SYMBOL*/ AudioInputBase( char const * name, Component & container, AudioSampleType::Id typeId, std::size_t width );
37  /*VISR_CORE_LIBRARY_SYMBOL*/ virtual ~AudioInputBase() override;
38 };
39 
44 template<typename DataType>
46 {
47 public:
54  AudioInputT( char const * name, Component & container, std::size_t width = 0 )
55  : AudioInputBase( name, container, AudioSampleType::TypeToId<DataType>::id, width )
56  {}
57 
62  virtual ~AudioInputT() override = default;
63 
68  DataType const * data() const { return static_cast<DataType const * >(AudioPortBase::basePointer()); }
69 
75  DataType const * at( std::size_t idx ) const
76  {
77  if( idx >= width() )
78  {
79  throw std::out_of_range( "AudioInput::at() exceeds port width." );
80  }
81  return operator[](idx);
82  }
83 
89  DataType const * operator[]( std::size_t idx ) const
90  {
91  return data() + idx * channelStrideSamples();
92  }
93 
101  template< class OutputIterator >
102  OutputIterator getChannelPointers( OutputIterator outIt )
103  {
104  std::size_t const wd( width() );
105  std::size_t const stride( channelStrideSamples() );
106  DataType const * ptr( data() );
107  for( std::size_t chIdx(0); chIdx < wd; ++chIdx, ptr += stride, ++outIt )
108  {
109  *outIt = ptr;
110  }
111  return outIt;
112  }
113 };
114 
119 
120 } // namespace visr
121 
122 #endif // #ifndef VISR_AUDIO_INPUT_HPP_INCLUDED
DataType const * at(std::size_t idx) const
Definition: audio_input.hpp:75
DataType const * operator[](std::size_t idx) const
Definition: audio_input.hpp:89
Definition: audio_port_base.hpp:28
DataType const * data() const
Definition: audio_input.hpp:68
AudioInputT(char const *name, Component &container, std::size_t width=0)
Definition: audio_input.hpp:54
OutputIterator getChannelPointers(OutputIterator outIt)
Definition: audio_input.hpp:102
Definition: component.hpp:38
Definition: options.cpp:10
Id
Definition: audio_sample_type.hpp:35
Definition: audio_input.hpp:22
Definition: audio_input.hpp:45
void * basePointer()
Definition: audio_port_base.cpp:59