-1

助けが必要です。試してみましたが、勝つことを考えていません。

Windows 用の XAMPP(v7.4.5) でID3 PECLを実行する必要があります。

昨日、PHP.net の Web サイトでPECL の記事を読み進めようと 1 日を費やしましたが、残念ながら、私の知識はまだそのレベルに達していないため、あまり意味がありません。ID3 拡張子の dll ファイルも探してみましたが、見つかりません。ID3 PECL ページでは、ソース ファイルのみをダウンロードできます。

おそらく、プロセスをより素人の言葉で説明できる十分な忍耐力を持っている人はいますか... いわば私のためにそれを馬鹿にしてください?

ありとあらゆる助けをいただければ幸いです。

編集

誰かが助けになることができますか?

Lelio の助けを借りて、MP3 から情報を抽出する方法を手に入れました。ジャンルブロックと添付画像ブロックにアクセスするための 2 行を追加しました。ジャンルブロックが機能します。ただし、添付画像ブロックはそうではありません。

script-mp3-tag-reader.phpと呼ばれる別の php ファイルとして保存される更新されたコードは次のとおりです。

<?php
    function tagReader($file)
    {
        $id3v23 = array("TIT2","TALB","TPE1","TRCK","TDRC","TLEN","USLT","TCON","APIC");
        $id3v22 = array("TT2","TAL","TP1","TRK","TYE","TLE","ULT","TCO");
        $fsize = filesize($file);
        $fd = fopen($file,"r");
        $tag = fread($fd,$fsize);
        $tmp = "";
        fclose($fd);
        if (substr($tag,0,3) == "ID3")
        {
            $result['FileName'] = $file;
            $result['TAG'] = substr($tag,0,3);
            $result['Version'] = hexdec(bin2hex(substr($tag,3,1))).".".hexdec(bin2hex(substr($tag,4,1)));
        }
        if($result['Version'] == "4.0" || $result['Version'] == "3.0")
        {
            for ($i=0;$i<count($id3v23);$i++)
            {
                if (strpos($tag,$id3v23[$i].chr(0))!= FALSE)
                {
                    $pos = strpos($tag, $id3v23[$i].chr(0));
                    $len = hexdec(bin2hex(substr($tag,($pos+5),3)));
                    $data = substr($tag, $pos, 9+$len);
                    for ($a=0;$a<strlen($data);$a++)
                    {
                        $char = substr($data,$a,1);
                        if($char >= " " && $char <= "~")
                        {
                            $tmp.=$char;
                        }
                    }
                    if(substr($tmp,0,4) == "TIT2") $result['Title'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "TALB") $result['Album'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "TPE1") $result['Artist'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "TRCK") $result['TrackNo'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "TDRC") $result['Year'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "TLEN") $result['Lenght'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "USLT") $result['Lyric'] = substr($tmp,7);
                    if(substr($tmp,0,4) == "TCON") $result['Genre'] = substr($tmp,4);
                    if(substr($tmp,0,4) == "APIC") $result['AttachedPicture'] = substr($tmp,4);
                    $tmp = "";
                }
            }
        }
        if($result['Version'] == "2.0")
        {
            for ($i=0;$i<count($id3v22);$i++)
            {
                if (strpos($tag,$id3v22[$i].chr(0))!= FALSE)
                {
                    $pos = strpos($tag, $id3v22[$i].chr(0));
                    $len = hexdec(bin2hex(substr($tag,($pos+3),3)));
                    $data = substr($tag, $pos, 6+$len);
                    for ($a=0;$a<strlen($data);$a++)
                    {
                        $char = substr($data,$a,1);
                        if($char >= " " && $char <= "~")
                        {
                            $tmp.=$char;
                        }
                    }
                    if(substr($tmp,0,3) == "TT2") $result['Title'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "TAL") $result['Album'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "TP1") $result['Artist'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "TRK") $result['TrackNo'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "TYE") $result['Year'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "TLE") $result['Lenght'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "ULT") $result['Lyric'] = substr($tmp,6);
                    if(substr($tmp,0,3) == "TCO") $result['Genre'] = substr($tmp,3);
                    if(substr($tmp,0,3) == "PIC") $result['AttachedPicture'] = base64_encode(substr($tmp,3));
                    $tmp = "";
                }
            }
        }
        return $result;
    }
