mirror of
https://github.com/lubosz/overte.git
synced 2025-04-16 09:29:16 +02:00
Do not destroy script reverb settings
This commit is contained in:
parent
5a11104bdf
commit
6f9557fe67
6 changed files with 69 additions and 44 deletions
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue