Mp3-Attribute auslesen & beschreiben

beastofchaos

Bekanntes Mitglied
Hallo Leute,
Ich möchte gerade eine App für meinen Compi basteln, in der ich einen Ordner auswähle und der Titel umbennant wird nach dem Muster "Künstler" - "Songtitel".

Die Frage ist, wie geh ich am leichtesten an das Problem ran. Hab einige Beiträge gefunden, in dem das thematisiert ist unter dem Namen "IDv3/4". Ich liste jetzt mal Links und meine Problem zu der Herangehensweise auf:

Also als erstes kennt man verbreitet die Freeware "jd3lib". Problem: Was soll ich jetzt mit der runtergeladenen Datei "jd2lib.jar" machen? (in Eclipse einbaun, genauso wie öffnen, geht nich^^)
* Java ID3 Tag Library
* id3v2.3.0 - ID3.org
* jd3Lib - Java ID3/MP3 Library | Free Audio & Video software downloads at SourceForge.net

Per FileInfo und Stream.
Noch nicht ausprobiert, aber klingt leicht:
* MP3-Titelinformationen mit .NET auslesen

Per AudioFileFormat (geht nicht!):
*http://www.java-forum.org/java-basics-anfaenger-themen/90445-mp3-file-attribute-auslesen.html

Per DataInputStream, Buffer und soweiter:
*MP3 IDV3 Tags auslesen @ tutorials.de: Tutorials, Forum & Hilfe (2. Post)


Also ich hab jetzt wegen Problem bei den anderen Sachen das letzte Beispiel genommen und hab es meinen Bedürfnis entsprechend anpassen können. Ich versteh zwar noch nicht 100% alles im Quellcode, aber es funktioniert, so wie ich es will und zählt für die private Anwendung. Mein Quellcode häng ich mal ganz am Ende ins Post-Scriptum.
Zu dem Beispiel, es gibt bei IDV für die einzelnen Attribute jeweils "Schlüssel", die nach Ausprobieren so gehen:

-Titel: "TIT2"
-Jahr: "TYER"
-Lied: "APIC" (unverständliches Gebrabbel)
-Kommentar: "COMM"
-Album: "TALB"
-Albuminterpret: "TPE2"
-Mitwirkender Interpret: "TPE1"

Ich brauche für meine Bedürfnis eigentlich nur Titel, Albuminterpret und Mitw. Interpret. Das auslesen funktioniert in meinem Quellcode auch alles suppi und ich konnte schon Titel, etc. als String speichern, damit alles zu Editierung der Datei bereitsteht. Die Frage ist nun, nachdem ich per DataInputStream nur auslesen kann, wie ich denn in diesem Buchstabensalat auch was schreiben kann? (DataOutputStram? Und wie?).

Meinetwegen lass ich mich auch zu einer leichteren Lösung bereit schlagen, solange es mir wie einem 1.Klässler erklärt wird :))

Gruß und Dankeschön für zukünftige Hilfe (oh ja, ihr werdet mir helfen! ^-^), Thomas

PS: Hier der ganze Quellcode (Layout-Sachen sind teilweise ausgelassen)
- Wichtig ist die untere Methode "editFile()":
Java:
package main;

import java.awt.BorderLayout;
[...]
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class ChangerFrame extends JFrame implements ActionListener{
	private JFileChooser chooser;
	private JTextField fieldPath;
	private JButton buttonSearch;
	
	private JButton buttonOk;
	
	
	public ChangerFrame(){
		super();
		setAlwaysOnTop(true);
		Container cont = getContentPane();		
		[...]
		cont.add(panel);
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == buttonSearch){
			chooser.setDialogTitle("Wo liegen die zu aktualisierenden Lieder?");
			if (fieldPath.getText().length() > 0){
				try{
					chooser.setSelectedFile(new File(fieldPath.getText()));
				}catch(Exception ex){}
			}
			chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
			int result = chooser.showOpenDialog(this);
			switch(result){
			case JFileChooser.APPROVE_OPTION:
				fieldPath.setText(chooser.getSelectedFile().getPath());
				break;
			case JFileChooser.CANCEL_OPTION:
				fieldPath.setText("");
				break;
			}
		}
		else if (e.getSource() == buttonOk){
			editFile(chooser.getSelectedFile());
		}
	}
	
	private void editFile(File file){
		if (file == null){
			return;
		}
		
		File[] fileArray = file.listFiles();
		for (File f: fileArray){
			try {
				String fileInterpret = "";            // Keyword: TPE1
				String fileTitle = "";                // Keyword: TIT2
				String fileAlbumInterpret = "";       // Keyword: TPE2
				
				if (!f.getPath().endsWith(".mp3")){
					continue;
				}
				DataInputStream dis = new DataInputStream(new FileInputStream(f));
	            dis.skipBytes(10);
	            while(true){
	                byte[] b = new byte[4];
	                dis.read(b);
	                String keyword = new String(b);
	                
	                int frameBodySize = dis.readInt();
	                if (frameBodySize == 0)
	                    break;
	                
	                dis.readShort();
	                
	                byte[] textBuffer = new byte[frameBodySize];
	                dis.read(textBuffer);
	 
	                StringBuffer buffer = new StringBuffer();
	                for (int i = 0; i < textBuffer.length; i++) {
	                    if (textBuffer[i] == 0)
	                        continue;
	 
	                    if (keyword.startsWith("T")) {
	                        if (i < 1)
	                            continue;
	                    }
	 
	                    buffer.append((char) textBuffer[i]);
	                }
	                
	                if (keyword.equals("TPE1")){
	                	fileInterpret = buffer.toString();
	                }
	                else if (keyword.equals("TPE2")){
	                	fileAlbumInterpret = buffer.toString();
	                	
	                }
	                else if (keyword.equals("TIT2")){
	                	fileTitle = buffer.toString();
	                }
	                
	                System.out.println("Keyword: " + keyword);
	                System.out.println("Inhalt: " + buffer.toString());
	                System.out.println("_______________________");
	            }
	            
	            actualizeFile(f, fileInterpret, fileAlbumInterpret, fileTitle);
	            
			} catch(Exception e) {}
		}
	}
	
	public void actualizeFile(File f, String interpret, String albumInterpret, String title){
		renameFile(f, interpret + " - " + title);
		// TO DO ???????????
	}
	
	public void renameFile(File source, String name){
		
		File destination = new File(source.getParent() + "\\" + name + ".mp3");
		// Datei wird umbenannt/verschoben
		if(!source.renameTo(destination)){
		    System.err.println("Fehler beim Umbenennen der Datei: " + source.getName());
		}
	}
}

EDIT: Die "renameFile"-Methode funktioniert leider nicht, sprich renameTo() gibt mir false zurück. Wisst ihr wieso?
 
Zuletzt bearbeitet:

pl4gu33

Top Contributor
EDIT: Die "renameFile"-Methode funktioniert leider nicht, sprich renameTo() gibt mir false zurück. Wisst ihr wieso?

gibt getParent() vll. Null zurück ?

hier ne andere Lösung: ;)

Java:
File myfile=new File("TEST.mp3");
		try {
			myfile.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		String path=myfile.getAbsolutePath();
		int stelle=path.lastIndexOf("\\");
		String newPath=path.substring(0, stelle)+"\\hallo.mp3";
		File newFile=new File(newPath);
		myfile.renameTo(newFile);

hier auch nen Link mit nem Beispiel dazu:

Getting the Parents of a Filename Path | Example Depot
 
Zuletzt bearbeitet:

beastofchaos

Bekanntes Mitglied
Also da ich mein File per JFileChooser auswählen lasse, glaub ich das nicht. Ich habs im Compiler durchlaufen lassen und konnte sehen, dass bei beiden ein "realistischer" Pfad ist. Ich hab mal ein Beispiel-Lied einfach a genannt. Mein Programm will nun daran das Shema "Interpret" - "Titel" anwenden. Im Debugger funktioniert alles, Namensgebung und alles ist richtig. Und trotzdem gibt mir renameTo "false" zurück. Ich glaubs zwar nicht, aber liegt das iwie an Windows7 :D
Probiert doch einmal bitte den Code bei euch aus.

Gruß, Thomas

Edit: Wo ist eig der Unterschied zwischen getAbsolutPath(), getCanceledPath() und getPath()? Im Debugger kommt bei mir immer das selbe raus.

Edit2: Problem gefunden! Ich muss vorher in "editFile()" den DataInputStream auch wieder closen. Namen werden nun also nach dem Shema geändert. Jetzt frag ich mich nur noch, wie ich jetzt zum Beispiel den AlbumInterpret verändern kann. Vll. wäre hierfür doch so eine Freeware ganz gut, aber ich komm mit denen nicht klar, wie ich schon geschrieben habe :/
 
Zuletzt bearbeitet:

beastofchaos

Bekanntes Mitglied
Was wären denn noch Alternativen, wo man mit speziellen Klassen eine solche Datei beschreiben kann?

Habs zwar mit dem AudioFileFormat ausprobiert, aber das läuft bei mir iwie nicht... :/

Hab das jetzt mal als eine Art "Weckruf" geschrieben, da das Thema, glaub ich, sehr interessant ist und es sicher genügend Lösungen gibt :D

Gruß, Thomas
 

FerFemNemBem

Bekanntes Mitglied
Halloechen,

stimmt ja. Das hat der Paul wohl vergessen. :)
Ist mir selbst noch nie aufgefallen, da ich das bei mir als eigenes Projekt eingebunden habe. Schaust Du hier unter "trunk" - da findest Du die Sourcen...

Wenn Du das als Repository-URL angibst: "https://svn.java.net/svn/jaudiotagger~svn" kannst Du das Projekt fuer Dich auschecken.

Falls Dir das zuviel Aufwand ist, kann ichs Dir auch compilieren uns als "*.jar" zukommen lassen...

Das ist aber (meiner Meinung nach) die beste und vollstaendigste java-Implementierung in Sachen AudioTags (und ich habe lange gesucht und viele ausprobiert). Von daher lohnt sich der "Aufwand" das aus dem svn zu holen.

Gruss, FFNB.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L xml node mit attribute auslesen Allgemeine Java-Themen 2
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
I Attribute in Textfile auslesen Allgemeine Java-Themen 13
L Alle Attribute eines Source-Files auslesen Allgemeine Java-Themen 2
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
Junger_Basileus Attribute, Arrays, Schleifen Allgemeine Java-Themen 9
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
D JSF Bean Attribute bei Seitenaufruf Allgemeine Java-Themen 6
M PDF Drucker-Attribute hinterlegen Allgemeine Java-Themen 3
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
T [htmlparser.sourceforge.net] Attribute extrahieren Allgemeine Java-Themen 3
T Namenskonventionen für Objekt-Attribute Allgemeine Java-Themen 12
J Attribute eines Objekts in ByteArray Allgemeine Java-Themen 3
G [JDK 6u2] - JAR Failed to load Main-Class manifest attribute Allgemeine Java-Themen 6
E Attribute in Interfaces möglich? Allgemeine Java-Themen 17
MQue Button Attribute setzen Allgemeine Java-Themen 14
F JSP XML ATTRIBUTE Allgemeine Java-Themen 2
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
J Attribute beim Drucken ändern/ausstellen Allgemeine Java-Themen 8
A Dynamisch Attribute hinzufügen Allgemeine Java-Themen 3
B Zugriff auf Attribute/Methoden der init-Klasse Allgemeine Java-Themen 10
L Input/Output Email mit großer Pdf Anhang auslesen? Allgemeine Java-Themen 6
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
T INI - Einträge auslesen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
O PDF auslesen und verändern, was ist besser iText oder PDFBox ? Allgemeine Java-Themen 9
Robertop Status von Caps- und NumLock auslesen Allgemeine Java-Themen 1
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
G Mac Package auslesen Allgemeine Java-Themen 17
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
L Dateien richtig auslesen Allgemeine Java-Themen 6
F WireGuard Status auslesen Allgemeine Java-Themen 3
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
N Txt Datei auslesen. Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
x46 Webseite in Java auslesen Allgemeine Java-Themen 2
M Html Seite auslesen Allgemeine Java-Themen 16
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
B Cookie auslesen Allgemeine Java-Themen 3
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
J Teil einer URL auslesen Allgemeine Java-Themen 13
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
C Position von Pixeln in Bilder auslesen Allgemeine Java-Themen 2
M aktive WLAN Teilnehmer auslesen? Allgemeine Java-Themen 6
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
C Webseite auslesen Allgemeine Java-Themen 3
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
M Tastatureingabe von Sondertasten auslesen Allgemeine Java-Themen 6
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
T Url aus txt Datei auslesen und öffnen? Allgemeine Java-Themen 4
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
KeVoZ_ Properties mit String auslesen Allgemeine Java-Themen 11
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
D Aktuell installierte Java Version auslesen unter Windows Allgemeine Java-Themen 5
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
M Input/Output USB Geräteinstanzkennung auslesen Allgemeine Java-Themen 3
W 2D-Grafik Erstellungsdatum JPG direkt aus Header (EXIF) auslesen. Allgemeine Java-Themen 5
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
T Datei Byteweise auslesen Allgemeine Java-Themen 1
T Datentypen MNIST Datenbank auslesen (.gz) Allgemeine Java-Themen 0
T Ini Datei auslesen Allgemeine Java-Themen 3
J Temperatur aus bytes auslesen. Allgemeine Java-Themen 13
I JSoup Class auslesen Allgemeine Java-Themen 1
Bluedaishi Textdateien auslesen Allgemeine Java-Themen 12
T ELM327 OBD2 auslesen Allgemeine Java-Themen 0
D Double aus String auslesen Allgemeine Java-Themen 8
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
A interaktives PDF auslesen/auswerten? Allgemeine Java-Themen 0
G Daten aus Website auslesen Allgemeine Java-Themen 7
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
I Java FX JsonObjekt Children auslesen Allgemeine Java-Themen 23
M RXTX Details auslesen Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben