Sign in to follow this  
Guest HC001ST - Stick

Unable to stop looping DirectSound with this code.

Recommended Posts

I've got this:

// BOOL32 audio_warning_muted;  // Defined globally in multi-gaugeFLOAT64 FSAPI	lrrpm_cb( PELEMENT_ICON pelement ){	double	rrpm = pelement->source_var.var_value.n;	MODULE_VAR r_rpm = {TURB_ENGINE_1_N2};	lookup_var(&r_rpm);	rrpm = r_rpm.var_value.n;	if (rrpm < 90) {				// Warning condition true		low_rrpm = 1;		if ( audio_warning_muted )			(GaugeStopSound)("lrrpm");		else			(GaugePlaySound)("soundBenchmark.B206B3LowRotor.Loop.wav","lrrpm",1);	}else{		(GaugeStopSound)("lrrpm");		// RRPM Normal (turn off Icon)		low_rrpm = 0;		// Reset audio mute		audio_warning_muted = 0;	}	return FALSE;}// Low Rotor RPM Warning ON bitmap as an icon.// This icon must be invisible when loadingMAKE_ICON(		lrrpm_on_icon,				BMP_LOW_ROTOR_ON,				NULL,				NULL,				IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY | IMAGE_USE_BRIGHT | IMAGE_HIDDEN,				0,				0,0,				TURB_ENGINE_1_N2, 				lrrpm_cb,				ICON_SWITCH_TYPE_SET_CUR_ICON,				1,				0,				0 )PELEMENT_HEADER		lrrpm_on_icon_plist[] ={	&lrrpm_on_icon.header,	NULL};// Low Rotor RPM Warning OFF bitmap is the background.MAKE_STATIC (	lrrpm_off_icon,				BMP_LOW_ROTOR_OFF,				&lrrpm_on_icon_plist,				NULL,				IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY | IMAGE_USE_BRIGHT,				0,				0,0 )PELEMENT_HEADER	lrrpm_list	= &lrrpm_off_icon.header;

which is the relevent part. Other parts are all tested, and working.Here is the gauge call back using gaugesound.dll

void FSAPI lrrpm_gcb (PGAUGEHDR pgauge, int service_id, UINT32 extra_data){	switch(service_id)	{		case	PANEL_SERVICE_PRE_INSTALL:			break;		case	PANEL_SERVICE_PRE_INITIALIZE:			//Register the click sound with FS when loading the panel			if (MGaugeSound == NULL) {MGaugeSound = LoadLibrary("GaugeSound");}			//bg_element = (PELEMENT_STATIC_IMAGE)pgauge->elements_list[0];			GaugePlaySound = (TGaugePlaySound)GetProcAddress(MGaugeSound,"GaugePlaySound");			GaugeStopSound = (TGaugeStopSound)GetProcAddress(MGaugeSound,"GaugeStopSound");			TerminateSounds = (TTerminateSounds)GetProcAddress(MGaugeSound,"TerminateSounds");			break;		case	PANEL_SERVICE_PRE_UPDATE:			//Now show and hide the switch bitmaps by showing and hiding the icons			if ( low_rrpm )			{				// LOW ROTOR WARNING LIGHT ON				SHOW_LISTELEMENT(pgauge->elements_list[0],1);			}else{				// LOW ROTOR WARNING LIGHT OFF				HIDE_LISTELEMENT(pgauge->elements_list[0],1);			}			break;		case	PANEL_SERVICE_PRE_DRAW:			break;		case	PANEL_SERVICE_PRE_KILL:			//Unregister the sound when unloading the panel			MGaugeSound = GetModuleHandle("GaugeSound");			if (MGaugeSound == NULL) {MGaugeSound = LoadLibrary("GaugeSound");}			GaugePlaySound = (TGaugePlaySound)GetProcAddress(MGaugeSound,"GaugePlaySound");			GaugeStopSound = (TGaugeStopSound)GetProcAddress(MGaugeSound,"GaugeStopSound");			TerminateSounds = (TTerminateSounds)GetProcAddress(MGaugeSound,"TerminateSounds");			(TerminateSounds)();			FreeLibrary(MGaugeSound);			break;	}}

You'll note that I am using the background as the "off" bitmap, and a single MAKE_ICON for the "on" condition. The ICON works per the parameters, and I've verfied the BOOL toggles, but for some reason, I can't shut the sound down.Any ideas?Thanks

Share this post

Link to post
Share on other sites
Help AVSIM continue to serve you!
Please donate today!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this