Der MediaPlayer dient zum Spielen von Audio Dateien.
MediaPlayer unterstützt folgende Formate: MP3, Midi, Wave und OGG. Die vollständige Liste ist hier verfügbar: Android Supported Media Formats | Android Developers
Das Beispielprogramm befindet sich am Ende.
Das Englische OrginalTutorial.
Um eine Datei spielen zu können muß man sie zuerst laden:
In diesem Fall wurde die Datei mit dem File Manager hinzugefügt und deshalb wird File.DirAssets benutzt.
Jetzt können wir die Datei abspielen, mit:
und das Abspielen auf Pause stellen mit:
Aufrufen von Play setzt das Abspielen, von der gleichen Stelle, fort.
Beachten Sie daß man Pause nur aufrufen kann wenn der MediaPlayer spielt.
Man kann MediaPlayer.Load irgendwo aufrufen (nach der Initialisierung), um eine neue Datei zu laden.
MediaPlayer muß in Process_Globals deklariert werden ansonsten würde jedesmal eine neue Instanz erzeugt werden wenn die Activity neu erstellt wird.
Das Beispielprogramm zeigt dem Benutzer den Fortschritt der Abspielung an und erlaubt ihm die Stelle zu ändern.
Dies ist der Code:
Wir initialisieren den MediaPlayer nur einmal beim Start der Anwendung.
Das Abspielen beginnt in Activity_Resume, wenn die Activity fortgesetzt (resumed) wird, und das unmittelbar nach Activity_Create .
Ein Timer wird verwendet, um jede Sekunde die Wiedergabe-Stelle zu prüfen und das Label und die SeekBar zu aktualisieren.
Beachten Sie, daß das SeekBar_ValueChanged Event einen booleschen Wert namens UserChanged enthält mit dem man zwischen einer Änderung durch den Benutzer (durch Ziehen mit dem Daumen) und einer programmatischen Änderung unterscheiden kann.
Die Looping Eigenschaft bestimmt, ob die Wiedergabe automatisch neu starten soll, wenn das Ende erreicht ist.
Das Beispielprogramm :
MediaPlayer.zip
MediaPlayer unterstützt folgende Formate: MP3, Midi, Wave und OGG. Die vollständige Liste ist hier verfügbar: Android Supported Media Formats | Android Developers
Das Beispielprogramm befindet sich am Ende.
Das Englische OrginalTutorial.
Um eine Datei spielen zu können muß man sie zuerst laden:
B4X:
MediaPlayer1.Load(File.DirAssets, "IsawHerStandingThere.mid")
Jetzt können wir die Datei abspielen, mit:
B4X:
MediaPlayer1.Play
B4X:
MediaPlayer.Pause
Beachten Sie daß man Pause nur aufrufen kann wenn der MediaPlayer spielt.
Man kann MediaPlayer.Load irgendwo aufrufen (nach der Initialisierung), um eine neue Datei zu laden.
MediaPlayer muß in Process_Globals deklariert werden ansonsten würde jedesmal eine neue Instanz erzeugt werden wenn die Activity neu erstellt wird.
Das Beispielprogramm zeigt dem Benutzer den Fortschritt der Abspielung an und erlaubt ihm die Stelle zu ändern.
Dies ist der Code:
B4X:
Sub Process_Globals
Dim MediaPlayer1 As MediaPlayer
Dim timer1 As Timer
End Sub
Sub Globals
Dim barPosition As SeekBar
Dim barVolume As SeekBar
Dim lblPosition As Label
Dim Looping As ToggleButton
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
MediaPlayer1.Initialize( )
MediaPlayer1.Load(File.DirAssets, "IsawHerStandingThere.mid")
Timer1.Initialize("timer1", 1000)
End If
Activity.LoadLayout("1")
Looping_CheckedChange(Looping.Checked) 'set the default value
End Sub
Sub Activity_Resume
MediaPlayer1.Play
timer1.Enabled = True
timer1_Tick 'don't wait one second for the UI to update.
End Sub
Sub Activity_Pause (UserClosed As Boolean)
If MediaPlayer1.IsPlaying Then MediaPlayer1.Pause
timer1.Enabled = False
End Sub
Sub timer1_Tick
If MediaPlayer1.IsPlaying Then
barPosition.Value = MediaPlayer1.Position / MediaPlayer1.Duration * 100
lblPosition.Text = "Position: " & ConvertToTimeFormat(MediaPlayer1.Position) & _
" (" & ConvertToTimeFormat(MediaPlayer1.Duration) & ")"
End If
End Sub
'converts milliseconds to m:ss format.
Sub ConvertToTimeFormat(ms As Int) As String
Dim seconds, minutes As Int
seconds = Round(ms / 1000)
minutes = Floor(seconds / 60)
seconds = seconds Mod 60
Return NumberFormat(minutes, 1, 0) & ":" & NumberFormat(seconds, 2, 0) 'ex: 3:05
End Sub
Sub barVolume_ValueChanged (Value As Int, UserChanged As Boolean)
MediaPlayer1.SetVolume(barVolume.Value / 100, barVolume.Value / 100)
End Sub
Sub barPosition_ValueChanged (Value As Int, UserChanged As Boolean)
If UserChanged = False Then Return 'the value was changed programmatically
MediaPlayer1.Position = Value / 100 * MediaPlayer1.Duration
If MediaPlayer1.IsPlaying = False Then 'this can happen when the playback reached the end and the user changes the position
MediaPlayer1.Play
End If
timer1_Tick 'immediately update the progress label
End Sub
Sub Looping_CheckedChange(Checked As Boolean)
MediaPlayer1.Looping = Checked
End Sub
Das Abspielen beginnt in Activity_Resume, wenn die Activity fortgesetzt (resumed) wird, und das unmittelbar nach Activity_Create .
Ein Timer wird verwendet, um jede Sekunde die Wiedergabe-Stelle zu prüfen und das Label und die SeekBar zu aktualisieren.
Beachten Sie, daß das SeekBar_ValueChanged Event einen booleschen Wert namens UserChanged enthält mit dem man zwischen einer Änderung durch den Benutzer (durch Ziehen mit dem Daumen) und einer programmatischen Änderung unterscheiden kann.
Die Looping Eigenschaft bestimmt, ob die Wiedergabe automatisch neu starten soll, wenn das Ende erreicht ist.
Das Beispielprogramm :
Last edited: