[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22534] branches/blender2.5/blender/source /blender: 2.5: Sound

Brecht Van Lommel brecht at blender.org
Sun Aug 16 22:37:22 CEST 2009


Revision: 22534
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22534
Author:   blendix
Date:     2009-08-16 22:37:22 +0200 (Sun, 16 Aug 2009)

Log Message:
-----------
2.5: Sound

* Move sound_init to make sure it gets called everytime user
  preferences is reloaded.
* Merged sound_reinit and sound_init. One used user preferences
  while the other did not, don't see the point of this, so just
  made it always use user preferences now.
* Timeline header audio sync option now controls scene flag
  rather than timeline flag. Since it uses the same playback
  operator now, there is no distinction anymore.
* Added boolean property sync to animation play operator, to sync
  with audio or not. Uses scene setting if property is not set.
* Playback stop button in info header now calls operator, so sounds
  stop playing too.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sound.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/sound.c
    branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/space_time/time_header.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_userdef.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sound.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sound.h	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sound.h	2009-08-16 20:37:22 UTC (rev 22534)
@@ -39,8 +39,6 @@
 
 void sound_init();
 
-void sound_reinit(struct bContext *C);
-
 void sound_exit();
 
 struct bSound* sound_new_file(struct Main *main, char* filename);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/sound.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/sound.c	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/sound.c	2009-08-16 20:37:22 UTC (rev 22534)
@@ -34,20 +34,8 @@
 void sound_init()
 {
 	AUD_Specs specs;
-	specs.channels = AUD_CHANNELS_STEREO;
-	specs.format = AUD_FORMAT_S16;
-	specs.rate = AUD_RATE_44100;
+	int device, buffersize, success;
 
-	if(!AUD_init(AUD_SDL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE))
-		if(!AUD_init(AUD_OPENAL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE*4))
-			AUD_init(AUD_NULL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE);
-}
-
-void sound_reinit(struct bContext *C)
-{
-	AUD_Specs specs;
-	int device, buffersize;
-
 	device = U.audiodevice;
 	buffersize = U.mixbufsize;
 	specs.channels = U.audiochannels;
@@ -66,8 +54,15 @@
 	if(specs.channels <= AUD_CHANNELS_INVALID)
 		specs.channels = AUD_CHANNELS_STEREO;
 
-	if(!AUD_init(device, specs, buffersize))
-		AUD_init(AUD_NULL_DEVICE, specs, buffersize);
+	if(!AUD_init(device, specs, buffersize)) {
+		if(device == AUD_SDL_DEVICE)
+			success= AUD_init(AUD_OPENAL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE*4);
+		else
+			success= AUD_init(AUD_SDL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE*4);
+
+		if(!success)
+			AUD_init(AUD_NULL_DEVICE, specs, buffersize);
+	}
 }
 
 void sound_exit()

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2009-08-16 20:37:22 UTC (rev 22534)
@@ -94,7 +94,7 @@
 void	ED_screen_delete_scene(struct bContext *C, struct Scene *scene);
 void	ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event);
 void	ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
-void	ED_screen_animation_timer(struct bContext *C, int redraws, int enable);
+void	ED_screen_animation_timer(struct bContext *C, int redraws, int sync, int enable);
 int		ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
 void	ED_screen_full_prevspace(struct bContext *C);
 

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen_types.h	2009-08-16 20:37:22 UTC (rev 22534)
@@ -31,9 +31,9 @@
 
 /* for animplayer */
 typedef struct ScreenAnimData {
-	ARegion *ar;	/* do not read from this, only for comparing if region exists */
+	ARegion *ar;		/* do not read from this, only for comparing if region exists */
 	int redraws;
-	int flag;		/* flags for playback */
+	int flag;			/* flags for playback */
 } ScreenAnimData;
 
 /* for animplayer */
@@ -42,6 +42,10 @@
 	ANIMPLAY_FLAG_REVERSE		= (1<<0),
 		/* temporary - playback just jumped to the start/end */
 	ANIMPLAY_FLAG_JUMPED		= (1<<1),
+		/* drop frames as needed to maintain framerate */
+	ANIMPLAY_FLAG_SYNC			= (1<<2),
+		/* don't drop frames (and ignore AUDIO_SYNC flag) */
+	ANIMPLAY_FLAG_NO_SYNC		= (1<<3),
 };
 
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-08-16 20:37:22 UTC (rev 22534)
@@ -1579,7 +1579,7 @@
 			WM_jobs_stop(CTX_wm_manager(C), CTX_wm_screen(C));
 			break;
 		case B_STOPANIM:
-			ED_screen_animation_timer(C, 0, 0);
+			WM_operator_name_call(C, "SCREEN_OT_animation_play", WM_OP_INVOKE_SCREEN, NULL);
 			break;
 	}
 }

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2009-08-16 20:37:22 UTC (rev 22534)
@@ -1516,7 +1516,7 @@
 /* redraws: uses defines from stime->redraws 
  * enable: 1 - forward on, -1 - backwards on, 0 - off
  */
-void ED_screen_animation_timer(bContext *C, int redraws, int enable)
+void ED_screen_animation_timer(bContext *C, int redraws, int sync, int enable)
 {
 	bScreen *screen= CTX_wm_screen(C);
 	wmWindow *win= CTX_wm_window(C);
@@ -1532,7 +1532,8 @@
 		screen->animtimer= WM_event_add_window_timer(win, TIMER0, (1.0/FPS));
 		sad->ar= CTX_wm_region(C);
 		sad->redraws= redraws;
-		sad->flag= (enable < 0) ? ANIMPLAY_FLAG_REVERSE : 0;
+		sad->flag= (enable < 0)? ANIMPLAY_FLAG_REVERSE: 0;
+		sad->flag= (sync == 0)? ANIMPLAY_FLAG_NO_SYNC: (sync == 1)? ANIMPLAY_FLAG_SYNC: 0;
 		screen->animtimer->customdata= sad;
 		
 	}

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-08-16 20:37:22 UTC (rev 22534)
@@ -2227,17 +2227,25 @@
 		wmTimer *wt= screen->animtimer;
 		ScreenAnimData *sad= wt->customdata;
 		ScrArea *sa;