?>

私のindex.phpファイルでは、上記の PHP スクリプトを次のように読み込んで使用します。

<?php
    require_once($_SERVER['DOCUMENT_ROOT'].'/script/php/script-mp3-tag-reader.php');
    $mp3 = $_SERVER['DOCUMENT_ROOT'].'/media/audio/mp3/test_audio.mp3';
    $myResult = tagReader($mp3);
    print_r($myResult);
?>

見るprint_r($myresult);と、情報が実際にそこにあり、正しいことがわかります...添付画像の部分ではありません。必要以上に抽出しているようで、必要なものだけにアクセスする方法がわかりません。

4

1 に答える 1

-1

このようなものがうまくいくはずです。最近テストされていませんが、探しているデータを mp3 ファイルから読み取るために動作するはずです。

function tagReader($file){
    $id3v23 = array("TIT2","TALB","TPE1","TRCK","TDRC","TLEN","USLT");
    $id3v22 = array("TT2","TAL","TP1","TRK","TYE","TLE","ULT");
    $fsize = filesize($file);
    $fd = fopen($file,"r");
    $tag = fread($fd,$fsize);
    $tmp = "";
    fclose($fd);
    if (substr($tag,0,3) == "ID3") {
        $result['FileName'] = $file;
        $result['TAG'] = substr($tag,0,3);
        $result['Version'] = hexdec(bin2hex(substr($tag,3,1))).".".hexdec(bin2hex(substr($tag,4,1)));
    }
    if($result['Version'] == "4.0" || $result['Version'] == "3.0"){
        for ($i=0;$i<count($id3v23);$i++){
            if (strpos($tag,$id3v23[$i].chr(0))!= FALSE){
                $pos = strpos($tag, $id3v23[$i].chr(0));
                $len = hexdec(bin2hex(substr($tag,($pos+5),3)));
                $data = substr($tag, $pos, 9+$len);
                for ($a=0;$a<strlen($data);$a++){
                    $char = substr($data,$a,1);
                    if($char >= " " && $char <= "~") $tmp.=$char;
                }
                if(substr($tmp,0,4) == "TIT2") $result['Title'] = substr($tmp,4);
                if(substr($tmp,0,4) == "TALB") $result['Album'] = substr($tmp,4);
                if(substr($tmp,0,4) == "TPE1") $result['Author'] = substr($tmp,4);
                if(substr($tmp,0,4) == "TRCK") $result['Track'] = substr($tmp,4);
                if(substr($tmp,0,4) == "TDRC") $result['Year'] = substr($tmp,4);
                if(substr($tmp,0,4) == "TLEN") $result['Lenght'] = substr($tmp,4);
                if(substr($tmp,0,4) == "USLT") $result['Lyric'] = substr($tmp,7);
                $tmp = "";
            }
        }
    }
    if($result['Version'] == "2.0"){
        for ($i=0;$i<count($id3v22);$i++){
            if (strpos($tag,$id3v22[$i].chr(0))!= FALSE){
                $pos = strpos($tag, $id3v22[$i].chr(0));
                $len = hexdec(bin2hex(substr($tag,($pos+3),3)));
                $data = substr($tag, $pos, 6+$len);
                for ($a=0;$a<strlen($data);$a++){
                    $char = substr($data,$a,1);
                    if($char >= " " && $char <= "~") $tmp.=$char;
                }
                if(substr($tmp,0,3) == "TT2") $result['Title'] = substr($tmp,3);
                if(substr($tmp,0,3) == "TAL") $result['Album'] = substr($tmp,3);
                if(substr($tmp,0,3) == "TP1") $result['Author'] = substr($tmp,3);
                if(substr($tmp,0,3) == "TRK") $result['Track'] = substr($tmp,3);
                if(substr($tmp,0,3) == "TYE") $result['Year'] = substr($tmp,3);
                if(substr($tmp,0,3) == "TLE") $result['Lenght'] = substr($tmp,3);
                if(substr($tmp,0,3) == "ULT") $result['Lyric'] = substr($tmp,6);
                $tmp = "";
            }
        }   
    }
    return $result;
}
于 2020-06-03T09:56:55.667 に答える