C ++ Sound Processing [закрыто]
-
06-07-2019 - |
Вопрос
Я ищу библиотеку, которую можно было бы использовать для управления аудиофайлами. По сути, я хотел бы сделать следующее:
<Ол>Загрузить файл MP3 / WAV
Получить 15-секундный клип файла
Наложите поверх него другой файл MP3 / WAV
Отображать как новый файл MP3 / WAV
Решение
Вы можете использовать любой распространенный API кодеков MP3 для декодирования потока, работы с ним и сохранения его снова. Например, вы можете использовать libLAME для этой части.
Что касается микширования, вы можете либо сделать это самостоятельно (например, наивно, добавить два семпла и разделить на два - что может показаться не слишком хорошим), либо найти подходящую библиотеку для этого.
Вас также может заинтересовать вопрос о переполнении стека на странице linux best c audio library а> р>
Другие советы
Он не поддерживает MP3 по патентным причинам, но libsndfile очень хорош библиотека с открытым исходным кодом (LGPL) для загрузки и сохранения звука во множестве других аудиоформатов, включая WAV.
Что касается оверлейной части, это легко, когда вы загрузили сэмплы в память ... вы просто суммируете каждый сэмпл в файле A с соответствующим сэмплом в файле B (и, возможно, немного уменьшаете полученное значение сэмпла). умножая на константу, если вы беспокоитесь об отсечении).
Библиотека libsox из sox (а не http://libsox.sourceforge.net/ , который является чем-то совершенно другим), похоже, имеет простой API, который можно использовать. В документации приведен следующий пример для стереофонического и монофонического микширования:
Представлять образцы в виде целых чисел вызвать проблемы при обработке аудио. Например, если эффект смешайте левый и правый каналы в один монофонический канал должен был использовать Линия р>
*obuf++ = (*ibuf++ + *ibuf++)/2;
искажение может произойти, так как промежуточное добавление может переполниться 32 биты. Линия
*obuf++ = *ibuf++/2 + *ibuf++/2;
обойдет проблему переполнения (за счет наименьшего значительный бит).
Вы можете попробовать осмотреться http://terminatorx.org/ Я смотрел на это, чтобы сделать что-то подобное.
Очень хорошая C ++ аудио / синтезаторная библиотека - STK . Он выполняет множество задач и находится под лицензией типа BSD / MIT, т.е. вы можете использовать его для разработки коммерческих продуктов. Wav поддерживается, но не MP3. Для MP3 вы можете использовать, например, irrklang , который является бесплатным для некоммерческого использования (также MAD от underbit, используется множеством людей).