Load3D Sound problem

Blitz3D Forums/Blitz3D Beginners Area/Load3D Sound problem

spriteman(Posted 2003) [#1]
I have an airship circling around my 3d world with a 3d sound assigned to it. I have also created a listener which is attached to my camera so the closer I get to the airship the louder the sound should get. What I move towards it I get is a high pitch sound which is different to the .wav file I loaded, it sounds orrible.

I have a feeling that it could be something to do with the way I am emitting the sound in the main program loop. Anyone else have problems looping a 3d sound from a mesh entity?


jfk EO-11110(Posted 2003) [#2]
>> the way I am emitting the sound in the main program loop <<

could you describe this closer? AFAIK there is no need to "emit" it repeatedly in the mainloop (manually) once it plays in loop mode.


spriteman(Posted 2003) [#3]
I have the following lines to set up my 3d sound outside the main loop,

microphone=CreateListener(camera)
shipbuzz=Load3DSound("airship.wav")
LoopSound=shipbuzz

As the airship is moving around in a circle (Using Sin/cos), I am thinking the sound must move with the entity somehow so I have EmitSound(shipbuzz,airship) in the main loop.

When I move the camera closer to the airship the sound does generate but it sounds rough...

If I move emit sound out of the loop, I hear nothing


Shambler(Posted 2003) [#4]
Try something like

Global gShipSoundPlaying=false


at the start of your program, then in your main loop

If gShipSoundPlaying=false
EmitSound(shipbuzz,airship)
gShipSoundPlaying=true
endif


so that you only start the sound once.


Bot Builder(Posted 2003) [#5]
uh,
LoopSound=shipbuzz

dhouldn't this be
LoopSound shipbuzz

???


spriteman(Posted 2003) [#6]
Nice one Shambler that worked a treat. I guess the little if-endif controls the sound logic in the mail loop.

bot builder - yep - should have been loopsound shipbuzz.

I now get a looping engine noise which gets louder the closer I get to the object. Perfect..


jfk EO-11110(Posted 2003) [#7]
I guess you have to "emitsound" only once, before the mainloop, right?


spriteman(Posted 2003) [#8]
jfk,

Correct. Set up the sound loop outside the main program and activate it once within the main loop.

I think what i was experiencing was a continuous trigger of the sound through the speakers before adding the if-endif routine Shambler mentioned......


BlitzSupport(Posted 2003) [#9]
You can just call EmitSound after loading/looping too... no need to wait until the main loop or repeatedly check it's playing (assuming it's meant to just keep looping). See the Load3DSound bit in this: http://www.blitzbasic.co.nz/codearcs/codearcs.php?code=340


spriteman(Posted 2003) [#10]
James,

Yes it just needs to loop constantly,

So prior to the main loop something like,

shipbuzz = Load3DSound ("airship.wav")
If shipbuzz
LoopSound shipbuzz
CreateListener (cam)
shipchannel = EmitSound (shipbuzz, airship)
EndIf

Then Just turn the channel on and off when required in the main loop....Nice..

Cheers,