diff options
-rw-r--r-- | source/blender/blenkernel/intern/sequence.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sound.c | 67 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 8 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_add.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 106 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_sound_types.h | 77 | ||||
-rw-r--r-- | source/gameengine/Converter/KX_ConvertActuators.cpp | 2 |
7 files changed, 79 insertions, 187 deletions
diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequence.c index 159a60ad3af..c6b714c3125 100644 --- a/source/blender/blenkernel/intern/sequence.c +++ b/source/blender/blenkernel/intern/sequence.c @@ -570,7 +570,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq) } seq->strip->len = seq->len; } else if (seq->type == SEQ_SOUND) { - seq->len = AUD_getInfo(seq->sound->snd_sound).length * FPS; + seq->len = AUD_getInfo(seq->sound->handle).length * FPS; seq->len -= seq->anim_startofs; seq->len -= seq->anim_endofs; if (seq->len < 0) { diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c index f6fb1ddcc5a..070b5786a74 100644 --- a/source/blender/blenkernel/intern/sound.c +++ b/source/blender/blenkernel/intern/sound.c @@ -79,11 +79,11 @@ struct bSound* sound_new_file(struct Main *main, char* filename) sound = alloc_libblock(&main->sound, ID_SO, filename+len); strcpy(sound->name, filename); - sound->type = SOUND_TYPE_FILE; +// XXX unused currently sound->type = SOUND_TYPE_FILE; sound_load(main, sound); - if(!sound->snd_sound) + if(!sound->handle) { free_libblock(&main->sound, sound); sound = NULL; @@ -109,7 +109,7 @@ struct bSound* sound_new_buffer(struct bContext *C, struct bSound *source) sound_load(CTX_data_main(C), sound); - if(!sound->snd_sound) + if(!sound->handle) { free_libblock(&CTX_data_main(C)->sound, sound); sound = NULL; @@ -135,7 +135,7 @@ struct bSound* sound_new_limiter(struct bContext *C, struct bSound *source, floa sound_load(CTX_data_main(C), sound); - if(!sound->snd_sound) + if(!sound->handle) { free_libblock(&CTX_data_main(C)->sound, sound); sound = NULL; @@ -162,22 +162,25 @@ void sound_cache(struct bSound* sound, int ignore) if(sound->cache && !ignore) AUD_unload(sound->cache); - sound->cache = AUD_bufferSound(sound->snd_sound); + sound->cache = AUD_bufferSound(sound->handle); } void sound_load(struct Main *main, struct bSound* sound) { if(sound) { - if(sound->snd_sound) + if(sound->handle) { - AUD_unload(sound->snd_sound); - sound->snd_sound = NULL; + AUD_unload(sound->handle); + sound->handle = NULL; } +// XXX unused currently +#if 0 switch(sound->type) { case SOUND_TYPE_FILE: +#endif { char fullpath[FILE_MAX]; char *path; @@ -197,26 +200,25 @@ void sound_load(struct Main *main, struct bSound* sound) /* but we need a packed file then */ if (pf) - sound->snd_sound = AUD_loadBuffer((unsigned char*) pf->data, pf->size); + sound->handle = AUD_loadBuffer((unsigned char*) pf->data, pf->size); /* or else load it from disk */ else - sound->snd_sound = AUD_load(fullpath); + sound->handle = AUD_load(fullpath); + } // XXX +// XXX unused currently +#if 0 break; } case SOUND_TYPE_BUFFER: - if(sound->child_sound && sound->child_sound->snd_sound) - sound->snd_sound = AUD_bufferSound(sound->child_sound->snd_sound); + if(sound->child_sound && sound->child_sound->handle) + sound->handle = AUD_bufferSound(sound->child_sound->handle); break; case SOUND_TYPE_LIMITER: - if(sound->child_sound && sound->child_sound->snd_sound) - sound->snd_sound = AUD_limitSound(sound->child_sound, sound->start, sound->end); + if(sound->child_sound && sound->child_sound->handle) + sound->handle = AUD_limitSound(sound->child_sound, sound->start, sound->end); break; } - - if(sound->cache) - { - - } +#endif } } @@ -228,10 +230,10 @@ void sound_free(struct bSound* sound) sound->packedfile = NULL; } - if(sound->snd_sound) + if(sound->handle) { - AUD_unload(sound->snd_sound); - sound->snd_sound = NULL; + AUD_unload(sound->handle); + sound->handle = NULL; } } @@ -241,20 +243,23 @@ void sound_unlink(struct bContext *C, struct bSound* sound) Scene *scene; SoundHandle *handle; +// XXX unused currently +#if 0 for(snd = CTX_data_main(C)->sound.first; snd; snd = snd->id.next) { if(snd->child_sound == sound) { snd->child_sound = NULL; - if(snd->snd_sound) + if(snd->handle) { - AUD_unload(sound->snd_sound); - snd->snd_sound = NULL; + AUD_unload(sound->handle); + snd->handle = NULL; } sound_unlink(C, snd); } } +#endif for(scene = CTX_data_main(C)->scene.first; scene; scene = scene->id.next) { @@ -372,9 +377,9 @@ void sound_update_playing(struct bContext *C) { if(handle->state == AUD_STATUS_INVALID) { - if(handle->source && handle->source->snd_sound) + if(handle->source && handle->source->handle) { - AUD_Sound* limiter = AUD_limitSound(handle->source->cache ? handle->source->cache : handle->source->snd_sound, handle->frameskip / fps, (handle->frameskip + handle->endframe - handle->startframe)/fps); + AUD_Sound* limiter = AUD_limitSound(handle->source->cache ? handle->source->cache : handle->source->handle, handle->frameskip / fps, (handle->frameskip + handle->endframe - handle->startframe)/fps); handle->handle = AUD_play(limiter, 1); AUD_unload(limiter); if(handle->handle) @@ -413,10 +418,10 @@ void sound_scrub(struct bContext *C) { if(cfra >= handle->startframe && cfra < handle->endframe && !handle->mute) { - if(handle->source && handle->source->snd_sound) + if(handle->source && handle->source->handle) { int frameskip = handle->frameskip + cfra - handle->startframe; - AUD_Sound* limiter = AUD_limitSound(handle->source->cache ? handle->source->cache : handle->source->snd_sound, frameskip / fps, (frameskip + 1)/fps); + AUD_Sound* limiter = AUD_limitSound(handle->source->cache ? handle->source->cache : handle->source->handle, frameskip / fps, (frameskip + 1)/fps); AUD_play(limiter, 0); AUD_unload(limiter); } @@ -439,7 +444,7 @@ AUD_Device* sound_mixdown(struct Scene *scene, AUD_Specs specs, int start, int e for(handle = scene->sound_handles.first; handle; handle = handle->next) { - if(start < handle->endframe && end > handle->startframe && !handle->mute && handle->source && handle->source->snd_sound) + if(start < handle->endframe && end > handle->startframe && !handle->mute && handle->source && handle->source->handle) { frameskip = handle->frameskip; s = handle->startframe - start; @@ -451,7 +456,7 @@ AUD_Device* sound_mixdown(struct Scene *scene, AUD_Specs specs, int start, int e s = 0; } - limiter = AUD_limitSound(handle->source->snd_sound, frameskip / fps, e / fps); + limiter = AUD_limitSound(handle->source->handle, frameskip / fps, e / fps); delayer = AUD_delaySound(limiter, s / fps); AUD_playDevice(mixdown, delayer); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 913477198b8..6771135a772 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5061,10 +5061,13 @@ static void fix_relpaths_library(const char *basepath, Main *main) static void direct_link_sound(FileData *fd, bSound *sound) { - sound->snd_sound = NULL; + sound->handle = NULL; sound->packedfile = direct_link_packedfile(fd, sound->packedfile); sound->newpackedfile = direct_link_packedfile(fd, sound->newpackedfile); + + if(sound->cache) + sound_cache(sound, 1); } static void lib_link_sound(FileData *fd, Main *main) @@ -5076,8 +5079,7 @@ static void lib_link_sound(FileData *fd, Main *main) if(sound->id.flag & LIB_NEEDLINK) { sound->id.flag -= LIB_NEEDLINK; sound->ipo= newlibadr_us(fd, sound->id.lib, sound->ipo); // XXX depreceated - old animation system - sound->stream = 0; - + sound_load(main, sound); } sound= sound->id.next; diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index bdedef4b6c8..e6d50976957 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -242,13 +242,13 @@ static Sequence* sequencer_add_sound_strip(bContext *C, wmOperator *op, int star sound = sound_new_file(CTX_data_main(C), filename); - if (sound==NULL || sound->snd_sound == NULL) { + if (sound==NULL || sound->handle == NULL) { if(op) BKE_report(op->reports, RPT_ERROR, "Unsupported audio format"); return NULL; } - info = AUD_getInfo(sound->snd_sound); + info = AUD_getInfo(sound->handle); if (info.specs.format == AUD_FORMAT_INVALID) { sound_delete(C, sound); diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 367bfb68208..76bed3772b1 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -225,108 +225,6 @@ static void drawmeta_contents(Scene *scene, Sequence *seqm, float x1, float y1, } } -static void drawseqwave(Scene *scene, View2D *v2d, Sequence *seq, float x1, float y1, float x2, float y2, int winx) -{ - /* - x1 is the starting x value to draw the wave, - x2 the end x value, same for y1 and y2 - winx is the zoom level. - */ - - float - f, /* floating point value used to store the X draw location for the wave lines when openGL drawing*/ - midy, /* fast access to the middle location (y1+y2)/2 */ - clipxmin, /* the minimum X value, clip this with the window */ - clipxmax, /* the maximum X value, clip this with the window */ - sample_step, /* steps to move per sample, floating value must later translate into an int */ - fsofs, /* steps to move per sample, floating value must later translate into an int */ - feofs_sofs, /* */ - sound_width, /* convenience: x2-x1 */ - wavemulti; /* scale the samples by this value when GL_LINE drawing so it renders the right height */ - - int - offset, /* initial offset value for the wave drawing */ - offset_next, /* when in the wave drawing loop this value is the samples intil the next vert */ - sofs, /* Constrained offset value (~3) for the wave, start */ - eofs, /* ditto, end */ - wavesample, /* inner loop storage if the current wave sample value, used to make the 2 values below */ - wavesamplemin, /* used for finding the min and max wave peaks */ - wavesamplemax, /* ditto */ - subsample_step=4; /* when the sample step is 4 every sample of - the wave is evaluated for min and max values used to draw the wave, - however this is slow ehrn zoomed out so when the sample step is above - 1 (the larger the further out the zoom is) so not evaluate all samples, only some. */ - - signed short* s; - bSound *sound; - uint8_t *stream; - -// XXX audio_makestream(seq->sound); - if(seq->sound==NULL || seq->sound->stream==NULL) return; - - if (seq->flag & SEQ_MUTE) glColor3ub(0x70, 0x80, 0x80); else glColor3ub(0x70, 0xc0, 0xc0); - - sofs = ((int)( FRA2TIME(seq->startdisp-seq->start+seq->anim_startofs)*(float)scene->r.audio.mixrate*4.0 )) & (~3); - eofs = ((int)( FRA2TIME(seq->enddisp-seq->start+seq->anim_startofs)*(float)scene->r.audio.mixrate*4.0 )) & (~3); - - /* clip the drawing area to the screen bounds to save time */ - sample_step= (v2d->cur.xmax - v2d->cur.xmin)/winx; - clipxmin= MAX2(x1, v2d->cur.xmin); - clipxmax= MIN2(x2, v2d->cur.xmax); - - if (sample_step > 1) - subsample_step= ((int)(subsample_step*sample_step*8)) & (~3); - - /* for speedy access */ - midy = (y1+y2)/2; - fsofs= (float)sofs; - feofs_sofs= (float)(eofs-sofs); - sound_width= x2-x1; - sound = seq->sound; - stream = sound->stream; - wavemulti = (y2-y1)/196605; /*y2-y1 is the height*/ - wavesample=0; - - /* we need to get the starting offset value, excuse the duplicate code */ - f=clipxmin; - offset= (int) (fsofs + ((f-x1)/sound_width) * feofs_sofs) & (~3); - - /* start the loop, draw a line per sample_step -sample_step is about 1 line drawn per pixel */ - glBegin(GL_LINES); - for (f=x1+sample_step; f<=clipxmax; f+=sample_step) { - - offset_next = (int) (fsofs + ((f-x1)/sound_width) * feofs_sofs) & (~3); - if (f > v2d->cur.xmin) { - /* if this is close to the last sample just exit */ - if (offset_next >= sound->streamlen) break; - - wavesamplemin = 131070; - wavesamplemax = -131070; - - /*find with high and low of the waveform for this draw, - evaluate small samples to find this range */ - while (offset < offset_next) { - s = (signed short*)(stream+offset); - - wavesample = s[0]*2 + s[1]; - if (wavesamplemin>wavesample) - wavesamplemin=wavesample; - if (wavesamplemax<wavesample) - wavesamplemax=wavesample; - offset+=subsample_step; - } - /* draw the wave line, looks good up close and zoomed out */ - glVertex2f(f, midy-(wavemulti*wavesamplemin) ); - glVertex2f(f, midy-(wavemulti*wavesamplemax) ); - } else { - while (offset < offset_next) offset+=subsample_step; - } - - offset=offset_next; - } - glEnd(); -} - /* draw a handle, for each end of a sequence strip */ static void draw_seq_handle(View2D *v2d, Sequence *seq, float pixelx, short direction) { @@ -660,10 +558,6 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, SpaceSeq *sseq, Sequence * draw_shadedstrip(seq, background_col, x1, y1, x2, y2); /* draw additional info and controls */ - // XXX - if(0) // (seq->type == SEQ_SOUND) - drawseqwave(scene, v2d, seq, x1, y1, x2, y2, ar->winx); - if (!is_single_image) draw_seq_extensions(scene, sseq, seq); diff --git a/source/blender/makesdna/DNA_sound_types.h b/source/blender/makesdna/DNA_sound_types.h index 5f6ebf60865..55b48e4aacd 100644 --- a/source/blender/makesdna/DNA_sound_types.h +++ b/source/blender/makesdna/DNA_sound_types.h @@ -70,57 +70,59 @@ typedef struct Sound3D typedef struct bSound { ID id; + + /** + * The path to the sound file. + */ char name[160]; - void *stream; // AUD_XXX deprecated - struct PackedFile *packedfile; - struct PackedFile *newpackedfile; // AUD_XXX deprecated - void *snd_sound; // AUD_XXX used for AUD_Sound now - struct Ipo *ipo; // AUD_XXX deprecated - float volume, panning; // AUD_XXX deprecated + /** - * Sets the rollofffactor. The rollofffactor is a per-Source parameter - * the application can use to increase or decrease the range of a source - * by decreasing or increasing the attenuation, respectively. The default - * value is 1. The implementation is free to optimize for a rollofffactor - * value of 0, which indicates that the application does not wish any - * distance attenuation on the respective Source. + * The packed file. */ - float attenuation; // AUD_XXX deprecated - float pitch; // AUD_XXX deprecated + struct PackedFile *packedfile; + /** - * min_gain indicates the minimal gain which is always guaranteed for this sound + * The handle for audaspace. */ - float min_gain; // AUD_XXX deprecated + void *handle; + /** - * max_gain indicates the maximal gain which is always guaranteed for this sound + * Deprecated; used for loading pre 2.5 files. */ - float max_gain; // AUD_XXX deprecated + struct PackedFile *newpackedfile; + struct Ipo *ipo; + float volume; + float attenuation; + float pitch; + float min_gain; + float max_gain; + float distance; + int flags; + +/** currently int type; + struct bSound *child_sound;*/ + /** - * Sets the referencedistance at which the listener will experience gain. + * Whether the sound has been changed and must be restarted if playing. */ - float distance; // AUD_XXX deprecated - int flags; // AUD_XXX deprecated - int streamlen; // AUD_XXX deprecated - char channels; // AUD_XXX deprecated - char highprio; // AUD_XXX deprecated - char pad[10]; // AUD_XXX deprecated - - // AUD_XXX NEW - int type; int changed; - struct bSound *child_sound; + + /** + * The audaspace handle for cache. + */ void *cache; - // SOUND_TYPE_LIMITER - float start, end; +/** XXX unused currently // SOUND_TYPE_LIMITER + float start, end;*/ } bSound; +/* XXX unused currently typedef enum eSound_Type { SOUND_TYPE_INVALID = -1, SOUND_TYPE_FILE = 0, SOUND_TYPE_BUFFER, SOUND_TYPE_LIMITER -} eSound_Type; +} eSound_Type;*/ /* spacesound->flag */ #define SND_DRAWFRAMES 1 @@ -142,18 +144,7 @@ typedef struct SpaceSound { int pad2; } SpaceSound; - -#define SOUND_CHANNELS_STEREO 0 -#define SOUND_CHANNELS_LEFT 1 -#define SOUND_CHANNELS_RIGHT 2 - -#define SOUND_FLAGS_LOOP (1 << 0) -#define SOUND_FLAGS_FIXED_VOLUME (1 << 1) -#define SOUND_FLAGS_FIXED_PANNING (1 << 2) #define SOUND_FLAGS_3D (1 << 3) -#define SOUND_FLAGS_BIDIRECTIONAL_LOOP (1 << 4) -#define SOUND_FLAGS_PRIORITY (1 << 5) -#define SOUND_FLAGS_SEQUENCE (1 << 6) /* to DNA_sound_types.h*/ diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp index 07f6f628e06..91a39bd7686 100644 --- a/source/gameengine/Converter/KX_ConvertActuators.cpp +++ b/source/gameengine/Converter/KX_ConvertActuators.cpp @@ -396,7 +396,7 @@ void BL_ConvertActuators(char* maggiename, "\" has no sound datablock." << std::endl; } else - snd_sound = sound->cache ? sound->cache : sound->snd_sound; + snd_sound = sound->cache ? sound->cache : sound->handle; KX_SoundActuator* tmpsoundact = new KX_SoundActuator(gameobj, snd_sound, |