Объединение нескольких дорожек MP3 в одну дорожку - PullRequest
2 голосов
/ 19 ноября 2011

Ну, честно говоря, я не знаю, с чего начать.У меня должна быть программа, которая объединяет несколько mp3-треков в один трек (не объединяет, а фактически объединяет их, что-то вроде воспроизведения нескольких аудиотреков одновременно).Есть ли доступная библиотека или другая базовая программа, которая автоматически сделает это?Мне также нужно изменить громкость каждого трека, и я тоже не знаю, с чего начать.

Скорость и эффективность являются основными факторами в этом, поэтому я не могу просто делать ленивые вещи, играть их и захватывать их.

Ответы [ 3 ]

2 голосов
/ 19 ноября 2011

Я постараюсь нарисовать некоторые общие шаги, которые вы можете выполнить:

  1. Вам нужно будет распаковать ваши mp3-файлы в необработанный звук.В зависимости от того, какое приложение вы разрабатываете, вы можете использовать madlib (GPL) или ffmpeg (LGPL).

  2. Вы будетенеобходимо нормализовать все ваши треки на той же частоте (повторная выборка) и выбрать выход битовая глубина .

  3. сейчасВы можете смешать все свои треки.Предполагая, что у вас есть 2 канала, основная идея состоит в том, чтобы вычислить среднее значение для всех выборок правого канала ваших дорожек, а затем сделать то же самое для левого канала.Есть много подходов к этому, и здесь вам придется выбирать компромисс между производительностью и качеством для ваших результатов.Например, некоторые разработчики предпочитают выполнять операцию смешивания с плавающей точкой, чтобы иметь дело с эффектами отсечения (d) , но другие могут посоветовать против этого, потому что это влияет на производительность.Есть хороший пост о целочисленном микшировании здесь (на него ссылались несколько раз в SO).Также до (или во время) этого шага вы могли бы реализовать некоторый процесс нормализации звука , используя множитель для выборок канала, который вы хотите нормализовать.

  4. НаконецВы можете снова сжать ваш смешанный звук.Вы можете использовать lame , например, для этой задачи, или ffmpeg еще раз.

Существует множество пакетов DSP для linux , которыеможет сделать несколько (или все) из этих шагов для вас.Один проект GPL, который мне приходит в голову, это VLC (VideoLan Client).Вы можете попробовать вызвать его как внешний процесс или запланировать его с помощью VLM (VideoLan Manager).Из документации :

Запланированное вещание:

new my_media broadcast enabled
setup my_media input my_video.mpeg input my_other_movie.mpeg 
setup my_media output #rtp{mux=ts,dst=239.255.1.1,sdp=sap://,name="My Media"}

Естественно, что выходной поток в VLC также может быть локальным файлом.

Редактировать:Я также нашел вопрос о SO, где принятый ответ может быть полезен для вас, он рекомендует использовать Sox .С домашней страницы:

SoX - это кроссплатформенная (Windows, Linux, MacOS X и т. Д.) Утилита командной строки, которая может конвертировать различные форматы компьютерных аудиофайлов в другие форматы.Он также может применять различные эффекты к этим звуковым файлам (...)

1 голос
/ 19 ноября 2011

Это можно сделать в режиме реального времени, при условии достаточной производительности процессора.Вы должны иметь возможность читать файлы mp3, некоторые программные блоки mp3-декодера в реальном времени (аналогичные тем, которые можно использовать для создания собственного mp3-плеера / визуализатора), которые достаточно быстры для запуска N копий / потоков в режиме реального времени,возможно, некоторые блоки преобразования частоты дискретизации DSP и блок микшера DSP.Все программное обеспечение.Свяжите все потоки обработки вместе с очередями и блоками данных.

Для некоторых из этих блоков (декодеров, ресэмплеров) может быть доступен код библиотеки, но остерегайтесь потенциальных лицензионных ограничений.

1 голос
/ 19 ноября 2011

Вы можете смешивать их как отдельные треки в смелости.Требуется ли самому писать код?

когда у вас есть потоки данных в необработанном виде, вы можете рассматривать среднюю точку возможных значений выборки как ноль ... (8-битные выборки .. 256 возможных значений ..127 - ноль .. сэмплы в 0 или 255 - при максимальной громкости).

для регулировки громкости, сдвига, умножения для увеличения громкости, деления для уменьшения (помните об отсечении)

для микшированияпросто добавьте значения каждого потока, по одной выборке за раз (помня об отсечении).

Вот и хорошая ссылка: http://www.4front -tech.com / pguide / audio.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...