German Mediaplayer Pfad

fabs222

Member
Licensed User
Longtime User
Hallo,

ich mal wieder.

Ich habe folgende Code von Erel im Forum gefunden.

B4X:
Sub Process_Globals
Dim mp As MediaPlayer
Dim Timer1 As Timer
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
mp.Initialize
Timer1.Initialize("Timer1", 0)
End If
End Sub

Sub PlaySong(song As String)
mp.Load(File.DirRootExternal, song)
Timer1.Interval = mp.Duration + 100
mp.Play
Timer1.Enabled = True
End Sub

Sub Timer1_Tick
Timer1.Enabled = False
PlaySong("nextsong")
End Sub

So wie ich das verstehe geht es darum, dass der Mediapalyer am Ende eines Songs den nähsten Song automatisch spielt.
Leider sehe ich hier nicht durch wo diese Songs gespeichert werden müssen.
Auch ist mir das "song" hier "mp.Load(File.DirRootExternal, song)" nicht klar.
Wie müsste denn der Pfad aussehen wenn ich einen Ordner "Musik" (in dem die mp3 liegen) auf dem Hauptverzeichniss der SD Karte hätte?


Liebe Grüße
Fabs222
 

klaus

Expert
Licensed User
Longtime User
Das müsste so aussehen:
B4X:
mp.Load(File.DirRootExternal & "/Musik", song)
song ist eine Variable mit dem Dateinamen.

Oder
B4X:
mp.Load(File.DirRootExternal & "/Musik", "Angie.mp3")
"Angie.mp3" ist der Dateiname.

Beste Grüsse.
 

fabs222

Member
Licensed User
Longtime User
Hallo,

mal wieder vielen Dank, dass hat schon einmal geholfen.

Aber, soll bei dem o.g. Beispiel die Musik nach dem starten der App alleine anfangen zu spielen oder muss das "PlaySong" erst noch durch irgendwas ausgelöst werden.

Sollte die Musik alleine anfangen sollen geht das bei mir nicht :sign0148:


Liebe Grüße

Fabs222
 
Last edited:

fabs222

Member
Licensed User
Longtime User
Also ich steige hier nicht durch.

Eigentlich sollte doch bei folgendem Code das Abspielen des Songs automatisch nach start der App losgehen (also nach Sub Playsong), oder????

B4X:
Sub Process_Globals
Dim mp As MediaPlayer
Dim Timer1 As Timer
End Sub 

Sub Globals
Dim Button1 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
   If FirstTime Then
   Activity.LoadLayout("t1")
   mp.Initialize
   mp.SetVolume(1,1)
   Timer1.Initialize("Timer1", 0)
   End If
End Sub

Sub PlaySong(song As String)
   mp.Load(File.DirRootExternal & "/schlager", "1.mp3")
   Timer1.Interval = mp.Duration + 100
   mp.Play
   Timer1.Enabled = True
End Sub

Sub Timer1_Tick
Timer1.Enabled = False
PlaySong("nextsong")
End Sub

Der Pfad ist auf jeden Fall richtig (Danke Klaus) aber der Player beginnt nicht zu spielen!!! Habe auch statt "1.mp3" song probiert, ändert aber nichts.
Muss ich noch irgendeine Lib anklicken??

Liebe Grüße

Fabs222
 

Kiffi

Well-Known Member
Licensed User
Longtime User
setze doch mal im Debug-Modus in Timer1_Tick einen Breakpoint
und geh dann Schritt für Schritt durch den Code.

Grüße ... Kiffi
 

fabs222

Member
Licensed User
Longtime User
Wenn Du mir noch erklären könntest wie Debug-Modus geht :signOops: wäre echt toll.


Liebe Grüße

Fabs222

Ps: Bis zum Timer1_Tick komme ich aber garnicht erst. Ich glaube die Musik sollte bei Sub PlaySong anfangen zu spielen (ohne zutun) nachdem die App gestartet wurde.

Eigentlich geht es mir nur darum, einen Player zu basteln der ALLE Lieder eines Ordners (mit nur einem Start) hintereinander abzuspielen
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Wenn Du mir noch erklären könntest wie Debug-Modus geht
in der IDE hast Du direkt neben dem 'Play'-Button eine Combobox. Darin sind
die Einträge 'Debug', 'Release' und 'Release obfuscated'. Hier musst Du 'Debug'
auswählen.

