PDA

View Full Version : حرفه ای: tag زدن به فایل های صوتی با PHP



shahin_mahvareh
دوشنبه 08 خرداد 1391, 04:18 صبح
سلام دوستان.یه سری فایل با لیچر به سرور انتقال میدم. الان میخوام که پس از این که فایل انتقال داده شدن همان جا به آن فایل tag (Summary) اضافه بشه.و آدرس سایتم تگ بشه توی فایل های موزیک.
حالا این کد رو از سایت php.net پیدا کردم.


<?php
function setHexTagLen($int) {
$n = pow(128,3);
$intVar = $int;
$m = "";
for ($i=0;$i<4;$i++) {
$m .= chr(floor($intVar/$n));
$intVar = $intVar % $n;
$n=$n/128;
}
return $m;
}
?>
<?php
define(_Title,"TIT2");
define(_Artist,"TPE1");
define(_Group,"TPE2");
define(_Album,"TALB");
define(_Genre,"TCON");
define(_TrackNo,"TRCK");
define(_Year,"TYER");
$frames = array(_Album=>"[ www.Mysite.com ]",
_TrackNo=>" ",
_Title=>"[ www.Mysitec.com ]",
_Artist=>"[ www.Mysite.com ]",
_Group=>"",
_Year=>"",
_Genre=>"");

#..........................................
# WRITE ID3 TAGS (Write MP3 [v1, v2]
#..........................................
function writeTags($mp3) {
$fl = file_get_contents($mp3);
$Header = substr($fl,0,10);
$tagLen = calcDecTagLen(substr($Header,6,4),$tagLen);
$music = substr($fl,$tagLen+10,-128);
# Can use input Header for output but you may
# wish to change the output filename for testing
$tagLen = 1024; # or whatever you like >your actual
$Header = substr($Header,0,6).setHexTagLen($tagLen);
file_put_contents($mp3,mkV2Tag($Header,$tagLen).$m usic.mkV1Tag());
}
# Create the V2 tag
function mkV2Tag($Hdr,$tagLen) {
Global $frames;
$null = chr(0);
$nl3 = $null.$null.$null; # 0 bytes for flags and encoding
$out = "";
foreach($frames as $ky=>$val) {
$n=strlen($val)+1;
$out.= $ky.mkFrmLen($n).$nl3.$val;
}
return $Hdr.str_pad($out,$tagLen,$null);
}
# Calculate Tag Length from bytes 6-10 of existing header
function calcDecTagLen($word) {
$m = 1;
$int = 0;
for ($i=strlen($word)-1;$i>-1;$i--) {
$int +=$m*ord($word[$i]);
$m=$m*128;
}
return $int;
}
# Make the 4 byte frame length value for the V2tag
function mkFrmLen($int) {
$hx = "";
while ($int>0) {
$n = $int % 256;
$hx = chr($n).$hx;
$int=floor($int/256);
}
return str_pad($hx,4,chr(0),STR_PAD_LEFT);
}
# Create the 128 byte V1 tag
function mkV1Tag() {
Global $frames;
$tagOut = "TAG".
adj($frames[_Title]).
adj($frames[_Artist]).
adj($frames[_Album]).
str_pad($frames[_Year],4).
str_pad(" ",29," ").
chr($frames[_TrackNo]).
chr($n);
return $tagOut;
}
# Pad the header to 30 characters
function adj($str) {
return substr(str_pad($str,30,chr(0)),0,30);
}

# This is a simple example for an mp3 in current folder
$okaytest = writeTags("2.ogg");
if (!$okaytest){
echo "<font color=\"red\">Tabg Not Change</font>";
}
else {
echo "<font color=\"green\">Tag Is Changed</font>";
}
?>



این رو میخوام اضافه کنم به لیچر که بعد از دانلود تگ ها رو اضافه کنه.
این کد چند تا مشکل داره.
1-میخوام که اول تشخیص بده که پسوند فایل چی هست و اگر پسوند فایل ogg یا mp3 بود تگ ها رو بزنه.

2-این کد الان روی فایل های mp3 خوب عمل میکنه و مشکلی نداره ولی روی فایل های ogg وقتی اعمال میشه دگه اون فایل اجرا نمیشه. من زیاد به نوع تگ ها آشنا نیستم.مثل اینکه برای فایل های ogg باید به صورت vorbiscomment تگ گذاری بشه و بر روی فایل های mp3 باید به صورت id3v1 یا id3v2 تگ گذاری بشه.راستشو بخواین من اصلا نمیدونم این id3v1 یا id3v2 یا vorbiscomment چی هست و چه تفاوتایی با هم دارن.

3-میخوام که یه لو گو هم به این فایل های موزیک اضافه بشه و آدرس لوگوهم از روی سرور باشه مثلا www.mysite.om/logo.jpg (http://www.mysite.om/logo.jpg) و هر کدوم رو که تگ میزنه این لوگو هم به اون اضافه کنه.روی mp3 میدونم میشه این کارو کرد ولی ogg رو نمیدونم.


کسی میتونه راجع به این موضوع کمکم کنه؟

shahin_mahvareh
دوشنبه 08 خرداد 1391, 16:39 عصر
کسی نیست منو کمک کنه؟