Visual Basic: MP3 Sounds abspielen
lima-city → Forum → Programmiersprachen → Basic
abspielen
buffer
code
datei
detail
funktionieren
geist
hinsicht
http
liegen
ordner
parameter
pfad
professional
speziell angeben
string
type
url
wald
windows
-
Also ich hab hier ein kleines Problem. Und zwar will ich MP3-Sounds abspielen, aber irgendwie bekomme ich das nicht hin. Ich habe schon einige APIs ausprobiert, die WinMediaPlayer.ocx, und einige *.DLLs. Nun bin ich bei mciSendString angekommen, die so weit ich weiss auch irgendwann mal bei mir funktionierte.
Mein Code sieht momentan so aus:
Dim Paths As PathLib Private Type PathLib Sounds As String End Type Private Function PlayMP3(ByVal strFile As String) As Long Dim Sound As String Sound = Paths.Sounds & strFile & ".mp3" Play = mciSendString("play " & Sound, 0&, 0, 0) End Function Private Sub Command1_Click() PlayMP3 "hallo" End Sub Private Sub Form_Load() Paths.Sounds = App.Path & "\" End Sub
PlaySounds.Bas:
Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Das müsste eigentlich funktionieren, denke ich. Aber ich finde den Fehler einfach nicht. Habe sogar schon daran gedacht, dass meine Boxen den Geist aufgegeben haben, oder ich den Sound gemuted habe oder so, aber ich hab alles getestet und der Sound ist in jeder Hinsicht funktionstüchtig. Die Datei ist ebenfalls in Ordnung, habe sie schon mit dem WMP abspielen können. Wäre euch dankbar, wenn ihr mir helfen könntet.
Liebe Grüße
- VampireSilence
Beitrag zuletzt geändert: 1.2.2009 2:48:14 von vampiresilence -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Dein Code kann nicht ganz funktionieren, da du vergessen hast, den Dateipfad in Anführungszeichen zu setzen.
Korrekt wäre:
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal command As String, ByRef buffer As Any, ByVal bufferSize As Long, ByVal hWndCallback As Long) As Long Sub Play() Dim sCommand As String Dim strFilePath As String strFilePath = "C:\Windows\Media\ringout.wav" sCommand = "play " & """" & strFilePath & """" Call mciSendString(sCommand, 0&, 0, 0) End Sub
Mehr Infos: http://www.pinvoke.net/default.aspx/winmm/mciSendString.html -
Mit *.wav funzts nun prima, nur mit *.mp3 leider immernoch nicht. Auch als ich die *.mp3 in *.wav kovertiert hab, lief diese nicht. Müssen die vllt mit ner bestimmten Bitrate codiert sein oder so ?
Im übrigen läuft diese *.wav auch ohne Anführungszeichen und auch ohne ".dll" hinter der Lib. Daran kann es also schonmal nicht liegen.
Edit: Ok, das glaubst du mir yetzt nicht, aber im Windows\Media-Ordner funzt die Datei und im Projekt-Ordner nicht. Ich dachte grad, ich steh im Wald, aber es is wirklich so. Entweder akzeptiert er keine Pfade auf alternativen Laufwerken, oder er akzeptiert keine Leerzeichen innerhalb eines Pfades, woanders kann es nicht mehr dran liegen. Im Windows\Media-Ordner funzt die Datei im übrigen auch mit meinem Originalcode.
Edit2: Aber wie teste ich nun, ob gerade noch eine Datei abgespielt wird ?
Liebe Grüße
- VampireSilence
Beitrag zuletzt geändert: 3.2.2009 19:02:42 von vampiresilence -
Andere Formate musst du speziell angeben, z.B. "type mpegvideo"
Zum Abfragen von Ereignissen einfach noch den Parameter "notify" mit übergeben.
Steht alles hier:
http://www.pinvoke.net/default.aspx/winmm/mciSendString.html
http://www.vbarchiv.net/api/details.php?id=mcisendstring
Damit du eine abgespielte Datei erneut abspielen kannst, musst du sie zuvor wieder schließen:
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal command As String, ByRef buffer As Any, ByVal bufferSize As Long, ByVal hWndCallback As Long) As Long Sub mciPlay() Dim sCommand As String Dim strFilePath As String strFilePath = "D:\Folders and Folders\File.wav" sCommand = "open " & """" & strFilePath & """" & " type waveaudio alias MediaFile" Call mciSendString(sCommand, 0&, 0, 0) sCommand = "play MediaFile" Call mciSendString(sCommand, 0&, 0, 0) End Sub Sub mciStop() sCommand = "close MediaFile" Call mciSendString(sCommand, 0&, 0, 0) End Sub
Hier sollte auch ein Pfad mit Leerzeichen funktionieren. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage