سؤال

أنا أبحث عن الأفضل أو أي طريقة لتعيين ألبوم الفن mp3s باستخدام php.

اقتراحات؟

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

المحلول

Art Art عبارة عن إطار بيانات تم تحديده كمواصفات "صورة مرفقة" Due ID3V2، و GETID3 () الآن طريقة واحدة فقط لكتابة جميع إطارات البيانات الممكنة في ID3V2 مع Pure Php.

انظر إلى هذا المصدر:http://getid3.sourceforge.net/source/write.id3v2.pps.

ابحث عن هذا النص في المصدر:

// 4.14  APIC Attached picture

هناك قطعة من التعليمات البرمجية المسؤول عن كتابة الألبوم.

طريقة أخرى، يبدو أنها ليست بطيئة مثل PHP النقي، هي استخدام بعض التطبيقات الخارجية، وسيتم إطلاقها بواسطة البرنامج النصي PHP. إذا كانت خدمتك مصممة للعمل تحت حمولة عالية، فإن أداة ثنائية مترجمة ستكون حلا أفضل.

نصائح أخرى

وسيلة أفضل (أسرع) للقيام بذلك ستكون من خلال تطبيق خارجي ووظيفة PHP EXEC () متعة أمر. أوصي eyed3..

لست متأكدا من أن هذا لا يزال مشكلة ولكن:

GETID3 كاملة بشكل مثير للدهشة () (http:/getid3.org.) سوف يحل المشروع كل مشاكلك. الدفع هذه منشور المنتدى لمزيد من المعلومات.

تثبيت GETID3 باستخدام الملحن composer require james-heinrich/getid3ثم استخدم هذا الرمز لتحديث علامات ID3 الخاصة بك

// Initialize getID3 engine
$getID3 = new getID3;

// Initialize getID3 tag-writing module
$tagwriter = new getid3_writetags;
$tagwriter->filename = 'path/to/file.mp3';
$tagwriter->tagformats = array('id3v2.4');
$tagwriter->overwrite_tags    = true;
$tagwriter->remove_other_tags = true;
$tagwriter->tag_encoding      = 'UTF-8';

$pictureFile = file_get_contents("path/to/image.jpg");

$TagData = array(
    'title' => array('My Title'),
    'artist' => array('My Artist'),
    'album' => array('This Album'),
    'comment' => array('My comment'),
    'year' => array(2018),
    'attached_picture' => array(
        array (
            'data'=> $pictureFile,
            'picturetypeid'=> 3,
            'mime'=> 'image/jpeg',
            'description' => 'My Picture'
        )
    )
);

$tagwriter->tag_data = $TagData;

// write tags
if ($tagwriter->WriteTags()){
    return true;
}else{
    throw new \Exception(implode(' : ', $tagwriter->errors));
}

يمكنك أن تنظر إلى GETID3 () مشروع. وبعد لا أستطيع أن أعد أنه يمكنه التعامل مع الصور ولكنه يدعي أنه قادر على كتابة علامات ID3 لملفات MP3 حتى أعتقد أنه سيكون أفضل رهان.

بدلا من مجرد مشاركة رمز التحديث الفني للألبوم، أنا ذاهب لنشر فئة المجمع MP3 بالكامل من GETID3 هنا حتى تتمكن من استخدام كما يحلو لك

الاستعمال

$mp3 = new Whisppa\Music\MP3($mp3_filepath);

//Get data
$mp3->title
$mp3->artist
$mp3->album
$mp3->genre

//set properties
$mp3->year = '2014';

//change album art
$mp3->set_art(file_get_contents($pathtoimage), 'image/jpeg', 'New Caption');//sets front album art

//save new details
$mp3->save();

فصل

<?php

namespace Whisppa\Music;

class MP3
{
    protected static $_id3;

    protected $file;
    protected $id3;
    protected $data     = null;


    protected $info =  ['duration'];
    protected $tags =  ['title', 'artist', 'album', 'year', 'genre', 'comment', 'track', 'attached_picture', 'image'];
    protected $readonly_tags =  ['attached_picture', 'comment', 'image'];
                                //'popularimeter' => ['email'=> 'music@whisppa.com', 'rating'=> 1, 'data'=> 0],//rating: 5 = 255, 4 = 196, 3 = 128, 2 = 64,1 = 1 | data: counter


    public function __construct($file)
    {
        $this->file = $file;
        $this->id3  = self::id3();
    }

    public function update_filepath($file)
    {
        $this->file = $file;
    }

    public function save()
    {
        $tagwriter = new \GetId3\Write\Tags;
        $tagwriter->filename = $this->file;
        $tagwriter->tag_encoding = 'UTF-8';
        $tagwriter->tagformats = ['id3v2.3', 'id3v1'];
        $tagwriter->overwrite_tags = true;
        $tagwriter->remove_other_tags = true;

        $tagwriter->tag_data = $this->data;

        // write tags
        if ($tagwriter->WriteTags())
            return true;
        else
            throw new \Exception(implode(' : ', $tagwriter->errors));
    }


