Line data Source code
1 : /** 2 : * \file DryWetFilter.hxx 3 : */ 4 : 5 : #include "DryWetFilter.h" 6 : #include <ATK/Core/TypeTraits.h> 7 : 8 : #include <cstdint> 9 : 10 : namespace ATK 11 : { 12 : template<typename DataType_> 13 6 : DryWetFilter<DataType_>::DryWetFilter(gsl::index nb_channels) 14 6 : :Parent(2 * nb_channels, nb_channels) 15 : { 16 6 : } 17 : 18 : template<typename DataType_> 19 5 : void DryWetFilter<DataType_>::set_dry(double dry) 20 : { 21 5 : if(dry < 0 || dry > 1) 22 : { 23 2 : throw std::out_of_range("Dry/wet must be a value between 0 and 1"); 24 : } 25 : 26 3 : this->dry = dry; 27 3 : } 28 : 29 : template<typename DataType_> 30 1 : double DryWetFilter<DataType_>::get_dry() const 31 : { 32 1 : return dry; 33 : } 34 : 35 : template<typename DataType_> 36 3 : void DryWetFilter<DataType_>::process_impl(gsl::index size) const 37 : { 38 3 : assert(nb_input_ports == 2 * nb_output_ports); 39 : 40 6 : for(gsl::index channel = 0; channel < nb_output_ports; ++channel) 41 : { 42 3 : const DataType* ATK_RESTRICT input0 = converted_inputs[2 * channel]; 43 3 : const DataType* ATK_RESTRICT input1 = converted_inputs[2 * channel + 1]; 44 3 : DataType* ATK_RESTRICT output = outputs[channel]; 45 3075 : for(gsl::index i = 0; i < size; ++i) 46 : { 47 3072 : output[i] = static_cast<DataType>(input0[i] * static_cast<typename TypeTraits<DataType>::Scalar>(dry) + input1[i] * static_cast<typename TypeTraits<DataType>::Scalar>(1 - dry)); 48 : } 49 : } 50 3 : } 51 : }