AIMP Forum

AIMP for Windows => Skin Editor, Skin Engine => Вопросы / Questions => Topic started by: Aleksandr009 on September 27, 2016, 16:20:43

Title: Вариации Эквалайзера.
Post by: Aleksandr009 on September 27, 2016, 16:20:43
Сделал 3-хполосный темброблок (эквалайзер). Кривая - синусоида.
Title: Re: 3-хполосный темброблок
Post by: Black_AVP on September 27, 2016, 17:41:14
За энтузиазм уже +1 поставил.
Title: Re: 3-хполосный темброблок
Post by: Aleksandr009 on September 27, 2016, 17:58:38
За энтузиазм уже +1 поставил.
Кривая, конечно, далека от нужной. Таких изломов не должно быть. У ВЧ-фильтра она вообще получилась зеркальной.
АЧХ каждого фильтра имеет форму, близкую к параболе, симметричную относительно центральной частоты.
Чтоб было понятнее, набросал несколько вариантов сочетаний разных положений регуляторов.
Спасибо. Но это было пока так для примера. Про форму и сам догадался. Также думаю, что при симметрии это не парабола, а скорее синусоида.
Теперь надо подумать как-бы это рассчитать.
Title: Re: 3-хполосный темброблок
Post by: Aleksandr009 on September 28, 2016, 15:40:53
О да! Я это смог сделать!  ;D
Идеальная кривая - синусоида. Для расчёта коэффициентов использовал 2 синусоиды - 0.5+0.5sin(pi*x/9-pi/2) и 0.5+0.5sin(pi*x/8-pi/2).

Обновил файл в первом посте!
Title: Re: 3-хполосный темброблок
Post by: Aleksandr009 on September 28, 2016, 16:29:35
Ещё немного обновил!
       
Не сразу мысль пришла что формулу синусоиды можно прямо в скрипт запихнуть. Теперь расчёт будет поточнее. 
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 28, 2016, 17:03:18
Молодец, Александр! Жаль, плюсик пока не поставить - сутки не прошли. В твоём возрасте мне тоже казалось, что ничего невозможного на свете нет.
Скрипт можно ещё немного оптимизировать, если вспомнить про циклы, писанины будет меньше.
Для ВЧ-фильтра вместо 8-ми строчек это будет выглядеть так:

for N:= 1 to 8 do
  EQ.Set('BandValue' + IntToStr(N + 10), (((State - 1499)/200 * (1 + sin(pi * N / 8 - pi/2))) + ((M - 1499)/200 * (1 + sin(pi * (8 - N) / 8 - pi/2)))));

Но, остаётся одна маленькая неприятность: пользователь может из диалога DSP изменить твою АЧХ любым движком, в своём 2-полосном я это дело заблокировал.
Жаль, что в наших скинах аппаратуры это не применить - трёхполосные регуляторы тембра, практически, не встречаются.
Как вариант, можно было пойти несколько по другому пути: регуляторы подключить не к скрипту, а к нужным полосам эквалайзера 31, 1к, 16к, а в скрипте считывать эти значения, тогда скрипт окажется независимым от State (возможно, даже, будет один на всё) и блокировать регуляторы будет проще.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 28, 2016, 18:03:11
Молодец, Александр! Жаль, плюсик пока не поставить - сутки не прошли. В твоём возрасте мне тоже казалось, что ничего невозможного на свете нет.
Скрипт можно ещё немного оптимизировать, если вспомнить про циклы, писанины будет меньше.
Для ВЧ-фильтра вместо 8-ми строчек это будет выглядеть так:

for N:= 1 to 8 do
  EQ.Set('BandValue' + IntToStr(N + 10), (((State - 1499)/200 * (1 + sin(pi * N / 8 - pi/2))) + ((M - 1499)/200 * (1 + sin(pi * (8 - N) / 8 - pi/2)))));

Но, остаётся одна маленькая неприятность: пользователь может из диалога DSP изменить твою АЧХ любым движком, в своём 2-полосном я это дело заблокировал.
Жаль, что в наших скинах аппаратуры это не применить - трёхполосные регуляторы тембра, практически, не встречаются.
Как вариант, можно было пойти несколько по другому пути: регуляторы подключить не к скрипту, а к нужным полосам эквалайзера 31, 1к, 16к, а в скрипте считывать эти значения, тогда скрипт окажется независимым от State (возможно, даже, будет один на всё) и блокировать регуляторы будет проще.

Спасибо!  Оптимизацией может позже займусь.

И хотел узнать как вы у себя заблокировали в 2-полосном?


Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 28, 2016, 18:16:04
Да, ещё, если вспомнить формулы приведения из школьной тригонометрии, вычисления ещё можно несколько упростить:
sin(a - pi/2) = - cos(a).

И хотел узнать как вы у себя заблокировали в 2-полосном?
Вот тут, как раз коммутаторы и понадобятся. Надо собрать значения всех бендов эквалайзера, просуммировать их, а результат подать на скриптовый счётчик. Получится, что он будет срабатывать при любом изменении любой полосы. В этом месте я как раз на грабли попервости и наступил - ошибся с модулем счётчика.  Хотя на самом деле всё просто: биндинг возвращает значения в диапазоне -1500..0..1500, умножить на 18, получим 27000, и столько же прибавить (в общем коммутаторе), чтобы результат не был отрицательным - для счётчика это недопустимо. Получается, что модуль должен быть не менее 54000.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 28, 2016, 18:55:41
Кстати, подобным образом, наверное, можно построить и 5- и 7-полосный эквалайзер - вот это уже будет более актуально и востребовано.
А если получится, можно пойти и дальше - сделать эквалайзер с изменяемым числом полос по желанию поьзователя.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 28, 2016, 19:36:38
Кстати, подобным образом, наверное, можно построить и 5- и 7-полосный эквалайзер - вот это уже будет более актуально и востребовано.
А если получится, можно пойти и дальше - сделать эквалайзер с изменяемым числом полос по желанию поьзователя.
Да, построить и 5- и 7-полосный (ну и другое число) эквалайзер будет легко- надо лишь изменить дробь под число полос.
А вот второе будет очень сложно.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 29, 2016, 14:18:47
Добавил версию с оптимизированными скриптами!
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 15:52:31
Добавил версию с оптимизированными скриптами!
Так, конечно, лаконичнее смотрится. Осталось ещё лишние скобки покуцать.
Но, что интересно, я вчера ещё попробовал оптимизировать твой скрипт, правда, дальше ВЧ-фильтра не ушёл, вышло так:
  for N:= 1 to 8 do
    EQ.Set('BandValue' + IntToStr(N + 10), ((State - 1499) * (1 - cos(pi * N /8)) +
      (M - 1499) * (1 - cos(pi * (8 - N) /8))) / 200);

Старался, всё-таки, следовать законам тригонометрии, что sin(a - pi/2) = - cos(a), а в твоём примере, вижу, что остался "+". У меня с плюсом не работает, а утебя с минусом. В чём загадка?
И ещё, почему в некоторых местах вычитается константа 1499, а вдругих - 1500. Правда эта единичка на результате, практически, не скажется.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 29, 2016, 16:12:30
Так, конечно, лаконичнее смотрится. Осталось ещё лишние скобки покуцать.
Но, что интересно, я вчера ещё попробовал оптимизировать твой скрипт, правда, дальше ВЧ-фильтра не ушёл, вышло так:
  for N:= 1 to 8 do
    EQ.Set('BandValue' + IntToStr(N + 10), ((State - 1499) * (1 - cos(pi * N /8)) +
      (M - 1499) * (1 - cos(pi * (8 - N) /8))) / 200);

Старался, всё-таки, следовать законам тригонометрии, что sin(a - pi/2) = - cos(a), а в твоём примере, вижу, что остался "+". У меня с плюсом не работает, а утебя с минусом. В чём загадка?
И ещё, почему в некоторых местах вычитается константа 1499, а вдругих - 1500. Правда эта единичка на результате, практически, не скажется.
Подправил всё.
Загадок нет! А из тригонометрии почти ничего не помню так как про неё не вспоминал давно. Просто я коэффициенты N поменял местами в сумме.
1499 пропустил не исправил везде должно быть 1500, так как при 1499 минимальное значение регуляторов -14.99dB.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 16:30:46
Вся наша оптимизация в скриптах сводится, в основном, к сокращению писанины, а скрипт-движок её всё одно сожрёт - ни быстрее, ни медленнее работать в скине не будет, так что, особо с этим заморачиваться не стОит.
+1 тебе ещё за труды.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 29, 2016, 16:35:16
Вся наша оптимизация в скриптах сводится, в основном, к сокращению писанины, а скрипт-движок её всё одно сожрёт - ни быстрее, ни медленнее работать в скине не будет, так что, особо с этим заморачиваться не стОит.
+1 тебе ещё за труды.
Сейчас вроде-бы уже некуда оптимизировать.
Спасибо и вам за советы!
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 16:46:18
Заметил одну неприятность: если движок 31Гц находился до запуска плеера не в 0, или его принудительно сдвинуть, то при изменении СЧ или ВЧ-регуляторов получается такая "бяка". Надо, видимо, и его в рассчёты включить.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=54358.0;attach=48051)
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 29, 2016, 17:05:09
Заметил одну неприятность: если движок 31Гц находился до запуска плеера не в 0, или его принудительно сдвинуть, то при изменении СЧ или ВЧ-регуляторов получается такая "бяка". Надо, видимо, и его в рассчёты включить.
Так и с другими. Они вообще не были изначально включены в расчёт. И в ВЧ случайно попал из вашего примера.
Но теперь я везде добавил их.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 17:21:40
Так и с другими. Они вообще не были изначально включены в расчёт. И в ВЧ случайно попал из вашего примера.
Но теперь я везде добавил их.
Этот фильтр (31 Гц), вообще, особняком стоит в эквалайзере. Если заметил, то все остальные идут через полоктавы, а этот - через октаву, относительно 63 Гц, получается, как бы пропущена полоса 43 Гц. А для полноты не хватает ещё и 20 кГц.
Во всех эквалайзерах 1 кГц - это центральная частота, у нас же слева от неё 9 полос, а справа - 8 - несимметрия.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 29, 2016, 17:25:33
Этот фильтр (31 Гц), вообще, особняком стоит в эквалайзере. Если заметил, то все остальные идут через полоктавы, а этот - через октаву, относительно 63 Гц, получается, как бы пропущена полоса 43 Гц. А для полноты не хватает ещё и 20 кГц.
Во всех эквалайзерах 1 кГц - это центральная частота, у нас же слева от неё 9 полос, а справа - 8 - несимметрия.
Поэтому и пришлось использовать 2 синусоиды.
А если добавить ещё 2 слева, то ещё более несимметрично будет при центре 1 кГц.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 17:39:54
Поэтому и пришлось использовать 2 синусоиды.
А если добавить ещё 2 слева, то ещё более несимметрично будет при центре 1 кГц.
Имелось в виду эквалайзеры с нечётным числом полос, как и в этом случае - 3. Но в любом случае частоты идут с равным шагом. В реальной аппаратуре часто встречаются эквалайзеры с 20 и 10 полосами - там уже не имеет значения, которая частота будет центральной.
Здесь, наверное, можно пойти было на некоторое упрощение: устанавливать движок 31 Гц в то же состояние, что и 63 Гц, т.е. АЧХ на этом участке будет просто прямой, тогда и сохранится симметрия относительно 1 кГц.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 29, 2016, 17:42:26
Имелось в виду эквалайзеры с нечётным числом полос, как и в этом случае - 3. Но в любом случае частоты идут с равным шагом. В реальной аппаратуре часто встречаются эквалайзеры с 20 и 10 полосами - там уже не имеет значения, которая частота будет центральной.
Здесь, наверное, можно пойти было на некоторое упрощение: устанавливать движок 31 Гц в то же состояние, что и 63 Гц, т.е. АЧХ на этом участке будет просто прямой, тогда и сохранится симметрия относительно 1 кГц.
А сделать центральными 2 - 700 Гц и 1 кГц?
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 17:49:46
А сделать центральными 2 - 700 Гц и 1 кГц?
Можно, конечно, но что тогда писать на этом регуляторе? Во всех 3-полосных темброблоках, что я встречал, даже в нашей аппаратуре, регулятор СЧ - это 1 кГц. Крайние регуляторы могут иметь и другие частоты, но в реалии их характеристики далеки от совершенства и АЧХ может иметь приличную неравномерность. Здесь же мы можем получить почти идеальную кривую.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 29, 2016, 20:05:31
Решил таки добить свою идею с коммутаторами:
... Надо собрать значения всех бендов эквалайзера, просуммировать их, а результат подать на скриптовый счётчик. Получится, что он будет срабатывать при любом изменении любой полосы.
Получился один скрипт, причём средние частоты, оказывается, и рассчитывать не нужно.
Регулировать можно как отдельными тремя слайдерами, так и в самом эквалайзере слайдерами 31 Гц, 1 кГц и 16 кГц, остальные блокированы.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Starkad on September 30, 2016, 07:49:13
Отличная работа - по +1. Я сперва реализовал трехполосный темброблок без использования тригонометрических формул, поэтому изменения получились линейными. Пока собирался обдумывать нелинейное изменение, ВЫ уже все сделали красиво. Для многих это будет очень удобно. Спасибо.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 30, 2016, 09:15:48
Решил таки добить свою идею с коммутаторами:Получился один скрипт, причём средние частоты, оказывается, и рассчитывать не нужно.
Регулировать можно как отдельными тремя слайдерами, так и в самом эквалайзере слайдерами 31 Гц, 1 кГц и 16 кГц, остальные блокированы.
У меня тормознуто работают регуляторы особенно средний. Наверное из-за большого количества значений.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 30, 2016, 09:32:11
У меня тормознуто работают регуляторы особенно средний. Наверное из-за большого количества значений.
У себя я разницы не наблюдаю, единственное, что заметно - примагничивание в зоне 0 дБ, потому как используются "родные" слайдеры экывалайзера.
Нагрузка на проц возрастает при быстром дёргании, особенно, регулятора СЧ, у меня до 8..10%, но в обоих вариантах одинаково. Это объяснимо - идёт постоянное обращение к скрипту. Если же крутить колёсиком (что чаще всего пользователи и делают), то нагрузка на проц не превышает 1%.
По-другому "ненужные" сладеры заблокировать не получится.

Кстати, в 2-полосном варианте можно обойтись и без тригонометрии - просто умножать на коэффициенты, заранее вычисленные для каждой полосы, нагрузка, полагаю, ещё уменьшится.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 30, 2016, 16:18:22

Кстати, в 2-полосном варианте можно обойтись и без тригонометрии - просто умножать на коэффициенты, заранее вычисленные для каждой полосы, нагрузка, полагаю, ещё уменьшится.
Я не думаю, что тригонометрические вычисления сильно грузят, скорее это количество вычислений.

Сделал 2-полосный плавный или такой неправильный, надо чтобы центр на месте был как в 3-полосном.


Кстати возникла идея привязать предусиление, тогда уровень громкости при регулировке будет всегда оставаться одинаковым.

Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 30, 2016, 16:48:35
Я не думаю, что тригонометрические вычисления сильно грузят, скорее это количество вычислений.
Со скрипт-движком, скорее всего, разницы не заметить, но реально подпрограмма вычисления синуса намного объёмнее, чем простое умножение даже вещественных чисел, насколько помню, там используется разложение в ряд.

Сделал 2-полосный плавный или такой неправильный, надо чтобы центр на месте был как в 3-полосном.
Не... так, конечно не должно быть, в 2-полосном можно вообще частоты от 500 Гц до 2 кГц не трогать, всегда выставлять на 0.
В этом 3-полосном варианте, если СЧ-движок выставить на 0 дБ, он вполне сойдёт за 2-полосный.

Кстати возникла идея привязать предусиление, тогда уровень громкости при регулировке будет всегда оставаться одинаковым.
Не стоит этого делать. На графике это, может быть, и интересно смотрится, но на слух это будет неприемлимо, да и в реальной аппаратуре так никогда не делается, скорее всего пользователь в этом случае потянется к регулятору громкости. Если, к примеру, мы начнём добавлять верхи или низы, или всё вместе, средние частоты начнут проваливаться и на слух будет казаться, что громкость уменьшилась. Ухо у нас не одинаково воспринимает равную громкость на разных частотах, вспомни кривые равной громкости (это про тонкомпенсацию).
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on September 30, 2016, 17:46:49
А вот над такой задачей для 2-полосного, мне кажется, стоит подумать. Имитировать изменение добротности фильтров, т. е. крутизну синусоид, оставляя АЧХ на средних частотах плоской. Ес-но, раздельно для НЧ и ВЧ. Это уже будет некая заявка на параметрический эквалайзер.

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=54358.0;attach=48058)
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 30, 2016, 17:58:47
А вот над такой задачей для 2-полосного, мне кажется, стоит подумать. Имитировать изменение добротности фильтров, т. е. крутизну синусоид, оставляя АЧХ на средних частотах плоской. Ес-но, раздельно для НЧ и ВЧ. Это уже будет некая заявка на параметрический эквалайзер.

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=54358.0;attach=48058)
Думаю это решаемо надо ввести ещё одну переменную в формулу и управлять значением через скрипт.
Вот тут только надо подумать хорошенько!
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on September 30, 2016, 20:01:34
А вот над такой задачей для 2-полосного, мне кажется, стоит подумать. Имитировать изменение добротности фильтров, т. е. крутизну синусоид, оставляя АЧХ на средних частотах плоской. Ес-но, раздельно для НЧ и ВЧ. Это уже будет некая заявка на параметрический эквалайзер.

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=54358.0;attach=48058)

Я смог и такое сделать!


Надо бы подумать над переименованием темы, а то она начиналась с 3-полосного эквалайзера, а теперь разрослась в сторону различных видов.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on October 01, 2016, 10:11:04
Я смог и такое сделать!
Молодец, +1. Хоть и несколько грубовато получилось, но логически всё правильно.
Единственное, в регуляторах ширины пропускания фильтров два последних значения явно лишние: и на слух это неестественно звучит, и на графике некрасиво смотрится.

Надо бы подумать над переименованием темы, а то она начиналась с 3-полосного эквалайзера, а теперь разрослась в сторону различных видов.
Ну, переименуй первый пост, назови "Вариации на тему EQ". :)
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Aleksandr009 on October 01, 2016, 10:19:38
Молодец, +1. Хоть и несколько грубовато получилось, но логически всё правильно.
Единственное, в регуляторах ширины пропускания фильтров два последних значения явно лишние: и на слух это неестественно звучит, и на графике некрасиво смотрится.
Так это решается легко надо лишь уменьшить количество значений в счётчиках.
Title: Re: Вариации Эквалайзера.
Post by: samix on April 07, 2017, 14:30:32
Браво!+
Раз вы это опубликовали,значит я могу внедрить такой темброблок в свои поделки?
Title: Re: Вариации Эквалайзера.
Post by: Aleksandr009 on April 07, 2017, 20:43:31
Раз вы это опубликовали,значит я могу внедрить такой темброблок в свои поделки?
Для этого и опубликовано ;)
Title: Re: Вариации Эквалайзера.
Post by: koelo on July 23, 2017, 21:34:50
What is the difference between: темброблок.zip & темброблок_2.3.zip ?
Title: Re: Вариации Эквалайзера.
Post by: Aleksandr009 on July 24, 2017, 12:42:46
What is the difference between: темброблок.zip & темброблок_2.3.zip ?
The differences are in the provider's scripts.
In 2.3 it is simplified
Title: Re: Вариации Эквалайзера.
Post by: koelo on July 24, 2017, 14:19:57
The differences are in the provider's scripts.
In 2.3 it is simplified

I want to make 3 knobs to control the 18 band EQ, which one do you suggest I should use?
Title: Re: Вариации Эквалайзера.
Post by: Aleksandr009 on July 24, 2017, 14:53:22
I want to make 3 knobs to control the 18 band EQ, which one do you suggest I should use?

You can use any.

Also note the EQ_3_Band.zip
Title: Re: Вариации Эквалайзера.
Post by: koelo on July 24, 2017, 15:22:27
You can use any.

Also note the EQ_3_Band.zip

Thanks for the help, much appreciated :)
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: McClaud on April 02, 2020, 10:25:30
Кстати, подобным образом, наверное, можно построить и 5- и 7-полосный эквалайзер...
Попробовал сделать десятиполосный: Band1, далее только чётные. Промежуточные - среднеарифметическое соседних. Помимо громоздкости получившегося скрипта, не уверен в корректности такого подхода.  :-\
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on April 02, 2020, 13:21:05
Попробовал сделать десятиполосный: Band1, далее только чётные. Промежуточные - среднеарифметическое соседних.
Это неверный подход, формулы в скрипте будут другими.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: McClaud on April 02, 2020, 20:12:56
Это неверный подход, формулы в скрипте будут другими.
Но возьмём крайний случай: Band2 в =15, Band4 в +15. Почему в этом случае Band3 должен быть в положении отличным от нулевого?
Title: Re: Вариации Эквалайзера.
Post by: Black_AVP on April 02, 2020, 21:01:14
Это только в крайнем случае. Кривые фильтров имеют форму синусоиды, а не линейную, частоты фильтров должны быть равномерно расположены, в АИМПе при 18 полосах - через пол-октавы (кроме полосы 31 Гц). 10- полосный эквалайзер имеет смысл делать для диапазона 20-20000, там частоты пойдут через октаву. Глянь, как это реализовано в трёхполосном темброблоке в этой же теме.
Title: Re: Вариации Эквалайзера.
Post by: McClaud on April 02, 2020, 22:08:28
Это только в крайнем случае. Кривые фильтров имеют форму синусоиды, а не линейную, частоты фильтров должны быть равномерно расположены, в АИМПе при 18 полосах - через пол-октавы (кроме полосы 31 Гц). 10- полосный эквалайзер имеет смысл делать для диапазона 20-20000, там частоты пойдут через октаву. Глянь, как это реализовано в трёхполосном темброблоке в этой же теме.
В любом случае плясать придётся от родного 18-ти полосного. Тот трёхполосный я посмотрел, вот удастся ли из него сделать 10-ти?..  :-\
Но и в нём, если присмотреться, положение среднего движка (между M и H) как раз их среднеарифметическое.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: McClaud on April 03, 2020, 01:02:47
Это неверный подход, формулы в скрипте будут другими.
Вот что у меня получилось:
Code: [Select]
procedure Execute(var State: Integer);
var
  EQ: TComponent;
  N: Integer;
   
begin                           
  EQ:= FindObject('prvEqualizer');
 
  for N:= 1 to 8 do 
  EQ.Set('BandValue' + IntToStr(N*2 + 1), (EQ.Get('BandValue' + IntToStr(N*2)) + EQ.Get('BandValue' + IntToStr(N*2 + 2)))/2);

end;
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on April 03, 2020, 13:52:02
Вот что у меня получилось:
Можно же посмотреть, как будет меняться АЧХ при регулировке - в диалоге DSP на родном эквалайзере.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: McClaud on April 03, 2020, 14:38:51
Можно же посмотреть, как будет меняться АЧХ при регулировке - в диалоге DSP на родном эквалайзере.
Смотрел, разницы не увидел  ???
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: Black_AVP on April 03, 2020, 17:10:59
Смотрел, разницы не увидел  ???
Разницы с чем? В твоём примере регулируются только крайние полосы и с изломом АЧХ, что ес-но при таких рассчётах, а в оригинальном  EQ_3_Band и соседние полосы по синусоидальному закону. АЧХ плавная.
Title: Re: 3-хполосный темброблок (эквалайзер)
Post by: McClaud on April 03, 2020, 20:51:05
Разницы с чем? В твоём примере регулируются только крайние полосы и с изломом АЧХ, что ес-но при таких расчётах, а в оригинальном  EQ_3_Band и соседние полосы по синусоидальному закону. АЧХ плавная.
В моём примере регулируются только чётные полосы (не считая первой). Рассчитывается лишь положение промежуточных нечётных. По какому закону их нужно рассчитывать, если ни на какие иные параметры, вроде добротности, мы не влияем? Если посмотреть на кривую трёхполосного регулятора, то видно, что рассчитанное положение регулятора 4.0k равно полусумме положений регуляторов 1.0k и 16.0k. Точно так же и в моём случае: есть два регулятора, которые регулируются, и находящийся между ними, положение которого соответствует их среднеарифметической середине. Вся остальная кривизна АЧХ определяется исходной добротностью. Если взять родной эквалайзер из DSP, и вручную выставить любые три соседних регулятора (исключая первый, разумеется) линейно, то чем в этом случае будет отличаться график от аналогичной ситуации моего варианта? Ничем!
Title: Re: Вариации Эквалайзера.
Post by: Black_AVP on April 03, 2020, 21:48:23
Попробуй хотя бы повторить АЧХ того же 3-полосного темброблока - даже по кривой видно (без всяких рассчётов), что промежуточные значения полос не есть среднеарифметическое двух соседних, рядом и наблюдается излом. Без тригонометрических выражений в формулах не обойтись.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=54358.0;attach=60655)

Ну, если тебя устраивает - так Бога ради...
Title: Re: Вариации Эквалайзера.
Post by: McClaud on April 03, 2020, 23:00:54
Без тригонометрических выражений в формулах не обойтись...
Да... Упёрся я в эти частные случаи, когда серединка вопадает в серединку... А тригонометрию мне без помощи не осилить...  :'(
Title: Re: Вариации Эквалайзера.
Post by: Black_AVP on April 04, 2020, 08:39:27
... А тригонометрию мне без помощи не осилить...  :'(
Подождём Aleksandr009, у него мозги явно моих посвежее. Нужно решить эту задачу, как говорят, в "общем виде" для произвольного числа полос. Мне уже влом, да и времени нет - опять ремонтом занимаюсь.
Title: Re: Вариации Эквалайзера.
Post by: CkopoxoD on August 09, 2022, 17:16:34
Поправил темброблок_2.3 для 20-полосного эквалайзера АИМП5. Пусть будет версией 2.4

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=54358.0;attach=66519)
Title: Re: Вариации Эквалайзера.
Post by: CkopoxoD on March 20, 2023, 18:49:35
Пятиполосный темброблок.
Слегка причесал скрипты, вынес важные значения в переменные, чтобы было легче разобраться и модифицировать:
CBand - номер центральной полосы эквалайзера для данного блока [0-19]
LCnt - количество затрагиваемых полос слева
RCnt - количество затрагиваемых полос справа

В примере MediumHighLevelsScript:
CBand:= 15; //5.6 кГц
LCnt:= 5; //5 полос с 1 кГц, эта частота является центральной для предыдущего слайдера, его позиция LPos находится по имени MediumLevelsScript
RCnt:= 4; //4 полосы по 22 кГц, эта частота является центральной для следующего слайдера, его позиция RPos находится по имени HighLevelsScript