2009-11-23 5 views
7

Мой вопрос не полностью связан с программированием, но, тем не менее, я думаю, что SO - это подходящее место, чтобы спросить.Как смешивать образцы аудио?

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

Так есть ли кто-нибудь, кто может дать мне совет?

Редактировать:

Я программирую на C++. Но это не имеет значения, поскольку меня интересовала теория смешивания двух звуковых дорожек. Проблема в том, что я не могу просто подытожить образцы, потому что это часто приводит к искажению звука.

+0

языка Что программирования и платформы? –

+0

На каком языке вы используете? Какие библиотеки? Дайте несколько подробностей. – Poindexter

ответ

6

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

Если приложение дает контроль над пользователем, просто дайте им возможность напрямую контролировать уровни. Жажда - это их ответственность, а не ваша. Это «суммирование».

Если смешивание автоматизировано, you're about to go on a journey. Вам, вероятно, потребуется сжатие, если не ограничение. (Ограничение - это крайняя версия сжатия.)

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

Поскольку вы не генерируете аудио в реальном времени, у вас есть возможность сделать ограничение «кирпичной стены». Это потому, что у вас есть предвидение уровней. Ограничение в режиме реального времени более ограничено, потому что вы не можете знать, что происходит - вы должны быть реактивными.

Это музыка, звуковые эффекты, голоса, что?

Программисты here дело с этим все время.

+0

Спасибо, что догадались, что я хотел задать с моим оригинальным вопросом;) – ralle

+0

Это довольно распространенная проблема, как вы можете себе представить. – Nosredna

+0

Несомненно, я сталкиваюсь с той же проблемой, смешивая два сгенерированных звука в actionscript 3. Спасибо за ссылки, похоже, что у меня есть кое-какие чтения на компрессорах! – vitch

0

Вы никогда не говорили, что такое язык программирования и платформа, однако на данный момент я предполагаю, что Windows использует C#.

http://www.codeplex.com/naudio

Великая библиотека с открытым исходным кодом, который действительно охватывает от много материала вы бы столкнуться во время большинства аудио операций.

5

Смешивание образцов аудио означает их объединение, вот и все. Как правило, вы добавляете их в более крупный тип данных, чтобы вы могли обнаружить переполнение и закрепить значения перед возвратом в буфер назначения. Если вы заранее знаете, что у вас будет переполнение, вы можете масштабировать их амплитуды до добавления - просто умножьте значение с плавающей запятой между 0 и 1, снова имея в виду проблему точности, возможно, сначала перейдя на более крупный тип данных.

Если у вас есть конкретная проблема, которая не решена этим, не стесняйтесь обновлять исходный вопрос.

+0

Зажим является жестким, и звучит довольно плохо. Скорее всего, он хочет, чтобы колено было ограничено. :-) – Nosredna

+0

Он мог бы, но это технически что-то другое, кроме того, что он просил :) – Kylotan