Sequencer audio waveform drawing fix, now assured to be within the strip bounds.

This commit is contained in:
Joerg Mueller
2011-10-10 14:59:13 +00:00
parent 21a755b4f5
commit 9cabc57a62

View File

@@ -1094,9 +1094,11 @@ int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length, int samples_pe
specs.specs = reader->getSpecs(); specs.specs = reader->getSpecs();
int len; int len;
float samplejump = specs.rate / samples_per_second; float samplejump = specs.rate / samples_per_second;
float min, max, power; float min, max, power, overallmax;
bool eos; bool eos;
overallmax = 0;
for(int i = 0; i < length; i++) for(int i = 0; i < length; i++)
{ {
len = floor(samplejump * (i+1)) - floor(samplejump * 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 + 1] = max;
buffer[i * 3 + 2] = sqrt(power) / len; buffer[i * 3 + 2] = sqrt(power) / len;
if(overallmax < max)
overallmax = max;
if(overallmax < -min)
overallmax = -min;
if(eos) if(eos)
{ {
length = i; 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; return length;
} }