Spielen mehrere Lieder mit dem MediaPlayer auf die gleiche Zeit: nur eins ist wirklich zu spielen
Ich brauche Hilfe mit dem Abspielen von mehreren audio-tracks gleichzeitig in Android
.
Ich soll spielen drei audio-tracks an der exakt gleichen Zeit mit Android.Media.MediaPlayer
.
Gestern habe ich es geschafft, damit es funktioniert dabei so :
MediaPlayer track1 = MediaPlayer.create(this, R.raw.track1);
MediaPlayer track2 = MediaPlayer.create(this, R.raw.track2);
MediaPlayer track3 = MediaPlayer.create(this, R.raw.track3);
Wie Sie sehen können, habe ich drei distincts Instanzen von MediaPlaye
r hier.
Weil ich bin gefragt, ich muss diese MediaPlayer
gespielt wird in einer hintergrund-thread.
Hier ist der Teil, wo ich beginnen die MediaPlayers
:
//let's suppose this code snippet is in a run() method inside a Thread (which is the case)
track1.start();
track2.start();
track3.start();
Wenn ich sage gestern, es ist, weil der nächste Tag, es hat nicht funktioniert wie soll.
In der Tat, ab einem MediaPlayer zu stoppen scheint alle vorherigen spielen MediaPlayer.
Getestet habe ich im debugger-Modus : klar, track2.start()
hält track1 ' s MediaPlayer und nach dem gleichen Muster, track3.start()
hält tack2 der MediaPlayer.
So am Ende, nur track3 gespielt wird, ich kann nicht hören, einen der vorangegangenen tracks, was auch immer die Lautstärke in der Erwägung, dass konnte ich eindeutig hören, alle von Ihnen, bevor Sie : es soll eine Art " Ambiente.
Natürlich verändert sich die Reihenfolge, in der die tracks gestartet werden, ändert daran nichts : nur den letzten track zu hören sein wird.
Wenn ich sage, "gehört" es ist so, weil im debugger-Modus, überprüfen Sie die Eigenschaft MediaPlayer.isPlaying
wieder true
: alle drei Spieler sagen, Sie spielen aber nur eine hören kann... !
Warum die änderung ?
Warum hat es die Arbeit einmal zu stoppen, danach arbeiten ?
HINWEIS:
- die audio-Dateien haben alle die gleiche Dauer, die ist rund 15 Minuten
- die audio-Dateien wurden
.mp3
Dateien komprimiert in.acc
Dateien (aus320kbps
zu144kbps
) - Ich arbeite unter
Xamarin Studio
imC#
aber für clarety purpouse stecke ich kleineJava
code-Schnipsel.
BEARBEITEN 1
Gemäß dieser Spielen zwei mp3 Songs, gleichzeitig meine Lösung sollte funktionieren, richtig ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich das erreicht, was Sie suchen mit einer CyclicBarrier Beispiel eine innere Klasse Umsetzung.
Beispiel:
Würden Sie nutzen es so:
Wenn Sie hatten die Anforderung, dass es kann verwendet werden, um eine beliebige Anzahl von media-Playern, Sie könnte leicht umzusetzen - meine Anforderungen einfach anrufen für zwei.
Merke ich, diese Frage ist alt, aber diese Seite gefunden, wo ich mich während der Suche nach einer Lösung, so dass ich hoffe, dies hilft jemand stecken, auf diese Frage in der Zukunft.
SyncedCommandService
lauffähig.Gut, ich glaube ich gefunden, was ich nennen könnte "eine temporäre Lösung".
Das problem dabei ist, dass die
create()
Methode erzeugt eine deutliche Lücke, wenn die songs gespielt werden.Also das ist es nicht.
Nach einer Weile, ich habe versucht, die folgenden :
Dass whay, die songs sind mehr synchron. Ich höre noch eine sehr kleine Lücke, aber es ist besser so.
Ich fand diese Lösung ziemlich seltsam sowie hässlich.
Sei denn, jemand hat noch eine Idee, ich bleibe bei dieser Lösung.
play()
Methode - meinst dustart()
?Als Andrej Nikishaev schon schrieb in einem Kommentar, wie es scheint, einige Geräte haben Probleme mit mehreren Mediaplayers muss bei der gleichen Zeit. Während nur einer spielte auf meinem Nexus 5, es hat funktioniert auf meinem Moto G4 (aber immer noch kurze Pausen während der Wiedergabe). Beide laufen mit Android 6.0.1.
Empfehle ich den ExoPlayer für diesen Fall statt. Es funktionierte gut für mich, zumindest auf meinen beiden Geräten.
Konvertierte ich meine mp3 in ogg audio-Datei (mit Audacity) und ich bin schon 2 Mediaplayer istances und hören Sie die audio gemischt.
Ich habe nicht versucht, ist es möglich, für mehr als 3.
Hallo versuchen Sie folgenden code funktioniert es es das Lied nicht stoppen, Sie müssen nur wählen Sie den song aus spinner und klicken Sie auf die Schaltfläche start, und wählen Sie dann im nächsten song von spinner und klicken Sie auf starten, wird es funktionieren.