XMLSound bugfixes
- using expressions for pitch and volume didn't work - multiple volume elements not computed properly Discussion here: https://web.archive.org/web/20200730232940/http://fguk.me/forum/development-hangar/8360-supersonic-audio?start=40#46287 <volume> <property>/a/v1</property> <factor>0.1</factor> </volume> <volume> <property>/a/v2</property> <offset>1</offset> <factor>-3</factor> </volume> <volume> <property>/a/v3</property> <offset>1</offset> <factor>-1</factor> </volume> evaluates as follows: update(): Have 3 volume entries --> 0:prop /a[0]/v1[0] => 0.110000 factor = 0.100000 v=0.011000 offset 0.000000, now 0.000000, v=0.011000 vol=0.011000 ==> 0.011000 --> 1:prop /a[0]/v2[0] => 0.120000 factor = 3.000000 v=0.360000 -ve offset 1.000000 1.360000 = 0.014960 ==> 0.014960 --> 2:prop /a[0]/v3[0] => 0.130000 factor = 1.000000 v=0.130000 -ve offset 1.000000 1.130000 = 0.016905 ==> 0.016905
This commit is contained in:
parent
59da504cde
commit
3643f1c064
@ -414,9 +414,11 @@ SGXmlSound::update (double dt)
|
|||||||
double v = 1.0;
|
double v = 1.0;
|
||||||
|
|
||||||
if (_volume[i].expr) {
|
if (_volume[i].expr) {
|
||||||
v = _volume[i].expr->getValue(nullptr);
|
double expression_value = _volume[i].expr->getValue(nullptr);
|
||||||
expr = true;
|
if (expression_value >= 0)
|
||||||
continue;
|
volume *= expression_value;
|
||||||
|
expr = true;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_volume[i].prop) {
|
if (_volume[i].prop) {
|
||||||
@ -437,19 +439,23 @@ SGXmlSound::update (double dt)
|
|||||||
|
|
||||||
if (_volume[i].max && (v > _volume[i].max))
|
if (_volume[i].max && (v > _volume[i].max))
|
||||||
v = _volume[i].max;
|
v = _volume[i].max;
|
||||||
|
|
||||||
else if (v < _volume[i].min)
|
else if (v < _volume[i].min)
|
||||||
v = _volume[i].min;
|
v = _volume[i].min;
|
||||||
|
|
||||||
if (_volume[i].subtract) // Hack!
|
|
||||||
volume = _volume[i].offset - v;
|
|
||||||
|
|
||||||
|
if (_volume[i].subtract){ // Hack!
|
||||||
|
v = v + _volume[i].offset;
|
||||||
|
if (v >= 0)
|
||||||
|
volume = volume * v;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
volume_offset += _volume[i].offset;
|
if (v >= 0) {
|
||||||
volume *= v;
|
volume_offset += _volume[i].offset;
|
||||||
|
volume = volume * v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update the pitch
|
// Update the pitch
|
||||||
//
|
//
|
||||||
@ -462,9 +468,9 @@ SGXmlSound::update (double dt)
|
|||||||
double p = 1.0;
|
double p = 1.0;
|
||||||
|
|
||||||
if (_pitch[i].expr) {
|
if (_pitch[i].expr) {
|
||||||
p = _pitch[i].expr->getValue(nullptr);
|
pitch *= _pitch[i].expr->getValue(nullptr);
|
||||||
expr = true;
|
expr = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_pitch[i].prop) {
|
if (_pitch[i].prop) {
|
||||||
|
Loading…
Reference in New Issue
Block a user