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:

Const SND_ASYNC = &H1
Const SND_LOOP = &H8
Const SND_NODEFAULT = &H2
Const SND_SYNC = &H0
Const SND_NOSTOP = &H10
Const SND_MEMORY = &H4

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.

Translated by Pieterjan Vandegaer from Eyesight Development.