LINUX.ORG.RU

История изменений

Исправление Chelobaka, (текущая версия) :

Так. Твои плагины попробую позже. Ночью опять было весело, надо передохнуть (хотя руки чешутся). А вообще, жду человечка одного, он обещал вчера подъехать и не приехал. Он с двумя гитарами и с двумя комбиками (правда, совсем уж говёными, но это даже лучше, сможет ли эмуляция из них сделать красиво?)

Я не совсем доволен звуком моего овердрайва. В низах - почти-почти то, чего искал. Но, во первых звук должен тянуть рычание, а он сходит на низах очень быстро. Во вторых - идя вверх он теряет эти призвуки и гармоники, превращаясь просто в обрезанную синусоиду (ну, близко). В самых верхах появляется опять то, что хотел. И как мне кажется - из-за отсутствия рекурсии. Из-за этого мне пришлось поставить фильтры второго порядка, из-за этого «диоды» у меня не в петле обратной связи, а скорее как у дисторшна, после. и звучит оно «прилично» потому что диоды я делаю арктангенсом. В третьих я вычитаю фильтрованный сигнал усиленный на квадрат драйва! Это тотали вронг сё, что на выходе похоже, но не то. Что имеем:

Vout = diode(VinPlus-VinMinus)
VinPlus = Signal
VinMinus = FilterHiLo(N2,Signal)*drive^2
если не напутал. А хочу я :
Vout = VinPlus-VinMinus-Diodes //И тут вопрос, минус или плюс всё-таки? То мне кажется что плюс надо, то наоборот
VinPlus = Signal
VinMinus = FilterHiLo(N1,Vout')*drive
Diodes = atan(FilterHiLo(N1,Vout'))*(max_drive-drive)
И что-то тут с диодами внутри всего этого цикла, арктангенсом и оставить? Увеличиваем сопротивление(драйв), всё идёт через «диоды». Тут уж я пока не допетрил как конкретно реализовать диоды. Но главная разница (оставим пока диоды) - в VinMinus идёт результат предыдущего вычисления, а не просто инверсия фильтрованного сигнала со входа. Это Эпистолическая, Краеугольно-Сермяжная идея моего изыскания.

С рекурсией же у меня фигня получается. То она прибавляет единицу к входному сигналу при каждом круге воспроизведения в кутракторе (откуда? Кааак?) Кода не сохранилось, запутался, стёр. То превращается в гармошку инверсий себя же, (это где-то я переборщил с усилением и при вычитании из предыдущего оно инвертируется), тут интересно, на осцилоскопе хорошо пилу, и как мне кажется, это периоды буфферизации, потому что ну никак не тянет на период в тик дискретизации, как в лекции утверждалось. Если тик рекурсии - это период буфферизации, то всё пропало вообще. Другой комп, другие настройки и ёк.

Лучшее, что у меня получилось - это поймать рекурсию на тонкой грани, когда перегруза немного не хватает, но зато он не выходит на цикличную инверсию. Это когда драйв держать в пределах 0.5-0.98. Сразу стало понятно, надо ставить фильтры первого порядка, как на реальной педали и «диоды» именно в обратной цепи. Вот только что дальше? :) Код такой (примерно, всё опять на пальцах)

import("stdfaust.lib");
import("filters.lib");
process = stomp with {
  volume = hslider("volume",1,0,1,0.01);
  drive = hslider("drive",1,0.1,10,0.01): si.smooth(0.7);
  hipass = 720;
  lopass = 62;
  breakline =hslider("breakline",0,-10,10,0.1);
  amplitude = hslider("preamp",1,0,4,0.01);
  voice = hslider("voice",0.5,0,1,0.001);
  prelopassfreq = 723.4;
  s = hslider("smoothness",0,0,1,0.0001);
  
  overdrive(inputL) = overdriven(inputL):ba.bypass1(checkbox("ATC"),ActiveToneCirquit) with {
	boost = _*amplitude;
	loopbackfilter = _<:fi.highpass(1,hipass+(breakline*drive)),fi.lowpass(1,((lopass+breakline)/drive)): +:*(drive): atan(_) ;
	driven =  _*(drive^2);
	overdriven = boost<: -~loopbackfilter(_): ba.bypass1(checkbox("smooth"),si.smooth(s));
	
	PreActiveLowpass = fi.lowpass(1,prelopassfreq);
	ActiveToneCirquit = _<: (PreActiveLowpass:fi.lowpass(1,prelopassfreq))*voice,(PreActiveLowpass + fi.highpass(1,prelopassfreq))*(1-voice):+;
  };
  
  
  stomp =  _: ba.bypass1(checkbox("overdrive"),overdrive): _*(volume) ;
    
};
Если драйв выкручивать дальше, то начинается вакханалия, уровень сигнала может убежать вверх, или вниз, как ему захочется, а может начать инвертироваться и свистеть. letrec не получается использовать, не понимаю, что ему не нравится, он никак у меня не работает.

Исправление Chelobaka, :

Так. Твои плагины попробую позже. Ночью опять было весело, надо передохнуть (хотя руки чешутся). А вообще, жду человечка одного, он обещал вчера подъехать и не приехал. Он с двумя гитарами и с двумя комбиками (правда, совсем уж говёными, но это даже лучше, сможет ли эмуляция из них сделать красиво?)

Я не совсем доволен звуком моего овердрайва. В низах - почти-почти то, чего искал. Но, во первых звук должен тянуть рычание, а он сходит на низах очень быстро. Во вторых - идя вверх он теряет эти призвуки и гармоники, превращаясь просто в обрезанную синусоиду (ну, близко). В самых верхах появляется опять то, что хотел. И как мне кажется - из-за отсутствия рекурсии. Из-за этого мне пришлось поставить фильтры второго порядка, из-за этого «диоды» у меня не в петле обратной связи, а скорее как у дисторшна, после. и звучит оно «прилично» потому что диоды я делаю арктангенсом. В третьих я вычитаю фильтрованный сигнал усиленный на квадрат драйва! Это тотали вронг сё, что на выходе похоже, но не то. Что имеем:

Vout = diode(VinPlus-VinMinus)
VinPlus = Signal
VinMinus = FilterHiLo(N2,Signal)*drive^2
если не напутал. А хочу я :
Vout = VinPlus-VinMinus-Diodes //И тут вопрос, минус или плюс всё-таки? То мне кажется что плюс надо, то наоборот
VinPlus = Signal
VinMinus = FilterHiLo(N1,(VinPlus+Vout'))*drive
Diodes = atan(FilterHiLo(N1,(VinPlusVout')))*(max_drive-drive)
И что-то тут с диодами внутри всего этого цикла, арктангенсом и оставить? Увеличиваем сопротивление(драйв), всё идёт через «диоды». Тут уж я пока не допетрил как конкретно реализовать диоды. Но главная разница (оставим пока диоды) - в VinMinus идёт результат предыдущего вычисления, а не просто инверсия фильтрованного сигнала со входа. Это Эпистолическая, Краеугольно-Сермяжная идея моего изыскания.

С рекурсией же у меня фигня получается. То она прибавляет единицу к входному сигналу при каждом круге воспроизведения в кутракторе (откуда? Кааак?) Кода не сохранилось, запутался, стёр. То превращается в гармошку инверсий себя же, (это где-то я переборщил с усилением и при вычитании из предыдущего оно инвертируется), тут интересно, на осцилоскопе хорошо пилу, и как мне кажется, это периоды буфферизации, потому что ну никак не тянет на период в тик дискретизации, как в лекции утверждалось. Если тик рекурсии - это период буфферизации, то всё пропало вообще. Другой комп, другие настройки и ёк.

Лучшее, что у меня получилось - это поймать рекурсию на тонкой грани, когда перегруза немного не хватает, но зато он не выходит на цикличную инверсию. Это когда драйв держать в пределах 0.5-0.98. Сразу стало понятно, надо ставить фильтры первого порядка, как на реальной педали и «диоды» именно в обратной цепи. Вот только что дальше? :) Код такой (примерно, всё опять на пальцах)

import("stdfaust.lib");
import("filters.lib");
process = stomp with {
  volume = hslider("volume",1,0,1,0.01);
  drive = hslider("drive",1,0.1,10,0.01): si.smooth(0.7);
  hipass = 720;
  lopass = 62;
  breakline =hslider("breakline",0,-10,10,0.1);
  amplitude = hslider("preamp",1,0,4,0.01);
  voice = hslider("voice",0.5,0,1,0.001);
  prelopassfreq = 723.4;
  s = hslider("smoothness",0,0,1,0.0001);
  
  overdrive(inputL) = overdriven(inputL):ba.bypass1(checkbox("ATC"),ActiveToneCirquit) with {
	boost = _*amplitude;
	loopbackfilter = _<:fi.highpass(1,hipass+(breakline*drive)),fi.lowpass(1,((lopass+breakline)/drive)): +:*(drive): atan(_) ;
	driven =  _*(drive^2);
	overdriven = boost<: -~loopbackfilter(_): ba.bypass1(checkbox("smooth"),si.smooth(s));
	
	PreActiveLowpass = fi.lowpass(1,prelopassfreq);
	ActiveToneCirquit = _<: (PreActiveLowpass:fi.lowpass(1,prelopassfreq))*voice,(PreActiveLowpass + fi.highpass(1,prelopassfreq))*(1-voice):+;
  };
  
  
  stomp =  _: ba.bypass1(checkbox("overdrive"),overdrive): _*(volume) ;
    
};
Если драйв выкручивать дальше, то начинается вакханалия, уровень сигнала может убежать вверх, или вниз, как ему захочется, а может начать инвертироваться и свистеть. letrec не получается использовать, не понимаю, что ему не нравится, он никак у меня не работает.

Исправление Chelobaka, :

Так. Твои плагины попробую позже. Ночью опять было весело, надо передохнуть (хотя руки чешутся). А вообще, жду человечка одного, он обещал вчера подъехать и не приехал. Он с двумя гитарами и с двумя комбиками (правда, совсем уж говёными, но это даже лучше, сможет ли эмуляция из них сделать красиво?)

Я не совсем доволен звуком моего овердрайва. В низах - почти-почти то, чего искал. Но, во первых звук должен тянуть рычание, а он сходит на низах очень быстро. Во вторых - идя вверх он теряет эти призвуки и гармоники, превращаясь просто в обрезанную синусоиду (ну, близко). В самых верхах появляется опять то, что хотел. И как мне кажется - из-за отсутствия рекурсии. Из-за этого мне пришлось поставить фильтры второго порядка, из-за этого «диоды» у меня не в петле обратной связи, а скорее как у дисторшна, после. и звучит оно «прилично» потому что диоды я делаю арктангенсом. В третьих я вычитаю фильтрованный сигнал усиленный на квадрат драйва! Это тотали вронг сё, что на выходе похоже, но не то. Что имеем:

Vout = diode(VinPlus-VinMinus)
VinPlus = Signal
VinMinus = FilterHiLo(N2,Signal)*drive^2
если не напутал. А хочу я :
Vout = VinPlus-VinMinus-Diodes //И тут вопрос, минус или плюс всё-таки? То мне кажется что плюс надо, то наоборот
VinPlus = Signal
VinMinus = FilterHiLo(N1,(VinPlus+Vout'))*drive
Diodes = atan(FilterHiLo(N1,Vout'))*(max_drive-drive)
И что-то тут с диодами внутри всего этого цикла, арктангенсом и оставить? Увеличиваем сопротивление(драйв), всё идёт через «диоды». Тут уж я пока не допетрил как конкретно реализовать диоды. Но главная разница (оставим пока диоды) - в VinMinus идёт результат предыдущего вычисления, а не просто инверсия фильтрованного сигнала со входа. Это Эпистолическая, Краеугольно-Сермяжная идея моего изыскания.

С рекурсией же у меня фигня получается. То она прибавляет единицу к входному сигналу при каждом круге воспроизведения в кутракторе (откуда? Кааак?) Кода не сохранилось, запутался, стёр. То превращается в гармошку инверсий себя же, (это где-то я переборщил с усилением и при вычитании из предыдущего оно инвертируется), тут интересно, на осцилоскопе хорошо пилу, и как мне кажется, это периоды буфферизации, потому что ну никак не тянет на период в тик дискретизации, как в лекции утверждалось. Если тик рекурсии - это период буфферизации, то всё пропало вообще. Другой комп, другие настройки и ёк.

Лучшее, что у меня получилось - это поймать рекурсию на тонкой грани, когда перегруза немного не хватает, но зато он не выходит на цикличную инверсию. Это когда драйв держать в пределах 0.5-0.98. Сразу стало понятно, надо ставить фильтры первого порядка, как на реальной педали и «диоды» именно в обратной цепи. Вот только что дальше? :) Код такой (примерно, всё опять на пальцах)

import("stdfaust.lib");
import("filters.lib");
process = stomp with {
  volume = hslider("volume",1,0,1,0.01);
  drive = hslider("drive",1,0.1,10,0.01): si.smooth(0.7);
  hipass = 720;
  lopass = 62;
  breakline =hslider("breakline",0,-10,10,0.1);
  amplitude = hslider("preamp",1,0,4,0.01);
  voice = hslider("voice",0.5,0,1,0.001);
  prelopassfreq = 723.4;
  s = hslider("smoothness",0,0,1,0.0001);
  
  overdrive(inputL) = overdriven(inputL):ba.bypass1(checkbox("ATC"),ActiveToneCirquit) with {
	boost = _*amplitude;
	loopbackfilter = _<:fi.highpass(1,hipass+(breakline*drive)),fi.lowpass(1,((lopass+breakline)/drive)): +:*(drive): atan(_) ;
	driven =  _*(drive^2);
	overdriven = boost<: -~loopbackfilter(_): ba.bypass1(checkbox("smooth"),si.smooth(s));
	
	PreActiveLowpass = fi.lowpass(1,prelopassfreq);
	ActiveToneCirquit = _<: (PreActiveLowpass:fi.lowpass(1,prelopassfreq))*voice,(PreActiveLowpass + fi.highpass(1,prelopassfreq))*(1-voice):+;
  };
  
  
  stomp =  _: ba.bypass1(checkbox("overdrive"),overdrive): _*(volume) ;
    
};
Если драйв выкручивать дальше, то начинается вакханалия, уровень сигнала может убежать вверх, или вниз, как ему захочется, а может начать инвертироваться и свистеть. letrec не получается использовать, не понимаю, что ему не нравится, он никак у меня не работает.

Исходная версия Deleted, :

Так. Твои плагины попробую позже. Ночью опять было весело, надо передохнуть (хотя руки чешутся). А вообще, жду человечка одного, он обещал вчера подъехать и не приехал. Он с двумя гитарами и с двумя комбиками (правда, совсем уж говёными, но это даже лучше, сможет ли эмуляция из них сделать красиво?)

Я не совсем доволен звуком моего овердрайва. В низах - почти-почти то, чего искал. Но, во первых звук должен тянуть рычание, а он сходит на низах очень быстро. Во вторых - идя вверх он теряет эти призвуки и гармоники, превращаясь просто в обрезанную синусоиду (ну, близко). В самых верхах появляется опять то, что хотел. И как мне кажется - из-за отсутствия рекурсии. Из-за этого мне пришлось поставить фильтры второго порядка, из-за этого «диоды» у меня не в петле обратной связи, а скорее как у дисторшна, после. и звучит оно «прилично» потому что диоды я делаю арктангенсом. В третьих я вычитаю фильтрованный сигнал усиленный на квадрат драйва! Это тотали вронг сё, что на выходе похоже, но не то. Что имеем:

Vout = diode(VinPlus-VinMinus)
VinPlus = Signal
VinMinus = FilterHiLo(N2,Signal)*drive^2
если не напутал. А хочу я :
Vout = VinPlus-VinMinus-Diodes //И тут вопрос, минус или плюс всё-таки? То мне кажется что плюс надо, то наоборот
VinPlus = Signal
VinMinus = FilterHiLo(N1,Vout')*drive
Diodes = atan(FilterHiLo(N1,Vout'))*(max_drive-drive)
И что-то тут с диодами внутри всего этого цикла, арктангенсом и оставить? Увеличиваем сопротивление(драйв), всё идёт через «диоды». Тут уж я пока не допетрил как конкретно реализовать диоды. Но главная разница (оставим пока диоды) - в VinMinus идёт результат предыдущего вычисления, а не просто инверсия фильтрованного сигнала со входа. Это Эпистолическая, Краеугольно-Сермяжная идея моего изыскания.

С рекурсией же у меня фигня получается. То она прибавляет единицу к входному сигналу при каждом круге воспроизведения в кутракторе (откуда? Кааак?) Кода не сохранилось, запутался, стёр. То превращается в гармошку инверсий себя же, (это где-то я переборщил с усилением и при вычитании из предыдущего оно инвертируется), тут интересно, на осцилоскопе хорошо пилу, и как мне кажется, это периоды буфферизации, потому что ну никак не тянет на период в тик дискретизации, как в лекции утверждалось. Если тик рекурсии - это период буфферизации, то всё пропало вообще. Другой комп, другие настройки и ёк.

Лучшее, что у меня получилось - это поймать рекурсию на тонкой грани, когда перегруза немного не хватает, но зато он не выходит на цикличную инверсию. Это когда драйв держать в пределах 0.5-0.98. Сразу стало понятно, надо ставить фильтры первого порядка, как на реальной педали и «диоды» именно в обратной цепи. Вот только что дальше? :) Код такой (примерно, всё опять на пальцах)

import("stdfaust.lib");
import("filters.lib");
process = stomp with {
  volume = hslider("volume",1,0,1,0.01);
  drive = hslider("drive",1,0.1,10,0.01): si.smooth(0.7);
  hipass = 720;
  lopass = 62;
  breakline =hslider("breakline",0,-10,10,0.1);
  amplitude = hslider("preamp",1,0,4,0.01);
  voice = hslider("voice",0.5,0,1,0.001);
  prelopassfreq = 723.4;
  s = hslider("smoothness",0,0,1,0.0001);
  
  overdrive(inputL) = overdriven(inputL):ba.bypass1(checkbox("ATC"),ActiveToneCirquit) with {
	boost = _*amplitude;
	loopbackfilter = _<:fi.highpass(1,hipass+(breakline*drive)),fi.lowpass(1,((lopass+breakline)/drive)): +:*(drive): atan(_) ;
	driven =  _*(drive^2);
	overdriven = boost<: -~loopbackfilter(_): ba.bypass1(checkbox("smooth"),si.smooth(s));
	
	PreActiveLowpass = fi.lowpass(1,prelopassfreq);
	ActiveToneCirquit = _<: (PreActiveLowpass:fi.lowpass(1,prelopassfreq))*voice,(PreActiveLowpass + fi.highpass(1,prelopassfreq))*(1-voice):+;
  };
  
  
  stomp =  _: ba.bypass1(checkbox("overdrive"),overdrive): _*(volume) ;
    
};
Если драйв выкручивать дальше, то начинается вакханалия, уровень сигнала может убежать вверх, или вниз, как ему захочется, а может начать инвертироваться и свистеть. letrec не получается использовать, не понимаю, что ему не нравится, он никак у меня не работает.