用PHP读写音频文件的信息(支持WMA和MP3)
发布时间:2020-12-13 14:11:20 所属栏目:PHP教程 来源:网络整理
导读:这是之前 花了不少时间和心思作了这个东西,使用PHP去读取或修改 MP3或WMA文件的头信息(主要有专辑,歌名,歌手等) 其实网上搜索有不少 MP3 的类似程序,但 WMA 的几乎没有,如果有也是windows平台下直接使用API的,想在 Unix/Linux 下使用简直没门。。。。
这是之前花了不少时间和心思作了这个东西,使用PHP去读取或修改 MP3或WMA文件的头信息(主要有专辑,歌名,歌手等) 其实网上搜索有不少 MP3 的类似程序,但 WMA 的几乎没有,如果有也是windows平台下直接使用API的,想在 Unix/Linux 下使用简直没门。。。。 由于我的音乐站刚开通,需要这方面的功能,所以就下决心花时间去查资料搞清楚MP3和wma的数据头格式,全部代码由PHP编写,有兴趣可以仔细研究,或加以完善。 其实这东西技术上并没有难点,麻烦在于先要搞清楚它的结构和格式,这个代码也是一个使用PHP操作二进制(binary data)的例子,这几天群里刚好也有人问起这个,主要就是pack和unpack2个函数啦,呵呵,像MP3的原始头信息几乎是一个bit表示一个信息,这时就要用到大量的“按位操作”来分析它。 <?php // AudioExif.class.php // 用PHP进行音频文件头部信息的读取与写入 // 目前只支持 WMA 和 MP3 两种格式,只支持常用的几个头部信息 // // 写入信息支持: Title(名称),Artist(艺术家),Copyright(版权),Description (描述) //? ?? ?? ?? ?? ?Year(年代),??Genre (流派),? ?AlbumTitle (专辑标题) // 其中 mp3 和 wma 略有不同,具体返回的信息还可能更多,但只有以上信息可以被写入 // mp3 还支持 Track (曲目编号写入) // 对于 MP3 文件支持 ID3v1也支持ID3v2,读取时优先 v2,写入时总是会写入v1,必要时写入v2 // // 用法说明: (由于 wma 使用 Unicode 存取,故还需要 mb_convert_encoding() 扩展 //? ?? ?? ???返回数据及写入数据均为 ANSI 编码,即存什么就显示什么 (中文_GB2312) // // require ('AudioExif.class.php'); // $AE = new AudioExif; // $file = '/path/to/test.mp3'; // // 1. 检查文件是否完整 (only for wma,mp3始终返回 true) // // $AE->CheckSize($file); // // 2. 读取信息,返回值由信息组成的数组,键名解释参见上方 // // print_r($AE->GetInfo($file)); // // 3. 写入信息,第二参数是一个哈希数组,键->值,支持的参见上方的,mp3也支持 Track //? ? 要求第一参数的文件路径可由本程序写入 // $pa = array('Title' => '新标题','AlbumTitle' => '新的专辑名称'); // $AE->SetInfo($file,$pa); // // 版本: 0.1 // 作者: hightman // QQ群: 17708754??(非纯PHP进阶交流群) // 时间: 2007/01/25 // 其它: 该插件花了不少时间搜集查找 wma及mp3 的文件格式说明文档与网页,希望对大家有用. //? ?? ? 其实网上已经有不少类似的程序,但对 wma 实在太少了,只能在 win 平台下通过 M$ 的 //? ?? ? API 来操作,而 MP3 也很少有可以在 unix/linux 命令行操作的,所以特意写了这个模块 // // 如果发现 bug 或提交 patch,或加以改进使它更加健壮,请告诉我. // (关于 ID3和Wma的文件格式及结构 在网上应该都可以找到参考资料) // if (!extension_loaded('mbstring')) { ??trigger_error('PHP Extension module `mbstring` is required for AudioExif',E_USER_WARNING); ??return true; } // the Main Class class AudioExif { ??// public vars ??var $_wma = false; ??var $_mp3 = false; ??// Construct ??function AudioExif() ??{ ? ? // nothing to do ??} ??// check the filesize ??function CheckSize($file) ??{ ? ? $handler = &$this->_get_handler($file); ? ? if (!$handler) return false; ? ? return $handler->check_size($file); ??} ??// get the infomations ??function GetInfo($file) ??{ ? ? $handler = &$this->_get_handler($file); ? ? if (!$handler) return false; ? ? return $handler->get_info($file); ??} ??// write the infomations ??function SetInfo($file,$pa) ??{ ? ? if (!is_writable($file)) ? ? { ? ?? ?trigger_error('AudioExif: file `' . $file . '` can not been overwritten',E_USER_WARNING); ? ?? ?return false; ? ? } ? ? $handler = &$this->_get_handler($file); ? ? if (!$handler) return false; ? ? return $handler->set_info($file,$pa); ??} ??// private methods ??function &_get_handler($file) ??{ ? ? $ext = strtolower(strrchr($file,'.')); ? ? $ret = false; ? ? if ($ext == '.mp3') ? ? {??// MP3 ? ?? ?$ret = &$this->_mp3; ? ?? ?if (!$ret) $ret = new _Mp3Exif(); ? ? } ? ? else if ($ext == '.wma') ? ? {??// wma ? ?? ?$ret = &$this->_wma; ? ?? ?if (!$ret) $ret = new _WmaExif(); ? ? } ? ? else ? ? {??// unknown ? ?? ?trigger_error('AudioExif not supported `' . $ext . '` file.',E_USER_WARNING); ? ? } ? ? return $ret; ??} } // DBCS => gb2312 function dbcs_gbk($str) { ??// strip the last " (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |