Звуковой микшер на стороне сервера. Что доступно? (Может ли Csound сделать это?)

Мне интересно узнать, существует ли программа или библиотека, которая может выполнять следующую задачу и подходит для запуска как часть процесса на стороне сервера на веб-сайте. (Это нормально, если это занимает больше времени, чем максимум 200 миллисекунд, что является разумным для запроса одной страницы — я могу запустить его как асинхронный процесс.)

Задача такова: у меня есть на вход набор аудиофайлов, и у меня есть некоторые данные о том, когда каждый аудиофайл должен начать воспроизводиться на временной шкале. Программа должна вывести аудиофайл, который представляет собой микс входного аудио, объединенный с использованием данных временной шкалы. То есть мне нужен аудиомикшер, работающий в пакетном режиме, а не в реальном времени.

Я сделал несколько поисков в Google, но немного расстроился, потому что не совсем уверен, что мне следует искать. Большинство аудиомикшеров, похоже, ориентированы на приложения реального времени, такие как игры, и я не уверен, как найти что-то, что выполняет эту задачу как что-то вроде утилиты командной строки - просто принимает ввод и производит вывод так быстро, как это возможно.

Я надеюсь, что этот вопрос имеет смысл.

Изменить: кто-то прокомментировал Csound, а затем удалил его. Что такое Csound? Относительно просто сделать то, что я прошу? Имейте в виду, что мои входные звуковые файлы могут иметь длину от 10 до 50 секунд, и меня не интересуют искажения высоты тона.

Как бы вы сделали это в Csound?

Есть ли что-то кроме Csound, которое может делать такие вещи?


person Breton    schedule 26.11.2009    source источник
comment
Какой язык? Вы хотите смешать это, когда пользователь находится в сети?   -  person Shoban    schedule 26.11.2009
comment
Java, C, C++, Python или Javascript будет достаточно. Я бы также рассмотрел решения из более неясных языков. Хочу смешать в пакетном режиме — то есть пользователь отправляет задание, а через некоторое время получает результат.   -  person Breton    schedule 26.11.2009
comment
PHP, haskell, erlang, eiffel, ruby, go, d....   -  person Breton    schedule 27.11.2009


Ответы (6)


Вы определенно можете использовать Csound для этого, и это может быть реализовано несколькими способами. К сожалению, мое все еще довольно зарождающееся исследование Csound было больше связано с аудиосинтезом и алгоритмической композицией, чем сэмплированием и обработкой, поэтому я не могу предложить предложения по надежной реализации.

Однако я предполагаю, что оркестровый файл вашего проекта (часть программы Csound, которая содержит информацию о синтезе и обработке звука, содержащуюся в модулях, называемых instruments) будет включать код операции soundin , который считывает аудиофайл, а затем масштабирует амплитуду различных потоков и смешивает их перед передачей на выход.

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

Вы также можете найти подпрограмму Csound GEN01, которая считывает аудиоданные из файла в таблицу функций.

person ninly    schedule 03.12.2009
comment
Добро пожаловать в переполнение стека. могу я спросить, как вы нашли мой вопрос? - person Breton; 07.12.2009
comment
Спасибо за прием, до сих пор было здорово. После того, как я зарегистрировался, я сделал несколько поисков материалов, связанных со звуком и, в частности, csound. Это то, что меня очень интересовало, поэтому мне было любопытно посмотреть, есть ли на сайте какие-либо связанные обсуждения. - person ninly; 07.12.2009

Если вы готовы рассматривать запуск пакетных сценариев как часть этого процесса, вам может пригодиться SoX. Его команды «микшер» и «ремикс» выглядят так, как будто они могут быть полезны, хотя вам, возможно, потребуется визуализировать пустое пространство в начале звуковых файлов для обработки смещений.

person Ed Harper    schedule 26.11.2009

Вам следует взглянуть на SuperCollider. Может быть, это поможет вам.

person kent    schedule 26.11.2009
comment
Это определенно выглядит интересно, но это еще один API реального времени. Есть ли что-то, что вы знаете об этом, что я не мог узнать? Выполняет ли он задания в автономном пакетном режиме? - person Breton; 27.11.2009

Что-то вроде привязки OpenAL в PHP?

person Amber    schedule 26.11.2009
comment
Я не уверен. Это, опять же, похоже на API, предназначенный для использования в режиме реального времени. Я не уверен, как пауза воспроизведения и т. д. будет использоваться в пакетном режиме. - person Breton; 26.11.2009
comment
Здесь был комментарий о cSounds, который кажется многообещающим. Это немного похоже на излишество, но это единственное, что я видел до сих пор, у которого есть режим, который записывает непосредственно в выходной файл. В любом случае это выглядит как забавная программа. - person Breton; 26.11.2009

Вы можете посмотреть аудиотеку BASS. Я не могу увидеть, может ли он смешиваться быстрее, чем в реальном времени, так как он заблокирован брандмауэром, но в прошлом я находил его удобным для использования.

person Dean J    schedule 03.12.2009

Вы, вероятно, получаете много предложений по решениям для аудио в реальном времени из-за того, как вы сформулировали свой вопрос:

Программа должна вывести аудиофайл, который представляет собой микс входного аудио, объединенный с использованием данных временной шкалы.

«Входной звук» очень расплывчатый. Для меня это звучит как живой входной поток (как микрофон). Если вы вообще не имеете дело с живыми потоками ввода-вывода, то да, Csound будет вероятным кандидатом. В Интернете есть множество учебных пособий по Csound.

person kent    schedule 27.11.2009
comment
У меня есть входной набор аудиофайлов, действительно ли это подразумевает живые входные потоки? - person Breton; 28.11.2009
comment
Я также говорю пакетный режим, не процесс на стороне сервера в реальном времени, утилита командной строки.. Честно говоря, я не знаю, как я могу быть более ясным. Нужно ли рисовать схему? - person Breton; 03.12.2009
comment
тогда почему бы вам просто не написать это на C/C++? - person kent; 03.12.2009
comment
Потому что я ничего не знаю о микшировании аудио, поэтому я бы предпочел использовать библиотеку, написанную кем-то, кто знает, если она существует. - person Breton; 04.12.2009