mirror of
https://github.com/QB64Official/qb64.git
synced 2024-09-28 11:17:47 +00:00
115 lines
3.6 KiB
Markdown
115 lines
3.6 KiB
Markdown
|
The [_SNDOPEN](_SNDOPEN) function loads a sound file into memory and returns a [LONG](LONG) handle value above 0.
|
||
|
|
||
|
## Syntax
|
||
|
|
||
|
> soundHandle& = [_SNDOPEN](_SNDOPEN)(fileName$)
|
||
|
|
||
|
## Description
|
||
|
|
||
|
* Returns a [LONG](LONG) soundHandle& value to the sound file in memory. **A zero value means the sound could not be loaded.**
|
||
|
* The literal or variable [STRING](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](_SNDPLAYFILE) which plays a sound file directly from the disk and does not use a handle value.
|
||
|
* Handles can be closed with [_SNDCLOSE](_SNDCLOSE) when the sound is no longer necessary.
|
||
|
* If a WAV sound file won't play, try it using the Windows [Windows Libraries](Windows-Libraries) to check it or convert the sound file to OGG.
|
||
|
* The raw audio data can be accessed with [_MEMSOUND](_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.
|
||
|
|
||
|
```vb
|
||
|
|
||
|
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.
|
||
|
|
||
|
```vb
|
||
|
|
||
|
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:
|
||
|
|
||
|
```vb
|
||
|
|
||
|
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](_SNDCLOSE), [_SNDPLAY](_SNDPLAY), [_SNDSTOP](_SNDSTOP)
|
||
|
* [_SNDPAUSE](_SNDPAUSE), [_SNDLOOP](_SNDLOOP), [_SNDLIMIT](_SNDLIMIT)
|
||
|
* [_SNDSETPOS](_SNDSETPOS), [_SNDGETPOS](_SNDGETPOS)
|
||
|
* [_SNDPLAYING](_SNDPLAYING), [_SNDPAUSED](_SNDPAUSED)
|
||
|
* [_SNDCOPY](_SNDCOPY), [_SNDPLAYCOPY](_SNDPLAYCOPY)
|
||
|
* [_SNDBAL](_SNDBAL), [_SNDLEN](_SNDLEN), [_SNDVOL](_SNDVOL)
|
||
|
* [_SNDPLAYFILE](_SNDPLAYFILE) (plays a named sound file directly and closes)
|
||
|
* [_SNDRAW](_SNDRAW), [_SNDRATE](_SNDRATE), [_SNDRAWLEN](_SNDRAWLEN) (raw sounds without files)
|
||
|
* [_MEMSOUND](_MEMSOUND)
|