diff options
author | Ton Roosendaal <ton@blender.org> | 2005-05-19 23:58:53 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-05-19 23:58:53 +0400 |
commit | 3fb7442d35e6c8a36f3aaebc7a9175a3b77b5251 (patch) | |
tree | b4cce502420d462013bb5df947e15187789de69c | |
parent | dee5af12e3327dd2dcd80eaef15c44756eb42315 (diff) |
Made TimeLine "Play" also play sound and synchronize with it. Added the
feature with a header button.
Works like audio playback on ALT+A, meaning you have to add the audio
strips in Sequencer. The 'only sync' option for ALT+A doesn't work here.
Also: fixed crash on ESC in audio playback in sequencer.
-rw-r--r-- | source/blender/include/BSE_headerbuttons.h | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 1 | ||||
-rw-r--r-- | source/blender/src/drawview.c | 14 | ||||
-rw-r--r-- | source/blender/src/editscreen.c | 21 | ||||
-rw-r--r-- | source/blender/src/edittime.c | 2 | ||||
-rw-r--r-- | source/blender/src/header_time.c | 12 | ||||
-rw-r--r-- | source/blender/src/headerbuttons.c | 6 |
7 files changed, 44 insertions, 14 deletions
diff --git a/source/blender/include/BSE_headerbuttons.h b/source/blender/include/BSE_headerbuttons.h index 0e4c9440c08..a34ed7821f9 100644 --- a/source/blender/include/BSE_headerbuttons.h +++ b/source/blender/include/BSE_headerbuttons.h @@ -56,7 +56,7 @@ void load_sound_buttons(char *str); /* end of declarations moved from old headerbuttons.c */ void update_for_newframe_muted(void); -void update_for_newframe_nodraw(void); +void update_for_newframe_nodraw(int nosound); void free_matcopybuf(void); void clear_matcopybuf(void); void write_videoscape_fs(void); diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index c6ba84b9a41..cd9bf98776a 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -543,6 +543,7 @@ typedef struct SpaceImaSel { #define TIME_ALL_3D_WIN 2 #define TIME_ALL_ANIM_WIN 4 #define TIME_ALL_BUTS_WIN 8 +#define TIME_WITH_SEQ_AUDIO 16 #endif diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index 2092293211b..4f7fd109621 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -2366,13 +2366,15 @@ int play_anim(int mode) do_all_keys(); do_all_actions(NULL); - /* set all objects on current frame... test_all_displists() needs it */ - base= G.scene->base.first; - while(base) { - if(G.vd->lay & base->lay) where_is_object(base->object); - base= base->next; + if(G.vd) { + /* set all objects on current frame... test_all_displists() needs it */ + base= G.scene->base.first; + while(base) { + if(G.vd->lay & base->lay) where_is_object(base->object); + base= base->next; + } + test_all_displists(); } - test_all_displists(); audiostream_stop(); diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c index 3c42dd3e0e1..9383fc6cc98 100644 --- a/source/blender/src/editscreen.c +++ b/source/blender/src/editscreen.c @@ -92,6 +92,7 @@ #include "BSE_edit.h" #include "BSE_filesel.h" #include "BSE_headerbuttons.h" +#include "BSE_seqaudio.h" #include "BSE_view.h" #include "BPY_extern.h" @@ -1006,9 +1007,23 @@ int has_screenhandler(bScreen *sc, short eventcode) static void animated_screen(bScreen *sc, short val) { - CFRA++; - if(CFRA > EFRA) CFRA= SFRA; - update_for_newframe_nodraw(); + int mute= 1; + + if (U.mixbufsize && (val & TIME_WITH_SEQ_AUDIO)) { + mute= 0; + if(CFRA>=EFRA) { + CFRA= SFRA; + audiostream_stop(); + audiostream_start( CFRA ); + } + else CFRA = audiostream_pos(); + } + else { + CFRA++; + if(CFRA > EFRA) CFRA= SFRA; + } + + update_for_newframe_nodraw(mute); if(val & TIME_ALL_3D_WIN) allqueue(REDRAWVIEW3D, 0); diff --git a/source/blender/src/edittime.c b/source/blender/src/edittime.c index cce611c6d51..e19771d0fdb 100644 --- a/source/blender/src/edittime.c +++ b/source/blender/src/edittime.c @@ -511,7 +511,7 @@ void winqreadtimespace(ScrArea *sa, void *spacedata, BWinEvent *evt) { first= 0; CFRA= cfra; - update_for_newframe_nodraw(); + update_for_newframe_nodraw(1); // 1= nosound timeline_force_draw(stime->redraws); } else PIL_sleep_ms(30); diff --git a/source/blender/src/header_time.c b/source/blender/src/header_time.c index e8d81d13619..2c7a5423abd 100644 --- a/source/blender/src/header_time.c +++ b/source/blender/src/header_time.c @@ -62,9 +62,11 @@ #include "BSE_editipo.h" #include "BSE_filesel.h" #include "BSE_headerbuttons.h" +#include "BSE_seqaudio.h" #include "BSE_time.h" #include "blendef.h" +#include "butspace.h" #include "mydevice.h" void do_time_buttons(ScrArea *sa, unsigned short event) @@ -79,10 +81,16 @@ void do_time_buttons(ScrArea *sa, unsigned short event) break; case B_TL_PLAY: add_screenhandler(G.curscreen, SCREEN_HANDLER_ANIM, stime->redraws); + if(stime->redraws & TIME_WITH_SEQ_AUDIO) + audiostream_start( CFRA ); + break; case B_TL_STOP: rem_screenhandler(G.curscreen, SCREEN_HANDLER_ANIM); + if(stime->redraws & TIME_WITH_SEQ_AUDIO) + audiostream_stop(); allqueue(REDRAWALL, 0); + break; case B_TL_FF: /* end frame */ @@ -325,6 +333,7 @@ static uiBlock *time_framemenu(void *arg_unused) void time_buttons(ScrArea *sa) { + SpaceTime *stime= sa->spacedata.first; uiBlock *block; short xco, xmax; char name[256]; @@ -436,6 +445,9 @@ void time_buttons(ScrArea *sa) xco+= XIC+16; + uiDefIconButBitI(block, TOG, TIME_WITH_SEQ_AUDIO, B_DIFF, ICON_SPEAKER, + xco, 0, XIC, YIC, &(stime->redraws), 0, 0, 0, 0, "Play back and sync with audio from Sequence Editor"); + /* always as last */ sa->headbutlen= xco+2*XIC; diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c index bc098232540..538bd7541f5 100644 --- a/source/blender/src/headerbuttons.c +++ b/source/blender/src/headerbuttons.c @@ -548,10 +548,10 @@ void update_for_newframe_muted(void) do_update_for_newframe(1, 1); } - -void update_for_newframe_nodraw(void) +/* used by new animated UI playback */ +void update_for_newframe_nodraw(int nosound) { - do_update_for_newframe(1, 0); + do_update_for_newframe(nosound, 0); } |