У меня есть приложение Java, которое позволяет пользователю загружать записанный пользователем файл MP3, а затем уведомление об авторских правах объединяется с началом файла. Без кодирования и декодирования файлов это было немного трудоемким делом (я избегал декодирования / кодирования, потому что: 1. Я действительно хочу избежать накладных расходов на обработку 2. Не большой поклонник сложности использования библиотек dll / shared при работе через разные платформы, т.е. LAME)
Мое решение состоит в том, чтобы прочитать частоту дискретизации, битрейт и моно / стерео характеристики загруженного файла и выбрать соответствующее введение по авторскому праву, которое соответствует этим характеристикам, а затем добавить его в начало файла, прочитав во введении и запись пользователем как FileInputStream и запись вступления и пользовательского файла в FileOutputStream.
Воспроизведение - то, где вещи становятся интересными В зависимости от ОС / браузера и установленного проигрывателя на веб-странице будет либо отображаться, что длина файла составляет 35 секунд (длина вступления), либо ИЛИ будет постепенно увеличиваться продолжительность воспроизведения при загрузке файла в проигрыватель (около 45 минут). в длину). Я предполагаю, что продолжительность файла по-разному обрабатывается разными игроками и браузерами. Safari и Firefox на Win7, кажется, идут по «прогрессивному» маршруту, когда Chrome и IE9 на Win7 отображают только 35 секунд длительности вступления, хотя воспроизводится ВСЕ 45-минутная объединенная запись.
Наконец, в iOS Safari отображает только NaN / NaN в течение продолжительности и воспроизводит только в течение 15 минут независимо от общей длины объединенной записи.
Итак, я пришел к выводу, что «слияние» все еще вызывает проблему. Вопрос в том, можно ли это исправить, не выбирая более сложный маршрут декодирования / кодирования? Я удаляю теги ID3 обоих файлов, а затем добавляю теги обратно в объединенный файл, используя банку из mp3agic. Все, что я могу думать, - это то, что некоторые проигрыватели только читают кадры вступления и затем по какой-то причине останавливаются, когда встречается пользовательская часть записи. Я не уверен, почему это произойдет, за исключением того, что должна отсутствовать какая-то особенность кадра MP3, который мне не хватает, из-за которого проигрыватель считает, что он достиг конца файла (даже если он продолжает воспроизводиться после первых 35 секунд), так как Насколько я знаю, нет места, где хранится вся продолжительность MP3. Это игрок, который остается для расчета продолжительности воспроизведения файла.
Что я должен искать? Я сохраняю файлы как до, так и после объединения, и когда я сравниваю битрейт, частоты дискретизации и характеристики моно / стерео, они совпадают. Слияние предположительно идентичных файлов должно работать. Но в кадре есть что-то другое (я полагаю), что влияет на расчет продолжительности проигрывателя для некоторых комбинаций ОС / Браузер / Проигрыватель. Чего мне не хватает?