Bevor Du dann den Code startest, klickst Du dann in der Zeile Timer1_Tick auf
den hellgrauen Bereich links neben der Zeilenzahl. Dort erscheint dann ein
roter Ball; der sogenannte Breakpoint. Wird diese Zeile dann zur Laufzeit im
Debug-Modus angesprungen, bleibt die Verarbeitung Deines Programmes genau
dort stehen und Du kannst dann Dir beispielsweise die Inhalte von Variablen
anschauen oder mit den Buttons unten links den Code gezielt ablaufen lassen.

Ps: Bis zum Timer1_Tick komme ich aber garnicht erst.
Es ist schon ziemlich wichtig, dass Timer1_Tick zumindest einmal aufgerufen wird.

So richtig weißt Du nicht, was in Deinem Code passiert, oder?

Grüße ... Kiffi
 

fabs222

Member
Licensed User
Longtime User
Danke habe das mit Debug gefunden.

Nein ich weiß leider nicht was mit meinem Code so alles passiert, leider.
Du hast aber recht das auch Timer1_Tick wenigstens einmal geladen werden muss.

Leider sehe ich bei dem Rest immer noch nicht wirklich durch.

Ich vermute bei diesem Code, dass Musiktitel die im Ordner Schlager auf der SDKarte liegen nacheinander abgespielt werden.
Was ich nicht weiß ist, ob der Code so gebaut ist, dass die Titel automatisch nach starten der App anfangen sollen zu spielen oder nicht?
Oder braucht es noch etwas um Sub PlaySong auszulösen??

Was ich gerne möchte ist, ein MP3 Player ohne Benutzeroberfläche der nach starten der App automatisch die Titel aus dem Ordner Schlager hintereinander abspielt und wenn der letzte Titel dran war wieder von vorne anfängt.
Natürlich könnte ich jeden Titel im Code mit seinem "richtigen" Dateinamen hinterlegen was auch gehen würde (habe ich probiert) aber wenn ich die Titel auf der SDKarte dann mal ändern würde, müsste ich den Code wieder ändern und das will ich ja nicht.
Den o.g. Code ist von Erel. Erel hatte diesen Code jemanden im Forum geschickt der glaube ich das gleiche will wie ich aber leider ist mein Englisch zu schlecht und der Google Translator naja.

Wenn mir also mal wieder jemand helfen könnte wäre das echt toll. Bin ebend totaler Anfänger beim Code-schreiben und zu PlaySong habe ich auch keine Anleitung gefunden.

Liebe Grüße

Fabs222
 

manios

Active Member
Licensed User
Longtime User
Der Timer hilft hier nicht.
Denn, um eine Datei abzuspielen zu können musst du den Namen der Datei wissen. Also die Dateinamen im Verzeichnis in eine Liste einlesen und dann aus dieser Liste die Dateinamen an die Sub PaySong (in der ersten Version) als Parameter übergeben. Dann funktioniert das Programm auch mit jeder Speicherkarte.
Ich denke nicht das "nextsong" ein Musiktitel ist.
 

fabs222

Member
Licensed User
Longtime User
Hallo manios,

vielen Dank für den Tipp mit der Liste. Könntest Du vielleicht ein Beispiel oder Verweis posten wie das genau geht??

Liebe Grüße

Fabs222
 

manios

Active Member
Licensed User
Longtime User
Sorry, ich meinte "Der Timer ALLEINE hilft...."
 

Kiffi

Well-Known Member
Licensed User
Longtime User
@fabs222: In Activity_Create liest Du alle
in Deinem Ordner liegenden MP3-Dateien
in ein Array oder eine List.

Dann übergibst Du dem MP beim ersten
Aufruf das erste Element des Arrays (oder
der List), beim zweiten Aufruf das zweite
Element, und so weiter. Bis das Ende des
Arrays erreicht wird. Dann springst Du wieder
auf das erste Element.

Grüße ... Kiffi
 

fabs222

Member
Licensed User
Longtime User
Hallo Kiffi,

vielen Dank, habe auch schon mal mit dem List Befehl zu spielen versucht, hatt bis jetzt aber nicht wirklich funktioniert.

Hattest du vielleicht ein einfaches Code Beispiel??

Liebe Grüße

Fabs222
 

Kiffi

Well-Known Member
Licensed User
Longtime User
@fabs222: Zeig mal, was Du bisher an Code hast.

Grüße ... Kiffi
 

fabs222

Member
Licensed User
Longtime User
Hallo Kiffi,

bi jetzt habe ich es so:

B4X:
Sub Process_Globals
   Dim MediaPlayer1 As MediaPlayer
   Dim List1 As List
   Dim Timer1 As Timer
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean) 
      MediaPlayer1.Initialize( )
      Timer1.Initialize("Timer1", 0)
      List1.Initialize
      List1.AddAll(File.DirRootExternal & "/Schlager") 
      MediaPlayer1.Load(List1, ".mp3")
      Timer1.Interval = MediaPlayer1.Duration + 100
End Sub

Sub Activity_Resume
   MediaPlayer1.Play
   Timer1.Enabled = True
   
End Sub

Sub Timer1_Tick
   Timer1.Enabled = False
   MediaPlayer1.Load(List1, +1)
   MediaPlayer1.Play
End Sub

Ist wahrscheinlich total falsch aber mehr habe ich noch nicht. Es fehlt auch noch der Sprung vom Ende der Liste an den Anfang.

Wie kann ich eigemdlich beim EMU was auf den virtuelle SD Karte speichern??

Liebe Grüße

Fabs222
 

Kiffi

Well-Known Member
Licensed User
Longtime User
ich muss schon sagen, dass Du Dich hier ganz gut
bedienen lässt. In der Zwischenzeit hättest Du (auch
mit Deinen Anfängerkenntnissen) mehr aus die Beine
stellen können. Ist immer eine Sache des persönlichen
Engagements...
B4X:
Sub Process_Globals
End Sub

Sub Globals

   Dim MediaPlayer1 As MediaPlayer
   Dim MP3List As List
   Dim Timer1 As Timer
   Dim Mp3Counter As Int

End Sub

Sub Activity_Create(FirstTime As Boolean)

   Dim FileList As List
   FileList.Initialize
   FileList = File.ListFiles(File.DirAssets)

   MP3List.Initialize
   
   Dim Counter As Int
   Dim Datei As String
   
   For Counter = 0 To FileList.Size - 1
      Datei = FileList.Get(Counter)
      If Datei.ToLowerCase.EndsWith(".mp3") Then
         MP3List.Add(Datei)
      End If
   Next   

   MediaPlayer1.Initialize()
   
   Timer1.Initialize("Timer1", 1)
   Timer1.Enabled = True

   
End Sub

Sub PlaySong(Song As String)

   ToastMessageShow("Spiele: " & Song, False)

   MediaPlayer1.Load(File.DirAssets, Song)
   Timer1.Interval = MediaPlayer1.Duration + 1000
   MediaPlayer1.Play
   Timer1.Enabled = True
   
End Sub

Sub Timer1_Tick

   Timer1.Enabled = False
   PlaySong(MP3List.Get(Mp3Counter))
   Mp3Counter = Mp3Counter + 1
   If Mp3Counter > MP3List.Size - 1 Then   Mp3Counter = 0
   
End Sub

(Denk dran, den Pfad (DirAssets) auf Deinen Pfad zu ändern)

Versuch mal bitte selber rauszufinden, was ich da mache
und auch, warum Dein Code nicht funktioniert.

Grüße ... Kiffi
 

manios

Active Member
Licensed User
Longtime User
Meine Version

Dies ist meine Version, mit ein paar zusätzlichen Gimmiks :)
 

Attachments

  • MediaPlayer2.zip
    7.4 KB · Views: 186

fabs222

Member
Licensed User
Longtime User
Hallo Kiffi, Hallo manios,

vielen, vielen Dank. Kann zwar leider nocht nicht testen (bin auf Arbeit) aber heute Abend werde ich es gleich probieren.


Kiffi, ich versuche viel alleine auf die Beine zu stellen, aber aller anfang ist schwer (ich schreibe das erste mal Code´s) und da mein Englisch nicht so gut ist ist es im Forum für mich auch nicht ganz so leicht. Aber ich möchte gerne dazu lernen.
Vielen Dank jedenfalls.

Liebe Grüße

Fab222
 
Last edited:

fabs222

Member
Licensed User
Longtime User
Kiffi, ist vielleicht auch ein Missvertändnis (wegen persönlichen
Engagements) , bis jetzt war ich immer beim MediaPlayerStream und nicht beim MediaPlayer.


Liebe Grüße
Fabs222
 
Top