    public static function id3()
    {
        if(!self::$_id3)
            self::$_id3 = new \GetId3\GetId3Core;

        return self::$_id3;
    }

    public function set_art($data, $mime = 'image/jpeg', $caption = 'Whisppa Music')
    {
        $this->data['attached_picture'] = [];

        $this->data['attached_picture'][0]['data']            = $data;
        $this->data['attached_picture'][0]['picturetypeid']   = 0x03;    // 'Cover (front)'    
        $this->data['attached_picture'][0]['description']     = $caption;
        $this->data['attached_picture'][0]['mime']            = $mime;

        return $this;
    }

    public function __get($key)
    {
        if(!in_array($key, $this->tags) && !in_array($key, $this->info) && !isset($this->info[$key]))
            throw new \Exception("Unknown property '$key' for class '" . __class__ . "'");

        if($this->data === null)
            $this->analyze();

        if($key == 'image')
            return isset($this->data['attached_picture']) ? ['data' => $this->data['attached_picture'][0]['data'], 'mime' => $this->data['attached_picture'][0]['mime']] : null;
        else if(isset($this->info[$key]))
            return $this->info[$key];
        else
            return isset($this->data[$key]) ? $this->data[$key][0] : null;
    }

    public function __set($key, $value)
    {
        if(!in_array($key, $this->tags))
            throw new \Exception("Unknown property '$key' for class '" . __class__ . "'");
        if(in_array($key, $this->readonly_tags))
            throw new \Exception("Tying to set readonly property '$key' for class '" . __class__ . "'");

        if($this->data === null)
            $this->analyze();

        $this->data[$key] = [$value];
    }

    protected function analyze()
    {
        $data = $this->id3->analyze($this->file);

        $this->info =  [
                'duration' => isset($data['playtime_seconds']) ? ceil($data['playtime_seconds']) : 0,
            ];

        $this->data = isset($data['tags']) ? array_intersect_key($data['tags']['id3v2'], array_flip($this->tags)) : [];
        $this->data['comment'] = ['http://whisppa.com'];

        if(isset($data['id3v2']['APIC']))
            $this->data['attached_picture'] = [$data['id3v2']['APIC'][0]];
    }


}

ملحوظة

لا يوجد أي رمز معالجة الأخطاء بعد. حاليا، أنا فقط الاعتماد على الاستثناءات عندما أحاول تشغيل أي عمليات. لا تتردد في تعديل واستخدام مناسب. يتطلب PHP GETID3.

إليك التعليمات البرمجية الأساسية لإضافة بيانات صورة و ID3 باستخدام GETID3. (FrostyMarvelous "Wrapper" يشمل رمز معادل، ومع ذلك أعتقد أنه من المفيد إظهار الأساسيات.)

<?php
    // Initialize getID3 engine
    $getID3 = new getID3;

    // Initialize getID3 tag-writing module
    $tagwriter = new getid3_writetags;
    $tagwriter->filename = 'audiofile.mp3';
    $tagwriter->tagformats = array('id3v2.3');
    $tagwriter->overwrite_tags    = true;
    $tagwriter->remove_other_tags = true;
    $tagwriter->tag_encoding      = $TextEncoding;

    $pictureFile=file_get_contents("image.jpg");

    $TagData = array(
        'title' => 'My Title',
        'artist' => 'My Artist',        
        'attached_picture' => array(   
            array (
                'data'=> $pictureFile,
                'picturetypeid'=> 3,
                'mime'=> 'image/jpeg',
                'description' => 'My Picture'
            )
        )
    );
?>

استخدم هذه الوظيفة الحملية في PHP،

<?php
    $tag = id3_get_tag( "path/to/example.mp3" );
    print_r($tag);
?>

لا أعتقد أنه من الممكن حقا مع PHP. أعني، أفترض أن أي شيء ممكن ولكن قد لا يكون حل PHP الأصلي. من PHP مستندات, أعتقد أن العناصر الوحيدة التي يمكن تحديثها هي:

  • لقب
  • فنانين
  • ألبوم
  • سنة
  • نوع
  • تعليق
  • مسار

اسف يا رجل. ربما قد يكون لدى بيرل أو بيثون أو روبي بعض الحل.

لست متأكدا مما إذا كنت معتادا على بيرل (أنا شخصيا لا أحب ذلك، لكنه جيد في أشياء مثل هذه ...). إليك برنامج نصي يبدو أنه قادر على سحب آرت الألبوم وتحريرها في MP3: http://www.plunder.com/-load-66279.htm.

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