VB-Homepage Tipp 095

Vergleich WAV-Dateien abspielen, über MCI oder API

In dem Ihnen hier vorliegendem VB3-Projekt ist sowohl das Abspielen von WAV-Klangdateien über eine API - Funktion als auch über die MCI.VBX beschrieben.
Wenn Sie also vorhaben Ihr Projekt mit etwas Klang zu verschönern (aber bitte denken Sie daran, das immer noch nicht alle über eine Soundkarte verfügen - wie man das vorhanden sein einer Soundkarte prüft erfahren Sie unter Tipp074)
dann können Sie beide Möglichkeiten nutzen. Hier sollen Ihnen der direkte Vergleich beider Möglichkeiten helfen zu entscheiden, was günstiger ist.

mci_api.mak
MCI_API.FRM
MCI_API.BAS
MCI.VBX
ProjWinSize=183,487,275,261
ProjWinShow=2
IconForm="Form1"
Title="Vergleich Waveplay [MCI-API]"
ExeName="MCI_API.EXE"

mci_api.bas
Option Explicit
Declare Function mciSendString Lib "mmsystem" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hWndCallback As Integer) As Long
Declare Function mciGetErrorString Lib "mmsystem" (ByVal wError As Long, ByVal lpstrBuffer As String, ByVal uLength As Integer) As Integer
Function CreateFilename$ (P$, F$)
If Right$(P$, 1) = "\" Then
CreateFilename$ = P$ & F$
Else
CreateFilename$ = P$ & "\" & F$
End If
End Function
Function GetMCIError$ (wError&)
Dim Buffer$, uLength%
Buffer$ = String$(256, " ")
uLength% = Len(Buffer$)
wError& = mciGetErrorString(wError&, Buffer$, uLength%)
If wError& Then
GetMCIError$ = Left$(Buffer$, uLength%)
Else
GetMCIError$ = "Unbekannte Fehlernummer - " & Str$(wError&)
End If
End Function
Function PlayWAVFile% (WAVFilename$)
Dim Result%
Result% = SendMCICommand%("Open " & WAVFilename$)
If Result% = 0 Then
Result% = SendMCICommand%("Play " & WAVFilename$ + " wait")
End If
Result% = SendMCICommand%("Close " & WAVFilename$)
PlayWAVFile% = Result%
End Function
Function SendMCICommand% (Cmd$)
Dim Buffer$: Buffer$ = ""
SendMCICommand% = mciSendString(Cmd$, Buffer$, 0, 0)
End Function

mci_api.frm
VERSION 2.00
Begin Form Form1
Caption = "Vergleich MCI - API [Waveplay]"
ClientHeight = 2880
ClientLeft = 2625
ClientTop = 3315
ClientWidth = 4455
Height = 3285
Left = 2565
LinkTopic = "Form1"
ScaleHeight = 2880
ScaleWidth = 4455
Top = 2970
Width = 4575
Begin CommandButton Command2
Caption = "Play over API"
Height = 255
Left = 2640
TabIndex = 5
Top = 2520
Width = 1695
End
Begin CommandButton Command1
Caption = "Play over MCI"
Height = 255
Left = 120
TabIndex = 4
Top = 2520
Width = 1695
End
Begin MMControl MMControl1
BackVisible = 0 'False
EjectVisible = 0 'False
FileName = "" 'eigenen Pfad und Datei eingeben
Height = 330
Left = 360
NextVisible = 0 'False
PlayEnabled = -1 'True
PrevVisible = 0 'False
RecordVisible = 0 'False
StepVisible = 0 'False
StopEnabled = -1 'True
TabIndex = 3
Top = 5280
Width = 1200
End
Begin DriveListBox Drive1
Height = 288
Left = 168
TabIndex = 2
Top = 132
Width = 2292
End
Begin DirListBox Dir1
Height = 1155
Left = 165
TabIndex = 1
Top = 600
Width = 2295
End
Begin FileListBox File1
Height = 1590
Left = 2604
Pattern = "*.wav"
TabIndex = 0
Top = 132
Width = 1725
End
Begin Label Label1
Alignment = 2 'Center
Caption = "Bedenken sollte man beim Vergleich, das zwar API mitunter später abspielt, dafür aber keine separate VBX geladen werden muß."
FontBold = 0 'False
FontItalic = 0 'False
FontName = "MS Sans Serif"
FontSize = 8.25
FontStrikethru = 0 'False
FontUnderline = 0 'False
Height = 735
Left = 120
TabIndex = 6
Top = 1800
Width = 4215
End
End
Option Explicit
Dim WAVFilename$
Sub Command1_Click ()
If Len(WAVFilename$) <> 0 Then
MMControl1.FileName = WAVFilename$
Call MMControl1_PlayClick(0)
End If
End Sub
Sub Command2_Click ()
Dim Result&
If Len(WAVFilename$) <> 0 Then
Result& = PlayWAVFile%(WAVFilename$)
If Result& Then
MsgBox GetMCIError$(Result&), , "Dateifehler"
End If
End If
End Sub
Sub Command3D1_Click ()
If Len(WAVFilename$) <> 0 Then
MMControl1.FileName = WAVFilename$
Call MMControl1_PlayClick(0)
End If
End Sub
Sub Command3D2_Click ()
Dim Result&
If Len(WAVFilename$) <> 0 Then
Result& = PlayWAVFile%(WAVFilename$)
If Result& Then
MsgBox GetMCIError$(Result&), , "Dateifehler"
End If
End If
End Sub
Sub Dir1_Change ()
File1.Path = Dir1.Path
End Sub
Sub Drive1_Change ()
Dir1.Path = Drive1.Drive
End Sub
Sub File1_Click ()
WAVFilename$ = CreateFilename$((File1.Path), (File1.FileName))
End Sub
Sub MMControl1_PlayClick (Cancel As Integer)
MMControl1.Notify = False
MMControl1.Wait = True
MMControl1.Shareable = False
MMControl1.DeviceType = "WaveAudio"
MMControl1.Command = "Open"
MMControl1.Command = "Sound"
MMControl1.Command = "Close"
End Sub

Um den Code zu nutzen, erstellen Sie sich mit einem Editor (ZBsp. Notepad) Dateien, die Sie wie beschrieben benennen und den jeweiligen Code hinein kopieren. Rufen Sie dann die *.mak Datei aus dem Dateimanager auf oder starten Ihr VB-Programm und öffnen das Projekt.

Tipp-Download

Quelle :

Zurück zur Übersichtsseite