<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>goatybi</title><generator>teletype.in</generator><description><![CDATA[goatybi]]></description><image><url>https://img3.teletype.in/files/a1/80/a180a2ca-ab13-4b55-921e-82923f633bd7.png</url><title>goatybi</title><link>https://teletype.in/@lckstar</link></image><link>https://teletype.in/@lckstar?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/lckstar?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/lckstar?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 05 Apr 2026 14:02:21 GMT</pubDate><lastBuildDate>Sun, 05 Apr 2026 14:02:21 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@lckstar/life-coding</guid><link>https://teletype.in/@lckstar/life-coding?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/life-coding?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>life-coding documentation(Tidal)  (ru)</title><pubDate>Thu, 04 Sep 2025 22:18:39 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/73/ff/73ffb9ec-70da-4f73-add8-d8c5de8bfd1f.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/20/e1/20e1edff-bff9-4ce2-b7ab-29c23758dc14.png"></img>0 челов шиллят это в ру, оч сложно ориентироваться в проекте тем, кто не пользуется сторонними источниками других стран и платными подписками оверлэй проектов. тут траил собрать все, что нужно для начала. я закину тольк все по воркшопу и ориентации на странице + ссылки с инфой и доп. кредитами. имея базис - продолжать можно самостоятельно.]]></description><content:encoded><![CDATA[
  <p id="LedN">0 челов шиллят это в ру, оч сложно ориентироваться в проекте тем, кто не пользуется сторонними источниками других стран и платными подписками оверлэй проектов. тут траил собрать все, что нужно для начала. я закину тольк все по воркшопу и ориентации на странице + ссылки с инфой и доп. кредитами. имея базис - продолжать можно самостоятельно. </p>
  <p id="m8ze"></p>
  <h2 id="Nrwf">воркшоп</h2>
  <p id="T0c0">вообще всё компится через <strong>2</strong> основных саппорта: <code><strong>.tidal</strong></code> ;<strong> <code>SuperDirt</code></strong>.</p>
  <p id="32kx">1) запуск <strong>SuperDirt</strong><br />SD должен авто запускаться после лоуда прилы <strong>SuperCollider IDE</strong>. если нет, то в окне редактора <strong>SuperCollider IDE</strong>, пишем - </p>
  <pre id="YZ0D">&#x27;SuperDirt.start&#x27;</pre>
  <p id="PAkf">и запускаем код нажатием кеев <strong>Cntrl + Enter </strong>(в то время как курсор на одной линии с кодом)</p>
  <p id="VBai">2) запуск <strong>Tidal Cycles</strong></p>
  <p id="2Ays">в вашем редакторе (Pulsar, vim, VS Code, итп), создайте новый файл и сохраните его с <strong>.tidal </strong>расширением (examples<strong>.tidal</strong>). <strong>Tidal</strong> должен автоматически запуститься, после запуска и выполнения команды. </p>
  <p id="tKw3">бтв вы можете просто юзать <a href="https://estuary.mcmaster.ca/" target="_blank">Estuary</a>. для начала как амулятор оч удобно. но будет доступ не ко всем возможностям редактора кода. </p>
  <h3 id="toYG">заметки/комменты в Haskell</h3>
  <p id="EeLZ">тут это прикольно релизнуто. ничего лишнего: даблите — в начале строки и все. все че после дабла, интерпретатор игнорит. я это чаще юзаю, чтобы игнорить какую-то строку и иметь возможность вернуть ее в код без делита.<br /></p>
  <figure id="ulM0" class="m_column">
    <img src="https://img1.teletype.in/files/c8/d0/c8d0cc2a-2dac-4d7d-bb42-166ed93bfcbc.png" width="1378" />
  </figure>
  <h3 id="EFzG">базовые паттерны</h3>
  <p id="0cNN">вщ овербейз вид создания звука выглядит около так:</p>
  <figure id="ZdUa" class="m_column">
    <img src="https://img1.teletype.in/files/ca/74/ca74dace-adc9-466d-8ebc-6592ed4facaa.png" width="1378" />
  </figure>
  <p id="OyI1">но после 20 минут вы будете прописывать такие строки хоткееями. </p>
  <p id="g4ly">вы можете остановить <strong>ЗВУК</strong> проекта, но <strong>НЕ САМ</strong> проект юзнув<code>silence</code>:</p>
  <figure id="xQKl" class="m_column">
    <img src="https://img2.teletype.in/files/13/76/13760a2a-c147-44a2-bcaa-0ca952f57268.png" width="1292" />
  </figure>
  <p id="fnHo">вщ оверлей во всем проекте есть 2 варианта звуков, которые можно юзать вместе с базис-саундом: синты и семплы. если нужно юзнуть семпл, прописанный заранее, просто роутите до папки с ним. бэйз идёт первый в списке, но если пророутить до самого звука, с помощью <code>:</code> и номера, то юз будет именно он. </p>
  <figure id="BBFj" class="m_column">
    <img src="https://img1.teletype.in/files/8c/e4/8ce42707-de80-47e2-92c0-42d00c0baeda.png" width="1376" />
  </figure>
  <p id="i1o2">такж можно указать папку и сэмпл в 2 частях:</p>
  <figure id="Jo86" class="m_column">
    <img src="https://img3.teletype.in/files/e5/01/e5016e2d-c0d3-4edc-b8fb-119712fe973a.png" width="1374" />
    <figcaption><strong>здесь <code>s</code> - это синоним к <code>sound</code>, -&gt; <code>d1 $ s &quot;drum&quot; # n 1</code> этот тот же паттерн</strong></figcaption>
  </figure>
  <p id="QyQZ">библио с семплами по умолчанию:</p>
  <figure id="oAzw" class="m_column">
    <img src="https://img4.teletype.in/files/30/12/30124f8f-641a-4493-a7a9-c679343e5651.png" width="1362" />
  </figure>
  <p id="KWBL">есть <a href="https://teletype.in/@lckstar/strudelsamples" target="_blank">базисная библио</a> с Dirt-Samples. в основном для написания чего-либо нужно будет импортить <a href="https://teletype.in/@lckstar/ownsamplesstrudel" target="_blank">собственные сэмплы</a> и роутить к ним. в <strong>Pulsar</strong> можно добавить настройки, которые загружают таб со всеми <strong>Dirt-Samples. </strong></p>
  <p id="atQo">составьте последовательность:</p>
  <figure id="5Zz0" class="m_column">
    <img src="https://img4.teletype.in/files/f0/bd/f0bdd640-7f42-4dab-a232-d61b2bf9a047.png" width="1528" />
  </figure>
  <p id="SnIo">чем больше в последовательности шагов, тем быстрее она выполняется:</p>
  <figure id="zXqX" class="m_column">
    <img src="https://img1.teletype.in/files/4d/51/4d513899-df2b-4e88-8bb6-9fb2e7f3a241.png" width="1532" />
  </figure>
  <p id="EF4q">прикольно оч, что работает именно так. это связано с тем, как <strong>Tidal</strong> <a href="https://teletype.in/@lckstar/cyclesstrudel" target="_blank">обрабатывает время</a>. cуществует универсальный цикл, который всегда работает. <strong>Tidal</strong> будет воспроизводить все звуки между речевыми знаками в одном цикле, если мы не укажем ему иного. вы также заметите, что <strong>Tidal</strong> равномерно распределяет звуки внутри цикла, что позволяет получать полиритмические структуры. можно изменять длительность цикла, используя <code>setcps</code> (где <code>cps</code> означает <strong>количество циклов в секунду</strong>) - это немного похоже на bpm (удары в минуту):</p>
  <figure id="DDek" class="m_column">
    <img src="https://img4.teletype.in/files/f8/7b/f87bca12-043e-4b7d-b2b2-1678df4415d5.png" width="1640" />
  </figure>
  <p id="1U8r">можно юзать <code>d1, d2, d3...d9</code> чтобы воспроизводить несколько последовательностей одновременно:</p>
  <figure id="SoLH" class="m_column">
    <img src="https://img2.teletype.in/files/50/cd/50cd8fc0-55a9-4efa-9ca2-1b99cdee1959.png" width="1644" />
  </figure>
  <p id="obHC">чтобы стопнуть весь раш звуков - <code>hush</code> (или <code>Cntrl+.</code>)</p>
  <p id="3EwN">можно остановить всё, изменив длину цикла на отрицательное число(главное заключить отрицательное число в скобки):</p>
  <figure id="N5r2" class="m_column">
    <img src="https://img4.teletype.in/files/b2/80/b28002b3-000f-433b-97e7-59fa9aa1f74e.png" width="1640" />
  </figure>
  <p id="TxU7">дальше запустить с положительным:</p>
  <figure id="6NXW" class="m_column">
    <img src="https://img1.teletype.in/files/0a/cc/0accfe67-542d-4268-9100-6ecae4ded1dc.png" width="1644" />
  </figure>
  <p id="a1wZ">или можно использовать <code>solo</code> для конкретной строки:</p>
  <figure id="M0kw" class="m_column">
    <img src="https://img1.teletype.in/files/0f/54/0f54cc0b-7f6f-45d1-b3fb-589017d003b4.png" width="1648" />
  </figure>
  <p id="X8GO">а плагин Pulsar добавляет хоткеи:</p>
  <p id="USOC">Cntrl+1 - для мута первого паттерна</p>
  <p id="u7mL">Cntrl+0 - анмутит все паттерны. </p>
  <p id="3nAu">все хоткеи есть в паке самого <strong>Pulsar</strong>.</p>
  <h2 id="qEPu">больше вариантов</h2>
  <p id="m9v1">можно добавлять фулл стоп или перерыв, с помощью <code>~</code>:</p>
  <figure id="tUVc" class="m_column">
    <img src="https://img2.teletype.in/files/d1/a2/d1a2b3f8-fbab-469c-845c-5fd706155b95.png" width="1640" />
  </figure>
  <p id="EQUM">добавлять предпоследовательность с помощью - <code>[]</code>:</p>
  <figure id="Onfy" class="m_column">
    <img src="https://img2.teletype.in/files/59/d5/59d5071a-ccd9-4387-8787-2222734a086f.png" width="1638" />
  </figure>
  <p id="K37J">для более вариативного размера такта:</p>
  <figure id="sAew" class="m_column">
    <img src="https://img4.teletype.in/files/7b/73/7b731f34-e030-47b9-acda-e570baccd454.png" width="1646" />
    <figcaption>предпоследовательность в предпоследовательности </figcaption>
  </figure>
  <figure id="oYMy" class="m_column">
    <img src="https://img4.teletype.in/files/fb/2f/fb2f9aa3-10e1-4d1c-962a-40787c5db1f1.png" width="1636" />
  </figure>
  <p id="fNeD">чтобы повторить паттерн - <code>*</code></p>
  <figure id="uTwu" class="m_column">
    <img src="https://img2.teletype.in/files/dd/75/dd75a1d0-6632-4cdf-9bce-d2c32d66089e.png" width="1640" />
  </figure>
  <figure id="drnS" class="m_column">
    <img src="https://img1.teletype.in/files/8c/7d/8c7d1687-301b-4477-ba5e-b0ab05d9889d.png" width="1634" />
    <figcaption>тож самое с предпоследовательностью</figcaption>
  </figure>
  <p id="Aja5">или используя <code>/</code> сделать обратное:</p>
  <figure id="Ddqs" class="m_column">
    <img src="https://img2.teletype.in/files/59/b0/59b0696c-794f-4d5d-91b5-7aba50245243.png" width="1646" />
  </figure>
  <p id="DFjt"><code>*</code> работает ускоряя шаг, который воспроизводится. <code>/</code> работает обратно, замедляя.</p>
  <p id="KZ5h">оч помогают &lt;&gt; для планирования паттернов по циклам:</p>
  <figure id="yw0w" class="m_column">
    <img src="https://img2.teletype.in/files/19/89/19894ba1-6f63-4cd1-8592-635855c5a2e6.png" width="1640" />
  </figure>
  <p id="clC5">другие распространенные символы мини-обозначений: <code>|</code> - выбор случайного варианта, <code>,</code> - одновременное воспроизведение двух шаблонов и <code>!</code> - воспроизведение шаблона.</p>
  <figure id="krg8" class="m_column">
    <img src="https://img3.teletype.in/files/e3/bc/e3bcea00-c4b1-412a-9cd5-212733278bed.png" width="1640" />
  </figure>
  <h2 id="hVgP">эффекты</h2>
  <h2 id="vYDB">гласные </h2>
  <p id="Q9rn">вщ можно юзать некст апы для изменения звучания. <code>vowel -</code> мейн фильтр, который может ченджить звучание - основные кодэйпы - <code>a</code>, <code>e</code>, <code>i</code>, <code>o</code> и <code>u</code>:</p>
  <figure id="u8Tg" class="m_column">
    <img src="https://img1.teletype.in/files/87/f5/87f52ef4-36c0-4942-a113-93a9575f5f1d.png" width="1638" />
  </figure>
  <p id="bjVc">в самом проде эффекты = паттерны звуко. есть базисный нейм - паттерны контроля:</p>
  <figure id="MlLx" class="m_column">
    <img src="https://img1.teletype.in/files/8a/c6/8ac6af85-17f1-411f-aadf-cfc664c0a260.png" width="1640" />
  </figure>
  <p id="r0Yn">тут важно помнить, что можно юзать <code>&quot;&lt;&gt;&quot;</code>для планировки тейка по звукам:</p>
  <figure id="f3LY" class="m_column">
    <img src="https://img2.teletype.in/files/d8/d9/d8d98cae-ea95-4a15-8bc2-74c0bee92325.png" width="1644" />
  </figure>
  <p id="rLMJ">такж если играться, можно добавить <strong>не</strong>гласную букву(<code>non-vowel</code>), чтобы остановить свойства гласной(<code>vowel</code>):</p>
  <figure id="iyUN" class="m_column">
    <img src="https://img3.teletype.in/files/2e/e6/2ee6dfc8-820a-481f-a6f7-bf59be659374.png" width="1642" />
  </figure>
  <p id="EnQM"><strong>Tidal</strong> будет авто сопоставлять звуки между друг другом:</p>
  <figure id="9zBs" class="m_column">
    <img src="https://img3.teletype.in/files/a2/7f/a27f5e11-c404-4af5-90e9-679571d6e5de.png" width="1638" />
  </figure>
  <p id="JwJk">можно потраить поменять параметры. структура воспроизведения будет идти слева:</p>
  <figure id="VkQi" class="m_column">
    <img src="https://img3.teletype.in/files/66/81/66819541-5bae-44a7-b470-84bb888a5b79.png" width="1640" />
  </figure>
  <h2 id="lKnO">усиление, высота тона(питч), панорама</h2>
  <p id="Ajuf">усилиние(<code>gain</code>) может изменять громкость различных звуков:</p>
  <figure id="btHe" class="m_column">
    <img src="https://img1.teletype.in/files/08/4f/084f7149-1f4f-4e92-bb37-06fc82475bb8.png" width="1648" />
  </figure>
  <p id="g5jW">скорость(<code>speed</code>) и нота(<code>note</code>) юзаются для того, чтобы задать высоту тона сэмплов. скорость(<code>speed</code>) влияет на скорость воспроизведения определённого тейка (напр. 2 = на октаву выше):</p>
  <figure id="gaWJ" class="m_column">
    <img src="https://img2.teletype.in/files/5f/52/5f52c704-897b-4ba4-a5a3-50d65a5347c4.png" width="1638" />
  </figure>
  <p id="LIen">есть такж шаблон из параметра скорости:</p>
  <figure id="1gpe" class="m_column">
    <img src="https://img2.teletype.in/files/96/a1/96a17192-ae00-4e22-8e3d-9ff145877203.png" width="1642" />
  </figure>
  <p id="sNnf"><code>up</code> повышает тональность сэмпла на полутона (напр. 12 = выше на октаву):</p>
  <figure id="Xdkr" class="m_column">
    <img src="https://img1.teletype.in/files/84/c2/84c23169-de8b-4da0-996f-fe6386c28489.png" width="1638" />
  </figure>
  <p id="ibOq">панорамирование (<code>pan</code>) даёт возможность создавать стереоэффекты( 0 = left, 0.5 = middle, 1 = right):</p>
  <figure id="ubiA" class="m_column">
    <img src="https://img4.teletype.in/files/77/d5/77d5b3ae-c333-4f13-957d-57f08c4f11dc.png" width="1640" />
  </figure>
  <h2 id="FoTh">дисторшн, ревёрб, делэй, фильтры</h2>
  <p id="tF6z"><code>shape</code> одна из функций, которая помогает для добавления <a href="https://teletype.in/@lckstar/audioeffects" target="_blank">дисторшна</a> (но он очень сильно может искажать звук по громкости(нужна калибровка)):</p>
  <figure id="KOtM" class="m_column">
    <img src="https://img3.teletype.in/files/a0/75/a0756241-78e3-460c-bb74-278b0dc46764.png" width="1640" />
  </figure>
  <p id="YbAq"><a href="https://teletype.in/@lckstar/audioeffects" target="_blank">делэй</a> достигается за счет комбинации до четырех функций:</p>
  <figure id="a6Bp" class="m_column">
    <img src="https://img2.teletype.in/files/9d/ad/9dadce9f-9063-4821-bfb6-03ce108b3796.png" width="1638" />
  </figure>
  <p id="NNG4">можно юзать <code>lock 1</code>, чтобы указать, что время, предоставляемое <code>delaytime</code>, указывается в циклах, а не в секундах.</p>
  <p id="GYnc">все они получают паттерны:</p>
  <figure id="yPmI" class="m_column">
    <img src="https://img4.teletype.in/files/3f/30/3f301106-c6c6-4ca5-ac8e-286dad18f239.png" width="1640" />
  </figure>
  <p id="34BV">для добавления эффекта <a href="https://teletype.in/@lckstar/audioeffects" target="_blank">reverb</a> используйте функции <code>dry</code>, <code>room</code> и <code>size</code>:</p>
  <figure id="xexy" class="m_column">
    <img src="https://img1.teletype.in/files/0f/c9/0fc9e1f4-d1e9-4714-aecc-5d06b4b46c03.png" width="1634" />
  </figure>
  <p id="gO96">также доступны несколько частотных <a href="https://teletype.in/@lckstar/audioeffects" target="_blank">фильтров</a>: фильтр нижних частот, фильтр верхних частот, фильтр типа DJ и тд.</p>
  <p id="MkSS">фильтр нижних частот:</p>
  <figure id="VOn6" class="m_column">
    <img src="https://img1.teletype.in/files/c8/a0/c8a00276-1b98-4b04-b66a-75541f4d3f33.png" width="1638" />
  </figure>
  <p id="1Mpm">фильтр верхних частот:</p>
  <figure id="uLtk" class="m_column">
    <img src="https://img4.teletype.in/files/3b/9f/3b9f8d80-5a53-4042-a3ba-9f549f94ecef.png" width="1636" />
  </figure>
  <p id="zVvD"><code>cutoff</code> и <code>hcutoff</code> получают частоту в герцах точки среза. <code>resonance</code> и <code>hresonance</code> изменяются 0-1, но высокие значения резонанса могут привести к очень громкому звуку.</p>
  <p id="0veY"><code>djf</code> - более быстрый фильтр: он принимает число 0-1. при значениях меньше 0,5 это фильтр нижних частот, а при значениях больше 0,5 - фильтр верхних частот.</p>
  <p id="Zqfw">можете посмотреть тейк про <a href="https://teletype.in/@lckstar/audioeffects" target="_blank">эффекты</a></p>
  <h2 id="xG0S">преобразование паттернов</h2>
  <p id="bqrA">вщ можно делать более сложные паттерны, используя преобразования. юзая такие функции, как <code>slow</code>, можно выйти за пределы цикла. функция <code>slow</code> растягивает паттерн на большее количество циклов:</p>
  <h3 id="3Umv">медленно, быстро и поспешно</h3>
  <figure id="2vte" class="m_column">
    <img src="https://img1.teletype.in/files/47/6a/476af917-f883-4e8f-8575-13dedf794d56.png" width="1636" />
  </figure>
  <p id="I3Mz"><code>fast</code> сжимает паттерн менее чем за один цикл. есть ещё <code>density</code>(это одно и то же):</p>
  <figure id="H0Sb" class="m_column">
    <img src="https://img4.teletype.in/files/fa/75/fa75b68f-ddd7-40a6-afd9-1280e20ccc0e.png" width="1634" />
  </figure>
  <p id="2bH0"><code>hurry</code> похожа на <code>fast</code>, но также применяет преобразование скорости:</p>
  <figure id="ALhb" class="m_column">
    <img src="https://img1.teletype.in/files/48/e0/48e093d2-4dca-4d80-b7a0-85921ba22a47.png" width="1638" />
  </figure>
  <p id="uiGz">доп инфу о времени, можно посмотреть во вкладке <strong><a href="https://teletype.in/@lckstar/time" target="_blank">время</a></strong>.</p>
  <h2 id="i12R">реорганизация паттернов</h2>
  <p id="ybt3">вообще есть множество функций, которые можно использовать для изменения тейков. можно рассмотреть некоторые из них, но их гораздо больше. подробнее об этом написано в справочных разделах: <a href="https://teletype.in/@lckstar/Alteration" target="_blank">изменение</a>, <a href="https://teletype.in/@lckstar/J7A77ClCz9u" target="_blank">накопление</a> и <a href="https://teletype.in/@lckstar/Conditions" target="_blank">условия</a>.</p>
  <p id="qJbW">можно изменить паттерн с помощью <code>rev</code>:</p>
  <figure id="9TDn" class="m_column">
    <img src="https://img2.teletype.in/files/11/2f/112faa12-de5e-4102-a561-caa380995a15.png" width="828" />
  </figure>
  <p id="xhBc">или воспроизведите его вперед и назад с помощью <code>palindrome</code>:</p>
  <figure id="9gtv" class="m_column">
    <img src="https://img1.teletype.in/files/0a/49/0a4903bf-99f6-44d4-b721-f5fde08f39af.png" width="827" />
  </figure>
  <p id="sU6H"><code>iter</code> запускает шаблон с новой точки в каждом цикле, сдвигая его заданное количество раз, пока он не вернется в исходное положение:</p>
  <figure id="gbnn" class="m_column">
    <img src="https://img4.teletype.in/files/33/67/33672ed0-0fb3-4859-884c-98bf3a505db8.png" width="829" />
  </figure>
  <p id="KNyz"><code>every</code> позволяет планировать преобразования или эффекты в разных циклах. пример будет воспроизводиться в два раза быстрее каждые четыре цикла:</p>
  <figure id="C0pq" class="m_column">
    <img src="https://img3.teletype.in/files/63/17/6317eae9-9d9c-4b6c-8544-f82d5ead9dec.png" width="829" />
  </figure>
  <p id="Qh25">... или вы можете запланировать эффект таким же образом, используя <code>#</code>:</p>
  <figure id="NmeR" class="m_column">
    <img src="https://img2.teletype.in/files/1b/ec/1bececb7-ad07-4dc5-968b-fa3c3c40246a.png" width="829" />
  </figure>
  <p id="nKxE"><code>jux</code> (сокр. от <code>juxtapose</code>) берет преобразование или эффект и воспроизводит его в одной динамике, исходный паттерн воспроизводится в другой динамике:</p>
  <figure id="Q5v6" class="m_column">
    <img src="https://img4.teletype.in/files/3b/a8/3ba8a581-a7be-4507-95bd-e0497716d061.png" width="827" />
  </figure>
  <p id="lUY2"><code>chunk</code> каждый раз применяет преобразование или эффект к разной части узора. если параметр равен <code>4</code>, он будет проходить каждую четверть цикла.</p>
  <figure id="fSeN" class="m_column">
    <img src="https://img3.teletype.in/files/62/5f/625ff308-1c11-4633-b920-5a5336155b30.png" width="829" />
  </figure>
  <h2 id="ysdu">еще больше про трансформацию</h2>
  <p id="VizJ">вообще можно преобразовывать более чем 1. можно объединить их вместе, используя <code>.</code>:</p>
  <figure id="ucAx" class="m_column">
    <img src="https://img4.teletype.in/files/3a/27/3a27b469-d65c-4292-ad6a-7c7364029190.png" width="828" />
  </figure>
  <p id="kqj4"><strong>(почти)</strong> всё является паттерном, поэтому мы можем применять эти преобразования и к эффектам:</p>
  <figure id="Z4HU" class="m_column">
    <img src="https://img2.teletype.in/files/98/46/984641f9-bb69-4fe4-921f-f42b84a7cb7d.png" width="827" />
  </figure>
  <p id="wuR8">можете создать LFO на основе любого паттерна, используя <code>fast</code> или <code>slow</code> диапазон и осциллятор, например <code>sine</code> или <code>saw</code>:</p>
  <figure id="1McV" class="m_column">
    <img src="https://img4.teletype.in/files/b2/bb/b2bb760c-37a2-490b-b9b8-f67bc50df1a6.png" width="827" />
  </figure>
  <p id="yZ7j">по умолчанию такие <a href="https://teletype.in/@lckstar/Oscillators" target="_blank">осцилляторы</a>, как <code>sine</code>, <code>cosine</code> или <code>saw</code>, выдают значения от 0 до 1. Этого достаточно для некоторых параметров (например, <code>pan</code>), но вы можете использовать <code>range</code>, чтобы масштабировать эти значения до любого желаемого вами диапазона.</p>
  <p id="okIl">в предыдущих примерах для каждого события запускается одно значение осциллятора. этого достаточно, если событий много за один цикл. однако, если событий меньше и они длиннее, необходимо выбрать несколько значений осциллятора для обеспечения плавного движения LFO. это можно сделать с помощью <a href="https://teletype.in/@lckstar/w99e9cyeGqj" target="_blank">контроля управления</a>:</p>
  <figure id="3DKn" class="m_column">
    <img src="https://img1.teletype.in/files/87/af/87afec77-1f27-44ac-b4e4-ca421e6349b7.png" width="846" />
  </figure>
  <p id="hy8c">здесь мы слышим, как звук постепенно меняется в течение цикла. существуют контроль управления для множества параметров, все они названы как «параметр плюс <code>bus</code>». в этом последнем примере <code>segment 32</code> сообщает осциллятору о необходимости выбирать 32 значения в каждом цикле.</p>
  <hr />
  <h2 id="BxSS">различные виды паттернов</h2>
  <h3 id="cyclic--repetitive">циклический / повторяющийся</h3>
  <p id="tejR">мы можем использовать <code>n</code> для выбора сэмплов из папки, это позволяет нам применять паттерны и там:</p>
  <figure id="n5rq" class="m_column">
    <img src="https://img3.teletype.in/files/2e/92/2e92e18d-9b30-4556-9f41-0a2133f985b1.png" width="842" />
  </figure>
  <p id="sktu"><code>run</code> - это краткий способ записи последовательных паттернов:</p>
  <figure id="n023" class="m_column">
    <img src="https://img4.teletype.in/files/71/44/7144fa7d-7c4c-4831-971e-1a2fa5042879.png" width="847" />
  </figure>
  <p id="Fc8g">или</p>
  <figure id="InN4" class="m_column">
    <img src="https://img3.teletype.in/files/e3/9f/e39f09c1-ef77-42a6-8847-f496b766de77.png" width="844" />
  </figure>
  <h3 id="om1O">симметрия</h3>
  <figure id="egVr" class="m_column">
    <img src="https://img3.teletype.in/files/66/5e/665e984f-3277-4a15-8042-c274ec4ec63f.png" width="846" />
  </figure>
  <h3 id="DtVr">полиметрические / полиритмические последовательности</h3>
  <p id="UPVc">можно воспроизвести две подпоследовательности одновременно, используя квадратные скобки (что-то типо одной большой подпоследовательности!), разделяя их запятой:</p>
  <figure id="uOeg" class="m_column">
    <img src="https://img1.teletype.in/files/81/d2/81d2afc6-cb86-4ebc-8a84-b59574663bcd.png" width="849" />
  </figure>
  <p id="Tp54">если использовать фигурные скобки вместо квадратных, эффект будет иным. с квадратными скобками обе половины последовательности вписываются в цикл (полиритмия). с фигурными скобками пульс задаётся левой частью последовательности. правая часть последовательности может затем перекрываться (или подкладываться!) (полиритмия):</p>
  <figure id="Ysc3" class="m_column">
    <img src="https://img4.teletype.in/files/3c/c5/3cc51974-50f2-4194-a012-48c5b199536d.png" width="846" />
  </figure>
  <h3 id="wKAN">Евклидов ритм/Бьорклунд</h3>
  <p id="flDH">если вы укажете два числа в скобках после элемента паттерна, то <strong>Tidal</strong> попытается равномерно распределить первое количество звуков по второму количеству шагов:</p>
  <figure id="Ukgx" class="m_column">
    <img src="https://img3.teletype.in/files/ee/08/ee0845ce-3bb4-497d-a086-6ccd3941f734.png" width="848" />
  </figure>
  <p id="eBCY">эту штуку можно использовать внутри одного элемента паттерна:</p>
  <figure id="BPIr" class="m_column">
    <img src="https://img3.teletype.in/files/a6/f5/a6f503fd-bf8c-49fa-9f31-d81f2e940057.png" width="844" />
  </figure>
  <p id="COFa">вы также можете добавить третий параметр, который «поворачивает» паттерн так, чтобы он начинался с другого шага:</p>
  <figure id="wCzC" class="m_column">
    <img src="https://img3.teletype.in/files/e4/45/e44576cd-3150-40bd-af9c-3b73552e27b1.png" width="844" />
  </figure>
  <hr />
  <h3 id="hwhj">рандом</h3>
  <p id="Busw"><a href="https://teletype.in/@lckstar/Randomness" target="_blank">рандом</a> может помочь быстро привнести характер и вариативность в паттерны. иногда это работает примерно так же, как и <code>every</code>, но вместо того, чтобы происходить после установленного периода, изменения имеют случайную вероятность появления:</p>
  <figure id="4w22" class="m_column">
    <img src="https://img4.teletype.in/files/b2/2d/b22d5dfd-f013-4893-a279-cade89e6675c.png" width="848" />
  </figure>
  <p id="bltu"><code>often</code> (75%) работает как <code>sometimes</code> (50%), но случается чаще:</p>
  <figure id="xJYD" class="m_column">
    <img src="https://img3.teletype.in/files/65/b3/65b3b518-a8f9-409f-8ce9-4b5321df2727.png" width="847" />
  </figure>
  <p id="Y3e3"><code>irand</code> генерирует случайное целое число до указанного числа. (например, для воспроизведения случайного сэмпла):</p>
  <figure id="bxa9" class="m_column">
    <img src="https://img1.teletype.in/files/c9/3a/c93a5b88-6513-425f-b314-ea77b17b7d76.png" width="848" />
  </figure>
  <p id="oK9M">вы можете использовать <code>degradeBy</code> для удаления случайных элементов. число указывает вероятность воспроизведения сэмпла:</p>
  <figure id="oNuD" class="m_column">
    <img src="https://img4.teletype.in/files/f1/a4/f1a436c9-b2ad-4c70-9ead-f3f987df5d71.png" width="850" />
    <figcaption><code>degrade</code> сама по себе то же самое, что и <code>degradeBy 0.5</code></figcaption>
  </figure>
  <hr />
  <h2 id="mlMN">взаимодействие с сэмплами</h2>
  <p id="N23z">пока что мы только короткие сэплы.  вот что будет происходить в длинных сэмплах: </p>
  <figure id="5fpt" class="m_column">
    <img src="https://img1.teletype.in/files/c7/d5/c7d5b96e-e072-41b1-a93d-96151bbc4689.png" width="850" />
  </figure>
  <p id="bLaP"><strong>Tidal</strong> будет продолжать воспроизводить сэмпл в каждом цикле, даже если он очень длинный. даже если вы остановите воспроизведение паттерна, вам всё равно придётся слушать, как воспроизводятся сэмплы. вы можете использовать функцию <code>cut</code>, чтобы обрезать сэмпл при запуске следующего:</p>
  <figure id="j9Bn" class="m_column">
    <img src="https://img1.teletype.in/files/8c/6a/8c6a9a44-e783-4f50-b79b-5eecc5d2fcd5.png" width="846" />
  </figure>
  <p id="WlpR">число в <code>cut</code> определяет группу, поэтому вы можете играть с помехами в разных паттернах:</p>
  <figure id="cltX" class="m_column">
    <img src="https://img1.teletype.in/files/0b/a6/0ba6baf1-059d-4065-bafe-2af246e4fe6d.png" width="847" />
  </figure>
  <p id="IuSo"><code>legato</code> также обрезает сэмплы, но используя фиксированную длину:</p>
  <figure id="WoPF" class="m_column">
    <img src="https://img4.teletype.in/files/b2/04/b2049675-7a85-43d0-b7eb-8d0fdeb200be.png" width="844" />
  </figure>
  <p id="gtpR">мы также можем нарезать сэмплы для получения эффекта <em>гранулярного</em> синтеза:</p>
  <figure id="pvO4" class="m_column">
    <img src="https://img2.teletype.in/files/95/d9/95d96f16-e3f8-460a-a892-02b01f871da8.png" width="847" />
  </figure>
  <p id="QFdl"><code>striate</code> похож на <code>chop</code>, но организует воспроизведение по-другому:</p>
  <figure id="Ygzo" class="m_column">
    <img src="https://img3.teletype.in/files/6d/a4/6da4365b-8a78-4d39-8043-4a6244bbe184.png" width="848" />
  </figure>
  <p id="0X0H"><code>randslice</code> разбивает сэмпл на части, а затем воспроизводит случайную часть в каждом цикле:</p>
  <figure id="4jk2" class="m_column">
    <img src="https://img3.teletype.in/files/e6/6e/e66eb100-cfa2-4b3a-b025-3beaa5995e85.png" width="846" />
  </figure>
  <p id="jpUq">можно использовать <code>loopAt</code> для фита сэмплов к заданному количеству циклов:</p>
  <figure id="L4hY" class="m_column">
    <img src="https://img4.teletype.in/files/32/bd/32bda34e-3428-491c-a34d-bc9012c43a70.png" width="850" />
  </figure>
  <p id="jQXo">можно добавлять паттерны и преобразования к этим функциям или комбинировать их для получения интересных эффектов:</p>
  <figure id="FhCz" class="m_column">
    <img src="https://img4.teletype.in/files/b7/ec/b7ecf8a5-9c48-4ab9-8cb5-9e1afa994c7d.png" width="847" />
  </figure>
  <p id="E0nI">больше тут - &quot;<a href="https://teletype.in/@lckstar/Sampling" target="_blank">как управлять сэмплами</a>&quot;</p>
  <h2 id="SmTz">синтезаторы</h2>
  <p id="zWoJ">до этого юзались только сэмплы, но <strong>SuperDirt</strong> также поставляется со многими <a href="https://teletype.in/@lckstar/Synthesizers" target="_blank">синтезаторами</a> <strong>Supercollider</strong>, такими как <code>superpiano</code>, <code>supersaw</code> или <code>superfm</code>, также для краткости называемыми <strong>synths</strong>.</p>
  <p id="3i8R">каждый из них имеет свои собственные функции и параметры, но в целом вы можете использовать их очень похожим образом, как и сэмплы:</p>
  <figure id="XJKs" class="m_column">
    <img src="https://img3.teletype.in/files/2e/cf/2ecff71f-a1cb-49f3-9d95-361d4b089360.png" width="844" />
  </figure>
  <p id="iYJm">можно управлять внешними синтезаторами по <a href="https://teletype.in/@lckstar/MIDI" target="_blank">MIDI</a> или <a href="https://teletype.in/@lckstar/OSC" target="_blank">OSC</a>.</p>
  <h2 id="ISfI">разница между функциями <code>n</code> и <code>note</code></h2>
  <p id="gIAp">при использовании синтезаторов функции <code>n</code> и <code>note</code> абсолютно одинаковы: вы могли заметить, что в примере выше воспроизводятся ноты <code>C</code>, <code>E</code> (на 4 полутона выше C) и G (на 7 полутонов выше C). это то же самое, что:</p>
  <figure id="Dfxw" class="m_column">
    <img src="https://img2.teletype.in/files/9a/60/9a604f63-e582-4c46-8b4d-4bb5b4781240.png" width="848" />
  </figure>
  <p id="5BrF">при использовании сэмплов <code>n</code> обозначает индекс файла в папке сэмплов, отсортированный по алфавиту (по возрастанию) и отсчитываемый от 0 (нуля). каждый сэмпл может соответствовать ноте, если вы засэмплировали каждую ноту инструмента. однако при использовании <code>note</code> сэмпл изменяется по высоте (и соответственно изменяется его длительность).:</p>
  <figure id="Ny6u" class="m_column">
    <img src="https://img2.teletype.in/files/9f/e4/9fe4da1a-f36e-4b63-b0ef-fbc3d5e4166d.png" width="848" />
  </figure>
  <p id="0AlU">это позволит воспроизвести первый сэмпл из папки <code>bd</code> в нечётных циклах и пятый сэмпл в чётных циклах. в каждом цикле сэмпл будет воспроизведен 4 раза: один раз без изменений, один раз с повышением тональности на октаву (12 полутонов), один раз на квинту (7 полутонов) и последний раз на октаву ниже.</p>
  <hr />
  <h2 id="EDFR">воспроизведение нот</h2>
  <p id="Q3Kv">большая часть этой доки/гайда посвящена ритму, но <strong>Tidal Cycles</strong> также предлагает способы игры нотами, гаммами, аккордами и арпеджио.</p>
  <p id="83Qu">уже известно, как играть ноты: используя функцию <code>note</code> или, если у вас инструмент с понотным сэмплированием, выбирая ноты с помощью функции <code>n</code>.</p>
  <p id="jKt9">также можно записывать ноты, используя систему обозначений Western Music Theory, которая использует первые 7 букв алфавита (от A до G). например, эти два кода эквивалентны:</p>
  <figure id="AGFP" class="m_column">
    <img src="https://img4.teletype.in/files/bd/73/bd733d33-901d-42b3-a35f-6c11e7f33d84.png" width="846" />
  </figure>
  <p id="n4Qi">названия нот в <strong>tidal</strong> просто преобразуются в номера, поэтому вы можете использовать любой из методов или оба одновременно.</p>
  <p id="09k8">после названия любой ноты можно добавить <code>s</code> или <code>f</code> для обозначения sharp и respectively соответственно. <code>0</code> и <code>c</code> относятся к ноте C пятой октавы. после названия любой ноты можно добавить номер октавы:</p>
  <figure id="PpkO" class="m_column">
    <img src="https://img1.teletype.in/files/8b/51/8b51e1bd-ec9d-409e-9380-1fd6a4bdc4ab.png" width="847" />
  </figure>
  <p id="8I4K">также может быть полезно перемещаться по октаве с помощью клавиш <code>|+</code> или <code>|-</code>. это будет играть на третьей октаве:</p>
  <figure id="fx2Y" class="m_column">
    <img src="https://img2.teletype.in/files/94/26/94262dcf-aad8-432c-94d2-12c642d30adb.png" width="849" />
  </figure>
  <p id="CJfh">чтобы узнать больше о том, как играть гаммы, аккорды и другое см. раздел <a href="https://teletype.in/@lckstar/RYiObrNHvAp" target="_blank">звучание</a> или <a href="https://teletype.in/@lckstar/lSg-p9mNXRG" target="_blank">инструкции по созданию арпеджио</a> и <a href="https://teletype.in/@lckstar/ZJSYBPeGH9u" target="_blank">взаимодействие с аккордами</a>.</p>
  <hr />
  <h2 id="eRLi">бб</h2>
  <p id="eWdd">эта работа стакает собственные наработки и наблюдения по <strong>TidalCycles</strong> + полный перевод документации на русский язык, чтобы сделать материал более доступным. в совокупности она показывает, что лайв-кодинг - это не только инструмент создания музыки, но и способ эксперимента, поиска новых звучаний и развития творческого подхода к звуку.</p>
  <hr />
  <p id="6mVc">for supp:</p>
  <p id="Cgu9">GgMrVeeWdYBAj7NAA3Fp7jDUayYN86xqMZ3hqwGSRpvL (sol)</p>
  <p id="zMLu">0x55352ba6e917ad7ec07bb2a8acc01c05c36c488d (evm)</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/ZJSYBPeGH9u</guid><link>https://teletype.in/@lckstar/ZJSYBPeGH9u?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/ZJSYBPeGH9u?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>воспроизведение аккордов</title><pubDate>Thu, 04 Sep 2025 22:10:21 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/40/0b/400be1e6-d498-4e4d-9cf9-ee49f49552b4.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/fb/99/fb999f7b-14ad-461c-ab9d-94aac8d00b67.png"></img>чтобы увидеть список доступных аккордов, выполните команду import Sound.Tidal.Chords. эта команда импортирует внутренний список аккордов. команда chordList выведет список доступных аккордов, зарегистрированных Tidal.:]]></description><content:encoded><![CDATA[
  <h2 id="0giI">загрузка списка аккордов</h2>
  <p id="P0zs">чтобы увидеть список доступных аккордов, выполните команду <code>import Sound.Tidal.Chords</code>. эта команда импортирует внутренний список аккордов. команда <code>chordList</code> выведет список доступных аккордов, зарегистрированных <strong>Tidal</strong>.:</p>
  <figure id="LVrK" class="m_original">
    <img src="https://img4.teletype.in/files/fb/99/fb999f7b-14ad-461c-ab9d-94aac8d00b67.png" width="830" />
  </figure>
  <h2 id="2LIc">взаимодействие с аккордами </h2>
  <p id="doqp">список выше можно объединить с тональностью, используя <code>&#x27;</code> для использования с синтезаторами в Super Dirt, вот так:</p>
  <figure id="cDuB" class="m_original">
    <img src="https://img3.teletype.in/files/21/11/2111a766-e507-40bb-b588-14a4e8f1b439.png" width="828" />
  </figure>
  <p id="QDS1">также можно использовать сэмплы, настроенные на концертный C:</p>
  <figure id="AVb6" class="m_original">
    <img src="https://img4.teletype.in/files/fd/88/fd88b1ab-410d-496a-a4f0-58d3c8a7435a.png" width="827" />
  </figure>
  <p id="Xsdv">инверсию аккордов можно получить, добавив к аккорду символ <code>&#x27;</code> вместе с одним или несколькими символами <code>i</code>. состояние по умолчанию, без <code>i</code>, соответствует основному тону. один символ <code>i</code> соответствует первой инверсии. вторая инверсия выглядит так:</p>
  <figure id="ARBq" class="m_original">
    <img src="https://img2.teletype.in/files/d9/95/d9958d8c-f98d-404f-b225-6fa8f58a3312.png" width="827" />
  </figure>
  <p id="e1hM">количество нот в аккорде можно изменить, добавив к аккорду символ <code>&#x27;</code> вместе с целым числом. в приведенном выше обращении аккорда можно сыграть 6 нот следующим образом:</p>
  <figure id="piFZ" class="m_original">
    <img src="https://img2.teletype.in/files/5b/a2/5ba2137e-c924-49c5-832f-b49b188377dc.png" width="826" />
  </figure>
  <p id="Xi0b">открытую аппликатуру аккорда можно создать, добавив к нему <code>&#x27;o</code>. это сместит первую и третью ноты аккорда на октаву ниже (обычно это Root и Fifth):</p>
  <figure id="06oA" class="m_original">
    <img src="https://img3.teletype.in/files/61/da/61da6894-ad9d-4817-82d3-15e1341bd76e.png" width="831" />
  </figure>
  <p id="tGls">основной тон может быть установлен как <code>sharp</code> или <code>flat</code> с помощью <code>s</code> или <code>f</code> соответственно:</p>
  <figure id="1CuK" class="m_original">
    <img src="https://img4.teletype.in/files/7c/cb/7ccbd152-02fe-4226-87df-d39a42f5aa4f.png" width="828" />
  </figure>
  <p id="lgxN">октаву можно задать числом. значение по умолчанию - 5:</p>
  <figure id="JN8R" class="m_original">
    <img src="https://img4.teletype.in/files/3e/dd/3edd9d78-fa86-4d8d-80bb-bf007aa77ab0.png" width="828" />
  </figure>
  <p id="N2sj">аккорды можно записать с помощью оператора <code>|+</code>:</p>
  <figure id="pWtH" class="m_original">
    <img src="https://img1.teletype.in/files/cf/a1/cfa12d3a-fe52-4fd2-909f-c0ed025ddd1f.png" width="828" />
  </figure>
  <p id="06ls">паттерн =:</p>
  <figure id="hfHY" class="m_original">
    <img src="https://img4.teletype.in/files/36/06/36062edc-c88c-4aae-aa91-cf225d8ac571.png" width="826" />
  </figure>
  <h2 id="0i8o">справочник аккордов</h2>
  <p id="V6da">полный список аккордов, доступных в <strong>Tidal</strong>, вместе с соответствующими нотами и альтернативными названиями:</p>
  <p id="cUGI"></p>
  <figure id="WBAC" class="m_retina">
    <img src="https://img1.teletype.in/files/02/f4/02f4355b-bb80-4c4e-a0d3-747d33c884e0.png" width="386" />
  </figure>
  <figure id="uxiC" class="m_retina">
    <img src="https://img2.teletype.in/files/59/22/592280ba-5a50-4e0c-80dc-6ded66821d8a.png" width="383.5" />
  </figure>
  <figure id="tzAi" class="m_retina">
    <img src="https://img1.teletype.in/files/0d/53/0d5396d6-4bc5-4f11-ab14-655b8774abeb.png" width="384.5" />
  </figure>
  <figure id="naX7" class="m_retina">
    <img src="https://img3.teletype.in/files/e0/d7/e0d7c379-c209-4299-af0e-cb8d7e5da599.png" width="385" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/lSg-p9mNXRG</guid><link>https://teletype.in/@lckstar/lSg-p9mNXRG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/lSg-p9mNXRG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>создание арпеджио</title><pubDate>Thu, 04 Sep 2025 21:55:35 GMT</pubDate><description><![CDATA[<img src="https://img3.teletype.in/files/21/e0/21e02fe7-a798-4a4c-b8e3-d945cbf0135a.png"></img>на этой странице вы научитесь писать арпеджио, используя разные техники. это хороший способ изучить Tidal Cycles более интуитивно.]]></description><content:encoded><![CDATA[
  <p id="4Asl">на этой странице вы научитесь писать арпеджио, используя разные техники. это хороший способ изучить <code>Tidal Cycles</code> более интуитивно.</p>
  <h2 id="1Dtz">арпеджио из нот</h2>
  <p id="VL44">начнём с простой последовательности:</p>
  <figure id="k38z" class="m_original">
    <img src="https://img3.teletype.in/files/21/e0/21e02fe7-a798-4a4c-b8e3-d945cbf0135a.png" width="828" />
  </figure>
  <p id="1IkY">теперь воспроизведём по одному за цикл:</p>
  <figure id="NLLC" class="m_original">
    <img src="https://img4.teletype.in/files/b4/f6/b4f61b69-52d3-4396-95a6-c7037414bfa4.png" width="827" />
  </figure>
  <p id="Plz4">поверх этого поместите копию последовательности, смещенную по времени и тону:</p>
  <figure id="SIic" class="m_original">
    <img src="https://img3.teletype.in/files/a6/7e/a67efb29-1673-414f-8023-f1278a1140f9.png" width="827" />
  </figure>
  <p id="mhy7">добавьте немного структуры к исходной последовательности:</p>
  <figure id="gZMT" class="m_original">
    <img src="https://img4.teletype.in/files/b6/0c/b60c0a53-8b6a-4067-9a5a-dc24e9239365.png" width="824" />
  </figure>
  <p id="Yues">ревёрс в одном из динамиков:</p>
  <figure id="HI2H" class="m_original">
    <img src="https://img4.teletype.in/files/79/cf/79cf4296-d226-49bb-a560-d179fd558e1c.png" width="827" />
  </figure>
  <p id="E71Q">давайте добавим еще один слой:</p>
  <figure id="JYkO" class="m_original">
    <img src="https://img4.teletype.in/files/7b/cb/7bcb1670-eb04-474d-88b7-b567bc16c8dd.png" width="826" />
  </figure>
  <h2 id="xNfb">арпеджио из аккордов</h2>
  <p id="BZLv">начнём с C major аккорда:</p>
  <figure id="gYZj" class="m_original">
    <img src="https://img1.teletype.in/files/46/38/4638028b-0b40-49f7-b92b-a15dfa4b3509.png" width="826" />
  </figure>
  <p id="temk">используем функцию <code>arp</code>:</p>
  <figure id="gxMg" class="m_original">
    <img src="https://img4.teletype.in/files/73/ac/73ac0588-edbf-4069-b58d-8dfd5aa901ed.png" width="829" />
  </figure>
  <p id="BmLk">добавим ещё одну ноты в аккорд:</p>
  <figure id="PD4S" class="m_original">
    <img src="https://img4.teletype.in/files/3e/e9/3ee92e24-f2ca-43ce-b832-f2ad9e2f1007.png" width="827" />
  </figure>
  <p id="3Zwt">добавим другой аккорд:</p>
  <figure id="Otz6" class="m_original">
    <img src="https://img4.teletype.in/files/32/a2/32a24152-c0b9-4c6a-9250-4ae1cedf2b96.png" width="827" />
  </figure>
  <p id="uTqW">изменим арпеджиатор:</p>
  <figure id="hUGF" class="m_original">
    <img src="https://img4.teletype.in/files/b1/3a/b13a027a-9fae-45ab-9590-c4187f8e1ba2.png" width="828" />
  </figure>
  <p id="AOH8">паттернизируем арпеджиатор:</p>
  <figure id="eEJi" class="m_original">
    <img src="https://img4.teletype.in/files/fd/63/fd63208a-050d-40ef-9c88-29f41420dfbe.png" width="826" />
  </figure>
  <p id="TSp6">поменяем аккорды, добавим ревёрб:</p>
  <figure id="Fc8C" class="m_original">
    <img src="https://img3.teletype.in/files/a3/05/a30501b0-6966-41b5-9d10-0d9b43d2b287.png" width="829" />
  </figure>
  <p id="ahH0">и можно добавить вариативности с <code>chunk</code> :</p>
  <figure id="zmGf" class="m_original">
    <img src="https://img4.teletype.in/files/fd/46/fd468269-ea06-446e-9a61-1a2754560f95.png" width="827" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/RYiObrNHvAp</guid><link>https://teletype.in/@lckstar/RYiObrNHvAp?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/RYiObrNHvAp?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>звучание и мелодия</title><pubDate>Thu, 04 Sep 2025 21:37:59 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6b/2d/6b2d43b1-3186-43d0-a400-0462b9a38e91.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/97/b4/97b4c512-24b9-4362-9463-f81fc8f7170c.png"></img>на этой странице представлены все функции, которые можно использовать для работы со звучанием, скейлингом и различными музыкальными объектами. каждая функция представлена ​​по одной и той же схеме:]]></description><content:encoded><![CDATA[
  <p id="2OlO">на этой странице представлены все функции, которые можно использовать для работы со звучанием, скейлингом и различными музыкальными объектами. каждая функция представлена ​​по одной и той же схеме:</p>
  <ul id="CjEh">
    <li id="bGau"><strong>сигнатура типа</strong>: как функция объявлена ​​на стороне Haskell.</li>
    <li id="IqJu"><strong>описание</strong>: словесное описание функции.</li>
    <li id="DBUB"><strong>примеры</strong>: небольшой список примеров, которые можно скопировать и вставить в редактор.</li>
  </ul>
  <h2 id="tyxf">скейлинг</h2>
  <figure id="Sw4Z" class="m_original">
    <img src="https://img2.teletype.in/files/97/b4/97b4c512-24b9-4362-9463-f81fc8f7170c.png" width="828" />
  </figure>
  <p id="ONL9">функция <code>scale</code> преобразует последовательность номеров нот в определённую гамму.:</p>
  <figure id="OwVO" class="m_original">
    <img src="https://img4.teletype.in/files/30/5c/305c9972-2906-48eb-98ca-60940149e642.png" width="826" />
  </figure>
  <h3 id="scalelist">scaleList</h3>
  <figure id="XaQY" class="m_original">
    <img src="https://img2.teletype.in/files/df/4f/df4f58a4-00a6-4371-b083-a62afe34410c.png" width="827" />
  </figure>
  <p id="edbg">функция <code>scaleList</code> выводит все доступные на момент написания статьи масштабы:</p>
  <figure id="HTsG" class="m_original">
    <img src="https://img3.teletype.in/files/6e/53/6e53ba53-23cd-4832-af49-284f30072fc4.png" width="827" />
  </figure>
  <h3 id="scaletable">scaleTable</h3>
  <figure id="MXcU" class="m_original">
    <img src="https://img2.teletype.in/files/57/f1/57f1e730-0fce-462b-af43-5ea3de6ff552.png" width="829" />
  </figure>
  <p id="jO8A">функция <code>scaleTable</code> выводит список всех доступных гамм и соответствующих им нот. например, её первый элемент - <code>(&quot;minPent&quot;,[0.0,3.0,5.0,7.0,10.0])</code>, что означает, что минорная пентатоника образована root(<code>0</code>),the minor third(<code>3</code> semitones above the root), the perfect fourth (<code>5</code> semitones above the root) т.д....</p>
  <p id="o4Fv">поскольку список большой, вы можете использовать Haskell функцию <code>lookup</code>  для поиска конкретного масштаба:</p>
  <figure id="GKzQ" class="m_original">
    <img src="https://img1.teletype.in/files/4a/9d/4a9d5c49-198c-4825-916e-726f2b68fe5a.png" width="827" />
  </figure>
  <p id="Gl1n">будет выводить - <code>Just [0.0,1.0,3.0,5.0,7.0,8.0,10.0]</code>.</p>
  <p id="1AtU">можно выполнить обратный просмотр таблицы масштабов:</p>
  <figure id="RA6n" class="m_original">
    <img src="https://img1.teletype.in/files/0c/4b/0c4b601b-8431-4050-90e7-0efcc4273b3d.png" width="826" />
  </figure>
  <p id="j0bR">в приведенном выше примере будут выведены все гаммы, первые три ноты которых - это тоника, большая секунда (на <code>2</code> полутона выше основного тона) и большая терция (на <code>4</code> полутона выше основного тона).</p>
  <h3 id="getscale">getScale</h3>
  <figure id="G0RO" class="m_original">
    <img src="https://img2.teletype.in/files/9e/08/9e087370-f3c1-4592-b2f2-130cd5baa340.png" width="827" />
  </figure>
  <p id="14JV">при желании вы можете создать собственную функцию <code>scale</code> с дополнительными шкалами, используя <code>getScale</code>:</p>
  <figure id="YAu9" class="m_original">
    <img src="https://img3.teletype.in/files/66/19/661969a0-4f34-4bf4-86b4-48025055a6b9.png" width="827" />
  </figure>
  <p id="FX1O">в примере выше мы используем стандартную таблицу <code>scaleTable</code> в качестве отправной точки и добавляем к ней две пользовательские шкалы. вы сможете использовать новую функцию как обычно:</p>
  <figure id="qHZV" class="m_original">
    <img src="https://img4.teletype.in/files/f6/21/f6219be7-34e3-4358-86b1-56ca58d57a8f.png" width="826" />
  </figure>
  <h3 id="toscale">toScale</h3>
  <figure id="u187" class="m_original">
    <img src="https://img4.teletype.in/files/74/ce/74cedd6f-d35f-4a0c-b433-e0087302a76b.png" width="826" />
  </figure>
  <p id="BHcx"><code>toScale</code> позволяет быстро применить масштаб, не указывая его название:</p>
  <figure id="PQAA" class="m_original">
    <img src="https://img3.teletype.in/files/eb/05/eb05d391-0cad-437f-8a2c-756f0df32429.png" width="829" />
  </figure>
  <h2 id="mWDQ">аккорды</h2>
  <h3 id="chordlist">chordList</h3>
  <figure id="55vW" class="m_original">
    <img src="https://img4.teletype.in/files/71/49/71496e85-8ec4-4eac-99cc-166a046fb883.png" width="826" />
  </figure>
  <p id="m3sg">функция <code>chordList</code> выводит все доступные аккорды. на момент написания:</p>
  <figure id="ajCA" class="m_original">
    <img src="https://img4.teletype.in/files/f0/1c/f01caedc-3eda-4dac-990f-3c305ef00a2d.png" width="831" />
    <figcaption>перед использованием этой функции вам необходимо запустить <code>import Sound.Tidal.Chords.</code></figcaption>
  </figure>
  <h3 id="chordtable">chordTable</h3>
  <figure id="PFwR" class="m_original">
    <img src="https://img1.teletype.in/files/43/be/43be5e2d-6d7b-4e51-91b2-ce633446b167.png" />
  </figure>
  <p id="Q5eR">функция <code>chordTable</code> выводит список всех доступных аккордов и соответствующих им нот. например, её первая запись - (<code>&quot;major&quot;,[0,4,7]</code>), что означает, что мажорное трезвучие образовано root (<code>0</code>), the major third (<code>4</code> semitones above the root)) и he perfect fifth (<code>7</code> semitones above the root).</p>
  <p id="JFsJ">тк список большой, вы можете использовать функцию <code>chordL</code> для поиска конкретного аккорда:</p>
  <figure id="kxvS" class="m_original">
    <img src="https://img4.teletype.in/files/75/62/75627d57-b741-460d-8b15-560869fe96d2.png" width="829" />
  </figure>
  <p id="w0D7">:будет выводить <code>(0&gt;1)|[0,3,7,10]</code></p>
  <p id="iIeY">если вы знаете ноты аккорда, но не можете найти его название, вы можете использовать этот код <strong>Haskell</strong> для обратного поиска в таблице:</p>
  <figure id="LSFs" class="m_original">
    <img src="https://img4.teletype.in/files/b0/a8/b0a89cba-fed9-4301-ab75-11bb6e08c5ac.png" width="827" />
  </figure>
  <p id="SM8i">:будет выводить <code>[(&quot;dom7&quot;,[0,4,7,10])]</code></p>
  <h2 id="HMQh">арпеджио</h2>
  <figure id="Zju7" class="m_original">
    <img src="https://img4.teletype.in/files/3c/33/3c335a96-130e-4137-9d57-d3cf1e40aa9d.png" width="831" />
  </figure>
  <p id="SHfK">функция <code>arpeggiate</code> (= <code>arpg</code>) распределяет номера нот аккордов во времени. например:</p>
  <figure id="pdJA" class="m_original">
    <img src="https://img4.teletype.in/files/bd/e1/bde13c63-5098-4091-a8fe-e1ed310f29a8.png" width="828" />
  </figure>
  <figure id="5Pki" class="m_original">
    <img src="https://img2.teletype.in/files/da/d7/dad78622-f339-42ab-ac71-e13c88363b30.png" width="824" />
  </figure>
  <h3 id="rolled">rolled</h3>
  <figure id="1kaI" class="m_original">
    <img src="https://img4.teletype.in/files/f9/6c/f96c2255-b7ae-4104-a9f1-189952e201d0.png" width="827" />
  </figure>
  <p id="PreT">функция <code>roll</code> не принимает аргументов и имитирует нисходящий рисунок игры струн на гитаре. ноты играются снизу вверх и равномерно распределяются в пределах (1/4) длительности события аккорда, в отличие от <code>arp</code>, который распределяет ноты по всему событию.</p>
  <figure id="vMCS" class="m_original">
    <img src="https://img2.teletype.in/files/18/6e/186e43bf-14cc-46aa-a973-228d3730a791.png" width="828" />
  </figure>
  <h3 id="rolledby">rolledBy</h3>
  <figure id="hS3u" class="m_original">
    <img src="https://img2.teletype.in/files/dc/ef/dcef0976-4a73-4d9a-bc43-20dccad27c4e.png" width="826" />
  </figure>
  <p id="cQQ6">функция <code>rollingBy</code> работает так же, как и <code>rolled</code>, но позволяет указать часть события, на которую будут распределены заметки, или «длину» ролла.</p>
  <figure id="mV7F" class="m_original">
    <img src="https://img1.teletype.in/files/0d/75/0d7598c0-32d4-4c27-b514-1ab43f35f0e2.png" width="828" />
  </figure>
  <h2 id="YnYl">модификаторы аккордов/голосовые тональности</h2>
  <p id="Umx8">существует множество различных модификаторов аккордов, предназначенных для изменения способа «звучания» аккорда (порядка нот, выбора октавы и т. д.).</p>
  <h2 id="VDSP">количество аккордовых тонов</h2>
  <p id="MOO3">вы можете задать количество аккордовых тонов в аккорде. дополнительные тоны создаются путём проработки существующего списка тонов и их дублирования на октаву выше; уменьшение количества тонов вычитает элементы из списка аккордовых тонов, начиная с самых высоких нот. это также можно сделать по паттерну.</p>
  <p id="Lss9">по умолчанию <code>c&#x27;min9</code> содержит 5 аккордовых тонов <code>[0,3,7,10,14]</code> - мы можем увеличить это число до 8, то есть <code>[0,3,7,10,14,12,15,19]</code>:</p>
  <figure id="Tvf9" class="m_original">
    <img src="https://img1.teletype.in/files/05/8d/058d1a10-8873-4a63-8144-24f22e91e54d.png" width="826" />
  </figure>
  <p id="cD7U">мы можем сократить его до 4 аккордовых тонов (т.е. убрать 9), <code>[0,3,7,10]</code>:</p>
  <h2 id="lcSK">открытый войсинг</h2>
  <p id="Bjx2">это имитирует «открытое» фортепианное звучание, где первая и третья ноты аккорда понижены на октаву/12 полутонов, расширяя диапазон тонов аккорда на дополнительную октаву.</p>
  <h2 id="g4jM">дроп n - войсинга</h2>
  <p id="QLHs">пониженные войсинга похоже на открытые, понижая N-ю самую высокую ноту в аккорде на октаву/12 полутонов. «drop 3» войсинг:</p>
  <figure id="ZcmS" class="m_original">
    <img src="https://img1.teletype.in/files/8f/80/8f80aa97-ebab-4466-8ca7-4e8ab729009d.png" width="826" />
  </figure>
  <h2 id="9vug">инверсия аккордов</h2>
  <p id="VvmE">аккорд инвертируется путём взятия самых низких нот аккорда N и повышения их на октаву/12 полутонов. это вторая инверсия для <code>c&#x27;min9</code>:</p>
  <figure id="zQjv" class="m_original">
    <img src="https://img2.teletype.in/files/d3/b7/d3b7ac33-9079-4ba2-ba3f-e7830e260ed7.png" width="827" />
  </figure>
  <h2 id="arKq">воспроизведение сэмпла питча</h2>
  <p id="9Bvg">по умолчанию SuperDirt считает, что все сэмплы имеют высоту до C4 (MIDI-нота 60). воспроизвести сэмпл в тональном режиме просто, если звук действительно соответствует ноте C. </p>
  <h2 id="metatune">metatune</h2>
  <p id="Usub">в WAV-файлы можно встраивать метаданные высоты тона в виде <a href="https://www.recordingblogs.com/wiki/sample-chunk-of-a-wave-file" target="_blank">smpl chunk</a>. это используется некоторыми сэмплерами для автоматического сопоставления сэмплов с MIDI-нотами. <strong>SuperDirt</strong> также считывает метаданные высоты тона всех загруженных сэмплов, позволяя корректно настроить их высоту тона (при условии корректности метаданных), установив параметр <code>metatune</code> в значение 1.</p>
  <p id="qBkp">например, сэмпл <code>bass1:18</code> из Dirt-Samples — это нота F2 (MIDI-нота 41) и помечен соответствующими метаданными высоты тона. с помощью <code>metatune</code> мы можем легко воспроизвести его в унисон с аккордом суперпиано:</p>
  <figure id="hxyc" class="m_original">
    <img src="https://img1.teletype.in/files/c8/1e/c81e43af-58c2-4d42-b8c6-901902424d84.png" width="825" />
  </figure>
  <p id="5j65">можно редактировать с помощью различных инструментов. типа: <a href="https://github.com/ahihi/pitcheon" target="_blank">pitcheon </a>и <a href="https://loopauditioneer.sourceforge.io/" target="_blank">LoopAuditioneer</a>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/OSC</guid><link>https://teletype.in/@lckstar/OSC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/OSC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>OSC</title><pubDate>Thu, 04 Sep 2025 20:35:12 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/84/74/847449e8-1678-47f1-b9d8-26cc17a3459e.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/71/db/71dbbed1-b95b-4f4e-ac76-8520f1a2de0c.png"></img>Open Sound Control (OSC) - это стандартный сетевой протокол, якобы разработанный для музыки, но на самом деле это всего лишь простой способ передачи чисел и других данных по сети. с OSC совместим ряд систем лайф-кодинга и других систем, включая цифровые звуковые рабочие станции (DAW), визуализаторы и микшеры.]]></description><content:encoded><![CDATA[
  <p id="Oblz"><strong>Open Sound Control (OSC)</strong> - это стандартный сетевой протокол, якобы разработанный для музыки, но на самом деле это всего лишь простой способ передачи чисел и других данных по сети. с OSC совместим ряд систем лайф-кодинга и других систем, включая цифровые звуковые рабочие станции (DAW), визуализаторы и микшеры.</p>
  <p id="PthM">по сути, единственная задача Tidal Cycles - отправлять шаблонные сообщения OSC, чаще всего в аудиофреймворк <strong>SuperDirt</strong>. настроить <strong>Tidal</strong> для отправки OSC в другую систему довольно просто. для этого нужно указать, куда следует отправлять сообщения (цель), а также структуру отправляемых данных OSC (форму или формат сообщения).</p>
  <h2 id="0iVl">расширенное руководство</h2>
  <p id="IqNa">определение цели</p>
  <p id="4l44">сначала, нужно определить цель:</p>
  <figure id="ARG5" class="m_column">
    <img src="https://img4.teletype.in/files/71/db/71dbbed1-b95b-4f4e-ac76-8520f1a2de0c.png" width="1534" />
  </figure>
  <p id="rC7x">метод планирования для <code>oSchedule</code> может быть одним из следующих:</p>
  <ul id="YWsE">
    <li id="PNbX"><strong>Live</strong>: заставляет <strong>Tidal</strong> планировать сообщения таким образом, чтобы они отправлялись в «правильное» время за вычетом значения <code>oLatency</code>. это самый простой подход, который будет работать хорошо в большинстве случаев.</li>
    <li id="KMW9"><strong>Pre BundleStamp</strong>: отправляет каждое OSC-сообщение, упакованное в «bundle» OSC с временной меткой пакета. Объединенные сообщения будут отправляться один раз в кадр пакетами, но с опережением времени (в соответствии со значением конфигурации <code>oLatency</code>). <strong>Tidal</strong> не пытается отправлять их с «правильным» временем, вместо этого от целевой системы ожидается точное планирование. это требует больше работы для целевой системы, но потенциально точнее, чем описанный выше вариант, поскольку позволяет избежать потенциального джиттера сети/обработки.</li>
    <li id="lwf6"><strong>Pre MessageStamp</strong>: аналогично <code>BundleStamp</code>, описанному выше, но временная метка добавляется к самому OSC-сообщению, заполняя два целочисленных поля «sec» и «usec».мнеобходимо явно включить их в список аргументов вашего формата osc (см. пример далее).</li>
  </ul>
  <h2 id="k4GZ">определение структуры сообщения OSC</h2>
  <p id="D9P6">далее определите структуру сообщения OSC. для начала стоит уделить немного времени ознакомлению со спецификацией OSC. существует два способа структурировать сообщения OSC, отправляемые <strong>Tidal</strong>: список аргументов или пары «имя-значение».</p>
  <p id="jJyC">подход со списком аргументов наиболее распространён. он выглядит следующим образом:</p>
  <figure id="vWlh" class="m_column">
    <img src="https://img3.teletype.in/files/65/54/655483bd-feda-48a0-9f84-fce7ad1a8b73.png" width="1532" />
  </figure>
  <p id="hHKs">чтобы определить структуру OSC, сначала укажите OSC, затем «адресс паттерна» OSC, в данном случае <code>«/play»</code>. затем по порядку перечисляются аргументы сообщения. каждый аргумент представлен в виде <code>«tuple»</code>, содержащего имя параметра и его значение по умолчанию.</p>
  <p id="4Z67">в приведенном выше примере первый параметр <code>«s»</code> не имеет значения по умолчанию, на что указывает ключевое слово <code>Nothing</code>. это означает, что если параметр <code>s</code> не указан шаблоном, сообщение OSC не будет отправлено.</p>
  <p id="eGvl">для остальных аргументов в примере значения по умолчанию указываются ключевым словом <code>Just</code>, за которым следует тип аргумента и его значение по умолчанию. <code>VS</code> задаёт значение по умолчанию как строку, <code>VF</code> — как число с плавающей точкой, а <code>VI</code> — как целое число. Другие доступные типы: <code>VB</code> для логических значений true/false (которые преобразуются в сообщении в целые числа 1/0) и <code>VX</code> для двоичных «blobs». если один или несколько из этих аргументов со значениями по умолчанию отсутствуют в паттерне, сообщение всё равно будет отправлено с этими значениями по умолчанию.</p>
  <p id="t610">если вы используете <strong>Pre MessageStamp</strong>, вам необходимо добавить параметры сообщения <code>sec</code> и <code>usec</code> для их отправки:</p>
  <figure id="waji" class="m_column">
    <img src="https://img3.teletype.in/files/e1/01/e10118e3-db3b-47f9-b2ae-232d1fd640f6.png" width="1526" />
  </figure>
  <p id="BrGS">помимо <code>sec</code> и <code>usec</code>, <strong>Tidal</strong> всегда заполняет ещё три параметра, если они есть: cps (циклы в секунду), <code>cycle</code> (начало события в циклах) и <code>delta</code> (продолжительность события в секундах). поэтому добавьте их, если хотите, чтобы эта информация была выведены:</p>
  <figure id="nsFV" class="m_column">
    <img src="https://img2.teletype.in/files/9e/db/9edb6ecd-e44c-4025-96cf-3904702e752a.png" width="1530" />
  </figure>
  <h2 id="Nrh1">названия параметров</h2>
  <p id="6mNG">вместо указания списка аргументов, как указано выше, вы можете указать названные параметры следующим образом:</p>
  <figure id="ht2C" class="m_column">
    <img src="https://img1.teletype.in/files/47/f3/47f3ec5b-bb65-4d56-9bd0-9736381275eb.png" width="1532" />
  </figure>
  <p id="n2Ur">при таком определении все параметры, указанные в паттерне, будут выведены. вместо фиксированных позиций в сообщении, как в случае со списком аргументов, параметры будут располагаться в произвольном порядке, но в виде пар «имя-значение». т.е., перед каждым параметром будет стоять дополнительный строковый параметр, задающий его имя. rак видно из примера, указан список «required» параметров - если все параметры, указанные в этом списке, не присутствуют в событии, заданном паттерне, оно не будет отправлено.</p>
  <h2 id="N2Tv">определение дополнительных параметров</h2>
  <p id="2ULf">многие параметры определены в <code>Sound.Tidal.Params</code> и доступны в сеансе <strong>Tidal</strong>. если вы хотите отправить параметры, которые ещё не определены, можно определить их самостоятельно. например, для параметра <code>«intensity»</code>, использованного выше, необходимо задать следующее:</p>
  <figure id="TkgX" class="m_column">
    <img src="https://img2.teletype.in/files/99/3b/993b78da-ea92-43d2-a23c-03fed736abf5.png" width="1532" />
  </figure>
  <h2 id="2XEW">сопоставление структур сообщений с целями</h2>
  <p id="Qqxw">последнее, что необходимо определить, - это соответствие между целями и принимаемыми ими структурами сообщений OSC. в данном случае есть только одна цель, принимающая только один тип сообщений OSC, поэтому всё просто:</p>
  <figure id="CKRf" class="m_column">
    <img src="https://img1.teletype.in/files/45/dc/45dc329e-2021-41b9-9259-0d71ff4550e9.png" width="1532" />
  </figure>
  <h2 id="XkDO">стриминг и отправка паттернов</h2>
  <p id="33gQ">затем вы можете запустить <code>&#x27;stream&#x27;</code> для преобразования шаблонов в OSC следующим образом:</p>
  <figure id="zJVE" class="m_column">
    <img src="https://img1.teletype.in/files/ca/64/ca64d327-6bbe-46c8-a251-c3c5fce522ac.png" width="1530" />
  </figure>
  <p id="LfdF">и начать отправлять паттерн типо:</p>
  <figure id="veIx" class="m_column">
    <img src="https://img1.teletype.in/files/c7/61/c7619c0e-e791-49a4-a9a0-56e7aa6d0101.png" width="1534" />
  </figure>
  <h2 id="7aFr">шорткаты</h2>
  <p id="OVVV">можно закатить клавиши так:</p>
  <figure id="rtPJ" class="m_column">
    <img src="https://img4.teletype.in/files/36/d7/36d70237-d887-4748-83d6-8174b93ead4a.png" width="1532" />
  </figure>
  <p id="hnpG">это будет работать так:</p>
  <figure id="G63h" class="m_column">
    <img src="https://img3.teletype.in/files/ed/77/ed7704d1-fe15-4d39-9300-77c1f9981be8.png" width="1524" />
  </figure>
  <p id="dRye">это очень похоже на определение <code>d1</code>, <code>d2</code> и т. д. в <code>BootTidal.hs.</code> </p>
  <h2 id="tlFE">вывод</h2>
  <p id="IBa9">вот целый код:</p>
  <figure id="FS6Y" class="m_column">
    <img src="https://img1.teletype.in/files/82/99/82993057-5043-4fbb-b5d0-6d92b07cfa12.png" width="1536" />
  </figure>
  <h2 id="0Ijj">несколько целей и сообщений</h2>
  <p id="7kpv">можно организовать несколько сообщений OSC и отправлять их в несколько выводов из одного и того же <code>«stream»</code>. например, чтобы стримить данные, отправленные как указанному выше получателю, так и в <strong>SuperDirt</strong>, можно сделать следующее:</p>
  <figure id="0OYW" class="m_column">
    <img src="https://img4.teletype.in/files/f8/a2/f8a2f42e-32be-416d-a1e2-9a6d3b0566a8.png" width="1538" />
  </figure>
  <p id="wv0V"><code>bd</code> будет отправлен как в <code>target</code>, так и в <code>superdirtTarget</code>.</p>
  <h2 id="jFaI">сложные цели с несколькими форматами сообщений</h2>
  <p id="dsTi">некоторые OSC-цели более сложны, поддерживают несколько форматов OSC и также указывают данные в «address pattern» OSC. возьмём в качестве примера ASCII-Simple-Video-Synth. вот спецификация <strong>Tidal</strong> для него:</p>
  <figure id="JiIU" class="m_column">
    <img src="https://img4.teletype.in/files/3a/fa/3afa3eca-39a7-4090-ba94-001a61a49890.png" width="1534" />
  </figure>
  <p id="L9JJ">это программное обеспечение принимает ряд паттернов адресов, некоторые из которых включают цвет, к которому обращается адрес. чтобы сделать этот цвет паттерном, ему присваивается имя в фигурных скобках: <code>&quot;{asccolour}&quot;</code>. затем это имя можно задать с помощью параметра <code>&#x27;ascColour&#x27;</code> в паттерне <strong>Tidal</strong>.</p>
  <p id="TN76">при назначении нескольких форматов сообщений OSC потоку рекомендуется убедиться, что каждый формат имеет хотя бы один уникальный аргумент, отличный от значения по умолчанию. это гарантирует, что сообщения будут отправляться только при задании в шаблоне аргументов, отличных от значения по умолчанию. в противном случае для каждого события, заданного шаблоном, будут отправляться все форматы.</p>
  <h2 id="xkPZ">контроль ввода</h2>
  <h3 id="configuration">сonfiguration</h3>
  <p id="7Kto">если вам нужен ввод только MIDI в <strong>Tidal</strong>, проверьте страницу MIDI в боковой панели.</p>
  <p id="7gcv">после установки и настройки новейшей версии <strong>Tidal</strong> по умолчанию будет автоматически прослушивать внешние управляющие сообщения по сетевому протоколу OSC на локальном хосте (127.0.0.1), порт 6010. это можно настроить - например, если вы предпочитаете прослушивать все сетевые интерфейсы и порт 6060, вы можете изменить конфигурацию (<code>BootTidal.hs</code>) следующим образом:</p>
  <figure id="3bPx" class="m_original">
    <img src="https://img4.teletype.in/files/3e/7c/3e7c7686-b922-4ac1-9acd-698f61404fa8.png" width="935" />
  </figure>
  <p id="kRHT">если вы предпочитаете полностью отключить прослушивание элементов управления, используйте следующее:</p>
  <figure id="LzGc" class="m_original">
    <img src="https://img1.teletype.in/files/0e/ab/0eab9103-fe41-495d-9bbc-d9e57220c0a2.png" width="935" />
  </figure>
  <p id="ARsV">сообщение OSC, ожидаемое <strong>Tidal</strong>, содержит путь <code>/ctrl</code> и два значения: ключ и значение. Ключ может быть строкой или целым числом (tidal автоматически преобразует целое число в строку). Значение может быть строкой, целым числом или числом с плавающей точкой. Например, сообщение OSC <code>/ctrl sf hello 0.4</code> - это сообщение об установке элемента управления <code>hello</code> в значение <code>0.4</code>. в этом примере <code>sf</code> — это тег типа OSC. он указывает, что первое значение - строка (s), а второе — строка (f)loat.</p>
  <p id="TaKs">затем вы можете использовать этот элемент управления в следующем паттерне:</p>
  <figure id="b2hq" class="m_original">
    <img src="https://img3.teletype.in/files/e5/33/e5332b48-49f3-43e5-b7ab-d5952e7f6815.png" width="935" />
  </figure>
  <p id="yVDD"><code>cF</code> - это то, что используется для управления числами с плавающей точкой. второй параметр, <code>1</code>, - это значение по умолчанию, если <strong>Tidal</strong> ещё не получил этот параметр. также существует <code>cS</code> для строк и <code>cI</code> для целых чисел. для значений времени (например, для использования в качестве первого параметра быстро/медленно) используйте <code>cT</code>. для отношений добавьте <code>cR</code>. если вы хотите получать целые паттерны (записанные в виде строки мини-нотации), используйте <code>cP</code>.</p>
  <h2 id="eU0b">дебаггинг</h2>
  <p id="6QiL">один из способов отладки OSC - использовать анализатор пакетов, например <a href="https://www.wireshark.org/" target="_blank">WireShark</a>. чтобы отфильтровать всё, кроме пакетов OSC, можно ввести <code>osc</code> в поле фильтра. если щелкнуть <code>OSC network packet</code> и раскрыть поля, можно увидеть корректно отформатированное представление сообщения OSC.</p>
  <h2 id="osc-superdirt-api">OSC SuperDirt API</h2>
  <p id="Imcl">вот как выглядит сообщение-триггер OSC от Tidal Cycles в SuperDirt</p>
  <p id="yVcu">Рассмотрим этот паттерн: <code>sound &quot;bd&quot; # speed 2</code>. вот какое сообщение вида OSC генерируется:</p>
  <figure id="kT5c" class="m_original">
    <img src="https://img3.teletype.in/files/2c/7e/2c7e6f7a-4d85-42c6-b4e3-6931c16c6ee4.png" width="934" />
  </figure>
  <p id="yAST">он состоит из одного сообщения, упакованного в пакет, который содержит временную метку, указывающую, когда событие должно быть запущено. поскольку для цели OSC для Superdirt параметр <code>oSchedule</code> установлен на <code>Pre BundleStamp</code>, сообщения будут отправляться пакетами, заранее, и получатель (например, <strong>Superdirt</strong>) должен точно запланировать их отправку.</p>
  <p id="pyTK">сообщение внутри пакета имеет путь <code>/dirt/play</code> и содержит переменное количество пар «имя-значение». можно видеть пары <code>s bd</code> и «speed 2», но <strong>Tidal</strong> добавляет несколько дополнительных пар. текущий <code>cps</code>, положение события в циклах (с момента запуска <strong>Tidal</strong>), <code>delta</code> или длительность события в секундах и номер <code>orbit</code>.</p>
  <h2 id="TqHm">контроллеры воспроизведения</h2>
  <p id="pdkm">в некст разделе опишу доступные функции управления воспроизведением, и приведу пример использования MIDI-управления в SuperCollider для управления несколькими паттернами.</p>
  <h2 id="tzWW">открытые функции управления звуком</h2>
  <p id="KTiS">отключить звук паттерна</p>
  <p id="dO7s">вы можете отключить или включить паттерн, отправив сообщение OSC пророутив его с <code>/mute</code> или <code>/unmute</code> и аргументом, указывающим паттерн. как и в обычном коде <strong>tidal</strong>, это может быть число (для <code>d1</code>, <code>d2</code> и т.д.) или строка (для именованных паттернов).</p>
  <p id="SMT0">:сообщение OSC <code>/mute 3</code> отключит <code>d3</code>.</p>
  <h2 id="b4H2">контроль над всеми паттернами </h2>
  <p id="nRDt">можно управлять всеми паттернами воспроизведения, используя пути OSC <code>/muteAll</code>, <code>/unmuteAll</code>, <code>/unsoloAll</code> и, конечно же, <code>/hush</code>. все эти сообщения не имеют аргументов.</p>
  <p id="OTQ7">MIDI пример </p>
  <p id="CBor">вот полный пример <strong>SuperCollider</strong> для сопоставления кнопок <strong>MIDI</strong>-контроллера с паттернами, чтобы сообщения о включении/выключении нот от кнопок включали приглушение паттерна или запускали другие эффекты.</p>
  <p id="uff1">в этом примере используются MIDI-кнопки для нот <code>C4</code> (значение MIDI 60), <code>D4</code> и <code>E4</code> для отключения звука на нотах <code>d1</code>, <code>d2</code> и <code>d3</code>. ноты <code>F4</code>, <code>G4</code> и <code>A4</code> используются для включения <code>solo</code> на нотах <code>d1</code>, <code>d2</code> и <code>d3</code>. также используется нота <code>C5</code> для отключения звука всех нот, а нота <code>D5</code> - для включения звука всех нот.</p>
  <p id="SQOe">отредактируйте первый раздел кода (Mapping MIDI Controller), чтобы определить, какие кнопки контроллера вы хотите использовать для управления паттернами. остальной код должен работать с заданными вами назначениями и не требует редактирования, но может быть полезен для начала в проекте.</p>
  <p id="h7l9">начните с уже запущенных <strong>Tidal</strong> (например, внутри <code>Atom</code>) и <strong>SuperDirt</strong>, а затем запустите следующий блок кода в <strong>SuperCollider</strong>:</p>
  <p id="q1My"><code>// Оцените блок ниже, чтобы начать сопоставление MIDI -&gt; OSC.<br />(<br />var mutes, solos, muteAll, unmuteAll, unsoloAll, hush;<br />var playbackControl, playbackState;<br />var osc;</code></p>
  <p id="cr2D"><code>/* — MIDI Controller Mapping ---------------------------- */<br />// Отредактируйте этот раздел, чтобы настроить свой MIDI-контроллер.</code></p>
  <p id="7COE"><code>// &quot;mutes&quot; и &quot;solos&quot; представляют собой словарь номеров MIDI -&gt; идентификаторы айди</code></p>
  <p id="vUjR"><code>// В этом кейсе, C4, D4 &amp; E4 заглушаются паттерны d1, d2 &amp; d3<br />mutes = Dictionary[<br />    60 -&gt; 1,<br />    62 -&gt; 2,<br />    64 -&gt; 3<br />];</code></p>
  <p id="Ml6L"><code>// В этом кейсе, F4, G4 &amp; A4 соло паттерны d1, d2 &amp; d3<br />solos = Dictionary[<br />    65 -&gt; 1,<br />    67 -&gt; 2,<br />    69 -&gt; 3<br />];</code></p>
  <p id="ESlB"><code>// Тут MIDI note обращается к &quot;muteAll&quot;<br />// В этом кейсе, оно ставится C5<br />muteAll = 72;</code></p>
  <p id="0XKq"><code>// Тут MIDI обращается к &quot;unmuteAll&quot;<br />// В этом кейсе, оно ставится D5<br />unmuteAll = 74;</code></p>
  <p id="dKvY"><code>// Тут MIDI обращается к &quot;unsoloAll&quot;<br />// В этом кейсе, оно не используется<br />unsoloAll = nil;</code></p>
  <p id="3C7W"><code>// Тут MIDI обращается к &quot;hush&quot;<br />// В этом кейсе, оно не используется<br />hush = nil;</code></p>
  <p id="qj1b"><code>/* ------------------------------------------------------- */</code></p>
  <p id="L5MX"><code>playbackState = Dictionary[];</code></p>
  <p id="GyRZ"><code>union(mutes.values.asSet, solos.values.asSet).do({<br />    arg item;<br />    playbackState.put(item, Dictionary[\mute -&gt; false, \solo -&gt; false]);<br />});</code></p>
  <p id="KPGY"><code>osc = NetAddr.new(&quot;127.0.0.1&quot;, 6010);</code></p>
  <p id="ruut"><code>MIDIClient.init;<br />MIDIIn.connectAll;</code></p>
  <p id="s2y3"><code>playbackControl = MIDIFunc.noteOn({ |val, num, chan, src|<br />    var patID, patState;<br />    if (mutes.at(num) !== nil, {<br />        patID = mutes.at(num);<br />        patState = playbackState.at(patID);<br />        if (patState.trueAt(\mute), {<br />            osc.sendMsg(&quot;/unmute&quot;, patID);<br />            patState.put(\mute, false);<br />        }, {<br />            osc.sendMsg(&quot;/mute&quot;, patID);<br />            patState.put(\mute, true);<br />        });<br />    });</code></p>
  <p id="9rGK"><code>    if (solos.at(num) !== nil, {<br />        patID = solos.at(num);<br />        patState = playbackState.at(patID);<br />        if (patState.trueAt(\solo), {<br />            osc.sendMsg(&quot;/unsolo&quot;, patID);<br />            patState.put(\solo, false);<br />        }, {<br />            osc.sendMsg(&quot;/solo&quot;, patID);<br />            patState.put(\solo, true);<br />        });<br />    });</code></p>
  <p id="YD3H"><code>    if (muteAll == num, {<br />        osc.sendMsg(&quot;/muteAll&quot;);<br />        playbackState.do({<br />            arg patState;<br />            patState.put(\mute, true);<br />        });<br />    });</code></p>
  <p id="7ghu"><code>    if (unmuteAll == num, {<br />        osc.sendMsg(&quot;/unmuteAll&quot;);<br />        playbackState.do({<br />            arg patState;<br />            patState.put(\mute, false);<br />        });<br />    });</code></p>
  <p id="AHw3"><code>    if (unsoloAll == num, {<br />        osc.sendMsg(&quot;/unsoloAll&quot;);<br />        playbackState.do({<br />            arg patState;<br />            patState.put(\solo, false);<br />        });<br />    });</code></p>
  <p id="TUGb"><code>    if (hush == num, {<br />        osc.sendMsg(&quot;/hush&quot;);<br />    });<br />});</code></p>
  <p id="LAph"><code>if (~stopMidiMuteControl != nil, {<br />    ~stopMidiMuteControl.value;<br />});</code></p>
  <p id="8PCy"><code>~stopMidiMuteControl = {<br />    playbackControl.free;<br />};<br />)</code></p>
  <p id="jKb4"><code>// оцените строку ниже, чтобы остановить это.<br />~stopMidiMuteControl.value;</code></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/MIDI</guid><link>https://teletype.in/@lckstar/MIDI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/MIDI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>MIDI</title><pubDate>Thu, 04 Sep 2025 15:38:25 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/9d/cf/9dcf6c3b-b320-4e94-a0e4-5d17e13fa444.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/20/aa/20aaa816-0918-48f7-9459-c18794dc5ad8.png"></img>Tidal может отправлять и принимать MIDI-сообщения. можно взаимодействовать с внешними синтезаторами и оборудованием, а также получать данные с контроллеров. всё сопоставление осуществляется непосредственно через код интуитивно понятным способом.]]></description><content:encoded><![CDATA[
  <p id="8bVf"><strong>Tidal</strong> может отправлять и принимать MIDI-сообщения. можно взаимодействовать с внешними синтезаторами и оборудованием, а также получать данные с контроллеров. всё сопоставление осуществляется непосредственно через код интуитивно понятным способом.</p>
  <h2 id="superdirt-midi">SuperDirt MIDI</h2>
  <h3 id="gKYP">Предварительные условия</h3>
  <p id="7Fu7">Для установки требуются последние версии Tidal и SuperDirt:</p>
  <ul id="guKa">
    <li id="LyGZ">Обновитесь до последней версии Tidal </li>
    <li id="mpvS">Убедитесь, что у вас установлена ​​последняя версия <strong>SuperDirt Quark</strong>. Проще всего удалить и переустановить SuperDirt Quark. подробнее об обновлении Quark - <a href="https://github.com/supercollider-quarks/quarks" target="_blank">тут</a>.</li>
  </ul>
  <h3 id="MnEC">Инициализация</h3>
  <p id="4Cs7">для начала вам нужно запустить <strong>SuperCollider</strong>. сначала запуск <strong>SuperDirt</strong> как обычно. затем в SuperCollider выполните следующий код:</p>
  <figure id="BsPE" class="m_column">
    <img src="https://img3.teletype.in/files/20/aa/20aaa816-0918-48f7-9459-c18794dc5ad8.png" width="1356" />
  </figure>
  <p id="7GdZ">теперь в окне поста <strong>SuperCollider</strong> должен появиться список системных MIDI-устройств. вывод будет выглядеть примерно так:</p>
  <figure id="kaL5" class="m_column">
    <img src="https://img2.teletype.in/files/5c/5d/5c5d37ee-9612-4208-8a9c-cd546e4fc440.png" width="1358" />
  </figure>
  <p id="BhlK">названия этих MIDI-устройств состоят из двух частей. обе части понадобятся вам на следующем этапе - для подключения к MIDI-устройству. нужно проверить следующую строку:</p>
  <figure id="hRNF" class="m_column">
    <img src="https://img2.teletype.in/files/5f/29/5f2901c7-f512-4d04-ac2a-80a6ebf91581.png" width="1362" />
  </figure>
  <p id="zQy3">тут мы сохранили ссылку на устройство в переменной <code>~midiOut</code>.</p>
  <p id="d0c4">И наконец, определиям имя «синтезатора» в Tidal, который будет использоваться для управления этим устройством. ниже мы назовём его <code>mydevice</code>. выполняем следующую команду:</p>
  <figure id="0jyA" class="m_column">
    <img src="https://img4.teletype.in/files/3b/47/3b4760d0-f6ec-4f08-a984-7471b37ee719.png" width="1354" />
  </figure>
  <p id="huue">при желании вы можете определить значение задержки на вашем устройстве:</p>
  <figure id="zF4V" class="m_column">
    <img src="https://img1.teletype.in/files/cf/64/cf64b27e-da8f-432c-b88e-c96df2ea0a13.png" width="1352" />
  </figure>
  <p id="7soX">на этом инициализация завершена. теперь у есть MIDI-устройство, подключенное к SuperDirt и работающее как синтезатор с именем <code>mydevice</code>.</p>
  <h2 id="d8jQ">Использование в Tidal</h2>
  <h4 id="note-patterns">примечание по паттернам </h4>
  <p id="XME8">теперь можно начать писать паттерны <strong>Tidal</strong> для управления MIDI-устройством. можно отправить ему простой нотный паттерн:</p>
  <figure id="zXVe" class="m_column">
    <img src="https://img4.teletype.in/files/78/c2/78c26789-a348-496c-affd-fa598e9cd47e.png" width="1356" />
  </figure>
  <p id="NCwB">это должно воспроизвести простой паттерн из четырёх нот. обратите внимание, что мы используем имя синтезатора <code>mydevice</code> для отправки нот на MIDI-устройство.</p>
  <p id="7bu9">также можно использовать имя ноты и октавную нотацию:</p>
  <figure id="Ad0Z" class="m_column">
    <img src="https://img2.teletype.in/files/56/10/5610d90b-90d4-44ce-a935-9d0bc64ac86e.png" width="1354" />
  </figure>
  <p id="5YoL">в качестве альтернативы использованию <code>n</code> или <code>note</code> для передачи MIDI-нот вы можете использовать функцию <code>midinote</code>:</p>
  <figure id="VtwE" class="m_column">
    <img src="https://img4.teletype.in/files/37/ba/37ba1a30-e65f-40cf-88cd-938376e6b54a.png" width="1358" />
  </figure>
  <p id="PCfo">единственное отличие заключается в том, что в <code>midinote</code> ноты обозначаются числами от 0 (C(-1)) до 127 (G9). В <strong>Tidal Cycles</strong> нота 0 — это C5, а в MIDI C5 — это нота 60, поэтому перевод из одной системы в другую легко осуществить, прибавляя или вычитая <code>60</code> к длительности ноты.</p>
  <p id="D8bS">последний пример можно переписать так:</p>
  <figure id="fWxX" class="m_column">
    <img src="https://img4.teletype.in/files/34/e3/34e3dab7-118e-42b3-a622-4094d376fe39.png" width="1356" />
  </figure>
  <h3 id="midi-channels">MIDI каналы</h3>
  <p id="RNId">используйте функцию <code>midichan</code> для настройки MIDI-канала.</p>
  <figure id="k0HS" class="m_column">
    <img src="https://img3.teletype.in/files/6a/41/6a4108b2-04bd-4440-b644-f5445e923cb5.png" width="1356" />
  </figure>
  <p id="CBPK">MIDI-канал по умолчанию - 1. MIDI-каналы <strong>SuperDirt</strong> индексируются, начиная с нуля, поэтому MIDI-канал 1 - это <code>midichan</code> 0:</p>
  <figure id="gdoz" class="m_column">
    <img src="https://img2.teletype.in/files/db/7e/db7e6e34-1680-4f59-bfce-87af5a12f098.png" width="1352" />
  </figure>
  <p id="SKi7">если ваш синтезатор обрщается к другому каналу, скажем, MIDI-канал 5, вам следует использовать <code>midichan 4</code>:</p>
  <figure id="1O5x" class="m_column">
    <img src="https://img1.teletype.in/files/c4/90/c490271c-e95a-45be-9a61-9503acd45ead.png" width="1360" />
  </figure>
  <p id="XDUp"><code>midichan</code> принимает паттерн из цифр, поэтому вы можете использовать паттерн для воспроизведения на разных каналах MIDI:</p>
  <figure id="08Mg" class="m_column">
    <img src="https://img2.teletype.in/files/9a/b9/9ab94c68-155a-4248-aef5-d8bc53ab1008.png" width="1360" />
  </figure>
  <p id="KWEb">приведенный выше шаблон воспроизводит ноты «0 2» на канале 1 и «4 7» на канале 5.</p>
  <h4 id="cc-params">CC Params</h4>
  <p id="dQb5">чтобы отправить параметр CC на синтезатор, в новом MIDI <strong>SuperDirt</strong> лучше всего использовать другой паттерн Tidal. для создания этого паттерна вам понадобятся два новых MIDI-параметра SuperDirt:</p>
  <ul id="Ap2a">
    <li id="N234">ccn: номер параметра CC, которым вы хотите управлять: <code>ccn 30</code></li>
    <li id="yC2E">ccv: значение для отправки в параметр CC, в диапазоне от 0 до 127: <code>ccv 64</code></li>
  </ul>
  <figure id="VwcX" class="m_column">
    <img src="https://img2.teletype.in/files/5e/74/5e744e44-9f46-4549-99f8-75c4c407657a.png" width="1364" />
  </figure>
  <p id="9h4h">вот полный пример, отправляющий значение 64 в параметр CC 30:</p>
  <figure id="uqER" class="m_column">
    <img src="https://img2.teletype.in/files/5e/87/5e876e70-d1d5-4157-82ed-fa666a12daf8.png" width="1356" />
  </figure>
  <p id="kufF">также можно указать MIDI-канал с помощью <code>midichan</code>:</p>
  <figure id="82tC" class="m_column">
    <img src="https://img1.teletype.in/files/87/2c/872c40eb-a911-4ee8-ab4a-7815424a1a77.png" width="1356" />
  </figure>
  <p id="P1rk">можно указать шаблоны значений CC:</p>
  <figure id="dNMI" class="m_column">
    <img src="https://img1.teletype.in/files/4a/bc/4abc8899-22ac-4d38-993d-d471a984a529.png" width="1356" />
  </figure>
  <p id="gZw3">обратите внимание, что в данном случае при использовании символа <code>#</code> ритм задаётся самым левым паттерном.</p>
  <p id="mRHT">если на вашем устройстве есть функция, которая прослушивает определённый номер CC, вы можете присвоить понятное имя:</p>
  <figure id="Zwyq" class="m_column">
    <img src="https://img1.teletype.in/files/04/c8/04c85f19-d6d4-4d4c-8000-43d11fa798c7.png" width="1354" />
  </figure>
  <p id="RYCS">если есть много параметров CC, которыми вы хотите управлять одновременно, хорошо подойдет стек:</p>
  <figure id="UcxP" class="m_column">
    <img src="https://img3.teletype.in/files/62/74/6274e1b4-8ade-4257-ba16-6c220a73aa81.png" width="1358" />
  </figure>
  <p id="dZAN">каждое устройство имеет собственную реализацию MIDI-диаграммы, но есть несколько стандартных номеров CC, которые должны работать одинаково на большинстве устройств:</p>
  <figure id="LdzI" class="m_retina">
    <img src="https://img1.teletype.in/files/c2/d5/c2d581b1-195f-4bab-b4e7-72108424d43c.png" width="388" />
  </figure>
  <figure id="8loJ" class="m_column">
    <img src="https://img1.teletype.in/files/08/00/080078aa-b406-458f-8887-a9c2177c6865.png" width="1358" />
  </figure>
  <p id="zRx4">существует также функция <code>cc</code>, которая позволяет передавать и число, и значение в одной строке:</p>
  <figure id="YF0P" class="m_column">
    <img src="https://img2.teletype.in/files/1a/65/1a650aeb-254b-48ff-8dae-05c301eb0c23.png" width="1352" />
  </figure>
  <h4 id="velocity">cкорость</h4>
  <p id="thmF">cкорость нажатия по MIDI можно задать с помощью параметров <code>amp</code> и <code>gain</code>. они работают аналогично сэмплам: <code>amp</code>, а <code>gain</code>.</p>
  <p id="exab">Скорость нажатия по умолчанию - <code>50</code>, <code>amp</code> - <code>0,4</code>, а <code>gain</code> - <code>1</code>.</p>
  <p id="iERu">в таблицах показано, как различные значения <code>amp</code> и <code>gain</code> влияют на скорость нажатия:</p>
  <p id="D0bv"></p>
  <figure id="SFWZ" class="m_retina">
    <img src="https://img4.teletype.in/files/7d/d8/7dd89781-c534-451b-960d-2e97496ec5c3.png" width="274" />
  </figure>
  <p id="46EZ"></p>
  <figure id="EbMs" class="m_retina">
    <img src="https://img2.teletype.in/files/de/78/de787fc5-5f8e-4380-ab7f-f524964fa2e5.png" width="272" />
  </figure>
  <h3 id="AJuu">модуляция высоты тона</h3>
  <p id="mHl7">модуляцию высоты тона можно контролировать с помощью функции <code>midibend</code>.</p>
  <figure id="2Sc7" class="m_column">
    <img src="https://img1.teletype.in/files/8b/8e/8b8e6812-7b9c-4c42-b13f-404716f98799.png" width="1358" />
  </figure>
  <p id="vznc">обычно колесо высоты тона передаёт число в диапазоне от <code>-8192</code> до <code>8191</code>, но здесь все числа положительные, поэтому диапазон составляет от <code>0</code> до <code>16383</code>, где <code>8192</code> - нейтральная средняя точка.</p>
  <p id="UD2t">можно имитировать движение колеса высоты тона различными способами.</p>
  <p id="27bi">предположим, ваше устройство называется <code>mydevice</code> и принимает MIDI-сообщения по каналу 5. в этом примере звук начнётся с ноты C и постепенно будет увеличиваться до предела модуляции высоты тона:</p>
  <figure id="s9JS" class="m_column">
    <img src="https://img4.teletype.in/files/7e/46/7e468a74-f04e-42f6-8ebb-62097dd80413.png" width="1356" />
  </figure>
  <p id="etTO">теперь мы начинаем с минимума модуляции высоты тона и быстро движемся к нейтральной точке, где мы будем поддерживать высоту тона до конца цикла:</p>
  <figure id="P8mz" class="m_column">
    <img src="https://img3.teletype.in/files/2f/61/2f619718-75fa-4578-ba39-b03603338495.png" width="1356" />
  </figure>
  <h3 id="J3V4">ретушь</h3>
  <p id="ljdA">ретушь используется для изменения характера воспроизводимого звука, обычно путём увеличения или уменьшения нажатия на клавиши клавиатуры MIDI-контроллера.</p>
  <p id="8qSB">для передачи MIDI-сообщений ретушь на устройство используется функция <code>miditouch</code>.</p>
  <figure id="Vhip" class="m_column">
    <img src="https://img4.teletype.in/files/39/76/39769eb7-5a80-4d2d-998d-60bf86207f42.png" width="1358" />
  </figure>
  <p id="oQDD">диапозон 0 - 127, а дефолтное значение - 0.</p>
  <figure id="WFgR" class="m_column">
    <img src="https://img3.teletype.in/files/e6/67/e6671595-e84e-464b-950d-457f35b2c3ff.png" width="1356" />
  </figure>
  <p id="xyAy">в этом примере после воспроизведения ноты мы устанавливаем ретушь от <code>0</code> до <code>64</code> и обратно несколько раз в цикле, как если бы была нажата клавиша C MIDI-контроллера.</p>
  <h3 id="2jQ5">колесо модуляции</h3>
  <p id="4E8s">специальной функции для отправки сообщений колеса модуляции не существует, но для колеса модуляции используется CC <code>1</code>, поэтому можно юзать это:</p>
  <figure id="qKL7" class="m_column">
    <img src="https://img2.teletype.in/files/5e/f2/5ef21a7b-b358-4ecd-8e59-cc53331fac03.png" width="1362" />
  </figure>
  <p id="Zwhw">здесь мы начинаем цикл с mod wheel, установленным на <code>0</code>, поднимаемся до максимума, затем опускаемся до минимума и снова заканчиваем цикл на <code>0</code>.</p>
  <h3 id="vPgQ">изменение программы</h3>
  <p id="ftmT">сообщения об изменении программы можно отправлять с помощью функции <code>progNum</code>.</p>
  <figure id="dtB1" class="m_column">
    <img src="https://img4.teletype.in/files/34/3a/343aecf5-c3cc-4785-a002-ceac52f91410.png" width="1358" />
  </figure>
  <p id="fPQS">если вы назвали свое устройство <code>mydevice</code> и оно получает сообщения об изменении программы по MIDI-каналу <code>14</code>, вы можете изменить его программу/паттерн, выполнив следующую команду:</p>
  <figure id="QzmJ" class="m_column">
    <img src="https://img4.teletype.in/files/74/ab/74ab49a0-e09e-4bab-801a-31421bc8adaf.png" width="1364" />
  </figure>
  <h4 id="nrpn-parameters">NRPN парамаетры</h4>
  <p id="DXen">для отправки параметров NRPN используйте функции <code>nrpnn</code> и <code>nrpnv</code>.</p>
  <figure id="3BhN" class="m_column">
    <img src="https://img1.teletype.in/files/41/c7/41c705c3-4b6f-420f-adcd-9e577f5e436c.png" width="1358" />
  </figure>
  <p id="iX4Y">номера NRPN состоят из двух байтов: старшего байта (MSB) и младшего байта (LSB). при использовании <code>nrpnn</code> эти два байта записываются в одно число. чтобы рассчитать необходимое число, умножьте первый байт (MSB) на <code>128</code>, а затем прибавьте второй байт (LSB). Например, если в руководстве к вашему устройству указано, что отправка реверберации задаётся значениями NRPN MSP 2 и NRPN LSB 6 (или 2:6), вам нужно указать для <code>nrpnn</code> значение <code>2*128+6=262</code>.</p>
  <p id="NqHr">значения NRPN также состоят из двух байтов, что обеспечивает большую точность, чем сообщения CC. допустимый диапазон для <code>nrpnv</code> - от <code>0</code> до <code>16384</code>. однако учтите, что многие устройства просто проигнорируют эту дополнительную точность.</p>
  <figure id="X0Jp" class="m_column">
    <img src="https://img1.teletype.in/files/07/58/0758419c-c843-4b7e-9dcf-152f0d20534c.png" width="1360" />
  </figure>
  <p id="ycGe"><code>nrpnn</code> и <code>nrpnv</code> являются шаблонными, но обратите внимание, что их аргумент имеет тип <code>Pattern Int</code>, поэтому нужно убедиться, что вы передается значения типа <code>Int</code>, а не <code>Double</code>:</p>
  <figure id="mj1Y" class="m_column">
    <img src="https://img4.teletype.in/files/74/c4/74c4cfaf-56f0-4408-94b0-729a6a55d3b4.png" width="1352" />
  </figure>
  <p id="Fhlo"><code>sine</code> возвращает нам значения типа <code>Double</code>, поэтому нам нужно преобразовать их в <code>Int</code> перед передачей в <code>nrpnv</code>. для этого мы используем <code>floor</code> - функцию Haskell, округляющую число в меньшую сторону, и <code>&lt;$&gt;</code>, которая применяет функцию (в данном случае <code>floor</code>) ко всем элементам коллекции.</p>
  <figure id="VbnU" class="m_column">
    <img src="https://img3.teletype.in/files/a0/58/a058096d-84ea-48f3-af0b-2ee081596430.png" width="1362" />
  </figure>
  <p id="Z5yO">существует также функция <code>nrpn</code>, которая позволяет нам передавать и число, и значение в одной строке:</p>
  <figure id="uXBr" class="m_column">
    <img src="https://img1.teletype.in/files/07/9a/079a5532-fd1f-4b82-b353-0b6a21f76e26.png" width="1364" />
  </figure>
  <h2 id="tidal-midi">Синхронизация MIDI-часов</h2>
  <p id="zbKH">часто бывает важно отправлять события MIDI-синхронизации для синхронизации темпа между устройствами. <strong>Tidal</strong> не может синхронизировать свой темп с получаемыми событиями MIDI-синхронизации, но может выступать в качестве источника MIDI-синхронизации. в следующих разделах показаны два варианта отправки событий MIDI-синхронизации, соответствующих темпу <strong>Tidal</strong>.</p>
  <h2 id="0PJ5">синхронизация MIDI-часов с использованием протокола Link</h2>
  <p id="mk4C">начиная с версии 1.9, <strong>Tidal</strong> использует протокол Link для планирования событий. <strong>Link</strong> — это технология, синхронизирующая музыкальный ритм, темп и фазу в нескольких приложениях. изначально она была разработана компанией Ableton, но имеет открытый исходный код и теперь реализована во многих музыкальных программах. можно использовать <strong>Link</strong> для синхронизации <strong>Tidal</strong> с отдельной программой, которая будет выступать в качестве источника MIDI-сигнала.</p>
  <p id="LKbe">это предпочтительный метод отправки событий MIDI-синхронизации, поскольку он прост, производителен, стабилен.</p>
  <h3 id="AvGC"><strong>SuperCollider</strong> как источник MIDI-синхронизации</h3>
  <p id="hhrI">можно использовать <strong>Link</strong> для синхронизации <strong>Tidal</strong> с <strong>SuperCollider</strong> и настроить <strong>SuperCollider</strong> на отправку MIDI-событий. для этого потребуется расширить SuperCollider новым классом <code>LinkToMidiClock</code>.</p>
  <p id="jt2m">найдите соответствующий каталог расширений, выполнив одну из следующих строк в SuperCollider:</p>
  <figure id="9zW0" class="m_column">
    <img src="https://img4.teletype.in/files/f7/a2/f7a277ae-acf5-4fee-8416-c972efa6eb63.png" width="1362" />
  </figure>
  <p id="cx4R">создайте файл <code>LinkToMidiClock.sc</code> в выбранном каталоге расширений и сохраните его со следующим содержимым:</p>
  <figure id="AylK" class="m_column">
    <img src="https://img2.teletype.in/files/df/00/df003542-7c62-46fa-a3e3-845482c34869.png" width="1414" />
  </figure>
  <p id="VeQA">перезагрузите <strong>SuperCollider</strong> или используйте <code>Language &gt; Recompile Class Library</code></p>
  <p id="caVD">теперь можно следовать руководству по инициализации. будем использовать переменную MIDI-устройства с именем <code>~midiOut</code> из инициализации в примерах ниже.</p>
  <p id="IS2T">После инициализации MIDI-устройства создайте <a href="https://doc.sccode.org/Classes/LinkClock.html" target="_blank">LinkClock</a> в <strong>SuperCollider</strong>.</p>
  <figure id="C8RF" class="m_column">
    <img src="https://img1.teletype.in/files/4e/04/4e045b4a-95db-4fb3-af36-2c94c55daa51.png" width="1526" />
  </figure>
  <p id="FDkg">убедиться, что Tidal и SuperCollider соединились по Link, можно, проверив количество <code>peers</code> Link:</p>
  <figure id="EN3s" class="m_column">
    <img src="https://img3.teletype.in/files/6a/86/6a860544-193c-4597-9b87-f72b8141d008.png" width="1524" />
  </figure>
  <p id="IWE3">затем создайте <code>LinkToMidiClock</code>, подключенный к MIDI-устройству <code>~midiOut</code> и <code>LinkClock ~lc</code>.</p>
  <figure id="CPUH" class="m_column">
    <img src="https://img2.teletype.in/files/16/66/1666307e-a918-401c-a114-e83dacc199e5.png" width="1530" />
  </figure>
  <p id="WhPX">события MIDI-синхронизации будут отправляться непрерывно после того, как мы пропишем их начало, до тех пор, пока мы не пропишем их остановку.</p>
  <figure id="LuJH" class="m_column">
    <img src="https://img3.teletype.in/files/2e/d1/2ed1ed7f-d23f-4793-848f-75da1071c995.png" width="1526" />
  </figure>
  <h2 id="Dsrb">контроль входа звука</h2>
  <p id="EeAx"><strong>Tidal</strong> 1.0.0 теперь поддерживает внешний входной сигнал по протоколу OSC. вот краткое руководство по настройке, включая использование простого «бриджа» для работы MIDI-входа.</p>
  <h3 id="setup">сет-ап</h3>
  <p id="cNOf">чтобы использовать MIDI, вам не нужно особо беспокоиться о сопоставлении OSC. однако вам потребуется запустить программу для преобразования MIDI в OSC (<strong>Tidal</strong> слушает сообщения OSC). вот как это сделать с помощью <strong>SuperCollider</strong>. сначала, когда <strong>Tidal</strong> и <strong>SuperDirt</strong> уже запущены, запустите следующий блок кода в <strong>SuperCollider</strong>:</p>
  <figure id="4SvP" class="m_column">
    <img src="https://img1.teletype.in/files/ca/3c/ca3c91a0-3a98-4ae3-9259-41bd6eb66d64.png" width="1528" />
  </figure>
  <h3 id="HOlk">сет-ап в использовании</h3>
  <p id="vdXL">после этого вы сможете запустить следующий паттерн, использующий  <code>CC value 12</code>:</p>
  <figure id="zTKa" class="m_column">
    <img src="https://img1.teletype.in/files/c6/7f/c67f4bf2-4034-4a59-807a-5ebcd98b2344.png" width="1528" />
  </figure>
  <p id="zoLS">если вы хотите использовать MIDI в операторе формирования паттернов, может быть полезно сначала <code>segment</code> входные данные, поскольку исходный паттерн, поступающий с вашего MIDI-устройства, будет иметь очень высокое разрешение. в этом примере принимается только одно значение за цикл, которое затем преобразуется с помощью функции <code>range</code>:</p>
  <figure id="USwx" class="m_column">
    <img src="https://img4.teletype.in/files/fe/db/fedb2d2a-6ed0-4590-a15e-58d4ebd23f95.png" width="1528" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/Synthesizers</guid><link>https://teletype.in/@lckstar/Synthesizers?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/Synthesizers?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>синтезаторы</title><pubDate>Wed, 03 Sep 2025 23:08:04 GMT</pubDate><description><![CDATA[<img src="https://img4.teletype.in/files/73/73/7373067e-5bf7-439b-9bb4-209f1fa903aa.png"></img>SuperDirt устанавливается вместе с обширным списком стандартных аудиоэффектов и синтезаторов. что также можно расширить этот список, добавив собственные синтезаторы и аудиоэффекты в звуковой движок. например, ознакомьтесь с темами «Mutable Instruments» или «SynthDefs for Tidal» на форуме Tidal Club.]]></description><content:encoded><![CDATA[
  <p id="HMqR"><strong>SuperDirt</strong> устанавливается вместе с обширным списком стандартных аудиоэффектов и синтезаторов. что также можно расширить этот список, добавив собственные синтезаторы и аудиоэффекты в звуковой движок. например, ознакомьтесь с темами «<a href="https://club.tidalcycles.org/t/mutable-instruments-ugens/2730" target="_blank">Mutable Instruments</a>» или «<a href="https://club.tidalcycles.org/t/synthdefs-for-tidal/1092" target="_blank">SynthDefs for Tidal</a>» на форуме <strong>Tidal Club</strong>.</p>
  <h2 id="i2p0">базовые инструменты</h2>
  <p id="CNfL">значения по умолчанию указаны в скобках. во всех синтезаторах <code>sustain</code> (по умолчанию 1) влияет на общую временную шкалу огибающей. Параметры <code>pan</code> и <code>freq</code> также можно настроить во всех синтезаторах. значение <code>freq</code> по умолчанию обычно равно 440. В синтезаторах, где это значение отличается, <code>freq</code> и его значение по умолчанию для данного синтезатора указаны в списке параметров ниже.</p>
  <h2 id="n0br">добавочный синтез</h2>
  <h4 id="supergong">supergong</h4>
  <p id="w1uq">Пример добавочного синтеза, создающего гонгообразный шум из суммы гармоник синусоидальной формы. тут видно, как временная шкала огибающей и амплитуда могут масштабироваться в зависимости от частоты гармон.</p>
  <ul id="fL6H">
    <li id="FIAI">voice (0): обеспечивает что-то вроде ручки тембра</li>
    <li id="KuAC">decay (1): регулирует затухание гармоник</li>
    <li id="cUd1">accelerate (0): для плавного изменения высоты тона</li>
  </ul>
  <figure id="2aQH" class="m_original">
    <img src="https://img4.teletype.in/files/73/73/7373067e-5bf7-439b-9bb4-209f1fa903aa.png" width="717" />
  </figure>
  <h2 id="KAv0">Субстративный синтез</h2>
  <h4 id="supersquare">supersquare</h4>
  <p id="Eg1J">синтезатор square-wave формы; импульсы переменной ширины с частотой фильтра, модулируемой LFO:</p>
  <ul id="ZFld">
    <li id="a9Tn"><code>voice</code>: управляет шириной импульса (точно ноль или единица не воспроизводит звук).</li>
    <li id="0NFU"><code>decay</code> (0): затухание.</li>
    <li id="h9db"><code>accelerate</code> (0): плавное изменение высоты тона.</li>
    <li id="apGK"><code>semitone</code> (12): насколько сильно вторичный осциллятор отклоняется по высоте тона (не обязательно целое число).</li>
    <li id="7vPm"><code>resonance</code> (0.2): резонанс фильтра.</li>
    <li id="Pdk4"><code>LFO</code> (1): степень влияния LFO на частоту фильтра.</li>
    <li id="H7zZ"><code>rate</code> (1): частота LFO.</li>
    <li id="C5kb"><code>pitch1</code> (1): множитель масштабирования частоты фильтра, сама частота следует за высотой тона, заданной параметром «n».</li>
  </ul>
  <h4 id="superpwm">superpwm</h4>
  <p id="1vQL">cинтезатор PWM; импульсы умножаются на сдвинутые по фазе импульсы, двойная фильтрация с огибающей на второй частоте.</p>
  <ul id="cUN4">
    <li id="GziZ"><code>voice</code>: управляет скоростью сдвига фазы.</li>
    <li id="lheI"><code>decay</code> (0): затухание.</li>
    <li id="PDX5"><code>accelerate</code> (0): плавное изменение высоты тона.</li>
    <li id="GhrP"><code>semitone</code> (12): насколько далеко по высоте тона находится вторичный осциллятор (не обязательно целое число).</li>
    <li id="ZbWB"><code>resonance</code> (0,2): резонанс фильтра.</li>
    <li id="G3a0"><code>lfo</code> (1): степень влияния LFO на частоту фильтра.</li>
    <li id="fijG"><code>rate</code> (1): частота LFO.</li>
    <li id="6L3n"><code>pitch1</code> (1): множитель масштабирования частоты фильтра, сама частота следует за высотой тона, заданной параметром «n».</li>
  </ul>
  <h4 id="superchip">superchip</h4>
  <p id="LIQV">использует эмуляцию <strong>Atari ST UGen</strong> с 3 осцилляторами:</p>
  <p id="GTwB"><code>slide</code> (0): для линейного скольжения частоты<br /><code>rate</code> (1): повторяет указанное выше скольжение n раз (может быть дробным или отрицательным)<br /><code>accelerate</code> (0): для полного скольжения<br /><code>pitch2</code> (2): управляет соотношением гармоник<br /><code>pitch3</code> (3): управляет соотношением гармоник<br /><code>voice</code> (0): вызывает изменения уровней трёх осцилляторов</p>
  <h4 id="superzow">superzow</h4>
  <ul id="NFF1">
    <li id="IjA4"><code>decay</code> (0): для формирования огибающей</li>
    <li id="UCwy"><code>accelerate</code> (0): для изменения высоты тона</li>
    <li id="56qd"><code>slide</code> (1): скорость перемещения по фазе</li>
    <li id="Ppu5"><code>detune</code> (1): для расстройки осциллятора</li>
  </ul>
  <h4 id="supertron">supertron</h4>
  <p id="Szrl">фидбэчит PWM:</p>
  <ul id="od8g">
    <li id="4og5"><code>accelerator</code> (0): плавное изменение высоты тона</li>
    <li id="SKev"><code>voice</code> (0): количество голосов</li>
    <li id="f96A"><code>detune</code> (0): величина расстройки</li>
  </ul>
  <figure id="HL1O" class="m_original">
    <img src="https://img1.teletype.in/files/4b/1d/4b1d7fa9-346f-4591-b2d4-af8cb7de7229.png" width="719" />
  </figure>
  <h4 id="superreese">superreese</h4>
  <p id="zgAi">Vaguely Reese-like синтезатор:</p>
  <ul id="Rcc5">
    <li id="iQjk"><code>accelerate</code> (0): плавное изменение высоты тона.</li>
    <li id="EfWa"><code>voice</code> (0): количество голосов.</li>
    <li id="Oe5D"><code>detune</code> (0): величина расстройки.</li>
  </ul>
  <h4 id="supernoise">supernoise</h4>
  <p id="Hi8m">импульсный шум с плавным нарастанием/затуханием.</p>
  <ul id="pue9">
    <li id="HZxo"><code>voice</code>: при значении 0 — цифровой шум, для которого «n» управляет частотой среза, при значении 1 — коричнево-белый шум, для которого «n» управляет частотой среза.</li>
    <li id="loRT"><code>accelerate</code>: вызывает плавное увеличение частоты среза, «Скорость» — повторение.</li>
    <li id="3Wws"><code>pitch1</code>: масштабирует частоту полосы пропускания (которая отслеживает «n»).</li>
    <li id="HADQ"><code>slide</code>: работает как ускорение в полосе пропускания.</li>
    <li id="WU1K"><code>resonance</code>: резонанс фильтра.</li>
  </ul>
  <h4 id="supercomparator">supercomparator</h4>
  <ul id="F240">
    <li id="BXTp"><code>voice</code> (0.5): масштабирует частоты компаратора, более высокие значения будут звучать «дышаще».<br /></li>
    <li id="0EA6"><code>decay</code> (0)</li>
    <li id="gnlt"><code>accelerate</code> (0): плавное изменение высоты тона.<br />resonance (0.5): резонанс фильтра.</li>
    <li id="viRm"><code>LFO</code> (1): степень влияния LFO на частоту фильтра.</li>
    <li id="Zmrt"><code>rate</code> (1): частота LFO.</li>
    <li id="attg"><code>pitch1</code> (1): множитель масштабирования частоты фильтра, сама частота следует высоте тона, заданной параметром «n».</li>
  </ul>
  <h2 id="Xad0">Физическое моделирование</h2>
  <h4 id="supermandolin">supermandolin</h4>
  <p id="cqgM">физическое моделирование вибрирующей струны с использованием линии задержки (<code>CombL</code>), возбуждаемой начальным импульсом (<code>Impulse</code>). чтобы сделать звучание более насыщенным, объединили две слегка расстроенные линии задержки:</p>
  <ul id="CV6w">
    <li id="NUWq"><code>sustain</code> (1): изменяет временной масштаб огибающей</li>
    <li id="xX18"><code>accelerate</code> (0): плавное изменение высоты тона</li>
    <li id="qpNU"><code>detune</code> (0.2): величина расстройки</li>
  </ul>
  <h4 id="superpiano">superpiano</h4>
  <ul id="Joy4">
    <li id="4VFU"><code>velocity</code>: влияет на силу нажатия клавиш;</li>
    <li id="sY7g"><code>sustain</code>: управляет огибающей и временем затухания;</li>
    <li id="alx1"><code>detune</code> (0.1): величина расстройки.</li>
    <li id="1FNZ"><code>muffle</code> (1);</li>
    <li id="pOtp"><code>stereo</code> (0.2): уровень стерео.</li>
  </ul>
  <p id="sgrK">Voices are drawbar presets:</p>
  <ul id="99or">
    <li id="mNKr"><strong>0.</strong> bass violin 16’</li>
    <li id="JitF"><strong>1.</strong> tibia 8’</li>
    <li id="pTSB"><strong>2.</strong> bassoon 8’</li>
    <li id="1uDr"><strong>3.</strong> french trumpet 8’</li>
    <li id="UnCc"><strong>4.</strong> string ensemble</li>
    <li id="hY12"><strong>5.</strong> Blues</li>
    <li id="n06f"><strong>6.</strong> Jazz 1</li>
    <li id="q1zt"><strong>7.</strong> Full Shout</li>
    <li id="T8Co"><strong>8.</strong> Bro’ Jack</li>
    <li id="nVKi"><strong>9.</strong> Jazz 2</li>
  </ul>
  <h4 id="supervibe">supervibe</h4>
  <ul id="d5WK">
    <li id="2Rgr"><code>decay</code> (0): используйте большие значения для подавления высших гармоник.</li>
    <li id="LMEf"><code>velocity</code> (1): более высокая скорость немного оживит звук.</li>
    <li id="bBih"><code>accelerate</code> (0): для линейного изменения высоты тона.</li>
    <li id="EIj4"><code>modamp</code> (1): амплитуда тремоло (0-2 подходит).</li>
    <li id="WAEJ"><code>modfreq</code> (7): частота тремоло.</li>
    <li id="wXxn"><code>detune</code> (0): регулирует высшую гармонику, чтобы придать звуку другой характер.</li>
  </ul>
  <p id="1YMT">все остальное можно увидеть <a href="https://tidalcycles.org/docs/reference/synthesizers/" target="_blank">здесь</a>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/Sampling</guid><link>https://teletype.in/@lckstar/Sampling?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/Sampling?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>сэмплинг</title><pubDate>Wed, 03 Sep 2025 22:24:20 GMT</pubDate><description><![CDATA[<img src="https://img3.teletype.in/files/29/de/29de5e02-4f4b-4726-9315-30bcd0b40af9.png"></img>на этой странице представлены все функции, которые можно использовать для нарезки, вырезания, реверсирования или разбиения сэмплов, входящих сигналов или осцилляторов. каждая функция представлена ​​по одной и той же схеме:]]></description><content:encoded><![CDATA[
  <p id="yUgu">на этой странице представлены все функции, которые можно использовать для нарезки, вырезания, реверсирования или разбиения сэмплов, входящих сигналов или осцилляторов. каждая функция представлена ​​по одной и той же схеме:</p>
  <ul id="m4ss">
    <li id="DBoY"><strong>Сигнатура типа</strong>: как функция объявлена ​​на стороне Haskell.</li>
    <li id="D0Go"><strong>Описание</strong>: словесное описание функции.</li>
    <li id="HQYl"><strong>Примеры</strong>: небольшой список примеров, которые можно скопировать и вставить в редактор.</li>
  </ul>
  <h2 id="ssSg">Сэмплирование аудио</h2>
  <h3 id="chop">chop</h3>
  <figure id="1sxl" class="m_original">
    <img src="https://img3.teletype.in/files/29/de/29de5e02-4f4b-4726-9315-30bcd0b40af9.png" width="715" />
  </figure>
  <p id="3Qg5">функция <code>chop</code> разрезает каждый паттерн на заданное количество частей, позволяя изучить метод, известный как «гранулярный синтез». он преобразует паттерн образцов в паттерн частей образцов:</p>
  <figure id="MSP9" class="m_original">
    <img src="https://img4.teletype.in/files/71/39/7139ea7c-c36a-4775-9109-344d2a3faba2.png" width="715" />
  </figure>
  <p id="QCMs">каждый сэмпл делится на 16 бит, что даёт 64 (16*4) события. можно задать паттерн для первого параметра:</p>
  <figure id="8B6c" class="m_original">
    <img src="https://img2.teletype.in/files/92/5c/925c8e99-516b-43f2-ab0a-69ac73de2043.png" width="717" />
  </figure>
  <p id="bhKc">в результате получается паттерн из нарезанных фрагментов сэмплов. это можно услышать это более отчётливо, например, перевернув паттерн, так как изменяется порядок частей сэмплов:</p>
  <figure id="J2CS" class="m_original">
    <img src="https://img3.teletype.in/files/6a/25/6a25c391-e800-4e2b-b708-4e6bb5a3369c.png" width="713" />
  </figure>
  <p id="hMqu">тут это происходит только с одним динамиком:</p>
  <figure id="7PnT" class="m_original">
    <img src="https://img2.teletype.in/files/d5/45/d5452abb-8779-45a4-b035-02f1c42366e5.png" width="717" />
  </figure>
  <p id="y8If">различные значения измельчения могут давать совершенно разные результаты в зависимости от используемых сэмплов:</p>
  <figure id="a63A" class="m_original">
    <img src="https://img4.teletype.in/files/7e/25/7e253ed9-3137-474b-b99c-06aa7e525a65.png" width="715" />
  </figure>
  <p id="xVi1">также можете использовать функцию <code>chop</code> (или <code>striate</code>) для очень длинных сэмплов, чтобы разрезать их на короткие фрагменты и структурировать их. следующий код разрезает сэмпл на 32 части и воспроизводит его в течение 8 тактов:</p>
  <figure id="8kT1" class="m_original">
    <img src="https://img4.teletype.in/files/bd/08/bd080a9d-cdb1-4a7d-9a77-6722b7956da0.png" width="711" />
  </figure>
  <p id="Z0iL">функция <code>loopAt</code> изменяет скорость воспроизведения сэмпла, чтобы он идеально укладывался в заданное количество циклов. в результате в примере выше гранулы идеально выстраиваются в линию, поэтому не слышно, что сэмпл был нарезан на фрагменты. опять же, это становится более очевидным при дальнейших манипуляциях с паттерном, например, при использовании <code>rev</code> для изменения порядка нарезанных фрагментов:</p>
  <figure id="DzF3" class="m_original">
    <img src="https://img3.teletype.in/files/e3/72/e3721e8f-c60a-4f05-b5c5-f82765b53707.png" width="717" />
  </figure>
  <h3 id="striate">striate</h3>
  <figure id="vp20" class="m_original">
    <img src="https://img2.teletype.in/files/90/6e/906e416f-084e-462a-915d-c216914e038b.png" width="715" />
  </figure>
  <p id="BRSN"><code>striate</code> - это своего рода гранулятор, разрезающий образцы на каты подобно чопу, но полученные каты организованы иначе:</p>
  <figure id="OLpw" class="m_original">
    <img src="https://img2.teletype.in/files/d9/3b/d93bbb6e-ae63-4d56-8918-fa45b5a62de7.png" width="716" />
  </figure>
  <p id="WzR3">это воспроизводит цикл заданное количество раз, но запуская прогрессивные фрагменты каждого сэмпла. таким образом, в данном случае цикл воспроизводится три раза: в первый раз - первая треть каждого сэмпла, затем - вторая треть каждого сэмпла, и, наконец, - последняя треть каждого сэмпла. если сравнить это с это с функцией <code>chop</code>:</p>
  <figure id="A2pf" class="m_original">
    <img src="https://img4.teletype.in/files/70/bf/70bfc674-9925-44f2-9e07-f5bd5a739091.png" width="716" />
  </figure>
  <h3 id="striateby">striateBy</h3>
  <figure id="PxHR" class="m_original">
    <img src="https://img1.teletype.in/files/ce/5d/ce5d708f-81cb-4843-9c91-4f348a16d6d4.png" width="717" />
  </figure>
  <p id="fwTV"><code>striateBy</code> (= <code>striate&#x27;</code>) - это вариант <code>striate</code> с дополнительным параметром, который задаёт длину каждой части. <code>striate</code> по-прежнему сканирует сэмпл за один цикл, но если каждый бит длиннее, возникает своего рода эффект заикания. например, следующий код разрежет сэмпл <strong>bev</strong> на 32 части, но каждая будет иметь длину, равную 1/16 сэмпла:</p>
  <figure id="5ozo" class="m_original">
    <img src="https://img2.teletype.in/files/5a/32/5a32fbd5-7337-4340-a90e-c6baa93b8bb6.png" width="716" />
  </figure>
  <p id="j0IQ">важно, что <code>striate</code> использует внутренние параметры <code>begin</code> и <code>end</code>. это означает, что если используется <code>striate</code> или <code>striateBy</code>, не следует указывать также <code>begin</code> и <code>end</code>.</p>
  <h3 id="slice">slice</h3>
  <figure id="duKJ" class="m_original">
    <img src="https://img1.teletype.in/files/8e/41/8e412ee5-de09-4af0-8228-df2bf3e922fc.png" width="715" />
  </figure>
  <p id="Nu79">функция <code>slice</code> похожа на функцию <code>chop</code> and <code>striate</code>, поскольку позволяет нарезать сэмплы на фрагменты. разница в том, что она позволяет переставлять эти фрагменты в виде pattern.</p>
  <figure id="DSay" class="m_original">
    <img src="https://img3.teletype.in/files/24/96/24963ec3-4774-4a9e-a77f-9dbf7a4b4630.png" width="716" />
  </figure>
  <p id="f1XG">вышеприведенный код разрезает сэмпл на восемь бит, а затем воспроизводит их в обратном порядке, что эквивалентно применению <code>rev $ chop 8</code>. более сложный пример:</p>
  <figure id="79r4" class="m_original">
    <img src="https://img1.teletype.in/files/8d/d8/8dd871f3-b71b-4c8a-8e17-f577c2173a36.png" width="719" />
  </figure>
  <h3 id="splice">splice</h3>
  <figure id="Up6B" class="m_original">
    <img src="https://img1.teletype.in/files/03/9e/039e478f-2760-4718-a6e1-bc977c4a1ab0.png" width="718" />
  </figure>
  <p id="QXjp"><code>splice</code> похоже на нарезку, но нарезки автоматически наклоняются вверх или вниз, чтобы заполнить свой «слот».</p>
  <figure id="7OHd" class="m_original">
    <img src="https://img2.teletype.in/files/da/72/da721ad3-4f66-4d79-b91a-fd9e8f8a8a47.png" width="716" />
  </figure>
  <h3 id="randslice">randslice</h3>
  <figure id="y6Po" class="m_original">
    <img src="https://img4.teletype.in/files/35/1e/351e6d87-9897-461f-9514-85975e72dc6e.png" width="718" />
  </figure>
  <p id="K9Te"><code>randslice</code> разрезает сэмпл на заданное количество частей, а затем воспроизводит случайную часть в каждом цикле:</p>
  <figure id="iQrz" class="m_original">
    <img src="https://img3.teletype.in/files/6a/ed/6aed7d87-ffe9-4daf-bd44-84732db5e86c.png" width="716" />
  </figure>
  <p id="ZG4u">можно юзать быстрый режим, чтобы получить больше одного за цикл;</p>
  <figure id="OV0r" class="m_original">
    <img src="https://img3.teletype.in/files/e2/b8/e2b8f3e1-7904-417a-998a-d50c7d041ee0.png" width="716" />
  </figure>
  <h3 id="chew">chew</h3>
  <figure id="Fbsn" class="m_original">
    <img src="https://img3.teletype.in/files/ea/e4/eae47799-1981-4d67-846a-a3574323948b.png" width="717" />
  </figure>
  <p id="L22C"><code>chew</code> работает так же, как и <code>bite</code>, но ускоряет/замедляет воспроизведение звуков, а также сжимает/контрастит части паттерна:</p>
  <figure id="xtGg" class="m_original">
    <img src="https://img1.teletype.in/files/02/e8/02e8f66e-977b-40e3-9ac5-b5437bf1f3b2.png" width="717" />
  </figure>
  <h3 id="loopat">loopAt</h3>
  <figure id="1RBV" class="m_original">
    <img src="https://img1.teletype.in/files/ce/69/ce69fb5d-b629-4df5-a14c-b2c98e064507.png" width="715" />
  </figure>
  <p id="fODs"><code>loopAt</code> подгоняет сэмпл под заданное количество циклов. внутренне она работает следующим образом: устанавливает единицу управления на «c», изменяет скорость воспроизведения сэмпла с помощью параметра <code>«speed»</code> и устанавливает соответствующую плотность паттерна.</p>
  <figure id="lKhk" class="m_original">
    <img src="https://img4.teletype.in/files/f8/02/f8022a44-3a9a-4402-ade1-e53bdb56437b.png" width="716" />
  </figure>
  <p id="fpV7">хорошей идеей является использование этой функции в сочетании с функцией <code>chop</code>, так разрыв будет по частям, и не придется ждать, пока начнется/остановится весь сэмпл.</p>
  <figure id="x0QQ" class="m_original">
    <img src="https://img2.teletype.in/files/1b/ab/1bab4c0d-44ae-4b23-a3fe-d291f6973415.png" width="716" />
  </figure>
  <p id="TBTh">как и со всеми функциями <strong>Tidal</strong>, с этой функцией можно экспериментировать. пример ниже показывает, как задать шаблон количества циклов для <code>loopAt</code>:</p>
  <figure id="1Nqg" class="m_original">
    <img src="https://img1.teletype.in/files/02/0f/020fcfb0-05bf-4c37-87db-352ad03f85ee.png" width="716" />
  </figure>
  <h3 id="smash">smash</h3>
  <figure id="ML6b" class="m_original">
    <img src="https://img1.teletype.in/files/0d/bc/0dbc68f6-b824-4e06-8cd7-0e084deab5de.png" width="717" />
  </figure>
  <p id="tT1H"><code>smash</code> - это комбинация <code>spread</code> и <code>striate</code>: он нарезает сэмплы на заданное количество битов, а затем вставляет их между воспроизведением цикла на разных скоростях в соответствии со значениями в списке.:</p>
  <figure id="Zf6J" class="m_original">
    <img src="https://img3.teletype.in/files/69/a1/69a19edf-78d9-485d-ab03-bae3dc319906.png" width="717" />
  </figure>
  <figure id="j6i4" class="m_original">
    <img src="https://img3.teletype.in/files/2b/c3/2bc31c96-206a-4a07-a975-9e8776d9d16b.png" width="718" />
  </figure>
  <h3 id="smash-1">smash&#x27;</h3>
  <figure id="cU1m" class="m_original">
    <img src="https://img1.teletype.in/files/c8/bf/c8bf742c-e632-4d92-ae41-e9e1f867e04f.png" width="718" />
  </figure>
  <p id="BYiX"><code>smash&#x27;</code> - это <code>smash</code>, но основано но <code>chop</code>, а не <code>striate</code>.</p>
  <figure id="NRR3" class="m_original">
    <img src="https://img4.teletype.in/files/f7/36/f73605df-ca4b-4231-ab6e-873de9f615e2.png" width="714" />
  </figure>
  <p id="hwnb">до</p>
  <figure id="FLvY" class="m_original">
    <img src="https://img4.teletype.in/files/b3/cd/b3cd43db-c77e-41ad-bb88-bc5bf1662bcd.png" width="718" />
  </figure>
  <p id="tYx3">=</p>
  <figure id="ngc2" class="m_original">
    <img src="https://img1.teletype.in/files/4c/f8/4cf8c803-ac2e-438a-85b7-85a580fb947f.png" width="715" />
  </figure>
  <p id="rReg">vs</p>
  <figure id="XskF" class="m_original">
    <img src="https://img3.teletype.in/files/2e/33/2e33545d-dfb9-4e54-97bd-d9fd63e64cdd.png" width="716" />
  </figure>
  <p id="AVrY">))</p>
  <h2 id="6PFB">сэмплинг по сигналам </h2>
  <h3 id="segment">segment</h3>
  <figure id="126z" class="m_original">
    <img src="https://img4.teletype.in/files/77/6b/776b8d03-ea64-4743-a21b-a61f9ae6c24e.png" width="719" />
  </figure>
  <p id="UgKI"><code>segment</code> «сэмплирует» паттерн с частотой <code>n</code> событий за цикл. полезно для преобразования непрерывного паттерна в дискретный. в этом примере паттерн формируется из формы синуса, непрерывного паттерна. без <code>segment</code> отсчёты будут запускаться с неопределённой частотой, которая может быть очень высокой.</p>
  <h3 id="sig">sig</h3>
  <figure id="hG7o" class="m_original">
    <img src="https://img3.teletype.in/files/e0/e9/e0e94a9f-f4b2-4df8-89a8-20fa015bcb4e.png" width="719" />
  </figure>
  <p id="sZiQ">функция <code>sig</code> принимает функцию времени и преобразует её в шаблон. Это очень полезно для создания непрерывных паттерноа, таких как <code>sine</code> или <code>perlin</code>. <code>saw</code> определяется как:</p>
  <figure id="bnHJ" class="m_original">
    <img src="https://img1.teletype.in/files/88/c6/88c63b65-3325-4702-9af2-e6490e4b7b7a.png" width="719" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/Randomness</guid><link>https://teletype.in/@lckstar/Randomness?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/Randomness?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>рандом</title><pubDate>Wed, 03 Sep 2025 20:44:45 GMT</pubDate><description><![CDATA[<img src="https://img2.teletype.in/files/97/ca/97ca131e-e3a3-41c9-9a71-8f4f008523dc.png"></img>тут представлены все функции, которые можно использовать для внесения случайности в ваши музыкальные паттерны. каждая функция представлена ​​по одной и той же схеме:]]></description><content:encoded><![CDATA[
  <p id="Fa2N">тут представлены все функции, которые можно использовать для внесения случайности в ваши музыкальные паттерны. каждая функция представлена ​​по одной и той же схеме:</p>
  <ul id="E6zB">
    <li id="kn4B"><strong>Сигнатура типа</strong>: как функция объявлена ​на стороне Haskell.</li>
    <li id="vmCy"><strong>Описание</strong>: словесное описание функции.</li>
    <li id="QDBK"><strong>Примеры</strong>: небольшой список примеров, которые можно скопировать и вставить в редактор.</li>
  </ul>
  <h2 id="OwdU">Псевдорандомизация</h2>
  <h3 id="rand">rand</h3>
  <figure id="Rckp" class="m_original">
    <img src="https://img2.teletype.in/files/97/ca/97ca131e-e3a3-41c9-9a71-8f4f008523dc.png" width="717" />
  </figure>
  <p id="mBa9"><code>rand</code> - это генератор, генерирующий последовательность (псевдо) случайных чисел с плавающей запятой в диапазоне от <code>0,0</code> до <code>1,0</code>. например, для случайного панорамирования стереополя можно:</p>
  <figure id="WhtE" class="m_original">
    <img src="https://img1.teletype.in/files/46/a1/46a1aa6b-9078-4ece-96bf-0caa3fc23d2d.png" width="717" />
  </figure>
  <p id="Za9Y">или, чтобы наслаждаться случайной скоростью от <code>0,5</code> до <code>1,5</code>, вы можете прибавить к значению <code>0,5</code>.</p>
  <figure id="7bI0" class="m_original">
    <img src="https://img3.teletype.in/files/a0/b0/a0b00438-f1df-4cd5-8abc-b01645801b78.png" width="717" />
  </figure>
  <h3 id="irand">irand</h3>
  <figure id="VqKS" class="m_original">
    <img src="https://img3.teletype.in/files/24/6e/246e64f2-eb22-4380-b984-4b9607a1ff43.png" width="719" />
  </figure>
  <p id="EhS7">функция <code>irand</code> похожа на <code>rand</code>, но генерирует непрерывный генератор (псевдо) случайных целых чисел от <code>0</code> до <code>n-1</code> включительно. в частности, используется для выбора случайных сэмпла из папки.</p>
  <figure id="pLA3" class="m_original">
    <img src="https://img3.teletype.in/files/29/09/29090036-9230-407d-ad6e-f294f5f0c379.png" width="715" />
  </figure>
  <h2 id="45rq">Перлинов шум</h2>
  <h3 id="perlin">perlin</h3>
  <figure id="HLHa" class="m_original">
    <img src="https://img3.teletype.in/files/a4/51/a451b385-5fb8-4357-9373-e7ae817d3532.png" width="715" />
  </figure>
  <p id="t422"><code>perlin</code> создаёт 1D Perlin (гладкий) шум. jн работает как <code>rand</code>, но плавно переключается между случайными значениями в каждом цикле. например, можно плавно и случайным образом изменять скорость:</p>
  <figure id="oWfo" class="m_original">
    <img src="https://img4.teletype.in/files/7d/d9/7dd9f0fb-45c0-48a5-8783-e4ebc284d944.png" width="717" />
  </figure>
  <p id="JRZo">функция <code>perlin</code> генерирует новое случайное значение для каждого цикла. если вы хотите, чтобы новое случайное значение генерировалось чаще или реже, используйте <code>fast</code> или <code>slow</code> соответственно:</p>
  <figure id="JO3r" class="m_original">
    <img src="https://img4.teletype.in/files/34/23/342311e2-b0c2-43b0-b757-c635e2a034ba.png" width="718" />
  </figure>
  <h3 id="perlinwith">perlinWith</h3>
  <p id="mQMM"><code>perlinWith</code> позволяет указать паттерн в качестве входных данных для генерации случайных значений вместо использования количества циклов по умолчанию:</p>
  <figure id="rISR" class="m_original">
    <img src="https://img1.teletype.in/files/05/20/0520a1d9-2886-447a-884b-3511a4399c10.png" width="716" />
  </figure>
  <h3 id="perlin2">perlin2</h3>
  <p id="tw10"><code>perlin2</code> создает 2D шум, позволяя указать пользовательский паттерн в качестве второго измерения (номер цикла остается первым измерением):</p>
  <figure id="NHyR" class="m_original">
    <img src="https://img1.teletype.in/files/c0/4d/c04d590e-2a1f-4c3a-8c21-f5ad17e150f4.png" width="716" />
  </figure>
  <h3 id="perlin2with">perlin2With</h3>
  <p id="QA2G"><code>perlin2With</code> - это то же самое, что и <code>perlinWith</code>, за исключением того, что он позволяет предоставить две функции для 2D шума:</p>
  <figure id="czfK" class="m_original">
    <img src="https://img3.teletype.in/files/e7/3c/e73ca212-0a56-4184-9a60-8665ac2ca292.png" width="717" />
  </figure>
  <h2 id="the-sometimes-family">&quot;sometimes&quot;</h2>
  <h3 id="sometimes">sometimes</h3>
  <figure id="YrNU" class="m_original">
    <img src="https://img1.teletype.in/files/09/c3/09c3e716-c48c-43d4-be51-7872c172b7ec.png" width="715" />
  </figure>
  <p id="mxoC"><code>sometimes</code> это функция, которая применяет другую функцию к паттерну примерно в 50% случаев случайным образом. для неё требуются два входных параметра: функция, которую нужно применить, и паттерн, к которому вы её применяете.</p>
  <p id="Y5ce">например, чтобы исказить половину событий в шаблоне:</p>
  <figure id="Nexc" class="m_original">
    <img src="https://img4.teletype.in/files/b9/65/b965cc60-ce3f-4488-81ae-206645522efb.png" width="716" />
  </figure>
  <p id="pI2A"><code>sometimes</code> имеет несколько вариантов, которые применяют функцию с разной вероятностью:</p>
  <figure id="LC3l" class="m_original">
    <img src="https://img2.teletype.in/files/90/a3/90a318a3-baa8-483e-ac4f-8b98fa427e0b.png" width="227" />
  </figure>
  <h3 id="sometimesby">sometimesBy</h3>
  <p id="LfSm">если вы хотите уточнить, вы можете использовать <code>sometimesBy</code> и число, например:</p>
  <figure id="xW3P" class="m_original">
    <img src="https://img1.teletype.in/files/4f/66/4f66e39f-ca10-4150-a0ce-be2aec9a7a42.png" width="716" />
  </figure>
  <p id="CWbI">применять контроль скорости в среднем 93 раза из 100.</p>
  <h3 id="somecycles">someCycles</h3>
  <p id="x30a">функция <code>someCycles</code> похожа на <code>sometimes</code>, но вместо применения заданной функции к случайным событиям она применяет её к случайным циклам. например, следующий код либо исказит все события в цикле, либо ни одно из них:</p>
  <figure id="5Urg" class="m_original">
    <img src="https://img1.teletype.in/files/47/6b/476b872e-d48f-4bad-91eb-2c8079c7ecad.png" width="713" />
  </figure>
  <h3 id="somecyclesby">someCyclesBy</h3>
  <p id="uMA3">как и в случае с <code>sometimesBy</code>, для конкретики можно использовать <code>someCyclesBy</code> и число. например:</p>
  <figure id="kVYI" class="m_original">
    <img src="https://img2.teletype.in/files/1a/a2/1aa2ffa2-9de5-4d06-8499-cdbfca9c0322.png" width="715" />
  </figure>
  <p id="gnMb">будет применять контроль скорости в среднем в <code>93</code> циклах из 100.</p>
  <h2 id="DpvC">Выбор случайным образом</h2>
  <h3 id="choose">choose</h3>
  <figure id="Ze1Y" class="m_original">
    <img src="https://img2.teletype.in/files/d5/0b/d50bef55-7d85-4e41-a288-daebbb001767.png" width="716" />
  </figure>
  <p id="vFYO">функция <code>choose</code> выдает поток случайно выбранных значений из заданного списка в виде непрерывного паттерна:</p>
  <figure id="kbOL" class="m_original">
    <img src="https://img4.teletype.in/files/f1/80/f18013db-922a-49f0-98f3-8f7337166017.png" width="714" />
  </figure>
  <p id="asno">как и в случае со всеми непрерывными паттернами, следует позаботиться о том, чтобы придать им структуру; в этом случае <code>choose</code> дает бесконечно подробный поток случайных выборов.</p>
  <h3 id="chooseby">chooseby</h3>
  <figure id="FNeh" class="m_original">
    <img src="https://img1.teletype.in/files/87/74/8774bb45-a8ee-4c5c-8b68-de785e7166b6.png" width="714" />
  </figure>
  <p id="3eFx">функция <code>chooseBy</code> похожа на <code>choose</code>, но вместо случайного выбора элементов списка она использует заданный паттерн для выбора элементов.</p>
  <figure id="vgcw" class="m_original">
    <img src="https://img4.teletype.in/files/f2/a9/f2a92f38-56b7-48c8-a3ca-39e74ec567e8.png" width="715" />
  </figure>
  <p id="kHy6">= паттерн <code>&quot;a b c&quot;</code>.</p>
  <h3 id="wchoose">wchoose</h3>
  <figure id="FXE7" class="m_original">
    <img src="https://img4.teletype.in/files/7c/ff/7cff080d-f5fb-4598-b461-93d1482f37dd.png" width="715" />
  </figure>
  <p id="ec6H"><code>wchoose</code> чем-то похожа на функцию <code>choose</code>, но позволяет «взвешивать» варианты, чтобы вероятность выбора некоторых вариантов была выше, чем вероятность выбора других. следующий пример похож на предыдущий, но вероятность выбора числа <code>2</code> в два раза выше, чем у чисел <code>0</code> или <code>3</code>.</p>
  <figure id="lqVo" class="m_original">
    <img src="https://img4.teletype.in/files/33/64/33642d1e-5ff3-4629-b546-f3bf50b7d107.png" width="718" />
  </figure>
  <h3 id="wchooseby">wchooseby</h3>
  <figure id="U2hY" class="m_original">
    <img src="https://img3.teletype.in/files/e1/c8/e1c80b00-f340-444a-9c52-52f5f0c79497.png" width="715" />
  </figure>
  <p id="orzt"><code>wchooseBy</code> = <code>wchoose</code>, но вместо случайного выбора элементов списка она использует заданный шаблон для выбора элементов.</p>
  <h3 id="cyclechoose">cycleChoose</h3>
  <figure id="rmWt" class="m_original">
    <img src="https://img2.teletype.in/files/98/e7/98e7aa82-f0ba-430c-ab79-5ca6acddf999.png" width="716" />
  </figure>
  <p id="5ktA">= <code>choose</code>, но выбор производится только один раз за цикл:</p>
  <figure id="nhrW" class="m_original">
    <img src="https://img1.teletype.in/files/82/2e/822e9b7d-c836-401c-a4ff-3deb5cc4849e.png" width="717" />
  </figure>
  <h3 id="markovpat">markovPat</h3>
  <figure id="h9xO" class="m_original">
    <img src="https://img3.teletype.in/files/a2/df/a2df026a-8048-45b4-8268-89a2520ad6a7.png" width="717" />
  </figure>
  <p id="QaKE"><code>markovPat</code> - это способ генерации (псевдо) случайных паттернов на основе Markov chains. Markov chain представляет собой не предопределённый паттерн, а предопределённую последовательность вероятностей. эти вероятности управляют переходами от одного шага к другому. что даёт прямой контроль над случайностью генерируемого шаблона. <code>markovPat</code> принимает три аргумента: длину последовательности, индекс начального шага и матрицу вероятностей.</p>
  <p id="GoR0">сначала определите значения для каждого состояния. например, если вы хотите составить последовательность из трёх звуков: <code>bd</code>, <code>sd</code> и <code>clap</code>:</p>
  <figure id="mxJL" class="m_original">
    <img src="https://img3.teletype.in/files/61/4b/614ba38a-e73d-4e47-9d86-b6ac638d3b13.png" width="719" />
  </figure>
  <p id="cDYD">при таком сопоставлении <code>«bd»</code> имеет индекс 0, <code>«sd»</code> - индекс 1, а <code>«clap»</code> - индекс <code>2</code>. Обратите внимание, что вы можете включать паузы, добавляя <code>«~»</code> в качестве одного из звуков.</p>
  <p id="V3VY">затем определите вероятность того, что каждый шаг перейдёт в каждый другой шаг. обратите внимание: значения будут нормализованы, поэтому их сумма не обязательно должна равняться 1.</p>
  <figure id="HO7o" class="m_original">
    <img src="https://img3.teletype.in/files/e3/15/e315489f-2c1a-4a1f-b3c3-a789f32b2744.png" width="367" />
  </figure>
  <p id="wTGa">в приведенном выше примере вероятность повторения <code>bd</code> составит 10%, вероятность перехода в <code>sd</code> - 70%, а вероятность перехода в <code>clap</code> - 20%. если добавить это к шаблону с длиной последовательности 16 и начальным индексом 0:</p>
  <figure id="s3aD" class="m_original">
    <img src="https://img4.teletype.in/files/75/81/75816e29-f1e8-4a2e-a1ef-7a6f1b6a5c23.png" width="718" />
  </figure>
  <p id="xl6b">как и другие источники случайности, ритмическую структуру можно добавлять с помощью таких функций, как <code>mask</code>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@lckstar/w99e9cyeGqj</guid><link>https://teletype.in/@lckstar/w99e9cyeGqj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar</link><comments>https://teletype.in/@lckstar/w99e9cyeGqj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=lckstar#comments</comments><dc:creator>lckstar</dc:creator><title>контроль звука</title><pubDate>Wed, 03 Sep 2025 19:52:02 GMT</pubDate><description><![CDATA[<img src="https://img2.teletype.in/files/13/9f/139f414b-19a3-4e47-abdc-c6ff22cd8ed6.png"></img>тут все, что позволяют направлять эффект через призму. на практике это означает, что вы можете задавать паттерны эффектов звука во время его воспроизведения.]]></description><content:encoded><![CDATA[
  <p id="gGmW">тут все, что позволяют направлять эффект через призму. на практике это означает, что вы можете задавать паттерны эффектов звука во время его воспроизведения.</p>
  <h2 id="nWhJ">зачем это нужно</h2>
  <p id="A5i0">предположим, мы хотим изменить сэмпл <code>sax</code> во время его воспроизведения, применяя различные значения эффекта <code>squiz</code>:</p>
  <figure id="aZ0y" class="m_original">
    <img src="https://img2.teletype.in/files/13/9f/139f414b-19a3-4e47-abdc-c6ff22cd8ed6.png" width="826" />
  </figure>
  <p id="RgmV">это не сработает. поскольку структура определяется <code>sound &quot;sax&quot;</code>, за цикл происходит только одно событие, поэтому <code>squiz</code> всегда будет использовать первое значение (<code>1</code>).</p>
  <h3 id="bYtg">что можно попробовать:</h3>
  <figure id="YV0J" class="m_original">
    <img src="https://img3.teletype.in/files/ea/b3/eab395cf-1f52-43aa-8ed5-091d7d411ec3.png" width="830" />
  </figure>
  <p id="yrbo">теперь структура взята из правой части, поэтому на цикл будет приходиться <code>4</code> события, каждое с разным значением <code>squiz</code>. но сэмпл будет срабатывать <code>4</code> раза с самого начала. мы хотим изменять <code>squiz</code> во время воспроизведения сэмпла, а не перезапускать его.</p>
  <p id="GT39">ещё идея юзать <code>chop</code>:</p>
  <figure id="84ss" class="m_original">
    <img src="https://img1.teletype.in/files/c8/fc/c8fca8b7-55cc-4c2c-9498-0acaef4b8fe0.png" width="828" />
  </figure>
  <p id="mpcR">это разрезает сэмпл <code>sax</code> на четыре части и применяет к каждой из них одно из значений <code>squiz</code>. тк сэмпл длится не ровно один цикл, в точках разделения наблюдается заметное изменение звука, и он не плавный.</p>
  <h2 id="ofrK">использование контроля звука для управления </h2>
  <figure id="vcVA" class="m_original">
    <img src="https://img4.teletype.in/files/bc/50/bc505ec8-3215-455a-ac23-797c55efa442.png" width="826" />
  </figure>
  <p id="8ezg">теперь мы изменяем величину <code>squiz</code> во время воспроизведения сэмпла.</p>
  <p id="gLdE"><code>squizbus</code> определяется следующим образом:</p>
  <figure id="akZ9" class="m_original">
    <img src="https://img1.teletype.in/files/86/0b/860ba2d5-f54c-4d4f-b8f7-c4c7a721f2c3.png" width="826" />
  </figure>
  <p id="OKB0">Ппервый параметр - это идентификатор управления. он должен быть уникальным, поэтому, если вы управляете двумя эффектами по отдельности, вам потребуется использовать разные номера:</p>
  <figure id="Zqq3" class="m_original">
    <img src="https://img2.teletype.in/files/53/69/5369bff7-0438-4840-9a03-aac044e7b2c6.png" width="827" />
  </figure>
  <p id="bo26">эта идентификация должна быть уникальной для всех паттернов, если только вы не хотите, чтобы два подшаблона управлялись из одного источника. в этом случае, вероятно, один шаблон управления будет, например, <code>lpfbus 2 &quot;1000 5000&quot;</code>, а другие будут только получать данные, например, <code>hpfrecv 2</code>:</p>
  <figure id="qvCi" class="m_original">
    <img src="https://img4.teletype.in/files/70/58/70586a04-04b5-432e-a903-8c5a4786a5f4.png" width="825" />
  </figure>
  <p id="VYoT">здесь вы можете услышать, как фильтры нижних и верхних частот изменяются по мере воспроизведения сэмпла, но оба используют одни и те же значения.</p>
  <p id="o60b"><code>hpfrecv</code> определяется следующим образом:</p>
  <figure id="OCTs" class="m_original">
    <img src="https://img2.teletype.in/files/14/5d/145d7dc5-0ce5-4c27-b427-f59705679d3b.png" width="828" />
  </figure>
  <p id="STdY">вы даже можете создать шаблон этой идентификации:</p>
  <figure id="f9xG" class="m_original">
    <img src="https://img4.teletype.in/files/fd/db/fddb6dcd-9695-41a2-87c8-115f5b95f238.png" width="826" />
  </figure>
  <p id="GAwV">большинство эффектов имеют функцию <code>bus</code> и <code>recv</code>, которые можно использовать таким образом.</p>
  <p id="A65s">возможность управления также можно использовать для создания LFO на эффектах:</p>
  <figure id="U0QX" class="m_original">
    <img src="https://img4.teletype.in/files/f8/02/f80267c8-c4e4-428c-973c-8f386f390aa8.png" width="827" />
  </figure>
  <p id="a3Dz">в этих примерах мы используем <code>segment</code> для выборки значения <code>sine</code> и <code>smooth</code>, поскольку это непрерывные шаблоны и они не будут работать напрямую.</p>
  <p id="ZlSD">кроме того, вы можете подготовить паттерны для приема управляющих сигналов, а затем отправлять их из других паттернов:</p>
  <figure id="rRM5" class="m_original">
    <img src="https://img2.teletype.in/files/d4/b2/d4b29a24-784f-4225-b752-1f41c26ed3ea.png" width="827" />
  </figure>
  <h2 id="YLMB">Ограничения</h2>
  <p id="hddt">не все параметры управления можно контролировать через управление. вот полный список параметров, управление которыми невозможно:</p>
  <figure id="Poic" class="m_original">
    <img src="https://img2.teletype.in/files/5b/c5/5bc5d1e3-22aa-41f2-813b-166602272aee.png" width="830" />
  </figure>
  <p id="ECO6">в этом списке есть <code>note</code>, <code>n</code>, <code>gain</code> и <code>accelage</code>, а вот <code>amp</code> - нет.</p>
  <p id="51Al">если вы попытаетесь использовать управление по одному из этих параметров, вы получите такое сообщение об ошибке:</p>
  <figure id="Z8K5" class="m_original">
    <img src="https://img3.teletype.in/files/ab/da/abda9fab-3e9f-44bf-a095-ea8805c262f4.png" width="825" />
  </figure>
  <p id="e1kS"><code>panbus</code> <strong>будет работать</strong>, но в диапазоне от -1 до 1 вместо 0 до 1:</p>
  <figure id="SNrU" class="m_original">
    <img src="https://img2.teletype.in/files/10/3c/103ca19c-86a2-47c0-8145-6edc024965cc.png" width="828" />
  </figure>
  <h2 id="P7La">контроль управления и MIDI</h2>
  <p id="FuIa">иожно сопоставить номера MIDI CC с контролем управления и использовать внешний MIDI-контроллер для изменения параметров в реальном времени.</p>
  <figure id="y3PF" class="m_original">
    <img src="https://img1.teletype.in/files/00/0b/000b7169-e741-457d-b68e-938c8050cf9f.png" width="828" />
  </figure>
  <p id="yUf0">в приведенном выше примере номер CC <code>21</code> сопоставлен с <code>djf</code>. <code>cF</code> указывает, что значение MIDI CC следует обрабатывать как число с плавающей точкой, а значение <code>0–127</code> из сигнала MIDI автоматически преобразуется в диапазон <code>0–1</code>. Начальным значением по умолчанию является <code>0,5</code>.</p>
  <figure id="O19Z" class="m_original">
    <img src="https://img3.teletype.in/files/25/51/25517ad5-64bc-47a4-afd8-683c2e1d8be6.png" width="829" />
  </figure>
  <p id="a9CC">тут <code>roombus 3 («^23»)</code> сопоставляет номер CC <code>23</code> с параметром <code>room</code>, не указывая никакого начального значения.</p>
  <p id="FEqq">в некоторых случаях вам потребуется адаптировать диапазон значений CC по умолчанию:</p>
  <figure id="gonf" class="m_original">
    <img src="https://img4.teletype.in/files/77/a7/77a797bb-b24a-4acd-bd32-b01d6bc4c5a8.png" width="830" />
  </figure>
  <p id="eFnb">значение параметра <code>squiz</code> не имеет диапазона от 0 до 1. для этого нам нужны значения, большие или равные <code>1</code>.</p>
  <p id="RHjW">в последнем примере диапазон <code>0-1</code> изменяется, и получается диапазон от <code>1</code> до <code>8</code>, что является подходящими значениями для <code>squiz</code>.</p>

]]></content:encoded></item></channel></rss>