![]() |
Микширование звука
Наверное это больше сюда, нежели в музыку.
Начну сразу, без лирических вступлений - занимаясь улучшениями эмуля, постоянно хочу улучшить звук. И есть тут одна проблемка - называется она постоянно включённый порт бипера. Причём это проблема не только большинства эмулей, но и, например, моего "Байта". Суть в том, что когда бипер включается, AY начинает играть не так как раньше (обычно тише). На сегодняшний день я знаю 2 алгоритма микширования (все остальные которые я знаю - это вариации этих двух) 1) Z = (A + B) / 2 2) Z = A + B - A*B где A - AY, B - Beeper и Z - результат. В этих формулах все числа дробные от 0 до 1. проблема первой формулы очевидна - все звуковые устройства звучат тише. при использовании второй - при включённом бипере AY не будет звучать вообще. Чтоб было понятнее, вот иллюстрация: http://detstwo.com/pub/zemu/audio-mix.html (в эксплорере не будет работать) Кнопки Simpe / Divide by 2 / Improved - выбирают режимы микширования (Simple - Z=A+B), кнопки 1 / 0.5 / 0 - выбирают уровень сигнала бипера. Наиболее адекватный сигнал получается при div by 2, но при увеличении кол-ва устройств, звук начинает играть тише и тише. Сейчас я в эмуле "отключаю" неиспользуемые последнюю секунду устройства, а потом импользую div by <кол-во оттавшихся устройств> (пока грубо, что сопровождается щелчками, но буду импрувить). ---- А теперь представим, что в комнате стоит 2 колонки, одна исключительно на бипер, вторая - на AY. Если "включить" бипер, то колонка щёлкнет, пойдёт звуковая волна, но далее эта "включённая" колонка уже не будет влиять на звук. ---- А как делаете вы? А как это реализовывают в железе? |
Z=(aX+bY)/(a+b), где a = EXi, b=EYi (т.е. результат интегрирования за определенное время). В зависимости от логики поведения интегратора при появлении всплеска можно реализовать даже АРУ.
А если интегрировать не сигнал, а дельту, то можно даже шумопонижение сделать и избавиться от "постоянки" на выходе. |
а можно поподробней?
X и Y - это текущая громкость на 2х устройствах? Xi - это от X0 до Xi ? E - это что? |
Вкратце, на полу-псевдокоде:
Code:
byte Buffer[DEVICES_COUNT][BUFFER_SIZE]; |
Quote:
Quote:
добавляя 2ю колонку - ты расширяешь динамический диапазон, а у звуковухи он постоянен. ну и логично же, что 2 колонки будут играть громче одной? вон по формуле витамина можно биперу назначить меньшую амплитуду, и за счет этого AY будет играть громче. Quote:
|
Quote:
|
Quote:
|
тут главное, чтобы коэф. не менялся слишком быстро.
|
я въехал. оказалось что я забыл школьное определение интеграла, и это ввело меня в смущение :)
если брать за коеффициент просто интегрирование уровня звука, то это не спасёт от постоянно включенного бипера. буду пробовать интегрировать разность уровней за определённый период. ---------- Post added at 14:24 ---------- Previous post was at 14:21 ---------- Quote:
если и бипер звучит и ay звучит, то, конечно, они будут играть громче. а вот если на бипер повесить высокий уровень постоянно, то он вообще звучать не будет, и при 2х колонках никак не влияет на звук. а вот при цифровом микшировании, влияет. но, как я писал выше, выход найден. |
Quote:
вообще-то физику не обманешь:) тебе опять-таки кажется, что ничего не происходит. хотя на самом деле конечно и не происходит из-за того, что колонка не может воспроизводить сколь-угодно низкие звуки (как и создавать постоянное давление на ухо). но если взять идеальную колонку и окружение, то влияние на ухо все-таки будет. авто-регулирование коэф. усиления - это конечно частичный выход из ситуации, но не супер. компрессия - тоже выход, но тоже совсем не супер для музыки. если работа твоего АРУ будет не заметна на слух - отлично:) ---------- Post added at 18:42 ---------- Previous post was at 18:40 ---------- ты раз уж так делаешь, прими меры, чтоб коэф. не мог меняться скачкобразно. |
| All times are GMT +4. The time now is 21:01. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.