Übung: Klang-Einbindung




[ Programm WaveBsp | Oberfläche | Menüleiste | Programmcode]



Ziel dieser Übung ist es, Visual Basic-Programme zu schreiben, die Wave-Sounddateien abspielen. Am Ende dieser Übung sollten Sie folgendes beherrschen:




Das Programm WaveBsp

Dieses Beispiel-Programm benutzt das TegoSoft Multimedia-Steuerelement. Um es zu Visual Basic hinzuzufügen, wählen sie die Menüoption Zusatzsteuerelemente... im Menü Extras. Kreuzen sie in der Liste den Eintrag TegoSoft Multimedia an, und schließen Sie dieses Dialogfenster durch Clicken auf OK. Jetzt erscheint in der Werkzeugsammlung das Symbol für das Multimedia-Steuerelement.

Das Multimedia-Steuerelement verfügt über neun nebeneinander angeordnete Schaltflächen,die in der nachfolgenden Abbildung zu sehen sind:


Es könne mit diesem Steuerelement zahlreiche Multimedia-Geräte bedient werden. Neben Wave-Dateien können mit diesem Steuerelement auch MIDI-Dateien, CD-Audio-Dateien und AVI-Filmdateien wiedergegeben werden. Einige der Schaltflächen wechseln abhängig von der Dateiart ihre Bedeutung. Beispielsweise wird die Schaltfläche ganz rechts für Wave-Dateien nicht genutzt. Sie dient dem Auswerfen einer CD aus dem CD-ROM-Laufwerk.

Oberfläche

Erstellen Sie eine Form und fügen Sie die Steuerelemente hinzu, die nachfolgend abgebildet und beschrieben sind.


Objekt Eigenschaft Einstellung
Form Caption Wave-Beispielprogramm
Height 3825
Left 1080
Name frmWaveBsp
Top 1170
Width 6090
Vertikale Bildlaufleiste Enabled False
Height 2775
Left 5520
Max 100
Name vscNichts
Top 240
Width 255
Befehlsschaltfläche Caption An&zeigen
Enabled False
Height 495
Left 120
Name cmdAnzeigen
Top 120
Width 1215
Befehlsschaltfläche Caption Ver&bergen
Enabled True
Height 495
Left 120
Name cmdVerbergen
Top 720
Width 1215
Befehlsschaltfläche Caption &Start
Enabled False
Height 495
Left 1440
Name cmdStart
Top 1920
Width 1215
Befehlsschaltfläche Caption Sto&p
Enabled False
Height 495
Left 2760
Name cmdStop
Top 1920
Width 1215
Befehlsschaltfläche Caption Pause
Enabled False
Height 495
Left 4080
Name cmdPause
Top 1920
Width 1215
Befehlsschaltfläche Caption Be&enden
Height 495
Left 1440
Name cmdBeenden
Top 120
Width 1215
Standarddialog CancelError True
Left 3240
Name cmmDatei
Top 120
Multimedia Height 495
Left 1440
Name TegoMM1
Top 2520
Width 3915
Bezeichnungsfeld Alignment 2 - Center
BackColor &H00000000&
Caption [leer]
Font Verdana 9pt
ForeColor &H0000FF00&
Height 255
Left 3960
Name lblPosition
Top 360
Width 1455
Bezeichnungsfeld Caption Aktuelle Position:
Height 255
Left 3960
Name lblDerzeit
Top 0
Width 1215

Menüleiste

Position Titel Name
0 &Datei mnuDatei
1 Ö&ffnen mnuOpen
1 S&chließen mnuClose
1 - mnuSep1
1 &Beenden mnuEnde

Eingabe des Programmcodes

Allgemeiner Deklarationsbereich

Option Explicit 

Dieser Befehl erzwingt die Deklaration sämtlicher Variablen.

Befehlsschaltfläche Beenden

Private Sub cmdBeenden_Click()
    End
End Sub

Menüeintrag Beenden

Private Sub mnuEnde_Click()
    cmdBeenden_Click
End Sub

Dieser Menüeintrag führt denselben Code aus wie die Schaltfläche Beenden.

