From 6f9557fe672200bba31211a33b3939c9df9f0ae4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 20 Oct 2014 15:06:02 -0700 Subject: [PATCH] Do not destroy script reverb settings --- assignment-client/src/audio/AudioMixer.cpp | 2 - interface/src/Audio.cpp | 84 ++++++++++++---------- interface/src/Audio.h | 4 +- libraries/audio/src/AudioEffectOptions.cpp | 20 +++++- libraries/audio/src/AudioEffectOptions.h | 2 + libraries/audio/src/InboundAudioStream.cpp | 1 - 6 files changed, 69 insertions(+), 44 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index f4e0ed2466..9b91dd8c1e 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -744,8 +744,6 @@ void AudioMixer::run() { dataAt += sizeof(float); memcpy(dataAt, &wetLevel, sizeof(float)); dataAt += sizeof(float); - - qDebug() << "Out" << sequence << reverbTime << wetLevel; } else { bool hasReverb = false; memcpy(dataAt, &hasReverb, sizeof(bool)); diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index e566ce77b9..ff41da6e81 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -494,40 +494,43 @@ bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) { void Audio::initGverb() { // Initialize a new gverb instance - _gverb = gverb_new(_outputFormat.sampleRate(), _reverbOptions.getMaxRoomSize(), _reverbOptions.getRoomSize(), _reverbOptions.getReverbTime(), - _reverbOptions.getDamping(), _reverbOptions.getSpread(), _reverbOptions.getInputBandwidth(), _reverbOptions.getEarlyLevel(), - _reverbOptions.getTailLevel()); + _gverb = gverb_new(_outputFormat.sampleRate(), _reverbOptions->getMaxRoomSize(), _reverbOptions->getRoomSize(), + _reverbOptions->getReverbTime(), _reverbOptions->getDamping(), _reverbOptions->getSpread(), + _reverbOptions->getInputBandwidth(), _reverbOptions->getEarlyLevel(), + _reverbOptions->getTailLevel()); // Configure the instance (these functions are not super well named - they actually set several internal variables) - gverb_set_roomsize(_gverb, _reverbOptions.getRoomSize()); - gverb_set_revtime(_gverb, _reverbOptions.getReverbTime()); - gverb_set_damping(_gverb, _reverbOptions.getDamping()); - gverb_set_inputbandwidth(_gverb, _reverbOptions.getInputBandwidth()); - gverb_set_earlylevel(_gverb, DB_CO(_reverbOptions.getEarlyLevel())); - gverb_set_taillevel(_gverb, DB_CO(_reverbOptions.getTailLevel())); + gverb_set_roomsize(_gverb, _reverbOptions->getRoomSize()); + gverb_set_revtime(_gverb, _reverbOptions->getReverbTime()); + gverb_set_damping(_gverb, _reverbOptions->getDamping()); + gverb_set_inputbandwidth(_gverb, _reverbOptions->getInputBandwidth()); + gverb_set_earlylevel(_gverb, DB_CO(_reverbOptions->getEarlyLevel())); + gverb_set_taillevel(_gverb, DB_CO(_reverbOptions->getTailLevel())); } void Audio::setReverbOptions(const AudioEffectOptions* options) { // Save the new options - _reverbOptions.setMaxRoomSize(options->getMaxRoomSize()); - _reverbOptions.setRoomSize(options->getRoomSize()); - _reverbOptions.setReverbTime(options->getReverbTime()); - _reverbOptions.setDamping(options->getDamping()); - _reverbOptions.setSpread(options->getSpread()); - _reverbOptions.setInputBandwidth(options->getInputBandwidth()); - _reverbOptions.setEarlyLevel(options->getEarlyLevel()); - _reverbOptions.setTailLevel(options->getTailLevel()); + _scriptReverbOptions.setMaxRoomSize(options->getMaxRoomSize()); + _scriptReverbOptions.setRoomSize(options->getRoomSize()); + _scriptReverbOptions.setReverbTime(options->getReverbTime()); + _scriptReverbOptions.setDamping(options->getDamping()); + _scriptReverbOptions.setSpread(options->getSpread()); + _scriptReverbOptions.setInputBandwidth(options->getInputBandwidth()); + _scriptReverbOptions.setEarlyLevel(options->getEarlyLevel()); + _scriptReverbOptions.setTailLevel(options->getTailLevel()); - _reverbOptions.setDryLevel(options->getDryLevel()); - _reverbOptions.setWetLevel(options->getWetLevel()); + _scriptReverbOptions.setDryLevel(options->getDryLevel()); + _scriptReverbOptions.setWetLevel(options->getWetLevel()); - // Apply them to the reverb instance(s) - initGverb(); + if (_reverbOptions == &_scriptReverbOptions) { + // Apply them to the reverb instance(s) + initGverb(); + } } void Audio::addReverb(int16_t* samplesData, int numSamples, QAudioFormat& audioFormat) { - float dryFraction = DB_CO(_reverbOptions.getDryLevel()); - float wetFraction = DB_CO(_reverbOptions.getWetLevel()); + float dryFraction = DB_CO(_reverbOptions->getDryLevel()); + float wetFraction = DB_CO(_reverbOptions->getWetLevel()); float lValue,rValue; for (int sample = 0; sample < numSamples; sample += audioFormat.channelCount()) { @@ -949,23 +952,26 @@ void Audio::processReceivedSamples(const QByteArray& inputBuffer, QByteArray& ou numDeviceOutputSamples, _desiredOutputFormat, _outputFormat); - if (_receivedAudioStream.hasReverb()) { - bool reverbChanged = false; - - if (_reverbOptions.getReverbTime() != _receivedAudioStream.getRevebTime()) { - _reverbOptions.setReverbTime(_receivedAudioStream.getRevebTime()); - reverbChanged = true; - } - if (_reverbOptions.getWetLevel() != _receivedAudioStream.getWetLevel()) { - _reverbOptions.setWetLevel(_receivedAudioStream.getWetLevel()); - reverbChanged = true; - } - if (reverbChanged) { - initGverb(); - } - } - if(_reverb || _receivedAudioStream.hasReverb()) { + if (_receivedAudioStream.hasReverb()) { + _reverbOptions = &_zoneReverbOptions; + + bool reverbChanged = false; + if (_zoneReverbOptions.getReverbTime() != _receivedAudioStream.getRevebTime()) { + _zoneReverbOptions.setReverbTime(_receivedAudioStream.getRevebTime()); + reverbChanged = true; + } + if (_zoneReverbOptions.getWetLevel() != _receivedAudioStream.getWetLevel()) { + _zoneReverbOptions.setWetLevel(_receivedAudioStream.getWetLevel()); + reverbChanged = true; + } + if (reverbChanged) { + initGverb(); + } + } else { + _reverbOptions = &_scriptReverbOptions; + } + addReverb((int16_t*)outputBuffer.data(), numDeviceOutputSamples, _outputFormat); } } diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 7390a3c28c..900b6ce0d6 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -241,7 +241,9 @@ private: bool _muted; bool _localEcho; bool _reverb; - AudioEffectOptions _reverbOptions; + AudioEffectOptions _scriptReverbOptions; + AudioEffectOptions _zoneReverbOptions; + AudioEffectOptions* _reverbOptions; ty_gverb *_gverb; GLuint _micTextureId; GLuint _muteTextureId; diff --git a/libraries/audio/src/AudioEffectOptions.cpp b/libraries/audio/src/AudioEffectOptions.cpp index dbe9b51e5b..8f1acd7ec0 100644 --- a/libraries/audio/src/AudioEffectOptions.cpp +++ b/libraries/audio/src/AudioEffectOptions.cpp @@ -57,7 +57,25 @@ AudioEffectOptions::AudioEffectOptions(QScriptValue arguments) : if (arguments.property(WET_LEVEL_HANDLE).isNumber()) { _wetLevel = arguments.property(WET_LEVEL_HANDLE).toNumber(); } - +} + +AudioEffectOptions::AudioEffectOptions(const AudioEffectOptions &other) { + *this = other; +} + +AudioEffectOptions& AudioEffectOptions::operator=(const AudioEffectOptions &other) { + _maxRoomSize = other._maxRoomSize; + _roomSize = other._roomSize; + _reverbTime = other._reverbTime; + _damping = other._damping; + _spread = other._spread; + _inputBandwidth = other._inputBandwidth; + _earlyLevel = other._earlyLevel; + _tailLevel = other._tailLevel; + _dryLevel = other._dryLevel; + _wetLevel = other._wetLevel; + + return *this; } QScriptValue AudioEffectOptions::constructor(QScriptContext* context, QScriptEngine* engine) { diff --git a/libraries/audio/src/AudioEffectOptions.h b/libraries/audio/src/AudioEffectOptions.h index b3db9fd0f7..ae99face0f 100644 --- a/libraries/audio/src/AudioEffectOptions.h +++ b/libraries/audio/src/AudioEffectOptions.h @@ -37,6 +37,8 @@ class AudioEffectOptions : public QObject { public: AudioEffectOptions(QScriptValue arguments = QScriptValue()); + AudioEffectOptions(const AudioEffectOptions &other); + AudioEffectOptions& operator=(const AudioEffectOptions &other); static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine); diff --git a/libraries/audio/src/InboundAudioStream.cpp b/libraries/audio/src/InboundAudioStream.cpp index e92e7c32d6..59578951f8 100644 --- a/libraries/audio/src/InboundAudioStream.cpp +++ b/libraries/audio/src/InboundAudioStream.cpp @@ -173,7 +173,6 @@ int InboundAudioStream::parseStreamProperties(PacketType type, const QByteArray& read += sizeof(float); memcpy(&_wetLevel, packetAfterSeqNum.data() + read, sizeof(float)); read += sizeof(float); - qDebug() << "In" << _reverbTime << _wetLevel; } }