Digital Dynamic Range Compressor

  • Автор темы Автор темы belovw
  • Дата начала Дата начала
По производительности он значительно меньше потребляет ресурсов чем DDR
Замерял 100 инстанций на старом i7-4700HQ
NEW - 3.76%. После оптимизации предложенной в посте #61 и не только - стало 2.7%
DDR1 - 8%
DDR2 - 12.2%
Явно лучше. Причем у DDR1 отсутствует RMS блок, который тоже достаточно хорошо подъедает ресурсы.

Самое интересное это то, что новый компрессор на больших GR "больше Auto компрессор", чем DDR.
----
@Rst7 надеюсь ты не будешь против если внесу тебя в качестве консультанта. Или даже соавтора...
 
Последнее редактирование:
Пока ещё не избавился от одной степенной функции отвечающей за Ratio.

Так то, что там в секции @slider - это можно все оставлять, оно не влияет на производительность, ручки же в отдельном низкоприоритетном потоке крутятсся.
 
И надо решить вопрос с коленом. Пока просто хард кни

Почему бы не начать с какой-нибудь простенькой реализации smooth min, например, с такой:
Код:
// polynomial smooth min 2 (k=0.1)
float smin( float a, float b, float k )
{
    float h = max( k-abs(a-b), 0.0 )/k;
    return min( a, b ) - h*h*k*(1.0/4.0);
}

Эта функция возвращает минимум из значений a и b, но в точке излома происходит сглаживание, определяемое значением параметра k

 
  • Like
Реакции: Maxim Kashtanov и belovw
Так то, что там в секции @slider - это можно все оставлять, оно не влияет на производительность, ручки же в отдельном низкоприоритетном потоке крутятсся.
Это в секции @Sample
Про секцию слайдер знаю.
 
Последнее редактирование:
  • Like
Реакции: Elijah K
Где ты всего этого набрался? Гений одним словом.
Вот нужно поскорее колабрационно доводить проект до конфеточного состояния, пока есть возможность. А мы, простые юзвери замерли в ожидании и восхищении.
 
Так, теперь про вычисление произвольной степени:

Напомню, что
a^b=exp(ln(a)*b);

Для наших целей проще использовать log2, это будет

a^b=2^(log2(a)*b);

Как сделать быстрый log2 мы уже обсуждали выше:
Код:
str_setchar(temp_str,0,a,'f');
str_getchar(temp_str,2,ival,'su');
a=(ival>>7)-127+ptab[ival&0x7F];

Теперь мы умножаем a=a*b

И осталось провести обратную операцию.

Заводим при инициализации две таблицы.

Одна - степени двойки
Код:
for(int i=0; i<256; i++)
{
  hi_tab[i]=pow(2.0,(float)(i-127));
}

Вторая - дробная часть степени
Код:
for(int i=0; i<128; i++)
{
  lo_tab[i]=pow(2.0,(float)i/128.0);
}

А в основном коде теперь просто собираем результат как
Код:
a=hi_tab[floor(a)]*lo_tab[(a-floor(a))*128];

Ну как-то так.

Сразу предупреждаю, что точность этого дела примерно 1% (в силу того, что мантиссу мы ограничиваем 7ю битами). Ее за глаза достаточно для цепи регулирования (особенно с учетом того, что там будет в последующем фильтре происходить размазывание шума квантования), но если очень хочется пуризма, то таблицы преобразования мантиссы можно сделать большей разрядности. Я бы лично не парился.
 
@Rst7, в рипере обращение к таблице по ресурсам равносильно возведению в степень. Можно просто передаточную функцию один раз посчитать и только к ней обращаться, можно будет ещё сэкономить на мелких операциях.
Но для VST версий можно попробовать замопочиться.
 
в рипере обращение к таблице по ресурсам равносильно возведению в степень.

Это, блин, что-то там немыслимое у Джастина накручено. Может дело не в таблице, а в медленном выполнении str_getchar/str_setchar?
 
Колено можно через кривую Безье сделать

Там довольно много накладных расходов с той точки зрения, что надо подклеить снизу и сверху к кривой нужные прямые, а кроме того, рассчитать параметр t. Банальный smin, который я приводил выше, куда проще.
 
  • Like
Реакции: Maxim Kashtanov
Ого, парни... Вот сейчас уже точно нужно бы искать автора красивого простого понятного скина. С минимумом ручек, но шоб красиво!
И этот скрипт будет "намбэ ван".
Вот почему я никогда не перейду на рипер - рипер провоцирует становиться программистом :Dle8:

Вы круты. Надеюсь, в реале еще будет возможность...
 
  • Like
Реакции: Landre
нужно бы искать автора красивого простого понятного скина. С минимумом ручек, но шоб красиво!
Валхалла стайл. Нашел на старом буке наработки.
218569
 
Могу попробовать разработать) В чём нужно, в векторе или в растровом представлении?
Вектор скорее всего будет сложно воплотить, но картинка конечно будет вкуснее и масштабируемой.
Постом выше вектор.
[automerge]1658944329[/automerge]
Парни, надо название придумать...
 
@belovw, Да на самом деле без разницы, я и в векторе и в пикселах могу сделать. Единственное, в векторе - это у меня только на ноуте, который пока занят плотно, и даже не у меня дома) А растровый редактор у меня на домашнем компе, с которого сижу. Векторная может потребовать ожидания на непонятно когда...
 
Кнобы и батоны можно, вполне сносные кстати, сделать по быстрому в кнобмене.. Делал в нём кнобы с батонами всякие, под свои реакторные нужды...
Вот как пример сделанных мной полностью в кнобмене, кнобов с батонами...

729082_5350.Bass_Enchanter_1.17.png
 
  • Like
  • Wow
Реакции: TashKey, Antonio и belovw
@Zit, Я про то и говорю, что лучше будет если сделать оригинальный)
Так я же не спорю..Говорю, что в кнобмене это делается легко и быстро, ограничено только вашей фантазией и прямыми руками...Просто эта прога позволяет быстро делать то, что в других граф-редакторах делается более долго и муторно...
 
Ещё добавлю из кнобгалери:
1121.png
798.png
797.png
615.png


Но, как я писал выше, я не люблю "тру аналох" стайл..Моё - это футуристичные гуи..
 
  • Like
Реакции: Elijah K
Только просьба, как альтернативу обычный js gui оставить. Самые стильные, это они). Ещё крутилки, а не только фейдеры, были бы и вообще шик.
 
Последнее редактирование:

Сейчас просматривают