Frage

Ich möchte ein Programm, das Metadaten aus einer MP3-Datei liest. Mein Programm soll diese Metadaten bearbeiten auch in der Lage. Was kann ich machen?

habe ich für einige Open-Source-Code zu suchen. Aber sie haben Code; aber nicht vereinfacht Idee für meine Arbeit, die sie tun werden.

Wenn ich lese weiter fand ich die Metadaten in der MP3-Datei selbst gespeichert sind. Aber ich bin noch nicht in der Lage eine vollständige Vorstellung von meinem Baby-Programm zu machen.

Jede Hilfe wird geschätzt; mit einem Programm oder Idee (wie ein Algorithmus). :)

War es hilfreich?

Lösung

Das letzte 128 Bytes einer MP3-Datei Meta-Daten über die mp3-Datei enthält., Können Sie ein Programm schreiben, das letzte 128 Bytes lesen ...

UPDATE:

ID3v1 Umsetzung

Die Informationen sind in den letzten 128 Bytes eines MP3 gespeichert. der Tag    bekommen hat die folgenden Felder, und die Offsets hier gegeben, sind von    0-127.

 Field      Length    Offsets
 Tag        3           0-2
 Songname   30          3-32
 Artist     30         33-62
 Album      30         63-92
 Year       4          93-96
 Comment    30         97-126
 Genre      1           127

WARINING- Dies ist nur eine hässliche Art und Weise Metadaten zu bekommen und es könnte nicht wirklich dort sein, weil die Welt zu id3v2 bewegt hat. ID3v1 ist eigentlich überflüssig. ID3v2 ist komplexer als das, so im Idealfall sollten Sie vorhandene Bibliotheken verwenden id3v2 Daten von mp3s zu lesen. Nur darum gibt diese aus.

Andere Tipps

Sie können mit Apache Tika Java-API für Meta-Daten von MP3 Parsen wie Titel, Album, Genre, duraion, Komponist, Interpret und etc .. erforderlich Gläser sind tika-Parser-1.4, tika-Core-1.4.

Beispielprogramm:

package com.parse.mp3;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.mp3.Mp3Parser;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class AudioParser {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String fileLocation = "G:/asas/album/song.mp3";

        try {

        InputStream input = new FileInputStream(new File(fileLocation));
        ContentHandler handler = new DefaultHandler();
        Metadata metadata = new Metadata();
        Parser parser = new Mp3Parser();
        ParseContext parseCtx = new ParseContext();
        parser.parse(input, handler, metadata, parseCtx);
        input.close();

        // List all metadata
        String[] metadataNames = metadata.names();

        for(String name : metadataNames){
        System.out.println(name + ": " + metadata.get(name));
        }

        // Retrieve the necessary info from metadata
        // Names - title, xmpDM:artist etc. - mentioned below may differ based
        System.out.println("----------------------------------------------");
        System.out.println("Title: " + metadata.get("title"));
        System.out.println("Artists: " + metadata.get("xmpDM:artist"));
        System.out.println("Composer : "+metadata.get("xmpDM:composer"));
        System.out.println("Genre : "+metadata.get("xmpDM:genre"));
        System.out.println("Album : "+metadata.get("xmpDM:album"));

        } catch (FileNotFoundException e) {
        e.printStackTrace();
        } catch (IOException e) {
        e.printStackTrace();
        } catch (SAXException e) {
        e.printStackTrace();
        } catch (TikaException e) {
        e.printStackTrace();
        }
        }
    }

Für J2ME (das ist, was ich mit rang), hier ist der Code, der für mich gearbeitet ..

import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.*;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.MetaDataControl;
import javax.microedition.midlet.MIDlet;

public class MetaDataControlMIDlet extends MIDlet implements CommandListener {
  private Display display = null;
  private List list = new List("Message", List.IMPLICIT);
  private Command exitCommand = new Command("Exit", Command.EXIT, 1);
  private Alert alert = new Alert("Message");
  private Player player = null;  

  public MetaDataControlMIDlet() {    
    display = Display.getDisplay(this);
    alert.addCommand(exitCommand);
    alert.setCommandListener(this);
    list.addCommand(exitCommand);
    list.setCommandListener(this);
    //display.setCurrent(list);

  }

  public void startApp() {
      try {
      FileConnection connection = (FileConnection) Connector.open("file:///e:/breathe.mp3");
      InputStream is = null;
      is = connection.openInputStream();
      player = Manager.createPlayer(is, "audio/mp3");
      player.prefetch();
      player.realize();
    } catch (Exception e) {
      alert.setString(e.getMessage());
      display.setCurrent(alert);
      e.printStackTrace();
    }

    if (player != null) {
      MetaDataControl mControl = (MetaDataControl) player.getControl("javax.microedition.media.control.MetaDataControl");
      if (mControl == null) {
        alert.setString("No Meta Information");
        display.setCurrent(alert);
      } else {
        String[] keys = mControl.getKeys();
        for (int i = 0; i < keys.length; i++) {
          list.append(keys[i] + " -- " + mControl.getKeyValue(keys[i]), null);
        }
        display.setCurrent(list);
      }
    }
  }

  public void commandAction(Command cmd, Displayable disp) {
    if (cmd == exitCommand) {
      notifyDestroyed();
    }
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top