Знаете ли вы класс, чтобы объединить два файла MP3 с помощью PHP?
Я ничего не нашел в Google.
Если путем слияния вы имеете в виду размещение одного звука над другим, то, пожалуйста, не обращайте внимания на этот ответ.
Если вы не хотите перекодировать MP3-файлы, вы можете просто добавить их. Я знаю, что это работало для MPEG-фильмов, поэтому я думаю, что это может работать и для MP3. Другим вариантом было бы добавить аудио-файлы в Zip-архив без сжатия, а затем переименовать расширение в .mp3.
Я сделал быстрый тест, и это
file_put_contents('combined.mp3', file_get_contents('file1.mp3') . file_get_contents('file2.mp3'));
работал отлично. Теги ID3 будут неправильными, но полученный файл содержит оба аудиофайла. Для некоторых других возможных перехватов см. Ссылку в ответе Пекки .
Кроме того, некоторые быстрые googling привели к
и некоторые обсуждения
Это невозможно. В PHP отсутствует реализация кодека MP3. Для этого вам понадобится внешний инструмент командной строки. (Который, в зависимости от конфигурации вашего сервера, можно выполнить из PHP, как говорит @ceejayoz.)
См. Эти вопросы для решений:
Объединение файлов MP3 в Linux Debian с помощью PHP
Каков наилучший способ объединить mp3-файлы?
Если файлы .mp3 являются только аудио MPEG-1 или MPEG-2 Layer III, файлы можно просто конкатенировать. Нет никакой реальной концепции заголовка для всего файла. Каждый кадр имеет заголовок, за которым следуют данные, а файл состоит только из последовательности кадров, которая называется битовым потоком. Битрейт, стереорежим и т. Д. Не обязательно должны быть одинаковыми в битовом потоке, поэтому вы можете объединять разнородные файлы. Статья в Википедии объясняет это, но я думаю, что спецификация на самом деле легче понять.
ID3-теги или другие данные в файле (который технически делает его несоответствующим битовым потоком) могут подавлять события на конце декодера.
Спецификация для аудио MPEG-1 и MPEG-2 на самом деле довольно проста. Написание парсера для фрагмента файла в фреймах, а затем интерпретация заголовков не так уж много работает. В последний раз, когда я это делал, это заняло всего час или два.
Спецификация ID3 тоже не так сложна, поэтому я подозреваю, что написал код, чтобы вырезать теги, прежде чем конкатенация должна быть легкой, но я этого никогда не делал.
Библиотека getID3 () (http://getid3.sourceforge.net/) может также дать некоторые рекомендации. Прошло некоторое время с тех пор, как я использовал его, но он также может поддерживать открытие MP3-файлов и вытеснение тегов ID3.
НТН
Важные вещи для запоминания:
Content-length
представляет собой длину обоих файлов. Вот пример из моего проекта «текст-речь». Мне нужно было добавить 1 секунду молчания в конце MP3-звука, который был сгенерирован динамически:
$output_audio = textToMP3("Hello World"); // Original audio $silent_audio = file_get_contents("silence.mp3"); // 1 second silence $content_length = strlen($output_audio) + strlen($silent_audio); // Output the audio stream header('Content-type: audio/mpeg'); header('Content-length: ' . $content_length); header('Cache-Control: no-cache'); header("Pragma: no-cache"); header("Expires: 0"); echo $audio . $silent_audio;
Для всех, кто сейчас заинтересован в том, чтобы сделать то же самое, вы можете использовать следующую библиотеку: https://github.com/falahati/PHP-MP3
composer require falahati/php-mp3
Слейте два файла MP3:
$audio1 = \falahati\PHPMP3\MpegAudio::fromFile("1.mp3"); $audio2 = \falahati\PHPMP3\MpegAudio::fromFile("2.mp3"); $audio1->append($audio2)->saveFile("3.mp3");