LINUX.ORG.RU

Гитарный звук и Linux

 , ,


8

7

Создание такого треда давно уже назрело, так как обсуждение вопроса гитарного звука в Linux вспыхивает оффтопиком то в одном месте, то в другом. Приглашаю всех интересующихся обсуждать вопрос здесь.

Кастую ist76, Chelobaka, AP.

Обсуждаем вопросы использования guitarix, rakarrack, tuxguitar, VST, LV2, LADSPA плагинов и прочего.

Практический результат обсуждений можно увидеть тут.

https://github.com/olegkapitonov/Kapitonov-Plugins-Pack

Версия 1.0, бинарники

https://github.com/olegkapitonov/Kapitonov-Plugins-Pack/releases/tag/v1.0

Прямая ссылка на скачивание всех бинарников

https://github.com/olegkapitonov/Kapitonov-Plugins-Pack/releases/download/v1....

Перемещено leave из multimedia

Перемещено jollheef из talks

Перемещено leave из multimedia

★★★★★

Ответ на: комментарий от idle

Там особых наворотов математических нет. Описывается нелинейным диф. уравнением, а тут в разностное уравнение переведено.

Я фауст только начал осваивать, поэтому и такой быдлокод.

curufinwe ★★★★★ ()
Ответ на: комментарий от idle

Вот кстати не подскажешь как на фаусте сделать обратную связь с нулевой задержкой?

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

Описывается нелинейным диф. уравнением

так я и спрашиваю каким

idle ★★★★★ ()
Ответ на: комментарий от curufinwe

как на фаусте сделать обратную связь с нулевой задержкой?

никак? но я не уверен что понимаю вопрос. и еще раз повторю, я не особо разбираюсь в предмете.

вот как ты на С или любом другом языке это сделаешь? вообще говоря - никак. ты можешь попытаться улучшить (и усложнить) математику чтобы (просто для примера) интерполировать лучше, но тут что faust, что С.

вот moog filter. до сих пор улучшают digital implementation. посмотри на moog_vcf() и moog_vcf_2b() в vaeffects.lib, вот тебе (не самый лучший, но все же) пример.

idle ★★★★★ ()
Ответ на: комментарий от curufinwe

Когда-то видел программулину, подавляющую эхо. Вот интересно, как оно работает. И вообще потерял её из виду.

Так, наплюкалось такое с твоим тюбампом №2: https://yadi.sk/d/lglmjg323TKeaJ (Отмазки: метроном чойта замедленно поставил, руки просились быстрее)

Навеяно ревером :) А вообще, довольно хорошо всё. От ощущений гитарикса не осталось и следа. Ты с Фендера снимал звук, да? мне кажется он. Кстати, когда играл в предыдуший тюбамп без конвольвера, звук отправлял в кабсим Фло, оно было хуже. Сейчас всё лучше сидит. Есть ощущение ампа, постоянно лезу подкрутить гейн в своём кубе и вспоминаю, что не туда :) Короче, безрыбий рак удался.

Детально разбирать буду позже, пока балуюсь и, честно говоря, балдею от старого, забытого чуйства. Хочется ноги на барную стойку закинуть, стопарь вкусного опрокинуть и на расслабоне этакий вестерн с бандой поиграть :)

Deleted ()
Ответ на: комментарий от idle

никак?

Ну я имею в виду что. Это получается алгебраическая петля, контур который не имеет задержек и инерционности. Его, по-видимому, надо раскрывать решая алгебраическое уравнение, линейное либо нелинейное на каждом шаге интегрирования. Например, в Simulink это решено, если собрать схему с такой петлей, он будет решать уравнение.

Если на С - я бы написал вызов функции решения алгебраического уравнения на каждом шаге.

Я думал, может оно и в фаусте как-то решено, то есть если задать такую петлю, он как-то может код генерировать с решалкой? Но видимо нет.

curufinwe ★★★★★ ()
Ответ на: комментарий от Deleted

Ты с Фендера снимал звук, да?

С Fender Princeton из amplitube.

Надо попробовать оставить в amplitube только два микрофона у самого кабинета и так снять импульс.

curufinwe ★★★★★ ()
Ответ на: комментарий от idle

Попробую изобразить

Uout = (Ug/Ks + Upor*(1-1/Ks)) * (Remax/(Remax + Rg))

Ug = Uin - Uc

dUc/dt = 1/Cg (Ug - Uout)/Rg

Ks = max {(Ug - Upor) * Kreg}, 1

Надеюсь не напутал.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

Если на С - я бы написал вызов функции решения алгебраического уравнения на каждом шаге.

вот. заметь, написал бы.

Я думал, может оно и в фаусте как-то решено, то есть если задать такую петлю, он как-то может код генерировать с решалкой? Но видимо нет.

почему нет?

другое дело, что возможно будет проще написать часть кода на С и подключить через ffunction(). не знаю.

idle ★★★★★ ()
Ответ на: комментарий от curufinwe

Попробую изобразить

запутать хочешь ;)

Uout = (Ug/Ks + Upor*(1-1/Ks)) * (Remax/(Remax + Rg))

Uout - это выход? Uin вход? а все, что не описано, параметры...

1/Cg (Ug - Uout)/Rg

это как парсить?

idle ★★★★★ ()
Ответ на: комментарий от idle

1/Cg*(Ug - Uout)/Rg

Да, Uin вход, Uout выход. Ug и Ks переменные величины, все остальное постоянные параметры.

Наверняка можно проще записать, просто эта запись проистекает из описания «в лоб» той электрической схемы, которая моделируется.

curufinwe ★★★★★ ()
Последнее исправление: curufinwe (всего исправлений: 1)
Ответ на: комментарий от idle

другое дело, что возможно будет проще написать часть кода на С и подключить через ffunction()

Ну похоже на то.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

эта запись проистекает из описания «в лоб» той электрической схемы, которая моделируется

теперь понятно, откуда у тебя взялся такой сумматор... ну, это конечно так себе интегрирование ;) но давай начнем с такого.

начни писать что-то вроде

OUT(in, uc) = сложная формула от in/uc; это выход
UC(in, out) = еще одна от in/out; производная uc

lamp(in) = out letrec {
        'uc = uc + UC(in, out);     // интегратор для бедных
        'out = OUT(in, uc);
};

можно и без letrec если предпочитаешь operator ~, так просто проще выглядит.

но что-то я не очень верю в это моделирование... но удачи, хорошо что кто-то пытается.

idle ★★★★★ ()
Последнее исправление: idle (всего исправлений: 1)
Ответ на: комментарий от idle

Вот спасибо, ты мне глаза открыл как на фаусте писать. Хорошо что ты зашел сюда и объяснил.

curufinwe ★★★★★ ()
Ответ на: комментарий от idle

Пока сделал так

Ks(x) = 1/(max((x-Upor)*(Kreg),0)+1);
Ksplus(x) = Upor - x*Upor;

lamp = main ~ _ : +(bias) : max(0) with {
        main(Uout,Uin) = (Ug * Ks(Ug) + Ksplus(Ks(Ug))) * Remax/(Remax+Rg) with {
            Ug = Uin - Uc letrec {
                'Uc = Uc + (Uin - Uc - Uout)/Rg/Cg*tau;
            };
        };
    };
curufinwe ★★★★★ ()
Последнее исправление: curufinwe (всего исправлений: 1)
Ответ на: комментарий от Deleted

Ошибка была в плагине, в фаустовском коде. Благодаря idle и переписыванию кода в более удобочитаемую форму выявилась. Не сильно влияла, но зато я понял почему при определенных величинах параметров плагин затыкался до перезапуска. Теперь не затыкается.

Чтобы получить то же звук, на исправленном плагине пришлось поднять Cg с 1.1 до 1.8.

Наконец поиграл. Запустил Guitarix, посмотреть что в нем, как оно после большого перерыва. Я просто офигел! Переключаю датчик с некового на бриджевый - и никакого изменения звука! Я бы в слепом тесте не отличил, наверное. Это просто гнездец (ну я и раньше замечал этот факт, думал так и надо, лол). Это при том что гейна не так много было, совсем.

Вожу по струнам сильнее, слабее - перегружает. Ну ладно, убрал громкости на гитаре. Перегружает, почти так же! Повторюсь, это на низком гейне. Блин ну как же так.

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

Ну ладно, поставил гитариксовский DS-1 перед своим плагином, хард поиграть. Нормально так. Чувствительность к датчику, кривым пальцам, звону какой-то неведомой хрени в гитаре возросла еще сильнее. Вот плагины педалей у гитарикса зачетные. А преамп - ну хоть святых выноси.

Еще что заметил - Ardour с моим плагином работает на дефолтном ядре при задержке 5.33 мс стабильно, иксрунов нет. Гитарикс заметно иксрунит на 10 мс. Хотя раньше я на риалтайм ядре через него ставил 2.6 мс и нормально играл.

curufinwe ★★★★★ ()
Последнее исправление: curufinwe (всего исправлений: 1)
Ответ на: комментарий от curufinwe

А вдруг окажется, что разница между настоящим усилителем и его софтовой эмуляцией такая же разительная?))

ist76 ★★★★★ ()
Ответ на: комментарий от curufinwe

Запустил Guitarix, посмотреть что в нем, как оно после большого перерыва. Я просто офигел! Переключаю датчик с некового на бриджевый - и никакого изменения звука!

Я им, конечно, месяца два не пользовался, но разницу помню отчётливо. У тебя точно датчик не полетел? :)

AP ★★★★★ ()
Последнее исправление: AP (всего исправлений: 1)
Ответ на: комментарий от curufinwe

Запустил Guitarix, посмотреть что в нем, как оно после большого перерыва. Я просто офигел! Переключаю датчик с некового на бриджевый - и никакого изменения звука!
Вожу по струнам сильнее, слабее - перегружает. Ну ладно, убрал громкости на гитаре. Перегружает, почти так же! Повторюсь, это на низком гейне. Блин ну как же так.

На JCM800pre с этим особых проблем нет (хотя с реальным аппаратом я, конечно, пока не сравнивал).

templarrr ★★★★★ ()
Ответ на: комментарий от curufinwe

Всё правильно пишешь. Гитарикс у тебе в ногах валяется уже сейчас, после полутора месяцев вникания в вопрос и разработки. (я серьёзно так считаю) Вопрос: чем они там занимались столько лет?

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

По импульсам, которые ты записываешь: Нужен всё-таки слайдер wet/dry. Я играю через куб, который сам по себе вносит некоторое искажение, поэтому звук получается слишком зажатым, хочется более тонкой регулировки.

Так, один тип ампа и один тип перегруза вырисовывается, а другой тип перегруза как планируешь реализовать? Просто смещением bias'а? Или более глубокие изменения нужны? Вообще я пробовал сместить bias в сторону уменьшения искажений, мне нравится как звучит, вполне на хороший такой, звонкий чистый канал годится, в конце появляются искажения на полном драйве, но в основном драйв придаёт звонкости, а не перегружает, это хорошо, правильно. А вот более гейновый звук надо тестировать, конечно. Вроде на первый взгляд хорошо, но... Надо тестировать. Ещё и ещё.

Порадовал ты меня своим плагином.

Deleted ()
Ответ на: комментарий от AP

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

Народ, да попробуйте уже этот плагин!

Deleted ()
Ответ на: комментарий от Deleted

Завтра постараюсь попробовать. Блин, последнюю неделю даже просто взять гитару в руки времени нет.

templarrr ★★★★★ ()
Ответ на: комментарий от Deleted

По импульсам, которые ты записываешь: Нужен всё-таки слайдер wet/dry.

Если плагин использует профиль усилителя из Amplitube, может лучше просто сделать один профиль с кабинетом, и второй - без? Wet/dry у импульса взятого с усилителя и кабинета вместе будет и влияние темброблока, и межкаскадные фильтра, и т.п. "ветдраить".

templarrr ★★★★★ ()
Последнее исправление: templarrr (всего исправлений: 1)
Ответ на: комментарий от templarrr

Wet/dry у импульса взятого с усилителя и кабинета вместе будет и влияние темброблока, и межкаскадные фильтра, и т.п. «ветдраить».

Я беру не прямо те импульсы, которые в amplitube, я не знаю даже как их достать. Я снимаю деконвольвером, и корректирую с учетом АЧХ моего плагина. То есть этот импульс не просто с amplitube снят, а еще и подогнан именно под конкретные настройки моего плагина, чтобы давать такой же звук как amplitube. Если его убрать на dry, получится звук с выхода мощника, без кабсима и комнаты. А темброблок и фильтры никуда не денутся, они сняты отдельно другим методом и заложены в плагин, независимо от конвольвера. Вроде это Chelobaka и хочет, так что надо сделать. Если он играет через комбик, так естественно, кабсим не нужен.

curufinwe ★★★★★ ()
Ответ на: комментарий от AP

Я им, конечно, месяца два не пользовался, но разницу помню отчётливо. У тебя точно датчик не полетел? :)

Да нет конечно )) Смотря еще какие настройки гитарикса, что там выбрано. На клине слышно )))

curufinwe ★★★★★ ()
Ответ на: комментарий от Deleted

Вопрос: чем они там занимались столько лет?

Ну вот DS-1 и TubeScreamer как минимум, нормально работают. Их модели никак не связаны с тем, что в преампе. А с преампом они застряли, во-первых, если копнуть, не понятно почему сделано именно так, как у них - это даже не модель реальных схем, а что-то странное, по мотивам Fender Champ вроде, но работает в корне по другому. Во-вторых - у них тонстек после мощника оказывается, АЧХ самого преампа от балды, фильтры между каскадами от балды. Естественно что такой результат.

А плагины педалей, которые с умом сделаны - оно слышно.

curufinwe ★★★★★ ()
Ответ на: комментарий от Deleted

Так, один тип ампа и один тип перегруза вырисовывается, а другой тип перегруза как планируешь реализовать?

Во-первых, есть еще преамп, я уже писал, там модель каскада класса А. Перегруз другого типа - будет перегружаться в основном преамп. Во-вторых, тип перегруза зависит от цепочки фильтров, которые в dsp исходнике идут перед lamp. То, что забито сейчас, снято профилировщиком с Princeton. У меня есть профили других усилителей из amplitube, и их можно еще наснимать. Там настройки фильтров другие. В третьих, надо корректировать настройки Rg, Cg, overdrive, limit под каждый моделируемый усилитель, это тоже профилировщик должен рассчитывать, надо его добить.

На очереди - хочу сделать Marshall и Triple Rectifier. Но сначала надо реализовать чтение всех этих настроек из файла профиля, и потом просто выбирать файлы, а не делать 100 плагинов с захардкоженными настройками.

curufinwe ★★★★★ ()
Ответ на: комментарий от templarrr

На JCM800pre с этим особых проблем нет (хотя с реальным аппаратом я, конечно, пока не сравнивал).

С jcm800pre там дела уже получше, потому что там другая модель и другой подход. И фильтры, и модели ламп, и схема там не от балды уже, а взята настоящая схема. Но в этом плагине схема моделируется не честно на лету. Модель используется только при генерации кода плагина. Генерируются АЧХ и нелинейные зависимости, и потом в плагине используются они, а не обсчет схемы. То есть подход похож на тот, который применен в преампе, только более детализированный, на ступеньку выше. Но недостаток тут глобальный в том, что нелинейное искажение лампового каскада зависит от сигнала, от частоты, спектра. Потому что там в сеточной цепи не просто резистор, а еще и конденсатор, который заряжается и разряжается по-разному на разном сигнале.

Подход, который в гитариксовском ampsim, это учесть не может. А я делаю по другому - моделирую схему как есть, но не полностью усилитель со всеми каскадами (это слишком сложно и затратно), а только ту часть, которая вносит нелинейность, и только в той степени, в которой схема влияет на перегруз. Линейную часть я просто эквалайзером заменяю.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

А я делаю по другому - моделирую схему как есть, но не полностью усилитель со всеми каскадами (это слишком сложно и затратно), а только ту часть, которая вносит нелинейность, и только в той степени, в которой схема влияет на перегруз.

Похожим образом поступили в Marshall в сериях Valvestate и AVT - использовали предусилитель с лампой и транзисторный оконечник. А в некоторых Vox-ах решили, наоборот, что главное, это ламповый конец и у них есть модели с транзисторами в преде и лампами в оконечнике. Они, правда, всё делали в «железе». Получилось дешевле, но мега-популярности у этих моделей не было.

ist76 ★★★★★ ()
Ответ на: комментарий от ist76

Так это не совсем то. Я моделирую упрощенно, но и преамп с его искажениями, и мощник. Но например, если в преампе 4 лампы, а перегружается только последняя, так смысл точно моделировать все 4. Достаточно последнюю, а предыдущие упрощенно. А в железе так в принципе не получится, каскад усиления из песни не выкинешь.

А если просто сделать линейный мощник, как у Marshall - то оно слышно будет.

Смысл не в том, чтобы отбросить искажения, которые влияют меньше, и оставить основные - как в железе делали. А в том, чтобы части схемы, которые не влияют, моделировать не точно, а упрощенно.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

Я имел ввиду имено симуляцию преампа-ампа-кабсима. В этом смысле у них всё тот же caps, просто картинку прилепили красивую.

А педали перегруза, я сразу говорил, хорошие.

Вчера, кстати, искал плагин дереверберации. Ну хоть застрелите, не помню, где я его видел. То ли в Аудасити встроенный, то ли среди плагинов, то ли в примерах Фауста и Сисаунда, нигде не нахожу. И гугл ничего не подсказывает, как небыло. Суёт только ERA-R, который, может, и хорош, но я же видел в открытом софте что-то такое... Где я это видел? Как называлось? Блеан...

А ты можешь вычислить реверберацию амплитубовского пресета и вычесть её из генерируемого сигнала?

Deleted ()
Ответ на: комментарий от curufinwe

Сам подход: вот здесь более существенно, здесь мы сделаем по-настоящему, здесь менее важно, тут мы линейно будем работать.
Вполне имеет смысл. Но влияет-то в реальности всё, это надо иметь ввиду.

ist76 ★★★★★ ()
Ответ на: комментарий от Deleted

Уберу я реверберацию, для этого достаточно в простейшем случае укоротить импульс до 0,05 секунд. И не будет реверберации. Деревербератор надо в других случаях, когда например запись уже с ревером, и надо его оттуда удалить. Или отклик комнаты, настоящей, из которой не вылезешь, убрать. А в нашем случае надо не удалять, а не добавлять изначально.

curufinwe ★★★★★ ()
Ответ на: комментарий от ist76

Подход более чем имеет смысл, потому что надо сначала делать основное, а потом второстепенное, а не на оборот. Но если в железе некоторые упрощения сделать смысла нет, это не снизит стоимость, то в цифре все по-другому. Нет смысла в цифре hipass фильтр реализовывать на модели трех ламповых каскадов, с моделированием процессов в них во всех деталях.

curufinwe ★★★★★ ()
Ответ на: комментарий от Deleted

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

Postfish

AP ★★★★★ ()
Ответ на: комментарий от AP

Не та прога, но попробовал собрать. Отказывается открывать файлы, «BrickCheck-export-9.wav: Unsupported PCM format» говорит. А у тебя работает?

Deleted ()
Ответ на: комментарий от curufinwe

Хм, что-то мне подсказывает, что ревер ещё добавляется где-то в промежутке. И вообще, дереверберация мне нужна. Я бы духовые и струнные банки звуков в порядок попробовал привести. Мне тут сказку надо записать, а с симфоническими звуками как всегда затык по причине ревера.

Deleted ()
Ответ на: комментарий от curufinwe

В железе это экономит стоимость - сделать выпрямление на кенотроне или диоде, питать преамп трансформатором или с импульсного БП, навесной монтаж или печатная плата. Много есть способов сэкономить.

ist76 ★★★★★ ()
Ответ на: комментарий от ist76

Это всё теории. Ты бы попробовал играть на этом. Я не знаю, как собрать под винду, в фаустовской среде, вроде есть команда faust2vst, но на линуксе оно собирает для линукса. А как под винду собрать? Вопрос.

Deleted ()
Ответ на: комментарий от ist76

Вот, то есть видишь, за счет каких вещей можно сэкономить, за счет тех, которые заметно влияют на звук. А в цифре можно «сэкономить» за счет математической оптимизации, там где на порядок более сложная модель дает разницу в тысячные, грубо говоря. И таких мест полно, если рассматривать полную модель в лоб электронной схемы.

curufinwe ★★★★★ ()
Ответ на: комментарий от Deleted

Играть мне на любом софте не очень нравится. И я бы, конечно попробовал, если бы под оффтопик, но я не настоящий сварщик - в смысле, что до звука в результате - я не привередливый особо. Меня больше волнует что я слышу во время игры, а во время игры ни один плагин не будет звучать в наушники или ММ-колонки лучше лампового комба с 12-дюймовым динамиком. А примеры я послушал уже - ну да, вполне похоже на гитарный усилитель на слух.

ist76 ★★★★★ ()
Ответ на: комментарий от Deleted

Надо поставить фауст под винду, скрипт для сборки именно виндовского vst там есть. И просто сгенерировать плагин. Только вот в винде ничего не бывает просто.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

Так я ж не против. Оптимизации это важно и нужно. Но они есть, а вот придёт человек в тред, который предыстории не знает и начнёт рассказывать, что-де, современный софт полностью воспроизводит-де происходящее в усилителе. А мы ему - нна! Не полностью! Иди, учи матчасть! Вот.

ist76 ★★★★★ ()
Ответ на: комментарий от curufinwe

Только вот в винде ничего не бывает просто.

В винде всё готовое есть. А так-то да.

ist76 ★★★★★ ()
Ответ на: комментарий от ist76

Ну я не знаю же что внутри у того же amplitube. Насколько оно полностью, а насколько не полностью. Исходников то нет. В гитариксе мы видим что, конкретно. А в проприетарных - хз. Можно только предположить, что конечно не полностью моделируется, иначе никаких ресурсов бы не хватило. Но гарантий нет.

curufinwe ★★★★★ ()
Ответ на: комментарий от ist76

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

Deleted ()
Ответ на: комментарий от Deleted

А звук всё же отличается от того, что я в кубе слышал, да.

Естественно, АЧХ твоего кабинета и кабсима в плагине то разная, хорошо что оно вообще хоть как-то похоже звучит. Для этого и профилировщик, когда все будет готово, можно пытаться добиться одинакового звучания записи.

curufinwe ★★★★★ ()
Последнее исправление: curufinwe (всего исправлений: 1)
Ответ на: комментарий от curufinwe

Так. Я опять установил амплитюб и включил мои плюкалки через принстонский амп (Crunch 65 Princeton). Никаких реверов в дефолте не наблюдается. Всё идёт через один только микрофон. Эмбиентные никакого звука вообще не воспроизводят. Или ты пустил звук через Cab B?

Поставил эмбиентный в изолированной студии, вполне себе и звук довольно полный и ревера почти не чувствуется. Хотя, не, лишнее это. Одним микрофоном снимай.

Deleted ()
Последнее исправление: Chelobaka (всего исправлений: 2)
Ответ на: комментарий от Deleted

Я явно как-то не так деконвольвер применил, на тех настройках с которых я снимал тоже было как ты описываешь. Я похоже понял в чем дело, теперь должно получиться снять нормально.

curufinwe ★★★★★ ()
Ограничение на отправку комментариев: ★★