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>2011-08-09 18:10:32 +0400
committerJoerg Mueller <nexyon@gmail.com>2011-08-09 18:10:32 +0400
commita672ab5e737202bede956a88357a96cf2728df15 (patch)
tree5286992111dca717a3b78f4dc3a732980ae34318 /source/blender/blenkernel/intern/sound.c
parent13249b925eda7752b65a36d8270a3af3bdc02981 (diff)
3D Audio GSoC:
Improved waveform drawing in the sequencer. * Drawing the waveform of a sequencer strip is now independent from whether the sound is cached or not. * Improved drawing of the waveform in the sequencer (especially speed!). * Making it possible to vertically zoom more in the sequencer to better see the waveform for lipsync. * Fixed a bug which crashed blender on loading a sound file via ffmpeg.
Diffstat (limited to 'source/blender/blenkernel/intern/sound.c')
-rw-r--r--source/blender/blenkernel/intern/sound.c35
1 files changed, 30 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 17df6ba23cb..888c719a304 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -24,6 +24,7 @@
#include "DNA_sound_types.h"
#include "DNA_speaker_types.h"
+#define WITH_AUDASPACE
#ifdef WITH_AUDASPACE
# include "AUD_C-API.h"
#endif
@@ -96,6 +97,8 @@ void sound_free(struct bSound* sound)
AUD_unload(sound->cache);
sound->cache = NULL;
}
+
+ sound_free_waveform(sound);
#endif // WITH_AUDASPACE
}
@@ -608,12 +611,34 @@ int sound_scene_playing(struct Scene *scene)
return -1;
}
-int sound_read_sound_buffer(struct bSound* sound, float* buffer, int length, float start, float end)
+void sound_free_waveform(struct bSound* sound)
+{
+ if(sound->waveform)
+ {
+ MEM_freeN(((SoundWaveform*)sound->waveform)->data);
+ MEM_freeN(sound->waveform);
+ }
+
+ sound->waveform = NULL;
+}
+
+void sound_read_waveform(struct bSound* sound)
{
- AUD_Sound* limiter = AUD_limitSound(sound->cache, start, end);
- int ret= AUD_readSound(limiter, buffer, length);
- AUD_unload(limiter);
- return ret;
+ AUD_SoundInfo info;
+
+ info = AUD_getInfo(sound->playback_handle);
+
+ if(info.length > 0)
+ {
+ SoundWaveform* waveform = MEM_mallocN(sizeof(SoundWaveform), "SoundWaveform");;
+ int length = info.length * SOUND_WAVE_SAMPLES_PER_SECOND;
+
+ waveform->data = MEM_mallocN(length * sizeof(float) * 3, "SoundWaveform.samples");
+ waveform->length = AUD_readSound(sound->playback_handle, waveform->data, length, SOUND_WAVE_SAMPLES_PER_SECOND);
+
+ sound_free_waveform(sound);
+ sound->waveform = waveform;
+ }
}
int sound_get_channels(struct bSound* sound)