vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 16.11.10 19:13

Brauche kleine Hilfestellung für VB Anfänger

zum abspielen von mp3 files habe ich den Abspielbutton so belegt:



Dim sFilename
Dim TI
Dim IP

sFilename = Me!DateiName
TI = Me!Titel
IP = Me!Interpret
MP3_Play sFilename, "MyAlias"
Me!Label1.Caption = TI & " - " & IP

... spielt nur den aktuellem Datensatz ab

wenn ich alle (oder die restlichen) Datensätze abspielen will,
komme ich einfach nicht weiter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 17.11.10 13:21

Also erstmal werden Variablen IMMER mit Typ deklariert!

Ich nehme mal an, Du lädtst Titel aus einer Datenbank.
Wenn Du die nun abspielen möchtest, musst Du den ersten nehmen, abspielen, einen Datensatz weiterspringen und wieder abspielen, letztlich ein Schleifenkonstrukt.
Da Du aber vermutlich zwischendurch noch Kontrolle über Dein Programm haben möchtest, solltest Du vielleicht einfach erstmal einen Next-Button implementieren, mit dem Du im Datenbank-Resultset weiterspringst und den nächsten Titel abspielst.

Da Du nicht schreibst, was Du verwendest, mal allgemein:
Sub cmdNext_Click()
datenobjekt.Next
sFilename = datenobjekt!Dateiname
sTitel = datenobjekt!Titel
sInterpret = datenobjekt!Interpret
MP3_Play sFilename, "MyAlias"
lblInfo.Caption = sInterpret & " - " & sTitel
End Sub


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 17.11.10 15:11

Hi Martoeng,

danke erstmal für die Antwort. Die entsprechenden Buttons für Previous und Next habe ich bereits in meinem Projekt - funktioniert auch.

Mein Problem etwas genauer:

Mit dem "Play-Button" soll ab dem aktuellen Datensatz (Position und restliche Datensätze ausrechnen funktioniert) der Rest einer nach dem anderen abgespielt werden.

Mit
Dim P ' Nummer aktueller Datensatz
Dim A ' Anzahl der Datensätze der Tabelle

P = Me!DNS ' Aktuellen Datensatz holen
A = AnzahlDatensätze("tbl_Musik_Aufsteigend sortiert") 'Gesamtanzahl in Tab

For I = 0 To A - P
MP3_Play ...
I = I + 1
Next

wird jedes Lied nur angespielt, aber nicht komplett abgepielt.
Wahrscheinlich fehlt mir einfach ausgedrückt nur

"Lied zu Ende"

Nächstes abspielen.

Gruß
Peter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 17.11.10 16:34

In der MP3_Play-Funktion wenn mciSendString aufgerufen wird, kann man auch das wait-flag angeben. Dann kehrt die Funktion erst zurück, wenn die Datei komplett abgespielt wurde (blockiert dafür aber auch).
Und es gibt das notify-Flag, dafür muss man dann aber ein paar mehr Kenntnisse mit Callback-Funktionen etc. haben.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 18.11.10 00:03

Hi Martoeng,

vorweg noch folgendes - ich versuche den Player in eine Access 2003 zu integrieren - mit Musik geht alles leichter.


hab mal folgendes probiert:
Timer im Form auf 1000 eingestellt

Dim sFilename
 
sFilename = Me!DateiName
MP3_Play sFilename, "MyAlias"          ' Aktuellen Datensatz abspielen
  Dim lCurPos As Long
  Dim lLength As Long
  ' aktuelle Position auslesen
  lCurPos = MP3_CurPos("MyAlias")
    ' Gesamtspielzeit auslesen
  lLength = MP3_GetLength("MyAlias")
  ' Prüfen, ob am Ende angelangt und ggf.
  ' neues Lied spielen
 
If lCurPos >= lLength Then             ' wenn beides gleich
     DoCmd.GoToRecord , , acNext       ' next Titel
     sFilename = Me!DateiName
     Me!Numma = Me!DNS
     MP3_Play sFilename, "MyAlias"
End If
Die Bedingung wird zwar erreicht (MsgBox lCurPos & " " & lLength) aber weiter gehts nicht. Entsprechende Steuerelemente für Spielzeit, Position
und Restzeit werden korrekt aktualisiert.

Gruß

Leo_N
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 18.11.10 11:05

Rufst Du oben etwa jede Sekunde MP3_Play auf?
Auch solltest Du das Handle MyAlias zunächst wieder freigeben, bevor Du eine neue Datei aufrufst.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 18.11.10 12:43