Schaltfläche Verbergen

Private Sub cmdVerbergen_Click()
    TegoMM1.Visible = False
    cmdVerbergen.Enabled = False
    cmdAnzeigen.Enabled = True
End Sub

Diese Prozedur setzt die Visible-Eigenschaft des Multimedia-Steuerelements auf False; es wird also unsichtbar.

Schaltfläche Anzeigen

Private Sub cmdAnzeigen_Click()
    TegoMM1.Visible = True
    cmdVerbergen.Enabled = True
    cmdAnzeigen.Enabled = False
End Sub

Menüeintrag Öffnen

Private Sub mnuOpen_Click()
    On Error GoTo OpenFehler
    Rem Elemente im Dateityp-Feld setzen
    Dim DateiLänge
    cmmDatei.Filter = "Wave-Dateien (*.wav)|*.wav|Alle Dateien (*.*)|*.*"
    cmmDatei.FilterIndex = 1   ' Standard-Dateityp setzen
    cmmDatei.Action = 1        ' Dialogfeld anzeigen
    DateiArt = cmmDatei.FilterIndex
    DateiLänge = FileLen(cmmDatei.filename)
    On Error GoTo 0            ' Fehlerbehandlungs-Routine entfernen
    Rem Ausgewählte Datei öffnen
    TegoMM1.DeviceType = "WaveAudio"
    TegoMM1.filename = cmmDatei.filename
    TegoMM1.Command = "Open"
    If TegoMM1.Error > 0 Then
        cmdStart.Enabled = False
        cmdStop.Enabled = False
        frmWaveBsp.Caption = "Wave-Beispielprogramm - (keine Datei geladen)"
        MsgBox cmmDatei.filename & "konnte nicht geöffnet werden", _
        vbCritical, "Fehler"
    Else
        cmdStart.Enabled = True
        frmWaveBsp.Caption = "Wave-Beispielprogramm - (" & _
        cmmDatei.FileTitle & ")"
        lblPosition.Caption = "00 : 00"
        TegoMM1.TimeFormat = "Milliseconds"
    End If
    Exit Sub
OpenFehler:
Select Case Err
Case 53
    cmdStart.Enabled = False
    cmdStop.Enabled = False
    frmWaveBsp.Caption = "Wave-Beispielprogramm - (keine Datei geladen)"
    MsgBox "Die Datei konnte nicht gefunden werden.", vbCritical, "Fehler"
    Exit Sub
Case 32755
    Rem Abbrechen-Schaltfläche im Dateiauswahlfenster wurde gedrückt.    
    Exit Sub
End Select
End Sub

Da der CancelError-Eigenschaft des Standarddialogfeldes der Wert True zugewiesen worden ist, folgt daraus, daß ein Fehler auftritt, wenn dort auf die Schaltfläche Abbrechen geclickt wird. Die Fehlerbehandlungs-Routine fängt diesen Fehler auf. Nach dem Öffnen der Datei können keine Datei-Fehler mehr auftreten, deshalb wird die Fehlerbahandlungs-Routine dort wieder entfernt.

Die If...Else-Schleife wird verwendet, um festzustellen, ob der Open-Befehl des Multimedia-Steuerelements erfolgreich ausgeführt werden konnte. Es könnten hier Fehler auftreten, wenn die Wave-Datei ungültig ist (falsches Format, unvollständig, usw.). In diesem Fall werden die Start- und Stop-Schaltflächen deaktiviert, und die Titelleiste der Form zeigt an, daß keine Datei geladen ist.

Menüeintrag Schließen

Private Sub mnuClose_Click()
    TegoMM1.Command = "Close"
    cmdStart.Enabled = False
    cmdStop.Enabled = False
    cmdPause.Enabled = False
    frmWaveBsp.Caption = "Wave-Beispielprogramm - (keine Datei geladen)"
    lblPosition.Caption = ""
End Sub

Schaltfläche Start

Private Sub cmdStart_Click()
    TegoMM1.Command = "Play"
    cmdStart.Enabled = False
    cmdPause.Enabled = True
    cmdStop.Enabled = True
