mirror of
https://github.com/lubosz/overte.git
synced 2025-04-16 09:29:16 +02:00
Merge pull request #6581 from kencooke/audio-reverb
New reverb parameters
This commit is contained in:
commit
bda4e41958
4 changed files with 277 additions and 160 deletions
|
@ -12,31 +12,57 @@
|
|||
Script.include("cookies.js");
|
||||
|
||||
var audioOptions = new AudioEffectOptions({
|
||||
maxRoomSize: 50,
|
||||
bandwidth: 10000,
|
||||
preDelay: 20,
|
||||
lateDelay: 0,
|
||||
reverbTime: 2,
|
||||
earlyDiffusion: 100,
|
||||
lateDiffusion: 100,
|
||||
roomSize: 50,
|
||||
reverbTime: 4,
|
||||
damping: 0.50,
|
||||
inputBandwidth: 0.8,
|
||||
earlyLevel: 0,
|
||||
tailLevel: 0,
|
||||
dryLevel: -6,
|
||||
wetLevel: -6
|
||||
density: 100,
|
||||
bassMult: 1.5,
|
||||
bassFreq: 250,
|
||||
highGain: -6,
|
||||
highFreq: 3000,
|
||||
modRate: 2.3,
|
||||
modDepth: 50,
|
||||
earlyGain: 0,
|
||||
lateGain: 0,
|
||||
earlyMixLeft: 20,
|
||||
earlyMixRight: 20,
|
||||
lateMixLeft: 90,
|
||||
lateMixRight: 90,
|
||||
wetDryMix: 50,
|
||||
});
|
||||
|
||||
AudioDevice.setReverbOptions(audioOptions);
|
||||
AudioDevice.setReverb(true);
|
||||
print("Reverb is ON.");
|
||||
|
||||
var panel = new Panel(10, 200);
|
||||
var panel = new Panel(10, 160);
|
||||
|
||||
var parameters = [
|
||||
{ name: "roomSize", min: 0, max: 100, units: " feet" },
|
||||
{ name: "reverbTime", min: 0, max: 10, units: " sec" },
|
||||
{ name: "damping", min: 0, max: 1, units: " " },
|
||||
{ name: "inputBandwidth", min: 0, max: 1, units: " " },
|
||||
{ name: "earlyLevel", min: -48, max: 0, units: " dB" },
|
||||
{ name: "tailLevel", min: -48, max: 0, units: " dB" },
|
||||
{ name: "wetLevel", min: -48, max: 0, units: " dB" },
|
||||
{ name: "bandwidth", min: 1000, max: 12000, units: " Hz" },
|
||||
{ name: "preDelay", min: 0, max: 333, units: " ms" },
|
||||
{ name: "lateDelay", min: 0, max: 166, units: " ms" },
|
||||
{ name: "reverbTime", min: 0.1, max: 10, units: " seconds" },
|
||||
{ name: "earlyDiffusion", min: 0, max: 100, units: " percent" },
|
||||
{ name: "lateDiffusion", min: 0, max: 100, units: " percent" },
|
||||
{ name: "roomSize", min: 0, max: 100, units: " percent" },
|
||||
{ name: "density", min: 0, max: 100, units: " percent" },
|
||||
{ name: "bassMult", min: 0.1, max: 4, units: " ratio" },
|
||||
{ name: "bassFreq", min: 10, max: 500, units: " Hz" },
|
||||
{ name: "highGain", min: -24, max: 0, units: " dB" },
|
||||
{ name: "highFreq", min: 1000, max: 12000, units: " Hz" },
|
||||
{ name: "modRate", min: 0.1, max: 10, units: " Hz" },
|
||||
{ name: "modDepth", min: 0, max: 100, units: " percent" },
|
||||
{ name: "earlyGain", min: -96, max: 24, units: " dB" },
|
||||
{ name: "lateGain", min: -96, max: 24, units: " dB" },
|
||||
{ name: "earlyMixLeft", min: 0, max: 100, units: " percent" },
|
||||
{ name: "earlyMixRight", min: 0, max: 100, units: " percent" },
|
||||
{ name: "lateMixLeft", min: 0, max: 100, units: " percent" },
|
||||
{ name: "lateMixRight", min: 0, max: 100, units: " percent" },
|
||||
{ name: "wetDryMix", min: 0, max: 100, units: " percent" },
|
||||
]
|
||||
|
||||
function setter(name) {
|
||||
|
@ -48,7 +74,7 @@ function getter(name) {
|
|||
}
|
||||
|
||||
function displayer(units) {
|
||||
return function(value) { return (value).toFixed(1) + units; };
|
||||
return function(value) { return (value).toFixed(1) + units; }
|
||||
}
|
||||
|
||||
// create a slider for each parameter
|
||||
|
|
|
@ -541,26 +541,40 @@ bool AudioClient::switchOutputToAudioDevice(const QString& outputDeviceName) {
|
|||
|
||||
void AudioClient::configureReverb() {
|
||||
ReverbParameters p;
|
||||
_listenerReverb.getParameters(&p);
|
||||
|
||||
// for now, reuse the gverb parameters
|
||||
p.sampleRate = _outputFormat.sampleRate();
|
||||
p.roomSize = _reverbOptions->getRoomSize();
|
||||
|
||||
p.bandwidth = _reverbOptions->getBandwidth();
|
||||
p.preDelay = _reverbOptions->getPreDelay();
|
||||
p.lateDelay = _reverbOptions->getLateDelay();
|
||||
p.reverbTime = _reverbOptions->getReverbTime();
|
||||
p.highGain = -24.0f * (1.0f - _reverbOptions->getDamping());
|
||||
p.bandwidth = 10000.0f * _reverbOptions->getInputBandwidth();
|
||||
p.earlyGain = _reverbOptions->getEarlyLevel();
|
||||
p.lateGain = _reverbOptions->getTailLevel();
|
||||
p.wetDryMix = 100.0f * powf(10.0f, _reverbOptions->getWetLevel() * (1/20.0f));
|
||||
p.earlyDiffusion = _reverbOptions->getEarlyDiffusion();
|
||||
p.lateDiffusion = _reverbOptions->getLateDiffusion();
|
||||
p.roomSize = _reverbOptions->getRoomSize();
|
||||
p.density = _reverbOptions->getDensity();
|
||||
p.bassMult = _reverbOptions->getBassMult();
|
||||
p.bassFreq = _reverbOptions->getBassFreq();
|
||||
p.highGain = _reverbOptions->getHighGain();
|
||||
p.highFreq = _reverbOptions->getHighFreq();
|
||||
p.modRate = _reverbOptions->getModRate();
|
||||
p.modDepth = _reverbOptions->getModDepth();
|
||||
p.earlyGain = _reverbOptions->getEarlyGain();
|
||||
p.lateGain = _reverbOptions->getLateGain();
|
||||
p.earlyMixLeft = _reverbOptions->getEarlyMixLeft();
|
||||
p.earlyMixRight = _reverbOptions->getEarlyMixRight();
|
||||
p.lateMixLeft = _reverbOptions->getLateMixLeft();
|
||||
p.lateMixRight = _reverbOptions->getLateMixRight();
|
||||
p.wetDryMix = _reverbOptions->getWetDryMix();
|
||||
|
||||
_listenerReverb.setParameters(&p);
|
||||
|
||||
// used for adding self-reverb to loopback audio
|
||||
// used only for adding self-reverb to loopback audio
|
||||
p.wetDryMix = 100.0f;
|
||||
p.preDelay = 0.0f;
|
||||
p.earlyGain = -96.0f; // disable ER
|
||||
p.lateGain -= 12.0f; // quieter than listener reverb
|
||||
p.lateGain -= 12.0f; // quieter than listener reverb
|
||||
p.lateMixLeft = 0.0f;
|
||||
p.lateMixRight = 0.0f;
|
||||
|
||||
_sourceReverb.setParameters(&p);
|
||||
}
|
||||
|
||||
|
@ -572,10 +586,10 @@ void AudioClient::updateReverbOptions() {
|
|||
_zoneReverbOptions.setReverbTime(_receivedAudioStream.getRevebTime());
|
||||
reverbChanged = true;
|
||||
}
|
||||
if (_zoneReverbOptions.getWetLevel() != _receivedAudioStream.getWetLevel()) {
|
||||
_zoneReverbOptions.setWetLevel(_receivedAudioStream.getWetLevel());
|
||||
reverbChanged = true;
|
||||
}
|
||||
//if (_zoneReverbOptions.getWetLevel() != _receivedAudioStream.getWetLevel()) {
|
||||
// _zoneReverbOptions.setWetLevel(_receivedAudioStream.getWetLevel());
|
||||
// reverbChanged = true;
|
||||
//}
|
||||
|
||||
if (_reverbOptions != &_zoneReverbOptions) {
|
||||
_reverbOptions = &_zoneReverbOptions;
|
||||
|
@ -602,17 +616,27 @@ void AudioClient::setReverb(bool reverb) {
|
|||
|
||||
void AudioClient::setReverbOptions(const AudioEffectOptions* options) {
|
||||
// Save the new options
|
||||
_scriptReverbOptions.setMaxRoomSize(options->getMaxRoomSize());
|
||||
_scriptReverbOptions.setRoomSize(options->getRoomSize());
|
||||
_scriptReverbOptions.setBandwidth(options->getBandwidth());
|
||||
_scriptReverbOptions.setPreDelay(options->getPreDelay());
|
||||
_scriptReverbOptions.setLateDelay(options->getLateDelay());
|
||||
_scriptReverbOptions.setReverbTime(options->getReverbTime());
|
||||
_scriptReverbOptions.setDamping(options->getDamping());
|
||||
_scriptReverbOptions.setSpread(options->getSpread());
|
||||
_scriptReverbOptions.setInputBandwidth(options->getInputBandwidth());
|
||||
_scriptReverbOptions.setEarlyLevel(options->getEarlyLevel());
|
||||
_scriptReverbOptions.setTailLevel(options->getTailLevel());
|
||||
|
||||
_scriptReverbOptions.setDryLevel(options->getDryLevel());
|
||||
_scriptReverbOptions.setWetLevel(options->getWetLevel());
|
||||
_scriptReverbOptions.setEarlyDiffusion(options->getEarlyDiffusion());
|
||||
_scriptReverbOptions.setLateDiffusion(options->getLateDiffusion());
|
||||
_scriptReverbOptions.setRoomSize(options->getRoomSize());
|
||||
_scriptReverbOptions.setDensity(options->getDensity());
|
||||
_scriptReverbOptions.setBassMult(options->getBassMult());
|
||||
_scriptReverbOptions.setBassFreq(options->getBassFreq());
|
||||
_scriptReverbOptions.setHighGain(options->getHighGain());
|
||||
_scriptReverbOptions.setHighFreq(options->getHighFreq());
|
||||
_scriptReverbOptions.setModRate(options->getModRate());
|
||||
_scriptReverbOptions.setModDepth(options->getModDepth());
|
||||
_scriptReverbOptions.setEarlyGain(options->getEarlyGain());
|
||||
_scriptReverbOptions.setLateGain(options->getLateGain());
|
||||
_scriptReverbOptions.setEarlyMixLeft(options->getEarlyMixLeft());
|
||||
_scriptReverbOptions.setEarlyMixRight(options->getEarlyMixRight());
|
||||
_scriptReverbOptions.setLateMixLeft(options->getLateMixLeft());
|
||||
_scriptReverbOptions.setLateMixRight(options->getLateMixRight());
|
||||
_scriptReverbOptions.setWetDryMix(options->getWetDryMix());
|
||||
|
||||
if (_reverbOptions == &_scriptReverbOptions) {
|
||||
// Apply them to the reverb instances
|
||||
|
|
|
@ -10,58 +10,76 @@
|
|||
|
||||
#include "AudioEffectOptions.h"
|
||||
|
||||
static const QString MAX_ROOM_SIZE_HANDLE = "maxRoomSize";
|
||||
static const QString ROOM_SIZE_HANDLE = "roomSize";
|
||||
static const QString BANDWIDTH_HANDLE = "bandwidth";
|
||||
static const QString PRE_DELAY_HANDLE = "preDelay";
|
||||
static const QString LATE_DELAY_HANDLE = "lateDelay";
|
||||
static const QString REVERB_TIME_HANDLE = "reverbTime";
|
||||
static const QString DAMPIMG_HANDLE = "damping";
|
||||
static const QString SPREAD_HANDLE = "spread";
|
||||
static const QString INPUT_BANDWIDTH_HANDLE = "inputBandwidth";
|
||||
static const QString EARLY_LEVEL_HANDLE = "earlyLevel";
|
||||
static const QString TAIL_LEVEL_HANDLE = "tailLevel";
|
||||
static const QString DRY_LEVEL_HANDLE = "dryLevel";
|
||||
static const QString WET_LEVEL_HANDLE = "wetLevel";
|
||||
static const QString EARLY_DIFFUSION_HANDLE = "earlyDiffusion";
|
||||
static const QString LATE_DIFFUSION_HANDLE = "lateDiffusion";
|
||||
static const QString ROOM_SIZE_HANDLE = "roomSize";
|
||||
static const QString DENSITY_HANDLE = "density";
|
||||
static const QString BASS_MULT_HANDLE = "bassMult";
|
||||
static const QString BASS_FREQ_HANDLE = "bassFreq";
|
||||
static const QString HIGH_GAIN_HANDLE = "highGain";
|
||||
static const QString HIGH_FREQ_HANDLE = "highFreq";
|
||||
static const QString MOD_RATE_HANDLE = "modRate";
|
||||
static const QString MOD_DEPTH_HANDLE = "modDepth";
|
||||
static const QString EARLY_GAIN_HANDLE = "earlyGain";
|
||||
static const QString LATE_GAIN_HANDLE = "lateGain";
|
||||
static const QString EARLY_MIX_LEFT_HANDLE = "earlyMixLeft";
|
||||
static const QString EARLY_MIX_RIGHT_HANDLE = "earlyMixRight";
|
||||
static const QString LATE_MIX_LEFT_HANDLE = "lateMixLeft";
|
||||
static const QString LATE_MIX_RIGHT_HANDLE = "lateMixRight";
|
||||
static const QString WET_DRY_MIX_HANDLE = "wetDryMix";
|
||||
|
||||
AudioEffectOptions::AudioEffectOptions(QScriptValue arguments) :
|
||||
_maxRoomSize(50.0f),
|
||||
_roomSize(50.0f),
|
||||
_reverbTime(4.0f),
|
||||
_damping(0.5f),
|
||||
_spread(15.0f),
|
||||
_inputBandwidth(0.75f),
|
||||
_earlyLevel(-12.0f),
|
||||
_tailLevel(-18.0f),
|
||||
_dryLevel(0.0f),
|
||||
_wetLevel(0.0f) {
|
||||
if (arguments.property(MAX_ROOM_SIZE_HANDLE).isNumber()) {
|
||||
_maxRoomSize = arguments.property(MAX_ROOM_SIZE_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(ROOM_SIZE_HANDLE).isNumber()) {
|
||||
_roomSize = arguments.property(ROOM_SIZE_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(REVERB_TIME_HANDLE).isNumber()) {
|
||||
_reverbTime = arguments.property(REVERB_TIME_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(DAMPIMG_HANDLE).isNumber()) {
|
||||
_damping = arguments.property(DAMPIMG_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(SPREAD_HANDLE).isNumber()) {
|
||||
_spread = arguments.property(SPREAD_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(INPUT_BANDWIDTH_HANDLE).isNumber()) {
|
||||
_inputBandwidth = arguments.property(INPUT_BANDWIDTH_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(EARLY_LEVEL_HANDLE).isNumber()) {
|
||||
_earlyLevel = arguments.property(EARLY_LEVEL_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(TAIL_LEVEL_HANDLE).isNumber()) {
|
||||
_tailLevel = arguments.property(TAIL_LEVEL_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(DRY_LEVEL_HANDLE).isNumber()) {
|
||||
_dryLevel = arguments.property(DRY_LEVEL_HANDLE).toNumber();
|
||||
}
|
||||
if (arguments.property(WET_LEVEL_HANDLE).isNumber()) {
|
||||
_wetLevel = arguments.property(WET_LEVEL_HANDLE).toNumber();
|
||||
}
|
||||
static const float BANDWIDTH_DEFAULT = 10000.0f;
|
||||
static const float PRE_DELAY_DEFAULT = 20.0f;
|
||||
static const float LATE_DELAY_DEFAULT = 0.0f;
|
||||
static const float REVERB_TIME_DEFAULT = 2.0f;
|
||||
static const float EARLY_DIFFUSION_DEFAULT = 100.0f;
|
||||
static const float LATE_DIFFUSION_DEFAULT = 100.0f;
|
||||
static const float ROOM_SIZE_DEFAULT = 50.0f;
|
||||
static const float DENSITY_DEFAULT = 100.0f;
|
||||
static const float BASS_MULT_DEFAULT = 1.5f;
|
||||
static const float BASS_FREQ_DEFAULT = 250.0f;
|
||||
static const float HIGH_GAIN_DEFAULT = -6.0f;
|
||||
static const float HIGH_FREQ_DEFAULT = 3000.0f;
|
||||
static const float MOD_RATE_DEFAULT = 2.3f;
|
||||
static const float MOD_DEPTH_DEFAULT = 50.0f;
|
||||
static const float EARLY_GAIN_DEFAULT = 0.0f;
|
||||
static const float LATE_GAIN_DEFAULT = 0.0f;
|
||||
static const float EARLY_MIX_LEFT_DEFAULT = 20.0f;
|
||||
static const float EARLY_MIX_RIGHT_DEFAULT = 20.0f;
|
||||
static const float LATE_MIX_LEFT_DEFAULT = 90.0f;
|
||||
static const float LATE_MIX_RIGHT_DEFAULT = 90.0f;
|
||||
static const float WET_DRY_MIX_DEFAULT = 50.0f;
|
||||
|
||||
static void setOption(QScriptValue arguments, const QString name, float defaultValue, float& variable) {
|
||||
variable = arguments.property(name).isNumber() ? arguments.property(name).toNumber() : defaultValue;
|
||||
}
|
||||
|
||||
AudioEffectOptions::AudioEffectOptions(QScriptValue arguments) {
|
||||
setOption(arguments, BANDWIDTH_HANDLE, BANDWIDTH_DEFAULT, _bandwidth);
|
||||
setOption(arguments, PRE_DELAY_HANDLE, PRE_DELAY_DEFAULT, _preDelay);
|
||||
setOption(arguments, LATE_DELAY_HANDLE, LATE_DELAY_DEFAULT, _lateDelay);
|
||||
setOption(arguments, REVERB_TIME_HANDLE, REVERB_TIME_DEFAULT, _reverbTime);
|
||||
setOption(arguments, EARLY_DIFFUSION_HANDLE, EARLY_DIFFUSION_DEFAULT, _earlyDiffusion);
|
||||
setOption(arguments, LATE_DIFFUSION_HANDLE, LATE_DIFFUSION_DEFAULT, _lateDiffusion);
|
||||
setOption(arguments, ROOM_SIZE_HANDLE, ROOM_SIZE_DEFAULT, _roomSize);
|
||||
setOption(arguments, DENSITY_HANDLE, DENSITY_DEFAULT, _density);
|
||||
setOption(arguments, BASS_MULT_HANDLE, BASS_MULT_DEFAULT, _bassMult);
|
||||
setOption(arguments, BASS_FREQ_HANDLE, BASS_FREQ_DEFAULT, _bassFreq);
|
||||
setOption(arguments, HIGH_GAIN_HANDLE, HIGH_GAIN_DEFAULT, _highGain);
|
||||
setOption(arguments, HIGH_FREQ_HANDLE, HIGH_FREQ_DEFAULT, _highFreq);
|
||||
setOption(arguments, MOD_RATE_HANDLE, MOD_RATE_DEFAULT, _modRate);
|
||||
setOption(arguments, MOD_DEPTH_HANDLE, MOD_DEPTH_DEFAULT, _modDepth);
|
||||
setOption(arguments, EARLY_GAIN_HANDLE, EARLY_GAIN_DEFAULT, _earlyGain);
|
||||
setOption(arguments, LATE_GAIN_HANDLE, LATE_GAIN_DEFAULT, _lateGain);
|
||||
setOption(arguments, EARLY_MIX_LEFT_HANDLE, EARLY_MIX_LEFT_DEFAULT, _earlyMixLeft);
|
||||
setOption(arguments, EARLY_MIX_RIGHT_HANDLE, EARLY_MIX_RIGHT_DEFAULT, _earlyMixRight);
|
||||
setOption(arguments, LATE_MIX_LEFT_HANDLE, LATE_MIX_LEFT_DEFAULT, _lateMixLeft);
|
||||
setOption(arguments, LATE_MIX_RIGHT_HANDLE, LATE_MIX_RIGHT_DEFAULT, _lateMixRight);
|
||||
setOption(arguments, WET_DRY_MIX_HANDLE, WET_DRY_MIX_DEFAULT, _wetDryMix);
|
||||
}
|
||||
|
||||
AudioEffectOptions::AudioEffectOptions(const AudioEffectOptions &other) : QObject() {
|
||||
|
@ -69,17 +87,28 @@ AudioEffectOptions::AudioEffectOptions(const AudioEffectOptions &other) : QObjec
|
|||
}
|
||||
|
||||
AudioEffectOptions& AudioEffectOptions::operator=(const AudioEffectOptions &other) {
|
||||
_maxRoomSize = other._maxRoomSize;
|
||||
_roomSize = other._roomSize;
|
||||
_bandwidth = other._bandwidth;
|
||||
_preDelay = other._preDelay;
|
||||
_lateDelay = other._lateDelay;
|
||||
_reverbTime = other._reverbTime;
|
||||
_damping = other._damping;
|
||||
_spread = other._spread;
|
||||
_inputBandwidth = other._inputBandwidth;
|
||||
_earlyLevel = other._earlyLevel;
|
||||
_tailLevel = other._tailLevel;
|
||||
_dryLevel = other._dryLevel;
|
||||
_wetLevel = other._wetLevel;
|
||||
|
||||
_earlyDiffusion = other._earlyDiffusion;
|
||||
_lateDiffusion = other._lateDiffusion;
|
||||
_roomSize = other._roomSize;
|
||||
_density = other._density;
|
||||
_bassMult = other._bassMult;
|
||||
_bassFreq = other._bassFreq;
|
||||
_highGain = other._highGain;
|
||||
_highFreq = other._highFreq;
|
||||
_modRate = other._modRate;
|
||||
_modDepth = other._modDepth;
|
||||
_earlyGain = other._earlyGain;
|
||||
_lateGain = other._lateGain;
|
||||
_earlyMixLeft = other._earlyMixLeft;
|
||||
_earlyMixRight = other._earlyMixRight;
|
||||
_lateMixLeft = other._lateMixLeft;
|
||||
_lateMixRight = other._lateMixRight;
|
||||
_wetDryMix = other._wetDryMix;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,32 +15,30 @@
|
|||
#include <QtScript/QScriptContext>
|
||||
#include <QtScript/QScriptEngine>
|
||||
|
||||
#include "AudioReverb.h"
|
||||
|
||||
class AudioEffectOptions : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
// Meters Square
|
||||
Q_PROPERTY(float maxRoomSize READ getMaxRoomSize WRITE setMaxRoomSize)
|
||||
Q_PROPERTY(float roomSize READ getRoomSize WRITE setRoomSize)
|
||||
|
||||
// Seconds
|
||||
Q_PROPERTY(float bandwidth READ getBandwidth WRITE setBandwidth)
|
||||
Q_PROPERTY(float preDelay READ getPreDelay WRITE setPreDelay)
|
||||
Q_PROPERTY(float lateDelay READ getLateDelay WRITE setLateDelay)
|
||||
Q_PROPERTY(float reverbTime READ getReverbTime WRITE setReverbTime)
|
||||
|
||||
// Ratio between 0 and 1
|
||||
Q_PROPERTY(float damping READ getDamping WRITE setDamping)
|
||||
|
||||
// (?) Does not appear to be set externally very often
|
||||
Q_PROPERTY(float spread READ getSpread WRITE setSpread)
|
||||
|
||||
// Ratio between 0 and 1
|
||||
Q_PROPERTY(float inputBandwidth READ getInputBandwidth WRITE setInputBandwidth)
|
||||
|
||||
// in dB
|
||||
Q_PROPERTY(float earlyLevel READ getEarlyLevel WRITE setEarlyLevel)
|
||||
Q_PROPERTY(float tailLevel READ getTailLevel WRITE setTailLevel)
|
||||
Q_PROPERTY(float dryLevel READ getDryLevel WRITE setDryLevel)
|
||||
Q_PROPERTY(float wetLevel READ getWetLevel WRITE setWetLevel)
|
||||
Q_PROPERTY(float earlyDiffusion READ getEarlyDiffusion WRITE setEarlyDiffusion)
|
||||
Q_PROPERTY(float lateDiffusion READ getLateDiffusion WRITE setLateDiffusion)
|
||||
Q_PROPERTY(float roomSize READ getRoomSize WRITE setRoomSize)
|
||||
Q_PROPERTY(float density READ getDensity WRITE setDensity)
|
||||
Q_PROPERTY(float bassMult READ getBassMult WRITE setBassMult)
|
||||
Q_PROPERTY(float bassFreq READ getBassFreq WRITE setBassFreq)
|
||||
Q_PROPERTY(float highGain READ getHighGain WRITE setHighGain)
|
||||
Q_PROPERTY(float highFreq READ getHighFreq WRITE setHighFreq)
|
||||
Q_PROPERTY(float modRate READ getModRate WRITE setModRate)
|
||||
Q_PROPERTY(float modDepth READ getModDepth WRITE setModDepth)
|
||||
Q_PROPERTY(float earlyGain READ getEarlyGain WRITE setEarlyGain)
|
||||
Q_PROPERTY(float lateGain READ getLateGain WRITE setLateGain)
|
||||
Q_PROPERTY(float earlyMixLeft READ getEarlyMixLeft WRITE setEarlyMixLeft)
|
||||
Q_PROPERTY(float earlyMixRight READ getEarlyMixRight WRITE setEarlyMixRight)
|
||||
Q_PROPERTY(float lateMixLeft READ getLateMixLeft WRITE setLateMixLeft)
|
||||
Q_PROPERTY(float lateMixRight READ getLateMixRight WRITE setLateMixRight)
|
||||
Q_PROPERTY(float wetDryMix READ getWetDryMix WRITE setWetDryMix)
|
||||
|
||||
public:
|
||||
AudioEffectOptions(QScriptValue arguments = QScriptValue());
|
||||
|
@ -49,60 +47,100 @@ public:
|
|||
|
||||
static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine);
|
||||
|
||||
float getRoomSize() const { return _roomSize; }
|
||||
void setRoomSize(float roomSize ) { _roomSize = roomSize; }
|
||||
float getBandwidth() const { return _bandwidth; }
|
||||
void setBandwidth(float bandwidth) { _bandwidth = bandwidth; }
|
||||
|
||||
float getMaxRoomSize() const { return _maxRoomSize; }
|
||||
void setMaxRoomSize(float maxRoomSize ) { _maxRoomSize = maxRoomSize; }
|
||||
float getPreDelay() const { return _preDelay; }
|
||||
void setPreDelay(float preDelay) { _preDelay = preDelay; }
|
||||
|
||||
float getLateDelay() const { return _lateDelay; }
|
||||
void setLateDelay(float lateDelay) { _lateDelay = lateDelay; }
|
||||
|
||||
float getReverbTime() const { return _reverbTime; }
|
||||
void setReverbTime(float reverbTime ) { _reverbTime = reverbTime; }
|
||||
void setReverbTime(float reverbTime) { _reverbTime = reverbTime; }
|
||||
|
||||
float getDamping() const { return _damping; }
|
||||
void setDamping(float damping ) { _damping = damping; }
|
||||
float getEarlyDiffusion() const { return _earlyDiffusion; }
|
||||
void setEarlyDiffusion(float earlyDiffusion) { _earlyDiffusion = earlyDiffusion; }
|
||||
|
||||
float getSpread() const { return _spread; }
|
||||
void setSpread(float spread ) { _spread = spread; }
|
||||
float getLateDiffusion() const { return _lateDiffusion; }
|
||||
void setLateDiffusion(float lateDiffusion) { _lateDiffusion = lateDiffusion; }
|
||||
|
||||
float getInputBandwidth() const { return _inputBandwidth; }
|
||||
void setInputBandwidth(float inputBandwidth ) { _inputBandwidth = inputBandwidth; }
|
||||
float getRoomSize() const { return _roomSize; }
|
||||
void setRoomSize(float roomSize) { _roomSize = roomSize; }
|
||||
|
||||
float getEarlyLevel() const { return _earlyLevel; }
|
||||
void setEarlyLevel(float earlyLevel ) { _earlyLevel = earlyLevel; }
|
||||
float getDensity() const { return _density; }
|
||||
void setDensity(float density) { _density = density; }
|
||||
|
||||
float getTailLevel() const { return _tailLevel; }
|
||||
void setTailLevel(float tailLevel ) { _tailLevel = tailLevel; }
|
||||
float getBassMult() const { return _bassMult; }
|
||||
void setBassMult(float bassMult) { _bassMult = bassMult; }
|
||||
|
||||
float getDryLevel() const { return _dryLevel; }
|
||||
void setDryLevel(float dryLevel) { _dryLevel = dryLevel; }
|
||||
float getBassFreq() const { return _bassFreq; }
|
||||
void setBassFreq(float bassFreq) { _bassFreq = bassFreq; }
|
||||
|
||||
float getWetLevel() const { return _wetLevel; }
|
||||
void setWetLevel(float wetLevel) { _wetLevel = wetLevel; }
|
||||
float getHighGain() const { return _highGain; }
|
||||
void setHighGain(float highGain) { _highGain = highGain; }
|
||||
|
||||
float getHighFreq() const { return _highFreq; }
|
||||
void setHighFreq(float highFreq) { _highFreq = highFreq; }
|
||||
|
||||
float getModRate() const { return _modRate; }
|
||||
void setModRate(float modRate) { _modRate = modRate; }
|
||||
|
||||
float getModDepth() const { return _modDepth; }
|
||||
void setModDepth(float modDepth) { _modDepth = modDepth; }
|
||||
|
||||
float getEarlyGain() const { return _earlyGain; }
|
||||
void setEarlyGain(float earlyGain) { _earlyGain = earlyGain; }
|
||||
|
||||
float getLateGain() const { return _lateGain; }
|
||||
void setLateGain(float lateGain) { _lateGain = lateGain; }
|
||||
|
||||
float getEarlyMixLeft() const { return _earlyMixLeft; }
|
||||
void setEarlyMixLeft(float earlyMixLeft) { _earlyMixLeft = earlyMixLeft; }
|
||||
|
||||
float getEarlyMixRight() const { return _earlyMixRight; }
|
||||
void setEarlyMixRight(float earlyMixRight) { _earlyMixRight = earlyMixRight; }
|
||||
|
||||
float getLateMixLeft() const { return _lateMixLeft; }
|
||||
void setLateMixLeft(float lateMixLeft) { _lateMixLeft = lateMixLeft; }
|
||||
|
||||
float getLateMixRight() const { return _lateMixRight; }
|
||||
void setLateMixRight(float lateMixRight) { _lateMixRight = lateMixRight; }
|
||||
|
||||
float getWetDryMix() const { return _wetDryMix; }
|
||||
void setWetDryMix(float wetDryMix) { _wetDryMix = wetDryMix; }
|
||||
|
||||
private:
|
||||
// http://wiki.audacityteam.org/wiki/GVerb#Instant_Reverberb_settings
|
||||
float _bandwidth; // [20, 24000] Hz
|
||||
|
||||
// Meters Square
|
||||
float _maxRoomSize;
|
||||
float _roomSize;
|
||||
float _preDelay; // [0, 333] ms
|
||||
float _lateDelay; // [0, 166] ms
|
||||
|
||||
// Seconds
|
||||
float _reverbTime;
|
||||
float _reverbTime; // [0.1, 100] seconds
|
||||
|
||||
// Ratio between 0 and 1
|
||||
float _damping;
|
||||
float _earlyDiffusion; // [0, 100] percent
|
||||
float _lateDiffusion; // [0, 100] percent
|
||||
|
||||
// ? (Does not appear to be set externally very often)
|
||||
float _spread;
|
||||
float _roomSize; // [0, 100] percent
|
||||
float _density; // [0, 100] percent
|
||||
|
||||
// Ratio between 0 and 1
|
||||
float _inputBandwidth;
|
||||
float _bassMult; // [0.1, 10] ratio
|
||||
float _bassFreq; // [10, 500] Hz
|
||||
float _highGain; // [-24, 0] dB
|
||||
float _highFreq; // [1000, 12000] Hz
|
||||
|
||||
// dB
|
||||
float _earlyLevel;
|
||||
float _tailLevel;
|
||||
float _dryLevel;
|
||||
float _wetLevel;
|
||||
float _modRate; // [0.1, 10] Hz
|
||||
float _modDepth; // [0, 100] percent
|
||||
|
||||
float _earlyGain; // [-96, +24] dB
|
||||
float _lateGain; // [-96, +24] dB
|
||||
|
||||
float _earlyMixLeft; // [0, 100] percent
|
||||
float _earlyMixRight; // [0, 100] percent
|
||||
float _lateMixLeft; // [0, 100] percent
|
||||
float _lateMixRight; // [0, 100] percent
|
||||
|
||||
float _wetDryMix; // [0, 100] percent
|
||||
};
|
||||
|
||||
#endif // hifi_AudioEffectOptions_h
|
||||
|
|
Loading…
Reference in a new issue