ATTENTION READERS! Lucky's VB Gaming Site is no longer active. For updated game programming information and tutorials, please visit The Game Programming Wiki!
Ooit gewenst dat je Audio Cd's van binnenin Visual Basic
programma's kan afspelen? Wel, je hebt dat waarschijnlijk niet
gewenst. Maar ik wel, dus heb ik het allemaal uitgedacht!
Het voordeel van Audio CD's afspelen (in tegenstelling tot grote
wave bestanden van de harde schijf afspelen) is dat het zeer
weinig van je CPU vraagt, en je kan nog altijd andere
geluidseffecten er bovenop afspelen. Ideaal als je van plan bent
om je spel op CD ROM te verspreiden. Simpelweg je muziek als
audio tracks op de CD opslaan tesamen met de bestanden van je
spel.
De meeste coole dingen dat je met Visual Basic kan doen komen
meestal uit een soort van API aanroep, en dit is geen
uitzondering. Je moet het MCI (Media Control Interface)
gebruiken:
Private Declare Function mciSendString
Lib "winmm.dll" Alias "mciSendStringA" (ByVal
lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hwndCallback As Long) As Long
Het "lpstrCommand" is waar jij de MCI zegt wat je
graag zou doen, ik zal de voorbeelden later tonen.
"lpstrReturnString" is de string dat je doorgeeft aan
de functie wanneer je een return-waarde wilt krijgen.
"uReturnLength" is simpelweg de lengte van de string
dat je doorgegeven hebt als "lpstrReturnString", en
"hwndCallback"... wel ik weet niet waar dit voor dient,
geef gewoon nul (0) door en het werkt :)
Dus, hoe kan je deze functie nuttig gebruiken? Het staat
allemaal in het "lpstrCommand". Eerst zullen we de MCI
cd audio sessie moet initiëren(starten).
mciSendString "close
all", 0, 0, 0
mciSendString "open cdaudio alias cd wait
shareable", 0, 0, 0
mciSendString "set cd time format tmsf wait",
0, 0, 0
We geven "close all" door om alle audio dat
momenteel aan het spelen is te stoppen. "open cdaudio alias
cd wait shareable" start de MCI CD audio, en "set cd
time format tmsf wait" start het CD timing formaat
mciSendString "play cd",
0, 0, 0
Als je de "play cd" string doorstuurt zal je de CD
op het huidige nummer(cd-track) op de huidige tijd starten. Als
je nog geen track geselecteerd hebt zal automatisch de 1ste track
gekozen worden(en die track van in het begin afgespeeld).
mciSendString "stop cd
wait", 0, 0, 0
Dit zal de CD stoppen waar het momenteel is. Het zal NIET
opnieuw starten aan het begin van de track, het is meer zoals een
pauze functie dan een stop functie. Als je "play cd"
terug doorstuurt zal het verder gaan waar het de vorige keer
gestopt is.
mciSendString "seek cd to
" & CurrentTrack, 0, 0, 0
Deze functie zal "CurrentTrack" overslaan waardat
CurrentTrack een integer van 1 tot het maximum nummer van tracks
op de CD. Gebruik enkel deze functie als je tevoren de "stop
cd wait" functie hebt aangeroepen, anders gaat het er nog
lelijk uitzien :)
Dim Tracks As String * 30
Dim NumTracks as Integer
mciSendString "status cd
number of tracks wait", Tracks, Len(Tracks), 0
NumTracks = CInt(Mid$(Tracks, 1, 2))
Om te bepalen hoeveel tracks er op de CD staan, moeten we
eerst een string van 30 karakters maken en ze doorsturen als
"lpstrReturnString". Na het doorsturen "status cd
number of tracks wait", de "Tracks" zal nu gevuld
zijn met de nodige informatie. Deze informatie zal bijgehouden
worden in de eerste 2 karakters van de string. Zelfs al hebben we
maar 2 karakters echt gebruikt moet je toch nog een string van 30
karakters doorsturen omdat dit door de functie noodzakelijk is.
Dit zijn de enige commandos die je nodig hebt om een audio CD
af te spelen. Ik heb een CD SPeler gemaakt om deze tutorial verder
duidelijk te maken.