Как объединить два совершенно разных mp3-файла (разность битов, каналы, частота дискретизации, битдеф)?
Давайте начнем с каждого компонента ...
битрейт
Этот не имеет значения.Потоки MP3 могут (и делают!) Изменять битрейт в среднем потоке.Пока вы присоединяетесь к заголовку кадра, все в порядке.
bitdepth
Понятие глубины в битах семплов не существует в MP3.Вы можете записывать в 24-битном формате, кодировать в MP3, а декодер будет декодировать в 16-битном формате.(Или с некоторыми переключателями командной строки, наоборот!) Это не проблема, потому что битовая глубина не применяется.
частота дискретизации
Обычно это проблема,Большинство игроков не предполагают, что они собираются изменить частоту дискретизации в середине потока.Большинство игроков не пытаются повторить выборку, чтобы придерживаться скорости, с которой они уже выводили.Я не удивлен, что у вас могут возникнуть проблемы с изменением частоты дискретизации.
каналов
Это похоже на проблему с частотой дискретизации в том, что она требует измененияконфигурация устройства вывода.Даже если игрок поддерживает это, это не будет гладко.(Если только вы не переходили от стерео к моно, где моно можно было легко микшировать на стерео.)
В качестве входных данных я получаю один файл mp3 (input.mp3), затем мне нужно разделить его надве отдельные части (сделали это) и вставьте между этими частями еще один mp3 (second.mp3).
Это фактически создает еще одну проблему, о которой вы не спрашивали ... время.MP3 работает в относительно больших кадрах (обычно 576 сэмплов), что становится разрешением, при котором вы можете склеивать.Нехорошо.Кроме того, начало дорожек часто имеет один или два кадра инициализации.
Третья проблема - это битовый резервуар.Именно здесь содержимое из одного кадра хранится в другом кадре, который может иметь дополнительное пространство.
В конце дня вам придется декодировать все в обычные образцы PCM, сделайте свое соединение,и перекодировать в MP3.Вы также должны будете повторно сэмплировать все на общую тактовую частоту и смешать с определенным количеством каналов.К счастью, когда-то декодированный в PCM, это все тривиально и стандартно.Как только ваши входные потоки совместимы, вы произвольно соединяете кадр PCM, который является наиболее детализированным из возможных.