不知道你有没有这样的经历,一些从网上下载的MP3音乐,文件名明明是01、02这样的序号,但播放时却能显示出歌曲的正确名称来,是不是有点奇妙?

这其实都是ID3在暗中相助

  ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版。 其中:v1版的ID3在mp3文件的末尾128字节,以TAG三个字符开头,后面跟上歌曲信息。 v2版一般位于mp3的开头,可以存储歌词,该专辑的图片等大容量的信息。

  好了,背景就介绍到这里


PHP的ID3扩展是由PECL提供的,主要用途由,获取和设置mp3音频文件的ID3信息,包括该mp3的歌手,标题,专辑名称,年代,风格,备注

1.安装ID3扩展【 http://pecl.php.net/package/id3.】

 wget http://pecl.php.net/get/id3-0.2.tgz

 tar zxvf id3-0.2.tgz

cd id3-0.2.tgz

 ./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

 ps:我这边make的时候报错了,id3.c:196:1: error: unknown type name 'function_entry',解决办法,id3.c文件的196行的function_entry改成zend_function_entry就可以了

然后在php.ini中添加编译好的扩展文件id3.so

重启服务,在phpinfo中可以看到id3扩展信息

2.函数使用

  首先我们找一个mp3资源

id3扩展一共提供9个函数

id3_​get_​frame_​long_​name //不研究

id3_​get_​frame_​short_​name //不研究

id3_​get_​genre_​id(genre_name)  //通过风格名称获取风格id

id3_​get_​genre_​list(void) //列出所有的风格键值对照表

id3_​get_​genre_​name(genre_id) //通过风格id获取风格名称

id3_​get_​tag(filename) //获取mp3的tag信息

id3_​get_​version(void) //获取id3扩展版本号

id3_​remove_​tag(filename) //删除mp3的tag信息

id3_​set_​tag(filename,tags) //设置mp3的tag信息

3.代码示例

<?php
$filename = '4007108962.mp3'; $tag = id3_get_tag($filename);
var_dump($tag);
//array(5){["title"]=>string(0) ""["artist"]=>string(2) "??"["album"]=>string(0) ""["comment"]=>string(0) ""["genre"]=>int(255)} $version = id3_get_version($filename);
echo $version;
// $tags = array('title'=>'标题','artist'=>'作者','album'=>'专辑','year'=>'2016','genre'=>8,'comment'=>'评论,最多30个字节');
$set = id3_set_tag($filename,$tags);
var_dump($set);
//true $genre_name = id3_get_genre_name($tag['genre']);
var_dump($genre_name);
//Jazz $genre_id = id3_get_genre_id('Jazz');
var_dump($genre_id);
// $remove = id3_remove_tag($filename);
var_dump($remove);
//true $list = id3_get_genre_list();
var_dump($list);
//Array([0] => Blues [1] => Classic Rock[2] => Country [3] => Dance .......[147] => SynthPop )

PHP之音乐ID3扩展的更多相关文章

  1. 音乐ID3 中 专辑封面解析(APIC帧)

    ID3V2 中 APIC 帧标识 专辑封面.前几天 百度 谷歌 都没有找到具体的说明.有点小伤人. 最好参考  Android 中的 id3.cpp 以及一个java 开源 id3 库.找到这里的规格 ...

  2. 利用 Windows API Code Pack 修改音乐的 ID3 信息

    朋友由于抠门 SD 卡买小了,结果音乐太多放不下,又不舍得再买新卡,不得已决定重新转码,把音乐码率压低一点,牺牲点音质来换空间(用某些人的话说,反正不是搞音乐的,听不出差别)… 结果千千静听(百度音乐 ...

  3. Simofox 2.7 - 基于 pcxFirefox 定制(停更)

    ••• 现已停止更新,无良作者转战 Google Chrome ••• 项目名称:Simofox (Simple + Cool + Firefox) 项目介绍:Simofox 中译名西蒙狐,目前项目版 ...

  4. 月半小夜曲下的畅想--DOCTYPE模式

    月半小夜曲下的畅想--DOCTYPE模式 @(css3 box-sizing)[doctype声明|quirks模式|妙瞳] DOCTYPE文档类型标签,该标签是将特定的标准通用标记语言或者XML文档 ...

  5. 音频播放(iOS开发)

    音频处理 一.录音 录音应用场景 语音聊天 即时通讯软件中,都包含语音发送功能 语音备忘录 录一段音频,来记录某件事情 录音功能实现 导入AVFoundation框架 作用:一些多媒体的处理,基本上都 ...

  6. 关于Google Chrome的使用小技巧!

    1 1 http://www.runoob.com/w3cnote/chrome-skip.html Chrome是Google公司开发的一个现代化的网页浏览器,作为三大浏览器之一 它搭载了被称为V8 ...

  7. mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换等

    mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上) MP3文件格式(二)---ID3v2 图:ID3V1标签结构 图:ID3V2标签 ...

  8. iOS开发系列--扩展--播放音乐库中的音乐

    众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...

  9. Plex音乐名称乱码原因id3版本

    标签编码支持情况: ID3v1:ISO-8859-1ID3v2 2.3:ISO-8859-1.UTF-16ID3v2 2.4:ISO-8859-1.UTF-16.UTF-8APEv2:UTF-8 修改 ...

随机推荐

  1. 数据库出现1045 access denied for user 'root'@'localhost' using password yes (转)

    在mysql命令行中执行 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');  GRANT ALL PRIVILEGES ON *.*  ...

  2. BeautifulSoup抓取列表页锚文本

    素闻BeautifulSoup提取效率低,艾玛,第一印象果然是很要命的,反正比Re 和 Lxml 是要慢的,不过就无奈Re的正则折腾来折腾去,没写出来,Lxml 的 Xpath 又用得不好. 不过就这 ...

  3. Linux系统编程初探系列之一:文件编程

    系统函数 int creat(const char* filename,mode_t mode) filename:需要创建的文件名(包含路径,缺省为当前路径) mode:创建模式 常见的创建模式有: ...

  4. ggplot2 坐标系相关设置(coord)

    在ggplot中,未来更好的数据可视化效果,我们有时候可能要用到一些坐标转换的操作,比如要画横向条形图或者蜘蛛图等. coord_cartesian(xlim = NULL, ylim = NULL) ...

  5. Gentoo安装详解(四)-- 声卡设置

    硬件检测 To choose the right driver, first detect the used audio controller. You can use lspci for this ...

  6. USB 设备插拔事件处理

            Windows 系统下,设备连接至电脑或从电脑移除,系统会广播一条 WM_DEVICECHANGE 消息到所有应用程序,在程序的消息处理函数中可以对事件进行相应. 1: class C ...

  7. BASE2(matlab)

    %{ // %} clc % linspace(3,5) 3到5 分成100 default %{ a=1 b=2 str = [num2str(a),'+',num2str(b)] eval(str ...

  8. 关于erlang的binary

    引自:http://cryolite.iteye.com/blog/1547252 1. binary数据是可以在不同进程间共享的 当然这些进程都在同一Erlang节点上. 这与普通term不同,后者 ...

  9. AFNetWoring导入报错解决方案

    第一个当报cannot find interface declaration for 'UIImage或者use of undeclared identifier 'UIImage'时我们要在报错页面 ...

  10. ecshop php5.4以上版本错误之preg_replace 替换成 preg_replace_callback

    类似这样的报错: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instea ...