buffer & buffer::operator/=(const buffer & s) { // use length of shortest buffer to prevent memory errors UInt l = getLength() < s.getLength() ? getLength() : s.getLength(); Flt * ptr1 = storage.data(); const Flt * ptr2 = s.storage.data(); for (; l > 7; l -= 8, ptr1 += 8, ptr2 += 8) { ptr1[0] = (ptr2[0] ? ptr1[0] /= ptr2[0] : 0); ptr1[1] = (ptr2[1] ? ptr1[1] /= ptr2[1] : 0); ptr1[2] = (ptr2[2] ? ptr1[2] /= ptr2[2] : 0); ptr1[3] = (ptr2[3] ? ptr1[3] /= ptr2[3] : 0); ptr1[4] = (ptr2[4] ? ptr1[4] /= ptr2[4] : 0); ptr1[5] = (ptr2[5] ? ptr1[5] /= ptr2[5] : 0); ptr1[6] = (ptr2[6] ? ptr1[6] /= ptr2[6] : 0); ptr1[7] = (ptr2[7] ? ptr1[7] /= ptr2[7] : 0); } while (l--) { *ptr1 = (*ptr2 ? *ptr1 / *ptr2 : 0); ptr1++, ptr2++; } copyOverflow(); return (*this); }
buffer & buffer::operator*=(const buffer & s) { // use length of shortest buffer to prevent memory errors UInt l = getLength() < s.getLength() ? getLength() : s.getLength(); Flt * ptr1 = storage.data(); const Flt * ptr2 = s.storage.data(); for (; l > 7; l -= 8, ptr1 += 8, ptr2 += 8) { ptr1[0] *= ptr2[0]; ptr1[1] *= ptr2[1]; ptr1[2] *= ptr2[2]; ptr1[3] *= ptr2[3]; ptr1[4] *= ptr2[4]; ptr1[5] *= ptr2[5]; ptr1[6] *= ptr2[6]; ptr1[7] *= ptr2[7]; } while (l--) *ptr1++ *= *ptr2++; copyOverflow(); return (*this); }
bool YSE::DSP::fileBuffer::load(const char * fileName, UInt channel) { /*ScopedPointer<AudioFormatReader> reader = getReader(fileName); if (reader == nullptr) return false; if (channel >= reader->numChannels) return false; juce::AudioSampleBuffer tBuf; tBuf.setSize(reader->numChannels, (Int)reader->lengthInSamples); reader->read(&tBuf, 0, (Int)reader->lengthInSamples, 0, true, true); setSampleRateAdjustment(static_cast<Flt>(reader->sampleRate) / static_cast<Flt>(SAMPLERATE)); resize(tBuf.getNumSamples()); const float * in = tBuf.getReadPointer(channel); Flt * out = getPtr(); for (int i = 0; i < tBuf.getNumSamples(); i++) { *out++ = *in++; }*/ copyOverflow(); return true; }
void YSE::DSP::wavetable::createFourierTable(const std::vector<Flt> & harmonics, Int length, Flt phase) { Dbl width; if (length + overflow != storage.size()) resize(length + overflow); buffer::operator=(0.f); phase *= YSE::Pi2; for (UInt i = 0; i < harmonics.size(); i++) { Flt * ptr = storage.data(); Flt amplitude = harmonics[i]; for (int j = 0; j < length; j++) { width = (i + 1) * (j * YSE::Pi2 / length); *ptr++ += static_cast<Flt>(amplitude * cos(width + phase)); } Normalize(*this); } copyOverflow(); }