Основная математика за микширование аудио каналов
У меня есть приложение, в котором я щелкаю сенсорным экраном и высвобождаю точку, которая анимируется по экрану, считывает цвет пикселя под значком is и преобразует его в звук на основе некоторых параметров. Это работает отлично по большей части.
В настоящее время я создаю один аудиоканал на точку (iPhone AudioComponent). Это работает хорошо, пока я не наберу примерно 15 точек, а затем начинаю становиться "прерывистым". Удаление аудио вход / выход и т.д...
Я думаю, что если бы я соединил сигнал всех этих каналов вместе, а затем отправил этот сигнал, возможно, на один или два канала, я мог бы получить гораздо лучшую производительность при большом количестве точек. Вот где я ищу совет.
Я предполагаю, что для любого времени t я могу взять ((f1(x) + f2(x)) / 2.0). Это типичный подход к микшированию аудиосигналов? Таким образом, я никогда не смогу превысить (нормализовать) 1,0 .. -1,0, однако я боюсь, что получу противоположное этому; тихий звук. Может быть, это не будет иметь большого значения, если будет так много точек.
Если кто-то может отбросить название какой-либо техники для этого, я пойду почитать об этом. Или любые ссылки будут великолепны.
3 ответа
Я знаю, что уже слишком поздно отвечать на этот вопрос, но кто-то может делать что-то подобное и искать эти ответы, чтобы помочь им.
Есть классические два ответа на проблему получения правильных уровней при микшировании (суммировании) нескольких аудиоисточников. Это потому, что это векторная проблема, и ответ зависит от того, являются ли звуки связными или нет.
Если два источника когерентны, то вы должны разделить на количество каналов. Другими словами, для десяти каналов вы суммируете их все и делите на 10 (ослабляете на 20 дБ). Однако, чтобы все десять каналов были когерентными, все они должны передавать один и тот же сигнал. Как правило, это не имеет смысла — почему десять каналов передают один и тот же сигнал?
Однако есть один случай, когда когерентность является обычным явлением, когда вы суммируете левый и правый из стереопары. Во многих случаях эти два отдельных сигнала ближе к когерентным, ближе к идентичным, чем нет.
Если каналы не когерентны, то громкость будет увеличиваться не на количество источников, а на квадратный корень из количества источников. Для десяти источников это означает, что сумма будет в 3,16 раза больше, чем у каждого из источников (при условии, что все они одного уровня). Это соответствует затуханию в 10 дБ. Итак, чтобы суммировать 10 каналов разных звуков (все одинаковой громкости), вы должны ослабить все на 10 дБ.
10 дБ = 20 x log (3,16), где 3,16 — это квадратный корень из 10.
В этом есть и практическая часть. Мы предположили, что все каналы одинаково громкие, но что, если это не так? Довольно часто одни каналы похожи, а другие тише. Например, добавить голоса и фоновую музыку, где музыка тише голосов. Как правило, вы можете игнорировать более тихие каналы. Итак, предположим, что есть четыре голосовых канала и два более тихих музыкальных канала. Мы начинаем с игнорирования музыкальных каналов, что оставляет четыре бессвязных голосовых канала. Квадратный корень из четырех равен двум, поэтому в данном случае мы уменьшаем уровень звука вдвое — ослабляем его на 6 дБ.
Да, просто сложение осциллограмм приведет к их смешиванию. И, как вы говорите, если вы затем поделите на количество сигналов, то убедитесь, что не обрезаете результирующий сигнал. Очевидно, вы получите снижение громкости отдельных сигналов, но вы предлагаете самый простой метод.
Существуют более сложные методы смешивания нескольких источников, чтобы попытаться получить согласованный объемный выход, который рассчитывает среднеквадратические / пиковые параметры типа для изменения выходного усиления. Если вы хотите узнать больше об этом, сделайте поиск по автомиксерам.
Вы можете использовать алгоритм или процесс AGC (автоматическая регулировка усиления или автоматическое ограничение) на выходе микшера, чтобы предотвратить ограничение при менее тихом уровне громкости.