当前位置:首页 > 编程技术 > PHP编程 > 正文内容

PHP将两个MP3文件进行合并,可以多个MP3文件合并

曾经2年前 (2022-06-06)PHP编程1068

以下代码是基于PHP 7.x 的,版本小于7.x 的请自行将 代码中的__construct 改为 mp3


<?php
class mp3 {
	var $str;
	var $time;
	var $frames;
	// Create a new mp3 
	function __construct($path="") {
		if($path!="") {
			$this->str = file_get_contents($path);
		}
	}
	// Put an mp3 behind the first mp3 
	function mergeBehind($mp3) {
		$this->str .= $mp3->str;
	}
	// Calculate where's the end of the sound file 
	function getIdvEnd() {
		$strlen = strlen($this->str);
		$str = substr($this->str,($strlen-128));
		$str1 = substr($str,0,3);
		if(strtolower($str1) == strtolower('TAG')) {
			return $str;
		} else {
			return false;
		}
	}
	// Calculate where's the beginning of the sound file 
	function getStart() {
		$strlen = strlen($this->str);
		for ($i=0;$i<$strlen;$i++) {
			$v = substr($this->str,$i,1);
			$value = ord($v);
			if($value == 255) {
				return $i;
			}
		}
	}
	// Remove the ID3 tags 
	function striptags() {
		//Remove start stuff... 
		$newStr = '';
		$s = $start = $this->getStart();
		if($s===false) {
			return false;
		} else {
			$this->str = substr($this->str,$start);
		}
		//Remove end tag stuff 
		$end = $this->getIdvEnd();
		if($end!==false) {
			$this->str = substr($this->str,0,(strlen($this->str)-129));
		}
	}
	// Display an error 
	function error($msg) {
		//Fatal error 
		die('<strong>audio file error: </strong>'.$msg);
	}
	// Send the new mp3 to the browser 
	function output($path) {
		//Output mp3 
		//Send to standard output 
		if(ob_get_contents()) 
		      $this->error('Some data has already been output, can\'t send mp3 file');
		if(php_sapi_name()!='cli') {
			//We send to a browser 
			header('Content-Type: audio/mpeg3');
			if(headers_sent()) 
			       $this->error('Some data has already been output to browser, can\'t send mp3 file');
			header('Content-Length: '.strlen($this->str));
			header('Content-Disposition: attachment; filename="'.$path.'"');
		}
		echo $this->str;
		return '';
	}
	//Save MP3
	function  saveMp3($filename) {
		$myfile = fopen($filename, "w") or die("Unable to open file!");
		fwrite($myfile,  $this->str);
		fclose($myfile);
	}
}
// First File: (Google speech) 
$mp3 = new mp3('1.mp3');
$mp3->striptags();
//Second file 
$second = new mp3("2.mp3");
$mp3->mergeBehind($second);
$mp3->striptags();
 
//$mp3->output('word.mp3'); 下载文件
$mp3-saveMp3('word.mp3'); //保存文件
?>


扫描二维码推送至手机访问。

版权声明:本文由珍惜发布,如需转载请注明出处。

本文链接:https://www.zp68.com/article/35.html

分享给朋友:

“PHP将两个MP3文件进行合并,可以多个MP3文件合并” 的相关文章

PHP多数组组合-颜色尺码大小

抽象一下需求:在构建某个对象时,它拥有多个属性,每个属性拥有多个可选的值,需要穷举出每个属性不同的选择组合构建出的不同对象,比如:输入参数:$arr = [     'Name' => ['...

php实现边执行边输出的效果

客户端的请求到web服务器,web服务器再调用PHP代码;PHP返回内容到web服务器,web服务器再返回给客户端边执行边输出就需要web服务器和PHP都不缓存内容首先, Nginx不缓存PHP返回的内容header('X-Accel-Buffering: no'...

最详细的PHP flush()与ob_flush()的区别详解

buffer ---- flush()buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一...

PHP中刷新输出缓冲

PHP中刷新输出缓冲buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每...

PHP 多线程 curl_multi_init 的使用 PK curl_init 看看那个更快

php中可以通过CURL处理HTTP请求,其中curl_init()是单线程模式,如果需要对事务处理走多线程模式,那么就需要用到curl_multi_init()函数。本案例用来测试大并发的情况下 curl_multi_init() 到底比 curl_init() 快多少。话不多少,直接上...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。