实现一个PHP WAV接合方案

ZDNet软件频道 时间:2005-03-22 作者:builder.com |  我要评论()
本文关键词:
WAV PCM文件的最大优点在于,你无需进行任何绑定操作,就能将来自两个文件的二进制音频数据连接起来。你只需把其中一个文件的二进制数据粘合到另一个文件的末尾,再调整一下Subchunk2Size值,即可实现两个文件的接合。

WAV PCM文件的最大优点在于,你无需进行任何绑定操作,就能将来自两个文件的二进制音频数据连接起来。你只需把其中一个文件的二进制数据粘合到另一个文件的末尾,再调整一下Subchunk2Size值,即可实现两个文件的接合。唯一的缺点是这两个文件的格式必须相同;在本例中,不涉及问题。

当解析音频文件时,先将二进制音频数据读入一个缓冲数组中,然后再将另一个文件的数据读到这个数组的末端。重复这一过程直到所有的文件都被读取完毕。创建一个FILESTRUCT结构,填入格式信息,调整Subchunk2Size值,将Data成员设为缓冲数组,将FILESTRUCT写为需要的输出格式。对于基于PHP的Web发布系统,其输出为标准输出。以下为示范代码:

本调用的第一个参数是对FILESTRUCT对象的引用。第二个参数是对一列文件名字符串的引用。在每次for循环中,我都将列表中的一个文件名载入一个FILESTRUCT中,然后再将每一个FILESTRUCT的Data属性提取出来,并合并到一个现有的缓冲区中。完成以上操作后,我通过一个事先声明的全局变量对FILESTRUCT参数对象的属性进行设定,然后改变Subchunk2Size属性,并将Data属性设为新的缓冲区。

你可能注意到,我使用了一些功能函数来填充FILESTRUCT结构、计算来自little endian字节数组的数值、创建little endian字节数组和拆分字符串为二进制数组。以下为这些函数:

为了实现这个类的功能,你可以创建一个CStitcher实例并调用StitchFiles()方法,以传递合适的参数:

$ChunkID_ = array(0x52, 0x49, 0x46, 0x46); //"RIFF" big endian
$FileFormat_ = array(0x57, 0x41, 0x56, 0x45); //"WAVE" big endian
$Subchunk1ID_ = array(0x66, 0x6D, 0x74, 0x20); //"fmt" big endian
$AudioFormat_ = array(0x1, 0x0); //PCM = 1 little endian
$Stereo_ = array(0x2, 0x0); //Stereo = 2 little endian
$Mono_ = array(0x1, 0x0); //Mono = 1 little endian
$SampleRate_ = array(0x44, 0xAC, 0x0, 0x0); //44100 little endian
$BitsPerSample_ = array(0x10, 0x0); //16 little endian
$Subchunk2ID_ = array(0x64, 0x61, 0x74, 0x61); //"data" big endian
$files = array("C:InetpubwwwrootTestPHP.wav",
"C:InetpubwwwrootTestPHP.wav");
$Stitcher = new CStitcher();
$file = new FILESTRUCT();
$Stitcher->StitchFiles($file, $files);

可用以下代码将二进制数据写到HTTP输出中:

以下是一段HTML代码,用于测试结果:

<html>
<head>
<script language="JavaScript">
function play_soundbyte() {
bgsound1.src = "wavstitch.php";
}
</script>
</head>
<bgsound id="bgsound1" loop="1">
<body>

<a href="javascript:play_soundbyte();">Click here to play soundbyte.</a>

</body>
</html>

如果你有兴趣学习更多关于WAV PCM f格式的知识,请访问我获得这类信息的网站。



责任编辑:李宁

欢迎评论或投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134