End Sub

Schaltfläche Stop

Private Sub cmdStart_Click()
    TegoMM1.Command = "Stop"
    cmdStop.Enabled = False
    cmdStart.Enabled = True
    cmdPause.Enabled = False
End Sub

Schaltfläche Pause

Private Sub cmdStart_Click()
    TegoMM1.Command = "Pause"
End Sub

Form

Private Sub Form_Load()
    TegoMM1.UpdateInterval = 250
End Sub

Der Code in dieser Prozedur setzt die UpdateInterval-Eigenschaft des Multimedia-Steuerelements auf 250 Millisekunden. Die StatusUpdate-Prozedur des Multimedia-Steuerelements wird von nun an alle Viertelsekunden ausgeführt. In der Unload-Methode sollte noch folgende Zeile eingetragen werden (wenn der Befehl zum Beenden des Programms bei noch laufender Multimediadatei-Abspielung aufgerufen wird, wird damit das Abspielen beendet und die Multimedia-Datei geschlossen):

Private Sub Form_Unload(Cancel As Integer)
    TegoMM1.Command = "Close"
End Sub

Das Multimedia-Steuerelement

Private Sub TegoMM1_Done()
    If TegoMM1.Position = TegoMM1.Length Then
        TegoMM1.Command = "Prev"
        vscNichts.Value = 0
        lblPosition.Caption = "00 : 00"
        cmdStart.Enabled = True
        cmdStop.Enabled = False
        cmdPause.Enabled = False
    End If
End Sub

Die Positions-Eigenschaft des Multimedia-Steuerelements zeigt die aktuelle Position der Wave-Datei an. Wenn Position- und Length-Eigenschaft den gleichen Wert enthalten, dann ist die Wave-Datei am Ende angelangt, und das Done-Ereignis tritt auf. In diesem Fall wird die Wave-Datei durch den Befehl "Prev" wieder an den Anfang gesetzt.

Private Sub TegoMM1_StatusUpdate()
    Dim PosMinute
    Dim PosSekunde
    Rem Mode 526 = Playing, Mode 527 = Recording
    If TegoMM1.Mode = 526 Or TegoMM1.Mode = 527 Then    
        PosSekunde = Fix(TegoMM1.Position / 1000)
        PosMinute = Fix(PosSekunde / 60)
        PosSekunde = PosSekunde Mod 60
        lblPosition.Caption = Format(PosMinute, "00") & " : " & Format(PosSekunde, "00")
        vscNichts.Value = TegoMM1.Position * 100 / TegoMM1.Length
    End If
End Sub

Der Code aktualisiert die Caption-Eigenschaft im Bezeichnungsfeld lblPosition jede Viertelsekunde mit dem Wert der Positions-Eigenschaft des Multimedia-Steuerelements. Außerdem wird auch mit dem Schieberegler diese Position angezeigt.

Damit wäre die Erstellung des Programms abgeschlossen. Das Programm ist jetzt einsatzbereit, um Wave-Dateien wiederzugeben.

Erweiterung

DasWaveBsp-Programm soll nun noch so erweitert werden, daß mit ihm auch andere Multimedia-Dateien wiedergegeben werden können. Außerdem sollen die Funktionen aller neun Schaltflächen des Multimedia-Steuerelements auch mit Befehlsschaltflächen ausgelöst werden können. Die Oberfläche würde nun so wie folgt aussehen:


