Ahsan aslam
Ahsan aslam

Reputation: 1199

Merge mp3 files into one and then save in a folder using php

I am new to PHP .I want to merge mp3 files into one mp3 file.i googled this query and found this code .It is working fine and give me back the merged file. But this code give me merged file as save file .but i want to save the merged file in a folder .so that i can give the URL of the file to some application.

class mp3{
    var $str;
    var $time;
    var $frames;

    // Create a new mp3
    function mp3($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 '';
    }
}

 // 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'); //Output file (current a blank file)

The solution code will be very appreciate able ..Thanks in advance

Upvotes: 3

Views: 5579

Answers (1)

Mark Tomlin
Mark Tomlin

Reputation: 8943

Add this method to your mp3 class.

// Save the new mp3 into the file system
function savefile($path){
    return file_put_contents($path, $this->str);
}

Then to use it simply ... replace

$mp3->output('word.mp3'); //Output file (current a blank file)

with this

$mp3->savefile('/path/to/directory/file.mp3');

and make sure you modify the path to a real directory within your file system.

Upvotes: 2

Related Questions