Микширование звуковых волн (CoreAudio на iOS) - PullRequest
1 голос
/ 18 декабря 2011

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

MaxAmplitude = max1 + max2 + max3 //Maximum amplitude of each sound wave
if MaxAmplitude > 1 then //Over range
    Output = (wave1 + wave2 + wave3)/MaxAmplitude //Meet range
else
    Output = (wave1 + wave2 + wave3) //Normal addition
end if

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

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Внезапное изменение масштаба на основе одной выборки, что и делает ваш оператор «if», может звучать очень плохо, подобно отсечению.

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

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

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

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

Это все компромисс.

0 голосов
/ 30 декабря 2011

Не вижу в этом проблемы.Если вы знаете максимальную амплитуду всех ваших волн (за все время), это должно сработать.Убедитесь, что вы не меняете амплитуду для каждой выборки, а выбираете для каждого «примечания».Это очень простой алгоритм, но он может удовлетворить ваши потребности.

...