Objekt Eigenschaft Einstellung
Befehlsschaltfläche Caption Auswerfen
Enabled False
Height 495
Left 4080
Name cmdAuswerfen
Top 1320
Width 1215
Befehlsschaltfläche Caption Dateianfang
Enabled False
Height 495
Left 1440
Name cmdDateiAnfang
Top 1320
Width 1215
Befehlsschaltfläche Caption Dateiende
Enabled False
Height 495
Left 2760
Name cmdDateiEnde
Top 1320
Width 1215
3D-Befehlsschaltfläche BevelWidth 1
Caption Aufnahme
Enabled False
Font3D 3
ForeColor &H000000FF&
Height 495
Left 4080
Name cmdRecord
Outline True
RoundedCorners False
Top 720
Width 1215
Befehlsschaltfläche Caption Schritt zurück
Enabled False
Height 495
Left 1440
Name cmdSchrittRet
Top 720
Width 1215
Befehlsschaltfläche Caption Schritt vor
Enabled False
Height 495
Left 2760
Name cmdSchrittVor
Top 720
Width 1215
Bezeichnungsfeld Caption Track:
Height 255
Left 480
Name lblTrackAnzeige
Top 1560
Visible False
Width 615
Bezeichnungsfeld Alignment 2 - Center
BackColor &H00000000&
Caption 1
Font Verdana, 20pt
ForeColor &H0000FFFF&
Height 495
Left 480
Name lblTrack
Top 1920
Visible False
Width 855
Vertikale Bildlaufleiste Height 1575
Large Change 1
Left 120
Name vscTrackAnzahl
Top 1440
Visible False
Width 255

Erweiterungen des Programmcodes

Die Erweiterungen im Programmcode sind unter den jeweiligen Steuerelementen zusammengefaßt.

Allgemeiner Deklarationsbereich

Diese Zeile ist nach der Option Explicit-Anweisung einzutragen. In der Variablen DateiArt wird die Art der Multimediadatei gespeichert, die aktuell geöffnet ist.

Dim DateiArt As Integer

Befehlsschaltfläche Auswerfen

Diese Schaltfläche ist nur aktiv, wenn eine CD-Audio-Datei abgespielt wird. Sie dient dazu, die Lade des CD-ROM-Lauwerks zu öffnen bzw. zu schließen.

Private Sub Private Sub cmdAuswerfen_Click()
    If cmdAuswerfen.Caption = "Auswerfen" Then
        TegoMM1.Command = "Eject"
        cmdAuswerfen.Caption = "Lade schließen"
    Else
        TegoMM1.Command = "CloseDoor"
        cmdAuswerfen.Caption = "Auswerfen"
    End If
End Sub

Befehlsschaltfläche Dateianfang

Setzt die abzuspielende Datei zurück an ihren Anfang (bzw. bei CD-Audio-Dateien auf den vorangehenden Track).

Private Sub Private Sub cmdDateiAnfang_Click()
    TegoMM1.Command = "Prev"
    cmdStart.Enabled = True
    cmdPause.Enabled = False
    cmdStop.Enabled = False
    If DateiArt = 4 Then
        If vscTrackAnzahl.Value > vscTrackAnzahl.Min Then _
        vscTrackAnzahl.Value = vscTrackAnzahl.Value - 1
    Else
        lblPosition.Caption = "00 : 00" 
        vscNichts.Value = 0
    End If
End Sub

Befehlsschaltfläche Dateiende

Setzt die abzuspielende Datei an ihr Dateiende vor (bzw. bei CD-Audio-Dateien auf den nächstfolgenden Track).

Private Sub Private Sub cmdDateiEnde_Click()
    TegoMM1.Command = "Next"
    cmdStart.Enabled = True
    cmdPause.Enabled = False
    cmdStop.Enabled = False
    If DateiArt = 4 Then
        If vscTrackAnzahl.Value < vscTrackAnzahl.Max Then _
        vscTrackAnzahl.Value = vscTrackAnzahl.Value + 1
    End If
End Sub

Befehlsschaltfläche Pause

Nach der Zeile Tegomm1.Command = "Pause" müssen folgende Zeilen eingefügt werden.

    Select Case DateiArt
    Case 2, 4
   	cmdPause.Enabled = False
    	cmdStop.Enabled = False
    	cmdStart.Enabled = True
    End Select

Beim Abspielen von Wave-Dateien und von AVI-Video-Dateien bewirkt das Clicken der Pause-Taste eine Unterbrechung, die durch nochmaliges Drücken der Pause-Taste wieder aufgehoben wird, und das Abspielen setzt an genau der gleichen Stelle fort. Bei MIDI-Dateien und CD-Audio-Dateien verhält sich die Pause-Taste dagegen wie die Stop-Taste.

