BEGIN_UGEN_NAMESPACE #include "ugen_FFTMagnitudeSelection.h" #include "ugen_FFTEngine.h" #include "../core/ugen_Bits.h" FFTMagnitudeSelectionUGenInternal::FFTMagnitudeSelectionUGenInternal(UGen const& input, FFTEngine const& fft, const int overlap, IntArray const& _bins) throw() : ProxyOwnerUGenInternal(NumInputs, _bins.length()-1), fftEngine(fft), fftSize(fftEngine.size()), fftSizeHalved(fftSize / 2), overlap_(overlap < 1 ? 1 : overlap), hopSize(fftSize / overlap), overlapSize(fftSize - hopSize), maxNumBins(fftSizeHalved + 1), bins(_bins), inputBuffer(BufferSpec(fftSize, 1, true)), outputBuffer(BufferSpec(fftSize, 1, true)), bufferIndex(fftSize - hopSize), magnitudes(BufferSpec(bins.length(), 1, true)), outputSampleData(new float*[bins.length()]) { ugen_assert(overlap == overlap_); // should be > 0 ugen_assert(bins.length() > 0); inputs[Input] = input; }
BEGIN_UGEN_NAMESPACE #include "ugen_Correlation.h" #include "../basics/ugen_BinaryOpUGens.h" #include "../core/ugen_UGenArray.h" CorrelationUGenInternal::CorrelationUGenInternal(UGen const& inputA, UGen const& inputB, const int length, const int initialDelay) throw() // Will I need the delay? : UGenInternal(NumInputs), length_(length), bufferSize_(length_ * 2), initialDelay_(initialDelay), buffers(BufferSpec(bufferSize_, NumBuffers, true)), window(Buffer::hannWindow(length_)), score(Buffer::newClear(length_, 1, true)), bufferIndex(initialDelay <= 0 ? 0 : initialDelay >= bufferSize_ ? 0 : bufferSize_ - initialDelay), lockedIndexOfMax(-1) { inputs[InputA] = inputA; inputs[InputB] = inputB; }
BEGIN_UGEN_NAMESPACE #include "ugen_BlockDelay.h" BlockDelayUGenInternal::BlockDelayUGenInternal(UGen const& input) throw() : UGenInternal(NumInputs), delayBuffer(BufferSpec(UGen::getEstimatedBlockSize(), 1, true)), delayBufferSamples(delayBuffer.getData()) { inputs[Input] = input; }
karplusUGenInternal::karplusUGenInternal(UGen const& input, const float minFreq, UGen const& fundamental, UGen const& decayTime, UGen const& cutoff) throw() : UGenInternal(NumInputs) // Initialise the UGenIntenal's UGen inputs array using the enum size. { inputs[Input] = input; inputs[Fundamental] = fundamental; inputs[DecayTime] = decayTime; inputs[Cutoff] = cutoff; //.. buffer = Buffer(BufferSpec((1/minFreq) * UGen::getSampleRate() + 50, 1, true)); writePosition = 0; }
void BlockDelayUGenInternal::prepareForBlockInternal(const int actualBlockSize, const unsigned int /*blockID*/, const int /*channel*/) throw() { int previousBlockSize = uGenOutput.getBlockSize(); if(actualBlockSize > delayBuffer.size()) { delayBuffer = Buffer(BufferSpec(actualBlockSize, 1, true)); delayBufferSamples = delayBuffer.getData(); } else if(previousBlockSize != actualBlockSize) { delayBuffer.clear(); } uGenOutput.prepareForBlock(actualBlockSize); // only prepare the output block }
HarmonicOsc::HarmonicOsc(Buffer const& harmonicWeights, UGen const& freq, Buffer const& initialPhase) throw() { int numChannels = ugen::max(freq.getNumChannels(), initialPhase.size()); initInternal(numChannels); Buffer table(BufferSpec(8193, 1, true)); for(int harmonic = 1; harmonic <= harmonicWeights.size(); harmonic++) { float amp = harmonicWeights.getSampleUnchecked(0, harmonic-1); table += Buffer::line(8193, 0.0, harmonic * twoPi).sin() * amp; } table = table.shrinkSize(); for(unsigned int i = 0; i < numInternalUGens; i++) { internalUGens[i] = new TableOscUGenInternal(freq, initialPhase.wrapAt(i), table); } }
void UGenPlugin::setStateInformation (const void* data, int sizeInBytes) { const String pluginName = UGenUtility::stringToSafeName(JucePlugin_Name); // use this helper function to get the XML from this binary blob.. XmlElement* const xmlState = getXmlFromBinary (data, sizeInBytes); if (xmlState != 0) { // check that it's the right type of xml.. if (xmlState->hasTagName (pluginName)) { // ok, now pull out our parameters.. for(int index = 0; index < UGenInterface::Parameters::Count; index++) { String parameterName = UGenUtility::stringToSafeName(String(UGenInterface::Parameters::Names[index])); parameterName += "_"; parameterName += String(index); // try to ensure the name is unique, not foolproof parameters[index] = (float) xmlState->getDoubleAttribute (parameterName, calculateNormalisedParameter(index, getParameterNominal(index))); } menuItem = xmlState->getIntAttribute("menuItem", UGenInterface::MenuOptions::LowPass); menu2Item = xmlState->getIntAttribute("menu2Item", UGenInterface::MenuOptions2::DualMono); const String relative = xmlState->getStringAttribute("irFile", String::empty); if(relative.isNotEmpty()) loadIR(File::getSpecialLocation(File::userHomeDirectory).getChildFile(relative)); // lastPath = xmlState->getStringAttribute("lastPath", String::empty); selectedTab = xmlState->getIntAttribute("selectedTab", -1); const int ampEnvNumLevels = xmlState->getIntAttribute("ampEnvNumLevels", 0); const int ampEnvNumTimes = xmlState->getIntAttribute("ampEnvNumTimes", 0); if ((ampEnvNumTimes >= 1) && (ampEnvNumLevels == (ampEnvNumTimes + 1))) { Buffer ampEnvLevels = BufferSpec(ampEnvNumLevels); Buffer ampEnvTimes = BufferSpec(ampEnvNumTimes); for (int i = 0; i < ampEnvLevels.size(); i++) ampEnvLevels.setSampleUnchecked(i, (float)xmlState->getDoubleAttribute(String("ampEnvLevel")+String(i), 0.0)); for (int i = 0; i < ampEnvTimes.size(); i++) ampEnvTimes.setSampleUnchecked(i, (float)xmlState->getDoubleAttribute(String("ampEnvTime")+String(i), 0.0)); ampEnv = Env(ampEnvLevels, ampEnvTimes, EnvCurve::Linear); } else ampEnv = getDefaultEnv(); const int filterEnvNumLevels = xmlState->getIntAttribute("filterEnvNumLevels", 0); const int filterEnvNumTimes = xmlState->getIntAttribute("filterEnvNumTimes", 0); if ((filterEnvNumTimes >= 1) && (filterEnvNumLevels == (filterEnvNumTimes + 1))) { Buffer filterEnvLevels = BufferSpec(filterEnvNumLevels); Buffer filterEnvTimes = BufferSpec(filterEnvNumTimes); for (int i = 0; i < filterEnvLevels.size(); i++) filterEnvLevels.setSampleUnchecked(i, (float)xmlState->getDoubleAttribute(String("filterEnvLevel")+String(i), 0.0)); for (int i = 0; i < filterEnvTimes.size(); i++) filterEnvTimes.setSampleUnchecked(i, (float)xmlState->getDoubleAttribute(String("filterEnvTime")+String(i), 0.0)); filterEnv = Env(filterEnvLevels, filterEnvTimes, EnvCurve::Linear); } else filterEnv = getDefaultEnv(); processEnvs(); sendChangeMessage(); } delete xmlState; } }