void Divider_::setLeft(Generator arg){ if (arg.isStereoOutput() && !isStereoOutput()) { setIsStereoOutput(true); } left_ = arg; }
void Subtractor_::setRight(Generator arg){ if (arg.isStereoOutput() && !isStereoOutput()) { setIsStereoOutput(true); } right_ = arg; }
void BasicDelay_::setInput(Generator input) { Effect_::setInput(input); setIsStereoInput(input.isStereoOutput()); setIsStereoOutput(input.isStereoOutput()); // can safely resize as TonicFrames subclass - calling functions account for channel offset delayLine_.resize(delayLine_.frames(), input.isStereoOutput() ? 2 : 1, 0); }
StereoDelay_::StereoDelay_(){ setIsStereoOutput(true); setIsStereoInput(true); delayTimeFrames_[TONIC_LEFT].resize(kSynthesisBlockSize, 1, 0); delayTimeFrames_[TONIC_RIGHT].resize(kSynthesisBlockSize, 1, 0); fbkFrames_.resize(kSynthesisBlockSize, 1, 0); setDryLevelGen(FixedValue(0.5)); setWetLevelGen(FixedValue(0.5)); }
Reverb_::Reverb_(){ setIsStereoOutput(true); // Default to 50% wet setDryLevelGen(FixedValue(0.5f)); setWetLevelGen(FixedValue(0.5f)); workspaceFrames_[0].resize(kSynthesisBlockSize, 1, 0); workspaceFrames_[1].resize(kSynthesisBlockSize, 1, 0); preOutputFrames_[0].resize(kSynthesisBlockSize, 1, 0); preOutputFrames_[1].resize(kSynthesisBlockSize, 1, 0); preDelayLine_.initialize(0.1f, 1); reflectDelayLine_.initialize(0.1f, 1); inputLPF_.setIsStereoInput(false); inputLPF_.setIsStereoInput(false); inputLPF_.Q(0.707); inputHPF_.Q(0.707); preDelayTimeCtrlGen_ = ControlValue(0.01f); inputFiltBypasCtrlGen_ = ControlValue(false); densityCtrlGen_ = ControlValue(0.5); roomShapeCtrlGen_ = ControlValue(0.5); roomSizeCtrlGen_ = ControlValue(0.5); decayTimeCtrlGen_ = ControlValue(1.0f); stereoWidthCtrlGen_ = ControlValue(0.5f); setInputLPFCutoffCtrlGen(ControlValue(10000.0f)); setInputHPFCutoffCtrlGen(ControlValue(20.f)); for (unsigned int i=0; i<TONIC_REVERB_N_COMBS; i++){ ControlValue delayL = ControlValue(0.01f); ControlValue delayR = ControlValue(0.01f); ControlValue scaleL = ControlValue(0.5); ControlValue scaleR = ControlValue(0.5); combFilterDelayTimes_[TONIC_LEFT].push_back(delayL); combFilterDelayTimes_[TONIC_RIGHT].push_back(delayR); combFilterScaleFactors_[TONIC_LEFT].push_back(scaleL); combFilterScaleFactors_[TONIC_RIGHT].push_back(scaleR); combFilters_[TONIC_LEFT].push_back(FilteredFBCombFilter6(0.01f, 0.125f).delayTime(delayL).scaleFactor(scaleL)); combFilters_[TONIC_RIGHT].push_back(FilteredFBCombFilter6(0.01f, 0.125f).delayTime(delayR).scaleFactor(scaleR)); } for (unsigned int i=0; i<TONIC_REVERB_N_ALLPASS; i++){ allpassFilters_[TONIC_LEFT].push_back(ImpulseDiffuserAllpass(allpassTimes_[i], TONIC_REVERB_ALLPASS_COEF)); allpassFilters_[TONIC_RIGHT].push_back(ImpulseDiffuserAllpass(allpassTimes_[i] + TONIC_REVERB_STEREO_SPREAD, TONIC_REVERB_ALLPASS_COEF)); } setDecayLPFCtrlGen(ControlValue(12000.f)); setDecayHPFCtrlGen(ControlValue(60.f)); }
void Filter_::setInput(Generator input){ Effect_::setInput(input); setIsStereoInput(input.isStereoOutput()); setIsStereoOutput(input.isStereoOutput()); }
MonoToStereoPanner_::MonoToStereoPanner_(){ setIsStereoOutput(true); panFrames.resize(kSynthesisBlockSize, 1); setPan(ControlValue(0)); }
void Multiplier_::input(Generator generator){ inputs_.push_back(generator); if ( generator.isStereoOutput() && !isStereoOutput() ){ setIsStereoOutput(true); } }
void Adder_::input(Generator generator){ inputs_.push_back( generator ); if ( generator.isStereoOutput() && !this->isStereoOutput() ){ setIsStereoOutput(true); } }