_SNDOPEN - QB64Official/qb64 GitHub Wiki

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