Jeg prøvede lige at eksperimentere med det, og det virker semi-fint at merge dem sammen. Jeg brugte dog fopen med binary parameter, for at være binary safe. Her er min kode:
<?php
function read($fn) {
$buffer = '';
$fh = fopen($fn, 'rb');
while ( ! feof($fh)) {
$buffer .= fgets($fh, 1024);
}
fclose($fh);
return $buffer;
}
$file1 = read('data/1.mp3');
$file2 = read('data/2.mp3');
$buffer = $file1 . $file2;
$fh = fopen('output.mp3', 'wb');
fwrite($fh, $buffer);
fclose($fh);
Der ender jeg med en mp3-fil, der godt kan afspilles, men i Windows Media Player kan jeg kun afspille den første fil. I MPC og VLC kan jeg derimod afspille hele filen. Det tyder på, at der et eller andet sted ligger en fil-header, der fortæller hvor lang filen er, men at kun WMP læser denne - de andre ser direkte på fildataene.
Successen af en merge kan også variere med filen. Så vidt jeg ved gør faste bitrate mp3'er ikke brug af globale headers, men har kun headers per chunk, hvorimod VBR mp3'er har noget data på tværs af chunks, som måske kan forstyrre en merge.
Hvis libraries, der skulle forestille at kunne det ikke virker, kunne det måske være filerne der er problemet? Eller prøv en anden afspiller.