PHP之音乐ID3扩展
不知道你有没有这样的经历,一些从网上下载的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扩展的更多相关文章
- 音乐ID3 中 专辑封面解析(APIC帧)
ID3V2 中 APIC 帧标识 专辑封面.前几天 百度 谷歌 都没有找到具体的说明.有点小伤人. 最好参考 Android 中的 id3.cpp 以及一个java 开源 id3 库.找到这里的规格 ...
- 利用 Windows API Code Pack 修改音乐的 ID3 信息
朋友由于抠门 SD 卡买小了,结果音乐太多放不下,又不舍得再买新卡,不得已决定重新转码,把音乐码率压低一点,牺牲点音质来换空间(用某些人的话说,反正不是搞音乐的,听不出差别)… 结果千千静听(百度音乐 ...
- Simofox 2.7 - 基于 pcxFirefox 定制(停更)
••• 现已停止更新,无良作者转战 Google Chrome ••• 项目名称:Simofox (Simple + Cool + Firefox) 项目介绍:Simofox 中译名西蒙狐,目前项目版 ...
- 月半小夜曲下的畅想--DOCTYPE模式
月半小夜曲下的畅想--DOCTYPE模式 @(css3 box-sizing)[doctype声明|quirks模式|妙瞳] DOCTYPE文档类型标签,该标签是将特定的标准通用标记语言或者XML文档 ...
- 音频播放(iOS开发)
音频处理 一.录音 录音应用场景 语音聊天 即时通讯软件中,都包含语音发送功能 语音备忘录 录一段音频,来记录某件事情 录音功能实现 导入AVFoundation框架 作用:一些多媒体的处理,基本上都 ...
- 关于Google Chrome的使用小技巧!
1 1 http://www.runoob.com/w3cnote/chrome-skip.html Chrome是Google公司开发的一个现代化的网页浏览器,作为三大浏览器之一 它搭载了被称为V8 ...
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换等
mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上) MP3文件格式(二)---ID3v2 图:ID3V1标签结构 图:ID3V2标签 ...
- iOS开发系列--扩展--播放音乐库中的音乐
众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...
- Plex音乐名称乱码原因id3版本
标签编码支持情况: ID3v1:ISO-8859-1ID3v2 2.3:ISO-8859-1.UTF-16ID3v2 2.4:ISO-8859-1.UTF-16.UTF-8APEv2:UTF-8 修改 ...
随机推荐
- 对adapter的封装优化
一般不优化的adapter通常继承自BaseAdapter会出现一下几个问题: getCount(), getItem(), getItemId()代码都要去重写,一个adapter还行,如果adap ...
- Linux权限解释
从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限. 而具体的权限是由数字来表示的,读取的权限等于4,用r表示:写入的权限等于2,用w表示:执行的权限 ...
- 实验吧Web-PHP大法
笔记 字符串比对解析,与大小写无关. eregi()函数 语法: eregi(string pattern, string string, array [regs]); 返回值: 整数/数组 特点:P ...
- CentOS7 安装 Mysql 服务
我希望所有的软件包都用 rpm.yum 安装,这样卸载.升级.管理方便,可是自带的 yum 仓库里面没有 mysql-server 或者不是最新的,我需要安装MySQL官方的 yum 仓库, http ...
- powder designer 转数据库
1.打开“file new model”
- .Net Core 上传图片
/// <summary> /// 图片上传并存入数据库 /// </summary> /// <returns></returns> public J ...
- chapter8_2 预编译
用luac程序可以生成一个预编译文件——二进制文件. 比如: luac -o prog.lc prog.lua --生成了prog.lc二进制文件 Lua解析器可以执行它就像执行普通lua代码一样. ...
- NSURL访问项目中的文件
最近在研究视频处理,具体为:将一个mp4文件,拖入项目工程中,通过url访问文件. 开始代码如下: NSString *path = [[NSBundle mainBundle]pathForReso ...
- 错误: symbol lookup error: /usr/local/lib/libreadline.so.6: undefined symbol: PC
su - root mkdir temp mv /local/ldconfig apt-get update
- 转:JMeter基础--逻辑控制器Logic Controller
1.ForEach控制器 ForEach控制器在用户自定义变量中读取一系列相关的变量.该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值.所以ForEach总是和User Defin ...