ATTENTION READERS! Lucky's VB Gaming Site is no longer active. For updated game programming information and tutorials, please visit The Game Programming Wiki!
Afspelen van Wave Bestanden
Hier ben je dan, aan het kijken naar een programma dat je
gemaakt hebt, en in je zelf denk je "Vent, als ik nu eens
wist hoe ik zo een poign geluidje kan laten horen wanneer de
gebruiken op deze knop drukt." Mijn vriend, wil je niet
spelen met de ding-e-ling?
Stop met zeveren Lucky.
Ok ok, hier is de API aanroep dat je nodig hebt om wave
bestanden af te spelen:
Private Declare Function sndPlaySound
Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal
lpszSoundName As String, ByVal uFlags As Long) As Long
Ajjj, en kijk eens wat een struize functie ze geworden is!
Alles wat je moet doen om een wave bestand te spelen is de
functie vertellen wat bestand je graag zou horen (of in computer
taal: ByVal lpszSoundName As String) en de manier waarop je het
wil afspelen: (ByVal uFlags As Long).
Eerst dit. Ik zou graag een wave bestand spelen in mijn
windows\media directory dat "ding.wav" genoemd is, dus
we gaan aab het lpszSoundName argument de waarde
"c:\windows\media\ding.wav" geven. Meer is er niet aan!
Als ding.wav in de zelfde map als mijn programma zelf zou staan
zou ik de waarde ' App.path & "ding.wav" '
doorgeven, nu kan mijn programma altijd werken zodat ding.wav in
dezelfde map zit. ("App.path" heeft de waarde(string)
met het pad naar de directory waarin het programma staat).
Ten tweede. Ik zou graag mijn wave bestand zichzelf telkens
laten herhalen(loop). Hoe zeg ik dit tegen de functie? Wel, de
meest API aanroepen hebben standaar wat constanten en dat is geen
uitzondering in deze functie:
Om mijn wave bestand zich te laten herhalen, hoeven we enkel
SND_LOOP te declareren in mijn declaratie sectie van de code en
dan SND_LOOP als mijn uFlags argument opgeven. Dus de
uiteindelijke functie aanroep zou dit moeten zijn:
sndPlaySound App.path & "\ding.wav", SND_LOOP
Een herhaling(loop) is natuurlijk niet de enige manier om een
wave bestand af te spelen(God zij dank!). Zoals je kan zien zijn
hier nog wat andere constanten die je kan gebruiken:
SND_ASYNC laat ons toe om wave bestanden te spelen met de
mogelijkheid om wave bestanden die al aan het spelen zijn te
onderbreken. Met dat bedoel ik dat als we onze wave afspelen het
gehoord zal worden.
SND_NODEFAULT verzekert ons dat als het opgegeven wave bestand
niet gevonden kan worden er zeker geen ander geluid in zijn
plaats zal gespeeld worden (zoals het standaard windows-geluid).
SND_SYNC speelt een wave bestand, maar het 'bevriest" het
programma totdat de wave gedaan heeft met spelen. Dit is zeer
irritant als je alleen maar van plan was om een geluid in de
achtergrond van ons programma te plaatsen.
SND_NOSTOP verzekert ons dat als een wave bestand momenteel
aan het spelen is, ons wave bestand het niet zal onderbreken.
Gebruik dit als je wilt dat je wave's nooit te vroeg be-eindigt
zullen worden.
SND_MEMORY speelt een wave bestand dat al in het geheugen is
opgeslagen. De routine om een wave file naar het werkgeheugen te
schrijven zal hier niet getoond worden, maar het is gewoon het
wave bestand in een string op te slagen door een
"Get"-instructie te gebruiken (Zorg ervoor dat de
string de juiste grote heeft) en geef dan die string als een
argument op.
Als we meer dan 1 van deze constanten te gebruiken, kunnen we
ze linken met een "or" statement, zo zullen beide
constanten werken. Bijvoorbeeld, het is het beste om SND_ASYNC
tesamen met SND_LOOP te gebruiken zodat het programma verder kan
werken terwijl het wave-bestand aan het spelen is, als je
SND_SYNC met SND_LOOP zou gebruiken, zouden we de controlen over
je programma nooit meer terugkrijgen! Voorbeeld:
sndPlaySound App.path &
"\ding.wav", SND_ASYNC or SND_LOOP
Dit was alles wat je kan weten over wave bestanden te spelen
door gebruik te maken van de windows API. Voor geavanceerde
geluidsfuncties, zullen we het DirectSound component van DirectX
moeten gebruiken.
Om een voorbeeld hierover te downloaden, bekijk dan eens de Files Pagina of klik hier om het nu te downloaden.