Brainstorm: Supersaw - минимум средств

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

Вложения

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

Ну это всем понятно. Времена "плывущих" от температуры осциляторов канули в лету...

Теперь что касается алгоритмов. Никто, в принципе, не мешал ребятам в Access написать новый алгоритм Hypersaw.

А именно...

Вот я пишу программу, например, для генерации пилы 440 гц с требуемой по заданию точностью (до 3-й гармоники здесь, а то много букв получится) И КОНЕЧНО использую не грануляр, а СИНТЕЗ (!!!!!!):

это простой ряд, чем больше членов в этом ряду (здесь три), тем выше точность вычислений.
Точность вычислений +- можно узнать просто вычитая значение последнего члена ряда из результата предпоследнего.

A(t) = 2/pi (sin 2*pi*1*440*t + (sin 2*pi*2*440*t)*1/2 + (sin 2*pi*3*440*t)*1/3 + ... )

А вот как разнообразил бы я формулу для гиперсо , где D1 D2 D3 это коэф. детьюна:

A(t) = 2/pi (sin 2*pi*1*440*t + sin 2*pi*1*440*D1*t + sin 2*pi*1*440*D2*t + sin 2*pi*1*440*D3*t + (sin 2*pi*2*440*t)*1/2 + (sin 2*pi*2*440*D1*t)*1/2 + (sin 2*pi*2*440*D2*t)*1/2 + (sin 2*pi*2*440*D3*t)*1/2 + (sin 2*pi*2*440*t)*1/3 + (sin 2*pi*2*440*D1*t)*1/3 + (sin 2*pi*2*440*D2*t)*1/3 + (sin 2*pi*2*440*D3*t)*1/3 + ...)

Это для трёх дополнительных пил + основная, конечно это всё в масовом порядке оптимизируется, сокращается, используются таблицы синусов до 4-5 знака, а не его моментальное вычисление...

как программист... бывший... скажу, что это только на глаз кажется, что алгоритм заметно стал тяжелее, на самом же деле после оптимизаций он станет вовсе не в 9 раз "тяжелее" в процессоре вайруса (там вроде Моторолла какая-то в качестве ЦП, хотя генерить может и не он, а со-процессор DSP и т.п.), а раза в 2-3, что вовсе не напряжно, ибо алгоритм детский.

Извинте, если наделал ошибок в описании, но я хотел показать суть процесса, а не ювелирную точность в процессе.

К тому же обратите внимаание на то, что затухание гармоник (в формуле видны эти коэф. 1/2 1/3 и т.д.) можно производить не линейно увеличивая делитель, а с нахлёстом к крайним высшим гармоникам, что даст характерный "хрип" или "жжужание" в звуке, при этом детьюны можно считать обычно, в общем поле для экспериментов широко и ребята из Аксес его исходили вдоль и поперёк, видимо!!! :-) )
 

Вложения

  • x_d799314a.jpg
    x_d799314a.jpg
    78,8 KB · Просмотры: 46
Последнее редактирование:
  • Like
Реакции: Physical и SoulState
Раз пошла такая пьянка я тоже решил покрутить ручки VSTi синта в целях получить что-то похожее на выложенный здесь добрым человеком "сухой" тест с Вайруса.

И вот кое-что вышло... послушайте... по мне так очень близко.

Первый аккорд это один синт, второй это другой синт.
 

Вложения

Последнее редактирование:
  • Like
Реакции: Dante
Первое созвучие это Helix.
Второе это Virus.

Я правда обратил внимание, что выложенный chords.mid и выложенный пример звука Virus сыграны чуток по-разному. Ну да допилил немного на слух velocity в chords.mid

Реактор? Хотелось бы глянуть... устройство, судя по его описанию, атомное...

P.S> Что я хотел сказать тем постом с формулами, забыл разложить на пальцах ----> Т.е. все девять пил могут с равным успехом выходить прямо из осцилятора, без какого-либо шаманства с наложением девяти отдельных осчиляторов друг на друга. Вот. Хотя, не факт, что там именно так.
Ведь у нас ВИРТУАЛЬНо-аналоговые осциляторы, описываемые параметрически, в Virus. Я уверен в этом.
 
Последнее редактирование:
В общем, не могу сказать, чтобы DiscoDSP Discovery 2 мало жрал, но и не очень много. Звук богат верхней гармонической составляющей чуть менее чем полностью.

Жаль можно накрутить только 4 слоя в пресете.
Так что вот как звучит supersaw из 5 осциляторов можно глянуть во вложении.
+ патч прилагаю для тех, кто пользуется этим синтом. :paint2:

+ патч supersaw для Helix (в сообщении выше давал пример звука)

+ mp3 где helix и dsp по очереди проигрывают один и тот же проигрыш

+ chords.mid в исполнении DSP - два варианта с разными настройками distortion сатурации
 

Вложения

Последнее редактирование:
А как тогда реализуется разброс голосов по панораме, если это один математический осциллятор?
А кстати, в пятом реакторе есть функция типа программирования - Reaktor Core, можно свои модули писать, только я что-то не понял принцип этого "языка", интересно было бы попробовать там такой осциллятор сконструировать, или в SynthEdit или SynthMaker каком-нибудь, я не программист, поэтому не разбираюсь особо...
 
Последнее редактирование:
разброс голосов по панораме

Хороший вопрос. Разброс по панораме может быть реализован в рамках "виртуальной" части осцилятора. Грубо говоря, осцилятор изначально должен быть стерео-осцилятором. Что с математической точки зрения (и программной) не имеет никаких препятствий к реализации (разница с моно-осц. небольшая).

-=-=-=-

Я как раз программист, но времени совсем нет... очень хочется довести руки до этого дела... и пошаманить. :wizard:
 
Для разброса голосов по панораме можно послать один осциллятор на два по-разному панорамированных фильтра, если синт позволяет.

В зете такое можно сделать. Вот, что у меня получилось. Звучит так себе, но зато на одном осцилляторе :)

Если говорить о самом экономичном способе, то у меня меньше всего жрал 3xOSC (это синт из FL Studio) - около 4%. Кстати, в нем я использовал тоже 1 осциллятор.
 

Вложения

Последнее редактирование:
Попался мне под руку Korg Monopoly VST - и вот ещё один результат. Я очень рад этому синту! Хорошая пила вышла...
Зацените:
 
Кстати в Jp-шной пиле присутствует еще такой эффект - там отсутствуют сильные биения, более мягко звучит, в отличие от простого детюна, специальный алгоритм чтоли там какой применён...
 
На самом интересном месте сломался комп. Не судьба. =)
Сейчас ковыряю Waldorf Largo на предмет звукоизвлечения. :smoke:
 
Вот уж извлечение пилы из Largo не назовёшь экономным способом.
Но вот что вышло при смешивании и проигрывании того самого варианта, который давался для примера с Virus.

:moil:
 

Вложения

  • largo.mp3
    largo.mp3
    638,4 KB · Просмотры: 169
5xSaw_ES1.png


мне, кстати, стало интересно, что получится из 5 x ES1 с разными значениями Tune - если стремиться к JP Supersaw, то все крайне печально звучит, однако, если рулить просто всеми этими синтами в унисон для получения новых тембров, то результаты весьма интересные.

демку не выкладываю, т.к. там сыро все звучит слишком, а времени рулить серьезно пока нет.
 
Последнее редактирование:
Кто нибудь Thor крутил на жир ? Бесплатные 2 банка с форума vengeance звучат хорошо, посмотрел на чем они сделаны, в основном там Thor, редко мальстром, и совсем редко субтрактив.
 
День добрый! Вот вылаживаю свои примеры супер пилы накрученой на цешечьке (тройной унисон + 3 + Суб осцилятор). Два примера пада с ефектами и без, и также транс арп на основе етого же пада с ефектами и без. Скажу так звучит не так как на ЖП или ТИшке но по своиму занимательно. Синт отцифрован с частотой 88000 килогерц:pioneer: http://www.sendspace.com/file/zq20fn
 

Вложения

то ли курсовая работа, то ли сочинение некоего студента Королевского технологического института г. Стокгольм на тему "как я провел это лето препарировал supersaw"
 
на сколько избитая тема супер пил.Это ж не трудно,сам могу надавать пресетов собственого изготовления.
Силент!
 

Вложения

Вот ещё статейка в тему: https://ccrma.stanford.edu/~dfl/220b/hw4.htm

Again due to the linearity of integration, if two BLITs are summed, then only one integration needs to be performed to get a "super-saw." This method is more efficient than simply mixing two saw waves, and has exactly the same cost as generating a single square wave. An interesting idea would be to subtract two sawtooth waves, to get some kind of "super-square". I haven't tried this yet, but it should have some kind of wacky PWM.
Вощем походу суперпилы эти делаются с помощью интеграторов.

И ещё:
http://www.ghostfact.com/jp-8000-supersaw/
Но тут тоже в основном гадания (и в комментах к статье), и патч для pure data схожий с реакторовским в этом топе.
 
  • Like
Реакции: LexaLexin и Novation
Описанный способ дает просто две детюнутых пилы, никак не семь. Да и проблем с вычислительными ресурсами уже нет генерировать сколько угодно осцилляторов.
 
Описанный способ дает просто две детюнутых пилы, никак не семь. Да и проблем с вычислительными ресурсами уже нет генерировать сколько угодно осцилляторов.
Ну так если этим методом 7 пил сгенерировать, то он должен быть эффективнее практически в 2 раза, чем 7 отдельных пил.
А проблемы с вычислительными ресурсами есть, и очень немаленькие даже сейчас. В случае хардварного синта на дсп подобная оптимизация позволит как минимум увеличить полифонию/мультитембральность в 2 раза. А про vst на компе - так там вообще сплошные проблемы с вычислительными ресурсами, если нужно получить хороший звук, а не пластиковый пердёж =) Больше всего бесят эти самые разработчики vst синтов, которые так же думают, что нет проблем с вычислительными ресурсами, и не хотят оптимизировать код, а потом их мега-поделки срутся на одном аккорде даже на 6-ти ядерном 4930k. А если мы задумаем сделать синт с просчётом всех модуляций на частоте семплирования (хотяб 96 или 192), желая приблизится к тому, как оно всё происходит в "аналоге", то вообще ОЙ...

Если бы не было б проблем, я думаю вряд ли синт Solaris стоимостью 4к баксов был бы ограничен полифонией всего в 15-18 голосов. А это на мой взгляд лучший по звуку V/A синт на данный момент.
https://soundcloud.com/toby-emerson/event-horizon-128-patches-for
 
А вот похоже ещё более правдоподобное описание алгоритма. По крайней мере объясняется отсутствие явных биений и такое гладкое звучание супер-пилы у JP, и мне кажется такой метод очень близок к реальности:


OK, I think I've got this one.

To be specific, a naive saw.

Actually think of it this way. The output of a naive saw is simply a constantly-decrementing voltage, that is periodically "bumped up." Whether its one sawtooth or 100 simultaneous saws at different frequencies (normalized for volume), all you do is decrement the output each cycle and count how long until the next bump-up.

That is NOT true of BWL saws, or sines, waveROMs and so on.

To produce a single sawtooth, you bump it up every "wavelength" samples.

To produce what LOOKS like two sawtooths, you merely have to bump it up in a syncopated pattern.

Without loss of generality, lets take A4 = 441Hz tuning, and 44.1kHz sampling. Each waveform should be 100 samples.

Single saw? Reset by the height of a waveform every 100 samples. Duh.

Two saws seperated by 1 cent? (4.41Hz?) Bump up half a waveform height after a delay of 99 samples, then again after a delay of 1 sample. Then in 98, then in 2. Then in 97, then 3.

Three saws seperated by 1 and 2 cents? (4.41Hz then 8.82Hz?) Bump up by one third a waveform height after 97 samples, 1 sample, 2. Next cycle is 94, 2, 4.

These delays could be pregenerated into an delay lookup table: 97 1 2 94 2 4 etc. Since the delays follow a nice pattern, I suspect there might be a way to reproduce the pattern with a couple variables being incremented and moduloed too. Now, for 7 saws detuned by mutually prime numbers, it should be theoretically be a very long time before the phasing repeats, which would call for a long lookup table. OTOH, has anyone said Roland actually has a long time before repeat? And with this sound SOOOO fat, what if you just jumped randomly into a random place in the delay lookup table now and then? There's probably ways to do that that aren't audibly discontinuous. And finally if they're all a bit out of phase you can engineer it such that they never all cancel each other out either, so a short repeat wouldn't be audible. If the table "should" be long but you just use a short one over and over, it would introduce some super-low frequencies. No problem if you have a handy HPF though!

It seems to me you could generate a perfect approximation of an arbitrary number of naive sawtooths like this, with maybe only a little more CPU than 1 plain old naive sawtooth. Yes, some individual samples will hit the internal loop, but in our 441Hz example, with a 100-sample waveform, we only execute the internal while 3 times per 100 samples. Maybe 5% overhead over a single sawtooth.

In fact, the fact that the sound is so thick and detuned means its not that important to get the numbers exactly right. Its a license to cut corners. And if you cut a lot corners, you could end up with a lot of DC. For instance, say you initialize the pointer into the lookup table randomly so each note doesn't start with the same phase. You may find yourself bumping up after 97% of the waveform goes by... or 1%. So if you initialize the initial output value to the same value of 0 or 1, your output would have random DC in it. Rounding errors from the repeated addition over time would also introduce DC. Hence a need to HPF (sound familiar?).

There'd be similar algos that would simulate N squares or tris too. Squares: instead of auto-decrement with occasional bump-ups, would hold their output with the occasional bump up OR down. (An extra flag in the lookup table.) Triangles, instead of always decrementing by a fixed value, would decrement or increment by a delta. Instead of bumping the output up/down, the delta would bump up/down. OTOH, super-tri? Super-square? Doesn't sound that appealing.

--------------

No idea if this is what they're doing, but it would explain 1) why they only do it with naive saws, 2) why there's a mandatory and secret HPF, and 3) why they went from right to 7 waveforms instead of say 2-5 with the first model, then more later (because the CPU load may only be slightly affected by number of saws).



Supersaw Implementation #2

Compared to the above implementation, this one has the benefit of using a small amount of memory no matter how many saws we have, and will have an extremely long repeat (eg days, years?) if you select sidebands with a high-enough least common multiple. It has the cost of a very few samples requiring significantly more time to calculate, and the total overhead may be twice the first implementation's.

Instead of pre-calculating delays between sawtooths' rising edges (which I call "bump ups"), this #2 algo 1)keeps track of how many samples the note has sounded; 2) for each of n sawtooths we precalculate how many samples long the waveform is (eg about 169 for middle C); 3) we keep a sorted, circular buffer of at which sample number "milestone" the next sawtooth to bump up will bump up the output.

Don't be freaked out by the hairy "while ( iMilestone )" loop. We only go
in there when a sawtooth is resetting to phase 0. With the sample frequencies
in this demo that only happens (.893+.939+.980+1.0+1.020+1.064+1.110) = 7.006 times per waveform, or about 4.1% of the samples for middle C. Furthermore, you can read that while as an "if" except for the rare chance that two of those 7.006 occurances are happening at the same sample. (To spread the pain out, you could even make a rule that you only bump one saw per sample. This code will work fine if you replace that while with an if.)

Furthermore the inside "while j" sorting loop only has to swap even once about 43% of the time we bump the highest saw (with these sample detunes) and much less for the other detunes.

In short, while this means a few cycles out a million will take A LOT longer to calculate, any set of say 128 samples will take a pretty reliable time and more specifically one only a very little higher than a single naive saw.

Собственно жирным выделил -
- для чего там Hi-Pass фильтр (не только удаление составляющих алиасинга, а ещё и как DC-фильтр для удаления накапливающейся постоянной в сигнале в этом алгоритме);
- метод как избежать сильных биений. Используя обычные 7 пил такого "гладкого" эффекта не получить.
 
  • Like
Реакции: Novation

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