网页音乐播放教程之getid3类音频解析

网页音乐播放教程(一),基于getid3类,实现音频文件信息解析并将信息存储到对应的数据库中,以便前端网页需求

image description

基于getid3类的音频解析

因为是想弄一个能播放音乐的模块,就准备在网上找关于解析音乐文件的类,找到了几个,不过都不怎么满意,解析后的结果跟实际差距有点大,不是特别的准确,最后无意中发现了一个PHP解析音频文件的超强类(不仅仅局限于音频,连视频都能解析,当然这个我没试过,不过看他的源码,里面有关于视频类的类,感觉是应该能够解析的,有兴趣的同学可以去试试)。

这是其在getid3 GitHub源码,官网有点丑这边就不贴了,在GitHub上面有其官网地址。

源码下载下来后,我们只需要getid3这个文件夹里面的内容 description

使用

getid3这个文件夹复制到我们项目中加载第三方类库的位置,我这边就将其放在app\Libs目录下,为了方便,我这边就先新建一个Music文件夹,再将getid3文件夹放在其下面,如下图: description

至于如何设置第三方类库,我这边就不过多说明,有兴趣的可以去本人的博客支付宝第三方授权登陆去查看,里面有具体的设置步骤;还有就是,如果这边添加新的第三方类库后,直接使用可能会报没有xxx类的错误,需要在项目中先运行下面的命令,之后才能正常使用其中的类。

    composer dump-autoload

准备工作做完后,就可以直接使用了,下面说下简单的使用方法

  • 首先是在对应的Controller中,在其顶部先申明,引入其getid3的类
    require (app_path() . '/Libs/Music/getid3/getid3.php');
  • 之后在对应的方法中进行调用,我这边就先列一个例子:

    public function uploadMusic(){
        $info = new \getID3;
        $file = '音乐文件位置';//文件的绝对路径
        $file_info = $info->analyze($file);//分析文件
        //dd($file_info);//此处打印后,就可以直接看到对应音频文件的各种信息,当然我们只需要几个常用的信息即可
        //此处会有个问题,并不是所有的音频文件,其信息都是在id3v2这个key下面,我这边遇到的就是,当有wma格式的音频文件时,它是没有id3v2这个属性的,所以才有了下面的判断
        //当然也可能fileformat这个属性下的参数也不符合条件,我遇到的仅有这个参数的值符合条件,至于其他音频格式的我没有进行过多测试,如果这个判断还是报错,那就自己查看对应的音频解析后的信息,自己进行判断,实在不行就用工具给音频转为mp3格式,这个是肯定没问题的
        $fileformat = $file_info['fileformat'];
        if(isset($file_info['tags']['id3v2'])){
            $music_info[$key]['music_title'] = $file_info['tags']['id3v2']['title'][0];//标题
            $music_info[$key]['music_album'] = $file_info['tags']['id3v2']['album'][0];//专辑
            $music_info[$key]['music_artist'] = $file_info['tags']['id3v2']['artist'][0];//演唱者
         }else{
            $music_info[$key]['music_title'] = $file_info['tags'][$fileformat]['title'][0];//标题
            $music_info[$key]['music_album'] = $file_info['tags'][$fileformat]['album'][0];//专辑名称
            $music_info[$key]['music_artist'] = $file_info['tags'][$fileformat]['artist'][0];//演唱者
         }
         $music_info[$key]['music_play_time'] = $file_info['playtime_string'];//播放时长
         $music_info[$key]['music_mime_type'] = $file_info['mime_type'].'(.'.$file_info['fileformat'].')';//文件类型
         //human_filesize函数是返回一个大小可读性友好的格式,如2MB,300KB这样的格式
         $music_info[$key]['music_size'] = human_filesize($file_info['filesize']);//文件大小,单位自动适应
    }

常用的基本就这些了,当然还有个专辑图片,这个类没有提供相应的方法,当然也可能是我研究的不透彻,如果有找到的朋友,可以留言回复下,感谢;在网上我找了很长时间,也没找到一个好的方法,最后只找到一个有用的工具,链接会放在文末,至于使用说明,下一章再简单说下(很简单的,感觉不需要多说);

补充


    if(!function_exists('human_filesize')) {
        /**
         * 返回可读性更好的文件尺寸
         * @param $bytes
         * @param int $decimals
         * @return string
         */
        function human_filesize($bytes, $decimals = 2) {
            $size = ['B', 'kB', 'MB', 'GB', 'TB', 'PB'];

            $floor = floor((strlen($bytes)-1)/3);

            return sprintf("%.{$decimals}f", $bytes/pow(1024, $floor)).@$size[$floor];
        }
    }

度娘https://pan.baidu.com/s/1o8bsf8m ,密码:gc4t

END