Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Mueller <nexyon@gmail.com>2010-01-01 08:09:30 +0300
committerJoerg Mueller <nexyon@gmail.com>2010-01-01 08:09:30 +0300
commit174eccf07851c4e7f669b194cd8951ca98bc5c81 (patch)
tree42d11467df2d006fcbaa562023ffe09796879716 /intern/audaspace/FX/AUD_FaderReader.cpp
parent3fa927a42e893709ac78f7d9419c22979b05bf3f (diff)
Huge new year audio commit!
* Refactored the whole audaspace library to use float as sample format over all readers. * Added new Readers like the linear resampler, envelope, lowpass, highpass and butterworth. * Note: The butterworth filter isn't working correctly, some bug in there... Maybe also true for the envelope. * Added a sound to f-curve operator that behaves mostly like the soundtracker script of technoestupido.
Diffstat (limited to 'intern/audaspace/FX/AUD_FaderReader.cpp')
-rw-r--r--intern/audaspace/FX/AUD_FaderReader.cpp59
1 files changed, 14 insertions, 45 deletions
diff --git a/intern/audaspace/FX/AUD_FaderReader.cpp b/intern/audaspace/FX/AUD_FaderReader.cpp
index d5096e7fae1..6c7ea6e0a01 100644
--- a/intern/audaspace/FX/AUD_FaderReader.cpp
+++ b/intern/audaspace/FX/AUD_FaderReader.cpp
@@ -35,35 +35,6 @@ AUD_FaderReader::AUD_FaderReader(AUD_IReader* reader, AUD_FadeType type,
m_start(start),
m_length(length)
{
- int bigendian = 1;
- bigendian = (((char*)&bigendian)[0]) ? 0: 1; // 1 if Big Endian
-
- switch(m_reader->getSpecs().format)
- {
- case AUD_FORMAT_S16:
- m_adjust = AUD_volume_adjust<int16_t>;
- break;
- case AUD_FORMAT_S32:
- m_adjust = AUD_volume_adjust<int32_t>;
- break;
- case AUD_FORMAT_FLOAT32:
- m_adjust = AUD_volume_adjust<float>;
- break;
- case AUD_FORMAT_FLOAT64:
- m_adjust = AUD_volume_adjust<double>;
- break;
- case AUD_FORMAT_U8:
- m_adjust = AUD_volume_adjust_u8;
- break;
- case AUD_FORMAT_S24:
- m_adjust = bigendian ? AUD_volume_adjust_s24_be :
- AUD_volume_adjust_s24_le;
- break;
- default:
- delete m_reader;
- AUD_THROW(AUD_ERROR_READER);
- }
-
m_buffer = new AUD_Buffer(); AUD_NEW("buffer")
}
@@ -93,9 +64,7 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer)
if(m_type != AUD_FADE_OUT)
{
buffer = m_buffer->getBuffer();
- memset(buffer,
- specs.format == AUD_FORMAT_U8 ? 0x80 : 0,
- length * samplesize);
+ memset(buffer, 0, length * samplesize);
}
}
else if(position / (float)specs.rate >= m_start+m_length)
@@ -103,9 +72,7 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer)
if(m_type == AUD_FADE_OUT)
{
buffer = m_buffer->getBuffer();
- memset(buffer,
- specs.format == AUD_FORMAT_U8 ? 0x80 : 0,
- length * samplesize);
+ memset(buffer, 0, length * samplesize);
}
}
else
@@ -113,19 +80,21 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer)
sample_t* buf = m_buffer->getBuffer();
float volume;
- for(int i = 0; i < length; i++)
+ for(int i = 0; i < length * specs.channels; i++)
{
- volume = (((position+i)/(float)specs.rate)-m_start) / m_length;
- if(volume > 1.0f)
- volume = 1.0f;
- else if(volume < 0.0f)
- volume = 0.0f;
+ if(i % specs.channels == 0)
+ {
+ volume = (((position+i)/(float)specs.rate)-m_start) / m_length;
+ if(volume > 1.0f)
+ volume = 1.0f;
+ else if(volume < 0.0f)
+ volume = 0.0f;
- if(m_type == AUD_FADE_OUT)
- volume = 1.0f - volume;
+ if(m_type == AUD_FADE_OUT)
+ volume = 1.0f - volume;
+ }
- m_adjust(buf + i * samplesize, buffer + i * samplesize,
- specs.channels, volume);
+ buf[i] = buffer[i] * volume;
}
buffer = buf;