void IRAgent::setFile(const File& file, size_t fileChannel) { AudioFormatManager formatManager; formatManager.registerBasicFormats(); ScopedPointer<AudioFormatReader> audioFormatReader(formatManager.createReaderFor(file)); { ScopedLock lock(_mutex); if (audioFormatReader) { if (_file == file && _fileChannel == fileChannel) { return; } _file = file; _fileSampleCount = static_cast<size_t>(audioFormatReader->lengthInSamples); _fileChannelCount = static_cast<size_t>(audioFormatReader->numChannels); _fileSampleRate = audioFormatReader->sampleRate; _fileChannel = fileChannel; } else { _file = File::nonexistent; _fileSampleCount = 0; _fileChannelCount = 0; _fileSampleRate = 0.0; _fileChannel = 0; } } propagateChange(); updateConvolver(); }
bool WComboBox::triggerSlot(WObject *sender, const WSlot_ *slot, void **args) { if (slot == slots_ + 0) { sender_ = sender; clear(); return true; } if (slot == slots_ + 1) { sender_ = sender; propagateChange(); return true; } return WFormWidget::triggerSlot(sender, slot, args); }
void IRAgent::clear() { fadeOut(); waitForFadeOut(); setConvolver(nullptr); { ScopedLock lock(_mutex); _file = File::nonexistent; _fileSampleCount = 0; _fileChannelCount = 0; _fileSampleRate = 0.0; _fileChannel = 0; _irBuffer = nullptr; } propagateChange(); }
void IRAgent::resetIR(const FloatBuffer::Ptr& irBuffer, Convolver* convolver) { { ScopedLock lock(_mutex); _irBuffer = irBuffer; } { ScopedPointer<Convolver> conv(convolver); { // Make sure that the convolver mutex is locked as short as // possible and that all destruction and deallocation happens // outside of the lock because this might block the audio thread ScopedLock convolverLock(_convolverMutex); if (_convolver != conv) { _convolver.swapWith(conv); } } } propagateChange(); }