Befehlsschaltfläche Record

Um die Bezeichnung dieser Schaltfläche in roter Farbgebung gestalten zu können, wurde hierfür das 3D-Schaltflächensteuerelement gewählt.

Private Sub cmdRecord_Click()
    TegoMM1.Command = "Record"
    cmdRecord.Enabled = False
    cmdRecord.Font3D = 3
    cmdStart.Enabled = False
    cmdPause.Enabled = True
    cmdStop.Enabled = True
End Sub

Befehlsschaltfläche Schritt zurück

Diese Schaltfläche ist nur bei AVI-Video-Dateien verfügbar. Mit ihr kann man bildweise zurückblättern.

Private Sub cmdSchrittRet_Click()
    TegoMM1.Command = "Back"
    cmdStart.Enabled = True
    cmdPause.Enabled = False
    cmdStop.Enabled = False
End Sub

Befehlsschaltfläche Schritt vor

Diese Schaltfläche ist ebenfalls nur bei AVI-Video-Dateien verfügbar, und dient dazu, in der Datei bildweise vorblättern zu können.

Private Sub cmdSchrittVor_Click()
    TegoMM1.Command = "Step"
    cmdStart.Enabled = True
    cmdPause.Enabled = False
    cmdStop.Enabled = False
End Sub

Befehlsschaltfläche Start

Die folgenden Programmzeilen müssen vor der Zeile TegoMM1.Command = "Play" eingefügt werden:

    Select Case DateiArt
    Case 1
        cmdRecord.Enabled = False
        cmdRecord.Font3D = 3
    Case 4
        TegoMM1.Track = vscTrackAnzahl.Value
        TegoMM1.From = TegoMM1.TrackPosition   ' übernimmt den in vscTrackAnzahl
                                               ' eingestellten Wert als Track-Nummer,
                                               ' von dessen Beginn abgespielt werden soll. 
    End Select

Befehlsschaltfläche Stop

Die folgenden Programmzeilen müssen nach der Zeile TegoMM1.Command = "Stop" eingefügt werden;

    Select Case DateiArt
    Case 1
        cmdRecord.Enabled = True
        cmdRecord.Font3D = 0
    End Select

Menüeintrag Schließen

Hier müssen folgende Zeilen ergänzt werden:

    cmdAuswerfen.Enabled = False
    lblTrack.Visible = False
    lblTrackAnzeige.Visible = False
    vscTrackAnzahl.Visible = False
    cmdDateiAnfang.Enabled = False
    cmdDateiEnde.Enabled = False
    cmdRecord.Enabled = False
    cmdRecord.Font3D = 3
    cmdSchrittVor.Enabled = False
    cmdSchrittRet.Enabled = False
    cmdDateiAnfang.Caption = "Dateianfang"
    cmdDateiEnde.Caption = "Dateiende"

Menüeintrag Öffnen

Im Programmcode muß im Menüeintrag Öffnen in der cmmDatei.Filter-Anweisung etwas geändert werden. Diese Zeile muß wie folgt abgeändert werden:

cmmDatei.Filter = "Wave-Dateien (*.wav)|*.wav|MIDI-Dateien (*.mid)|*.mid|AVI-Videodateien (*.avi)|*.avi|CD-Audiodateien (*.cda)|*.cda"

Die ausgewählte Multimedia-Dateiart wird in einer globalen Variable namens DateiArt (vom Typ Integer; im Allgemeinen Deklarationsabschnitt eintragen) festgehalten (DateiArt = cmmDatei.FilterIndex), und zwar mit Hilfe der FilterIndex-Eigenschaft des Standarddialogs. Wird die erste Dateiart (Wave-Dateien) angewählt, hat FilterIndex den Wert 1. Die DeviceType-Anweisung des Multimedia-Steuerelements wird durch folgende Select Case-Schleife ersetzt:


    Select Case DateiArt
    Case 1
        TegoMM1.DeviceType = "WaveAudio"
    Case 2
        TegoMM1.DeviceType = "Sequencer"
    Case 3
        TegoMM1.DeviceType = "AVIVideo"
    Case 4
        TegoMM1.DeviceType = "CDAudio"
    End Select

