oh great, now i feel like an idiot!

Blitz3D Forums/Blitz3D Beginners Area/oh great, now i feel like an idiot!

I've been stumped by something that should be simple, something that was very simple on a Pygame engine (python made graphic).

How would i go about looping the same sound while a key is held down? I can get it to play, but unfortunately, it bombs it about 1000 times a second, every time the loop processes. Ouch.

I can also get it to loop once the key is hit, but I can't STOP looping it, once the key is no longer held down. I'm afraid to use the "freesound" command, cause loading and freeing a sound every time a key is held, could really bog up the harddrive.

Any help is appreciated. Thanks :D

You need to use the SoundChannel commands.

mySoundPlaying=False
mySound=LoadSound("mySample.wav")
LoopSound mySound

While Not KeyHit(1)
	If KeyDown(57); SPACE KEY
		If mySoundPlaying=False
			myChannel=PlaySound(mySound)
			mySoundPlaying=True
		EndIf	
	Else
		StopChannel myChannel
		mySoundPlaying=False
	EndIf
Wend

FreeSound mySound


great! at first it didn't work, so i went around tinkering with a few things, i'm not sure what i did, but it worked! thanks!

great! at first it didn't work

That's odd -- it should just need LoadSound pointing towards a legitimate wav file. No matter... glad you're sorted.

Why not use ChannelPlaying() instead of using a separate var:
mySound=LoadSound("mySample.wav")
LoopSound mySound

While Not KeyHit(1)
	If KeyDown(57); SPACE KEY
		If Not ChannelPlaying(myChannel)
			myChannel=PlaySound(mySound)
		EndIf	
	Else
		If ChannelPlaying(myChannel)
			StopChannel myChannel
		EndIf
	EndIf
Wend

FreeSound mySound


Why not use ChannelPlaying() instead of using a separate var

Because he might eventually want to restrict several sounds to the same channel and manage their priority manually.