php ile bir mp3 ayarı albüm sanat

6 Cevap php

Ben PHP kullanarak mp3s Albüm Sanat ayarlamak için iyi ya da herhangi bir şekilde arıyorum.

Önerileriniz?

6 Cevap

Album art is a data frame identified as “Attached picture” due ID3v2 specification, and getID3() now is only one way to write all possible data frames in ID3v2 with pure PHP.

Look at this source: http://getid3.sourceforge.net/source/write.id3v2.phps

Kaynakta bu metin arama:

// 4.14  APIC Attached picture

albüm sanat yazma sorumlu kodu bir parça var.

Saf PHP gibi yavaş değil gibi görünüyor başka bir yolu, PHP komut dosyası tarafından başlatılan olacağını, bazı dış uygulama kullanmaktır. Servis yüksek bir yük altında çalışmak üzere tasarlanmış ise, ikili derlenmiş aracı daha iyi bir çözüm olacaktır.

Bunu yapmak için daha iyi (daha hızlı) yolu eğlenceli bir komut harici uygulama ve PHP exec () fonksiyonu aracılığıyla olacaktır. Ben tavsiye ederim eyeD3.

Emin değil bu hala bir konudur ama:

inanılmaz tam getid3 () (http://getid3.org) projesi tüm sorunları çözecektir. Daha fazla bilgi için this forum sonrası göz atın.

Sen getID3() project içine bakabilirsiniz. Ben o görüntüleri işleyebilir söz veremem ama senin en iyi bahis olacağını düşünüyorum bu yüzden MP3'leri ID3 etiketleri yazmak mümkün iddiasında.

Sadece albüm sanat güncelleştirmenin kodu paylaşmak yerine, ben istediğiniz gibi kullanabilirsiniz işte getID3 benim tüm MP3 sarıcı sınıf deftere olacak

Usage

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

Class

<?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]];
    }


}

Note

There isn't any error handling code yet. Currently, I am just relying on exceptions when I try to run any operations. Feel free to modify and use as fit. Requires PHP GETID3

Ben PHP ile gerçekten mümkün olduğunu sanmıyorum. Yani, her şey mümkün olduğunu varsayalım ama bir yerli PHP çözüm olmayabilir. Dan PHP Docs, ben güncellenebilir, sadece ürün olduğunu düşünüyorum:

  • Başlık
  • Sanatçılar
  • Albüm
  • Yıl
  • Tür
  • Yorum
  • Iz

Adam Üzgünüm. Belki Perl, Python, Ruby ya da bazı çözüm olabilir.

Ben (bu gibi şeyler de iyi, ben şahsen bunu sevmiyorum, ama ...) Perl aşina iseniz emin değilim. İşte bir MP3 albüm sanat çekmek ve düzenlemek mümkün görünüyor bir senaryo: http://www.plunder.com/-download-66279.htm