Een Audio CD Afspelen (Translated by Pieterjan Vandegaer from Eyesight Development)

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).

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

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).

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.

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

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.

Happy downloading, and keep on rockin.