AudioInputStream (Mp3) aktuelle Position

BRoll

Bekanntes Mitglied
Hallo,

ich arbeite gerade mit Mp3 Dateien die ich mit
einem selber gebastelten Editor an bestimmte Events synchronisieren möchte.
Dazu verwende ich die Jars:
jl1.0.1.jar
mp3spi1.9.5.jar
tritonus_share.jar

Mein Editor ist so aufgebaut, dass man ein Lied einliest, und dann Events zu bestimmten
Zeitpunkten erstellen kann. Dazu habe ich festgelegt dass 1s = 100 Zeiteinheiten sind.
Somit hat eine Minute den Wert 6000 in meinem System.
(ich habe keine Millliskendunden verwendet weil 100er Schritte Genauigkeit reichen)

Weiterhin kann ich schon die Lieder abspielen und zu einer bestimmten Stelle zb. 6500 (1 Minute 5 Sekunden) springen. Momentan besteht mein Problem darin, dass wenn das Lied abgespielt wird
ich nicht weiß wie bei der wievielten Zeiteinheit es gerade ist.

Nun aber ein bisschen Code:

Einlesen des Lieds
Java:
AudioInputStream in = AudioSystem.getAudioInputStream(file);
		din = null;
		AudioFormat baseFormat = in.getFormat();

		AudioFormat decodedFormat = new AudioFormat(
				AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(),
				16, baseFormat.getChannels(), baseFormat.getChannels() * 2,
				baseFormat.getSampleRate(), false);

		din = AudioSystem.getAudioInputStream(decodedFormat, in);
		
                // Länge des Lieds in Bytes
		max = in.available();
		
		AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(file);
		Map<String, Object> properties = baseFileFormat.properties();
 		Long duration = (Long) properties.get("duration");
		double d=duration/10000;
		length=(int) d; // Länge des Lieds in Zeiteinheit 100=1s
		d/=100;
		minutes=(int) (d/60);  // Anzahl der Minuten
		seconds=(int) (d%60); //Anzal der Sekunden
	
		sFactor=(double)max/(double)length; // Wie viele Bytes pro Zeiteinheit

Und die Stelle wo alles abgespielt wird:
Java:
byte[] data = new byte[4096];
int anz=0; //Anzahl der gelesenen Bytes
while (nBytesRead != -1) {
						if (!pause) {
						nBytesRead = din.read(data, 0, data.length);
							
							if (nBytesRead != -1)
								line.write(data, 0, nBytesRead);
							if (stop) {
								nBytesRead = -1;
							}
							anz+=nBytesRead; //gelesene Bytes addieren
 							System.out.println((double)anz/(double)max); // Debug 
                                                        //aktuelle Position in Zeiteinheit ergibt sich aus 
                                                        // %gelesene Bytes  * Länge des Lieds in Zeiteinheit
							currentPosition=(int) (((double)anz/(double)max)*length);

						}
					}

Als ich das jetzt mit einem Lied der Länge 5:56 getestet habe,
gibt er die richtige maximale Länge in Minuten/Sekunden und meiner Zeiteinheit aus.
Bloß die aktuelle Zeiteinheit stimmt nicht, bei meiner Debug Ausgabe ist
der Prozentwert wieviele Bytes schon gelesen wurden auf 11 (also 1100%) am Ende gewesen
bei einer konstanten Steigung von 4069 Bytes (was ja logisch ist)
Bloß wie kann das Ding 11 mal mehr Bytes aus dem InputStream lesen als tatsächlich enthalten sind?
Oder stimmt der maximal Wert (max) der Bytes nicht?

Momentan finde ich keine Lösung :/

Wäre nett wenn jemand mit mehr Ahnung mir helfen könnte,
hab noch nicht viel in Richtung Musikverwaltung gemacht.

Gruß BRoll
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Aktuelle Spielzeit bei mediaplayer Spiele- und Multimedia-Programmierung 3
Wirago Aktuelle Buchempfehlung Spiele- und Multimedia-Programmierung 2
H JMF - Aktuelle Audioausgabe aufnehmen! Spiele- und Multimedia-Programmierung 5
B BufferedImage Position Spiele- und Multimedia-Programmierung 8
coolian meine funktion um die höhe des terrains an bestimmter position in diesem fall spieler position zu bekommen giebt nur 0 zurück Spiele- und Multimedia-Programmierung 6
T Position eines Image verändern mithilfe eines Timers Spiele- und Multimedia-Programmierung 6
E Isometrische Tiles mit unterschiedlicher Größe an korrekter Position zeichnen Spiele- und Multimedia-Programmierung 1
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
M [JAVA 3D] Position des Objektes verändern Spiele- und Multimedia-Programmierung 16
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
W "Kamera"-Position Spiele- und Multimedia-Programmierung 24
M Exakte Position auf Kugel mit Maus picken , Java3d Spiele- und Multimedia-Programmierung 14
T Maus-Cursor-Position manipulieren Spiele- und Multimedia-Programmierung 3
K Position im Raum bestimmen Spiele- und Multimedia-Programmierung 11
M Position der ViewingPlatform als Point3d-Objekt? Spiele- und Multimedia-Programmierung 12
F Position eines Objektes auslesen. Spiele- und Multimedia-Programmierung 7
G Wie kann ich die Kamera / View Position ausgeben? Spiele- und Multimedia-Programmierung 3
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
D mehrere Graphiken erstellen und ihre Position definieren Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben