SNDOPEN: Difference between revisions
Jump to navigation
Jump to search
Code by Johny B
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
(Added new format information. Updated notes on how to deal with invalid handles. Improved example #2) |
(Added notes on the new miniaudio backend capabilities$ (STREAM). This is simply ignored with the OpenAL backend. So, we are good that way.) |
||
Line 4: | Line 4: | ||
{{PageSyntax}} | {{PageSyntax}} | ||
: {{Parameter|soundHandle&}} = [[_SNDOPEN]]({{Parameter|fileName$}}) | : {{Parameter|soundHandle&}} = [[_SNDOPEN]]({{Parameter|fileName$}}[, {{Parameter|capabilities$}}]) | ||
Line 10: | Line 10: | ||
* Returns a [[LONG]] {{Parameter|soundHandle&}} value to the sound file in memory. '''A value less than one means the sound could not be loaded.''' | * Returns a [[LONG]] {{Parameter|soundHandle&}} value to the sound file in memory. '''A value less than one means the sound could not be loaded.''' | ||
* The literal or variable [[STRING]] sound {{Parameter|fileName$}} can be '''WAV, FLAC, OGG, MP3, MID, IT, XM, S3M, MOD or RAD (v2 only)''' file types. | * The literal or variable [[STRING]] sound {{Parameter|fileName$}} can be '''WAV, FLAC, OGG, MP3, MID, IT, XM, S3M, MOD or RAD (v2 only)''' file types. | ||
* The literal or variable [[STRING]] {{Parameter|capabilities$}} is optional but can be '''STREAM'''. Anything else is ignored. | |||
* Specifying '''STREAM''' as a second parameter will "stream" the sound into memory rather than fully decoding it. This is good when we want to play long sounds as background music and want to avoid loading delays. | |||
* Short sounds should not be loaded using '''STREAM'''. Also, [[_MEMSOUND]] will not work for sounds loaded using '''STREAM'''. | |||
* '''Always check the handle value returned is greater than zero before attempting to play the sound.''' | * '''Always check the handle value returned is greater than zero before attempting to play the sound.''' | ||
* 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. | * 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. | ||
Line 27: | Line 30: | ||
{{CodeStart}} | {{CodeStart}} | ||
' This examples load, plays and then bounces the sound between the left and right channels | ' This examples load, plays and then bounces the sound between the left and right channels | ||
Laff& = {{Cl|_SNDOPEN}}("KONGlaff.ogg") 'load sound file and get LONG handle value | Laff& = {{Cl|_SNDOPEN}}("KONGlaff.ogg", "stream") 'load sound file and get LONG handle value | ||
{{Cl|IF}} Laff& > 0 {{Cl|THEN}} | {{Cl|IF}} Laff& > 0 {{Cl|THEN}} | ||
{{Cl|_SNDPLAY}} Laff& 'play sound | {{Cl|_SNDPLAY}} Laff& 'play sound | ||
Line 50: | Line 53: | ||
'' | ''Snippet 3:'' Playing a file and controlling playback: | ||
{{CodeStart}} | {{CodeStart}} | ||
s& = {{Cl|_SNDOPEN}}("song.ogg") | s& = {{Cl|_SNDOPEN}}("song.ogg") |
Revision as of 07:57, 27 August 2022
The _SNDOPEN function loads a sound file into memory and returns a LONG handle value above 0.
Syntax
- soundHandle& = _SNDOPEN(fileName$[, capabilities$])
Description
- Returns a LONG soundHandle& value to the sound file in memory. A value less than one means the sound could not be loaded.
- The literal or variable STRING sound fileName$ can be WAV, FLAC, OGG, MP3, MID, IT, XM, S3M, MOD or RAD (v2 only) file types.
- The literal or variable STRING capabilities$ is optional but can be STREAM. Anything else is ignored.
- Specifying STREAM as a second parameter will "stream" the sound into memory rather than fully decoding it. This is good when we want to play long sounds as background music and want to avoid loading delays.
- Short sounds should not be loaded using STREAM. Also, _MEMSOUND will not work for sounds loaded using STREAM.
- Always check the handle value returned is greater than zero before attempting to play the sound.
- 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 Play WAV sounds library to check it or convert the sound file to FLAC, OGG or MP3.
Examples
Snippet 1: 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! |
Snippet 2: Playing a sound from 2 different speakers based on program results.
' This examples load, plays and then bounces the sound between the left and right channels Laff& = _SNDOPEN("KONGlaff.ogg", "stream") 'load sound file and get LONG handle value IF Laff& > 0 THEN _SNDPLAY Laff& 'play sound ELSE PRINT "Failed to load sound file." END END IF PRINT "Press ESC to stop." dir = 0.01 DO IF laffx! <= -1 THEN dir = 0.01 IF laffx! >= 1 THEN dir = -0.01 laffx! = laffx! + dir LOCATE , 1: PRINT USING "Balance = ##.##"; laffx!; _SNDBAL Laff&, laffx! 'balance sound to left or right speaker _LIMIT 60 LOOP WHILE _SNDPLAYING(Laff&) AND _KEYHIT <> 27 |
Snippet 3: 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)