Nach der Zeile TegoMM1.TimeFormat = "Milliseconds" müssen noch folgende Zeilen ergänzt werden:


        If DateiArt = 4 Then
            vscTrackAnzahl.Visible = True
            lblTrack.Visible = True
            lblTrackAnzeige.Visible = True
            vscTrackAnzahl.Max = TegoMM1.Tracks
            vscTrackAnzahl.Value = Val(Mid$(cmmDatei.FileTitle, 6, 2))
            cmdDateiAnfang.Caption = "Track zurück"
            cmdDateiEnde.Caption = "Track vor"
        Else
            vscTrackAnzahl.Visible = False
            lblTrack.Visible = False
            lblTrackAnzeige.Visible = False
            cmdDateiAnfang.Caption = "Dateianfang"
            cmdDateiEnde.Caption = "Dateiende"
        End If
        If TegoMM1.CanEject Then cmdAuswerfen.Enabled = True Else cmdAuswerfen.Enabled = False
        If TegoMM1.CanPlay Then cmdStart.Enabled = True Else cmdStart.Enabled = False
        If TegoMM1.CanRecord Then
            cmdRecord.Enabled = True
            cmdRecord.Font3D = 0
        Else
            cmdRecord.Enabled = False
        End If
        If TegoMM1.CanStep Then
            cmdSchrittVor.Enabled = True
            cmdSchrittRet.Enabled = True
        Else
            cmdSchrittVor.Enabled = False
            cmdSchrittRet.Enabled = False
        End If
        cmdDateiAnfang.Enabled = True
        cmdDateiEnde.Enabled = True

Das Multimedia-Steuerelement

Der in der Click-Methode einzufügende Programmcode lautet wie folgt:

Private Sub TegoMM1_Click()
Select Case TegoMM1.Mode
Case 525        ' Stop
    If DateiArt = 1 Then
        cmdRecord.Enabled = True
        cmdRecord.Font3D = 0
    End If
    cmdStop.Enabled = False
    cmdStart.Enabled = True
    cmdPause.Enabled = False
Case 526, 527   ' Playing / Recording
    cmdStop.Enabled = True
    cmdPause.Enabled = True
    cmdStart.Enabled = False
    cmdRecord.Enabled = False
    cmdRecord.Font3D = 3
Case 529        ' Pause
    If DateiArt = 2 Or DateiArt = 4 Then
        cmdPause.Enabled = False
        cmdStop.Enabled = False
        cmdStart.Enabled = True
    End If
Case 530        ' Lade offen

End Select
End Sub

Mit diesem Code wird der Status des Multimedia-Steuerelements abgefragt (ob gerade abgespielt wird, ob nicht abgespielt wird, usw.) und dementsprechend die Befehlsschaltflächen aktiviert oder deaktiviert, um deren Status mit denen des Multimedia-Steuerelements in Übereinstimmung zu bringen.

In der Done-Methode müssen folgende Programmzeilen ergänzt werden (zwischen cmdPause.Enabled = False und dem letzten End If):

        If DateiArt = 1 Then
            cmdRecord.Enabled = True
            cmdRecord.Font3D = 0
        End If

Vertikale Bildlaufleiste vscTrackAnzahl

Dieses Steuerelement ist nur bei CD-Audio-Dateien sichtbar. Es dient dazu, den Track festzulegen, bei dem die CD-Wiedergabe beginnen soll. Sowohl in der Scroll- als auch in der Change-Methode muß folgende Zeile eingetragen werden

    lblTrack.Caption = vscTrackAnzahl.Value

Mit diesen Eingriffen ist es jetzt möglich, verschiedene Arten von Multimedia-Dateien abzuzspielen.




Diese Beispiel-Anwendung zum Multimedia-Steuerelement können Sie im Download-Abschnitt der Hauptseite (WaveBsp.zip) finden.


Übung 13 (Zusatz-Steuerelemente)
Hauptseite
Übung 15 (Erstellen einer Online-Hilfedatei)