diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/audaspace/intern/AUD_C-API.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index d5c3e368e28..af053df9c50 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -1094,9 +1094,11 @@ int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length, int samples_pe specs.specs = reader->getSpecs(); int len; float samplejump = specs.rate / samples_per_second; - float min, max, power; + float min, max, power, overallmax; bool eos; + overallmax = 0; + for(int i = 0; i < length; i++) { len = floor(samplejump * (i+1)) - floor(samplejump * i); @@ -1121,6 +1123,11 @@ int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length, int samples_pe buffer[i * 3 + 1] = max; buffer[i * 3 + 2] = sqrt(power) / len; + if(overallmax < max) + overallmax = max; + if(overallmax < -min) + overallmax = -min; + if(eos) { length = i; @@ -1128,6 +1135,14 @@ int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length, int samples_pe } } + if(overallmax > 1.0f) + { + for(int i = 0; i < length * 3; i++) + { + buffer[i] /= overallmax; + } + } + return length; } |