Хочется услышать обратную связь
Я щас пользоваться и оценить по назначению не могу, но я глянул в код
Ну во-первых
Код:
ga=aa*ga0 + (1-aa)*ga
ga0=ga;
куда лучше с точки зрения производительности выглядит так
Код:
ga0=ga-aa*(ga-ga0)
Но это пол беды.
Проблема заключается в куче операций log10 и 10^x. На каждый семпл такое. А операции эти крайне медленные.
Тут важно определиться вот с чем.
Обычно в компрессорах в RC-фильтре болтается уже сигнал, который gout в терминологии Вашего исходника, т.е. непосредственно множитель. А не его значение в дБ (т.е логарифм), как это сделано у Вас.
Является ли именно этот момент, так сказать, mojo данного компрессора? Мое мнение - сомнительно. Дело в том, что в пределах 6дБ разница между логарифмом сигнала и собственно сигналом всего-то 4% (log2(x+1) примерно равно x).
И так как тут все обсуждают типичный GR порядка 3дБ, то явно не эти 4% играют рояль.
Да, для очень больших изменений управляющего сигнала, поведение будет заметно отличаться.
В общем, я бы для теста перешел бы из дБ в разы (как это и сделано в, пожалуй, абсолютном большинстве компрессоров) и выбросил из секции @ sample все логарифмы и степени, оставил бы только +-* (еще бы, конечно, и корень прибить, но это не так напряжно, как логарифмы/степени). После этого надо сравнить поведение. Я не думаю, что что-то на слух изменится, но зато производительность заметно возрастет.
Если же Вы считаете, что вся соль заключена именно в RC-фильтрации значения в dB, то могу только посоветовать хотя бы попробовать сделать быстрый логарифм/экспоненту. Хотя я боюсь, что возможности скрипта Рипера не позволят, там надо иметь возможность работать с битовым представлением числа с плавающей запятой (общий смысл примерно в том, что логарифм числа с плавающей точкой равен его порядку (целая часть) плюс мантисса (без скрытой единицы, это дробная часть).