Перевод Справочника по программированию JSFX (1 онлайн

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
При определённых условиях возникла потребность в переводе Справочника по программированию JSFX
Перевод делается с помощью Google переводчик. На сколько хватает сил и познаний английского - делаю поправки. Исходный размер документа при шрифте 12 составляет 35 страниц. Перевод делается по абзацам. Т.е. один абзац идет на английском, и следом в этом же документе перевод на русском. Пока так для того что бы исходник всегда был под рукой. Позже английский текст почистим.
Пока переведено 3 страницы. Переведенный английский текст подкрашивается серым цветом. Проверенный и отредактированный русский перевод подкрашивается нежно голубым :))

Так как моих знаний английского не хватает и маловато свободного времени,

Прошу комрадов помочь в данном деле.​

Документ находится на Google доксах.
Любознательные могут получить допуск на просмотр документа.
Желающие помочь получат права на редактирование.

Ребята англичане, кто на каникулах, подключайтесь!!!
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
daicehawk, Спасибо за проделанную работу. Как только напишу новый плагин, ты обязательно получишь 100 процентную скидку на лицензию.

Пока что отредактирована 1/7 часть справочника. Мужики, подключайтесь.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Такие вот выражения -
value / divisor
value >> shift_amt
видимо переводить не нужно? Только описание что это значит.


PS: если что-то находим в синем не то - выделяем красным - в скобках после твоего пишем свой вариант подсвеченный красным?
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
PS: если что-то находим в синем не то - выделяем красным - в скобках после твоего пишем свой вариант подсвеченный красным?
Можно и так. Хотя синее это проверенное и типа уже не должно содержать ошибок, но мало ли ))))
Такие вот выражения -
value / divisor
value >> shift_amt
видимо переводить не нужно? Только описание что это значит.
Надо бы.
 

daicehawk

овес-тодорогнеукупишь
Обратите внимание, пользователь заблокирован на форуме.

drobinkin

Старый пират
21 Май 2003
1.442
1.562
113
53
Северодонецк→Одесса
no.site
Такие вот выражения -
value / divisor
value >> shift_amt
видимо переводить не нужно? Только описание что это значит.
Бывает, делают еще так:
value / divisor (значение / делитель)
Но если в тексте дофига такого, то может сильно отвлекать, мешать и т.п.

По поводу гуглотранса: есть еще мультитран — там при переводе используется куча тематических словарей, можно выбрать более точно.
 
  • Like
Реакции: belovw

drobinkin

Старый пират
21 Май 2003
1.442
1.562
113
53
Северодонецк→Одесса
no.site
Джентльмены, кто занимается переводом справочника — там есть удобная фича "Комментарии":
Выделяем букву или текст, жмем вверху справа кнопку "Комментарии", пишем свои мысли, замечания и — "Сохранить".
Очень удобно.
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
еще мультитран

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

Далее. Нужно уже начинать подкрашивать окончательно переведённые и проверенные участки текста. Предлагаю зелёный.

Ещё раз выражаю сердечную благодарность всем подключившимся. С меня пиво ;-)
 

drobinkin

Старый пират
21 Май 2003
1.442
1.562
113
53
Северодонецк→Одесса
no.site
А как понять, что они уже проверены.
Я вычитывал уже подкрашенные голубым (это ж вроде как уже переведенные и проверенны?) и то находил и делал много мелких правок.
Я там на полях пооставлял кое-какие замечания.
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Тогда предлагаю спорные проверенные и подкрашенные участки выносить в коменты.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
belovw, а где оригинал справочника или имеется ввиду то,что на сайте кокос?
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Всем привет. Огромное спасибо всем откликнувшимся в этой теме. Без вас я бы не осилил этот объём. Остался небольшой затык по последней главе "User defined functions and namespace psuedo-objects". Вроде переведены всё верно, но доходчивого понимания нет. Видимо нужно уже обладать какими-то знаниями по объектно ориентированному программированию и псевдо-объектам, но к сожалению у меня этого нема.

Сабж: подскажите пожалуйста кто в теме что курить и что копать.
 
  • Like
Реакции: Trasher

Trasher

Well-Known Member
12 Янв 2013
603
422
63
"User defined functions and namespace psuedo-objects".
Мне кажется это что-то из C++:0372:На пальцах если,то ближе всего к созданию библиотек функций или наподобии API.А если образно,то это создание описания сложной функции(состоящей из нескольких функций или же возможно даже алгоритма действий какого-либо процесса) в одном файле/нескольких файлах с указанием параметров и упрощенным обозначением самих функций или алгоритмов,к которым в дальнейшем будет обращаться исполняемый файл.Как пример(подглядено у забугорных товаристчей) в файле описании(описание фейдера) через векторную графику без использования растровых изображений будет выглядеть каким-то набором кода(нарисовать прямоугольник в векторе с указанием размеров,цвета и т.д.,нарисовать шкалу-тут надо нарисовать много линий с указанием размеров линий(кстати шкалу можно нарисовать отдельным инклюд файлом,а затем просто импортировать в файл описание для фейдера) и т.д. и т.п.,а в исполняемом файле для вызова нужно будет только указание имени и параметров фейдера без описания графической части.Грубо(даже очень грубо) говоря чем-то напоминает написание API,т.е. в исполняемом файле при написании плагина нам будет нужно указать упрощенное имя функции/алгоритма с указанием используемых параметров(тем самым экономим время написания кода и копипасты и упрощаем наглядно сам плагин в плане оформления кода,ещё из плюсов проще наверное искать баги если плагин пишем блоками,а не устраиваем помойку из кода в одном исполняемом файле,также при разумном подходе в оформлении структуры можно упростить себе работу при дальнейшем(если конечно в планах) портировании кода плагина при переносе на вст или другие технологии.Извиняюсь за оффтоп,если где-то не прав,может кто поправит,но моё мнение рыть надо в районе API.
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Из С++ однозначно, но к API отношения не имеет. Из JS кода к апи доступа нет.
С помощью этого выстраивается иерархия, понять бы как чего и зачем.
 
  • Like
Реакции: Trasher

Trasher

Well-Known Member
12 Янв 2013
603
422
63
Из JS кода к апи доступа нет.
С помощью этого выстраивается иерархия, понять бы как чего и зачем.
Я имел ввиду создание своей структуры API к написуемому плагину,используя базовые функции языка JSFX для упрощения написания плага(т.е базовые функции языка-это низшая ступень иерархии(принудительно нужно себя заставить не лезть ниже),а дальше дело за фантазией разработчика:080:.Структуру можно слямзить взяв за основу модули того же Reaktora(имеется ввиду core) или же если в планах написание эмуляции,создание описаний своих элементов плагина(например резистор,диод,и т.д.,что-то наподобии Spice симуляции(это мне кажется сложнее,так как тот же резистор например для переменки создать для JS будет довольно затратно по ресурсам(придется синтезировать синус или дублировать входящий сигнал с учетом амплитуды и положением фазы(если считаем напряжение то сила тока по фазе к напряжению=- и *или / на какой-то коэфф., и т.п.(причем частоту тоже придется менять согласно частоте тока входящего сигнала ),а если по схеме этих резисторов будет до хрена и т.п.,то и в итоге плагин не взлетит.Структура может быть какая угодно,с учетом одного ограничения(правда я не уверен),40 функций в одном инклюд файле(вроде так).Как я понял если в инклюд файле/файлах есть импортированный другой инклюд файл(т.е. он использует функции с другого файла без описания процесса,а ограничивается только названием функции и параметрами необходимыми для выполнения функции),то он на одну ступень выше по иерархии из-за того,что использует функции из другого файла,если его не будет тогда весь процесс вычислений будет неудачным (но это тоже не факт,возможно есть и фокусы для обхода),жаль,что JSFX не поддерживает хотя бы частично динамичного поведения(вот это был бы жесткач по полной).Из минусов-также можно устроить помойку только уже из инклюд файлов и запутаться,что где(если пишем только в JS,а портировать не будем).Возможно где-то я и ошибаюсь.
 
Последнее редактирование:

Alex Longard

Well-Known Member
10 Май 2015
1.941
1.232
113
36
München->Deutschland, Київ->Україна
@belovw, завтра скину переведенную последнюю главу.
[DOUBLEPOST=1431659693,1431625054][/DOUBLEPOST]Определяемые пользователем функции и пространство имен псевдо-объектов.

Примечание: Функциональность предоставленная в данном разделе доступна только с версии Reaper 4.25.

JS предоставляет определение пользовательских функций и несколько видов объектов для управления данными.

Функции могут быть объявлены в любом месте кода, кроме тела блока, и в любом разделе. Хотя функции объявленые в Init доступны в любом месте кода, в то же время функции объявленые в других разделах являются локальными для них и недоступны в других разделах.
Функции не могут быть рекурсивными, возможен вызов вышестоящей функции в коде, но не наоборот.
Функции могут иметь от 0 до 40 параметров.
Чтобы определить функцию используйте следующий синтаксис:

function getSampleRate()
(
srate; // return srate
);

function mySine(x)
(
// taylor approximation
x - (x^3)/(3*2) + (x^5)/(5*4*3*2) - (x^7)/(7*6*5*4*3*2) + (x^9)/(9*8*7*6*5*4*3*2);
);

function calculateSomething(x y)
(
x += mySine(y);
x/y;
);

Эти функции могут вызываться так:

y = mySine($pi * 18000 / getSampleRate());
z = calculateSomething(1,2);

Примечание: обратите внимание на то что переменные вне функции являются глобальными.
Чтобы объявить переменную внутри функции используется ключевое слово local() между объявлением и телом функции.
Объявленые таким образом переменные являются локальными для данной функции и сохраняют свое значение между вызовами функции. При этом одноименные переменные могут использоваться в разных разделах, например init и sample и будут иметь разные значения.
Пример:

function mySine(x) local(lastreq lastvalue)
(
lastreq != x ? (
lastreq = x; // save last input
// taylor approximation
lastvalue = x - (x^3)/(3*2) + (x^5)/(5*4*3*2) - (x^7)/(7*6*5*4*3*2) + (x^9)/(9*8*7*6*5*4*3*2);
);
lastvalue; // result of function is cached value
);

В написаном выше примере mySine кеширует последнее значение и невыполняет расчеты если кешированое значение доступно. Обратите внимание что локальные переменные инициализируются значением 0, которая работает только в данном примере, и при использовании mycosine() прийдется применить дополнительные логические выражения.

JS поддерживает пространство имен в виде глобальных переменных, что позволяет применять объектно-ориентированый стиль программирования. Доступ к переменным пространства имен осуществляется с помощью "this", который служит преффиксом для определения переменных и функций используемых как экземпляры.

function set_foo(x) instance(foo)
(
foo = x;
);
// или
function set_foo(x)
(
this.foo = x;
);

whatever.set_foo(32); // whatever.foo = 32;
set_foo(32); // set_foo.foo = 32;

function test2()
(
this.set_foo(32);
);
whatever.test2(); // whatever.foo = 32

Кроме этого функции могут использовать преффикс для перемещения по иерархии пространства имен, пример:

function set_par_foo(x)
(
this..foo = x;
);
a.set_par_foo(1); // устанавливает foo (global) в значение 1
a.b.set_par_foo(1); // устанавливает a.foo в 1
userfunc
[DOUBLEPOST=1431659957][/DOUBLEPOST]Перевел максимально приближенно к смыслу а не к машинному, английский знаю достаточно по части программирования так что здесь все нормально. Ради интереса проверил как переводит гугл, и мне поплохело))))
[DOUBLEPOST=1431661071][/DOUBLEPOST]Trasher
Эмулировать транзисторы и резисторы гиблое дело)))) Это тонны бесполезного кода, можно использовать готовые волновые формы типа синусоиды, треугольника и т.д...
С помощью наследования можно собрать даже примитивный синтезатор, несколько таких примеров есть на кокосовом форуме.
По поводу функций ошибочка: можно использовать бесконечное количество функций, но у одной функции может быть максимум 40 аргументов, например:
function myfunc(param1, param2, ... param40)

Если что-то будет непонятно - спрашивайте, попробую объяснить.
 
  • Like
Реакции: EUGEN27771 и belovw

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Ребята, не совсем в том разделе, но спрошу тут - так как тут те, кто точно внимательно читал этот документ....
Может есть какой-то механизм позволяющий при помощи JSFX запустить скрипт? Кроме MIDI сообщения.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Та то, что очевидными способами нельзя - я знаю, но может есть какой-то обходной?
[DOUBLEPOST=1431671305,1431671115][/DOUBLEPOST]
Сторонние скрипты незапускаются, но есть функция run() в апи JS, насколько помню. С помощью нее по идее можно чего-нибудь запустить.
Ну вот я что-то такое и имею в виду....
Просто когда для работы проекта нужно запускать очень большое кол-во разнообразных скриптов, midi пул сообщений быстро заканчивается, не смотря на 16 каналов и 127 сообщений в каждом. Если бы скрипты можно было запускать локальными (в рамках одной группы трэков) midi сообщениями, то ещё куда ни шло, но тут ведь только глобальное midi применимо :(
А и забивать midi "эфир" вспомогательными сообщениями очень не хочется.

Может посмотрите?
 

Alex Longard

Well-Known Member
10 Май 2015
1.941
1.232
113
36
München->Deutschland, Київ->Україна
Сейчас поковыряю, на кокосовом форуме что-то попадалось с вызовом питоновского скрипта из JS и выборка параметров.
[DOUBLEPOST=1431673128,1431671607][/DOUBLEPOST]http://forum.cockos.com/showthread.php?t=33795
Посмотрите в этом топике, может попадется то что нужно, особенно среди семплеров и мидиутилит.

https://sites.google.com/site/jesuccernn/files
А это для общего развития и вдруг кому-нибудь пригодятся выложеные там скрипты.
 

Trasher

Well-Known Member
12 Янв 2013
603
422
63
По поводу функций ошибочка:
Alex_028
Вы правы.По поводу резисторов и транзисторов не много не соглашусь,есть способы избежать тонны кода,на худой конец есть люди которым это просто интересно.:)
 
Последнее редактирование:

Alex Longard

Well-Known Member
10 Май 2015
1.941
1.232
113
36
München->Deutschland, Київ->Україна
Trasher
Есть более подходящие инструменты для моделирования аналоговых схем, если брать из звукового dsp то есть Csound, Cabbage, Chuck.
На JS сложновато реализовать. Я когда наткнулся на эту тему сразу попробовал написать примитивный блок имитации транзистора, но что с ним дальше делать я понятия не имею)))) Нужно много знать о процессах которые происходят при различных напряжениях, частотах и еще куча неучтенных параметров, а в радиоэлектронике у меня слабоватые знания.
Даже при написании vst синтезаторов используется принцип обработки уже готовых волновых форм или генерация с нуля по заданным параметрам, а не эмуляция полной аналоговой схемы синтезаторов 80-х годов))))
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Перевод для всех,или только для принимавших участие?
 

belovw

Well-Known Member
22 Апр 2009
9.200
8.384
113
50
RK Almaty
Этот вопрос с участниками перевода не обсуждался.
Думаю народ будет не против, но правильно будет дождаться личного разрешения от каждого.
[DOUBLEPOST=1431766612,1431766412][/DOUBLEPOST]
Сторонние скрипты незапускаются, но есть функция run() в апи JS, насколько помню. С помощью нее по идее можно чего-нибудь запустить.
Не помню такой функции. Не могли бы указать документацию или ссылки на нее?
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)