Ältere Basic-Versionen erlaubten es teilweise, Töne zu programmieren. Das kann Visual Basic (theoretisch und beinahe) auch. Es gibt nämlich den Uralt-Befehl "Beep", der ein Tönchen erzeugen soll. Allerdings hat man mit ihm wenig Freude. Er ist nämlich auf modernen Rechnern so kurz, daß man ihn nicht mehr hören kann. Wiederholt man ihn immer wieder, dann reicht es bestenfalls zu einem Knattern des im Rechner eingebauten Lautsprechers (Falls der noch da ist!).
Musik oder Sprachdateien können ebenfalls mit Visual Basic allein nicht abgespielt werden. Hier muß weiter ausgeholt werden.
Die API von Windows, das "Application Programming Interface", steht ähnlich wie die GDI für den Nutzer zur Verfügung. Es enthält viele nützliche Routinen, mit deren Hilfe man alle die Dinge realisieren kann, die in Visual Basic selbst nicht vorgesehen sind. Wie bei GDI-Aufrufen muss eine Reihe von Vorkehrungen getroffen werden. Etwa 1500 API-Funktionen sind verfügbar. Nicht alle sind in Visual Basic verwendbar. Der Grund ist, daß für die API-Aufrufe meist bestimmte Variable erforderlich sind. Visual Basic enthält nicht alle dabei vorkommenden Datentypen. Für Zwecke der Tonerzeugung allgemein (Ansprechen des eingebauten Lautsprechers oder der Soundkarte) stehen die Funktionen sndPlaySound, PlaySound, Beep, MessageBeep u. A. zu Verfügung. Unten sind die zugehörigen Aufrufe gezeigt.
| Declare Function MessageBeep Lib "user32" Alias "MessageBeep" (ByVal wType As Long) As Long |
Im Programm bringe man dann zum Probieren dies unter:
| Dim i As Long for i = 0 to 250 MessageBeep(i) next |
Beim Durchlaufen dieses Codes hört man alle eingestellten akustischen Signale nacheinander. (Wieviele Nummern zulässig sind, weiß ich nicht!). Gleich nach längeren Experimenten weiß man, welche Systemtöne zu welchen Nummern gehören. Daß ein zweiter Programmnutzer auf seinem Rechner die gleichen Signaltöne eingestellt hat, ist nicht wahrscheinlich. Was er bei Nutzung dieser Funktion hört und ob er überhaupt etwas hört, ist nicht vorherzusehen.
| Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long oder Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long |
Im Programm steht an gewünschter Stelle der eigentliche Aufruf:
| Call sndPlaySound("pfad/dateiname.wav",0) oder Call PlaySound("pfad/dateiname.wav",0,0) oder alternativ, mit der Hilfsvariablen, hier "Klang" genannt: Dim Klang As Long Klang = sndPlaySound("pfad/dateiname.wav",0) oder Klang = PlaySound("pfad/dateiname.wav",0,0) |
Die Bedeutung der Konstanten, die ich hier einfach auf Null setze, ist mir nicht bekannt, es klappt aber so.
Eine der API-Deklarationen sieht sehr hübsch aus:
| Public Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long |
Man könnte glauben, dies sei die Funktion zum Produzieren von Tönen, deren Frequenz und Dauer anzugeben ist. Unter Windows 95 und 98 funktioniert sie nicht. Wie ich erfuhr, funktioniert sie aber unter Windows NT und Windows 2000. Es bedeuten dwFreq die Frequenz, zulässig ist der Bereich von 37 bis 32,767 (Hz), dwDuration steht für die Dauer in ms.