+		int sync;
+
+		/* sync, don't sync, or follow scene setting */
+		if(scene->audio.flag & ANIMPLAY_FLAG_SYNC) sync= 1;
+		else if(scene->audio.flag & ANIMPLAY_FLAG_NO_SYNC) sync= 0;
+		else sync= (scene->audio.flag & AUDIO_SYNC);
 		
-		if(scene->audio.flag & AUDIO_SYNC) {
+		if(sync) {
+			/* skip frames */
 			int step = floor(wt->duration * FPS);
-			if (sad->flag & ANIMPLAY_FLAG_REVERSE) // XXX does this option work with audio?
+			if(sad->flag & ANIMPLAY_FLAG_REVERSE) // XXX does this option work with audio?
 				scene->r.cfra -= step;
 			else
 				scene->r.cfra += step;
 			wt->duration -= ((float)step)/FPS;
 		}
 		else {
-			if (sad->flag & ANIMPLAY_FLAG_REVERSE)
+			/* one frame +/- */
+			if(sad->flag & ANIMPLAY_FLAG_REVERSE)
 				scene->r.cfra--;
 			else
 				scene->r.cfra++;
@@ -2325,18 +2333,22 @@
 	bScreen *screen= CTX_wm_screen(C);
 	
 	if(screen->animtimer) {
-		ED_screen_animation_timer(C, 0, 0);
+		ED_screen_animation_timer(C, 0, 0, 0);
 		sound_stop_all(C);
 	}
 	else {
 		ScrArea *sa= CTX_wm_area(C);
 		int mode= (RNA_boolean_get(op->ptr, "reverse")) ? -1 : 1;
+		int sync= -1;
+
+		if(RNA_property_is_set(op->ptr, "sync"))
+			sync= (RNA_boolean_get(op->ptr, "sync"));
 		
 		/* timeline gets special treatment since it has it's own menu for determining redraws */
 		if ((sa) && (sa->spacetype == SPACE_TIME)) {
 			SpaceTime *stime= (SpaceTime *)sa->spacedata.first;
 			
-			ED_screen_animation_timer(C, stime->redraws, mode);
+			ED_screen_animation_timer(C, stime->redraws, sync, mode);
 			
 			/* update region if TIME_REGION was set, to leftmost 3d window */
 			if(screen->animtimer && (stime->redraws & TIME_REGION)) {
@@ -2347,7 +2359,7 @@
 			}
 		}
 		else {
-			ED_screen_animation_timer(C, TIME_REGION|TIME_ALL_3D_WIN, mode);
+			ED_screen_animation_timer(C, TIME_REGION|TIME_ALL_3D_WIN, sync, mode);
 			
 			if(screen->animtimer) {
 				wmTimer *wt= screen->animtimer;
@@ -2373,6 +2385,7 @@
 	ot->poll= ED_operator_screenactive;
 	
 	RNA_def_boolean(ot->srna, "reverse", 0, "Play in Reverse", "Animation is played backwards");
+	RNA_def_boolean(ot->srna, "sync", 0, "Sync", "Drop frames to maintain framerate and stay in sync with audio.");
 }
 
 /* ************** border select operator (template) ***************************** */

Modified: branches/blender2.5/blender/source/blender/editors/space_time/time_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/time_header.c	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/editors/space_time/time_header.c	2009-08-16 20:37:22 UTC (rev 22534)
@@ -397,7 +397,6 @@
 void time_header_buttons(const bContext *C, ARegion *ar)
 {
 	ScrArea *sa= CTX_wm_area(C);
-	SpaceTime *stime= CTX_wm_space_time(C);
 	Scene *scene= CTX_data_scene(C);
 	wmTimer *animtimer= CTX_wm_screen(C)->animtimer;
 	uiBlock *block;
@@ -568,8 +567,8 @@
 	
 	xco+= XIC;
 	
-	uiDefIconButBitI(block, TOG, TIME_WITH_SEQ_AUDIO, B_DIFF, ICON_SPEAKER,
-					 xco, yco, XIC, YIC, &(stime->redraws), 0, 0, 0, 0, "Play back and sync with audio from Sequence Editor");
+	uiDefIconButBitS(block, TOG, AUDIO_SYNC, B_DIFF, ICON_SPEAKER,
+					 xco, yco, XIC, YIC, &(scene->audio.flag), 0, 0, 0, 0, "Play back and sync with audio from Sequence Editor");
 	
 	
 	/* always as last  */

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h	2009-08-16 20:23:34 UTC (rev 22533)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h	2009-08-16 20:37:22 UTC (rev 22534)
@@ -821,7 +821,7 @@
 #define TIME_ALL_3D_WIN			2
 #define TIME_ALL_ANIM_WIN		4
 #define TIME_ALL_BUTS_WIN		8
-#define TIME_WITH_SEQ_AUDIO		16
+#define TIME_WITH_SEQ_AUDIO		16		// deprecated
 #define TIME_SEQ				32
 #define TIME_ALL_IMAGE_WIN		64
 #define TIME_CONTINUE_PHYSICS	128

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list