The _SNDOPEN function loads a sound file into memory and returns a LONG handle value above 0.
Syntax
soundHandle& = _SNDOPEN(fileName$)
Description
- Returns a LONG soundHandle& value to the sound file in memory. A zero value means the sound could not be loaded.
- The literal or variable STRING sound fileName$ can be WAV, OGG or MP3 file types.
- Always check the handle value returned is greater than zero before attempting to play the sound.
- Make sure the variable is set to 0 before using _SNDOPEN.
- The handle can be used by most of the _SND sound playing functions and statements in QB64 except _SNDPLAYFILE which plays a sound file directly from the disk and does not use a handle value.
- Handles can be closed with _SNDCLOSE when the sound is no longer necessary.
- If a WAV sound file won’t play, try it using the Windows Windows Libraries to check it or convert the sound file to OGG.
- The raw audio data can be accessed with _MEMSOUND.
Example(s)
Loading a sound file to use in the program later. Only load it once and use the handle any time you want.
h& = _SNDOPEN("dog.wav")
IF h& = 0 THEN BEEP ELSE _SNDPLAY h& 'check for valid handle before using!
Playing a sound from 2 different speakers based on program results.
Laff& = _SNDOPEN("KONGlaff.ogg") 'load sound file and get LONG handle value
IF LaffX! < -1 THEN LaffX! = -1 'set full volume to left speaker
IF LaffX! > 1 THEN LaffX! = 1 'set full volume to right speaker
_SNDBAL Laff&, LaffX! 'balance sound to left or right speaker
_SNDPLAY Laff& 'play sound
Playing a file and controlling playback:
s& = _SNDOPEN("song.ogg")
PRINT "READY"; s&
_SNDPLAY s&
_SNDLOOP s&
xleft = -1
xright = 1
DO
k$ = INKEY$
SELECT CASE k$
CASE "f"
xleft = xleft - 0.1
_SNDBAL s&, xleft, , , 1
CASE "g"
xleft = xleft + 0.1
_SNDBAL s&, xleft, , , 1
CASE "h"
xright = xright - 0.1
_SNDBAL s&, xright, , , 2
CASE "j"
xright = xright + 0.1
_SNDBAL s&, xright, , , 2
CASE "n"
volume = volume - 0.1
_SNDVOL s&, volume
CASE "m"
volume = volume + 0.1
_SNDVOL s&, volume
CASE "p"
_SNDPAUSE s&
CASE " "
_SNDPLAY s&
CASE "i"
PRINT _SNDPLAYING(s&)
PRINT _SNDPAUSED(s&)
SLEEP
CASE "b"
_SNDSETPOS s&, 110
CASE "l"
_SNDLIMIT s&, 10
PRINT "LIM"
SLEEP
CASE "k"
_SNDSTOP s&
CASE "c"
_SNDCLOSE s&
SLEEP
s2& = _SNDOPEN("song.ogg")
CASE "d"
s2& = _SNDCOPY(s&)
_SNDPLAY s2&
END SELECT
LOCATE 1, 1
PRINT xleft, xright, volume, _SNDGETPOS(s&); " "
LOOP
See Also
- _SNDCLOSE, _SNDPLAY, _SNDSTOP
- _SNDPAUSE, _SNDLOOP, _SNDLIMIT
- _SNDSETPOS, _SNDGETPOS
- _SNDPLAYING, _SNDPAUSED
- _SNDCOPY, _SNDPLAYCOPY
- _SNDBAL, _SNDLEN, _SNDVOL
- _SNDPLAYFILE (plays a named sound file directly and closes)
- _SNDRAW, _SNDRATE, _SNDRAWLEN (raw sounds without files)
- _MEMSOUND