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()":
EDIT: Die "renameFile"-Methode funktioniert leider nicht, sprich renameTo() gibt mir false zurück. Wisst ihr wieso?
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: