سؤال

أريد الحصول على برنامج يقرأ البيانات الوصفية من ملف MP3.يجب أن يكون برنامجي قادرًا أيضًا على تحرير هذه البيانات الوصفية.ماذا يمكنني أن أفعل؟

يجب أن أبحث عن بعض التعليمات البرمجية مفتوحة المصدر.ولكن لديهم رمز.ولكن ليست فكرة مبسطة لعملي الذي سيفعلونه.

عندما قرأت المزيد وجدت أن البيانات الوصفية مخزنة في ملف MP3 نفسه.لكنني غير قادر حتى الآن على تكوين فكرة كاملة عن برنامج طفلي.

سيكون موضع تقدير أي مساعدة؛باستخدام برنامج أو فكرة (مثل الخوارزمية).:)

هل كانت مفيدة؟

المحلول

بايت 128 الأخيرة من ملف MP3 يحتوي على بيانات التعريف عن ملف MP3، يمكنك كتابة برنامج لقراءة بايت 128 مشاركة ...

وUPDATE:

وتنفيذ ID3V1

ويتم تخزين المعلومات في بايت 128 مشاركة من MP3. الوسم    وقد حصلت على المجالات التالية، وإزاحة تعطى هنا، هي من    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- هذا هو مجرد وسيلة قبيحة للحصول على البيانات الوصفية وأنه قد لا يكون هناك فعلا لأن العالم قد انتقل إلى ID3v2 العلامات. ID3V1 عفا عليه الزمن بالفعل. ID3V2 هو أكثر تعقيدا من هذا، لذلك من الناحية المثالية يجب عليك استخدام المكتبات الموجودة لقراءة البيانات ID3v2 العلامات من ملفات MP3. مجرد وضع هذا هناك.

نصائح أخرى

يمكنك استخدام اباتشي تيكا Java API لتحليل البيانات الوصفية من ملفات MP3 مثل العنوان والألبوم والنوع والمدة والملحن والفنان وما إلى ذلك..الجرار المطلوبة هي تيكا-موزعون-1.4، تيكا-كور-1.4.

نموذج البرنامج:

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();
        }
        }
    }

لJ2ME (وهو ما كنت تناضل مع)، وهنا رمز التي عملت بالنسبة لي ..

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) {
  }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top