hab nach Deinem Vorschlag "Stop_MP3" eingefügt

 
me

sFilename = Me!DateiName

Dim lCurPos As Long
Dim lLength As Long
' aktuelle Position
lCurPos = MP3_CurPos("MyAlias") '
' Gesamtspielzeit
lLength = MP3_GetLength("MyAlias")
' Prüfen, ob am Ende angelangt und ggf.
' neues Lied spielen

If lCurPos >= lLength Then

MP3_Stop "MyAlias"

DoCmd.GoToRecord , , acNext
sFilename = Me!DateiName
MP3_Play sFilename, "MyAlias"
End If

End Sub]

aber mit dem gleichen Erfolg ...
es wird lediglich ein Titel abgespielt.

Den Timer habe auch mal auf 0 gesetzt. Dient eigentlich nur zur aktualisierung der Positions- und Restzeitanzeige.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 18.11.10 13:45

Schick mir mal bitte Deinen kompletten Code (als Textdatei(en)).
So kann ich da nur rumrätseln wo der Fehler liegt.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 18.11.10 17:19

Hab Dir die Textdateien gesandt ..

Leo_N
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 18.11.10 23:52

Hab noch einen "Repeat-Button" eingefügt

Im Modul
 
nction MP3_Repeat(ByVal sAlias As String) As Long

' ---------------------------------
' Momentan gespielte MP3 wiedeholen
' ---------------------------------

Dim sBuffer As String * 255
On Error Resume Next
mciSendString "play " & sAlias & " repeat", sBuffer, 0, 0
MP3_Repeat = Val(sBuffer)

End Function
]

und im frm

 
ub cmdRepeat_Click()

' -----------------
' Titel wiederholen
' -----------------

On Error Resume Next
MP3_Repeat "MyAlias"

End Sub
]


Gruß

Leo_N
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 19.11.10 14:58

Du hast was von einem Timer erzählt, aber Deine Abfrage, ob die momentane Position größer gleich der Länge des Liedes ist, steht in der PlayAll-Routine, das ist natürlich Käse.

Also dieser Text hier
Dim lCurPos As Long
Dim lLength As Long
\' aktuelle Position ermitteln
lCurPos = MP3_CurPos(\"MyAlias\")
\' Gesamtspielzeit ermitteln
lLength = MP3_GetLength(\"MyAlias\")
\' Prüfen, ob am Ende angelangt und ggf.
\' neues Lied spielen
 
If lCurPos >= lLength Then
 
MP3_Stop \"MyAlias\"
 
DoCmd.GoToRecord , , acNext
sFilename = Me!DateiName
Me!Numma = Me!DNS
MP3_Play sFilename, \"MyAlias\"
End If
muss in die Timer-Prozedur.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 20.11.10 00:02

Hi Martoeng,

ich kriegs nicht hin - ich schicke dir mal die komlette Access.mdb.
Schau bitte mal drüber.

Dank Dir
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 20.11.10 00:09

Sorry ging nicht

Hast du eine andere Lösung, ich habe das mit dem Timer probiert.
Hat aber auch nicht geklappt.

Ich schicke morgen nochmal den gesamten VBA Code.


Gruß

Leo_N
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 22.11.10 11:01

Hi Martoeng,

habe Deinen Vorschlag wie folgt umgesetzt:

Private Sub Form_Timer()
 
Dim lCurPos As Long
Dim lLength As Long
 
' aktuelle Position ermitteln
lCurPos = MP3_CurPos("MyAlias")
 
' Gesamtspielzeit ermitteln
lLength = MP3_GetLength("MyAlias")
 
' Prüfen, ob am Ende angelangt und ggf.
' neues Lied spielen
If lCurPos >= lLength Then
 
MP3_Stop "MyAlias"
 
DoCmd.GoToRecord , , acNext
sFilename = Me!DateiName
Me!Numma = Me!DNS
MP3_Play sFilename, "MyAlias"
End If
 
End Sub
Leider wird dann überhaupt kein mp3-File mehr abgespielt. Wahrscheinlich
weil die aktuelle Position bereits gleich der Spieldauer ist. Beide haben den
den Wert 0.

Auch der folgende Versuch hatte nur teilweise Erfolg

Private Sub Form_Timer()
 
If MP3_IsPlaying("MyAlias") = False Then
   MP3_Stop "MyAlias"
   DoCmd.GoToRecord , , acNext
   sFilename = Me!DateiName
   Me!Numma = Me!DNS
   MP3_Play sFilename, "MyAlias"
End If
 
End Sub
Hier wird zwar die erste mp3 abgespielt, aber danach wird im Sekundentakt um
einen Datensatz weitergeschaltet ohne die Datei abzuspielen.

Die Funktion

Public Function MP3_IsPlaying(ByVal sAlias As String) As Long
 
 
' -------------------------------------------
' Prüfen ob momentan gespielte MP3 noch läuft
' -------------------------------------------
 
    Dim sBuffer As String * 255
    mciSendString "status " & sAlias & " mode", sBuffer, Len(sBuffer), 0
    MP3_IsPlaying = (Mid$(sBuffer, 1, 7) = "playing")
 
End Function
gibt auch brav "TRUE" zurück so lange noch ein Lied läuft.

Mein Abspielbutton ist wie folgt definiert

Private Sub cmdPlayAll_Click()
 
Dim sFilename
sFilename = Me.DateiName
MP3_Play sFilename, "MyAlias"
Label1.Caption = Me.DateiName
 
End Sub
bin am verzweifeln
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 25.11.10 00:00

Hallo allerseits,

mittlerweile bin ich Dank Hinweis von Martoeng auf das „wait-flag“ etwas weiter gekommen.
Beim PLAY/ALL Button habe ich folgende SUB


code]

[Private Sub cmdPlayAll_Click()

' ----------------------------------------------------------------------
' Das ist die Routine, die zwar funktioniert aber nicht wie sie soll ...
' In der Funktion ist bei "play" das "wait-flag" gesetzt - der Ablauf
' wird angehalten bis der Titel vollständig abgepielt ist.
' ... mciSendString("play " & sAlias & " wait", 0, 0, 0) = 0 ...
' Auch der Sprung zum nächsten Datensatz ( 3 x ) funktioniert.
' Allerdings ist ein manueller Eingriff (z.B. Command-Button) gesperrt.
' ----------------------------------------------------------------------

Label1.Caption = ""

Dim sFilename as String
Dim TI as String
Dim IP as String
Dim F as Long

F = MP3_IsPlaying("MyAlias")
If F = 0 Then
Do Until Z = 3 ' Zum Testen auf 3 Durchläufe gesetzt
sFilename = Me!DateiName
MP3_Play_All sFilename, "MyAlias"
TI = Me!Titel
IP = Interpret
Label1.Caption = TI & " - " & IP
Me!lblDauer.Caption = MP3_GetLength("MyAlias")
Me!lblVolume.Caption = MP3_GetVolume("MyAlias")
Me!LST = MP3_GetVolume("MyAlias")
Me!L = sFilename
Me!Numma = Me!DNS
Z = Z + 1
MP3_Stop "MyAlias"
MP3_Close "MyAlias"
DoCmd.GoToRecord , , acNext
Loop
Else
End If

End SubWie oben bereits erwähnt hat das ganze einen Haken …

Die zugehörige Funktion sieht so aus

Public Function MP3_Play_All(ByVal sFile As String, ByVal sAlias As String) As _
  Boolean
 
' ------------------------------------
' MP3-Datei ganz abspielen 
' ------------------------------------
 
  Dim bResult As Boolean
  Dim I
 
' Dateinamen in DOS 8.3 Format, da z.B. Sonderzeichen
' wie Leerzeichen Probleme machen
 
  Dim sBuffer As String
  Dim lResult As Long
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
   If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
 
       ' MCI öffnen
 
       lResult = mciSendString("open " & sFile & " type MPEGVideo alias " & _
         sAlias, 0, 0, 0)
 
       ' Standarlautstärke setzen
 
       MP3_SetVol sAlias, 200
        If lResult = 0 Then
 
         ' MP3 abspielen                            -- wait --
 
        If mciSendString("play " & sAlias & " wait", 0, 0, 0) = 0 Then
        bResult = True
      End If
    End If
  End If
  MP3_Play_All = bResult
End Function
Der Zeitgeber im Access Formular Form_frm_MCI sieht so aus

Private Sub Form_Timer()
 
'-----------------------------------------------------------------------
' Spielzeit, aktuelle Position und Restzeit im Formular frm_MCI anzeigen
' ----------------------------------------------------------------------
 
Label1.Caption = ""
' Uhrzeit anzeigen
Clock.Caption = Time
 
Dim sFilename
Dim TI As String
Dim IP As String
sFilename = Me.DateiName
TI = Me.Titel
IP = Me.Interpret
Label1.Caption = TI & " - " & IP
lblDauer.Caption = MP3_GetLength("MyAlias")
lblPosition.Caption = MP3_CurPos("MyAlias")
lblRestspielzeit.Caption = MP3_GetLength("MyAlias") - MP3_CurPos("MyAlias")
lblVolume.Caption = MP3_GetVolume("MyAlias")
Me.LST = MP3_GetVolume("MyAlias")
Me.SPZ = MP3_GetLength("MyAlias")
Me.AktPos = MP3_CurPos("MyAlias")
Me.RSZT = MP3_GetLength("MyAlias") - MP3_CurPos("MyAlias")
Me.Numma = Me.DNS
Me!L = Me.DateiName
 
 
End Sub
Noch eine andere Frage: Wie beende ich eine laufende Prozedur aus einer anderen heraus

Also simpel gesagt, wenn ich den STOP Button drücke, soll die Abspiel Routine abgebrochen werden. Dies bezieht sich auf eine andere – nicht auf obige mit „wait“.

Gruß
Leo_Nardo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 02.12.10 19:11

Ich habe hier kein Access installiert, deswegen kann ich Dir da jetzt nicht einfach das hinschreiben.
Kann höchstens mal ein normales VB-Programm schreiben, das die gewünschte Funktionalität besitzt und aus dem Du dann kopieren könntest.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: Leo_Nardo
Datum: 19.12.10 17:56

Hi Martoeng,

sorry war 2 Wochen in Malta - deswegen erst jetzt meine Antwort.

Dein Angebot klingt verlockend - danke Dir erstmal ...

Hab's inzwischen hingekriegt, zwar nicht unbedingt die sauberste Loesung, aber es funktioniert:


Private Sub cmdPlayAll_Click()
 
' ---------------------------------------------
'
' Restliche mp3 ab aktueller Position abspielen
'
' ---------------------------------------------
 
 
Label1.Caption = ""
 
Dim sFilename As String
Dim L As Long
Dim A As Long
 
On Error GoTo err
 
A = AnzahlDatensaetze("tbl_Musik")
 
Do Until Z = A - Me.DNS
 
sFilename = Me!DateiName
MP3_Play sFilename, "MyAlias"
 
Z = Z + 1
' Liedlänge (Millisekunden) auslesen
L = MP3_GetLength("MyAlias")
 
Me.Titel.SetFocus
Me.Label1.Caption = Me.Titel & "  -  " & Me.Interpret
 
' Wartezeit in Millisekunden an DelayMilSec übergeben
DelayMilSec (L)
 
MP3_Stop "MyAlias"
MP3_Close "MyAlias"
 
DoCmd.GoToRecord , , acNext
Loop
 
err:
 
End Sub
Die Anzeigen von Spielzeit, Position und Restspielzeit aktualisiert, wie Du vorgeschlagen hast, der Timer im Access-Formular. Prevoius, Next, Mute, Pause, Repeat und Intro ( 7 Sekunden anspielen) funktionieren auch.

Public Sub DelayMilSec(mSekunden As Long)
 
' --------------------------------------
' Warteschleife mit Millisekundenvorgabe
' --------------------------------------
 
  Dim TimeOut As Long
  TimeOut = (GetTickCount) + mSekunden
  Do
    DoEvents
  Loop Until TimeOut < (GetTickCount)
Ok und nun der Haken - wenn ich einen Button mit einer anderen Funtion aufrufen will - muss ich die STOP-Taste drücken - dort ist "End" hinterlegt
um cmdPlayAll abzuschiessen (das Gleiche ist beim Beenden-Button eingefügt). Aber damit kann man leben.

Hab doch noch eine Frage:

Wie realisiere ich eine graphische Anzeige der aktuellen Position und der aktuellen Lautstärke - allerdings ohne die "gängigen" Progressbars.
Einfach ausgedrückt ein Textfeld das entsprechend gefüllt oder bei weniger Lautstärke entsprechend geleert wird.

Dank Dir

Gruß

Leo_Nardo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mcisendstring mp3 dateien abspielen 
Autor: ModeratorMartoeng (Moderator)
Datum: 19.12.10 20:38

Im Normalfall macht man das ja über einen Slider.
Dementsprechend wüsste ich jetzt nicht von anderen fertigen Lösungen, die irgendwie hübsch aussehen würden.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel