Android Audio-Datei fliessend vorspulen

RezaScript

Bekanntes Mitglied
Hallo,

ich spiele eine Audio-Datei und will auf einer bestimmten Zeitlänge springen.

Beispiel: Die Audio-Datei läuft bereits seit 3 Sekunden. Ich drücke auf einen Knopf und es wird auf die Zeitlänge von 00:10 Sekunden gesprungen.

Ich benutze MediaPlayer von Android und habe es so probiert:

Java:
_mediaPlayer.seekTo(10000);

Klappt alles wunderbar, aber mein Problem ist, dass es eine "Pause" dazwischen gibt. Wenn die Audio-Datei also bereits abgespielt wird und ich den Knopf drücke, ist ca. für 1 Sekunde stille und erst dann wieder der Sound ab 00:10 Sekunden abgespielt.

Diese knapp 1 Sekunde "Pause" möchte ich gerne verhindern. Der Übergang soll also fliessend passieren. Wie kann ich das machen?
 

Jw456

Top Contributor
Hallo
Dies habe ich bei mir noch nicht beobachtet.

Von wo spielst du die Datei ab ?
Wenn es eine entfernte Quelle Internet ist kann schon mal eine Verzögerung bei einem großen Sprung passieren.
Kommt auch auf die Bitrate an. Auch auf das Audio Format. Versuche doch mal einen anderen Mode SEEK_PREVIOUS_SYNC ist ja Default.
Teste mal
_mediaPlayer.seekTo(10000, MediaPlayer.SEEK_NEXT_SYNC );

SEEK_CLOSEST_SYNC, oder SEEK_CLOSEST

 

RezaScript

Bekanntes Mitglied
@Jw456 also ich hab's jetzt mit allen Modes ausprobiert und höre keinen Unterschied.
Das Format ist mp3 und die Datei befindet sich bei mir lokal unter res/raw.
Das Audio ist mit 3 Stunden ziemlich lang, aber beim rückwärts spulen, wo der Sound bereits abgespielt wurde, habe ich dasselbe Problem.
 

Jw456

Top Contributor
Eine so lange Datei habe ich noch nie benutzt.
Wie viele MB ist fue Datei?

Da wirst du wohl due buffer große verändern müssen. Weiß ich aber jetzt leider nicht wie das geht
 

RezaScript

Bekanntes Mitglied
@Jw456 die Datei ist 233 MB. Ich habe es aber auch mit einer neuen Datei probiert. Diese ist nur 2 MB und die Länge ist 01:30 Minuten. Dort habe ich auch dasselbe Problem.

Damit mein Problem etwas verständlicher ist, habe ich hier ein Beispiel:


Drücke auf der rechten Pfeiltaste auf der Tastatur, um das Video um 5 Sekunden vorwärts zu spulen. Auch auf YouTube merkst du also eine winzig kleine Pause. Bei mir ist es genau gleich.
 

Jw456

Top Contributor
Hallo also dein Video habe ich nicht angesehen. Weil ich werde mich nicht anmelden um das zu schauen.
Bei mir ist bei einer selbst geschrienen App vielleicht eine Zehntel Sek. ein Ruckler.
Auch bei YT ist das minimal. Kann ich nicht nachvollziehen.

Wie testest du auf dem Handy oder im Emulator?
 

RezaScript

Bekanntes Mitglied
Es ist schon sehr minimal und oft merkt man es auch gar nicht, aber wenn der Ton immer gleich ist, merkt man es dann schon. Das ist in meinem Fall so und auch im Video das ich geschickt habe.

Ich teste es momentan nur im Emulator (Pixel 2 API 30).
 

Jw456

Top Contributor
Emulator dann würde ich mal ein echtes Gerät empfehlen zum test.
Wie gesagt schaue ich dein Video nicht an da du eine Alters Beschreibung hast. Die ich nicht bestätige.

Kann dir somit nicht helfen.
 

RezaScript

Bekanntes Mitglied
@Jw456 das ist nicht mein Video, sondern nur ein Beispiel. Du findest auf YouTube auch viele andere Videos. Wichtig ist, dass der Ton immer gleich ist.

Falls es keine Lösung dafür gibt, dann erfinde ich meine eigene Lösung:
  1. Beim Knopfdruck, ein neues Object von MediaPlayer erstellen.
  2. Audio-Datei vom neuen Objekt starten und entsprechend vorspulen.
  3. In einer Loop von Millisekunden mit isPlaying() überprüfen, ob das neue Objekt bereits abgespielt wird. Wenn ja, das alte Objekt stoppen.
Da bin ich etwas abhängig von der Methode isPlaying(). Wenn diese mir den "korrekten" Wert ausgibt, dann könnte es funktionieren.
 

RezaScript

Bekanntes Mitglied
Also, falls sich jemand dafür interessiert, wie ich es gemacht habe, hier ist der Code:

Meine Klasse hat 2 Eigenschaften:
Java:
private MediaPlayer _standBy = null;
private MediaPlayer _flightMode = null;

Wenn die Audio-Datei von _standBy bereits läuft und ich dann denn Knopf für die zweite Audio-Datei (in diesem Fall "Flight Mode") klicke, dann starte ich zwar _flightMode, setze vorher aber die Lautstärke auf stumm. 1 Sekunde später stoppe ich _standBy und nehme dann die Stummschaltung von _flightMode wieder auf weg.

Java:
_flightMode = MediaPlayer.create(_context, R.raw.turbine);
_flightMode.setVolume(0, 0);
_flightMode.start();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    _flightMode.seekTo(3709000, MediaPlayer.SEEK_NEXT_SYNC);
}
Helper.setTimeout(() -> {
    _flightMode.setVolume(1, 1);
    _standBy.stop();
}, 1000);

Funktioniert jedenfalls genauso wie ich es wollte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Audio-Datei abspielen Android & Cross-Platform Mobile Apps 3
R Audio wird nur 1 Mal abgespielt Android & Cross-Platform Mobile Apps 2
G Android Audio "abgreifen" Android & Cross-Platform Mobile Apps 9
I Foto mit einer bestimmten Auflösung aufnehmen und als Datei ablegen. Android & Cross-Platform Mobile Apps 5
I Android CameraApp, eingebaute App nutzen und Ergebniss als Datei speichern Android & Cross-Platform Mobile Apps 0
J Android Zugriff auf eine Datei, diese von einer anderen App erstellt wurde? Android & Cross-Platform Mobile Apps 11
T Screenshot speichern ohne alte Datei überschreiben Android & Cross-Platform Mobile Apps 3
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
S Android Datei aus dem Netz einlesen Android & Cross-Platform Mobile Apps 6
V Android Wird mein Vorhaben funktionieren? (Apk Datei decompilieren, bearbeiten, compilieren) Android & Cross-Platform Mobile Apps 2
L Android Datei Übertragung im Netzwerk Android & Cross-Platform Mobile Apps 8
S Termin aus *.txt Datei in Google Kalender eintragen? Android & Cross-Platform Mobile Apps 1
S *.APK Datei automatisch installieren? Android & Cross-Platform Mobile Apps 4
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
B Android XML Datei editieren --> Permission denied Android & Cross-Platform Mobile Apps 2
M Android Speichern einer .txt Datei im InternalStorage Android & Cross-Platform Mobile Apps 2
B Android Absolute kml-Datei erzeugen Android & Cross-Platform Mobile Apps 2
B Fragen zum Speichern einer Datei auf dem Gerät? Android & Cross-Platform Mobile Apps 7
S Listview Einträge aus "xml" Datei Android & Cross-Platform Mobile Apps 1
G Datei erstellen Android & Cross-Platform Mobile Apps 10
L Android Apache POI: Datei speichern geht nicht Android & Cross-Platform Mobile Apps 1
A Android Datei erstellen/schreiben/auslesen Android & Cross-Platform Mobile Apps 1
K Android Erstellt Ordner statt Datei. Android & Cross-Platform Mobile Apps 3
M Datei verschicken per byteArray? Android & Cross-Platform Mobile Apps 1
L Android Datei erstellen, Daten einspeichern und auslesen Android & Cross-Platform Mobile Apps 2
B Datei downloaden über DialogBox? Android & Cross-Platform Mobile Apps 4
G Datei im Ordner speichern Android & Cross-Platform Mobile Apps 2
G Datei erzeugen, per E-Mail senden Android & Cross-Platform Mobile Apps 5
D Android WAV-Datei abspielen / Klangfolge(Endlos) Android & Cross-Platform Mobile Apps 4
A Android Eine Datei in Android löschen, aber wie ? Android & Cross-Platform Mobile Apps 24
D gpx-Datei von Smartphone auf Server uploaden Android & Cross-Platform Mobile Apps 4
U [Android] Eine Datei aus Jar-Archiv laden Android & Cross-Platform Mobile Apps 4
E Java ME Suche aufgenommene Datei Android & Cross-Platform Mobile Apps 4
T Android Ergebnis eines XML+XSLT "transform" in eine HTML - Datei schreiben (Android) Android & Cross-Platform Mobile Apps 2
K mp3 datei in j2me abspielen Android & Cross-Platform Mobile Apps 16
M Text in txt-Datei schreiben und nach ABC sortieren? Android & Cross-Platform Mobile Apps 2
R String wie WAV Datei nutzen Android & Cross-Platform Mobile Apps 4
A jad-Datei to N95 Android & Cross-Platform Mobile Apps 18
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
L SecurityException beim lesen/schreiben eine Datei Android & Cross-Platform Mobile Apps 7
G WAV datei abspielen aber wohin kopieren ? Android & Cross-Platform Mobile Apps 2
S Variable Anzahl von Bytes aus einer Datei lesen Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben