версия html вёрстки от 10 апреля 2006 г, eggnot
оригинал документа (в формате word) http://www.pure-data.web.ur.ru/
Руководство пользователя к программе Pure Data. Версия документа: 1.10 от 26 июля 2004 г.
ВНИМАНИЕ ! Это не окончательная версия документа, отсутствие ошибок не гарантировано !
Оглавление
Алфавитный указатель объектов
Общие принципы работы с программой
Описание объектов управления сообщениями
Взаимодействие с пользователем
Работа с типами данных
Математика, логика
ФильтрыОписание объектов управления сигналами
Послесловие
-, !-, !-, !/, !/, !=, %, &&, *, /, ||, +, <, <=, ==, >, >=, abs, accum, acos, active, add2_comma, allow, anal, any2list, Append, arbran, array, arraycopy, arraysize, asin, atoi, average, bag, bandpass, bang, bangbang, beat, bendin, bendout, beta, bilex, bondo, Borax, borax, bpe, Bucket, buddy, canvas, capture, cart2pol, cart2sph, cartopol, cauchy, change, chord, clip, Clip, coll, comment, comment (cyclone), cos, cosh, counter, ctlin, ctlout, cycle, date, db2v, dbtofad, dbtorms, decide, Decode, deg2rad, delay, delta, demultiplex, deny, dist, div, divide, divmod, dollarg, drip, drunk, edge, envgen, equalizer, exp, exp_inc, expo, expr, f2note, fadtodb, fadtorms, fifo, float, float24, flush, for++, forward, fromsymbol, ftom, funbuff, funnel, gate (cyclone), gate (iemlib), gauss, gen10, gen17, gen24, gen25, gen5, gen7, gen9, gestalt, getenv, getenv, glue, grab, graph, grid, hdl, highpass, highshelf, Histo, history, hradio, hslider, iem_i_route, iem_pbank_csv, iem_prepend, iem_receive, iem_route, iem_sel_any, iem_send, ignore, index, init, inlet, int, invert, iso, iter, key, keyname, keyup, length, lifo, limit, line, linear, linedrive, list2int, list2send, list2symbol, lister, listfifo, listfunnel, loadbang, log, lowpass, makefilename, makenote, makesymbol, match (cyclone), match (maxlib), matrix, mavg, max, maximum, mean (cyclone), mean (zexy), mergefilename, message box, metro, midiflush, midiformat, midiparse, min, minimum, minmax, minus, mlife, mod, modulo_counter, moses, mousefilter, MouseState, msgfile, mtof, mtr, multi, nchange, netclient, netdist, netrec, netreceive, netsend, netserver, next, niagara, nop, notch, notein, noteout, nroute, numbox, offer, onebang, openpanel, outlet, pack, packel, past, Peak, pgmin, pgmout, pipe, pitch, plus, poisson, pol2cart, pol2sph, poltocar, poly, pong, pow, pre_inlet, prepend, prepend_ascii, print, prob, pulse, pv, qlist, rad2deg, random, realtime, receive, receive2list, receivelocal, remote, repack, repeat, rewrap, rhythm, rmstodb, rmstofad, round_zero, route, savepanel, scale, score, segregate, select, send, sendlocal, serialize, shuffle, shuffle, sin, sinh, slider, sort, soundfile_info, soundfiler, speedlim (cyclone), speedlim (iemlib), speedlim (maxlib), spell, sph2cart, sph2pol, spigot, split (cyclone), split (iemlib), split (maxlib), splitfilename, spray, sprintf, state, step, strcmp, stripdir, stripfilename, stripnote, subst, substitute, sustain, swap, switch, symbol, symbol2list, sync, system, t3_bpe, t3_delay, t3_metro, t3_timer, tabdump, table, tabread, tabread4, tabset, tabwrite, tan, tanh, temperature, textfile, thresh, ticker, tilt, time, timebang, timer, toddle, togedge, toggle, toggle_mess, tosymbol, transf_fader, triang, trigger, Trough, universal, unpack, unroute, until, unwonk, urn (cyclone), urn (maxlib), Uzi, v2db, value, vdl, velocity, vradio, vslider, weibull, wrap, wrap (iemlib), xbendin, xbendout, xnotein, xnoteout, zl,
Сигналы,
!/~, !-~, !=~, %~, &&~, *~, /~, ||~, -~, +~, +=~, <~, <=~, ==~, >~, >=~, 1/x~, abs~ (cyclone), abs~ (zexy), absmax~, absmin~, acos~, acosh~, adc~, aenv~, agogo~, allpass~, ap1~, ap2~, asin~, asinh~, atan~, atan2~ (cyclone), atan2~ (ggext), atanh~, average~, avg~ (cyclone), avg~ (zexy), bamboo~, bang~, biquad~, bitand~, bitnot~, bitor~, bitshift~, bitxor~, block~, blotar~, bowed~, bowedbar~, bp~, bpq2~, bpw2~, brass~, bsq2~, bsw2~, buffir~, cabasa~, capture~, cartopol~, catch~, change~, chase~, chop~, clarinet~, click~, clip~, Clip~, comb~, cos~, cosh~, count~, curve~, cycle~, dac~, dcblock~, decimate~, delay~, delread~, delta~, deltaclip~, delwrite~, demultiplex~, dfreq~, edge~, env~, envrms~, escalator~, exp~, fade~, fasor~, FIR~, flip~, flute~, fofsynth~, foldback~, foldover~, frameaccum~, framedelta~, freqdiv~, gQ~, guiro~, harmgen~, hip~, hml_shelf~, hp1~, hp2_bess~, hp2_butt~, hp2_cheb~, hp2_crit~, hp2~, iem_blocksize~, iem_samplerate~, index~, jitter~, kink~, klutz~, LFO_noise~, limiter~, line~, Line~, ln~, log~ (cyclone), log~ (ggext), lookup~, lop~, lores~, lp1_t~, lp1~, lp2_bess~, lp2_butt~, lp2_cheb~, lp2_crit~, lp2~, mandolin~, marimba~, matrix~, maverage~, maximum~, metashake~, minimum~, minmax~, mixer~, moog~, mp3play~, mstosamps~, multiline~, multiplex~, munger~, noise~, noish~, noisi~, nop~, onepole~, osc~, pack~, pan~, para_bp2~, pdf~, peakamp~, peakenv~, peek~, phasewrap~, phasor~, pink~ (iemlib), pink~ (cyclone), play~, plucked~, poke~, pol2rec~, poltocar~, polygate~, pong~, pow~, print~, prvu~, pvu~, quantize~, rampsmooth~, rand~, random~, rbpq2~, rbpw2~, readsf~, rec2pol~, receive~, reson~, rvu~, sah~, samphold~, samplerate~, sampstoms~, saturate~, Scope~, scrub~, send~, sfplay, sfplay~, sfrecord, sgn~, sig~, sigzero~, sinh~, sinx~, slide~, Snapshot~, spike~, split~, sqrt~, step~, streamin~, streamout~, svf~, swap~, switch~, t3_line~, t3_sig~, tabosc4~, tabread4~, tabreceive~, tabsend~, tabwrite~, tanh~, tanx~, tavg~, terrain~, throw~, train~, trapezoid~, triangle~, unpack~, ustep~, vcf_bp2~, vcf_hp2~, vcf_lp2~, vcf_rbp2~, vcf~, vd~, vectral~, vibraphone~, vline~, vowel~, waffle~, wave~, weave~, wrap~, writesf~, wuter~, z~, zerox~,
Элементы графического интерфейса
bang, canvas, comment, comment (cyclone), envgen, graph, grid, hdl, hradio, hslider, message box, numberbox, numbox, slider, ticker, toddle, toggle, vdl, vradio, vslider,Обработка интерактивных действий
active, grid, init, key, keyname, keyup, loadbang, MouseState, mousefilter, openpanel, savepanel, soundfile_info, soundfiler, state, textfile,Служебные – инкапсуляция и отладка
abstraction, capture, dollarg, inlet, outlet, page, pd, print, segregate, table,
accum, bag, capture, coll, fifo, float, float24, iem_pbank_csv, iem_sel_any, index, int, lifo, lister, listfifo, msgfile, mtr, offer, pv, state, symbol, textfile, value,
dist, forward, grab, iem_receive, iem_send, list2send, receive, receive2list, receivelocal, remote, send, sendlocal, universal,
netrec, netdist, netserver, netclient, netreceive, netsend,
Форматирование, преобразование типов
add2_comma, any2list, bang, bangbang, fromsymbol, iem_prepend, list2symbol, makefilename, makesymbol, mergefilename, prepend, prepend_ascii, splitfilename, sprintf, stripdir, stripfilename, symbol, symbol2list, tosymbol, trigger,Конвертеры чисел, единиц измерений
atoi, bandpass, cart2pol, cart2sph, cartopol, db2v, dbtofad, dbtorms, deg2rad, equalizer, f2note, fadtodb, fadtorms, ftom, highpass, highshelf, int, invert, limit, linedrive, list2int, lowpass, mtof, notch, pol2cart, pol2sph, poltocar, rad2deg, rmstodb, rmstofad, scale, sph2cart, sph2pol, transf_fader, v2db,
., Append, coll, drip, funbuff, funnel, glue, iem_pbank_csv, iem_prepend, iter, length, list2int, lister, listfifo, listfunnel, match (cyclone), match (maxlib), maximum, mean (zexy), mean (cyclone), minimum, minmax, niagara, pack, packel, past, prepend, repack, serialize, sort, spray, strcmp, substitute, swap, tabset, thresh, unpack, unwonk, zl,
array, arraycopy, arraysize, peek~, soundfiler, tabdump, table, tabread, tabread4, tabdump, tabwrite, expr,
-, !-, !/, *, /, +, abs, accum, average, delta, div, divide, divmod, exp, expr, history, log, max, mean, min, minimum, minus, mod, multi, plus, pow, round_zero, sqrt,
!=, &&, ||, <, <=, ==, >, >=, edge, expr, moses, past, Peak, select, split (cyclone), split (iemlib), split (maxlib), Trough,
acos, asin, cos, cosh, expr, sin, sinh, tan, tanh,
matrix, mtx, mtx_*, mtx_.*, mtx_./, mtx_+, mtx_add, mtx_check, mtx_col, mtx_diag, mtx_diegg, mtx_egg, mtx_element, mtx_eye, mtx_inverse, mtx_mean, mtx_mul, mtx_ones, mtx_pivot, mtx_print, mtx_rand, mtx_roll, mtx_row, mtx_scroll, mtx_trace, mtx_transpose, mtx_zeros,
beat, bendin, bendout, borax, Borax, chord, ctlin, ctlout, flush, gestalt, makenote, midiflush, midiformat, midiparse, notein, noteout, pgmin, pgmout, pitch, poly, rhythm, score, stripnote, subst, sustain, xbendin, xbendout, xnotein, xnoteout,
Генераторы сообщений, счетчики
counter, exp_inc, for++, gen5, gen7, gen9, gen10, gen17, gen24, gen25, line, metro, modulo_counter, pong, pulse, repeat, step, t3_metro, until, Uzi,
arbran, beta, bilex, cauchy, decide, drunk, expo, gauss, linear, mlife, poisson, prob, random, shuffle, triang, urn (cyclone), urn (maxlib), weibull,
bpe, date, delay, envgen, ignore, iso, metro, mtr, pipe, pulse, qlist, realtime, speedlim (cyclone), speedlim (iemlib), speedlim (maxlib), t3_bpe, t3_delay, t3_metro, t3_timer, temperature, time, timebang, timer, velocity,
allow, change, clip, Clip, deny, ignore, limit, linedrive, match (cyclone), match (maxlib), mavg, maximum, minimum, moses, mousefilter, nchange, onebang, Peak, rewrap, scale, select, speedlim (cyclone), speedlim (iemlib), speedlim (maxlib), split (cyclone), split (iemlib), split (maxlib), Trough, wrap, wrap (iemlib),
bangbang, bondo, Bucket, buddy, cycle, Decode, demultiplex, funnel, gate (cyclone), gate (iemlib), iem_i_route, iem_route, mavg, moses, next, nroute, onebang, route, segregate, select, speedlim (cyclone), speedlim (iemlib), speedlim (maxlib), spigot, split (cyclone), split (iemlib), split (maxlib), switch, sync, togedge, trigger, unroute,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
aenv~, click~, count~, curve~, cycle~, dirac~, fasor~, fofsynth~, harmgen~, LFO_noise~, limiter~, line~, Line~, multiline~, noise~, noish~, noisi~, osc~, phasor~, peakenv~, pink~ (cyclone), pink~ (iemlib), rand~, random~, sig~, step~, t3_line~, t3_sig~, tabosc4~, tabread4~, tabreceive~, train~, trapezoid~, triangle~, vline~, vowel~, weave~,
Математические и логические операции
!/~, !-~, !=~, %~, &&~, *~, /~, ||~, -~, +~, +=~, <~, <=~, ==~, >~, >=~, 1/x~, abs~, absmax~, absmin~, atan2~ (ggext), bitand~, bitnot~, bitor~, bitshift~, bitxor~, cartopol~, change~, edge~, escalator~, exp~, ln~, log~ (cyclone), log~ (ggext), matrix~, maximum~, minimum~, minmax~, peakamp~, phasewrap~, pol2rec~, poltocar~, pow~, rec2pol~, sgn~, split~, sqrt~, swap~, ustep~, wrap~,
acos~, acosh~, asin~, asinh~, atan~, atan2~ (cyclone), atanh~, cos~, cosh~, sinh~, sinx~, tanh~, tanx~,
index~, lookup~, mp3play~, peek~, play~, poke~, readsf~, sfplay~, sfplay, sfrecord, tabosc4~, tabread4~, tabreceive~, tabsend~, tabwrite~, wave~, writesf~,
chase~, chop~, clip~, Clip~, decimate~, delta~, deltaclip~, escalator~, fade~, flip~, foldback~, foldover~, frameaccum~, framedelta~, freqdiv~, jitter~, kink~, klutz~, multiline~, munger~, peakenv~, phasewrap~, pong~, quantize~, rampsmooth~, sah~, samphold~, saturate~, scrub~, slide~, terrain~, ustep~, vectral~, waffle~, wrap~,
Амплитудный и частотный анализ
absmax~, absmin~, average~, avg~ (cyclone), avg~ (zexy), dfreq~, edge~, env~, envrms~, fiddle~, limiter~, maximum~, minimum~, minmax~, pdf~, prvu~, pvu~, rfft~, rvu~, sigzero~, snapshot~, Snapshot~, spike~, tavg~, weave~, zerox~,
allpass~, delay~, delread~, delwrite~, nop~, vd~, z~,
agogo~, bamboo~, blotar~, bowed~, bowedbar~, brass~, cabasa~, clarinet~, flute~, guiro~, mandolin~, marimba~, metashake~, plucked~, vibraphone~, wuter~,
Установка Pure Data под Windows
Для запуска программы необходимо развернуть дистрибутив в любую папку на жестком диске и запустить файл "..\bin\pd.exe".
Для загрузки программы с индивидуальными настройками (размером шрифта, адресами дополнительных библиотек, частотой дискретизации и др.) необходимо создать ".bat" файл* следующего содержания (одной строкой без абзацев):
|
c:\..\pd\bin\pd –какой_то_флаг –еще_один_флаг -path c:\..\pd\папка1; d:\..\pd\папка2; e:\..\папка3; -lib c:\..\pd\папка4\библитека1; библитека2; библитека3 %1 |
* в bat-файле путь к исполняемому файлу (pd.exe) не должен содержать пробелов (например, если развернуть дистрибутив в папку "С:\Program Files\Pure Data", программа не запустится).
Полный список флагов приведен в официальной документации Pure Data (в файле "..\doc\1.manual\x3.htm").
После флага "-path" следует указать абсолютные или относительные адреса папок, доступ к которым необходимо получить при работе с программой. Если адресов несколько, следует разделить их точкой с запятой (без пробелов !).
После флага "-lib" следует указать абсолютные или относительные адреса папок, в которых размещены дополнительные библиотеки (".dll" файлы). Названия библиотек указываются без расширения ".dll". Иногда, если библиотека не хочет грузится, необходимо сменить регистр букв ее имени, напр.: "PeRColate" следует заменить на "percolate").
Если в одной папке находится несколько библиотек, достаточно ввести адрес этой папки, а затем перечислить названия библиотек через точку с запятой (без пробелов !).
Если в нескольких различных библиотеках есть объекты с одинаковыми именами (например avg~ – в Zexy и Cyclone/Sickle), Pure Data будет загружать тот объект, библиотека которого указана последней по счету в bat-файле.
Можно создать новый тип файлов с расширением ".pd" и назначить ему список возможных действий из контекстного меню Windows (открыть, изменить и др.), каждое из которых будет выполняться различным ".bat" файлом.
Для того, чтобы изменить шрифт объектов Pure Data, необходимо в файле "pd.tk" заменить все упоминания слова "courier" на "нужный_шрифт", размещенный в папке Windows/Fonts.
В Pure Data существует 4 типа объектов:
Чтобы получить список всех объектов, доступных в стандартной поставке программы (без дополнительных библиотек), необходимо щелкнуть правой кнопкой мыши по свободному пространству холста и выбрать пункт меню "Help".
В данном руководстве операторы будут выделяться курсивом и помещаться в квадратные скобки: [pipe], [osc~].
Сообщения, передаваемые операторам (а также аргументы операторов), будут помещаться в треугольные скобки: <bang>, <; array1 resize 64>.
Входы объектов бывают "горячими" и "холодными". Сообщение, полученное на "горячий" вход активизирует объект (т.е. заставляет его выполнить определенную операцию и подать результат на выход). Сообщение, полученное с "холодного" входа запоминается: объект не выполнит операцию (и не подаст результат на выход) до тех пор, пока не получит сообщение с "горячего" входа.
У большинства объектов роль "горячего" входа играет первый вход слева. Все остальные входы считаются "холодными".
Файлы, в которых хранятся созданные объекты, именуются заплатками (patch, = patcher).
Атрибуты сообщений.
Любое сообщение имеет определенный атрибут (float, symbol, bang, list, anything), который ставится в начало сообщения. Атрибут (selector) – это слово без пробелов, запятых, точки с запятой и чисел (т.е. набор буквенных символов).
Сообщение, состоящее из одного числа, имеет атрибут float.
Число может иметь экспоненциальное представление (например, "4.5e6" означает: 4.5, умноженное на 10 в 6 степени = 4500000, где 4.5 – это мантисса, 106 – экспонента; "1.23e-5" – это 1.23, разделенное на 10 в 5 степени = 0.0000123). У мантиссы знак десятичной запятой всегда ставится после первого разряда числа (в первом примере – после цифры 4, во втором – после 1). Числа в Pure Dataсостоят из 32 битов: 1 бит – для хранения знака (+/-), 23 бита – для хранения мантиссы (значащей части), 8 бит – для хранения экспоненты (степени). Конечное значение числа равно:
± мантисса * 2 экспонента.
Не все десятичные дроби можно выразить с помощью этой формулы – тогда они округляются до ближайшего числа, полученного вышеописанным методом. Например, 0.05 в 32-битном исчислении представляется как 0.0500000007450580596923828125 (или 13421773 * 2^-28).
Сообщение, состоящее из одного слова (или нескольких слов и чисел без знаков пробела), имеет атрибут symbol, если перед ним стоит слово "symbol".
Если сообщение состоит из нескольких чисел и/или слов (разделенных знаками пробела) и начинается с числа или слова "list", оно будет иметь атрибут list(список). Первым элементом такого списка будет первое число или слово после слова "list" данного сообщения.
Если сообщение (состоящее из любого количества элементов) начинается со слова (кроме слова "symbol"), оно будет иметь атрибут anything. Однако с ним можно будет обращаться также, как со списком; первым элементом такого списка будет элемент, следующий за этим словом (в данном случае нумерация списка начинается со второго элемента сообщения).
Если сообщение, состоящее из нескольких элементов, начинается со слова "symbol", оно будет рассматриваться не как список, а как слово со значением второго элемента сообщения и атрибутом symbol.
Если сообщение представляет собой список и подается на левый вход объекта, имеющего несколько входов, элементы списка распределяются между входами объекта в соответствии с их порядковыми номерами в списке (данное правило не распространяется на абстракции и вложенные заплатки – весь список целиком подается на один вход).
Сообщение, начинающееся со слова "bang", имеет атрибут bang. Сообщение с атрибутом bang (команда <bang>) активирует объект, т.е. заставляет его выполнить то действие, которое заложено в него по умолчанию.
См. также Правила преобразования типов.
Инкапсуляция – размещение одного или нескольких объектов в другом. Вложенные (т.е. подчиненные) объекты будут отображаться в отдельном окне при открытии содержащего их (родительского) объекта.
Объекты можно вкладывать друг в друга 2 способами:
* У объекта [pd] есть синоним [page], основное отличие которого заключается в том, что при его переименовании (изменении значений аргументов) содержимое объекта удаляется.
Входы и выходы родительского объекта устанавливаются объектами [inlet] и [outlet] в горизонтальном (слева направо) порядке.
Аргументы абстракции (но не родительского объекта [pd] или [page] !) можно использовать в качестве аргументов принадлежащих ей объектов – для этого необходимо в обращающемся подчиненном объекте указать аргумент <$n>, где n – порядковый номер аргумента абстракции, к которому будет происходить обращение (см. doc\2.control.examples\12.PART2.subpatch.pd). C помощью аргумента <$0> можно получить доступ к уникальному числовому идентификатору абстракции (см. также раздел о локализации множеств и объектов [send]/[receive]).
Для того, чтобы в окно родительского объекта выносились некоторые управляющие элементы (как, например, <db> и <mute> у объекта-абстракции [output~]), необходимо в свойствах холста родительского объекта поставить флаг "graph on parent" и ввести названия этих управляющих элементов в поле "label" в окне их свойств.
array – множество (таблица) чисел, представляемое графически: по оси OX откладываются номера (индексы) позиций от 0 до N–1, где N – количество позиций множества, по оси OY – значения этих позиций.
Может использоваться в качестве волновой таблицы (семплера) для хранения значений записанных в нее семплов.
При создании множества можно указать:
Чтобы локализовать множество для отдельной заплатки (т.е. открыть к нему доступ в рамках локального контекста абстракции), имя этого множества должно начинаться с <$0->. Таким образом можно одновременно открывать несколько абстракций, содержащих множества чисел с одинаковыми именами; доступ к этому множеству будет открыт только для объектов той же абстракции.
По умолчанию значения всех позиций множества равны нулю. Для того, чтобы создать прямую, параллельную оси Ox (т.е. приравнять значения всех позиций множества какой-либо константе), необходимо отправить следующее сообщение:
где, N – некоторое число.
Чтобы изменить размер (увеличить или уменьшить количество позиций множества), необходимо отправить следующее сообщение:
<; имя_множества resize N>
где, N – желаемое число позиций.
Если новое N меньше предыдущего, значения всех позиций множества, не умещающиеся на экран, будут утеряны.
Чтобы вывести некоторые важнейшие характеристики множества в окно терминала, необходимо отправить сообщение:
<; имя_множества print>.
Чтобы нормализовать значения всех позиций множества (умножить их на коэффициент нормализации), необходимо отправить сообщение:
<; имя_множества normalize N>
где N – желаемое значение максимума функции (N>0).
Чтобы получить множество чисел из другого файла, необходимо отправить следующее сообщение:
<; имя_множества read имя_файла.txt>
где имя_файла.txt – имя файла, из которого необходимо получить данные. Файл должен находиться в том же каталоге, где и текущая заплатка, в которой создается множество (в противном случае перед именем файла необходимо указать к нему путь).
Чтобы сохранить множество чисел в файл, необходимо отправить следующее сообщение:
<; имя_множества write имя_файла.txt>
Чтобы задать (или изменить) множество чисел вручную, необходимо отправить следующее сообщение:
<; имя_множества i xi xi+1 xi+2 x…>
где i – индекс позиции множества (>=0), начиная с которого во множестве будут произведены необходимые изменения; xi – новое значение i-ой позиции множества.
Чтобы переименовать множество, необходимо отправить следующее сообщение:
<; имя_множества rename новое_имя_множества >
Чтобы создать горизонтальную разметку верхней и нижней границ графического представления множества (т.е. нанести градуировочную шкалу), необходимо отправить следующее сообщение:
<; имя_множества xticks i a b>
где i – индекс позиции множества (>=0); означает номер позиции, на который будет наложена большая зарубка градуировочной шкалы; a – длина интервала (количество позиций) между малыми зарубками градуировки; b – количество малых зарубок между двумя большими зарубками.
Вертикальная разметка создается аналогично горизонтальной, только сообщение в этом случае выглядит так:
<; имя_множества yticks i a b>
Чтобы изменить масштаб графического представления множества, необходимо отправить следующее сообщение:
<; имя_множества bounds x1 y2 x2 y1>
где x1 – соответствует значению "X from", y1 – "Y from", x2 – "to", y2 "to" в окне свойств графика.
Чтобы пронумеровать горизонтальную разметку (т.е. показать номера отдельных делений градуировочной шкалы), необходимо отправить следующее сообщение:
<; имя_множества xlabel y i1 i2 i3 i…>
где y – значение на оси Oy, через которое будет проведена невидимая прямая, параллельная оси Ox; на этой прямой будут отложены (через соответствующие промежутки) любые указанные индексы (номера) позиций множества.
Нумерация вертикальной разметки выполняется аналогично горизонтальной, только в этом случае необходимо отправить следующее сообщение:
<; имя_множества ylabel x i1 i2 i3 i…>
Для построения одного полного периода синусоиды (или суммы нескольких синусоид), необходимо отправить следующее сообщение:
<; имя_множества sinesum r A1 A2 A3 … Ai>
где r – разрешение (количество точек, с помощью которых будет построена функция), Ai – амплитуда i-той гармоники.
Функция косинуса строится следующим образом:
<; имя_множества cosinesum r y A1 A2 A3 … Ai>
где r – разрешение (количество точек, с помощью которых будет построена функция), y – высота функции относительно оси Ox, Ai – амплитуда i-той гармоники.
graph – графическое представление.
Прямоугольник, в котором хранятся подчиненные объекты и графически отображаются управляющие элементы этих объектов (индикаторы чисел, кнопки, множества (таблицы) чисел и др.).
table – то же, что и [array], но:
В первом аргументе обязательно должно быть указано имя создаваемой таблицы (имя чувствительно к регистрам !). Во втором аргументе можно указать количество позиций множества (размер).
tabread – считывает значения позиций множества (таблицы чисел).
Получает на вход индекс позиции множества, указанного в аргументе, и подает на выход значение соответствующей позиции этого множества.
Имя множества (таблицы) чисел можно изменять динамически, подавая на вход команду <set A>, где A – имя нового множества, к которому будет обращаться [tabread].
tabread4 – считывает значения позиций множества (таблицы чисел) с 4-точечной интерполяцией (сглаживанием промежуточных значений).
Получает на вход индекс позиции множества, указанного в аргументе, и подает на выход интерполированное значение соответствующей позиции этого множества*.
Имя множества (таблицы) чисел можно изменять динамически, подавая на вход команду <set A>, где A – имя нового множества, к которому будет обращаться [tabread].
* интерполяция применяется только к следующим друг за другом позициям множества (при повторении цикла, т.е. при переходе с последней позиции множества на первую (нулевую), сглаживания не происходит).
tabwrite – записывает поступающие сообщения в таблицу (множество) чисел.
На правый вход получает индекс позиции множества, указанного в аргументе, на левый – значение этой позиции. Получив соответствующее значение на левый вход, [tabwrite] запишет его и отобразит графически в указанном множестве.
Имя множества (таблицы чисел) можно изменять динамически, подавая на левый вход команду <set A>, где A – имя нового множества.
Если в одной и той же заплатке существует два множества чисел с одинаковыми именами, то при отправлении им какого-либо значения, в окне терминала отобразится сообщение об ошибке, и [tabwrite] отправит это значение лишь первому созданному множеству.
Выводит в окно терминала все поступающие сообщения.
message box – отправляет сообщения (команды) другим объектам.
При щелчке левой кнопкой мыши по этому объекту или при поступлении на его вход команды <bang> (равно как и любого другого сообщения), объект отправляет на выход хранящееся в нем сообщение (текст, число или список).
- внешне отличается от остальных объектов тем, что правый край сообщения имеет вогнутую форму.
- Если сообщение состоит из нескольких символов и/или чисел, идущих через запятую "," – такое сообщение подается на выход порциями как несколько различных сообщений.
- Если сообщение состоит из одного или нескольких чисел, перед каждым из которых стоит знак "$", такое сообщение (<$N>) может пропускать через себя список чисел, подавая на выход лишь те его элементы, номера которых указаны в качестве аргумента со знаком доллара (напр., если в [message box] указано сообщение <$1 $3>, то на выход будут подаваться только первый и третий элементы поступающих списков) (см. также list). Сообщения со знаком "$" не имеют памяти, поэтому при поступлении команды <bang> будет выдана ошибка, а на выход будет подано сообщение со значением переменного аргумента = 0.
- Если сообщение начинается со слова "set", то объекту, которому оно адресовано, будет отправлена команда запомнить число или текст, идущие после слова "set".
- Если в сообщении используется знак ";" (точка с запятой), следующее за ним слово интерпретируется программой как название объекта [receive] и остальная часть сообщения (до конца или до следующей точки с запятой) отправляется всем объектам [receive], имеющим это имя (на выход [message box] это сообщение не подается).
- Если в [message box] пришло сообщение, начинающееся со слова "add", то следующая за "add" часть сообщения плюс точка с запятой справа добавляются к сообщению, хранящемуся в [message box].
- Если в [message box] пришло сообщение, начинающееся со слова "add2", то следующая за "add2" часть этого сообщения добавляется (справа) к сообщению, хранящемуся в [message box].
bang = bng = – кнопка, подает на выход команду <bang>.
Принимает на вход любое сообщение, после чего отправляет на выход команду <bang>. Команда <bang> активирует объект, т.е. заставляет его выполнить то действие, которое заложено в него по умолчанию.
В свойствах объекта можно настроить внешний вид кнопки, время мерцания ("hold"), время перерыва мерцания между нажатиями ("intrrpt"), названия объектов [send] и [receive], которым будет передаваться или от которых будет приниматься команда <bang>.
Если в свойствах объекта выбрана опция "init", то при загрузке заплатки кнопка будет вести себя также, как [loadbang].
См. также [toddle] из библиотеки Ggext.
loadbang – посылает на выход команду <bang> при загрузке заплатки или при поступлении на вход команды <loadbang>.
См. также [active] из библиотеки Cyclone/Hammer и [init] из библиотеки Iemlib.
number box – индикатор чисел.
Принимает на вход число, запоминает его, выводит на экран и посылает на выход. Числа, отправляемые на выход, можно прокручивать с помощью мыши.
Последнее полученное на вход число можно отправить на выход с помощью команды <bang>.
Внешне отличаются от остальных объектов тем, что верхний правый угол срезан.
Чтобы перейти от целых чисел к десятичным дробям, необходимо прокручивать числа, удерживая клавишу Shift.
Чтобы переключиться на нуль и обратно, необходимо щелкнуть по индикатору левой кнопкой мыши, удерживая клавишу Alt.
Чтобы перейти в режим тумблера [toggle], необходимо задать ширину индикатора ("width") – единицу (тогда при щелчке левой кнопки мыши он будет отображать и посылать на выход <0> или <1>).
Чтобы иметь возможность автоматического расширения индикатора до нужных размеров по мере ввода новых цифр, необходимо установить ширину, равную нулю.
Если на вход объекта поступило сообщение (число), начинающееся со слова "set", это число будет записано в память, отображено на экране, но на выход подано не будет.
Чтобы вручную ввести число в [number box] (в режиме пользователя), необходимо щелкнуть по объекту левой кнопкой мыши, ввести последовательность цифр с клавиатуры и нажать клавишу Enter.
Если индикатор показывает знак плюса "+" вместо числа, значит число, находящееся в памяти не умещается в выбранный диапазон отображения ("width").
nbx – то же что и [number box], но включает в себя ряд дополнительных функций для настройки внешнего вида объекта, которые задаются в окне его свойств.
metro – метроном.
Принимает на левый вход команду <bang> (<1>) или <stop> (<0>), на правый вход (или в аргументе) – время (в миллисекундах), через которое он будет регулярно отсчитывать (подавать на выход) команду <bang>.
Метроном начнет отсчитывать тики сразу после включения. Если в процессе отсчета на правый вход было получено новое время задержки между тиками, метроном отсчитает последний тик с прежним временем задержки, а после него начнет отсчет с новой задержкой.
Любое число, полученное на правый вход (или указанное в аргументе), меньшее 1, будет принято за 1 миллисекунду.
См. также [pulse] из библиотеки Maxlib и [t3_metro] из библиотеки Iemlib.
toggle , = tgl - тумблер (вкл/выкл)
При щелчке левой кнопки мыши или поступлении на вход команды <bang> отправляет на выход <1> или <0>. Также меняет свое положение, если на вход поступило число, равное или отличное от нуля.
В свойствах объекта можно настроить внешний вид тумблера, ввести названия объектов [send] и [receive], которым будет передаваться или от которых будет приниматься сообщения <1> или <0>.
Если в свойствах объекта выбрана опция "init", то при загрузке заплатки тумблер отправит на выход свое текущее состояние.
При поступлении на вход числа N [toggle] изменит значение своего активного состояния (по умолчанию, единица) на N (т.е. на выход будет отправляться <0> или <N>).
См. также [ticker] из библиотеки Ggext.
comment – комментарий (не выполняет никакого действия). Максимальная длина строки в тексте комментария – 60 символов.
См. также [comment] из библиотеки Cyclone/Hammer.
canvas, = cnv – холст, на фоне которого можно размещать другие объекты (на передний план выносятся последние по времени создания объекты).
В свойствах объекта можно настроить внешний вид холста (цвет, размеры, надпись, гарнитуру и цвет шрифта), ввести названия объектов [send] и [receive], которым будет передаваться или от которых будут приниматься сообщения для управления настройками холста (например, для динамического изменения надписи на холсте, необходимо отправить объекту [receive] с именем, указанным в настройках холста, сообщение <label надпись>, где надпись – строка символов, соответствующая полю "name" в окне свойств холста).
trigger – разветвитель/конвертер типов сообщений.
Принимает на вход любые сообщения, преобразует их в соответствии с правилами преобразования типов и подает на соответствующий выход в порядке справа налево. Количество выходов, на которые будут подаваться конвертированные сообщения, зависит от количества аргументов.
Формат конвертации (тип преобразования) указывается в аргументе: <f> = float (число), <b> = bang, <l> – list (список), <s> – symbol (символ), <a> – anything (прочее сообщение), <p> – pointer (указатель).
|
Тип сообщения: |
Тип преобразования: |
||||
|
в bang |
в число |
в символ |
в список |
в anything |
|
|
bang |
bang |
0 |
symbol float |
0 |
0 |
|
число |
bang |
число |
symbol float |
число |
число |
|
символ |
bang |
0 |
символ |
символ |
символ |
|
список чисел |
bang |
первое число списка |
symbol float |
список чисел |
список чисел |
|
список символов |
bang |
0 |
первое слово списка |
список символов |
список символов |
+, -, *, / – арифметические операторы.
На правый вход получают второе слагаемое, вычитаемое, сомножитель или знаменатель дроби. На левый вход получают первое слагаемое, уменьшаемое, сомножитель или числитель дроби. Число, поступающее на правый вход запоминается, число, поступающее на левый вход запоминается и запускает операцию.
Аргумент является эквивалентом числа, подаваемого на правый вход, и пишется через пробел после знака операции.
Арифметическая операция может быть выполнена повторно с помощью команды <bang>, отправленной на левый вход.
См. также [plus], [minus], [multi], [divide] из библиотеки Maxlib и [!-], [!/] из библиотеки Cyclone/Cyclone.
pow , – возведение неотрицательного числа в степень.
На вход принимает неотрицательные числа (отрицательные игнорирует), возводит их в степень, указанную в аргументе (или полученную на правый вход), и подает результат на выход.
max, min – выбирает наибольшее или наименьшее из двух чисел.
Принимает на левый вход число, сравнивает его с аргументом или числом, полученным на правый вход, наибольшее или наименьшее из них подает на выход.
Операция сравнения запускается при поступлении на левый вход числа или команды <bang>.
abs – модуль.
Принимает на вход любые числа. Подает на выход их абсолютные (неотрицательные) значения.
exp – возводит число e в степень.
Принимает на вход любые числа. Подает на выход константу Эйлера (e~2,71828) в степени, равной полученному числу.
log – вычисляет натуральный логарифм числа.
Принимает на вход положительные числа x (отрицательные и нуль дают -1000), подает на выход их натуральный логарифм:
y = lnx,
где y – степень, в которую необходимо возвести константу Эйлера (e~2,71828) для получения числа x.
sqrt – извлекает квадратный корень из числа.
Принимает на вход любое число, и, если оно не отрицательное, подаст на выход его квадратный корень. Отрицательное число даст 0.
sin, cos, tan – тригонометрические функции.
На вход принимают радианы, на выход подают значения соответствующих тригонометрических функций. Полный цикл в радианах составляет 2¶ (от 0 до ~6,28 радиан).
¶ ~ 3,141592 радиан,
1 радиан = ¶ / 180°.
notein – отслеживает поступающие с MIDI интерфейса ноты и выводит их высоту (pitch) – на левый выход, громкость (velocity) – на средний и номер канала (channel) – на правый. С помощью аргумента указывается номер канала и MIDI устройства. Если аргумента нет – ноты ожидаются со всех каналов.
noteout – отправляет ноты на MIDI интерфейс.
На правый вход получает номер MIDI канала, на средний – громкость (velocity), на левый – численное значение высоты ноты (от 0 до 127). При поступлении сообщения на левый вход дает команду звуковой карте о проигрывании указанной MIDI ноты.
В аргументе можно указать номер канала MIDI устройства. Если аргумента нет – ноты посылаются на все каналы.
makenote – создает полноценную ноту (кроме высоты и громкости в ней указывается длительность звучания).
Получает на левый вход численное значение высоты ноты, на средний – ее громкость, на правый – длительность в миллисекундах. Аргумент является эквивалентом значений, получаемых на средний и правый входы. Первый аргумент означает громкость ноты, второй – ее длительность. На левый выход подается высота ноты, на правый – громкость. Через определенное время (равное значению, полученному на правый вход или указанному во втором аргументе) на выход посылается та же нота, но с громкостью равной нулю.
bendin – ожидает сообщения с MIDI-интерфейса об относительной высоте всех проигрываемых нот (pitch bend). В аргументе указывается канал MIDI-устройства. Если аргумент не указан, у объекта появляется правый выход, на который поступают сообщения о канале перехваченных "pitch bend" сообщений. На левый выход передаются численные значения этих сообщений (0-127).
bendout – регулятор подстройки высоты нот MIDI-устройства.
Принимает значения от 0 до 127 (64 – среднее значение, используемое по умолчанию). На левый вход подается требуемое значение "pitch bend" сообщений. На правый вход – номер канала, на который будут подаваться эти сообщения. В аргументе можно указать номер канала, на который будут подаваться команды смены относительной высоты нот. Если аргумент не указан, сообщения отправляются на первый канал.
pgmin – ожидает сообщения с MIDI-интерфейса о выбранном голосе синтезатора. В аргументе указывается канал ожидания (если не указан, [pgmin] ожидает сообщений со всех каналов). На выход подается сообщение с номером текущего голоса MIDI-синтезатора (1-128).
pgmout – устанавливает голос MIDI-синтезатора. На левый вход принимает численные значения от 1 до 128, затем передает соответствующую команду MIDI-устройству на изменение текущего голоса. На правый вход принимает сообщения о номере канала, на который будут передаваться команды смены голоса. В качестве аргумента можно указать канал вывода. Если аргумент не указан – сообщения будут передаваться на первый канал.
ctlin – отслеживает сообщения MIDI-контроллеров.
В качестве аргумента может быть указан порт (первый аргумент), номер контроллера (второй аргумент) и номер канала (третий аргумент). Если аргументы не указаны, сообщения будут ожидаться со всех портов, контроллеров и каналов.
На правый выход подается номер канала (если он не указан в качестве аргумента), на средний выход – номер контроллера (если он не указан в качестве аргумента), на левый выход – численное значение контроллера (0-127).
ctlout – передает сообщения MIDI-контроллерам.
На левый вход принимает численное значение контроллера (0-127). На средний вход принимает номер контроллера, которому будет дана команда принять соответствующе значение. На правый вход принимает номер канала, по которому будет передаваться значение для контроллера.
В качестве аргумента может быть указан номер контроллера от 0 до 127 (первый или единственный аргумент) и номер канала (второй аргумент). Если аргументы не указаны, сообщения будут передаваться для контроллера 1, на канал 1.
stripnote – отфильтровывает ноты с громкостью (velocity), равной нулю (ноты становятся бесконечно длинными).
На правый вход принимает громкость ноты, запоминает ее, на левый вход принимает значение высоты ноты. После того, как громкость и высота получены, отправляет те же значения громкости (на правый выход) и высоты (на левый выход) – при условии, что громкость не равна нулю. В противном случае останавливает ноту, дожидаясь следующей.
hslider , = hsl – горизонтальный ползунок.
Пропускает через себя лишь те числа (отображая их соответствующим положением ползунка), которые входят в установленный диапазон. Если число не входит в выбранный диапазон ("output range"), то оно принимает одно из крайних его значений (минимум или максимум).
Ползунок можно настроить таким образом, чтобы он подавал числа на выход при простом щелчке левой кнопки мыши (без перетаскивания) ("jump on click" / "steady on click").
Ползунок может отображать поступающие значения линейно ("lin"), либо логарифмически ("log") – при этом сами значения не изменяются.
vslider , = vsl – то же, что и [hslider], но вертикальный
См. также [slider] из библиотеки Ggext.
hradio = rdb, = radiobutton – горизонтальный переключатель.
При щелчке левой кнопкой мыши по одной из ячеек переключателя поле этой ячейки активизируется (окрасится в черный цвет) и на выход будет отправлен ее номер (считая с 0).
Количество ячеек (положений переключателя) задается в свойствах объекта в поле "number" (по умолчанию, 8).
Переключатель может пропускать через себя лишь те числа (отображая их соответствующим положением активной ячейки), которые входят в установленный диапазон (от нуля до количества ячеек минус 1). Если число не входит в этот диапазон, оно принимает одно из крайних его значений (минимум или максимум).
Для того, чтобы установить положение переключателя на нужную ячейку, не подавая ее номер на выход, необходимо отправить на вход объекта сообщение <set N>, где N – номер подсвечиваемой ячейки.
vradio – то же, что и [hradio], но вертикальный.
hdl, vdl – то же, что и [hradio], но отправляет на выход 2 списка из двух элементов: номер и состояние последней активной ячейки (<0> – деактивирована) и номер и состояние текущей активной ячейки (<1> – активирована).
relational operators – операторы сравнения:
> – больше чем,
>= – больше либо равно,
== – равно,
!= – не равно,
<= – меньше либо равно,
< – меньше чем
На правый вход получают число (эквивалент аргумента) для правой части математического выражения, на левый – для левой. Число, поступающее на левый вход (или команда <bang>) запускает сравнение, на выход подается результат – истина (<1>) или ложь (<0>).
div – возвращает целый результат деления.
На правый вход принимает знаменатель дроби (эквивалент аргумента), на левый – числитель дроби. После того, как на левый вход поступит число или команда <bang>, [div] разделит числитель на знаменатель, а целый результат деления подаст на выход.
См. также [divmod] из библиотеки Maxlib.
mod , = % – возвращает остаток от деления.
На правый вход принимает знаменатель дроби (эквивалент аргумента), на левый – числитель. После того, как на левый вход поступит число или команда <bang>, [mod] разделит числитель на знаменатель, а остаток (который в сумме с максимально возможным цело делящемся числителем образует исходный числитель дроби) подаст на выход.
На выход будут всегда подаваться числа от 0 до N–1, где N – аргумент (или число, полученное на правый вход).
См. также [divmod] из библиотеки Maxlib.
select, = sel – фильтр сообщений.
На вход могут подаваться любые сообщения (если текстовые, то с атрибутом "symbol"). Количество выходов зависит от количества аргументов. Если поступившее на вход сообщение совпадает с одним из аргументов, на соответствующий выход подается команда <bang>. Если сообщение не совпадает ни с одним из аргументов, оно проходит через правый выход.
Тип первого аргумента (символ или число) задает тип всех остальных аргументов.
Если первый аргумент – символ, а один из следующих – число, то это число (N) будет рассматриваться как "symbol N", и все числа, поступающие на левый вход будут благополучно проходить через [sel]. Если на вход подается сообщение <symbol N>, на соответствующий выход будет подана команда <bang>.
Если первый аргумент – число, а один из следующих – символ, то все текстовые сообщения, поступающие на левый вход (не больше чем из 2 слов), будут благополучно проходить через [sel].
Если на вход подается список чисел [sel] будет рассматривать только первый элемент этого списка.
Если задан только один аргумент (или аргумент вообще отсутствует), появляется второй вход, являющийся эквивалентом аргумента.
Иногда [select] не может распознать число, на первый взгляд, совпадающее с аргументом. Такое происходит из-за погрешностей 32-битного представления чисел в (см. раздел Числа в Pure Data). Выходом из ситуации служит следующая схема:
---> [– N] ---> [abs] ---> [< 0.000001] ---> [sel 1].
route – маршрутизатор.
В зависимости от первого элемента поступившего сообщения, оно будет подаваться на тот или иной выход. Если первый элемент сообщения не совпадает ни с одним из аргументов, все сообщение целиком подается на правый выход.
На вход может подаваться любое сообщение (число, текст, список). Количество выходов зависит от количества аргументов плюс 1. В качестве аргументов можно указывать числа или символы (но не оба типа одновременно !). Тип первого аргумента задает тип всех ожидаемых сообщений. Если тип первого элемента сообщения не совпадает с типом первого аргумента, все сообщение целиком будет подано на правый выход.
Если первый элемент сообщения совпадает с одним из аргументов, это сообщение (за исключением первого элемента) подается на соответствующий выход. Если сообщение состоит из одного элемента и этот элемент совпадает с одним из аргументов, на соответствующий выход подается команда <bang>.
Маршрутизатор можно использовать для распределения поступающих сообщений на различные выходы в зависимости от типа сообщения, если в качестве аргументов указать – <float>, <symbol>, <list> и/или <bang>.
См. также [iem_route] и [iem_i_route] из библиотеки Iemlib и [nroute] из библиотеки Maxlib.
poly – присваивает нотам свободные голоса синтезатора (для обхода ограничения числа одновременно проигрываемых нот).
Принимает пары чисел высота-громкость: высоту (pitch) – на левый вход, громкость (velocity) – на правый.
В первом аргументе указывается количество голосов синтезатора.
Второй аргумент – признак организации распределения голосов. Если он не указан, (или равен 0), распределения голосов не происходит: каждой новой ноте будет присваиваться первый свободный голос синтезатора, пока число голосов не достигнет предела, указанного в первом аргументе. Следующие ноты будут игнорироваться, пока для одной из удерживаемых нот не поступит note-off сообщение, и ее голос не освободится.
Если во втором аргументе указано число, отличное от 0, при нехватке свободных голосов [poly] будет заимствовать голос первой удерживаемой ноты, отправляя на выход соответствующее note-off сообщение. Если для одной из удерживаемых нот поступает note-off сообщение, ее голос освобождается.
На левый выход [poly] посылает номер голоса, на средний – высоту ноты, на правый – громкость.
spigot – затвор.
Если на правый вход получено число, отличное от нуля, пропускает через себя любые сообщения (числа, текст, список), принятые на левый вход, и игнорирует их – если на правый вход получен нуль. По умолчанию затвор закрыт.
См. также [gate] из библиотеки Iemlib.
moses – меньшее налево, большее направо.
Если число, поданное на левый вход меньше аргумента (или числа, полученного на правый вход), оно подается на левый выход, если больше (или равно) – на правый.
По умолчанию аргумент равен 0.
&& – логический оператор И (используется для выявления двух истин).
На правый вход подается первое число (либо указывается в аргументе), на левый вход подается второе число, которое запускает сравнение. Если оба числа отличны от нуля, на выход подается 1. Если одно из чисел равно нулю, на выход подается 0.
|| – логический оператор ИЛИ (используется для выявления хотя бы одной истины).
На правый вход подается первое число (либо указывается в аргументе), на левый вход подается второе число, которое запускает сравнение. Если одно из чисел отлично от нуля, на выход подается 1. Если оба числа равны нулю, на выход подается 0.
change – отфильтровывает повторения.
Принимает на вход число, запоминает его и подает на выход только в том случае, если оно отличается от предыдущего. Команда <bang> заставляет [change] выбросить последнее полученное на вход число. Начальное значение можно указать в аргументе.
См. также [nchange] из библиотеки Maxlib.
float – хранилище чисел.
Принимает на левый вход любое число, запоминает его, затем отправляет на выход. Если указан аргумент, значение этого аргумента будет отправлено на выход при поступлении на левый вход команды <bang>. Второй вход является эквивалентом аргумента.
int – хранилище целых чисел.
Принимает на левый вход любое число, запоминает его, затем отправляет на выход его целую часть (дробная часть отсекается). Если указан аргумент, значение этого аргумента будет отправлено на выход при поступлении на левый вход команды <bang>. Второй вход является эквивалентом аргумента.
value – хранилище чисел с функцией совместного доступа.
Принимает на вход любое число, запоминает его (передает всем объектам [value] с тем же аргументом), а после того как получит на вход команду <bang> направит это число на выход.
Если аргумент объекта не задан, полученные им числа будут отправлены всем объектам [value], не имеющим аргумента.
symbol * – хранилище/конвертер текстовых сообщений.
Принимает на левый вход любые текстовые сообщения (с атрибутом anything или symbol), запоминает их, назначает атрибут symbol и подает на выход в виде <symbol сообщение>. Если на вход поступило число, оно будет преобразовано в сообщение <symbol float>.
Если указан аргумент, значение этого аргумента будет отправлено на выход при поступлении на левый вход команды <bang>. Второй вход является эквивалентом аргумента.
*– данный объект НЕ равнозначен индикатору символов
.
delay – линия задержки команды <bang>.
Принимает на левый вход команду <bang>, удерживает ее в течение определенного времени (указанного в аргументе в миллисекундах), по истечении которого подает команду на выход. В течение указанного промежутка времени может принимать и отправлять на выход не больше одного сообщения – если в течение указанного интервала времени поступило 2 или больше сообщения <bang>, [delay] подаст на выход только последнее.
На левый вход также может принимать значение времени задержки, через которое на выход будет автоматически подаваться команда <bang>.
Команда <stop>, принятая на левый вход, останавливает удерживаемое в данный момент сообщение.
На правый вход принимает значение времени задержки для каждого последующего сообщения.
См. также встроенный объект [pipe] и [t3_delay] из библиотеки Iemlib.
timer – секундомер.
Отправляет на выход нарастающим итогом разницу во времени между командой <bang>, полученной на левый вход, и командами <bang>, полученными на правый вход.
Если первый <bang> после создания объекта был получен на правый вход, на выход будет отправлена разница между временем его создания и временем получения команды <bang>.
realtime – засекает "реальное" время (обращаясь к системным часам).
Принимает команду <bang> на левый вход и ждет ту же команду – на правый. После того, как <bang> будет получен с обоих входов, realtime отправляет разницу во времени (в миллисекундах) между двумя полученными командами на выход.
Если на правый вход поступила еще одна команда <bang>, [realtime] отправит на выход время между этой командой и первым <bang>, поступившим на левый вход.
Если после создания объекта первый <bang> пришел с правого входа, [realtime] подаст на выход разницу между временем его создания и временем получения команды <bang>.
pipe – линия задержки чисел и символов.
На левый вход принимает число или текст, запоминает его и отправляет на выход через определенное время.
В качестве аргумента можно также указать тип удерживаемых сообщений (которые будут ожидаться на соответствующие входы) – <f> (float), <s> (symbol), <p> (pointer). Если тип не указан – по умолчанию устанавливается float.
Команда <bang>, поданная на левый вход, посылает на выход последнее удержанное сообщение (с определенной задержкой).
Команда <clear>, поданная на левый вход, очищает память [pipe], – все сообщения, удерживаемые объектом, удаляются.
Команда <flash>, поданная на левый вход, приводит к немедленному выбросу всех удерживаемых сообщений.
См. также встроенный объект [delay].
send – принимает на вход любое сообщение (число, текст, список) и отправляет его объекту [receive], имеющему тот же аргумент (даже если ресивер находится в подчиненном окне).
Для того, чтобы сообщения передавались только тому ресиверу, который находится внутри текущей абстракции, и не отправлялись ресиверам, находящимся в других заплатках (абстракциях), аргумент этого ресивера (и сопутствующего объекта [send]) должен иметь вид локальной переменной: <$0-имя>.
Если запущено несколько инстанций Pure Data (файлов pd.exe), обмен сообщениями возможен только между окнами, открытыми в одной инстанции.
Существуют 2 альтернативы объекту [send]:
См. также [remote] и [dist] из библиотеки Maxlib, [iem_send] из библиотеки Iemlib и [sendlocal] из библиотеки Ggext.
receive – подает на выход любое сообщение (число, текст, список), полученное от объекта [send], имеющего тот же аргумент (даже если отправитель находится в подчиненном окне).
Для того, чтобы сообщения передавались только тому ресиверу, который находится внутри текущей абстракции, и не отправлялись ресиверам, находящимся в других заплатках (абстракциях), аргумент этого ресивера (и сопутствующего объекта [send]) должен иметь вид локальной переменной: <$0-имя>.
Если запущено несколько инстанций Pure Data (файлов pd.exe), обмен сообщениями возможен только между окнами, открытыми в одной инстанции.
Объект [receive] может принимать сообщения не только от [send], но и:
См. также [iem_receive] из библиотеки Iemlib и [receivelocal] из библиотеки Ggext.
pack – преобразует сообщения в список
Принимает любые сообщения (числа, текст), запоминает их, подает в виде списка на выход; порядковый номер сообщения в списке определяется номером входа, на который оно было получено. Команда <bang> или сообщение, полученное на левый вход, выбрасывает сформированный список.
Количество входов зависит от количества аргументов. В аргументе можно указать тип ожидаемого с соответствующего входа сообщения – <f> (float), <s> (symbol), <p> (pointer).
Если на вход ожидается сообщение типа <s>, то оно должно состоять из слова "symbol" и идущим за ним сообщением (иначе [pack] выдаст ошибку и не сможет сформировать список), и состоять не более, чем из одного слова (все остальные слова кроме первого после "symbol" будут игнорироваться). Если вместо ожидаемого числа на вход поступил символ, он будет конвертирован в "0".
unpack – разбивает список на отдельные сообщения.
На вход принимает любой список (числа, символы, смешанный; если количество элементов списка превышает число аргументов, "лишние" элементы будут проигнорированы), запоминает его, разбивает на несколько сообщений и подает их на соответствующие выходы согласно порядковым номерам в списке.
Сообщения подаются на выход в порядке справа налево.
Количество выходов зависит от количества аргументов. В аргументе можно указать тип ожидаемого на вход сообщения (элемента списка) – <f> (float), <s> (symbol), <p> (pointer).
Если один из элементов списка не соответствует указанному в аргументе типу (вместо ожидаемого числа, подается символ, или наоборот), [unpack] сообщит об ошибке и подаст на выход только те сообщения, тип которых соответствует выбранному аргументу.
См. также [unwonk] из библиотеки Ggext.
random – генератор псевдо-случайных чисел.
При поступлении команды <bang> на левый вход берет наугад число из выбранного диапазона (от нуля до значения, указанного в аргументе или поданного на правый вход, минус один) и отправляет его на выход.
[random] может генерировать только псевдо-случайные числа, т.е. при каждом новом открытии заплатки, [random] будет выдавать одну и ту же последовательность "случайных" чисел. Случайность зависит параметра "seed" (начального числа), необходимого для генерации псевдослучайных чисел. Если двум различным объектам [random] отправить сообщение <seed A> (где A – начальное число) с одинаковыми A, то оба объекта будут выдавать одну и ту же последовательность "случайных" чисел.
См. также [arbran], [beta], [bilex], [cauchy], [expo], [gauss], [linear], [poisson], [triang] и [weibull] из библиотеки Maxlib и [decide], [drunk], [urn] из библиотеки Cyclone/Hammer.
qlist – секвенсор.
Устанавливает расписание событий и автоматически выполняет его при поступлении команды <bang>.
Событие – это сообщение которое, будет отправлено объекту [receive] в положенное время. Синтаксически событие представляет собой строку текста, хранящуюся в памяти [qlist] или в отдельном txt-файле, заканчивающуюся точкой с запятой ";".
Число в начале строки означает задержку (в миллисекундах), которую произведет [qlist] перед выполнением этого события.
Первое слово в строке означает имя объекта [receive], который получит сообщение, идущее после этого слова (до ближайшей точки с запятой).
После выполнения всех событий, секвенсор подаст на правый выход команду <bang>.
На левый выход выводятся значения задержек событий (в ручном режиме выполнения).
Команда <tempo x> увеличивает или уменьшает время всех задержек при выполнении секвенции в 1/x раз.
Команда <add строка> добавляет в расписание новую строку со знаком точки с запятой справа.
Команда <add2 строка> добавляет в конец расписания новую строку, но без знака точки с запятой.
Команда <clear> очищает память секвенсора.
При поступлении команды <print>, [qlist] выводит все хранящиеся в памяти сообщения в окно терминала.
С помощью команды <read имя_файла.txt> можно открыть готовое расписание событий, сохраненное в текстовом файле (в той же директории, где находится текущая заплатка).
С помощью команды <write имя_файла.txt> можно сохранить расписание событий в отдельный текстовый файл (в той же директории, где находится текущая заплатка).
Помимо автоматического выполнения событий (по команде <bang>) можно выполнить расписание вручную – с помощью команд <rewind> (перемотка в начало расписания), <next> (переход к следующему событию) и <next 1> (переход к следующему событию без отправления сообщения).
textfile – построчно выводит информацию из текстового файла.
Файл может быть сформирован внутри объекта и/или считан с жесткого диска. Разделителем строк в файле служит точка с запятой.
При поступлении команды <bang>, [textfile] посылает на левый выход текущую строку текста (и переходит к следующей строке). С помощью команды <rewind> можно вернуться в начало файла.
Для того, чтобы очистить память объекта, необходимо отправить ему сообщение <clear>.
Чтобы создать новую строку (или добавить к существующей новую со знаком точки с запятой и абзацем справа), необходимо отправить объекту сообщение <add строка>.
Чтобы присоединить к существующей строке новую, но без знака абзаца в конце, необходимо отправить объекту сообщение <add2 строка>.
После того, как все содержимое файла (все строки) будут отправлены на выход, [textfile] подаст команду <bang> на правый выход.
При поступлении команды <print>, [textfile] выводит все свое содержимое в окно терминала.
С помощью команды <read имя_файла.txt> можно открыть файл, хранящийся на жестком диске (в той же директории, где находится текущая заплатка).
С помощью команды <write имя_файла.txt> можно сохранить файл на жесткий диск (в ту же директорию, где находится текущая заплатка).
С помощью команды <write имя_файла.txt cr> можно сохранить файл на жесткий диск без знака точки с запятой (вместо него будет стоять знак абзаца).
См. также [msgfile] из библиотеки Zexy.
key – перехватчик сигналов клавиатуры (реагирует на нажатия). На выход посылает идентификационные номера нажатых клавиш.
keyup – перехватчик сигналов клавиатуры (реагирует на отжатия). На выход посылает идентификационные номера отжатых клавиш.
keyname - перехватчик сигналов клавиатуры (реагирует на нажатия и отжатия). На правый выход посылает символьные значения нажатых/отжатых клавиш (буквы, цифры, специальные символы, названия функциональных клавиш, сочетания клавиш и др.), на левый выход их состояния: <1> (клавиша нажата) или <0> (клавиша отжата).
Чтобы избавиться от атрибута symbol, идущего перед идентификатором нажатой/отжатой клавиши, исходящие сообщения необходимо пропускать через объект
.
until – принимает на левый вход число N, подает очередь из N выстрелов <bang> на выход (в течение 0 логических миллисекунд). Если на левый вход поступила команда <bang>, на выход будет подаваться нескончаемый поток сообщений <bang>, единственный способ остановить который – подать на правый вход команду <bang>.
Поскольку скорость выброса сообщений у объекта [until] очень велика, программа будет слишком занята, чтобы отвечать на запросы пользователя. Это может привести к ее зависанию, если заранее не побеспокоиться о схеме выключения объекта (исходя из выполнения определенного условия на основе полученных от [until] сообщений).
См. также [Uzi] из библиотеки Cyclone/Hammer.
swap – меняет местами 2 первых элемента списка.
Принимает на левый вход любое число, запоминает его и подает на правый выход, а число, указанное в аргументе (или полученное на правый вход), подает на левый выход.
Если на левый вход поступила команда <bang>, [swap] подаст на выход в обратном порядке последние полученные им числа (число, полученное с левого входа, будет подано на правый выход, а число, полученное с правого входа, – на левый выход).
Аргумент является эквивалентом числа, полученного с правого входа.
line – генератор линейной развертки (огибающей).
Принимает на левый вход любое число N (значение точки перегиба), на правый вход – время T (в миллисекундах), в течение которого будет подавать на выход поток равно-увеличивающихся или -уменьшающихся чисел, стремящихся к N (начиная с некоторого M) до тех пор пока на выход не будет подано само число N.
В роли начального числа M может выступать 0 (если аргумент не указан), первый аргумент (для первого полученного N) или последнее N, полученное на левый вход (если первый аргумент не изменялся).
В качестве второго аргумента можно указать плавность выходного потока, т.е. интервал времени, в течение которого одно выходное значение будет сменяться другим (по умолчанию = 20 мс). Количество выходных сообщений равно T * 20 (или T * второй аргумент).
Время T, поданное на правый вход – является "одноразовым" ([line] не запоминает его и после выполнения развертки обращает в нуль).
Если выходной поток еще не достиг того числа, к которому стремился, а на вход поступила новая пара N - T, он поменяет направление в сторону нового N начиная с текущего значения, подаваемого на выход.
Остановить поток можно командой <stop>, поданной на левый вход.
Пары N и T удобно отправлять на левый вход генератора в виде списка.
См. также [step] из библиотеки Maxlib, [envgen] из библиотеки Ggext и [linedrive] из библиотеки Cyclone/Hammer.
clip – диапазонный ограничитель чисел.
Принимает на левый вход любое число, и, если оно не входит в выбранный диапазон (устанавливаемый двумя аргументами), подает на выход одно из крайних его значений (минимум или максимум).
Первый аргумент (второй вход) – это минимум, второй аргумент (третий вход) – максимум.
Если первый аргумент больше второго (т.е. минимум больше максимума), [clip] ведет себя следующим образом: если полученное число больше или равно первому аргументу, на выход подается второй аргумент, если полученное число меньше первого аргумента, на выход подается значение этого аргумента.
Число для ограничения, верхний и нижний пределы можно отправить на левый вход в виде списка из трех элементов.
См. также [Clip] из библиотеки Cyclone/Hammer.
expr – математическое выражение (формула).
Поддерживает до 10 входов и 10 выходов (при 10 и более выходах программа может зависать).
Аргумент представляет собой математическое выражение, способное обрабатывать переменные, поступающие с различных входов. Переменные обозначаются в аргументе с помощью знаков <$fN>, <$iN> и <$sN>, где N – номер входа, с которого ожидается поступление переменной типа f=float, i=integer или s=symbol (если на вход ожидается целое число, а поступила дробь – дробная часть отсекается). На один и тот же вход не могут ожидаться два различных типа сообщений – в этом случае программа запретит создание объекта [expr].
В случае использования переменной типа <$sN>, полученный на вход N символ (т.е. слово, идущее за словом "symbol") будет интерпретироваться как название таблицы (множества), из которого будет браться соответствующее значение. Например <$s2[10]> означает 10 позицию множества $s2 (имя этого множества ожидается получить со второго входа).
Можно одновременно задавать несколько математических выражений, отделяя их друг от друга знаком точки с запятой.
Результат обработки выражения будет подаваться на тот выход, который соответствует порядковому номеру этого выражения (первое выражение = первый выход слева), методом LIFO (результат обработки последнего выражения будет подан на выход первым).
Следует отметить, что [expr] не будет посылать на выход никаких результатов, пока на левый вход не будет получено сообщение.
Если на вход поступила команда <bang>, на соответствующий выход будет подан последний результат обработки математических выражений.
mtof – конвертер Midi to Frequency.
Получает на вход численное значение высоты ноты (pitch) и преобразует его в соответствующее значение частоты сигнала (напр., ноте 69 соответствует частота 440 Гц).
Увеличение ноты на полутон (т.е. +1) дает ~6% увеличение частоты.
Границы принимаемого диапазона нот: от –1500 до 1499. На выход подает неотрицательные значения частот.
ftom – Frequency to Midi конвертер.
Получает на вход значение частоты сигнала (Гц) и преобразует его в соответствующее значение высоты ноты (pitch) (напр., частота 440 Гц будет преобразована в ноту 69).
Чтобы определить принадлежность MIDI ноты к той или иной октаве, необходимо разделить номер этой ноты на 12.
Чтобы определить ступень (высоту) MIDI ноты, необходимо найти остаток от деления номера этой ноты на 12 с помощью объекта [mod 12].
До=0, Ре бемоль=1, Ре=2, Ми=4, Фа=5 и т.д.
Положение MIDI ноты на звукоряде определяется следующей формулой:
Номер MIDI ноты = N = 12 * (номер октавы) + (номер ступени).
Мажорное трезвучие = N + (N+4) + (N+7).
Минорное трезвучие = N + (N+3) + (N+7).
См. также [f2note] из библиотеки Iemlib.
dbtorms – конвертер Decibel to RMS
Принимает на вход значение амплитуды сигнала в децибелах, подает на выход его среднеквадратическое (RMS) значение с экспоненциальным ростом от 0 до 1.
Границы принимаемого диапазона чисел: 0–485 (дБ).
Шкала громкости 0–100 децибел соответствует шкале 0–1 RMS.
Среднеквадратическая (RMS) амплитуда группы из N семплов равна:
Arms =
, где an – значение n-го семпла.
Следует учитывать, что Arms >= 0.
rmstodb – RMS to Decibel конвертер
Принимает на вход среднеквадратическое (RMS) значение громкости звука и подает на выход это же значение в децибелах.
Шкала громкости 0–1 RMS соответствует шкале 0–100 децибел.
savepanel – открывает диалоговое окно "Cохранить как" ("Save as").
При поступлении на вход команды <bang> открывает диалоговое окно "Cохранить как". После выбора необходимого файла посылает на выход путь к этому файлу (в виде сообщения <symbol путь_к_файлу>).
openpanel – открывает диалоговое окно "Открыть" ("Open file").
При поступлении на вход команды <bang> открывает диалоговое окно для открытия файла. После выбора необходимого файла посылает на выход путь к этому файлу (в виде сообщения <symbol путь_к_файлу>).
soundfiler – формирует множества (таблицы) чисел из аудио-файлов (wav/aiff) и наоборот.
На вход принимает сообщения для чтения/записи аудио-файлов и преобразования их во множества (таблицы) чисел.
На выход подает размер множества (таблицы) чисел, которому отправляются или от которого поступают данные для чтения/записи аудио-файла.
Для преобразования аудио-файла в таблицу чисел, необходимо отправить следующее сообщение (в таблицу будет записано столько семплов аудио-файла, сколько позволяет ее размер, "лишние" семплы будут проигнорированы):
<read –f путь/имя_файла имя_множества> (f – флаг операции).
Для преобразования таблицы чисел в аудио-файл, необходимо отправить следующее сообщение:
<write –f путь/имя_файла имя_множества> (f – флаг операции).
Для того, чтобы прочитать/записать стерео файл, необходимо отправить сообщение, аналогичное предыдущим, с именами двух множеств вместо одного (имя первого множества – первый канал, имя второго – второй канал).
Флаги чтения:
raw – неопределенный ("сырой") формат аудио-файлов (без использования стандартного заголовка);
header size – количество первых байт файла, которые будут пропущены (проинтерпретированы как заголовок, а не как аудио-данные);
channels – количество каналов в файле. Для монофайла отсчеты следуют один за другим, в стереофайле отсчеты в каждый дискретный момент времени для левого и правого каналов следуют друг за другом, чередуясь. Поэтому если указать неверное количество каналов, аудио-файл будет прочитан на повышенной или пониженной скорости;
bytes per sample – количество байт, которыми представлен отдельно взятый отсчет (семпл): обычно 8 или 16;
endianness * – может принимать значения <l> (little-endian), <b> (big-endian) или <n> (natural). Процессоры от Intel читают числа справа налево (вначале идут младшие байты, затем старшие) – такой стандарт называется Little-endian. Стандарт фирмы Motorola (на компьютерах Macintosh) называется Big-endian, и чтение происходит слева направо. Естественный для данного компьютера формат чтения чисел можно установить с помощью параметра <n>.
* Обратить порядок чтения старших и младших байтов можно с помощью объекта [swap~] из библиотеки Zexy (до выполнения каких-либо преобразований с сигналом).
Флаги записи:
Количество каналов ограничено 64.
makefilename – формирует имена файлов с числовой или символьной переменной.
В аргументе указывается будущее имя файла, состоящее из любых знаков, кроме служебных символов (пробела, процента, запятой, точки с запятой), и <%d> или <%s>, представляющих собой числовую и символьную переменную соответственно.
При поступлении на вход числа или символа на выход будет отправлено сообщение (с атрибутом symbol), состоящее из аргумента и полученного числа вместо <%d> или символа вместо <%s>.
bag – сохраняет в памяти поступающие числа.
Принимает на вход числа или списки чисел (из двух элементов): если второй элемент списка не равен нулю, сохраняет в памяти первый элемент сообщения. Одно и то же число может быть записано несколько раз.
Для того, чтобы удалить из памяти какое-либо число, необходимо отправить на вход список из двух элементов: само это число и нуль.
Очистить память объекта можно с помощью команды <clear>.
Подать на выход все хранящиеся сообщения (одновременно очистив память объекта) можно с помощью команды <flush>.
netsend – отправляет сообщения на удаленный компьютер.
В зависимости от значения аргумента [netsend] может обращаться к удаленному компьютеру по протоколу TCP (аргумент отсутствует либо равен <0>) или UDP (аргумент отличен от нуля).
При открытии соединения подает на выход <1>.
Параметры соединения (имя или IP-адрес хоста и номер порта) задаются сообщением <connect имя_хоста номер_порта>. Разорвать соединение можно с помощью сообщения <disconnect>.
Для того, чтобы отправить сообщение по указанному адресу, необходимо подать его на вход [netsend] в виде <send сообщение>.
См. также [netserver] и [netclient] из библиотеки Maxlib.
netreceive – принимает сообщения с удаленного компьютера.
В первом аргументе задается номер порта, с которого будут ожидаться сообщения, во втором – протокол: TCP (аргумент отсутствует либо равен <0>) или UDP (аргумент отличен от нуля).
См. также [netserver] и [netclient] из библиотеки Maxlib.
Чтобы включить звук, можно:
Как только звук будет включен, программа начнет непрерывный подсчет значений амплитуды аудио-сигналов (блоками, по умолчанию, из 64 семплов) на заданной частоте дискретизации. Подсчет семплов будет остановлен только при выключении режима обработки сигналов.
Объекты, управляющие аудио-данными в Pure Data, обозначаются тильдой (~). В данном руководстве под аудио-сигналом (или просто сигналом) понимается непрерывный поток чисел (значений амплитуды), обрабатываемых программой с частотой дискретизации (по умолчанию, 44.1 тыс. семплов в секунду).
Если при включенном режиме обработки сигналов (dsp 1) в заплатке создается несколько генераторов колебаний с одинаковыми характеристиками (формой волны, частотой), все они будут иметь различную фазу.
Если генераторы колебаний создаются в выключенном режиме обработки сигналов (dsp 0), то после включения (dsp 1) фаза колебаний будет одинаковой.
dac~ – цифро-аналоговый преобразователь (ЦАП).
Принимает на левый вход аудио-сигнал для левого канала, на правый – для правого (амплитуда сигнала не должна превышать 1, иначе звук будет дисторширован – т.е. обрезан по амплитуде).
Результирующий аудио-сигнал подается непосредственно на звуковую карту. В аргументе можно указать номера каналов звуковой карты, на которые будут подаваться аудио-сигналы (по умолчанию – 1 (левый) и 2 (правый)).
adc~ – аналого-цифровой преобразователь (АЦП).
Принимает со звуковой карты аудио-сигналы и отправляет их на левый и правый выходы. В аргументе можно указать номера каналов звуковой карты, с которых будут поступать аудио-сигналы. Количество выходов зависит от количества аргументов.
По умолчанию работает с двумя каналами – 1 (левый) и 2 (правый).
osc~ – генератор синусоидальных колебаний.
На левый вход принимает частоту колебаний (Гц), на правый – фазу колебаний (1 = полный цикл = 2¶). Начальную частоту колебаний можно указать в первом аргументе, начальную фазу – во втором.
На выход подает аудио-сигнал заданной частоты и фазы, представляющий собой функцию косинуса с амплитудой = 1.
tabosc4~ – таблично-волновой синтезатор с 4-точечной интерполяцией (сглаживанием промежуточных значений).
На левый вход принимает частоту волны (Гц, в виде числа или сигнала), записанной в таблице (множестве) чисел. Имя таблицы указывается в аргументе. Количество позиций (размер) таблицы должен быть равен степени двойки плюс три (напр., 131, 259, 515 и т.д.) – иначе синтезатор работать не будет.
На правый вход принимает начальную фазу волны (1 = полный цикл).
На выход посылает аудио-сигнал заданной частоты и фазы, представляющий собой ускоренную/замедленную (за счет интерполяции*) версию звуковой волны, записанной в таблице (множестве) чисел.
Если на левый вход поступило отрицательное число –f, звуковая волна будет проигрываться задом наперед с частотой равной абсолютному значению –f.
Имя множества (таблицы) чисел можно изменять динамически, подавая на вход команду <set A>, где A – имя нового множества.
* интерполяция применяется только к следующим друг за другом позициям множества (при повторении цикла, т.е. при переходе с последней позиции множества на первую (нулевую), сглаживания не происходит).
phasor~ – генератор пилообразных колебаний.
На левый вход принимает частоту колебаний (Гц) в виде числа или сигнала, на правый – фазу колебаний (1 = полный цикл).
В аргументе можно указать начальную частоту колебаний.
На выход посылает аудио сигнал, представляющий собой волну пилообразной формы:
При смене частоты колебаний фаза выходного сигнала устанавливается в значение, соответствующее последнему значению сигнала с прежней частотой.
Процесс синтеза можно временно остановить, отправив на левый вход <0> (на выход будет подан сигнал нулевой частоты с амплитудой, равной последнему значению остановленного сигнала) и продолжить далее (с приостановленного значения), отправив на вход отличное от нуля число.
См. также [fasor~] из библиотеки Ggext.
noise~ – генератор "белого" шума.
Подает на выход аудио-сигнал с произвольно меняющейся амплитудой (от -1 до 1).
См. также [noisi~] и [noish~] из библиотеки Zexy, [pink~] и [rand~] из библиотеки Cyclone/Sickle, [LFO_noise~] и [pink~] из библиотеки Iemlib.
tabwrite~ – записывает поступающий аудио-сигнал в таблицу (множество) чисел.
Получает на вход аудио-сигнал и по команде <bang> начинает записывать и отображать графически значение каждого семпла в указанном в аргументе множестве (начиная с нулевой позиции). Процесс записи можно остановить, отправив на вход команду <stop>.
Имя множества (таблицы чисел) можно изменять динамически, подавая на вход команду <set A>, где A – имя нового множества.
Если в одной и той же заплатке существует два множества чисел с одинаковыми именами, то при отправлении им какого-либо значения, в окне терминала отобразится сообщение об ошибке, и [tabwrite~] отправит это значение лишь первому созданному множеству.
tabread4~ – считывает аудио-данные из таблицы (множества) чисел с 4-точечной интерполяцией (сглаживанием промежуточных значений).
В аргументе указывается имя таблицы, с которой будут считываться аудио-данные.
Принимает на вход индекс позиции множества в виде числа или сигнала (начиная с 1 и заканчивая n–2, где n – количество позиций множества; значения индексов <1 или >n–2 будут рассматриваться как 1 или n–2 соответственно). На выход подается интерполированное значение* соответствующей позиции множества (в виде аудио-сигнала).
Имя множества (таблицы) чисел можно изменять динамически, подавая на вход команду <set A>, где A – имя нового множества, к которому будет обращаться [tabread~].
* интерполяция применяется только к следующим друг за другом позициям множества (при повторении цикла, т.е. при переходе с последней позиции множества на первую (нулевую), сглаживания не происходит).
Интерполяция имеет смысл при манипулировании скоростью проигрывания семпла: если он постоянно проигрывается на одной и той же скорости, для ЦП будет экономней использовать объект [tabread~]. Следует также отметить, что, чем ниже частота исходного аудио-сигнала (записанного в волновой таблице) и чем он чище, тем заметней на слух будут интерполяционные искажения.
tabreceive~ – генератор периодических колебаний (с периодом одного DSP блока).
Считывает первые N семплов из таблицы (множества) чисел, указанной в аргументе, на частоте дискретизации (подавая на выход в виде аудио-сигнала), где N – размер текущего блока DSP обработки.
tabsend~ – периодически заполняет таблицу (множество) чисел значениями поступающего аудио-сигнала.
По умолчанию 1 период (блок) обработки сигнала равен 64 семплам (устанавливается объектом [block~]).
*~ – мультипликатор (умножитель сигналов).
Работает в двух режимах:
Результат подает на выход в виде сигнала.
Если сигнал умножить на -1, его фаза перевернется на 180° (звучание останется без изменения).
/~ – делитель сигналов.
Работает в двух режимах:
Результат подает на выход в виде сигнала.
См. также [!/~] из библиотеки Cyclone/Cyclone.
+~ – микшер (сумматор сигналов).
Работает в двух режимах:
Результат подает на выход в виде сигнала.
Суммирование аудио-сигналов можно проводить и без использования объекта "+~" – аналогичный эффект достигается при подаче двух сигналов на один вход.
-~ – субстрактор (вычитатель сигналов).
Аналогично встроенному объекту [+~] может работать в одном из двух режимов:
Результат подает на выход в виде сигнала.
См. также [!-~] из библиотеки Cyclone/Cyclone.
sig~ – преобразователь чисел в аудио-сигнал.
Принимает на вход любые числа, преобразует их в непрерывный аудио-сигнал с нулевой частотой и амплитудой, равной полученному значению. Результирующий аудио сигнал подает на выход. Начальное значение можно указать в аргументе.
См. также [t3_sig~] из библиотеки Iemlib.
cos~ – принимает на вход дробную часть полного цикла окружности (от 0 до 1), умножает ее на 2¶ и подает на выход соответствующее значение функции косинуса в виде аудио-сигнала.
Отличается от объекта [cos] тем, что принимает на вход значения в 2¶ раза меньшие (т.е. циклы окружности, а не радианы).
1 радиан = ¶ / 180°.
¶ ~ 3,141592 радиан,
line~ – то же, что и [line], но для сигналов:
Создает более гладкую огибающую, изменяя значения семплов с частотой дискретизации (т.е. обрабатывая каждый семпл, а не целую группу как [line], за счет чего у последнего возникают резкие ступенчато-образные переходы).
См. также встроенный объект [vline~], [Line~] и [linedrive] из библиотеки Cyclone/Hammer и [t3_line~] из библиотеки Iemlib.
vline~ – высокоточный аналог [line~].
Формирует точки перегиба огибающей с точностью до одного семпла, а не с привязкой к ближайшему DSP-блоку. На третий вход принимает время задержки (в миллисекундах) перед началом формирования огибающей.
См. также [Line~] и [linedrive] из библиотеки Cyclone/Hammer и [t3_line~] из библиотеки Iemlib.
send~ – то же, что и [send], но для аудио-сигналов.
Каждый объект [send~] должен иметь уникальное имя, указанное в аргументе. Если в одной и той же заплатке существует два объекта [send~] с одинаковыми именами, то при включении обработки звука и отправлении им аудио-сигнала, в окне терминала отобразится сообщение об ошибке, и лишь первый созданный объект [send~] будет отправлять соответствующему объекту [receive~] полученный аудио-сигнал.
receive~ - то же, что и [receive], но для аудио-сигналов.
Имя ресивера (указанное в аргументе) можно изменять динамически, подавая на вход команду <set A>, где A – новое имя ресивера, принимающего сигнал от объекта [send~], имеющего тот же аргумент.
throw~ – принимает на вход аудио-сигнал и посылает его объекту [catch~], имеющему тот же аргумент.
Аргумент объекта [throw~] можно изменять динамически, подавая на вход команду <set A>, где A – имя нового аргумента.
catch~ – суммирует аудио-сигналы, поступающие от объектов [throw~], имеющих тот же аргумент; на выход подается результирующий аудио-сигнал.
Не допускается создавать несколько объектов [catch~] с одинаковыми именами.
clip~ – амплитудный ограничитель сигнала.
Принимает на левый вход аудио-сигнал, и, если его амплитуда умещается в выбранный диапазон (устанавливаемый двумя аргументами), этот же сигнал подается на выход. Если амплитуда сигнала превышает одну из допустимых границ диапазона, сигнал будет обрезан по амплитуде.
Первый аргумент (второй вход) – это минимум (нижняя граница), второй аргумент (третий вход) – это максимум (верхняя граница) диапазона.
hip~ – пропускающий фильтр верхних частот первого порядка (6 дБ на октаву).
На левый вход принимает аудио-сигнал (или команду <clear>), на правый – частоту среза Fcut (начальную частоту среза можно указать в аргументе). На выход посылает отфильтрованный аудио-сигнал:
если в поступающем аудио-сигнале присутствует частота, равная частоте среза, ее амплитуда понижается на 3 дБ.
[hip~] можно превратить в пропускающий фильтр нижних частот, если из входного (необработанного) сигнала вычесть выходной (отфильтрованный).
lop~ – пропускающий фильтр нижних частот первого порядка (6 дБ на октаву).
На левый вход принимает аудио-сигнал (или команду <clear>), на правый – частоту среза фильтра (начальную частоту среза можно указать в аргументе). На выход посылает отфильтрованный аудио-сигнал:
фильтр приглушает частоты аудио-сигнала вниз до ~шестой октавы после частоты среза (Fcut * 64) от 3 до 0 дБ (наиболее значительное приглушение частот (~1 дб) происходит до второй октавы (Fcut * 4)).с каждой октавой, т.е. двукратным увеличением фильтруемой частоты, амплитуда этой частоты понижается на 6 дБ.
[lop~] можно превратить в пропускающий фильтр верхних частот, если из входного (необработанного) сигнала вычесть выходной (отфильтрованный).
См. также [onepole~], [lores~] и [svf~] из библиотеки Cyclone/Sickle, [lp1_t~], [lp1~] и [lp2~] из библиотеки Iemlib, [moog~] из библиотеки Ggext.
bp~ – полосно-пропускающий фильтр
На левый вход принимает аудио-сигнал, на средний – центральную частоту среза (Fc), на правый – коэффициент добротности фильтра (Q).
Синусоида с частотой, равной Fc, подается на выход с практически неизмененной амплитудой, остальные частоты приглушаются, в зависимости от величины Q = Fc / ширина полосы пропускания.
Ширина полосы пропускания фильтра определяется расстоянием от верхней частоты среза до нижней (т.е. разностью между частотами, уровень приглушения которых составляет 3 дБ). Чем выше Q, тем уже полоса пропускания, чем ниже Q – тем она шире.
См. также встроенный объект [vcf~], объекты [bpq2~], [bpw2~], [vcf_bp2~], [rbpq2~] и [rbpw2~] из библиотеки Iemlib и [reson~] и [svf~] из библиотеки Cyclone/Sickle и
vcf~ – "сигнально-управляемый" (voltage controlled) полосно-пропускающий фильтр.
Аналог [bp~], но может принимать значения центральной частоты как в виде числа, так и сигнала.
biquad~ – биквадратный фильтр с 2 полюсами и 2 нулями.
Полюса и нули в таком фильтре представляют точки на комплексной плоскости: полюса – усиливают частоты, вблизи которых они лежат, нули – приглушают. Удаленность полюсов и нулей от точек единичной окружности (представляющих диапазон частот от 0 до частоты дискретизации) определяет степень приглушения/усиления соответствующих частот. С помощью полюсов и нулей можно построить практически любой фильтр.
Для фильтрации поступающего сигнала x(n) [biquad~] решает следующее уравнение:
y(n) = ff1 * w(n) + ff2 * w(n-1) + ff3 * w(n-2),
где w(n) = x(n) + fb1 * w(n-1) + fb2 * w(n-2),
Коэффициенты fb1, fb2, ff1, ff2 и ff3 принимаются на вход в виде списка чисел или задаются в аргументе.
См. также статью Роберта Б. Джонсона (Robert Bristow-Johnson) Cookbook formulae for audio EQ biquad filter coefficients и объекты [highpass], [lowpass], [equalizer], [bandpass], [notch], [highshelf] из библиотеки Ggext.
env~ – измеритель уровня аудио-сигнала.
Принимает на вход аудио-сигнал, замеряет амплитуду каждых N/2 семплов (N – размер оконной (hanning) функции, указываемый в аргументе, по умолчанию – 256) и посылает на выход через каждые T миллисекунд (T = N/2 / частота дискретизации * 1000) усредненную амплитуду (в дБ) группы семплов, перекрываемых данной оконной функцией.
* - усредненная амплитуда на ~3 дБ меньше пиковой (пиковая амплитуда равна максимальному значению семпла данной группы N).
См. также [envrms~] из библиотеки Zexy.
delwrite~ – линия задержки аудио-сигнала
Записывает поступающий аудио-сигнал в буфер размером N миллисекунд (указывается во втором аргументе).
Отправляет полученный сигнал объекту delread~ с именем, указанным в первом аргументе, и задержкой (в миллисекундах), указанной во втором.
Если в объектах [delwrite~] и [delread~] указаны различные времена задержек, сигнал будет задержан на наименьшее из них. Отрицательное число устанавливает минимальное время задержки, равное одному DSP циклу, т.е. размеру 1 блока обработки сигнала (по умолчанию – 64 семпла или 1,45 мс при частоте дискретизации 44100). Минимальное время задержки можно сократить с помощью объекта [block~], поместив его вместе с удерживаемым сигналом в подчиненное окно.
delread~ – линия задержки аудио-сигнала
Считывает из буфера объекта [delwrite~] (имеющего тот же аргумент) аудио-сигнал с задержкой (в миллисекундах), указанной во втором аргументе или принятой на вход в виде числа.
Если в объектах [delread~] и [delwrite~] указаны различные времена задержек, сигнал будет задержан на наименьшее из них. Отрицательное число устанавливает минимальное время задержки, равное одному DSP циклу, т.е. размеру 1 блока обработки сигнала (по умолчанию – 64 семпла или 1,45 мс при частоте дискретизации 44100). Минимальное время задержки можно сократить с помощью объекта [block~], поместив его вместе с удерживаемым сигналом в подчиненное окно.
vd~ – плавающая линия задержки сигнала
То же что и [delread~], но может принимать время задержки как в виде сигнала, так и числа.
sqrt~ – вычисляет квадратный корень.
Принимает на вход число или сигнал, подает на выход его квадратный корень (в виде сигнала).
wrap~ – принимает на вход число или сигнал, вычитает из полученного значения ближайшее наименьшее целое число, результат подает на выход в виде сигнала:
а –1,8 в 0.2 (= – 1,8 –(–2)).
Если к сигналу f(x) (пилообразные колебания с амплитудой от 0 до 1) сначала прибавить n (–1<n<1), а затем направить объекту [wrap~], то на выход объекта будет отправлен сигнал f(x), сдвинутый по фазе на 360*n градусов.
Если сигнал f(x) (пилообразные колебания с амплитудой от 0 до 1) сначала умножить на n, а затем направить объекту [wrap~], то на выход объекта будет отправлен сигнал f(x), с частотой в n раз большей исходной частоты f(x).
samphold~ – устройство семплирования и удержания (полученных значений) аудио-сигнала.
Принимает на левый вход числа или сигнал, и после того, как на правый вход получит новое значение (в виде числа или сигнала), меньшее предыдущего (или команду <reset> на левый вход), подаст последнее полученное на левый вход значение на выход в виде аудио-сигнала (с нулевой частотой и амплитудой равной полученному значению).
С помощью команды <set N> можно подать на выход новый аудио-сигнал со значением N.
block~ – устанавливает размер блока обработки аудио-данных.
Размер блока (по умолчанию 64) – количество семплов, которые будет регулярно подсчитывать программа; по мере вычисления сигнал будет подаваться на выход порциями с частотой, равной отношению частоты дискретизации к размеру блока. Величина задержки (в секундах) между временем вычисления двух соседних блоков равна отношению размера блока к частоте дискретизации.
Объекты с тильдой (~) формируют блоки аудио-данных на основе последнего полученного control-сообщения.
В первом аргументе указывается размер блока обрабатываемых аудио-данных (степень двойки), во втором – коэффициент перекрытия блоков (1 – без перекрытия, 2 – с двойным перекрытием, и т.д.), в третьем – коэффициент повышения (понижения) частоты дискретизации (2 – повысить в два раза, 0.5 – понизить в два раза, и т.д.).
Двойное перекрытие блоков равносильно уменьшению размера блока в 2 раза или понижению частоты дискретизации в 0.5 раза.
Аргументы можно изменять динамически, подавая на вход сообщение <set A B С>, где A, B и C – новые значения размера блока, коэффициента перекрытия и коэффициента повышения (понижения) частоты дискретизации соответственно.
См. также встроенный объект [switch~].
switch~ – то же, что и [block~], но может принимать на вход команду включения <1> и выключения <0> режима обработки сигналов (DSP 1/0).
Если поместить этот объект в подчиненную заплатку, то можно включать и выключать обработку аудио-сигналов в данной заплатке, освобождая тем самым ресурсы ЦП по мере необходимости.
bang~ – по завершении каждого DSP цикла (т.е. после обработки каждого блока семплов) подает на выход команду <bang>.
print~ – принимает на вход аудио сигнал и по команде <bang> выводит в окно терминала значения амплитуд последнего обработанного блока аудио-данных (на момент поступления команды). При поступлении на вход числа N выводит в окно терминала N блоков аудио-данных (по мере их обработки).
В аргументе можно указать название объекта [print~], от имени которого будут выводиться сообщения в окне терминала.
samplerate~ – по команде <bang> подает на выход текущее значение частоты дискретизации (в виде числа).
fiddle~ – следящий фильтр высоты тона.
В первом аргументе указывается размер (N, количество семплов) оконной функции, равный степени двойки (от 128 до 8192). Сигнал анализируется порциями по N/2 семплов. Результат подается на (третий) выход каждые N/2/частота дискретизации *1000 миллисекунд. Таким образом между поступающим сигналом и результатом его анализа происходит задержка в половину окна (N/2).
Второй аргумент – максимальная полифония – количество одновременно звучащих нот (высот), которые [fiddle~] попытается определить (от 1 до 3; по умолчанию, 1).
Третий аргумент – максимальное количество пиков в спектре сигнала, по которым будет определена его частота (от 1 до 100, по умолчанию, 20).
Четвертый аргумент – количество пиков в спектре сигнала (частных составляющих), подаваемых на выход (от 1 до 100; по умолчанию, 0).
Минимальная частота, которую способен определить [fiddle~], равна ~108 Гц (MIDI 45). Если высоту ноты определить не удается, на выход отправляется 0.
---
На первый выход подается высота анализируемого сигнала в виде десятичной дроби (MIDI ноты).
На второй выход подается команда <bang> в случае обнаружения атаки (атака – скачок амплитуды на N дБ и больше, превышающий верхний амплитудный порог, см. ниже).
На третий выход (а также, четвертый и пятый, в зависимости от установленной полифонии) подается список, представляющий собой высоту (MIDI) и громкость (дБ) текущей порции отслеживаемого сигнала.
На четвертый выход параллельно подается средняя амплитуда анализируемого сигнала (в дБ), значение которой очень близко результатам анализа объекта [env~].
На крайний справа выход (если четвертый аргумент не равен 0) для каждого спектрального пика отправляется список из трех элементов: индекс пика, частота и амплитуда.
---
На вход может принимать следующие сообщения:
rfft~ – прямой преобразователь Фурье.
Принимает на вход аудио-сигнал, раскладывает его на частотные составляющие и подает на левый выход – действительные части сигнала (коэффициенты при cos), на правый – мнимые части (коэффициенты при sin).
Размер FFT окна (N) анализируемого сигнала равен размеру блока DSP обработки (устанавливаемого объектом [block~]). На каждый выход в виде сигнала подается N/2 значений частотных составляющих плюс N/2 пустых значения.
Каждое выходное значение представляет собой амплитуду соответствующей функции cos и sin, входящих в состав анализируемого сигнала. Количество пар функций косинуса и синуса, в сумме дающих исходный аудио-сигнал, зависит от размера FFT окна N и равно N/2 +1 (напр., если размер FFT = 32 семпла, то сигнал будет разложен на 17 синусоид и 17 косинусоид, причем частоты каждой k-той синусоиды и k-той косинусоиды, образующих k-ую пару, равны между собой).
Порядковый номер выходного значения соответствует номеру пары cos + sin (т.е. номеру частотной составляющей). Значение частоты fk, представляемой конкретной парой равно:
fk = k / N * SR ,
где k – порядковый номер пары (принимает целые значения от 0 до N/2) = количество полных циклов, которые совершает данная функция на отрезке N, равном размеру FFT окна, SR – частота дискретизации. Т.о., максимальная частота разложения никогда не превысит частоты Найквиста (равной половине SR), а минимальная частота разложения – не опустится ниже SR/2 / N (т.к. N – максимально возможный период колебаний на данном отрезке аудио-сигнала).
Чтобы получить реальную АЧХ сигнала, необходимо возвести в квадрат коэффициенты при функциях косинуса (значения, поступающие с левого выхода) и синуса (значения с правого выхода), попарно их сложить и извлечь из каждой суммы квадратный корень. N/2 полученных значения будут представлять амплитуды N/2 частотных составляющих анализируемого сигнала (начиная с DC – нулевой частоты, и заканчивая последней частотой, стоящей перед частотой Найквиста, с шагом частотного разрешения = SR / N/2 Гц).
readsf~ – считывает аудио-файлы с жесткого диска.
В первом аргументе указывается количество каналов аудио-файла, во втором – размер буфера (в байтах), в который будет помещен данный файл.
При поступлении на вход команды:
<open ../имя_файла.wav S H C B E>,
с необязательными параметрами:
S – номер фрейма, с которого начнется проигрывание файла;
H – размер заголовка (в байтах), который будет проигнорирован;
С – количество каналов (если указано неверное число, аудио-файл будет проигран на повышенной или пониженной скорости, т.к. отсчеты левого и правого канала следуют друг за другом поочередно);
B – количество байт на канал;
E – endianness (может принимать значения <l> – little endian или <b> – big endian),
прочитает аудио-файл с жесткого диска (поместив его в буфер обмена) и по команде <start> (= <1>) подаст на соответствующий выход в виде сигнала (номер выхода определяется номером канала).
По команде <stop> (= <0>) остановит проигрывание файла.
После окончания проигрывания подаст на крайний справа выход команду <bang>.
См. также [sfplay] из библиотеки Zexy.
writesf~ – сохраняет аудио-файлы на жесткий диск.
В аргументе указывается количество каналов аудио-файла (1–64).
Принимает на вход аудио-сигнал для записи соответствующего канала.
При поступлении на вход команды:
<open –f ../имя_файла.wav>,
где f – флаг операции (необязательный параметр):
создаст на жестком диске файл с указанным именем и по команде <start> начнет "сливать" аудио-данные в этот файл. Процесс записи можно остановить, отправив на левый вход команду <stop>.
См. также [sfrecord] из библиотеки Zexy.
snapshot~ – принимает на вход аудио-сигнал и по команде <bang> подает на выход (в виде числа) его текущую амплитуду.
См. также [Snapshot~] из библиотеки Cyclone/Sickle.
Externals
arraysize – при поступлении на вход команды <bang> подает на выход размер (количество позиций) таблицы (множества) чисел, указанной в аргументе.
Имя таблицы (множества) чисел можно изменять динамически с помощью команды <set имя_множества>.
grid – аналог [MouseState] из библиотеки Cyclone/Hammer.
Отслеживает перемещение указателя мыши в специальном окне: на левый выход подает горизонтальную координату, на правый – вертикальную.
Библиотека Yves Degoyon.
Справку почти по каждому объекту из этой библиотеки можно получить с помощью сообщения <help>, отправленного на левый вход объекта.
Список всех объектов библиотеки (с кратким описанием основных функций) можно получить с помощью сообщения <help>, отправленного на вход объекта [zexy].
abs~ * – принимает на вход аудио сигнал, подает на выход абсолютные (неотрицательные) значения амплитуды этого сигнала.
* Конфликтует с одноименным объектом из библиотеки CYCLONE/Sickle.
sgn~ – определяет знак поступающего сигнала
Если амплитуда входного сигнала – положительная, подает на выход (в виде сигнала) <1>, если отрицательна, то <–1>, если нулевая – то нуль.
noish~ – генератор белого шума с регулируемой полосой пропускания.
Принимает на вход число N и подает на выход в виде сигнала белый шум, семплированный на частоте дискретизации N Гц (т.е. сигнал нулевой частоты, амплитуда которого будет периодически – N раз в секунду – принимать случайные значения от -1 до 1).
При поступлении на вход <0> или отрицательного числа [noish~] сгенерирует обычный белый шум (со стандартной частотой дискретизации).
Начальную частоту можно указать в аргументе.
См. также встроенный объект [noise~], [noisi~] из библиотеки Zexy, [pink~] и [rand~] из библиотеки Cyclone/Hammer, [LFO_noise~] и [pink~] из библиотеки Iemlib.
noisi~ – то же что и [noish~] из библиотеки Zexy, но с амплитудной интерполяцией (сглаживанием промежуточных значений).
Амплитуда выходного сигнала принимает значения не скачкообразно (мгновенно) как [noish~], а плавно, линейно переходя от одного значения к другому. За счет сглаживания промежуточных значений из сигнала исчезают многие высокочастотные составляющие.
См. также встроенный объект [noise~], [pink~] и [rand~] из библиотеки Cyclone/Hammer, [LFO_noise~] и [pink~] из библиотеки Iemlib.
dirac~ – импульсный генератор.
При поступлении на вход любого неотрицательного числа <i> (индекс единичного импульса в блоке обработки аудио-данных) или команды <bang> подает на выход один DSP-блок со значением амплитуды i-го семпла, равным 1. Значения остальных семплов равны нулю.
Индекс (порядковый номер) импульса можно указать в аргументе.
Объект используется для получения импульсной характеристики (реакции на импульсное возмущение) системы.
См. также [click~] из библиотеки Cyclone/Sickle.
step~ – единичная ступенчатая функция.
При поступлении на вход числа N подает на выход в виде сигнала прямоугольный импульс длиной M (семплов), указанной в аргументе (либо полученной с правого входа), и начальным семплом с индексом N в блоке DSP обработки.
При поступлении на вход команды <bang> производит прямоугольный импульс с последними полученными параметрами.
При нулевой длине импульса (M=0) производит шаг (мгновенное изменение амплитуды сигнала) с нуля до единицы (или обратно) начиная с семпла N блока DSP обработки.
При единичной длине импульса (M=1) ведет себя также, как [dirac~].
quantize~ – квантователь.
Понижает дискретность входного аудио-сигнала в соответствии с указанным в аргументе шагом квантования:
<8bit> – преобразует сигнал в 8-битный,
<16bit> – преобразует сигнал в 16-битный (по умолчанию),
<N> – преобразует сигнал в N-битный,
<float> – пропускает сигнал без изменения.
Шаг квантования может приниматься на вход в виде сообщения.
swap~ – принимает на вход аудио-сигнал, преобразует его в 16-битный, после чего меняет значения старших и младших байтов (битов) местами и подает искаженный сигнал на выход.
С помощью команды <bang> (и/или <1>/<0>) можно включать/выключать режим замены байтов (по умолчанию, включен).
Может использоваться для преобразования форматов чтения/записи данных на компьютерах Intel/Mac (см. также endianness).
limiter~ – амплитудный ограничитель / компрессор.
Измеряет уровень входного аудио-сигнала, отслеживает момент пересечения им порогового значения (принимаемого за 1, = 100 дБ), подает на выход в виде сигнала соответствующий коэффициент усиления (от 0 до 1).
Количество отслеживаемых аудио-сигналов определяется количеством аргументов, указанных в объекте (числовых или символьных, значения не имеет).
В зависимости от принятого на левый вход сообщения может работать в одном из 3-х различных режимов:
<LIMITER> = <mode 0> – ограничитель уровня (лимитер):
Параметры ограничителя уровня устанавливаются сообщением:
<set Threshold Hold Release>,
где <Threshold> – значение порога срабатывания (в дБ)*,
<Hold> – время удержания (в миллисекундах), в течение которого лимитер не будет реагировать на понижение амплитуды сигнала в области выше порога срабатывания, удерживая коэффициент усиления на одном уровне.
<Release> – время (точнее, скорость) восстановления в миллисекундах между моментом, когда уровень входного сигнала A начнет опускаться с отметки Threshold+N дБ, и моментом, когда коэффициент усиления увеличится в два раза относительно A–N дБ (т.е. поднимется с A–N до A–N+6 дБ), не считая времени удержания.

На рисунке приведен пример резкого увеличения уровня входного сигнала и результата отработки скачка лимитером. Hold – задержка в срабатывании лимитера после завершения пика сигнала, release – время восстановления.
* – порог срабатывания можно также установить сообщением:
<limit Threshold>.
Время срабатывания (атаки) лимитера постоянно и равно 4 семплам, поэтому он может пропускать импульсы длиной от 1 до 5 семплов, никак не ограничивая их по амплитуде. Для устранения этого недостатка следует задерживать исходный аудио-сигнал на 4 семпла перед умножением на коэффициент усиления с помощью объекта [z~].
<CRACK> = <mode 1> – амплитудный ограничитель с двумя порогами срабатывания (работает как два независимых ограничителя уровня с общим порогом срабатывания: первый реагирует на скачки амплитуды ниже порогового значения, второй – выше).
Параметры ограничителя устанавливаются сообщениями:
<set Threshold1 Hold1 Release1> *,
<set2 Threshold2 Hold2 Release2> *,
где <Threshold1> – значение нижнего порога срабатывания (дБ),
<Hold1> – время удержания (в миллисекундах) для первого ограничителя,
<Release1> – время восстановления (в миллисекундах) для первого ограничителя,
<Threshold2> – значение верхнего порога срабатывания (дБ),
<Hold2>, <Release2> – для второго ограничителя, соответственно.
* Уровни нижнего и верхнего порогов срабатывания можно также установить с помощью сообщения: <limits Threshold1 Threshold2>.
Если амплитуда входного сигнала не превышает значения нижнего порога срабатывания (Threshold1), на выход подается коэффициент усиления 1.
Если амплитуда сигнала превышает уровень нижнего порога, но меньше уровня верхнего порога минус один:
Threshold1 < А < Threshold2 – 1 (дБ),
на выход подается соответствующий коэффициент усиления со временем удержания и восстановления, положенными для первого ограничителя уровня.
Если амплитуда входного сигнала превышает уровень верхнего порога минус один, на выход подается коэффициент усиления со временем удержания и восстановления, положенными для второго ограничителя.
<COMPRESS> = <mode 2> – компрессор: сокращает динамический диапазон, автоматически уменьшая громкость поступающего аудио-сигнала после того, как она превысит пороговый уровень (threshold). Масштабы понижения громкости определяются параметром "степень компрессии" (ratio).
Параметры компрессора устанавливаются сообщениями:
<compress Limit Threshold Ratio>*,
<set Limit Hold Release>,
где <Limit> – верхний амплитудный порог (дБ), ограничивающий уровень выходного сигнала (скомпрессированный (сжатый) аудио-сигнал никогда не превысит этой отметки).
<Threshold> – порог срабатывания (дБ), при превышении которого компрессор начнет сжимать динамический диапазон поступающего аудио-сигнала.
<Ratio> – степень сжатия аудио-сигнала, определяется соотношением компрессии:
ratio = Авых : Авх,
где Авх и Авых – уровни превышения входным и выходным сигналом порога срабатывания компрессора. Например, если степень компрессии установлена на 0.5, то при превышении уровня входного сигнала порога срабатывания на 6 дБ амплитуда сжатого аудио-сигнала превысит порог лишь на 3 дБ (= 6 * 0.5 дБ).
<Hold> – время удержания, в течение которого компрессор не будет адекватно реагировать на скачки амплитуды входного сигнала, происходящие выше порога срабатывания.
<Release> – время (точнее, скорость) восстановления в миллисекундах между моментом, когда уровень входного сигнала A начнет опускаться с отметки Threshold+N дБ, и моментом, когда коэффициент усиления поднимется на 3 дБ выше компенсирующего уровня A–N дБ (т.е. до A–N+3 дБ), не считая времени удержания.
* Параметры <Limit>, <Threshold> и <Ratio> можно также установить с помощью сообщений:
<limit Limit>,
<treshold Threshold>,
<ratio Ratio>.
Текущие параметры ограничителя уровня / компрессора можно посмотреть в окне терминала, отправив на вход объекта сообщение <print>.
z~ – задерживает сигнал на N семплов, указанных в аргументе (по умолчанию, 1). Размер линии задержки может приниматься на вход в виде сообщения.
sigzero~ – проверяет, есть ли на входе аудио-сигнал или нет.
Если амплитуда входного сигнала равна нулю, [sigzero~] отправит на выход <0>, иначе <1>.
Предварительно объект должен быть включен с помощью команды <bang> или отличного от нуля числа. Объект выключается по команде <off> (или <0>).
Может использоваться для анализа поступающего сигнала в подчиненных заплатках и управления (с помощью объекта [switch~]) включением/выключением режима обработки сигналов в этих заплатках.
См. также [edge~] из библиотеки Cyclone/Sickle.
envrms~ – то же, что и [env~], но измеряет амплитуду сигнала не в децибелах, а в RMS-единицах (см. [dbtorms]). Менее требователен к ресурсам ЦП.
avg~ * – вычисляет среднее арифметическое значение амплитуды сигнала.
Принимает на вход аудио сигнал, складывает значения семплов одного блока DSP-обработки, делит полученную сумму на количество семплов в блоке (по умолчанию, 64) и подает результат на выход в виде числа.
См. также [average~] из библиотеки CYCLONE/Sickle.
* Конфликтует с одноименным объектом из библиотеки CYCLONE/Sickle.
tavg~ – то же, что и [avg~] из библиотеки Zexy, но вычисляет среднюю амплитуду сигнала не по блокам DSP-обработки, а по промежутку времени между двумя командами <bang>, полученными на левый вход.
См. также [avg~] из библиотеки CYCLONE/Sickle.
dfreq~ – простейший частотный анализатор, определяющий частоту аудио-сигнала по количеству точек перехода через нулевой уровень.
При каждом пересечении амплитудной огибающей входного сигнала нулевой отметки (в фазе нарастания) [dfreq~] подает на выход его частоту (Гц) в виде сигнала.
Главное его достоинство – относительно небольшие требования к ресурсам ЦП. Недостаток проявляется в некорректной работе со сложными аудио-сигналами, высокочастотные составляющие которых игнорируются.
См. также [zerox~] из библиотеки Cyclone/Sickle и [weave~] из библиотеки PeRColate.
multiplex~ , = mux~ – переключатель входных сигналов.
Пропускает аудио-сигнал, поступающий с того входа, номер которого получен в виде сообщения (на левый вход), начиная с нулевого и заканчивая количеством аргументов минус один (определяющих число входов объекта).
По умолчанию, пропускает сигнал с левого входа, игнорируя остальные.
demultiplex~ , = demux~ – переключатель выходных сигналов.
Подает сигнал на тот выход, номер которого получен на вход в виде сообщения, начиная с нулевого и заканчивая количеством аргументов минус один (определяющих число выходов объекта).
По умолчанию, подает сигнал на левый выход, обнуляя амплитуду остальных сигналов.
multiline~ – многоканальная версия объекта [line~].
Принимает на левый вход аудио-сигнал и в течение T миллисекунд, указанных во втором аргументе (или принятых на последний вход), умножает каждый семпл этого сигнала на линейно увеличивающийся (уменьшающийся) коэффициент усиления до тех пор, пока амплитуда выходного сигнала не станет в N раз больше (меньше) своего начального уровня, где N – конечное значение коэффициента усиления, указанное в первом аргументе (или принятое на второй вход).
Коэффициент усиления N и время линейной развертки T можно подавать динамически на второй и третий входы объекта независимо или списком на второй вход.
[multiline~] может работать с несколькими сигналами одновременно (общее число которых равно количеству аргументов минус 1). В этом случае значения первых аргументов будут рассматриваться как коэффициенты усиления для соответствующих входов объекта, а последний аргумент – как общее для всех каналов время развертки (в миллисекундах).
Таким же образом строится синтаксис списка, принимаемого в виде сообщения на предпоследний вход. Время линейной развертки, общее для всех поступающих сигналов, подается на последний вход.
lister = l – хранилище списка.
Принимает на левый вход список (состоящий из любых элементов), запоминает его, затем отправляет на выход. Список, полученный на правый вход, запоминается, но на выход не подается.
При поступлении на вход команды <bang> отправляет на выход последний полученный список.
Элементы начального списка можно указать в соответствующих аргументах.
any2list = a2l – преобразует сообщения с атрибутом anything в сообщения типа list (список). Базовые типы сообщений (float, symbol, list) подает на выход без изменения.
length – возвращает длину (количество элементов) поступившего на вход сообщения, рассматриваемого как списка.
repack – формирует список заданной длины.
Принимает на вход любые сообщения, добавляет их в список, а, когда количество элементов списка достигнет числа, указанного в аргументе (или полученного на правый вход), подает сформированный список на выход.
Если на вход поступил список с числом элементов, превышающим значение аргумента, [repack] раздробит этот список на несколько составных частей (длина каждой из которых будет равна значению аргумента), а остаток запомнит для формирования будущего списка.
В любой момент времени список, находящийся в памяти объекта, можно подать на выход с помощью команды <bang>.
См. также [serialize] из библиотеки Ggext и [thresh] из библиотеки Cyclone/Hammer.
packel – извлекает по номеру значение конкретного элемента списка (аналог сообщения <$N>).
Подает на выход тот элемент полученного списка, номер которого указан в аргументе (или принят на правый вход).
Если значение аргумента меньше нуля, [packel] будет отсчитывать номер элемента списка с конца.
Если аргумент = 0 или не указан, на выход подается весь список целиком.
niagara – делит список на две части.
При поступлении на левый вход сообщения, состоящего из нескольких элементов, подает первую часть сообщения (с начала списка до того элемента, номер которого указан в аргументе либо получен на правый вход, включительно) на левый выход, вторую (оставшуюся) – на правый.
Тип выходящих сообщений всегда соответствует типу входящих (сообщение с атрибутом list делится на два списка, сообщение типа anything делится на два сообщения типа anything).
glue – складывает два списка.
Принимает на левый вход сообщения базовых типов (float, symbol, list), присоединяет справа (через пробел) значение аргумента (или списка, принятого на правый вход) и подает результирующий список на выход.
Последний сформированный список можно подать на выход с помощью команды <bang>.
list2int , = l2i – заменяет дробные числа в списке на целые.
Если среди элементов принятого на вход сообщения есть десятичные дроби, отсекает дробные части, и подает сообщение на выход в виде списка с целочисленными элементами. В противном случае пропускает сообщение без изменений.
segregate – маршутизатор типов сообщений
В зависимости от типа принятого на вход сообщения подает его на строго определенный выход:
1-ый выход: команды <bang> (bang)
2-ой выход: числа (float)
3-ий выход: слова (symbol)
4-ый выход: списки (list)
5-ый выход: указатели (pointer)
6-ой выход: прочие (anything)
list2symbol , = l2s – преобразует список (сообщение с атрибутом list или anything) в строку символов (сообщение с атрибутом symbol), разделителями которой по умолчанию являются знаки пробела или иные символы (кроме запятой и точки с запятой), принятые на правый вход.
symbol2list , = s2l – преобразует строку символов с пробелами, полученную от объекта [list2symbol], обратно в список.
tabdump – преобразует множество (таблицу) чисел в список.
По команде <bang> возвращает список чисел со значениями, полученными из таблицы (множества) чисел, имя которой указано в аргументе или принято на вход в виде сообщения <set имя_таблицы>.
tabset – преобразует список во множество (таблицу) чисел.
Заполняет таблицу (множество) чисел значениями принятого на вход списка (аналогично сообщению <; имя_множества i xi xi+1 xi+2 x…>). Имя таблицы указывается в аргументе или принимается на вход в виде сообщения <set имя_множества>.
Если на вход объекта поступило число (а не список), все значения указанной в аргументе таблицы будут приравнены к данному числу (аналогично сообщению <; имя_множества const N>).
makesymbol – формирует строку символов согласно заданному шаблону (аналогично [makefilename]).
Принимает на вход любые сообщения кроме anything, если это список, то использует первые N элементов (где N – количество знаков <%s>, указанных в шаблоне), заменяет каждый знак <%s> в шаблоне на соответствующий элемент полученного списка и подает результирующую строку на выход.
Шаблон, состоящий из любых знаков, кроме служебных (пробела, процента, запятой и точки с запятой), можно указать в аргументе, либо отправить на правый вход в виде сообщения с атрибутом symbol.
По команде <bang> подает на выход последнюю сформированную строку символов.
mean * – возвращает среднее арифметическое значение списка.
Принимает на вход список чисел, складывает значения всех его элементов, делит полученную сумму на количество элементов и подает результат на выход.
* Конфликтует с одноименным объектом из библиотеки Cyclone\Hammer.
minmax – ищет минимальное и максимальное значение в списке.
Принимает на вход список чисел, максимальное значение подает на правый выход, минимальное – на левый.
demultiplex , = demux – маршрутизатор
Принимает на вход любые сообщения, подает их на тот выход, номер которого получен на правый вход (начиная с нулевого и заканчивая N–1, где N – номер последнего аргумента).
Количество выходов определяется количеством аргументов.
sort – сортирует элементы списка.
Принимает на вход список чисел, сортирует его по возрастанию (если аргумент >= 0) или по убыванию (если аргумент < 0), отсортированный список подает на выход.
По умолчанию, направление сортировки – возрастающее; оно может быть изменено с помощью сообщения, принятого на правый вход.
repeat – повторяет любые поступающие сообщения N раз, где N – число, указанное в аргументе (или полученное на правый вход).
Объект будет работать только в том случае, если указан аргумент.
wrap * – заключает поступающие числа в установленные пределы, находя для каждого числа соответствующий эквивалент в этих пределах.
При превышении поступающими числами значения второго аргумента (верхней границы диапазона) открывает новый цикл с нижней границы последовательности (заключенной в пределах диапазона), т.е. двигается вверх, а при падении ниже значения первого аргумента (нижней границы диапазона) открывает новый цикл с верхней границы последовательности, двигаясь вниз.
Т.о. поток линейно увеличивающихся чисел превращается в пилообразные колебания.
См. также [rewrap] из библиотеки Maxlib и встроенный объект [wrap~].
* Конфликтует с одноименным объектом из библиотеки Iemlib.
Прочие объекты библиотеки Zexy:
sfplay, sfrecord – чтение/запись аудио-файлов с жесткого диска (разработчик: Winfried Ritsch).
pdf~ – функция плотности (распределения) вероятности.
nop~ – не выполняет никаких функций (задерживает сигнал на 1 блок).
<~, >~, ==~ – операторы сравнения сигналов (меньше, больше, равно). Могут использоваться для генерации прямоугольных колебаний на основе синусоидальных. См. также [<=~], [>=~] и [!=~] из библиотеки Cyclone/ Cyclone.
&&~, ||~ – логические И/ИЛИ для сигналов.
pack~, unpack~ – преобразует сигнал в список чисел и наоборот.
matrix~ – умножает n входных сигналов на матрицу чисел для получения m выходных сигналов.
atoi – преобразует ascii коды в числа.
date, time – возвращает системную дату/время (местное/по Гринвичу).
index – индексирует слова (назначает им определенные индексы), см. также [iem_sel_any] и [iem_pbank_csv] из библиотеки Iemlib и [coll] из библиотеки Cyclone/Hammer.
drip – подает на выход весь список в разобранном виде (по элементам).
mavg – фильтр скользящей средней.
deg2rad, rad2deg – преобразует градусы в радианы и наоборот.
cart2pol, pol2cart – преобразует прямоугольные координаты в полярные и наоборот.
cart2sph, sph2cart – преобразует прямоугольные координаты в сферические и наоборот.
pol2sph, sph2pol – преобразует полярные координаты в сферические и наоборот.
nop – не выполняет никаких функций, пропуская через себя любые сообщения.
strcmp – сравнивает списки как строки символов
. – поэлементно перемножает два списка чисел
msgfile – многофункциональная версия текстового редактора [textfile].
matrix, mtx – создает, запоминает, сохраняет матрицы чисел
mtx_row – устанавливает строки матрицы
mtx_col – устанавливает колонки матрицы
mtx_element – устанавливает значения элементов матрицы
mtx_eye – единичная матрица
mtx_egg – единичная матрица, перевернутся на 90°
mtx_ones – матрица со значениями всех элементов = 1
mtx_zeros – матрица со значениями всех элементов = 0
mtx_rand – матрица с произвольными значениями элементов
mtx_diag – диагональная матрица
mtx_diegg – диагональная матрица, перевернутся на 90°
mtx_trace – возвращает след матрицы (= сумма диагональных элементов)
mtx_inverse – обратная матрица
mtx_transpose – транспонирует матрицу
mtx_scroll – сдвигает строки матрицы
mtx_roll – сдвигает колонки матрицы
mtx_pivot – pivot-transform a matrix
mtx_add, mtx_+ – складывает две матрицы
mtx_mul – перемножает две матрицы
mtx_.* – умножает матрицу на скалярную величину
mtx_* – поэлементно перемножает две матрицы
mtx_./ – делит матрицу на скалярную величину, поэлементно делит 2 матрицы
mtx_mean – возвращает список чисел со средними значениями колонок
mtx_check – воссоздает недостающие элементы матрицы
mtx_print – выводит содержимое матрицы в окно терминала
aenv~ – генератор амплитудной огибающей.
При поступлении на левый вход любого числа, отличного от 0, подает на выход сигнал амплитудной огибающей со следующими фазами:

На левый вход также принимает следующие сообщения:
<0> – отжатие клавиши (при поступлении этой команды огибающая примет фазу Release – затухания, и амплитуда сигнала начнет опускаться вниз до нуля).
<lina> – линейная атака (если [aenv~] получил этот параметр, то при поступлении на вход любого, отличного от нуля числа уровень амплитуды сигнала будет линейно возрастать, пока не достигнет максимальной отметки);
<loga> – логарифмическая атака (установлена по умолчанию);
<zero> – мгновенное сокращение амплитуды сигнала до нуля (в какой бы фазе не находилась огибающая, значение амплитуды сигнала будет обращено в 0).
Библиотека Ben Saylor.
Библиотекa Cyclone/Hammer:
Подробную справку по всем объектам библиотеки Cyclone можно получить в официальной документации к программе Max/MSP (см. на сайте www.cycling74.com).
Библиотека Cyclone/Hammer включает в себя объекты управления сообщениями (для работы с сигналами предназначена библиотека Cyclone/Sickle).
accum – накапливает сумму и/или произведение чисел нарастающим итогом.
При поступлении на левый вход числа, очищает память, запоминает это число и подает его на выход.
Числа, поступающие на средний вход, прибавляются нарастающим итогом к числу, находящемуся в памяти объекта. Результирующая сумма на выход не подается.
Числа, поступающие на правый вход, умножаются нарастающим итогом на число, находящееся в памяти объекта. Результирующая сумма на выход не подается.
При поступлении на вход команды <bang> число, находящееся в памяти объекта, будет подано на выход.
Начальное значение можно указать в аргументе.
active – аналог [loadbang] для подчиненных заплаток.
При открытии (или активации) окна, содержащего этот объект, подает на выход единицу, при закрытии (или смене активного окна) – нуль.
Append * – аналог сообщения <add2 $N>.
Принимает на вход любые сообщения, добавляет справа через пробел значение аргумента и подает результат на выход в виде списка (с атрибутом list или anything).
Сообщения типа symbol пропускает без изменения (ничего не добавляя).
Значение аргумента можно изменять динамически, подавая на вход команду <set аргумент1 аргумент2 … >.
См. также [iem_append], [iem_prepend] и [merge_any] из библиотеки Iemlib, [prepend] и [zl] из библиотеки Cyclone/Hammer.
* Конфликтует со встроенным объектом [append].
prepend * – то же, что и [Append] из библиотеки Cyclone/Hammer, но добавляет новый элемент в начало сообщения, а не в конец.
См. также [iem_append], [iem_prepend] и [merge_any] из библиотеки Iemlib и [zl] из библиотеки Cyclone/Hammer.
При поступлении на вход любого сообщения подает на все N выходов (в порядке справа налево) команду <bang>, где N – значение аргумента.
counter * – счетчик
В зависимости от количества аргументов может работать в одном из 4-х различных режимов:
0 (без аргументов): по команде <bang>, принятой на левый вход, подает на левый выход число (начиная с 1), большее предыдущего на единицу (ведя целый счет от 1 до бесконечности, = 231).
1 (<максимум>): по команде <bang> будет подавать на левый выход число (начиная с 1), большее предыдущего на единицу, до тех пор, пока не достигнет значения, указанного в аргументе, после чего подаст номер цикла счетчика на правый выход, <1> (свидетельствующую о достижении верхнего предела цикла) – на второй выход справа, и само значение аргумента – на левый выход. По следующей команде <bang> счетчик обнулится, подаст <0> на второй выход справа, и начнет отсчет заново уже с нуля.
2 (<минимум> <максимум>): работает так же, как и с одним аргументом, но за нижний предел принимается не единица, а число, указанное в первом аргументе, за верхний – во втором.
По команде <bang> будет подавать на левый выход число, большее предыдущего на единицу (изначально – значение первого аргумента) до тех пор, пока не достигнет максимального значения, указанного во втором аргументе, после чего подаст номер цикла счетчика на правый выход, <1> (свидетельствующую о достижении верхнего предела) – на второй выход справа, и само значение аргумента – на левый выход. По следующей команде <bang> счетчик обнулится, подаст на второй выход справа <0> (свидетельствующий о достижении нижнего предела), и начнет отсчет заново со значения первого аргумента.
3 (<направление> <минимум> <максимум>): работает также, как и с двумя аргументами, но может вести счет в возрастающем и/или убывающем порядке, определяемом значением первого аргумента:
<0>– возрастающий порядок: 2,3,4, 1,2,3,4, 1,2,3,4, …
<1> – убывающий порядок: 3,2,1, 4,3,2,1, 4,3,2,1, …
<2> – сначала возрастающий, затем убывающий:
2,3,4, 3,2,1, 2,3,4, 3,2,1, …
В режиме <2> (поочередного возрастания-убывания) счетчик будет подавать на второй выход справа <1> – при достижении верхнего предела и <0> – при начале счета на убывание, а на второй выход слева <1> – при достижении нижнего предела и <0> – при начале счета на возрастание.
Эквивалентом <bang> является любое число, полученное на левый вход или команда <next>.
Перевести счетчик в тот или иной режим работы можно с помощью соответствующих сообщений:
Вход 1:
<up> – возрастающий порядок счета.
<down> – убывающий порядок счета.
<updown> – возрастающий–убывающий порядок счета.
<set N> = <goto N>– устанавливает позицию счетчика на N.
<jam N> – подает на выход число N, если оно входит в диапазон от минимума до максимума (позиция счетчика не изменяется).
<dec> – подает на выход число, меньшее предыдущего на 1 (позиция счетчика устанавливается на это число, направление счета не изменяется).
<inc> – подает на выход число, большее предыдущего на 1 (позиция счетчика устанавливается на это число, направление счета не изменяется).
<min N> – устанавливает нижний предел (и текущую позицию) счетчика на N, одновременно подавая на выход это число.
<max N> – устанавливает верхний предел счетчика на N.
<carrybang> – устанавливает режим, в котором при отсчете на выход будут отправляться только 3 побочных сообщения (помимо самих значений отсчета):
– при достижении максимума: номер цикла счетчика (на правый выход) и <bang> (на второй выход справа).
– при достижении минимума: <bang> (на второй выход слева).
<carryint> – отменяет действие <carrybang>.
Вход 2:
<bang> – меняет направление счета (вверх или вниз).
<N> – устанавливает направление счета (0 – вверх, 1 – вниз, 2 – вверх и вниз).
Вход 3:
<N> – устанавливает позицию счетчика на N
если N < min, min = N,
если N > max, ничего не происходит.
Вход 4:
<N> – если N входит в диапазон от минимума до максимума устанавливает позицию счетчика на N, одновременно подавая на выход это число.
Вход 5:
<N> – устанавливает максимум на N.
если N < min, max=min (на выход будет подаваться только одна позиция счетчика – текущий нижний предел).
См. также [exp_inc] и [modulo_counter] из библиотеки Iemlib.
* Конфликтует с одноименным объектом из библиотеки GEM.
decide – генератор псевдо-случайного выбора единицы или нуля, аналог [random].
При поступлении на левый вход числа или команды <bang> на выход будет отправлена единица или нуль.
[decide] может генерировать только псевдо-случайные числа, т.е. при каждом новом открытии заплатки, [decide] будет выдавать одну и ту же последовательность "случайных" единиц и нулей. Случайность зависит от параметра "seed" (начального числа), указанного в аргументе (или полученного на правый вход). Если двум различным объектам [decide] отправить одно и то же зерно (начальное число), то оба объекта будут выдавать одну и ту же последовательность "случайных" чисел.
forward – то же, что и [send], но может изменять динамически значение аргумента.
Принимает на вход любое сообщение (число, текст, список) и отправляет его объекту [receive], имеющему тот же аргумент (даже если ресивер находится в подчиненном окне).
Значение аргумента можно изменять динамически, подавая на вход команду <send A>, где A – новое имя ресивера.
tosymbol – преобразует сообщение любого типа в строку символов.
Если на вход поступил список, то разделителем слов результирующей строки по умолчанию будет знак пробела, который можно заменить на любой знак (#), кроме запятой и точки с запятой, полученный на вход в виде сообщения <separator #>.
См. также [mergefilename] из библиотеки Iemlib.
fromsymbol – преобразует строку символов в список.
Принимает на вход сообщения с атрибутом symbol, разбивает его на составляющие элементы и подает на выход в виде списка (с атрибутом list для чисел и anything для всего остального).
funnel – индексирует поступающие сообщения (добавляя к ним номер входа, на который они поступили).
Принимает на вход сообщение любого типа (кроме anything), определяет номер входа (начиная с нулевого), на который оно поступило, ставит этот номер в начало сообщения, и подает результат на выход в виде списка.
Количество входов можно указать в первом аргументе.
Начальное значение идентификатора входа (которое будет прибавляться к его фактическому номеру) можно указать во втором аргументе.
По команде <bang> подает на выход последнее полученное сообщение.
См. также [listfunnel] из библиотеки Maxlib.
gate * – выходной затвор.
Принимает на правый вход любые сообщения (числа, текст, список) и отправляет их на тот выход, который указан в сообщении, поступившем на левый вход.
Если на левый вход поступил 0, все выходы будут закрыты и сообщения отправляться не будут (по умолчанию затвор закрыт).
Число выходов определяется значением аргумента.
* Конфликтует с [gate] из библиотеки Iemlib.
switch – входной затвор.
На левый вход принимает номер открытого входа, через который будет подавать на выход любые поступающие сообщения (числа, текст, список), остальные входы будут закрыты.
Если на левый вход поступило число 0, все входы будут закрыты и сообщения приниматься не будут (по умолчанию затвор закрыт).
Число входов определяется значением аргумента.
acos – возвращает значение функции арккосинуса (для -1 d x d 1, - ¶ d y d ¶).
asin – возвращает значение функции арксинуса (для -1 d x d 1, - ¶ d y d ¶).
anal – создает гистограмму пар чисел (считает количество одинаковых пар чисел, в которых последующее число равно предыдущему).
bondo – синхронизирует потоки сообщений (при поступлении нового сообщения на один из входов, подает на выход все хранящиеся в памяти сообщения).
См. также [sync] из библиотеки Maxlib и [buddy] из библиотеки Cyclone/Hammer.
buddy – синхронизирует потоки сообщений (отправляет сообщения на соответствующие выходы только после того, как на все входы объекта будут получены новые сообщения).
См. также [sync] из библиотеки Maxlib и [bondo] из библиотеки Cyclone/Hammer.
Borax – Анализирует поступающие MIDI-сообщения, то же, что и [borax] из библиотеки Maxlib.
Принимает на вход midi-ноты (пары чисел высота–громкость), анализирует их и подает на выход информацию о количестве полученных note-on сообщений, назначенном голосе текущей ноты, количестве удерживаемых нот, высоте, громкости текущей ноты, количестве полученных note-off сообщений, длине текущей ноты (мс), времени (в мс) с момента получения последнего note-on сообщения (=delta time) и др.
Bucket – каждое предыдущее поступившее число отправляется сначала на левый выход, в следующий раз – на второй выход слева, затем – на третий выход слева и т.д. до последнего выхода.
capture – средство отладки. Запоминает поступающие числа и списки чисел, по команде <dump> подает все содержимое на выход. Имеет возможность просмотра и редактирования полученных сообщений в специальном окне текстового редактора с сохранением данных во внешний файл.
cartopol – аналог [cart2pol] из библиотеки Zexy (преобразует прямоугольные координаты в полярные).
Принимает на левый вход – действительную часть, на правый – мнимую. Подает на левый выход – амплитуду, на правый – фазу (в радианах) синусоиды.
poltocar – аналог [pol2cart] из библиотеки Zexy (преобразует полярные координаты в прямоугольные).
Принимает на левый вход – амплитуду, на правый – фазу (в радианах) синусоиды. Подает на левый выход – действительную часть, на правый – мнимую.
Clip – аналог встроенного объекта [clip], но с возможностью обработки списков чисел.
См. также [limit] из библиотеки Maxlib.
cosh – возвращает значение функции гиперболического косинуса:
cosh(x) = (ex + e-x)/ 2.
comment – создание комментариев с возможностью изменения гарнитуры, размера шрифта, кодировки, цвета и других параметров.
cycle – распределяет сообщения по соответствующим выходам (в зависимости от природы поступившего сообщения и/или его типа): если они исходят от пользователя (через элементы графического интерфейса, через MIDI-интерфейс и др.) или проходят через линию задержки, то каждое новое "событие" (сообщение) будет подаваться на новый выход; если это список – то его элементы будут распределяться по соответствующим выходам в зависимости от номера элемента списка.
Decode – иерархический переключатель (тумблер):
На правый вход принимаются сообщения для выключения главного тумблера и отправки <0> на все выходы или возврата в предыдущее состояние (до выключения),
На средний вход принимаются сообщения для включения главного тумблера и отправки <1> на все выходы при условии, что главный тумблер не выключен, или возврата в предыдущее состояние (до включения).
На левый вход принимаются сообщения для включения отдельного выхода и отправки на него <1>, а на остальные – <0>, при условии, что главный и средний тумблеры не активизированы (иначе на все выходы – <0> или <1>).
drunk – генератор псевдо-случайного отклонения от заданного числа:
При поступлении на вход команды <bang> подает на выход число, отличающееся от предыдущего в большую или меньшую степень в пределах числа, указанного во втором аргументе (или полученного на правый вход). Число указанное в первом аргументе (или принятое на средний вход) служит максимумом, который никогда не будет превышен.
flush – пропускает через себя пары чисел высота–громкость и по команде <bang> подает на выход note-off сообщения для всех удерживаемых нот (т.е. для тех нот, которые еще не были отжаты = не были сопровождены нулевой громкостью).
Histo – ведет статистику поступающих чисел.
Считает, сколько раз поступало на левый вход то или иное число, находящееся в диапазоне от 0 до значения аргумента (если число не умещается в этот диапазон, оно будет проигнорировано).
Числа, поступающие на правый вход не участвуют в статистическом анализе.
iter – аналог [drip] из библиотеки Zexy. Разбивает поступающий список (любого типа) на элементы.
match – ищет совпадения между поступающими сообщениями и значениями аргументов и порядком их поступления на вход.
Принимает на вход любые сообщения, сравнивает их с теми, что указаны в аргументах (или получены на вход в виде сообщения <set A>), и, если они совпадают и получены в той же последовательности, что указаны аргументы, на выход будет отправлено значение аргумента.
То же, что и [match] из библиотеки Maxlib.
maximum – аналог [minmax] из библиотеки Zexy.
При поступлении списка на левый вход ищет среди его элементов наибольшее значение и подает его на выход, устанавливая значение максимума (для последующего сравнения) на число, предшествующее по величине наибольшему в списке.
При поступлении на левый вход числа сравнивает его с текущим максимумом, значением аргумента или числом, полученным на правый вход, наибольшее из них подает на выход.
По команде <bang> подает на выход последнее максимальное значение.
minimum – аналог [minmax] из библиотеки Zexy.
При поступлении списка на левый вход ищет среди его элементов наименьшее значение и подает его на выход, устанавливая значение минимума (для последующего сравнения) на число, следующее по величине за наименьшим в списке.
При поступлении на левый вход числа сравнивает его с текущим минимумом, значением аргумента или числом, полученным на правый вход, наименьшее из них подает на выход.
По команде <bang> подает на выход последнее минимальное значение.
mean * – скользящее среднее.
При поступлении на вход списка складывает все его элементы, делит полученную сумму на количество элементов в этом списке и подает результат на левый выход. На правый выход отправляет количество элементов в списке.
При поступлении на вход числа, складывает его с предыдущими полученными числами, делит результат на общее количество полученных чисел и подает результат на левый выход. На правый выход отправляет общее количество полученных чисел.
Очистить память объекта можно с помощью команды <clear>.
Последнее рассчитанное среднее можно подать на выход с помощью команды <bang>.
* Конфликтует с одноименным объектом из библиотеки Zexy
.
midiflush – то же, что и [flush] из библиотеки CYCLONE/Hammer, но для работы с "чистыми" MIDI данными.
Пропускает через себя пары чисел высота–громкость и по команде <bang> подает на выход note-off сообщения для всех удерживаемых нот.
midiformat – формирует цельные MIDI-сообщения с информацией о высоте ноты, громкости, силе нажатия клавиши (polyphonic aftertouch), номере нажатой клавиши, значении контроллера, номере контроллера, голосе MIDI-синтезатора (program), общей для всей клавиатуры силе нажатия (channel aftertouch), относительной высоте ноты (pitch band) и номере канала.
В аргументе можно указать номер канала MIDI устройства.
midiparse – разбивает цельные MIDI-сообщения на составляющие элементы.
Принимает на вход цельные MIDI-сообщения и подает на правый выход номер канала, на второй выход справа – относительную высоту ноты (pitch band), на третий выход справа – общую для всей клавиатуры силу нажатия (channel aftertouch), на средний (четвертый) выход – голос MIDI-синтезатора (program), на третий выход слева – значение и номер контроллера, на второй выход слева – силу нажатия клавиши (polyphonic aftertouch) и ее номер, и на левый выход – высоту и громкость MIDI-ноты.
mousefilter – пропускает через себя числа только в том, случае если ни одна из кнопок мыши не нажата, иначе игнорирует их.
MouseState – отслеживает перемещение указателя мыши на экране монитора.
В зависимости от принятого на вход сообщения может работать одном из 2-х режимов:
<poll> – непрерывно подает на выход сведения о положении мыши;
<nopoll> – отправляет на выход координаты указателя мыши только по команде <bang>.
При каждом нажатии кнопки мыши (вне зависимости от режима) посылает на левый выход единицу, при отжатии – нуль.
На второй выход слева отправляет горизонтальную координату указателя мыши на экране монитора (в пикселях),
По умолчанию за начало координат (0;0) принимается точка в левом верхнем углу монитора. Ее можно изменить с помощью команды <zero>, – тогда за начало отсчета будет принято текущее положение указателя мыши, и вернуть в исходное состояние с помощью команды <reset>.
См. также [grid] от Yves Degoyon.
mtr – многодорожеченый секвенсор (количество дорожек определяется значением аргумента минус 1).
Принимает на вход любые сообщения, по команде <record> записывает их в той же последовательности, в которой они поступили, по команде <stop> останавливает запись, по команде <play> начинает проигрывать эту запись на той же скорости, на которой она была получена (номер выхода, с которого будут отправляться записанные сообщения, определяется номером входа, на который они были получены).
Записанную секвенцию можно сохранить во внешний файл (с помощью команды <write>) или загрузить из файла (с помощью команды <read>) как для отдельной дорожки, так и для всех дорожек сразу.
По команде <mute> перестает подавать на выход записанные сообщения, не останавливая при этом их проигрывание.
next – определяет принадлежность поступающих сообщений к одному и тому же логическому событию.
Событием может быть несколько сообщений, указанных через запятую, нажатие кнопки мыши, поток сообщений от одного "перетаскивания" (мыши по индикатору чисел), запланированное сообщение (отправленное в положенное время метрономом, линией задержки), MIDI-событие, событие клавиатуры, и др.
offer – аналог [index] из библиотеки Zexy но для чисел (а не символов).
Принимает на вход пары чисел <x y>, запоминает второй элемент (y) под индексом первого (x) и при поступлении на вход числа ищет его среди первых элементов (x) полученных пар чисел: в случае успеха подает на выход значение y, соответствующее данному x, и удаляет пару из памяти, в противном случае – ничего не делает.
onebang – пропускает принятую на левый вход команду <bang> только в том случае, если на правый вход поступило соответствующее разрешение в виде команды <bang> (с каждым принятым на правый вход <bang> на выход будет отправлен только один <bang>). Остальные команды <bang> будут игнорироваться.
past – подает на выход команду <bang>, если поступившее на вход число или элементы поступившего списка больше либо равны значениям соответствующих аргументов.
Peak – ищет динамический максимум.
Подает на левый выход числа, превосходящие максимальное значение, установленное числом, полученным на правый вход (или числом, полученным на левый вход, превосходящим последнее максимальное значение).
Подает на средний выход единицу (если установлен новый максимум) или нуль (если полученное число меньше максимального).
Подает на правый выход нуль, если установлен новый максимум, иначе – единицу.
Trough – ищет динамический минимум.
Подает на левый выход числа, меньшие минимального значения, установленного числом, полученным на правый вход (или числом, полученным на левый вход, меньшим последнего минимального значения).
Подает на средний выход единицу (если установлен новый минимум) или нуль (если полученное число больше минимального).
Подает на правый выход нуль, если установлен новый минимум, иначе – единицу (если полученное число больше минимального).
prob – генерирует цепочку чисел Маркова первого порядка.
При поступлении на вход списков чисел <A B P1>, <A C P2>, <A D P3> и т.д. (где первый элемент списка – значение текущего звена цепочки, второй – один из вариантов следующего за ним звена, третий (P) – вероятность смены текущего звена последующим в процентах), создает матрицу распределения вероятностей перехода числа A в B, A в C, A в D и т.д.
По команде <bang> на основе текущего звена цепочки и вероятности (P %) его смены одним из возможных звеньев на левый выход будет отправлено выбранное на удачу последующее звено (если для текущего звена существуют варианты замены), иначе (если текущее звено – последнее в цепочке) подаст на правый выход команду <bang>.
Память объекта можно очистить с помощью сообщения <clear>.
Создать цикл возврата к числу N при достижении последнего звена в цепочке можно с помощью сообщения <reset N>.
Текущее звено цепочки можно установить на число N, отправив это число на вход объекта.
Матрицу распределения вероятностей можно увидеть в окне терминала, если отправить на вход сообщение <dump>.
Для того, чтобы сохранить матрицу вместе с заплаткой, необходимо отправить сообщение <embed N>, где N – любое отличное от нуля число. Чтобы вернуться к обычному состоянию объекта (без сохранения матрицы в текущем файле), необходимо отправить сообщение <embed 0>.
sinh * – возвращает значение функции гиперболического синуса.
sinh(x) = (ex – e–x) / 2.
* То же, что и [sinh] из библиотеки Ggext.
speedlim – ограничитель скорости прохождения потока данных.
Принимает на левый вход любые сообщения (числа, текст, списки) с интервалом времени, указанным в аргументе (или полученным на правый вход, в миллисекундах): за один промежуток времени на выход будет отправлено только одно сообщение (остальные будут проигнорированы).
Имеет одноименные аналоги в библиотеках Maxlib и Iemlib.
spell – разбивает поступающие сообщения на отдельные символы, преобразуя их в ASCII коды и подавая на выход в виде отдельного сообщения (знак пробела = 32).
split * – числа, входящие в диапазон, подаются налево, остальные – направо.
Если поступившее на левый вход число входит в уставленный диапазон, оно будет отправлено на левый выход, если нет, – то на правый.
Нижний предел диапазона устанавливается в первом аргументе (или в сообщении, полученном на средний вход), верхний – во втором (или в сообщении, полученном на правый вход).
Может выполнять те же функции, что и [moses], если задан только один аргумент.
В случае, если в первом аргументе указано целое число, объект будет работать только с целыми числами (десятичные части у дробей будут отсекаться).
* Конфликтует с одноименными объектами из библиотеки Iemlib и Maxlib.
spray – разбивает список чисел на отдельные элементы (элементы типа symbol будут пропущены).
Первый элемент поступившего на вход списка отождествляется с номером выхода (начиная с нулевого), на который будет отправлен следующий за ним (второй) элемент этого списка. Остальные элементы будут отправлены на соответствующие выходы в зависимости от номеров их позиций в списке.
Количество выходов задается в первом аргументе (по умолчанию 2).
Во втором аргументе можно указать сдвиг всех фактических номеров выходов – это число будет вычитаться из первого элемента списка. Например, сдвинув все выходы на единицу влево, нумерация будет начинаться не с нулевого выхода, а с первого.
sprintf – формирует сообщения любого типа с неограниченным числом переменных (как числовых, так и символьных).
Номер переменной в строке-шаблоне определяет номер элемента поступившего на левый вход списка, который будет вставлен вместо этой переменной:
%s – символьная переменная
%f – числовая переменная
%ld – числовая переменная для целых чисел
%c – числовая переменная с заменой числа на ASCII символ.
substitute – заменяет элементы списка
Принимает на вход любые сообщения, ищет в них строку (или число), указанную в первом аргументе, если такая строка (или число) имеется, заменяет ее на строку (или число), указанную во втором аргументе, и подает сообщение на левый выход.
Если строка (или число) для замены не найдена, подает сообщение без изменений на правый выход.
sustain – удерживает note-off сообщения.
Пропускает через себя note-on сообщения (MIDI-ноты с громкостью ` 0): на средний вход принимает громкость (velocity) MIDI-ноты, на левый – высоту (pitch) этой ноты.
В зависимости от установленного режима может:
tanh – возвращает значение функции гиперболического тангенса:
tanh(x) = sinh(x) / cosh(x) = (ex – e-x) / (ex + e-x).
thresh – формирует список чисел и/или символов "на лету".
Принимает на вход базовые типы сообщений (float, symbol, list) и прикрепляет их справа через пробел к текущему сообщению (находящемуся в памяти объекта). Если в течение времени, указанного в аргументе (в миллисекундах) или полученного на правый вход, не поступило ни одного нового сообщения, подает сформированный список на выход и очищает память.
См. также [repack] из библиотеки Zexy и [serialize] из библиотеки Ggext.
togedge – выявляет чередование чисел: нуль – не нуль.
Подает на левый выход команду <bang> при поступлении на вход отличного от нуля числа в случае, если предыдущим числом был нуль.
Подает на правый выход команду <bang> при поступлении на вход нуля в случае, если предыдущим числом был не нуль.
При поступлении на вход команды <bang> подает ее сначала на левый выход, в следующий раз – на правый, и т.д..
Числа с дробной частью игнорируются.
universal – отправляет сообщения объектам конкретного класса.
Принимает на вход список, первым элементом которого является наименование класса объекта (напр. <print>, <float>, <makenote> и т.д.), остальными – сообщение, которое необходимо отправить всем объектам этого класса.
Если аргумент не указан, отправляет сообщения только тем объектам, которые находятся на одном уровне вложенности с объектом [universal] (подчиненным объектам сообщения не отправляются).
Если в аргументе указана единица, отправляет сообщения всем объектам, даже тем, которые находятся абстракциях.
urn – генератор неповторяющихся псевдо-случайных чисел.
Работает так же, как [random], но без повторов.
Когда резерв свободных чисел для псевдо-случайного выбора будет исчерпан, подаст на правый выход команду <bang> и откроет новую выборку "случайных" чисел.
Открыть новую выборку (т.е. очистить память объекта) можно принудительно с помощью команды <clear>, отправленной на левый вход.
См. также [shuffle] из библиотеки Motex.
Uzi – многофункциональная версия объекта [until] с возможностью указания в аргументе количества выстрелов <bang>, подаваемых на левый выход, и получения дополнительной информации о номере текущего выстрела .
xbendin – принимает на вход "цельные" (необработанные) MIDI-сообщения, определяет относительную высоту проигрываемых нот (pitch bend) и посылает ее в битовом выражении на левый выход, а номер канала MIDI-ноты – на правый.
xbendout – принимает на левый вход 14-битное значение относительной высоты проигрываемых MIDI-нот (pitch-bend сообщение), на правый – номер канала, после чего подает на выход "цельное" pitch-bend сообщение.
xnotein – принимает на вход "цельные" (необработанные) MIDI-сообщения и подает на выход значения высоты (pitch), громкости (velocity), признак нажатия/отжатия клавиши и номер канала полученных MIDI-нот.
xnoteout – исходя из высоты (pitch), громкости (velocity), нажатия/отжатия клавиши и номера канала полученных MIDI-нот подает на выход "цельные" MIDI-сообщения.
zl – мощное средство работы со списками.
В зависимости от установленного режима работы может:
grab – отправляет объектам поступающие сообщения и перехватывает возвращаемые ими сообщения.
Принимает на вход любые сообщения, отправляет их на правый выход, соединенный с левым входом другого объекта, ждет пока этот объект не возвратит какое-либо сообщение, перехватывает это сообщение и посылает его на те выходы, на которые оно должно было быть отправлено у родного объекта (левый выход [grab] соответствует левому выходу другого объекта, и т.д.).
Количество выходов [grab] указывается в первом аргументе (по умолчанию: 2).
Если у [grab] указан второй аргумент, сообщения будут отправляться объекту [receive], имеющему тот же аргумент. При этом крайний справа выход [grab] потеряет свое начальное предназначение.
Значение второго аргумента A можно установить с помощью сообщения <set A>.
funbuff – средство редактирования списков чисел.
Принимает на вход пары чисел (индекс – значение), запоминает их, подает значение на выход при поступлении на вход соответствующего индекса.
Включает в себя следующие функции:
coll – средство хранения и обработки сообщений любого типа.
Сохраняет в памяти любые сообщения, присваивая им уникальные индексы (идентификаторы). Прочитать сообщение можно по его индексу или идентификатору, отправленному на вход объекта в виде числа (float) или символа (anything).
Включает в себя следующие функции:
См. также [index] из библиотеки Zexy, [iem_sel_any] и [iem_pbank_csv] из библиотеки Iemlib.
linedrive – переводит линейные единицы в экспоненциальные и подает на выход в виде списка из двух чисел для формирования амплитудной огибающей объектом [Line~] (второй элемент списка – время в миллисекундах, полученное на правый вход или указанное в четвертом аргументе).
Первый аргумент – максимальное значение, которое может быть получено на левый вход.
Второй аргумент – максимальное значение, которое может быть отправлено на выход (первым элементом списка).
Третий аргумент – форма экспоненциальной кривой (>1).
Четвертый аргумент – начальное время в миллисекундах для формирования огибающей объектом [Line~]. Может быть изменено сообщением, полученным на правый вход.
Библиотекa Cyclone/Cyclone:
!-~, !/~ – то же, что и встроенные объекты [-~] и [/~], но с обратным порядком действия: левый и правый входы (операнды) переставлены местами.
<~, >~, ==~ – то же, что и [<~], [>~] и [==~] из библиотеки Zexy: операторы сравнения сигналов.
<=~, >=~, !=~ – меньше (больше) либо равно и не равно для сигналов.
%~ – то же, что и [%], но для сигналов: ищет остаток от деления двух сигналов.
+=~ – складывает нарастающим итогом значения семплов поступающего на вход сигнала. Текущую (накопленную) сумму подает на выход в виде сигнала.
По команде <bang>, принятой на левый вход обнуляет текущую сумму.
!-, !/ – то же, что и встроенные объекты [-] и [/], но с обратным порядком действия: левый и правый входы (операнды) переставлены местами.
Библиотекa Cyclone/Sickle:
Содержит объекты обработки сигналов.
abs~ – то же, что и [abs~] от Zexy
.
Подает на выход абсолютное (неотрицательное) значение поступающего аудио-сигнала.
acos~ – подает на выход значение функции арккосинуса в виде сигнала (с амплитудой от –¶ до +¶). Может использоваться для генерации сигнала с треугольной формой волны на основе синусоидальных колебаний [osc~].
acosh~ – подает на выход значение функции гиперболического арккосинуса в виде сигнала. Может использоваться для генерации пилообразных колебаний с логарифмическим ростом на основе линейных пилообразных колебаний [phasor~].
asin~ – подает на выход значение функции арксинуса в виде сигнала (с амплитудой от –¶/2 до +¶/2). Может использоваться для генерации сигнала с треугольной формой волны на основе синусоидальных колебаний [osc~].
asinh~ – подает на выход значение функции гиперболического арксинуса в виде сигнала. Может использоваться для генерации пилообразных колебаний с логарифмическим ростом на основе линейных пилообразных колебаний [phasor~].
atan~ – подает на выход значение функции арктангенса в виде сигнала. Может использоваться для составления фазочастотной характеристики сигнала на основе его коэффициентов разложения, полученных в результате прямого дискретного преобразования Фурье [rfft~]:
Фаза синусоиды = atan (коэффициент при sin / коэффициент при cos).
См. также [atan2~] из библиотеки Cyclone/Sickle.
atanh~ – подает на выход значение функции гиперболического арктангенса в виде сигнала.
atan2~ * – то же, что и [atan~] из библиотеки Cyclone/Sickle, но возвращает значение функции арктангенса на основании двух переменных, а не одной.
Принимает на правый вход значение переменной y, на левый – x. Подает на выход значение функции арктангенса atan(x/y) в радианах.
Может использоваться для получения фазы синусоиды из мнимой части ее комплексного представления (см. также встроенный объект [rfft~]).
* Конфликтует с одноименным объектом из библиотеки Ggext.
average~ – вычисляет среднюю амплитуду сигнала для каждых N семплов.
Размер окна N может быть указан в первом аргументе или получен на вход в виде числа.
В зависимости от принятого на вход сообщения (или значения второго аргумента) может работать в одном из 3-х режимов:
<bipolar> – вычисляет среднее арифметическое значение амплитуды сигнала на интервале N семплов.
<absolute> – вычисляет среднее арифметическое абсолютное значение амплитуды сигнала на интервале N семплов.
<rms> – вычисляет среднеквадратическую (RMS) амплитуду сигнала (возводит значения N семплов в квадрат и извлекает квадратный корень из их суммы). Более требователен к ресурсам ЦП.
По умолчанию, работает в режиме <bipolar> на интервале 100 семплов.
Подает на выход каждые N / SR секунд (где SR – частота дискретизации, по умолчанию = 44100 Гц) среднюю амплитуду сигнала в виде числа.
См. также [avg~] из библиотеки Zexy.
avg~ * – аналог [tavg~] из библиотеки Zexy
.
Вычисляет среднее арифметическое абсолютное значение амплитуды сигнала на промежутке времени между двумя командами <bang>, полученными на левый вход.
* Конфликтует с одноименным объектом из библиотеки Zexy.
bitand~ – поразрядное (побитовое) И для аудио-сигналов.
Если биты обоих входных сигналов (с левого и правого входов) равны 1, то бит выходного сигнала будет равен 1, иначе – 0. На выход подается сигнал, состоящий из итогового набора двоичных разрядов.
bitor~ – поразрядное (побитовое) ИЛИ для аудио-сигналов.
Если бит хотя бы одного сигнала (с левого или правого входа) равен единице, то бит выходного сигнала = 1, иначе – 0. На выход подается сигнал, состоящий из итогового набора двоичных разрядов.
bitnot~ – поразрядная (побитовая) инверсия аудио-сигнала.
Все биты со значением единицы приравниваются к нулю, а биты со значением нуля – к единице.
bitshift~ – сдвиг разрядов аудио-сигнала.
Положительный аргумент приведет к сдвигу разрядов влево, отрицательный – вправо. Сдвиг разрядов числа на n позиций равносилен умножению его на 2n.
bitxor~ – поразрядное (побитовое) исключающее ИЛИ для аудио-сигналов.
Если биты обоих входных сигналов (с левого и правого входов) не равны между собой, то бит выходного сигнала будет равен 1, иначе – 0. На выход подается сигнал, состоящий из итогового набора двоичных разрядов.
capture~ – многофункциональная версия объекта [print~].
Выводит значения амплитуд входного сигнала в специальном окне текстового редактора (открывающегося по двойному щелчку мыши).
Предлагает возможность изменения размера буфера (по умолчанию, 4096 семплов), его очистки (команда <clear>), редактирования и сохранения во внешний файл (команда <write>).
cartopol~ – то же, что и [cartopol], но для аудио-сигналов (преобразует прямоугольные координаты в полярные).
Принимает на левый вход – действительную часть синусоиды, на правый – мнимую. Подает на левый выход – амплитуду, на правый – фазу (в радианах) представляемой частоты. Может использоваться для составления АЧХ и ФЧХ сигнала на основе данных Фурье-анализа [rfft~].
См. также [rec2pol~] из библиотеки Motex.
poltocar~ – то же, что и [poltocar], но для аудио-сигналов (преобразует полярные координаты в прямоугольные).
Принимает на левый вход – амплитуду, на правый – фазу (в радианах) представляемой частоты. Подает на левый выход – действительную часть синусоиды, на правый – мнимую. Может использоваться для ресинтеза звуковой волны по ее частотным составляющим (выраженных в амплитудах и фазах) объектом [rifft~].
См. также [pol2rec~] из библиотеки Motex.
change~ – отслеживает изменения амплитуды сигнала.
Если значение амплитуды входного сигнала больше предыдущего значения, на выход будет подана единица (в виде сигнала), если меньше, – то минус единица, если амплитуда входного сигнала не изменилась, – нуль.
Может использоваться для генерации прямоугольных колебаний на основе синусоидальных [osc~].
click~ – импульсно-волновой генератор, аналог [dirac~] из библиотеки Zexy
.
По команде <bang> подает на выход единичный (размером в один семпл) или волновой (размером до 256 семплов) импульс в виде сигнала.
Размер и форму волнового импульса можно установить в аргументе или с помощью команды <set A0 A1 A2 … Ai>, где Ai – значение i-го семпла (i < 256, 0 < Ai < 1) в блоке DSP-обработки.
Clip~ – амплитудный ограничитель сигнала с плавающими уровнями ограничения, аналог объекта [clip~].
Если амплитуда поступающего на левый вход сигнала превышает одну из допустимых границ (установленных в аргументе или полученных на правый и/или средний вход), сигнал будет обрезан по амплитуде.
Минимальный уровень входного сигнала (нижний предел) устанавливается в первом аргументе, либо подается на средний вход (в виде числа и/или сигнала), максимальный уровень (верхний предел) указывается во втором аргументе, либо подается на правый вход (в виде числа и/или сигнала).
cosh~ – подает на выход значение функции гиперболического косинуса в виде сигнала. Может использоваться для генерации волнообразных колебаний на основе линейных пилообразных колебаний [phasor~].
См. также [cosh].
sinh~ – подает на выход значение функции гиперболического синуса в виде сигнала.
См. также [sinh].
tanh~ – подает на выход значение функции гиперболического тангенса в виде сигнала.
См. также [tanh].
cosx~ – отличается от объекта [cos~] тем, что принимает на вход радианы, а не циклы окружности. Возвращает значение функции косинуса в виде сигнала.
sinx~ – возвращает значение функции синуса в виде сигнала. Может использоваться для генерации сигнала с циклоидной (кругообразной) формой волны на основе пилообразных колебаний (с амплитудой от 0 до ¶).
tanx~ – возвращает значение функции тангенса в виде сигнала.
count~ – генератор индексов чтения волновой таблицы.
Генерирует сигнал, значение каждого последующего семпла которого увеличивается на единицу: начиная с нуля (или значения, принятого за минимум) до бесконечности (или значения, принятого за максимум минус один).
Начинает отсчет по команде <bang>, останавливает – по команде <stop>. При остановке счетчик обнуляется (принимает минимальное значение).
Число N, полученное на левый вход, устанавливает нижний предел счетчика на N и запускает новый отсчет. Установить нижний предел счетчика, не запуская новый отсчет, можно с помощью сообщения <min N> (новый минимум вступит в силу начиная со следующего цикла).
При поступлении на правый вход числа M верхний предел счетчика (максимум) будет установлен на это число.
При достижении верхнего предела счетчик обнуляется и начинает отсчет заново с нуля или значения, принятого за минимальное.
Для того, чтобы при каждом включении режима обработки сигналов (DSP=1) счетчик обнулялся (а не продолжал отсчет с текущей позиции), необходимо отправить на левый вход объекта сообщение <autoreset 1>. Вернуть счетчик в обычное состояние (продолжения отсчета после включения DSP) можно с помощью сообщения <autoreset 0>.
Начальные значения нижнего (min) и верхнего (max) пределов счетчика, его текущее состояние (on/off = 1/0) и режим обнуления (autoreset 1/0) можно указать в аргументе или отправить на левый вход в виде сообщения: <min max on/off autoreset 1/0>.
Line~ – генератор линейной развертки (огибающей) сигнала (то же, что и [line~], но может работать по расписанию).
Принимает на левый вход число N (конечную амплитуду выходного сигнала), на правый вход – время T (в миллисекундах), в течение которого будет подавать на левый выход линейно увеличивающийся (или уменьшающийся) по амплитуде сигнал до тех пор, пока его уровень не достигнет N, после чего отправит на правый выход команду <bang>.
Если N поступило на вход раньше, чем T, амплитуда выходного сигнала немедленно примет значение N.
Конечную амплитуду (N) и время развертки (T) удобно подавать на вход в виде списка. При этом, если указать несколько пар чисел N-T (до 64): <N1 T1 N2 T2>, [Line~] создаст расписание и будет формировать огибающую по точкам перегиба N1 и N2 (нечетные элементы списка) в положенное для них время T1 и T2 (четные элементы списка).
При поступлении на вход новой пары чисел N-T все запланированные точки перегиба будут отменены, и начиная с текущего уровня амплитуда выходного сигнала начнет линейно увеличиваться (или уменьшаться), стремясь к новому N.
В аргументе можно указать начальное значение амплитуды выходного сигнала.
См. также встроенный объект [vline~], [linedrive] из библиотеки Cyclone/Hammer и [t3_line~] из библиотеки Iemlib.
curve~ – то же, что и [Line~], но может формировать огибающую с линейным, экспоненциальным и логарифмическим ростом.
Форма огибающей F является обязательным параметром, который принимается на правый вход либо указывается в третьем элементе списка (принимаемого на левый вход и состоящего из менее чем 42*3 элементов):
<N T F>,
где N – конечная амплитуда выходного сигнала (точка перегиба),
T – время формирования огибающей (от текущего значения до точки перегиба),
F – функция огибающей:
Чем ближе будет абсолютное значение F к единице, тем более крутыми будут подъемы и спады огибающей, чем дальше от единицы (= ближе к 0) – тем они будут более пологими (прямолинейными).
Начальные значения амплитуды выходного сигнала и формы огибающей можно указать в первом и втором аргументах соответственно.
cycle~ – генератор периодических колебаний, то же, что и [osc~], но:
delay~ – посемпловая линия задержки сигнала, аналог [z~] из библиотеки Zexy
.
Удерживает входной сигнал на N семплов, указанных во втором аргументе или полученных на правый вход виде числа, не превышающего значения первого аргумента.
Если значение второго аргумента или числа, полученного на правый вход, превышает максимальное время задержки (установленное в первом аргументе, по умолчанию = 512), сигнал будет задержан на установленный максимум.
delta~ – вычитает из каждого последующего значения семпла предыдущее. Может использоваться для грубого усреднения амплитуды сигнала.
deltaclip~ – ограничивает (сглаживает) скачки амплитуды сигнала.
Может использоваться для сглаживания как положительных скачков амплитуды сигнала (резкий рост), так и отрицательных (резкий спад). Степень допустимого спада и роста указывается в первом и втором аргументах соответственно.
edge~ – аналог [sigzero~] из библиотеки Zexy
.
При падении уровня входного сигнала до 0 на левый выход будет отправлена команда <bang>.
При отклонении уровня входного сигнала от 0 (в сторону уменьшения или увеличения) команда <bang> будет отправлена на правый выход.
Может использоваться для анализа выходных сигналов логических операторов.
frameaccum~ – складывает значения семплов с одинаковыми номерами (первый с первым, второй со вторым, и т.д.) текущего блока DSP-обработки с предыдущим блоком, подает результирующий сигнал на выход.
Может использоваться для нахождения "рабочей фазы" (running phase) сигнала при выполнении преобразований в частотной области.
framedelta~ – вычисляет разность фаз двух блоков аудио-сигнала.
Вычитает значения семплов с одинаковыми номерами (первый из первого, второй из второго, и т.д.) текущего блока DSP-обработки из предыдущего блока, подает результат на выход в виде сигнала.
Может использоваться для нахождения фазовых отклонений (phase deviation) сигнала при работе в частотной области.
index~ – проигрывает аудио-данные из таблицы (множества) чисел без интерполяции.
Принимает на левый вход индекс позиции множества (номер семпла) в виде сигнала, подает на выход соответствующее значение этого семпла без интерполяции (если индекс представляет собой десятичную дробь).
Установить новое множество для чтения аудио-данных можно с помощью сообщения <set имя_множества>.
kink~ – модуль искажения пилообразных колебаний.
Принимает на левый вход пилообразные колебания от объекта [phasor~], на правый вход – коэффициент искажения (по умолчанию, 1 = без искажений).
Искаженный выходной сигнал может быть использован для фазовой модуляции синусоидальных колебаний путем внесения фазовых искажений на правый вход объекта [cycle~] из библиотеки Cyclone/Sickle.
log~ * – логарифмическая функция для сигналов.
Возвращает логарифм сигнала, полученного на левый вход, по основанию числа n, указанного в аргументе или полученного на правый вход (по умолчанию, n = e ~ 2.71828):
y = lognx.
Если n = 1, на выход всегда будет подаваться 0.
См. также [ln~] из библиотеки Motex.
* Конфликтует с объектом [log~] из библиотеки Ggext.
lookup~ – считывает аудио-данные с конкретного участка волновой таблицы, аналог [tabread4~].
В роли индексов позиций множества для проигрывания соответствующих семплов выступают значения семплов синусоиды, принимаемой на вход в виде сигнала.
Значения синусоиды от –1 до 0 привязываются к первой половине всех семплов (N), размещенных в таблице (множестве) чисел A, начиная с семпла n, а значения синусоиды от 0 до 1 – ко второй половине таблицы. Если амплитуда входного сигнала превосходит границы [–1; 1], на выход будет подан 0.
Имя волновой таблицы (множества чисел) A может быть указано в первом аргументе или получено на левый вход в виде сообщения <set A>.
Начальный семпл n для чтения аудио-данных из волновой таблицы (соответствующий индексу, т.е. семплу синусоиды, со значением –1) может быть указан во втором аргументе или получен на второй вход.
Общее число проигрываемых семплов N по умолчанию равно 512, но может быть указано в третьем аргументе или получено на третий вход.
maximum~, minimum~ – сравнивает (по семплам) амплитуду сигнала, поступающего на левый вход, со значением аргумента, числом или сигналом, поступающим на правый вход.
Наибольшее (наименьшее) из них подает на выход в виде сигнала.
См. также [absmax~] и [absmin~] из библиотеки PeRColate.
minmax~ – отслеживает положительные/отрицательные пики сигнала.
Наименьшее значение амплитуды входного сигнала (с момента создания объекта или поступления на вход команды <reset>) подает в виде сигнала на левый выход, наибольшее – на второй выход слева.
По команде <bang> выводит наименьшее значение в виде числа на второй выход справа, наибольшее – на крайний справа.
mstosamps~ – преобразует миллисекунды в семплы (в соответствии с текущей частотой дискретизации).
Принимает на вход как числа, так и сигналы, делит их на 1000 (миллисекунд) и умножает на текущую частоту дискретизации (по умолчанию, 44100), результат подает на правый выход в виде числа (если на вход поступило число) или на левый выход в виде сигнала (если на вход подается сигнал).
См. также [sampstoms~] из библиотеки Cyclone/Sickle.
sampstoms~ – преобразует семплы в миллисекунды (в соответствии с текущей частотой дискретизации).
Принимает на вход как числа, так и сигналы, делит их на текущую частоту дискретизации (по умолчанию, 44100) и умножает на 1000 (миллисекунд), результат подает на правый выход в виде числа (если на вход поступило число) или на левый выход в виде сигнала (если на вход подается сигнал).
См. также [mstosamps~] из библиотеки Cyclone/Sickle.
peakamp~ – по команде <bang> (полученной на левый вход) или через каждые T миллисекунд, указанные в аргументе (или полученные на правый вход в виде числа), подает на выход максимальное (абсолютное) значение амплитуды сигнала, поступающего на левый вход (с момента определения последнего максимума).
При T=0 (по умолчанию) или при выключении режима обработки сигналов (DSP = 0) сообщения будут подаваться на выход только по команде <bang>.
peek~ – совмещенный аналог объектов [tabread] и [tabwrite] (отношения к сигналам не имеет, несмотря на тильду).
Позволяет считывать, записывать и ограничивать пределом [–1;1] записываемые в таблицу (множество) чисел значения.
phasewrap~ – заключает поступающие числа (или амплитуду входного сигнала) в пределы от –¶ до +¶ (=3.14159), находя для каждого числа соответствующий эквивалент в этих пределах (см. также встроенный объект [wrap~] и [wrap] из библиотеки Zexy
).
Если, например, подать на вход сигнал от объекта [count~], [phasewrap~] сгенерирует пилообразные колебания с амплитудой от -3.14 до +3.14.
pink~ * – генератор "розового" шума.
Подает на выход аудио-сигнал с произвольно меняющейся амплитудой (от –1 до +1).
Если "белый" шум от объекта [noise~] пропустить через фильтр нижних частот (т.е. фильтр, имеющий АЧХ со спадом к высокочастотным составляющим) с крутизной среза 3дб/октава, – то он станет "розовым" (алгоритм синтеза "розового" шума можно посмотреть в абстракции [pink~] из библиотеки Iemlib).
См. также [noisi~] и [noish~] из библиотеки Zexy, [rand~] из библиотеки Cyclone/Hammer, [LFO_noise~].
play~ – то же, что и [tabread4~], но проигрывает семплы (значения волновой таблицы) не по индексам, а по миллисекундам.
poke~ – записывает аудио-сигнал (или значения отдельных семплов) в таблицу (множество) чисел.
Принимает на средний вход (в виде числа или сигнала) номер семпла, под которым будет записано его значение (полученное на левый вход в виде числа или сигнала) в таблицу (множество) чисел, указанную в аргументе (или установленную с помощью сообщения <set имя_множества>, полученного на левый вход).
Если на средний вход поступила –1, в таблицу ничего не будет записано.
pong~ – искажает сигнал путем его свертки (зеркального отображения относительно допустимых границ по амплитуде: вверх от нижней границы и вниз от верхней, = folding) или заключения в пределы (преломления и переноса части сигнала, превосходящего по амплитуде одну из допустимых границ: вверх от нижней и вниз от верхней на величину превышения этой границы плюс 1, = wrapping).
Таким образом, амплитуда выходного сигнала никогда не превысит установленных в аргументе (или полученных на средний и правый входы) границ.
Режим folding/wrapping устанавливается в первом аргументе значениями <0>/<1> соответственно.
См. также [foldback~] и [foldover~] из библиотеки sIgpAck.
pow~ – аналог [pow] для сигналов.
Возводит число, указанное в аргументе (или полученное на правый вход в виде числа или сигнала), в степень числа, полученного на левый вход (в виде числа или сигнала).
Результат подает на выход в виде сигнала.
rampsmooth~ – производит линейное сглаживание амплитуды сигнала.
Отрабатывает скачки амплитуды входного сигнала линейным ростом (спадом) на протяжении N семплов, указанных в первом (втором) аргументе.
См. также [slide~] и [vectral~] из библиотеки Cyclone/Hammer.
slide~ – производит логарифмическое сглаживание амплитуды сигнала, аналог [rampsmooth~].
Отрабатывает скачки амплитуды входного сигнала логарифмическим ростом (спадом) на протяжении N семплов, указанных в первом (втором) аргументе.
См. также [vectral~] из библиотеки Cyclone/Hammer.
rand~ – то же, что и [noisi~] из библиотеки Zexy
: генератор белого шума с регулируемой полосой пропускания и амплитудной интерполяцией (сглаживанием промежуточных значений).
См. также встроенный объект [noise~], [noish~] из библиотеки Zexy, [pink~] и [rand~] из библиотеки Cyclone/Hammer, [LFO_noise~] и [pink~] из библиотеки Iemlib.
record~ – аналог [tabwrite~] с дополнительными возможностями:
sah~ – устройство семплирования и удержания сигнала (то же, что и [samphold~], но с возможностью указания в аргументе порога срабатывания).
Scope~ – осциллограф, позволяет наблюдать за колебаниями звуковой волны, поступающей на вход в виде сигнала.
Может работать в одном из трех режимов:
Диапазон отображения (минимального и максимального значения амплитуды входного сигнала) осциллографа задается сообщением <range Min Max>, принятым на левый вход.
Цвет фона осциллографа можно установить с помощью сообщения <brgb R G B>, принятого на левый вход, где R, G и B – числовые значения соответствующих цветов (в формате RGB) в диапазоне от 0 до 255. Цвет самой волны устанавливается сообщением <frgb R G B>.
Разрешение осциллографа по горизонтали (в семплах) можно увеличить с помощью числа, принятого на левый вход.
Чтобы зафиксировать текущее изображение на экране осциллографа, необходимо щелкнуть по нему левой кнопкой мыши и держать ее в неподвижном состоянии столько времени, сколько необходимо видеть зафиксированное изображение.
Snapshot~ – многофункциональная версия объекта [snapshot~].
По команде <bang>, принятой на левый вход, или через каждые T миллисекунд, указанные в первом аргументе (или полученные на правый вход), подает на выход в виде числа амплитуду сигнала, поступающего на левый вход, начиная с семпла n (в блоке DSP-обработки сигнала), указанного во втором аргументе (или полученного на левый вход вместе с сообщением <offset n>).
Режим регулярного измерения и подачи на выход уровня входного сигнала можно отключить, отправив на левый вход <0>, и включить снова, отправив любое отличное от нуля число.
spike~ – ищет в сигнале, поступающем на левый вход, семплы со значением нуля, и, если таковые имеются, подает на выход время (в миллисекундах) с момента последнего их обнаружения.
Минимальный интервал времени для обнаружения нулевых семплов, в течение которого на выход ничего не будет подаваться, можно указать в аргументе или отправить на правый вход в виде числа (по умолчанию, 0).
train~ – генератор прямоугольных колебаний (импульсов).
Принимает на левый вход период колебания (время повторения полного цикла, в миллисекундах), на средний – рабочий цикл (доля полного периода колебаний, принимаемого за единицу), в течение которого на левый выход будет подаваться сигнал с амплитудой =1, на правый вход – фазу колебания (в виде доли полного цикла). Вне рабочего цикла амплитуда выходного сигнала будет равна 0.
Все параметры могут подаваться на вход как в виде числа, так и сигнала. Начальные значения периода (по умолчанию, 1000 мс), рабочего цикла (по умолчанию, 0.5) и фазы (по умолчанию, 0) можно указать в аргументе.
С каждым новым циклом (периодом колебания) на правый выход объекта будет отправляться сообщение <bang>.
trapezoid~ – генератор сигнала с трапецеидальной формой волны.
Считывает из волновой таблицы, "вшитой" в память объекта, значения семплов трапецеидального сигнала по индексам, полученным на левый вход в виде числа или сигнала (напр., от объекта [phasor~]).
В аргументе или сообщениях, подаваемых средний и правый входы, можно указать фазы роста и спада сигнала (в долях полного периода, принимаемого за единицу, по умолчанию 0.1 и 0.9).
Амплитудные границы выходного сигнала можно регулировать с помощью сообщений <lo Min> и <hi Max>, где Min и Max – минимальный и максимальный уровни выходного сигнала.
triangle~ – генератор сигнала с треугольной формой волны.
Считывает из волновой таблицы, "вшитой" в память объекта, значения семплов сигнала с треугольной формой волны по индексам, полученным на левый вход в виде числа или сигнала (напр., от объекта [phasor~]).
В аргументе или сообщении, подаваемом на правый вход, можно указать фазу пикового значения (в долях полного периода, принимаемого за единицу, – по умолчанию, 0.5), при наступлении которой амплитуда выходного сигнала достигнет максимального уровня.
Амплитудные границы выходного сигнала можно регулировать с помощью сообщений <lo Min> и <hi Max>, где Min и Max – минимальный и максимальный уровни выходного сигнала.
vectral~ – выполняет различные типы сглаживания (усреднения) амплитуды сигнала, поступающего на правый вход (в т.ч., линейную и логарифмическую интерполяцию отдельно для положительных и отрицательных скачков), с возможностью изменения размера окна (вектора) обработки и синхронизации семплов входного сигнала с семплами выходного (для высокоточной, посемпловой работы в частотной области).
См. также [rampsmooth~] и [slide~] из библиотеки Cyclone/Hammer.
wave~ – считывает из волновой таблицы, указанной в аргументе, значения семплов, по индексам, полученным на левый вход в виде сигнала с амплитудой от 0 до 1 (напр., от объекта [phasor~]), начиная с позиции T1, указанной во втором аргументе (в миллисекундах) или полученной на средний вход в виде числа или сигнала, до позиции T2, указанной в третьем аргументе (в миллисекундах) или полученной на правый вход в виде числа или сигнала.
Имя таблицы (множества) чисел можно изменять динамически, подавая на левый вход команду <set имя_множества>.
Режим интерполяции (сглаживания) промежуточных значений можно включить (1) и выключить (0) с помощью сообщения <interp 1/0>, отправленной на левый вход.
zerox~ – определяет количество точек пересечения входным сигналом отметки нулевого уровня (в текущем блоке DSP-обработки), результат подает на левый выход в виде сигнала.
C каждым новым пересечением подает на правый выход импульс с амплитудой, равной значению второго аргумента.
См. также [dfreq~] из библиотеки Zexy
и [weave~] из библиотеки PeRColate
comb~ – гребенчатый фильтр.
Принцип работы гребенчатого фильтра основан на линии задержки (АЧХ этого фильтра создается за счет сложения поступающего сигнала с его удержанной копией):

Гребенчатая АЧХ фильтра обусловлена тем, что для некоторых частот (кратных основной частоте) задержанные копии сигнала складываются в фазе и поэтому усиливаются, для других частот – в противофазе и поэтому взаимоуничтожаются:

Основная частота гребенчатого фильтра равна 1/d/1000 Гц, где d – время задержки фильтра (в миллисекундах).
На выход гребенчатого фильтра подается сигнал (Yt), состоящий из:
Yt = aXt + bXt–d + сYt–d.
Параметры d, a, b и c можно подать на второй, третий, четвертый и пятый входы объекта соответственно (либо списком на первый вход) в виде числа или сигнала, либо указать во втором, третьем, четвертом и пятом аргументах (первый аргумент – максимальное время задержки, по умолчанию, 10 мс).
Очистить буфер объекта можно с помощью команды <clear>, отправленной на левый вход.
allpass~ – пропускающий фильтр всех частот.
Как следует из названия, коэффициент усиления (gain) этого фильтра одинаков для всех частот и равен единице. Изюм заключается в возможности корректировки его фазочастотной характеристики, т.е. внесении фазовых искажений в поступающий сигнал за счет сложения этого сигнала со своей удержанной копией и создании простейших ревербераций:

На выход всепропускающего фильтра подается сигнал (Yt), состоящий из:
Yt = –gXt + Xt–d + gYt–d.
Значение времени задержки (d) и коэффициента усиления (g) можно подать на второй и третий входы объекта соответственно (либо списком на первый вход) в виде числа или сигнала, либо указать во втором и третьем аргументах (первый аргумент – максимальное время задержки, по умолчанию, 10 мс).
Очистить буфер объекта можно с помощью команды <clear>, отправленной на левый вход.
ФЧХ фильтра (полученная путем сложения исходного сигнала Xt с выходным сигналом Yt) с различными значениями коэффициента усиления g:

См. также [ap1~] из библиотеки Iemlib.
lores~ – пропускающий резонансный фильтр нижних частот (с регулировкой уровня подъема центральной частоты).
Фильтр с резонансом имеет подъем характеристики вблизи частоты среза Fc, и в зависимости от величины резонанса Q, уровень частот, лежащих вокруг этой частоты, будет увеличиваться (уменьшаться) в той или иной степени: при высоких значениях Q (0.95–0.99) происходит резкое усиление (подъем) полосы частот вокруг частоты среза Fc (в этом случае резонансный фильтр вблизи частоты среза работает аналогично полосовому фильтру эквалайзера).
АЧХ фильтра для Fc = 100 Гц с различными вариантами Q представлена на рисунке:

При значениях Q близких к единице фильтр самовозбуждается и начинает работать как осциллятор на частоте, установленной в качестве частоты среза Fc. Это происходит из-за рекурсивного (IIR) характера фильтра, т.е. использования в его цепи звеньев обратной связи:
Yt = scale * (Xt) – c1(Yt–1) + c2*(Yt–2),
где Yt – выходной сигнал, Xt – входной сигнал, а параметры scale, c1 и c2 – коэффициенты усиления, рассчитанные на основе частоты среза и величины резонанса. Если на вход фильтра с высоким значением Q подается сигнал, содержащий частоту среза Fc, фильтр "взорвется" и не сможет адекватно обрабатывать поступающий сигнал. Чтобы вывести его из этого состояния необходимо отправить на левый вход объекта сообщение <clear> для очистки буфера фильтра.
На левый вход [lores~] принимает аудио-сигнал для фильтрации, на средний – частоту среза Fc, на правый – величину резонанса Q (от 0 до 1). Частота среза и Q могут быть получены как в виде числа, так и сигнала, начальные их значения могут быть указаны в соответствующих аргументах (по умолчанию, 0).
См. также встроенный объект [lop~], [onepole~] и [svf~] из библиотеки Cyclone/Sickle, [lp1_t~], [lp1~] и [lp2~] из библиотеки Iemlib, [moog~] из библиотеки Ggext.
reson~ – полосно-пропускающий резонансный фильтр, аналог встроенного объекта [bp~], но с возможностью регулировки уровня усиления (gain) полосы пропускаемых частот.
На левый вход принимает аудио-сигнал для фильтрации, на второй вход слева – коэффициент усиления пропускаемой полосы частот, на второй вход справа – центральную частоту (Fс, Гц), на правый вход – коэффициент добротности фильтра (Q, он же Resonance, он же Emphasis, он же Regeneration), равный отношению центральной частоты к ширине полосы пропускания: чем выше Q, тем уже полоса пропускания, чем ниже Q – тем она шире (обычно Q составляет от 0.01 до 500 единиц).
АЧХ фильтра для Fc = 200 Гц с различными вариантами Q представлена на рисунке:

Коэффициент усиления g, центральную частоту Fc и величину добротности фильтра Q можно отправить на соответствующие входы как в виде числа, так и сигнала (либо указать в соответствующих аргументах). По умолчанию, их значения равны 0, 0 и 0.01.
См. также встроенный объект [vcf~], объекты [vcf_rbp2~], [bpq2~], [bpw2~], [vcf_bp2~], [rbpq2~], [rbpw2~] из библиотеки Iemlib и [svf~] из библиотеки Cyclone/Sickle.
onepole~ – пропускающий фильтр нижних частот первого порядка (6 дБ на октаву); то же, что и [lop~], но с дополнительными возможностями:
установления частоты среза в виде числа или сигнала, поданного на правый вход;
См. также [lores~] и [svf~] из библиотеки Cyclone/Sickle, [lp1_t~], [lp1~] и [lp2~] из библиотеки Iemlib, [moog~] из библиотеки Ggext.
svf~ – многопрофильный фильтр (state variable filter, он же multi mode filter): может работать одновременно в нескольких режимах фильтрации: low-pass, hi-pass, band-pass и band-reject:

Принимает на левый вход аудио-сигнал для фильтрации, на средний – центральную частоту (Fc), на правый – коэффициент добротности (Q).
Подает на левый выход сигнал, пропущенный через фильтр нижних частот (low-pass),
Центральная частота (Fc) и коэффициент добротности (Q) могут быть получены на средний и правый входы как в виде числа, так и сигнала (либо указаны в первом и втором аргументах соответственно).
В зависимости от сообщения, принятого на левый вход, частота среза Fc может быть установлена в одной из 3-х единиц измерения:
<hz> – в Гц (от 0 до 1/4 текущей частоты дискретизации) (по умолчанию),
<linear> – в линейных единицах (от 0 до 1), за единицу принимается 1/4 текущей частоты дискретизации,
<radians> – в радианах (от 0 до 1), АЧХ фильтра в этом случае имеет более криволинейную форму.
Важная особенность [svf~]-фильтра заключается в том, что при высоких значениях Q (>0.9) он может использоваться в качестве осциллятора синусоидальных колебаний, настроенного на частоту среза Fc.
buffir~ – FIR-фильтр, импульсная характеристика которого задается пользователем в таблице свертки (множестве чисел).
Выполняет свертку сигнала из X семплов (поступающего на левый вход) с импульсной характеристикой из Y (< 256) семплов, содержащейся в таблице свертки (указанной в первом аргументе или полученной на левый вход в виде сообщения <set имя_таблицы>), синтезирует выходной сигнал длиной X+Y–1 семпла.
Размер таблицы свертки (в семплах, до 256) и индекс позиции (начиная с которого будут считываться данные из этой таблицы) могут быть отправлены на правый и средний входы соответственно (как в виде числа, так и сигнала).
С помощью свертки можно выполнять следующие операции:
удерживать поступающий сигнал на несколько семплов:




См. также [FIR~] из библиотеки Iemlib.
Все объекты этой библиотеки используются для управления сообщениями (и музыкального анализа) и не имеют отношения к сигналам.
В случае возникновения конфликтных ситуаций с одноименными объектами из других библиотек (например, [wrap] от Zexy) вместо обычного имени объекта библиотеки Maxlib следует ввести <maxlib_имя_объекта>.
Генераторы случайных чисел заимствованы из книги Dodge/Jerse “Computer Music”, Schirmer Books.
allow – пропускающий фильтр сообщений.
Пропускает через себя только те сообщения, которые указаны в аргументе (как числовые, так и символьные).
deny – задерживающий фильтр сообщений.
Пропускает через себя все сообщения кроме тех, что указаны в аргументе (как числовые, так и символьные).
arraycopy – копирует данные из одного множества (таблицы) чисел в другое (с возможностью указания диапазона копируемых значений и позиции их вставки в таблицу назначения).
average – вычисляет среднее арифметическое, геометрическое или средневзвешенное значение последних поступивших на левый вход чисел (в группе из N чисел, указанной в аргументе). Направление роста (1) или спада (–1) среднего подает на правый выход.
См. также [history] из библиотеки Maxlib.
history – то же, что и [average] из библиотеки Maxlib, но ищет среднее арифметическое, геометрическое или средневзвешенное среди всех чисел, полученных на левый вход в течение времени, указанного в аргументе (в миллисекундах).
beat – выполняет ритмический анализ поступающих MIDI-сообщений.
Принимает на вход пары чисел высота-громкость (pitch-velocity), вычисляет скорость их поступления и подает на левый выход – количество ударов в минуту (bpm), на средний – среднюю продолжительность времени в миллисекундах между ударами (= 60000 / bpm), на правый выход – команду <bang> (в случае, если текущий удар попадает в ритм).
По команде <print>, принятой на левый вход, выводит в окно терминала 5 наиболее вероятных результатов ритмического анализа (продолжительность времени в миллисекундах между двумя ударами) с вероятностью, указанной в квадратных скобках, временем доставки MIDI-сообщения (<R>) и ожидаемым временем доставки следующего сообщения (<E>).
В аргументе можно указать критическое (минимальное) время в процентах, в течение которого должен произойти очередной удар.
См. также [rhythm] из библиотеки Maxlib.
arbran – в зависимости от плотности распределения вероятности (от 0 до 1) чисел в таблице-2 генерирует (выбирает из таблицы-1 по команде <bang>) соответствующее значение. Имена таблиц задаются в первом и втором аргументах соответственно.
beta – генератор псевдо-случайных чисел с бета-распределением.
bilex – генератор псевдо-случайных чисел с билинейным экспоненциальным распределением.
cauchy – генератор псевдо-случайных чисел с распределением Коши.
expo – генератор псевдо-случайных чисел с экспоненциальным распределением.
gauss - генератор псевдо-случайных чисел с распределением Гаусса.
linear – генератор псевдо-случайных чисел с линейным распределением.
poisson – генератор псевдо-случайных чисел с распределением Пуассона.
triang – генератор псевдо-случайных чисел с треугольным распределением.
weibull - генератор псевдо-случайных чисел с распределение Вейбулла.
borax – то же, что и [Borax] из библиотеки Cyclone/Hammer.
Анализирует поступающие на вход MIDI-ноты, подает на выход разнообразные статистические данные о note-on / note-off сообщениях, длине текущей ноты, назначенном ей голосе и др.
chord – принимает на вход пары чисел высота-громкость и пытается определить взятый на их основе аккорд (различает до 67 типов аккордов).
Подает на левый выход номер нижней ноты аккорда, на второй выход слева – ее ступень (pitch class), на третий выход слева – название аккорда (с атрибутом symbol), на четвертый выход – номер обращения аккорда (<0> – основной аккорд, <1> – первое обращение, <2> – второе обращение), на крайний выход справа – список чисел, представляющих номера MIDI-нот аккорда.
В аргументе можно указать номер MIDI-ноты со значением верхнего предела аккордов: ноты со значением выше установленного максимума будут игнорироваться.
delta – вычисляет разность первого и второго порядков.
Если в аргументе указана единица (или вообще ничего не указано), вычисляет разность первого порядка функции f(x):
f(x) = f(x+1) – f(x),
где f(x+1) – последнее полученное на вход число,
f(x) – предпоследнее полученное на вход число.
Если в аргументе указана двойка, вычисляет разность второго порядка функции f(x):
2f(x) = (f(x)) = f(x+1) – f(x) =
= f(x+2) – 2f(x+1) + f(x),
где f(x+2) – последнее полученное на вход число,
f(x+1) – предпоследнее полученное на вход число,
f(x) – пре-предпоследнее полученное на вход число.
dist – аналог встроенного объекта [send].
Отправляет все поступающие на вход сообщения объектам [receive], указанным в аргументе (или занесенным в список ресиверов с помощью сообщения <connect имя_ресивера>). Максимальная длина списка (количество объектов [receive]) – 64 элемента.
Отключить ресивер (т.е. вычеркнуть его из списка принимающих объектов) можно с помощью сообщения <disconnect имя_ресивера>.
Очистить список ресиверов можно с помощью сообщения <clear>.
Вывести весь список ресиверов в окно терминала можно с помощью сообщения <print>.
См. также [remote] из библиотеки Maxlib, [list2send] из библиотеки Iemlib и [sendlocal] из библиотеки Ggext.
plus – выполняет операцию сложения a + b + c + d –… и т.д. (до 32 слагаемых), где a, b, c, d, … – значения первого, второго, третьего, четвертого и т.д. аргументов (которые могут быть получены на первый, второй, третий, четвертый, … и т.д. входы).
Число, полученное на первый или второй вход слева, запускает операцию; числа, полученные на остальные входы, – запоминаются.
По команде <bang> выполняет операцию сложения с последними полученными параметрами.
minus – выполняет операцию вычитания a - b - c - d –… и т.д. (до 32 вычитаемых), где a, b, c, d, … – значения первого, второго, третьего, четвертого и т.д. аргументов (которые могут быть получены на первый, второй, третий, четвертый, … и т.д. входы).
Число, полученное на первый или второй вход слева, запускает операцию; числа, полученные на остальные входы, – запоминаются.
По команде <bang> выполняет операцию вычитания с последними полученными параметрами.
divide – выполняет операцию деления a : b : c : d : … и т.д. (до 32 знаменателей), где a, b, c, d, … – значения первого, второго, третьего, четвертого и т.д. аргументов (которые могут быть получены на первый, второй, третий, четвертый, … и т.д. входы).
Число, полученное на крайний вход справа, запоминается. Число, полученное на любой вход, кроме правого, запускает операцию.
По команде <bang> выполняет операцию деления с последними полученными параметрами.
multi – выполняет операцию умножения a * b * c * d * … и т.д. (до 32 сомножителей), где a, b, c, d, … – значения первого, второго, третьего, четвертого и т.д. аргументов (которые могут быть получены на первый, второй, третий, четвертый, … и т.д. входы).
Число, полученное на первый или второй вход слева, запускает операцию; числа, полученные на остальные входы, – запоминаются.
По команде <bang> выполняет операцию умножения с последними полученными параметрами.
divmod – совмещенная версия объектов [div] и [mod], отправляет целый результат деления на левый выход, остаток от деления* – на правый.
Начальные значения числителя и знаменателя дроби можно указать в первом и втором аргументах соответственно.
Операцию можно запустить с помощью числа, полученного на левый или правый вход, либо по команде <bang>, отправленной на левый вход.
* Остаток в сумме с произведением целого результата деления на знаменатель дроби дает числитель дроби.
edge – определяет смену знака поступающих на вход чисел (детектор 0-1).
В случае, если последнее полученное на вход число больше нуля, а число, полученное перед ним, – меньше либо равно нулю, на левый выход будет отправлена команда <bang>, если наоборот – команда <bang> будет отправлена на правый выход.
fifo – хранилище чисел типа FIFO (последний пришел – первый ушел) для N чисел, указанных в аргументе.
Запоминает последние полученные на вход N чисел и по команде <bang> подает на выход первое полученное число из текущей группы, в следующий раз – второе, и т.д. до N-го.
Если количество поступивших на вход чисел превосходит размер буфера (т.е. > N), в память объекта будет занесена последняя группа, начиная с первых полученных групп из N чисел.
lifo – хранилище чисел типа LIFO (последний пришел – первый ушел) для N чисел, указанных в аргументе.
Запоминает последние полученные N чисел и по команде <bang> подает их на выход в обратном порядке (сначала последнее, в следующий раз – предпоследнее, и т.д. до N-го с конца).
listfifo – то же, что и [fifo] из библиотеки Maxlib, но для списков.
Представляет собой хранилище списков типа FIFO (первый пришел – первый ушел) для N списков, указанных в аргументе.
gestalt – ищет целостные структуры в монофонической мелодии.
Принимает на вход пары чисел высота-громкость и анализирует их с точки зрения целостности представляемой ими мелодии. В аргументе можно указать время (в миллисекундах), принимаемое за начало отсчета (т.е. предполагаемую длительность самой короткой ноты).
Чем выше значения выходных чисел, тем более резкие изменения происходят в структуре мелодии.
ignore – игнорирует поступающие на вход числа в течение указанного промежутка времени.
Отправляет на выход последнее число из потока чисел, подаваемых на левый вход (с задержкой T миллисекунд), игнорируя остальные. Признаком последнего числа служит отсутствие всяких сообщений после него в течение T миллисекунд, указанных во втором аргументе (или полученных на правый вход).
Может использоваться для исключения трелей из мелодии.
iso – секвенсор.
Принимает на левый вход список чисел, представляющих номера MIDI-нот (или любые другие числа), которые будут отправлены на выход в положенное для них время. Интервалы времени (в миллисекундах) между проигрыванием соответствующих нот устанавливаются списком чисел, полученным на правый вход.
На левый выход отправляет высоту проигрываемой ноты, на правый – ее длительность (в миллисекундах).
Команда <bang>, принятая на левый вход, запускает секвенцию, команда <stop> – останавливает. Чтобы воспроизведение секвенции началось с ноты N, необходимо отправить на левый вход сообщение <start N>.
Команда <pause> – временно приостанавливает секвенцию, команда <resume> – продолжает проигрывание.
Команда <loop> переводит секвенсор в режим бесконечного цикла (т.е. возврата на первую ноту секвенции после проигрывания последней). Команда <unloop> возвращает секвенсор к обычному состоянию.
Длительность всех проигрываемых нот (рабочее время секвенции) можно увеличить в N раз с помощью сообщения <duty N>.
Увеличить длительность всей секвенции целиком (т.е. понизить скорость ее проигрывания) в N раз с можно помощью сообщения <hook N>.
См. также [bpe] из библиотеки Iemlib.
limit – числовой ограничитель/компрессор.
Аналог встроенного объекта [clip] с возможностью компрессии (т.е. пропорционального сжатия/расширения) значений чисел, превосходящих установленный диапазон: первый аргумент – минимум, второй – максимум.
Степень компрессии (пропорционально которой будет происходить сжатие/расширение) устанавливается в третьем аргументе.
См. также [scale] из библиотеки Maxlib и [linedrive] из библиотеки Cyclone/Hammer.
listfunnel – индексирует элементы списка (числового и/или символьного, значения не имеет), разбивая его на составные части и подавая на выход в виде последовательности сообщений – списков из двух элементов: порядкового номера (начиная с нулевого) и значения элемента.
См. также [funnel] из библиотеки Cyclone/Hammer.
match – то же, что и [match] из библиотеки Cyclone/Hammer.
Ищет в поступающих сообщениях (в т.ч. списках) последовательность элементов, заданную в аргументе, и, в случае успеха, подает ее на выход в виде списка.
mlife – клеточный автомат (см. документацию к объекту в текстовом файле, поставляемом вместе с библиотекой Maxlib).
Аналог компьютерной игры "жизнь": в каждом новом поколении точка "умирает" от скуки, если у нее менее трех соседей или от перенаселенности, если у нее более трех соседей. На пустой клетке три соседствующие с ней точки "рождают" новую.
Клеточное поле [mlife] организовано в виде одномерного массива (т.е. списка чисел), и в зависимости от значений (1/0) смежных элементов списка автомат будет генерировать новые значения клеток с каждым новым поколением.
nchange – то же, что и [change], но для сообщений любого типа.
Принимает на вход сообщения того типа, который указан в аргументе (остальные игнорируются): <f> = float (число), <s> – symbol (символ), <l> – list (список), <a> – anything (прочее). Если на вход поступило то же сообщение, что и в прошлый раз, оно будет задержано.
Последнее сообщение можно подать на выход с помощью команды <bang>.
netserver – сервер для подключения к [netclient] из библиотеки Maxlib. Позволяет обращаться к нескольким различным клиентам одновременно.
См. также встроенные объекты [netsend] и [netreceive].
netclient – клиент для подключения к [netserver] из библиотеки Maxlib.
См. также встроенные объекты [netsend] и [netreceive].
netdist – отправляет сообщения нескольким клиентам (до 32) одновременно.
См. также [netclient] из библиотеки Maxlib.
netrec – принимает сообщения от объектов [netsend] и [netdist] с удаленного компьютера и отправляет на правый выход IP-адрес этого компьютера, на второй выход справа – номер сокета, на второй выход слева – количество открытых соединений, на левый выход – поступающие сообщения.
nroute – ищет в поступающих списках элемент с номером и значением, указанным во втором и первом аргументах соответственно, в случае успеха подает список на левый выход, иначе – на правый.
См. также встроенный объект [route], [iem_i_route] и [iem_route] из библиотеки Iemlib.
pitch – принимает на вход пары чисел (высота-громкость) и подает на левый выход регистр ноты, на второй выход справа – интервал от последней ноты (или от значения, указанного в аргументе, – для первой ноты), на средний выход – номер ступени, на второй выход слева – символьное представление ноты, на левый выход – номер MIDI-ноты.
pong – физическая модель прыгающего по полу мячика.
Принимает на второй вход слева начальную высоту падения мяча, на третий вход – начальный коэффициент ускорения, на четвертый вход – начальный коэффициент торможения, на пятый вход – силу удара рукой по мячу (1 – воздействие со стороны руки отсутствует), на шестой вход – высоту положения руки.
Отправляет на правый выход – высоту текущего положения мяча, на второй выход справа – коэффициент текущего ускорения падения мяча, на второй выход слева – <1> (при пересечении мячом положения руки в движении вверх) или <0> (при пересечении мячом уровня руки в нисходящем движении), на левый выход – команду <bang> при достижении мячом поверхности пола (нулевого уровня).
По команде <bang>, принятой на левый вход – мяч получает начальное ускорение (происходит удар по мячу с приложенной к нему силой) и начинает падать вниз с начальной высоты (если удар произошел во время падения) или с текущей высоты (если удар произошел во время движения вверх).
При поступлении на левый вход <0> мяч приостанавливает свое движение, при поступлении единицы – продолжает его с места остановки.
По команде <reset> все параметры получают начальные значения, и мяч начинает падение с начальной высоты.
pulse – генератор импульсов, аналог встроенного объекта [metro].
При поступлении на вход команды <bang> (=<1>) начинает равномерный отсчет увеличивающихся на единицу чисел, подаваемых на левый выход (начиная с единицы). При достижении числа, указанного в четвертом аргументе, прекратит счет и подаст на правый выход команду <bang>.
Принудительно остановить отсчет (обнулив счетчик) можно с помощью команды <bang> (=<0>), принятой на левый вход.
Первый аргумент (второй вход) – количество четвертных нот в 1 минуте.
Второй аргумент (третий вход) – коэффициент повышения длительности отсчитываемой ноты.
Третий аргумент (четвертый вход) – длительность отсчитываемой ноты (по умолчанию, четверть).
Четвертый аргумент (пятый вход) – количество нот, по окончанию проигрывания которых [pulse] прекратит отсчет.
См. также [for++] из библиотеки Iemlib.
remote – то же, что и сообщение, начинающееся с точки с запятой: <;>.
Первое слово поступившего на вход сообщения трактуется как имя ресивера (объекта [receive]), которому будет отправлена остальная часть этого сообщения (до запятой).
См. также [dist] из библиотеки Maxlib и [list2send] из библиотеки Iemlib, [sendlocal] из библиотеки Ggext.
rewrap – аналог [wrap] из библиотеки Maxlib, с той разницей, что при превышении поступающими числами значения второго аргумента (верхней границы диапазона) начинает обратный отсчет к нижней границе последовательности (заключенной в пределах диапазона), а при падении поступающих чисел ниже уровня первого аргумента (нижней границы диапазона) начинает счет на возрастание к верхней границе.
Т.о. поток линейно увеличивающихся чисел превращается в треугольные колебания.
См. также [wrap] из библиотеки Zexy.
rhythm – отслеживает ритм поступающих MIDI-сообщений, аналог [beat] из библиотеки Maxlib; не восприимчив к быстрым ритмическим партиям (напр., трелям).
Принимает на вход пары чисел (высота-громкость), определяет скорость их поступления и подает на левый выход количество поступивших MIDI-нот (ударов) в минуту (bpm), на средний – продолжительность времени в миллисекундах между ударами (= 60000 / bpm), на правый выход – равномерную пульсацию команды <bang> (как [metro]), с периодом, равным последнему интервалу времени (в мс), отправленному на средний выход.
В аргументе можно выбрать модель, по которой будет проводиться ритмический анализ: <0> – по адаптивной системе Ларджа и Колена (Large and Kolen adaptation model), <1> – по системе Тоивиайнена (Toiviainen adaptation model),
scale – приводит поступающие числа к заданному масштабу.
Числа, поступающие на левый вход, сравниваются с диапазоном значений, лежащих между первым (минимум) и вторым (максимум) аргументом, и в зависимости от коэффициента масштабирования, указанного в пятом аргументе (<0>–линейный, <1>–логарифмический), переводятся в диапазон значений, лежащих между третьим (минимум) и четвертым (максимум) аргументом.
Например, если на вход поступило число, равное нижней (верхней) границе диапазона сравнения (первый/второй аргумент), на выход будет отправлено значение нижней (верхней) границы выходного диапазона (третий/четвертый аргумент).
Значения аргументов можно изменять динамически, подавая на соответствующие входы необходимые сообщения.
См. также [limit] из библиотеки Maxlib и [linedrive] из библиотеки Cyclone/Hammer.
score – ищет последовательность поступающих на вход MIDI-нот (пар чисел высота-громкость) среди элементов множества, указанного в первом аргументе, и, если они совпадают (высота ноты и значение элемента множества), подает на выход номер соответствующего элемента данного множества.
Во втором аргументе можно указать максимальное количество нот, через которые можно перескакивать.
speedlim – то же, что и [speedlim] из библиотеки Cyclone/Hammer.
split * – то же, что и [split] из библиотеки Cyclone/Hammer, но без явного указания типа числовой переменной (с десятичной точкой или без).
* Конфликтует с одноименными объектами из библиотеки Cyclone/Hammer и Iemlib.
step – то же, что и [line], но с возможностью изменения шага линейной развертки в абсолютных единицах, а не в единицах времени.
subst – генератор "самоподобных" музыкальных структур (неповторяющихся списков MIDI-нот) на основе расширения или сжатия музыкального ряда, полученного на вход в виде списка или множества чисел.
sync – синхронизатор потоков чисел.
В зависимости от сообщения, полученного на левый вход, может работать в одном из следующих режимов синхронизации:
<mode any> – подает на соответствующие выходы новые сообщения, полученные на любой вход, вместе с последними сообщениями, полученными на другие входы объекта;
<mode left> – запоминает и подает на соответствующие выходы последние полученные сообщения только после того, как на левый вход поступит новое сообщение;
<mode right> – запоминает и подает на соответствующие выходы последние полученные сообщения только после того, как на правый вход поступит новое сообщение;
<mode all> – запоминает последние полученные сообщения и подает их на соответствующие выходы только после того, как на все входы поступят новые сообщения;
<trigger n> – запоминает и подает на соответствующие выходы последние полученные сообщения только после того, как на n-ый вход поступит новое сообщение.
Данный режим зависит от режимов работы <mode any> или <mode all>;
<require n> – дополнительное ограничение n-ым входом;
Количество входов и выходов объекта задается в аргументе. Если аргументов несколько, то количество входов и выходов определяется количеством аргументов, в которых указываются начальные значения чисел, подаваемых на соответствующие выходы.
См. также [buddy] и [bondo] из библиотеки Cyclone/Hammer.
temperature – подсчитывает количество сообщений (любого типа), принятых на левый вход в течение T миллисекунд, указанных в аргументе или полученных на правый вход.
Если на вход не поступает ни одного сообщения, на выход будет регулярно (с периодичностью T миллисекунд) подаваться нуль.
tilt – измеряет степень линейного отклонения поступающих на левый вход чисел: если в течение T миллисекунд (полученных на правый вход) среди поступающих чисел произошел скачек более чем на N значений (установленных сообщением <tilt N>, полученным на левый вход), на выход будет отправлена череда команд <bang>, сигнализирующих об "опасном" скачке.
timebang – подает на выход команду <bang> в установленное время суток (заданное в аргументе: <часы минуты секунды>).
В аргументе можно установить расписание для нескольких событий, если указать время их выполнения (в часах, минутах, секундах) через пробел, например: <9 0 0 21 30 0>, – команда <bang> будет отправлена на выход ровно в девять утра и в девять тридцать вечера.
unroute – присваивает идентификаторы потокам чисел.
Отправляет сообщения, полученные с различных входов, на один выход, присваивая им идентификаторы (атрибуты), заданные в соответствующих аргументах.
Количество входов объекта зависит от количества аргументов.
См. также [funnel] из библиотеки Cyclone/Hammer.
urn – то же, что и [urn] из библиотеки Cyclone/Hammer.
velocity – измеряет скорость изменения разрядности чисел в секунду.
wrap – то же, что и [wrap] из библиотеки Zexy, но с дополнительным (правым) выходом, на который подается номер периода (перехода на новый цикл).
См. также [rewrap] из библиотеки Maxlib и встроенный объект [wrap~].
db2v, v2db – преобразует децибелы в rms-единицы (действующей амплитуды) и наоборот.
split * – то же, что и [moses].
* Конфликтует с одноименными объектами из библиотеки Cyclone/Hammer и Maxlib.
for++ – счетчик с настраиваемым интервалом времени между отсчетами. При поступлении на вход команды <bang> подает на левый выход с интервалом T миллисекунд, указанных в третьем аргументе (или полученных на третий вход) последовательность чисел, увеличивающихся (или уменьшающихся) на 1, начиная с числа, указанного в первом аргументе (или полученного на левый вход) до числа, указанного во втором аргументе (или полученного на правый вход).
См. также [pulse] из библиотеки Maxlib.
f2note – преобразует частоту (Гц) в MIDI-ноты.
Принимает на вход значение частоты (в Гц), подает на правый выход – соответствующее значение частотного интервала (в центах), на средний выход – символьное представление ноты в виде сообщения <set имя_ноты>, на левый выход – номер MIDI–ноты, соответствующей данной частоте.
См. также встроенный объект [ftom].
gate * – то же, что и встроенный [spigot], но флаг пропуска/блокировки поступающих сообщений может быть указан в аргументе.
* Конфликтует с [gate] из библиотеки Cyclone/Hammer.
soundfile_info – анализирует заголовки аудио-файлов (формата RIFF-WAVE).
Принимает на вход сообщения <read путь/имя_файла.wav> и подает на выход список из 7 элементов:
FIR~ – фильтр с конечной импульсной характеристикой, задаваемой в таблице (множестве чисел), указанной в аргументе (или установленной сообщением <set имя_таблицы N>, где N – количество первых семплов таблицы, используемых в качестве импульсной характеристики фильтра, но не больше размера таблицы).
См. также [buffir~] из библиотеки Cyclone/Sickle.
maverage~ – фильтр скользящего среднего с бесконечной импульсной характеристикой и линией задержки:
y[n] = (x[n] + x[n-1] + x[n-2] +...+ x[n-N]) / N,
где y[n] – выходной сигнал,
x[n] – входной сигнал,
x[n–1] – копия входного сигнала, удержанного на 1 семпл,
x[n–2] – копия входного сигнала, удержанного на 2 семпла,
x[n-N] – копия входного сигнала, удержанного на N семплов,
N = время усреднения (мс) * 0.001 * частота дискретизации (семплов/с).
В первом аргументе можно указать максимальное время усреднения, во втором – текущее время усреднения (которое можно также получить на правый вход, >= 1,45 мс).
ap1~, ap2~ – всепропускающий фильтр первого/второго порядка.
В настройках фильтра можно указать частоту (Гц) с перевернутой (на -90°) фазой и время интерполяции (мс). Фильтр второго порядка предлагает возможность выбора коэффициента добротности (Q), а в качестве -90° частоты выступает частота, сдвинутая по фазе на -180°.
См. также [allpass~] из библиотеки Cyclone/Sickle.
bpq2~, bpw2~ – полосно-пропускающий фильтр второго порядка с регулируемым коэффициентом добротности (Q) / полосой пропускания (bandwidth).
В настройках фильтра можно указать центральную частоту (Гц), коэффициент добротности (Q) / ширину полосы пропускания (Гц) и время интерполяции (мс).
См. также встроенные объекты [bp~] и [vcf~], объекты [vcf_bp2~], [rbpq2~] и [rbpw2~] из библиотеки Iemlib, [reson~] и [svf~] из библиотеки Cyclone/Sickle.
rbpq2~, rbpw2~ – полосно-пропускающий резонансный фильтр второго порядка с регулируемым коэффициентом добротности (Q) / полосой пропускания (bandwidth).
В настройках фильтра можно указать центральную частоту (Гц), коэффициент добротности (Q) / ширину полосы пропускания (Гц) и время интерполяции (мс).
См. также встроенные объекты [bp~] и [vcf~], объекты [vcf_rbp2~], [bpq2~], [bpw2~] и [para_bp2~] из библиотеки Iemlib, [reson~] и [svf~] из библиотеки Cyclone/Sickle.
para_bp2~ – параметрический полосно-пропускающий фильтр второго порядка.
В настройках фильтра можно указать центральную частоту (Гц), коэффициент добротности (Q), уровень усиления (дБ) полосы частот вокруг центральной частоты и время интерполяции (мс).
См. также [rbpq2~] и [rbpw2~] из библиотеки Iemlib,
bsq2~, bsw2~ – полосно-задерживающий (режекторный) фильтр второго порядка с регулируемым коэффициентом добротности (Q) / полосой пропускания (bandwidth).
В настройках фильтра можно указать центральную частоту (Гц), коэффициент добротности (Q) / ширину полосы пропускания (Гц) и время интерполяции (мс).
См. также [svf~] из библиотеки Cyclone/Sickle.
hp1~, hp2~ – пропускающий фильтр верхних частот первого/второго порядка.
В настройках фильтра можно установить частоту среза (Гц) и время интерполяции (мс). Фильтр второго порядка предлагает возможность выбора коэффициента добротности (Q).
См. также встроенный объект [hip~] и [svf~] из библиотеки Cyclone/Sickle.
lp1~, lp2~ – пропускающий фильтр нижних частот первого/второго порядка.
В настройках фильтра можно установить частоту среза (Гц) и время интерполяции (мс). Фильтр второго порядка предлагает возможность выбора коэффициента добротности (Q).
См. также встроенный объект [lop~], объекты [onepole~], [lores~] и [svf~] из библиотеки Cyclone/Sickle и [lp1_t~] из библиотеки Iemlib, [moog~] из библиотеки Ggext.
lp1_t~ – пропускающий фильтр нижних частот первого порядка.
То же, что и [lp1~] из библиотеки Iemlib, но частота среза задается не в герцах, а в единицах времени:
2n * ~158,75 Гц = 2–n единиц (n > 0).
hml_shelf~ – 3-х полосный эквалайзер.
В настройках фильтра можно указать нижнюю и верхнюю частоты среза (Гц), задать уровни корректировки (+/– N Дб) низких, средних и высоких частот и время интерполяции (мс).
hp2_butt~, hp3_butt~, hp4_butt~, hp5_butt~, hp6_butt~, hp7_butt~, hp8_butt~, hp9_butt~, hp10_butt~ – пропускающий фильтр верхних частот с характеристикой Баттерворта 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика ВЧ-фильтров Баттерворта 2-, 5- и 10-го порядков (с частотой среза 500 Гц) представлена на рисунке:

См. также [hp2_cheb~], [hp2_bess~], [hp2_crit~] и [vcf_hp2~] из библиотеки Iemlib.
hp2_cheb~, hp3_cheb~, hp4_cheb~, hp5_cheb~, hp6_cheb~, hp7_cheb~, hp8_cheb~, hp9_cheb~, hp10_cheb~ – пропускающий фильтр верхних частот с характеристикой Чебышева 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика ВЧ-фильтров Чебышева 2-, 5- и 10-го порядков (с частотой среза 100 Гц) представлена на рисунке:

См. также [hp2_butt~], [hp2_bess~], [hp2_crit~] и [vcf_hp2~] из библиотеки Iemlib.
hp2_bess~, hp3_bess~, hp4_bess~, hp5_bess~, hp6_bess~, hp7_bess~, hp8_bess~, hp9_bess~, hp10_bess~ – пропускающий фильтр верхних частот с характеристикой Бесселя 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика ВЧ-фильтров Бесселя 2- и 10-го порядков (с частотой среза 100 Гц) представлена на рисунке:

См. также [hp2_butt~], [hp2_cheb~], [hp2_crit~] и [vcf_hp2~] из библиотеки Iemlib.
hp2_crit~, hp3_crit~, hp4_crit~, hp5_crit~, hp6_crit~, hp7_crit~, hp8_crit~, hp9_crit~, hp10_crit~ – пропускающий фильтр верхних частот с критическим затуханием 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика ВЧ-фильтров с критическим затуханием 2- и 10-го порядков (с частотой среза 500 Гц) представлена на рисунке:

См. также [hp2_butt~], [hp2_cheb~], [hp2_bess~] и [vcf_hp2~] из библиотеки Iemlib.
lp2_butt~, lp3_butt~, lp4_butt~, lp5_butt~, lp6_butt~, lp7_butt~, lp8_butt~, lp9_butt~, lp10_butt~ – пропускающий фильтр нижних частот с характеристикой Баттерворта 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика НЧ-фильтров Баттерворта 2-, 5- и 10-го порядков (с частотой среза 100 Гц) представлена на рисунке:

См. также [lp2_cheb~], [lp2_bess~], [lp2_crit~] и [vcf_lp2~] из библиотеки Iemlib.
lp2_cheb~, lp3_cheb~, lp4_cheb~, lp5_cheb~, lp6_cheb~, lp7_cheb~, lp8_cheb~, lp9_cheb~, lp10_cheb~ – пропускающий фильтр нижних частот с характеристикой Чебышева 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика НЧ-фильтров Чебышева 2-, 5- и 10-го порядков (с частотой среза 500 Гц) представлена на рисунке:

См. также [lp2_butt~], [lp2_bess~], [lp2_crit~] и [vcf_lp2~] из библиотеки Iemlib.
lp2_bess~, lp3_bess~, lp4_bess~, lp5_bess~, lp6_bess~, lp7_bess~, lp8_bess~, lp9_bess~, lp10_bess~ – пропускающий фильтр нижних частот с характеристикой Бесселя 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика НЧ-фильтров Бесселя 2- и 10-го порядков (с частотой среза 100 Гц) представлена на рисунке:

См. также [lp2_butt~], [lp2_cheb~], [lp2_crit~] и [vcf_lp2~] из библиотеки Iemlib.
lp2_crit~, lp3_crit~, lp4_crit~, lp5_crit~, lp6_crit~, lp7_crit~, lp8_crit~, lp9_crit~, lp10_crit~ – пропускающий фильтр нижних частот с критическим затуханием 2-, 3-, 4-, 5-, 6-, 7-, 8-, 9- и 10-го порядков.
В настройках фильтра можно указать частоту среза (Гц) и время интерполяции (мс).
Амплитудно-частотная характеристика НЧ-фильтров с критическим затуханием 2- и 10-го порядков (с частотой среза 100 Гц) представлена на рисунке:

См. также [lp2_butt~], [lp2_cheb~], [lp2_bess~] и [vcf_lp2~] из библиотеки Iemlib.
vcf_hp2~, vcf_hp4~, vcf_hp6~, vcf_hp8~ – "сигнально-управляемый" (voltage controlled) пропускающий фильтр верхних частот 2-, 4-, 6- и 8-го порядков.
Может принимать значения частоты среза и величины добротности (Q) в виде числа или сигнала (на второй и третий входы объекта соответственно). Аргументов не имеет.
Амплитудно-частотная характеристика "сигнально-управляемых" ВЧ-фильтров 2-, 4- и 8-го порядков (с частотой среза 100 Гц и величиной добротности Q=0.5) представлена на рисунке:

См. также [hp2_butt~], [hp2_cheb~], [hp2_bess~] и [hp2_crit~] из библиотеки Iemlib.
vcf_lp2~, vcf_lp4~, vcf_lp6~, vcf_lp8~ – "сигнально-управляемый" (voltage controlled) пропускающий фильтр нижних частот 2-, 4-, 6- и 8-го порядков.
Может принимать значения частоты среза и величины добротности (Q) в виде числа или сигнала (на второй и третий входы объекта соответственно). Аргументов не имеет.
Амплитудно-частотная характеристика "сигнально-управляемых" НЧ-фильтров 2-, 4- и 8-го порядков (с частотой среза 500 Гц и величиной добротности Q=0.5) представлена на рисунке:

См. также [lp2_butt~], [lp2_cheb~], [lp2_bess~] и [lp2_crit~] из библиотеки Iemlib.
vcf_bp2~, vcf_bp4~, vcf_bp6~, vcf_bp8~ – "сигнально-управляемый" (voltage controlled) полосно-пропускающий фильтр 2-, 4-, 6- и 8-го порядков.
Может принимать значения центральной частоты и величины добротности (Q) в виде числа или сигнала (на второй и третий входы объекта соответственно). Аргументов не имеет.
Амплитудно-частотная характеристика "сигнально-управляемых" полосовых фильтров 2-го и 8-го порядков (с частотой среза 100 Гц и величиной добротности Q=2) представлена на рисунке:

См. также встроенные объекты [bp~] и [vcf~], объекты [bpq2~], [rbpq2~] и [rbpw2~] из библиотеки Iemlib, [reson~] и [svf~] из библиотеки Cyclone/Sickle.
vcf_rbp2~, vcf_rbp4~, vcf_rbp6~, vcf_rbp8~ – "сигнально-управляемый" (voltage controlled) полосно-пропускающий резонансный фильтр 2-, 4-, 6- и 8-го порядков.
Может принимать значения центральной частоты и величины добротности (Q) в виде числа или сигнала (на второй и третий входы объекта соответственно). Аргументов не имеет.
Амплитудно-частотная характеристика полосовых резонансных фильтров 2-, 4- и 8-го порядков (с частотой среза 100 Гц и величиной добротности Q=1) представлена на рисунке:

См. также [rbpq2~] и [rbpw2~] из библиотеки Iemlib и [reson~] из библиотеки Cyclone/Sickle.
prvu~ – измеряет среднеквадратический уровень громкости поступающего на вход сигнала и подает на выход список из трех элементов:
См. также [pvu~] из библиотеки Iemlib.
pvu~ – то же, что и [prvu~] из библиотеки Iemlib, но измеряет только пиковую амплитуду сигнала (значение которой подает на левый выход, а номер текущего замера – на правый).
rvu~ – то же, что и [prvu~] из библиотеки Iemlib, но измеряет только среднеквадратический уровень громкости поступающего сигнала.
См. также [pvu~] из библиотеки Iemlib.
sin_phase~ – принимает на левый и правый входы аудио-сигналы для сравнения, вычисляет разность их фаз и подает результат (в семплах) на выход в виде сигнала.
peakenv~– анализатор пиковых значений амплитудной огибающей.
В зависимости от времени, установленного в первом аргументе (в миллисекундах), при падении уровня входного сигнала выполняет его логарифмическое сглаживание.
Библиотека Iemlib/Iemlib2:
mergefilename – то же, что и [tosymbol] из библиотеки Cyclone/Hammer, но:
splitfilename – разбивает строку символов (представляющих адрес к какому-либо файлу), на два сообщения – имя файла (подается на правый выход) и путь к файлу (подается на левый выход).
Предварительно необходимо указать разделитель, на основе которого будет производится анализ поступившего сообщения.
См. также [stripdir] из бибилотеки Ggext.
stripfilename – отсекает у поступающих сообщений N символов слева (если N>0) или справа (если N<0), где N – число, указанное в аргументе, или полученное на вход в виде сообщения <set N>.
unsymbol – аналог сообщения <$1>.
Позволяет избавиться от атрибута symbol, идущего перед сообщением, превращая это сообщение в anything.
add2_comma – принимает на вход любые сообщения, добавляет к ним спереди <add2 , > и подает на выход.
Может использоваться для динамического формирования сообщений из списков, когда число элементов списка заранее не известно, иначе лучше использовать сообщение <add2 , $N>, где N – номер элемента списка.
any – хранилище сообщений любого типа.
Принимает на левый вход сообщения любого типа, запоминает их и подает на выход. Сообщения, полученные на правый вход, запоминаются, но на выход не подаются.
При поступлении на вход команды <bang> отправляет на выход последнее полученное сообщение.
Начальное сообщение можно указать в аргументе.
merge_any – объединяет два сообщения в список.
Присоединяет сообщение, полученное на правый вход, к сообщению, полученному на левый вход. Результирующий список подает на выход после того, как на левый вход поступит сообщение.
Команда <bang>, принятая на левый/правый вход, очищает память левой/правой части списка.
См. также [iem_prepend] и [iem_append] из библиотеки Iemlib, [Append], [prepend] и [zl] из библиотеки Cyclone/Hammer.
pre_inlet – принимает на вход любые сообщения, и перед тем, как отправить их на выход, сначала отправляет сообщение, указанное в аргументе, а затем – само поступившее сообщение.
iem_prepend, = pp – аналог [prepend] из библиотеки Cyclone/Hammer, но имеет дополнительный (правый) вход, на который принимает префиксные сообщения для их присоединения (слева) к сообщениям, полученным на левый вход.
См. также [iem_append] и [merge_any] из библиотеки Iemlib, [Append] и [zl] из библиотеки Cyclone/Hammer.
iem_append – аналог Append] из библиотеки Cyclone/Hammer, но имеет дополнительный (правый) вход, на который принимает постфиксные сообщения для присоединения (справа) к сообщениям, полученным на левый вход.
См. также [iem_prepend] и [merge_any] из библиотеки Iemlib, [prepend] и [zl] из библиотеки Cyclone/Hammer.
prepend_ascii – то же, что и [prepend] из библиотеки Cyclone/Hammer, но значение первого аргумента будет интерпретироваться как номер соответствующего ASCII-символа, который будет добавляться к поступающим сообщениям спереди.
toggle_mess, = tm – циклически перебирает (подавая на выход) значения аргументов.
При поступлении на вход любого сообщения, подает на правый выход номер текущего (сфокусированного) аргумента (начиная с нулевого), на средний – его значение, на левый – значение аргумента с префиксом <set>. Следующее сообщение переводит фокус на следующий аргумент, и т.д. (с последнего аргумента фокус перемещается обратно на нулевой).
dollarg, = $n – возвращает список всех аргументов родительского объекта (по команде <bang> или <0>) или значение конкретного аргумента по его номеру N (начиная с первого, если N>0, или последнего, если N<0).
Количество или номер конкретного аргумента отправляет на правый выход.
dbtofad, fadtodb – преобразует "MIDI-децибелы" (равные VU-децибелам плюс 100 и принимающие значения от 0 до 142) в микшерные графические единицы (отображаемые на экране микшерного пульта в пикселях от 0 до 147) и наоборот. Работает аналогично [hslider] в режиме "log".
Построен на базе [transf_fader] из библиотеки Iemlib1/Iemlib2.
fadtorms, rmstofad – преобразует микшерные графические единицы (отображаемые на экране микшерного пульта в пикселях от 0 до 147) в rms-единицы (действующей амплитуды со значением от 0 до ~126) и наоборот.
Построен на базе [transf_fader] из библиотеки Iemlib1/Iemlib2.
transf_fader – позволяет создавать собственные конвертеры чисел на основе точек перехода (входящих значений в исходящие): числа, лежащие вокруг этих точек, будут линейно масштабироваться.
round_zero – округляет числа, меньшие по абсолютному значению числа, указанного в аргументе, до 0.
speedlim – то же, что и [speedlim] из библиотеки Cyclone/Hammer.
wrap – аналог [wrap] из библиотеки Zexy с той разницей, что заключает поступающие числа в пределы от 0 до 1–10–n с разрешением 10–n, где n – количество знаков после запятой поступившего на вход числа.
float24 – то же, что и [float], но позволяет вводить более "длинные" десятичные дроби (через пробел после шестого знака), не прибегая к экспоненциальному представлению.
init, = ii – при загрузке заплатки отправляет на выход сообщение, указанное в аргументе. Пропускает через себя любые сообщения.
См. также встроенный объект [loadbang] и [active] из библиотеки Cyclone/Hammer.
exp_inc – линейный/экспоненциальный счетчик с настраиваемым абсолютным или относительным (в % от начального значения) шагом отсчета. В зависимости от знака (+/–) шага может считать вверх или вниз от начального значения до значения, принятого за максимальное/минимальное.
См. также [counter] из библиотеки Cyclone/Hammer.
modulo_counter – циклический счетчик.
По команде <bang>, принятой на левый вход, подает на выход число, большее, предыдущего на 1, начиная с числа, указанного во втором аргументе (или полученного на правый вход) до числа, указанного в первом аргументе (или полученного на левый вход). После достижения максимума (значения первого аргумента) обнуляет счетчик (устанавливает текущую позицию на значение второго аргумента).
См. также [counter] из библиотеки Cyclone/Hammer.
bpe – генератор точек перегиба огибающей (break-point envelope), секвенсор.
Аналог [iso] из библиотеки Maxlib, но расписание устанавливается одним сообщением (списком), принятым на левый вход, нечетные элементы которого – это значения чисел, отправляемых на левый выход, четные – интервалы времени (в миллисекундах) между их отправкой (подаются на средний выход).
По окончании секвенции подает на правый выход команду <bang>.
Может использоваться для формирования огибающей объектом [line].
См. также [t3_bpe] из библиотеки Iemlib и [envgen] из библиотеки Ggext.
iem_route – то же, что и встроенный [route], но подает на соответствующий выход команду <bang>, а не оставшуюся часть сообщения.
См. также [iem_i_route] из библиотеки Iemlib и [nroute] из библиотеки Maxlib.
iem_i_route – аналог встроенного объекта [route] для списков чисел.
Если первый элемент поступившего на вход списка совпадает с одним из значений множества целых чисел, лежащих между первым и вторым аргументами, подает оставшуюся часть списка на соответствующий выход.
Количество выходов определяется количеством целых чисел между значениями первого и второго аргумента.
См. также [iem_route] из библиотеки Iemlib и [nroute] из библиотеки Maxlib.
iem_receive, = iem_r – то же, что и встроенный объект [receive], но имя ресивера можно изменять динамически с помощью команды <set имя_ресивера>.
См. также [receivelocal] из библиотеки Ggext.
iem_send, iem_s – то же, что и встроенный объект [send], но имя объекта можно изменять динамически с помощью команды <set имя>, отправленной на правый вход.
iem_sel_any – индексирует сообщения (поступающие на вход в виде <add N сообщение>, где N – индекс сообщения).
При поступлении на вход числа ищет сообщение с индексом N, равным значению этого числа, отправляет найденное (или крайнее) сообщение в чистом виде на правый выход, на левый выход подает это же сообщение с префиксным словом <set>.
См. также [index] из библиотеки Zexy, [coll] из библиотеки Cyclone/Hammer и [iem_pbank_csv] из библиотеки Iemlib.
iem_pbank_csv – средство хранения банка параметров (в виде списков сообщений любого типа) с возможностью чтения и записи во внешний файл (с запятой в качестве разделителя значений).
В аргументе можно указать количество параметров одного набора и общее количество наборов.
Значение любого параметра можно изменять динамически, обращаясь к нему по его индексу.
list2send – отправляет сообщения объектам [receive] не по имени, а по индексу.
Отправляет любые поступающие сообщения (вида <N сообщение>, <from N сообщение>, или <all сообщение>) объектам [receive], установленных с помощью сообщения <add N имя_ресивера>, где N – индекс ресивера.
См. также встроенный объект [send], [dist] и [remote] из библиотеки Maxlib и [sendlocal] из библиотеки Ggext.
receive2list – принимает сообщения от объектов [send] и подает их на выход вместе с индексом соответствующего объекта, отправившего это сообщение (перед использованием объекты [send] необходимо проиндексировать и загрузить в память объекта).
Отправляет на выход любые сообщения (в виде <N сообщение>), полученные от объектов [send], установленных с помощью сообщения <add N имя_объекта >, где N – индекс объекта [send] (< 200).
Построен на базе [iem_receive] из библиотеки Iemlib.
fade~ – изменяет форму поступающего на вход сигнала в соответствии с передаточной функцией, указанной в аргументе или установленной сообщением:
<set _lin> – линейная,
<set _linsqrt> – линейно-квадратическая,
<set _sqrt> – квадратическая,
<set _sin> – синусоидальная,
<set _sinhann> –синусоидальная Хеннинга,
<set _hann> – Хеннинга.
Может использоваться для придания различных форм огибающей на стадиях усиления и затухания.
iem_blocksize~ – подает на выход (в виде числа) размер блока DSP обработки (в семплах), установленный в текущем окне.
iem_samplerate~ – подает на выход (в виде числа) частоту дискретизации (Гц, = семплов в секунду), установленную в текущем окне.
LFO_noise~ – то же, что и [noisi~] из библиотеки Zexy
: генератор белого шума с регулируемой полосой пропускания и амплитудной интерполяцией (сглаживанием промежуточных значений).
См. также встроенный объект [noise~], [noish~] из библиотеки Zexy, [pink~] и [rand~] из библиотеки Cyclone/Hammer, [pink~] из библиотеки Iemlib.
pink~ – то же, что и [pink~] из библиотеки Cyclone/Hammer: генератор "розового шума" . Построен на базе объектов [noise~] и [biquad~].
См. также [noisi~] и [noish~] из библиотеки Zexy, [rand~] из библиотеки Cyclone/Hammer, [LFO_noise~] из библиотеки Iemlib.
Библиотека Iemlib/Iem_t3_lib:
Справку по time-tagged (t3_)объектам можно получить в работе Gerhard Eckel и Manuel Rocha Iturbide "The development of GiST".
t3_bpe – генератор точек перегиба огибающей (break-point envelope) с разрешающей способностью одного семпла.
То же, что и [bpe] из библиотеки Iemlib, но отправляет сообщения на выход не в промежутках времени между блоками DSP обработки, а с точностью до одного семпла (единицы измерения – миллисекунды), и командой запуска является не сообщение <bang>, а число, полученное на левый вход, отождествляемое с временем задержки (в мс) перед началом отправки выходных сообщений.
Значения точек перегиба, подаваемые на левый выход, сопровождаются префиксным временным тегом (измеряемом в миллисекундах), соответствующим положению данных событий на временной оси текущего блока DSP обработки и необходимым для корректной работы с прочими time-tag (t3_)объектами.
См. также и [envgen] из библиотеки Ggext.
Дополнительную справку по t3_объектам можно получить в статье "The development of GiST".
t3_delay, = t3_del – триггер с линией задержки до одного семпла.
Принимает на левый вход числовое сообщение и через T миллисекунд, указанных в аргументе (или полученных на правый вход) отправляет на выход временной тег (положение в текущем блоке DSP обработки) этого сообщения. Не ясно, почему для одного сообщения, полученного в различные моменты времени, временной тег всегда одинаков ?
Дополнительную справку по t3_объектам можно получить в статье "The development of GiST".
t3_timer – аналог [timer], но может измерять время между двумя событиями с точностью до одного семпла.
Принимает на левый вход первое сообщение (число), на правый вход – второе сообщение (число), время между их поступлением подает на выход в миллисекундах.
Дополнительную справку по t3_объектам можно получить в статье "The development of GiST".
t3_metro – аналог встроенного объекта [metro], но может отсчитывать тики с интервалом времени до одного семпла.
Начинает отсчет по команде <start N>, останавливает – по команде <stop>. В процессе отсчета подает на правый выход – текущий интервал времени между тиками, на левый выход – временной тег тика (положение в текущем блоке DSP обработки).
Дополнительную справку по t3_объектам можно получить в статье "The development of GiST".
t3_sig~ – аналог встроенного объекта [sig~], но может принимать сообщения о смене амплитуды выходного сигнала не в промежутках времени между блоками DSP обработки, а с точностью до одного семпла.
Принимает на вход список из двух элементов: временной тег (положение данного сообщения в текущем блоке DSP обработки) и значение амплитуды выходного сигнала нулевой частоты, который будет подан на выход. Начальное значение амплитуды можно указать в аргументе.
t3_line~ – аналог встроенного объекта [line~], но может принимать сообщения о смене амплитуды выходного сигнала не в промежутках времени между блоками DSP обработки (по умолчанию – 1,45 мс), а в долях миллисекунды.
Для формирования амплитудной огибающей необходимо отправить на левый вход объекта список из трех элементов:
времени задержки (в мс) перед началом формирования огибающей,
конечной амплитуды выходного сигнала,
времени развертки (в мс).
См. также встроенный объект [vline~], [Line~] и [linedrive] из библиотеки Cyclone/Hammer.
Библиотека Iemlib/Iem_mp3:
mp3play~ – mp3-плеер.
При поступлении на левый вход команды <open путь_к_файлу/имя_файл.mp3> загружает в буфер аудио-файл и по команде <start> начинает его проигрывание.
Воспроизведение аудио-файла можно временно остановить с помощью команды <pause> или остановить полностью по команде <stop>.
На правый вход принимает позицию аудио-файла (в секундах), начиная с которой он будет воспроизводиться.
По окончании проигрывания отправляет на правый выход команду <bang>. На второй выход справа регулярно (каждые ~26 миллисекунд) подает на выход текущую позицию файла.
На левый и второй слева выходы подает аудио-сигналы, представляющие данные левого и правого каналов аудио-файла соответственно.
polygate~ – переключатель входных сигналов с регулировкой времени и режима микширования.
По команде <choice N>, полученной на левый вход, начинает плавно приглушать уровень громкости текущего канала, одновременно повышая амплитуду сигнала, поступающего на вход N (начиная с 1), в течение времени, указанного во втором аргументе.
В первом аргументе указывается количество каналов (входов и выходов объекта – до 10), во втором – время микширования двух каналов при смене одного другим, в третьем – режим микширования: <linear> – линейный, <equal> (или не указан) – в равной степени.
См. также [mixer~] из библиотеки Ggext.
pan~ – выполняет панорамирование (распределение по каналам) сигнала, поступающего на левый вход. Угол обзора панорамы задается числовым сообщением, полученным на правый вход: от –45° (левый канал) до +45° (правый канал).
ln~ – то же, что и [log], но для сигналов: возвращает натуральный логарифм числа.
Если в аргументе указать минус единицу, [ln~] выполнит обратное преобразование: y = e lnx, где e – константа Эйлера (~2,71828)
См. также [log~] из библиотеки Ggext и [log~] из библиотеки Cyclone/Sickle.
rec2pol~, pol2rec~ – преобразует прямоугольные координаты в полярные и наоборот.
См. также [rec2pol~] и [pol2rec~] из библиотеки Motex.
shuffle – генератор неповторяющихся псевдо-случайных чисел.
Набор "случайных" чисел устанавливается значениями первого (минимум) и второго (максимум) аргументов (или чисел, полученных на левый и правый входы).
Для вступления в силу новых параметров необходимо установить нижнюю границу набора (отправив значение минимума на левый вход).
См. также [urn] из библиотеки Cyclone/Hammer.
system – отправляет системные сообщения для консоли.
getenv – при поступлении на вход команды <bang> возвращает значение переменной среды, указанной в аргументе или полученной на вход в виде сообщения <set имя_переменной> (напр.: <username> – имя текущего пользователя Windows).
acos~ – то же, что и [acos~] из библиотеки Cyclone/Sickle.
asin~ – то же, что и [asin~] из библиотеки Cyclone/Sickle.
cosh~ – то же, что и [cosh~] из библиотеки Cyclone/Sickle.
cosx~ – то же, что и [cosx~] из библиотеки Cyclone/Sickle.
sinh~ – то же, что и [sinh~] из библиотеки Cyclone/Sickle.
sinx~ – то же, что и [sinx~
] из библиотеки Cyclone/Sickle.
tanh~ – то же, что и [tanh~
] из библиотеки Cyclone/Sickle.
tanx~ – то же, что и [tanx~] из библиотеки Cyclone/Sickle.
rectify~ – то же, что и [abs~] из библиотеки Zexy и Cyclone/Sickle.
foldback~ – то же, что и [pong~] из библиотеки Cyclone/Sickle, но может сворачивать аудио-сигнал только в режиме folding.
foldover~ – искажает сигнал путем его свертки.
split~ – если амплитуда сигнала, поступающего на левый вход превосходит значение аргумента (или числа, полученного на правый вход), сигнал подается на правый выход, иначе – на левый.
ustep~ – единичная ступенчатая функция.
В зависимости от значения первого аргумента (или числа, полученного на средний вход) может работать в одном из двух режимов:
<0> – работает также, как [>~] из библиотеки Zexy: если амплитуда сигнала, поступающего на левый вход превосходит значение второго аргумента (или числа, полученного на правый вход), на выход будет подан единичный импульс (длинной, равной периоду превышения уровня входного сигнала установленного порога срабатывания), если уровень сигнала ниже порога – на выход будет отправлен сигнал с нулевой амплитудой.
<1> – то же, что и режим <0>, но для сигналов с уровнем ниже установленного порога никаких изменений произведено не будет: на выход будет отправлен исходный аудио-сигнал.
chop~ – модулятор прерываний.
Умножает сигнал, поступающий на левый вход на коэффициент модуляции, указанный в аргументе (или полученный на правый вход в виде числа), если модулирующий сигнал (подаваемый на средний вход) больше нуля.
decimate~ – производит децимацию (downsampling) сигнала в соответствии с установленным в первом аргументе (или полученным на средний вход) соотношением текущей частоты дискретизации (1 –исходная частота, 0.5 – половина частоты дискретизации и т.д.).
freqdiv~ – делитель частоты.
Вносит искажения в поступающий сигнал путем деления его на кратные частоты.
harmgen~ – генератор гармоник.
Принимает на левый вход сигнал основной частоты, на остальные десять входов – амплитуды N-ных гармоник этой частоты, где N – номер соответствующего входа (начиная со второго) минус один.
saturate~ – насыщает входной сигнал гармониками основной частоты, если его амплитуда превосходит порог, установленный в аргументе (или полученный на правый вход в виде числа).
vowel~ – простейший формантный фильтр.
На основе поступающего на левый вход сигнала и значения, указанного в аргументе (или полученного на правый вход числа) синтезирует форманты, соответствующие гласным буквам английского алфавита:
<0> – a, <1> – e, <2> – i, <3> – o, <4> – u.
dcblock~ – DC-фильтр.
Удаляет из поступающего сигнала нулевую частоту (постоянную составляющую):

gQ~ – реализация gQ эквалайзера Дэна Трумэна (Dan Trueman).
Стерео-эквалайзер с двенадцатью настраиваемыми банками параметров с возможностью регулировки центральной частоты, ширины полосы пропускания и коэффициента усиления для каждого банка.
Амплитудно-частотную характеристику фильтра с текущими параметрами можно получить в реальном времени, отправив на правый вход численное значение тестируемой частоты и вернув с третьего (слева) входа ее амплитуду.
Дополнительную информацию по работе оригинального эквалайзера можно получить здесь: http://www.music.princeton.edu/~dan/.
munger~ – гранулярная линия задержки.
Разбивает поступающий (на левый вход) сигнал на гранулы и подает его на левый и правый выходы.
В аргументе можно указать максимальное время задержки (в миллисекундах), которое будет выделено объекту в оперативной памяти (по умолчанию, 3000 мс). Максимальный размер гранулы будет составлять 1/3 от этого времени.
На левый вход принимает следующие сообщения:
На второй вход слева принимает время (в миллисекундах) между соседними гранулами, на третий вход – grain rate variation, на четвертый – размер гранул, на пятый – относительную высоту гранул, на шестой – степень отклонения от этой высоты, на седьмой – режим панорамирования выходного сигнала.
scrub~ – "дрожащая" линия задержки.
Для удержания сигнала, поступающего на левый вход, и избежания щелчков при наложении аудио-фрагментов друг на друга объект использует три буфера.
На левый вход можно отправить следующие сообщения:
absmax~, absmin~ – аналог [maximum~] и [minimum~] из библиотеки Cyclone/Sickle: сравнивает сигналы, поступающие на левый и правый входы (или сигнал, поступающий на левый вход, со значением аргумента или числом, полученным на правый вход). Сигнал с наибольшей (наименьшей) по абсолютному значению амплитудой подает на выход (в оригинальном, неабсолютном виде).
chase~ – сравнивает амплитуду сигналов, поступающих на левый и средний входы с амплитудой сигнала, поступающего на правый вход. Подает на левый выход тот сигнал, амплитуда которого в данный момент времени ближе к амплитуде синхронизирующего сигнала (подаваемого на третий вход), на правый выход – сигнал с более удаленной от синхронизирующего сигнала амплитудой.
escalator~ – округляет поступающий сигнал до ближайшего целого числа и подает результат на выход в виде сигнала. Режим округления можно установить в аргументе.
flip~ – реализован по алгоритму Джеймса Маккартни (James McCartney), разработчика программы SuperCollider.
Выполняет "отражение" амплитуды сигнала, поступающего на левый вход, от критического значения, установленного модулирующим сигналом, поступающим на правый вход: значения, не превосходящие (по абсолюту) установленный порог подаются на выход без изменения, если же абсолютное значение амплитуды несущего сигнала выше порога срабатывания, на выход будет отправлен сигнал с амплитудой порога, скорректированного на величину разности между им и абсолютной амплитудой несущего сигнала.
Может использоваться для создания distortion-эффектов аналоговых синтезаторов.
jitter~ – создает эффект дрожания амплитуды входного сигнала.
Степень дрожания N (амплитуда случайных колебаний) задается в первом аргументе: поступающий сигнал будет подаваться на выход с амплитудой, случайно увеличенной или уменьшенной на величину N.
По умолчанию, рандомизация происходит посемплово (т.е. с частотой дискретизации), однако этот процесс можно проводить вручную с помощью команды <bang>: амплитуда поступающего сигнала будет принимать случайные значения (в пределах, установленных первым аргументом) только при поступлении на вход команды <bang>. Этот режим устанавливается во втором аргументе значением <1> (по умолчанию, <0>).
klutz~ – вносит искажения в поступающий сигнал путем обращения второй половины семплов текущего DSP блока (первая половина – это зеркальное отображение второй).
random~ – генератор псевдо-случайных чисел (от нуля до значения, указанного в аргументе), работающий на частоте дискретизации.
terrain~ – выполняет интерполяцию двух и более фреймов (участков) таблицы (множества) чисел, указанной в первом аргументе. Индекс позиции считываемого множества принимает на левый вход в виде сигнала с амплитудой от 0 до 1, индекс wave-terrain позиции (фрейма) принимает на правый вход в виде сигнала с амплитудой от 0 до 1.
waffle~ – разделитель сигналов (кроссовер).
Сигнал, поступающий на левый вход, отправляется на левый выход, если амплитуда синхронизирующего сигнала (подаваемого на правый вход) ниже амплитуды разделяющего сигнала (подаваемого на средний вход), иначе аудио-сигнал будет направлен на правый выход.
weave~ – генератор субгармонических колебаний.
Генерирует прямоугольные колебания по точкам перехода поступающего на левый вход сигнала через нулевой уровень: при каждом пересечении амплитудной огибающей входного сигнала нулевой отметки [weave~] подает на выход в виде сигнала –1 (в фазе нарастания) или 1 (в фазе убывания).
Рабочий цикл колебаний задается следующим образом: в первом аргументе (или с помощью числа, полученного на левый вход) указывается количество точек перехода в фазе нарастания, необходимое для формирования отрицательной части цикла, во втором аргументе (или с помощью числа, полученного на правый вход) – количество точек перехода в фазе убывания, необходимое для формирования положительной части цикла.
См. также [dfreq~] из библиотеки Zexy
и [zerox~] из библиотеки Cyclone/Sickle.
gen5 – генератор экспоненциальной функции по точкам перегиба.
Принимает на вход список чисел, нечетные элементы которого представляют значения экспоненциальной функции, принимаемые ей в моменты времени, установленные четными элементами списка (номерами точек =семплов).
Отправляет на выход в течение нуля логических миллисекунд последовательность значений экспоненциальной функции в виде списков из двух элементов: номера текущего значения и самого значения.
См. также [gen7] и [gen24] из библиотеки PeRColate.
gen7 – то же, что и [gen5], но использует линейную интерполяцию.
См. также [gen24] из библиотеки PeRColate.
gen9 – генератор гармонических функций с возможностью указания конкретных гармоник основной частоты, их амплитуд и фаз.
Принимает на вход список чисел <H1 A1 P1 . . . Hi Ai Pi>, где Hi – номер гармоники (по отношению к основной частоте, принимаемой за единицу), Ai – амплитуда i-ой гармоники, Pi – фаза i-ой гармоники (в градусах).
Отправляет на выход в течение нуля логических миллисекунд последовательность значений одного периода функции синуса (и ее гармонических составляющих) в виде списков из двух элементов: номера текущего значения и самого значения.
В первом аргументе можно указать разрешение – количество точек (семплов), с помощью которых будет построена гармоническая функция.
См. также [gen10] из библиотеки PeRColate.
gen10 – аналог команды <sinesum> для множества чисел (с нормализацией).
При поступлении на вход списка чисел <A1 A2 A3 … Ai>, представляющего собой амплитуды i-ых гармоник синусоиды (начиная с первой – основной частоты), отправляет на выход в течение нуля логических миллисекунд последовательность значений одного периода функции синуса (и ее гармонических составляющих) в виде списка из двух элементов: номера текущего значения и самого значения.
В первом аргументе можно указать разрешение – количество точек (семплов), с помощью которых будет построена гармоническая функция.
См. также [gen9] из библиотеки PeRColate.
gen17 – генератор передаточных функций Чебышева.
Принимает на вход список амплитуд последовательных гармоник (начиная с первой – основной частоты), подает на выход списки из двух элементов: номера текущего значения функции Чебышева и самого значения.
gen24 – генератор линейной функции по точкам перегиба (то же, что и [gen7] но с относительными временными координатами).
Принимает на вход список чисел, четные элементы которого представляют значения функции, принимаемые ей в моменты времени, установленные нечетными элементами списка (относительно последней временной координаты, = предпоследнего элемента списка, значение которого принимается за базовую величину расчета других временных координат).
Отправляет на выход в течение нуля логических миллисекунд последовательность значений линейной функции в виде списков из двух элементов: номера текущего значения и самого значения.
В первом аргументе можно указать размер множества чисел (совокупность всех точек функции), относительно которого будут рассчитываться временные координаты точек.
См. также [gen5] из библиотеки PeRColate.
gen25 – генератор оконных функций Хеннинга/Хемминга.
В зависимости от полученного на вход числа: <1> (функция Хеннинга) или <2> (функция Хемминга, немного шире окна Хеннинга) сгенерирует в течение нуля логических миллисекунд последовательность значений соответствующей функции в виде списков из двух элементов: номера текущего значения и самого значения.
Разрешение (размер) функции в точках можно указать в первом аргументе.
Физические модели музыкальных инструментов библиотеки PeRColate:
Здесь описаны только те объекты, из которых мне удалось извлечь хоть какие-то звуки (по непонятным причинам некоторые физические модели отказываются работать при любых тестируемых параметрах).
bamboo~ – модель ударяющихся бамбуковых трубок.
cabasa~ – модель латиноамериканской погремушки кабасы (звучит при изменении резонансной частоты).
metashake~ – модель 7 перкуссионных инструментов (звучат при изменении параметра energy):
guiro~ – кубинский идиофон – высушенный продолговарый плод тыквы с зазубринами (звучит при изменении параметра scrape velocity).
wuter~ – модель падающих капель.
agogo~ – модель агого (бразильские колокольчики).
marimba~ – модель маримбы (ударный пластинчатый инструмент типа ксилофона с резонаторами).
vibraphone~ – модель вибрафона (ударный пластиночный инструмент с резонаторами и крыльчаткой).
blotar~ – гибрид электрогитары и блокфлейты.
bowed~ – модель смычкового резонансного инструмента.
bowedbar~ – bowed percussion bar
brass~ – модель духового инструмента
clarinet~ – модель кларнета
flute~ – модель флейты
mandolin~ – модель мандолины (щипковый инструмент с четырьмя парами струн и овальным корпусом).
plucked~ – модель оттянутой гитарной струны.
БиблиотекаGgext.
atan2~ – то же, что и [atan2~] из библиотеки Cyclone/Sickle, но подает результат на выход, не в радианах, а в циклах окружности (т.е. в 2¶ раза меньших значениях).
exp~ – то же, что и встроенный объект [exp], но для сигналов (возводит константу Эйлера e в степень поступающего на вход сигнала).
log~– то же, что и [log~] из библиотеки Cyclone/Sickle, но только для натуральных логарифмов (без возможности выбора основания).
См. также [ln~] из библиотеки Motex.
1/x~ – возвращает значение степенной функции y = 1/x в виде сигнала.
mixer~ – микшер.
Складывает сигналы, поступающие на открытые входы (все, по умолчанию). Количество входов задается в аргументе. Вход N (начиная с нулевого) можно открыть/закрыть с помощью сообщения <N 1/0>.
См. также [polygate~] из библиотеки Motex.
moog~ – "сигнально-управляемый" (voltage controlled) пропускающий резонансный фильтр нижних частот.
На правый вход принимает (в виде числа или сигнала) величину добротности фильтра Q (от 0 до 4), на средний – резонансную частоту Fс (в виде числа или сигнала), на левый вход – сигнал для фильтрации.
АЧХ фильтра для Fc = 500 Гц с различными вариантами Q представлена на рисунке:

См. также встроенный объект [lop~], [onepole~], [lores~] и [svf~] из библиотеки Cyclone/Sickle, [lp1_t~], [lp1~] и [lp2~] из библиотеки Iemlib.
sfplay~ – то же, что и [sfplay] из библиотеки Zexy (разработчик: Winfried Ritsch), но без возможности указания параметра endianness.
streamin~ – принимает аудио-сигнал от объекта [streamout~] с удаленного компьютера (номер порта указывается в аргументе).
streamout~ – отправляет аудио-сигнал объекту [streamin~] на удаленный компьютер (имя хоста и номер порта указывается в первом и втором аргументах соответственно).
fasor~ – аналог встроенного объекта [phasor~], но:
fofsynth~, = fof~ – формантный синтезатор (Function d’Onde Formatique).
highpass, lowpass, equalizer, bandpass, notch, highshelf – интерфейсы пропускающих фильтров высоких/низких частот, эквалайзера, полосно-пропускающего/задерживающего фильтра и high-shelf-фильтра, рассчитывающие коэффициенты [biquad~] на основе установленной частоты среза, ширины полосы пропускания (в процентах от октавы), коэффициента усиления (для эквалайзера и shelf-фильтра) и характеристики крутизны подъема (shelf-фильтра).
При достаточно узкой ширине полосы пропускания (менее 50%) происходит резкое усиление частот вокруг частоты среза (более чем на 9 дБ).
Алгоритмы расчета коэффициентов заимствованы из статьи Роберта Б. Джонсона (Robert Bristow-Johnson) Cookbook formulae for audio EQ biquad filter coefficients.
envgen – генератор точек перегиба огибающей с графическим интерфейсом, секвенсор.
Точки перегиба огибающей устанавливаются щелчком левой кнопки мыши в специальном окне (либо программно, списком). Чтобы удалить точку, необходимо щелкнуть по ней левой кнопкой мыши и нажать клавишу Backspace. Размер окна огибающей можно изменить, щелкнув левой кнопкой мыши (в пользовательском режиме) в правом нижнем углу объекта и перетащив указатель в нужное местоположение, увеличив или уменьшив размеры объекта.
C помощью команды <freeze 1/0> объект можно перевести (и вернуть обратно) в такое состояние, что новые точки добавляться не будут.
Форму огибающей можно также задать с помощью списка:
<y1 x2 y2 x3 y3 ... xn yn>,
где yn – значение, подаваемое на левый выход (в виде списка <yn xn>) через время xn после отправки предыдущего сообщения. Причем, время xn рассчитывается относительно общей длительности секвенции (длины огибающей) в миллисекундах, установленных с помощью сообщения <duration T> (таким образом, что: x2 + x3 + ... + xn = T ).
В аргументе можно указать размеры графического объекта (по умолчанию 140x200).
Отправка на левый выход значений точек перегиба (по установленному расписанию) начинается по команде <bang>.
С помощью команды <dump> можно выгрузить память объекта в виде списка (<y1 x2 y2 x3 y3 ... xn yn>, отправленного на правый выход) для формирования огибающей другим генератором [envgen].
Для того, чтобы обратиться к конкретному значению огибающей (подаваемому на правый выход), необходимо отправить объекту соответствующую временную координату этого значения (от 0 до T).
Может использоваться для формирования огибающей объектом [line].
См. также [bpe] и [t3_bpe] из библиотеки Iemlib.
slider– то же, что и [vslider] но без окна свойств, при создании объекта в аргументе можно указать максимальное и минимальное значение (которое он будет через себя пропускть) и ширину ползунка. Работает только с целыми числами !
В отличие от [vslider], текущее состояние объекта может быть сохранено вместе с заплаткой с помощью объекта [state].
sinh– то же, что и [sinh] из библиотеки Cyclone/Hammer.
toddle– то же, что и [bng], но без окна свойств. Может пропускать через себя любые сообщения.
ticker– то же, что и [toggle], но без окна свойств, при создании объекта в аргументе можно указать его высоту и ширину.
state – сохраняет текущее состояние некоторых элементов графического интерфейса: индикатора чисел (number box), [slider] и [envgen] из библиотеки Ggext.
Для сохранения пресета, необходимо отправить на вход объекта сообщение <save>, затем номер пресета. Восстановить записанное в пресете состояние можно с помощью числа (номера пресета), отправленного на вход объекта.
invert – обращает в нуль поступающие на вход числа с ненулевыми значениями, а нуль – в единицу. Может использоваться в качестве обратного переключателя вместе с объектом [toggle].
sendlocal, = sl, receivelocal *, = rl – то же, что и встроенные объекты [send] / [receive], но обмен сообщениями происходит только внутри текущего окна (сообщения из/для абстракций и подчиненных окон не принимаются).
* Для объекта [receivelocal] обязательно наличие аргумента.
serialize – упаковывает поступающие на вход числа в список из N элементов (< 256), указанных в аргументе (в порядке поступления).
См. также [repack] из библиотеки Zexy и [thresh] из библиотеки Cyclone/Hammer.
stripdir – возвращает нижний уровень полученного на вход адреса.
Принимает на вход символьное представление пути к файлу или папке, отсекает все знаки до последней косой черты "/", оставшуюся часть сообщения подает на выход в виде символа.
См. также [splitfilename] из бибилотеки Iemlib.
unwonk – то же, что и [unpack], но имеет дополнительный правый выход, на который посылает невостребованную часть списка ("лишние" элементы
* Ежедневно обновляемый архив форума (в html-формате) можно скачать по адресу: http://iem.at/mailinglists/pd-list.tgz.
Есть еще очень много не упомянутых здесь библиотек (в т.ч. для обработки видео), а многое из того, что мною описано, нуждается в доработке. Приветствую любую помощь в их освоении и документировании, а также переводе иных справочных материалов к программе.
Кстати, объекты со скриншотами в данном руководстве предлагают всю информацию, какую мне удалось о них собрать. Если у какого-то объекта нет скриншота, вероятно, часть его функций осталась за кадром данного руководства.
Любые предложения, отзывы, рекомендации, исправления и пожелания принимаются по адресу: pure-data@mnm.ru.
Адреса дополнительных библиотек (упомянутых в данном руководстве):
Arraysize: http://pix.test.at/pd,
Ben Saylor: http://www.macalester.edu/~bsaylor
Yves Degoyon, sIgpAck: http://ydegoyon.free.fr
Zexy: ftp://ftp.iem.at/pd/Externals/ZEXY, Cyclone: http://suita.chopin.edu.pl/~czaja/miXed/externs/cyclone.html, Maxlib: http://www.akustische-kunst.de/puredata/maxlib,Iemlib: http://pd.iem.at/iemlib
Motex: http://www.reverberant.com/PD, PeRColate: http://www.akustische-kunst.de/puredata/percolate, Ggext: ftp://xdv.org/pub/gige/ggext,