Sonic Pi - en to ru translation catalogue (1276 entries)

en: 1 Welcome to Sonic Pi
ru: 1 Добро пожаловать в Sonic Pi

en: Welcome friend :-)
ru: Добро пожаловать, друг :-)

en: Welcome to Sonic Pi. Hopefully you're as excited to get started making your own sounds as I am to show you. It's going to be a really *fun* ride where you'll learn all about music, synthesis, programming, composition, performance and more.
ru: Добро пожаловать в мир Sonic Pi. Надеюсь, что тебе настолько же не терпится начать создавать безумные звуки, насколько мне не терпится показать, как это делается. Это будет веселое путешествие, в котором ты узнаешь много нового о музыке, синтезе, программировании, композиции и много другом.

en: But wait, how rude of me! Let me introduce myself - I'm [Sam Aaron](https://twitter.com/samaaron) - the chap that created Sonic Pi. You can find me at [@samaaron](http://twitter.com/samaaron) on Twitter and I'd be more than happy to say hello to you. You might also be interested in finding out more about my [Live Coding Performances](https://youtube.com/samaaron) where I code with Sonic Pi live in front of audiences.
ru: Постойте, как же я мог быть таким невоспитанным! Позвольте мне представиться - я [Sam Aaron](http://twitter.com/samaaron) - тот самый парень, который создал Sonic Pi. Меня можно найти по имени [@samaaron](http://twitter.com/samaaron) в Твиттере, и я был бы очень счастлив обменяться там с вами приветствиями. Вам, возможно, также было бы интересно узнать больше о моих [лайв-кодинг выступлениях](https://youtube.com/samaaron), где я сам пишу на Sonic Pi перед зрителями.

en: If you have any thoughts, or ideas for improving Sonic Pi - please pass them on - feedback is so helpful. You never know, your idea might be the next big feature!
ru: Если у вас появятся какие-либо мысли или идеи о том, как улучшить Sonic Pi, то, пожалуйста, передайте мне их. Обратная связь - это очень полезно. Никогда не знаешь, вдруг ваша идея может вырасти в нечто действительно большое!

en: This tutorial is divided up into sections grouped by category. Whilst I've written it to have an easy learning progression from start to finish, feel very free just to dip in and out of sections as you see fit. If you feel that there's something missing, do let me know and I'll consider it for a future version.
ru: Этот учебник разделён на главы, сгруппированные по категориям. Несмотря на то, что я написал его от простого к сложному, можно свободно прыгать туда-сюда как вам удобно. Если вам кажется, что здесь чего-то не хватает, обязательно дайте мне об этом знать, и я посмотрю, что можно сделать для следующей версии.

en: Finally, watching others live code is a really great way to learn. I regularly stream live on [https://youtube.com/samaaron](http://youtube.com/samaaron) so please do drop by, say hi and ask me lots of questions :-)
ru: Наконец, наблюдать за чужим кодингом в режиме реального времени это отличный способ учиться. Я регулярно вещаю в прямом эфире на [http://youtube.com/samaaron](http://youtube.com/samaaron), так что не забывайте появляться там, чтобы поприветствовать всех и задать все свои многочисленные вопросы :-)

en: OK, let's get started...
ru: Что ж, давайте начнём…

en: 1.1 Live Coding
ru: 1.1 Лайв-кодинг

en: Live Coding
ru: Лайв-кодинг

en: One of the most exciting aspects of Sonic Pi is that it enables you to write and *modify code live* to make music, just like you might perform live with a guitar. This means that given some practice you can take Sonic Pi on stage and gig with it.
ru: Одним из самых захватывающих аспектов Sonic Pi является то, что для создания музыки, вы можете писать и *изменять код здесь и сейчас*. Это похоже на настоящее выступление с гитарой. Значит, при достаточной тренировке, вы сможете взять Sonic Pi с собой на сцену и выступать с ней.

en: Free your mind
ru: Расширьте своё сознание

en: Before we get into the real details of how Sonic Pi works in the rest of this tutorial, I'd like to give you an experience of what it's like to live code. Don't worry if you don't understand much (or any) of this. Just try to hold onto your seats and enjoy...
ru: Прежде, чем мы перейдем к деталям того, как Sonic Pi работает, я бы хотел поделиться с вами личным опытом того, что значит "лайв-кодинг". Не переживайте, если вы пока чего-то из этого (или ничего) не понимаете. Просто держитесь крепче за стул и наслаждайтесь…

en: A live loop
ru: Живой цикл

en: Let's get started, copy the following code into an empty buffer:
ru: Давайте начнем, скопируйте следующий код в пустой буфер:

en: Now, press the `Run` button and you'll hear a nice fast bass drum beating away. If at any time you wish to stop the sound just hit the `Stop` button. Although don't hit it just yet... Instead, follow these steps:
ru: Теперь нажмите кнопку `Выполнить`, и вы услышите приятный быстрый барабанный бой. В любой момент нажмите кнопку `Остановить`, чтобы остановить звук. Но не нажимайте её пока что… Вместо этого сделайте вот что:

en: Make sure the bass drum sound is still running
ru: Убедитесь, что барабаны по-прежнему звучат

en: Change the `sleep` value from `0.5` to something higher like `1`.
ru: Измените значение `sleep` с `0.5` на значение побольше, например `1`.

en: Press the `Run` button again
ru: Еще раз нажмите кнопку `Выполнить`

en: Notice how the drum speed has changed.
ru: Можно заметить, что темп барабанов изменился.

en: Finally, *remember this moment*, this is the first time you've live coded with Sonic Pi and it's unlikely to be your last...
ru: И, наконец, *запомните этот момент* - это первый, и, наверняка, не последний ваш лайв-кодинг на Sonic Pi…

en: Ok, that was simple enough. Let's add something else into the mix. Above `sample :bd_haus` add the line `sample :ambi_choir, rate: 0.3`. Your code should look like this:
ru: Ладно, это было довольно просто. Давайте добавим что-нибудь ещё в наш микс. Сверху от `sample :bd_haus` добавьте строку `sample :ambi_choir, rate: 0.3`. Ваш код должен выглядеть так:

en: Now, play around. Change the rates - what happens when you use high values, or small values or negative values? See what happens when you change the `rate:` value for the `:ambi_choir` sample just slightly (say to `0.29`). What happens if you choose a really small `sleep` value? See if you can make it go so fast your computer will stop with an error because it can't keep up (if that happens, just choose a bigger `sleep` time and hit `Run` again).
ru: Время поиграться. Поменяйте частоту - что происходит, когда вы используете высокие, малые, или отрицательные значения? Посмотрите, что произойдет, когда вы поменяете значение `rate:` для сэмпла `:ambi_choir` на незначительную величину (например, до `0.29`). Что произойдет, если вы выберите очень маленькое значение для `sleep`? Проверьте, получится ли заставить его играть так быстро, что все упадс ошибкой из-за того, что он не справится с этим (если это всё же произошло, то просто выберите значение побольше для `sleep` и снова нажмите `Выполнить`).

en: Try commenting one of the `sample` lines out by adding a `#` to the beginning:
ru: Попробуйте закомментировать одну из строк `sample`. Для этого добавьте `#` в ее начало:

en: Notice how it tells the computer to ignore it, so we don't hear it. This is called a comment. In Sonic Pi we can use comments to remove and add things into the mix.
ru: Обратите внимание, компьютер проигнорировал её, поэтому мы её не слышим. Это называется комментарием. В Sonic Pi мы можем использовать комментарии, чтобы убирать или добавлять штуки в микс.

en: Finally, let me leave you something fun to play with. Take the code below, and copy it into a spare buffer. Now, don't try to understand it too much other than see that there are two loops - so two things going round at the same time. Now, do what you do best - experiment and play around. Here are some suggestions:
ru: Напоследок, позвольте мне оставить вам кое-что забавное, с чем можно поиграть. Возьмите код, приведенный ниже, и скопируйте его в свободный буфер. Не пытайтесь пока полностью разобраться в нем. Просто обратите внимание, что в нём два цикла - то есть две вещи играют по кругу одновременно. Теперь ваш черёд делать то, что получается у вас лучше всего - экспериментировать и развлекаться. Вот пара советов:

en: Try changing the blue `rate:` values to hear the sample sound change.
ru: Попробуйте изменить синее значение `rate:`, чтобы услышать, как изменится звук.

en: Try changing the `sleep` times and hear that both loops can spin round at different rates.
ru: Попробуйте изменить время для `sleep` и вы услышите, как оба цикла повторяются по кругу с разными темпами.

en: Try uncommenting the sample line (remove the `#`) and enjoy the sound of the guitar played backwards.
ru: Раскомментируйте строку примера (удалите знак `#`) и наслаждайтесь звуками гитары на заднем плане.

en: Try changing any of the blue `mix:` values to numbers between `0` (not in the mix) and `1` (fully in the mix).
ru: Попробуйте поменять синее значение любого из `mix:` на число в промежутке от `0` (что соответствует исключению из общего микса) до `1` (полностью сочетается).

en: Remember to press `Run` and you'll hear the change next time the loop goes round. If you end up in a pickle, don't worry - hit `Stop`, delete the code in the buffer and paste a fresh copy in and you're ready to jam again. Making mistakes is how you'll learn the quickest...
ru: Не забывайте нажимать `Выполнить`, и вы услышите изменения в следующий раз, когда петля начнётся заново. Не расстраивайтесь, если в конце музыка будет испорчена. Нажмите `Остановить`, удалите код из буфера, вставьте свежую копию, и вы снова готовы к творчеству. На ошибках научиться можно быстрее всего...

en: Now, keep playing and experimenting until your curiosity about how this all actually works kicks in and you start wondering what else you can do with this. You're now ready to read the rest of the tutorial.
ru: Продолжайте играть и экспериментировать до тех пор, пока вам не станет любопытно, как это на самом деле работает, и вы не начнёте думать, что ещё можно сделать. Тогда вы будете готовы к чтению оставшейся части этого учебника.

en: So what are you waiting for...
ru: Так чего же вы ждёте...

en: 1.2 Exploring the Interface
ru: 1.2 Обзор интерфейса

en: The Sonic Pi Interface
ru: Интерфейс Sonic Pi

en: Sonic Pi has a very simple interface for coding music. Let's spend a little time exploring it.
ru: У Sonic Pi очень простой интерфейс для кодирования музыки. Мы потратим совсем немного времени на его изучение.

en: ![Sonic Pi Interface](../../../etc/doc/images/tutorial/GUI.png)
ru: ![Интерфейс Sonic Pi](../../../etc/doc/images/tutorial/GUI.png)

en: *A* - Play Controls
ru: *A* - Управление воспроизведением

en: *B* - Editor Controls
ru: *B* - Управление редактором

en: *C* - Info and Help
ru: *C* - Помощь и справка

en: *D* - Code Editor
ru: *D* - Редактор кода

en: *E* - Prefs Panel
ru: *E* - Панель настроек

en: *F* - Log Viewer
ru: *F* - Просмотр сообщений

en: *G* - Help System
ru: *G* - Справочная система

en: *H* - Scope Viewer
ru: *F* - Просмотр сообщений

en: *I* - Cue Viewer
ru: *I* - Просмотрщик событий

en: A. Play Controls
ru: A. Управление Воспроизведением

en: These pink buttons are the main controls for starting and stopping sounds. There's the *Run* button for running the code in the editor, *Stop* for stopping all running code, *Save* for saving the code to an external file and *Record* to create a recording (a WAV file) of the sound playing.
ru: Эти розовые кнопки - главные элементы для запуска и остановки звука. Есть кнопка *Выполнить* для запуска кода из редактора, *Остановить* для остановки всего выполняющегося кода, *Сохранить* для сохранения кода в файл и *Запись* для создания записи того, что вы слышите в звуковой файл в формате WAV.

en: B. Editor Controls
ru: B. Управление Редактором

en: These orange buttons allow you to manipulate the code editor. The *Size +* and *Size -* buttons allow you to make the text bigger and smaller.
ru: Эти оранжевые кнопки используются для управления редактором кода. "Размер +" и "Размер -" позволяют увеличивать и уменьшать текст

en: C. Info and Help
ru: C. Помощь И Справка

en: These blue buttons give you access to information, help and preferences. The *Info* button will open up the information window which contains information about Sonic Pi itself - the core team, history, contributors and community. The *Help* button toggles the help system (*G*) and the *Prefs* button toggles the preferences window which allows you to control some basic system parameters.
ru: Данные синие кнопки дают вам доступ к информации и настройкам. Кнопка *Информация* открывает справочное окно, в котором находится информация о самом Sonic Pi - главной команде разработчиков, истории, помощниках и сообществе. Кнопка *Помощь* включает систему помощи (*F*), а кнопка *Параметры* включает панель настроек, где можно менять некоторые базовые параметры приложения.

en: D. Code Editor
ru: D. Редактор Кода

en: This is the area where you'll write your code and compose/perform music. It's a simple text editor where you can write code, delete it, cut and paste, etc. Think of it like a very basic version of Word or Google Docs. The editor will automatically colour words based on their meaning in the code. This may seem strange at first, but you'll soon find it very useful. For example, you'll know something is a number because it is blue.
ru: Это область, в которой вы будете писать свой код и сочинять/исполнять музыку. Это простой текстовый редактор, где можно написать код, удалить его, вырезать, вставить и так далее. Представьте, что это простая версия Word или Google Docs. Редактор автоматически раскрасит слова в зависимости от их значения в коде. Поначалу это может казаться странным, но скоро вы увидите, насколько это помогает. К примеру, глядя на что-то синее ты будешь знать, что это число.

en: E. Prefs Panel
ru: E. Панель Настроек

en: Sonic Pi supports a number of tweakable preferences which can be accessed by toggling the *prefs* button in the Info and Help button set. This will toggle the visibility of the Prefs Panel which includes a number of options to be changed. Examples are forcing mono mode, inverting stereo, toggling log output verbosity and also a volume slider and audio selector on the Raspberry Pi.
ru: В Sonic Pi есть множество настраиваемых параметров. Доступ к ним можно получить, нажав кнопку *Параметры* в наборе кнопок "Помощь и справка". Она переключит видимость панели настроек, в которой представлено множество вариантов, доступных для изменения. Примерами являются режим моно, инвертированное стерео, включение вывода детальных сообщений, ползунок громкости и выбор аудиовыхода Raspberry Pi.

en: F. Log Viewer
ru: F. Просмотр Сообщений

en: When you run your code, information about what the program is doing will be displayed in the log viewer. By default, you'll see a message for every sound you create with the exact time the sound was triggered. This is very useful for debugging your code and understanding what your code is doing.
ru: Когда твой код выполняется, информация о том, что делает программа, будет выводиться в лог сообщений. По умолчанию, ты будешь видеть новое сообщение для каждого воспроизводимого звука с точным указанием времени, когда он начался. Это очень полезно для отладки кода и понимания того, что он делает.

en: G. Help System
ru: G. Справочная Система

en: One of the most important parts of the Sonic Pi interface is the help system which appears at the bottom of the window. This can be toggled on and off by clicking on the blue *Help* button. The help system contains help and information about all aspects of Sonic Pi including this tutorial, a list of available synths, samples, examples, FX and a full list of all the functions Sonic Pi provides for coding music.
ru: Наконец, одна из самых важных частей интерфейса Sonic Pi - это справочная система, которую можно увидеть в нижней части окна приложения. Её можно выводить и прятать, нажимая синюю кнопку *Помощь*. В справочную систему входит помощь и информация обо все аспектах Sonic Pi, включая этот учебник, список доступных синтезаторов, сэмплов, эффектов, примеры и полный перечень всех функций Sonic Pi для кодирования музыки.

en: H. Scope Viewer
ru: H. Область видимости

en: The scope viewer allows you to see the sound you're hearing. You can easily see that the saw wave looks like a saw and that the basic beep is a curvey sine wave. You can also see the difference between loud and quiet sounds by the size of the lines. There are 3 scopes to play with - the default is a combined scope for the left and right channels, there is a stereo scope which draws a separate scope for each channel. Finally there is a Lissajous curve scope which will show the phase relationship between the left and right channels and allows you to draw pretty pictures with sound (https://en.wikipedia.org/wiki/Lissajous_curve).
ru: В области видимости можно наблюдать за воспроизводимым звуком. Вы с лёгкостью заметите, что пилообразная волна действительно напоминает пилу, а простейшие сигналы выглядят как синусоидальные волны. Вы также можете увидеть разницу между громкими и тихими звуками, глядя на размер выводимых линий. Существует три области видимости, с которыми можно повозиться - стандартная (комбинация левого и правого каналов), стерео (каждый канал обособлен) и, наконец, область видимости фигур Лиссажу, которая показывает отношения фаз левого и правого каналов, а также позволяет создавать красивые изображения при помощи звука. [Фигуры Лиссажу](https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%B3%D1%83%D1%80%D1%8B_%D0%9B%D0%B8%D1%81%D1%81%D0%B0%D0%B6%D1%83).

en: I. Cue Viewer
ru: I. Просмотр сигналов

en: All internal and external events (called cues in Sonic Pi) are automatically logged in the Cue Viewer. For example, if you have a MIDI controller connected and press one of its buttons, you'll see a new cue event in the Cue Viewer telling you the name of the controller and which button you pressed. Once you've mastered the basics of making and producing sounds, you'll start to want to cue sounds or whole sections of sounds based on events such as these. A cue event is just an indication that something happened. For example, every time a live loop spins round, it sends a cue event out which is logged in the Cue Viewer. Also, external events such as MIDI messages from connected MIDI equipment and OSC messages from other programs or computers are also displayed in the Cue Viewer. It is also possible to directly generate cue events using the `cue` function. Anything that appears in the Cue Viewer can be used to trigger something happening. This is covered in more detail in Sections 10 to 12 of this tutorial.
ru: Все внутренние и внешние события (в Sonic Pi они называются cues) автоматически регистрируются в Cue Viewer. Например, если вы подключили MIDI-контроллер и нажали одну из его кнопок, в Cue Viewer появится новое событие cue, сообщающее вам название контроллера и то, какую кнопку вы нажали. Когда вы освоите основы создания и воспроизведения звуков, вам захочется создавать звуки или целые секции звуков на основе таких событий, как эти. Событие подсказки – это просто указание на то, что что-то произошло. Например, каждый раз, когда live_loop совершает цикл, оно посылает событие cue, которое регистрируется в Cue Viewer. Кроме того, внешние события, такие как MIDI-сообщения от подключенного MIDI-оборудования и OSC-сообщения от других программ или компьютеров, также отображаются в Cue Viewer. Также можно напрямую генерировать события cue с помощью функции `cue`. Всё, что появляется в Cue Viewer, может быть использовано для запуска какого-либо события. Более подробно об этом рассказывается в разделах 10-12 данного руководства.

en: 1.3 Learning through Play
ru: 1.3 Обучение через игру

en: Learning through Play
ru: Обучение через игру

en: Sonic Pi encourages you to learn about both computing and music through play and experimentation. The most important thing is that you're having fun, and before you know it you'll have accidentally learned how to code, compose and perform.
ru: Sonic Pi стремится воодушевить вас изучать компьютеры и музыку через игру и экспериментирование. Самое главное, чтобы вам было весело, и тогда, прежде, чем вы это поймёте, вы случайно научитесь кодировать, сочинять и исполнять.

en: There are no mistakes
ru: Ошибок не существует

en: Whilst we're on this subject, let me just give you one piece of advice I've learned over my years of live coding with music - *there are no mistakes, only opportunities*. This is something I've often heard in relation to jazz but it works equally well with live coding. No matter how experienced you are - from a complete beginner to a seasoned live coder, you'll run some code that has a completely unexpected outcome. It might sound insanely cool - in which case run with it. However, it might sound totally jarring and out of place. It doesn't matter that it happened - what matters is what you do next with it. Take the sound, manipulate it and morph it into something awesome. The crowd will go *wild*.
ru: Коль скоро мы об этом заговорили, позвольте дать вам один совет, который я усвоил за годы лайв-кодинга музыки - *ошибок нет, есть только возможности*. Часто мне приходилось слышать это про джаз, но для лайв-кодинга это так же справедливо. Неважно, насколько велик ваш опыт - от полного новичка до бывалого Алго-Рейвера - вы будете запускать код с совершенно неожиданным результатом. Он может звучать безумно круто, тогда вы можете гордиться им. Однако, он также может получиться совершенно невыносимым для слуха и быть не к месту. Не важно, что так произошло. Важно, что вы сделаете с этим потом. Возьмите звук, обработайте его и превратите в нечто ошеломляющее. Публика будет *неистовствовать*.

en: Start Simple
ru: Начните с простого

en: When you're learning, it's tempting to want to do amazing things *now*. However, just hold that thought and see it as a distant goal to reach *later*. For now, instead think of the *simplest* thing you could write which would be fun and rewarding that's a small step towards the amazing thing you have in your head. Once you have an idea about that simple step, then try and build it, play with it and then see what new ideas it gives you. Before long you'll be too busy having fun and making real progress.
ru: Когда вы только учитесь, очень хочется делать удивительные вещи уже *сейчас*. Но попридержите эту мысль и смотрите на нее, как на далекую цель, которую вы достигнете *позже*. Пока что, вместо этого думайте о самом *простом*, что вы можете написать, что было бы забавно и приносило бы некое удовлетворение. Каждый раз это будет небольшим шагом к тому поразительному, что есть в вашем воображении. Как только у вас появилась идея о простом шаге, попробуйте сделать его, играйте с тем, что получилось и разбирайтесь, какие новые идеи он дает вам. Вскоре у вас появится огромное количество способов повеселиться, а обучение пойдет в гору.

en: Just make sure to share your work with others!
ru: Но не забывайте делиться своими достижениями с другими!

en: 2 Synths
ru: 2 Синтез

en: Synths
ru: Синтез

en: OK, enough of the intros - let's get into some sound.
ru: Довольно вступлений. Пора экспериментировать со звуком.

en: In this section we'll cover the basics of triggering and manipulating synths. Synth is short for synthesiser which is a fancy word for something which creates sounds. Typically synths are quite complicated to use - especially analog synths such as Eurorack modules connected together by a mess of wires. However, Sonic Pi gives you much of that power in a very simple and approachable manner.
ru: В этой главе мы будем рассматривать основы запуска и управления синтами. Синт - это сокращение от синтезатор, что само по себе означает модное словечко для чего-то, что издает звук. Обычно, синты довольно сложны в использовании (особенно аналоговые, в которых много соединений проводами и модулей). Sonic Pi предоставляет такие же возможности, но очень простым и доступным способом.

en: Don't be fooled by the immediate simplicity of Sonic Pi's interface. You can get very deep into very sophisticated sound manipulation if that's your thing. Hold on to your hats...
ru: Не обманывайтесь кажущейся простотой интерфейса Sonic Pi. С ним, если захочется, можно добраться до самых потаенных глубин очень сложной манипуляции звуком. Итак, придержите свои шляпы...

en: 2.1 Your First Beeps
ru: 2.1 Ваш первый звук

en: Your First Beeps
ru: Ваши Первые Звуки

en: Take a look at the following code:
ru: Посмотрите на этот код:

en: This is where it all starts. Go ahead, copy and paste it into the code window at the top of the app (the big white space under the Run button). Now, press Run...
ru: Отсюда всё берет свое начало. Давайте, скопируйте и вставьте его в окно кода вверху приложения (большое белое пространство под кнопкой `Выполнить`). Затем, нажмите `Выполнить`...

en: Beep!
ru: Звук!

en: Intense. Press it again. And again. *And again...*
ru: Впечатляет. Нажмите заново. Снова. *И снова...*

en: Woah, fun! I'm sure you could keep doing that all day. But wait, before you lose yourself in an infinite stream of beeps, try changing the number:
ru: Ого, весело! Уверен, вы бы могли продолжать так весь день. Но подождите, перед тем, как вы растворитесь в бесконечном потоке звуков, попробуйте изменить число:

en: Can you hear the difference? Try a lower number:
ru: Слышите разницу? Попробуйте число поменьше:

en: So, lower numbers make lower pitched beeps and higher numbers make higher pitched beeps. Just like on a piano, the keys at the lower part of the piano (the left hand side) play lower notes and the keys on the higher part of the piano (the right hand side) play higher notes.
ru: Таким образом, меньшие числа соответствуют более низким издаваемым звукам, а большие - более высоким. Подобно тому, как работает пианино: клавиши, которые находятся в более низком регистре (по левую руку), играют более низкие ноты, а клавиши, которые находятся в более высоком регистре (по правую руку), играют более высокие ноты.

en: It turns out that the C of the 4th octave (C in English notation) is identified by the number 60. `play 60` therefore plays the C of the 4th octave. To play the next piano key to the right, you have to add 1 to 60 and then type `play 61`, which in this case is the black key of the C sharp. To play the D, the next key to the right, `play 62`.
ru: Получается, что ноте "До" 4-й октавы (C в английской нотации) соответствует число 60. `play 60`, собственно и воспроизведёт ноту "До" 4-й октавы. чтобы сыграть ноту, соответствующую следующей клавише на пианино, вам следует добавить 1 к 60 и ввести команду `play 61`, которая в данном случае будет обозначать соседний "До диез" (ему соответствует чёрная клавиша между "До" и "Ре"). Чтобы воспроизвести ноту "Ре", введите `play 62`.

en: *Don't worry* if this means nothing to you - it didn't to me when I first started. All that matters right now is that you know that *low numbers make lower beeps* and *high numbers make higher beeps*.
ru: *Не волнуйтесь*, если для вас это ничего не значит - у меня было то же самое, когда я только начинал. Сейчас важно то, что *меньшие числа дают более низкие звуки*, а *большие числа дают более высокие звуки*.

en: Chords
ru: Аккорды

en: Playing a note is quite fun, but playing many at the same time can be even better. Try it:
ru: Играть одну ноту весьма забавно, но играть несколько нот сразу ещё лучше. Попробуйте:

en: Jazzy! So, when you write multiple `play`s, they all play at the same time. Try it for yourself - which numbers sound good together? Which sound terrible? Experiment, explore and find out for yourself.
ru: Звучит джазово! Итак, когда вы пишете `play` много раз, все ноты играют в одно и то же время. Попробуйте самостоятельно - какие числа звучат вместе хорошо? Какие звучат ужасно? Экспериментируйте, исследуйте и вы выясните это сами.

en: Melody
ru: Мелодия

en: So, playing notes and chords is fun - but how about a melody? What if you wanted to play one note after another and not at the same time? Well, that's easy, you just need to `sleep` between the notes:
ru: Играть ноты и аккорды весело, а как насчет мелодий? Что, если вы хотите играть одну ноту за другой, а не все вместе? Что же, это легко. Просто нужно вставить `sleep` между ними:

en: How lovely, a little arpeggio. So what does the `1` mean in `sleep 1`? Well it means the *duration of the sleep*. It actually means sleep for one beat, but for now we can think about it as sleeping for 1 second. So, what if we wanted to make our arpeggio a little faster? Well, we need to use shorter sleep values. What about a half i.e. `0.5`:
ru: Как мило, маленькое арпеджио. Что же значит `1` в `sleep 1`? Ну, это означает *продолжительность паузы*. Вообще-то, это означает задержку на время одной доли такта, но, пока что будем считать, что это значит спать одну секунду. А вдруг мы захотим, чтобы наше арпеджио стало немного быстрее? Тогда надо указать значение для паузы покороче. Как насчет половины, то есть `0.5`:

en: Notice how it plays faster. Now, try for yourself, change the times - use different times and notes.
ru: Можно заметить: мелодия стала играть быстрее. Попробуйте сами поменять время и используйте разные продолжительности и ноты.

en: One thing to try is in-between notes such as `play 52.3` and `play 52.63`. There's absolutely no need to stick to standard whole notes. Play around and have fun.
ru: Интересно попробовать значения между нотами, например `play 52.3` или `play 52.63`. Совсем не нужно держаться стандартных целых чисел. Развлекайтесь и получайте удовольствие.

en: Traditional Note Names
ru: Обычные названия нот

en: For those of you that already know some musical notation (don't worry if you don't - you don't need it to have fun) you might want to write a melody using note names such as C and F# rather than numbers. Sonic Pi has you covered. You can do the following:
ru: Для тех, кто уже немного знаком с нотной грамотой (не волнуйтесь, если вы не знаете о чём речь - для веселья она вам не нужна), может быть интересно записать мелодию, используя названия нот, такие как "До" (C) и "Фа-диез" (F#), а не числа. Sonic Pi предусмотрел это. Можно делать так:

en: Remember to put the colon `:` in front of your note name so that it goes pink. Also, you can specify the octave by adding a number after the note name:
ru: Просто помните, что перед нотой должно стоять двоеточие `:`. Тогда она станет розовой. Ещё можно указывать октаву, добавляя её номер после названия ноты:

en: If you want to make a note sharp, add an `s` after the note name such as `play :Fs3` and if you want to make a note flat, add a `b` such as `play :Eb3`.
ru: Если хотите сделать ноту на полтона выше, поставьте `s` после её имени, то есть `play :Fs3`. А когда нужен бемоль, обозначьте это при помощи `b`, то есть `play :Eb3`.

en: There's also a handy shortcut for a rest (a musical way of saying not to play anything instead of a note) using `:r`, `:rest` or `nil`.
ru: Также есть удобное сокращение для перерыва (музыкальный способ сказать программе не играть ничего вместо ноты), используя `:r`, `:rest` или `nil`.

en: Now go *wild* and have fun making your own tunes.
ru: А теперь, дайте себе волю, и как следует *повеселитесь*, придумывая собственные мелодии.

en: 2.2 Synth Options
ru: 2.2 Свойства синтезаторов

en: Synth Options: Amp and Pan
ru: Параметры: Amp и Pan

en: As well as allowing you to control which note to play or which sample to trigger, Sonic Pi provides a whole range of options to craft and control the sounds. We'll be covering many of these in this tutorial and there's extensive documentation for each in the help system. However, for now we'll introduce two of the most useful: *amplitude* and *pan*. First, let's look at what options actually are.
ru: В дополнение к возможности выбрать какую ноту играть или какой сэмпл включать, Sonic Pi предоставляет целый арсенал настроек для создания и управления звуком. Многие из этих настроек описаны в этом учебнике, и есть обширная документация по каждой из них в справочной системе. Пока что, мы познакомимся всего лишь с двумя самыми полезными: амплитуда и панорамирование. Вначале посмотрим, что же такое эти настройки на самом деле.

en: Options
ru: Настройки

en: Sonic Pi supports the notion of options (or opts for short) for its synths. Opts are controls you pass to `play` which modify and control aspects of the sound you hear. Each synth has its own set of opts for finely tuning its sound. However, there are common sets of opts shared by many sounds such as `amp:` and envelope opts (covered in another section).
ru: Sonic Pi поддерживает регулировки для своих синтезаторов. Они представляют собой элементы управления, для управления которыми вы передаёте атрибуты функции `play`. Эти атрибуты изменяют и контролируют выводимый звук. У каждого синтезатора свой собственный набор регулировок для тонкой настройки звука. Но, есть общие наборы регулировок, одинаковые для разных синтезаторов, такие как `amp:`, `pan:` и параметры огибающей (обсуждается в другой главе).

en: Opts have two major parts, their name (the name of the control) and their value (the value you want to set the control at). For example, you might have an opt called `cheese:` and want to set it with a value of `1`.
ru: Каждая регулировка состоит из двух частей: название регулировки (элемента управления) и её значение (деление, на которое вы хотите установить ручку регулировки). Например, может быть настройка с названием `cheese:` и желаемым значением`1`.

en: Opts are passed to calls to `play` by using a comma `,` and then the name of the opt such as `amp:` (don't forget the colon `:`) and then a space and the value of the opt. For example:
ru: Настройки передаются вызовам `play` после запятой `,` далее следует название, например `amp:` (не забудьте двоеточие `:`), а потом ее значение. Например:

en: (Note that `cheese:` isn't a valid opt, we're just using it as an example).
ru: (Замечание: `cheese:` - не настоящая настройка, мы просто используем ее для примера).

en: You can pass multiple opts by separating them with a comma:
ru: Можно передавать много настроек, разделяя их запятыми:

en: The order of the opts doesn't matter, so the following is identical:
ru: Порядок регулировок не важен, так что следующий пример ничем не отличается:

en: Opts that aren't recognised by the synth are just ignored (like `cheese` and `beans` which are clearly ridiculous opt names!)
ru: Регуляторы, о которых синтезатор не знает, попросту пропускаются (такие как `cheese` и `beans` - очевидно нелепые названия для настроек!)

en: If you accidentally use the same opt twice with different values, the last one wins. For example, `beans:` here will have the value 2 rather than 0.5:
ru: Если вы случайно укажите одну и ту же настройку с разными значениями, то победит последнее. Например, значением `beans:` будет `2`, а не `0.5`:

en: Many things in Sonic Pi accept opts, so just spend a little time learning how to use them and you'll be set! Let's play with our first opt: `amp:`.
ru: Множество вещей в Sonic Pi гибко регулируемо, потратьте немного времени на изучение того, как использовать их, и будете "настроены"! Давайте позабавимся с нашим первым регулятором - `amp:`.

en: Amplitude
ru: Амплитуда

en: Amplitude is a computer representation of the loudness of a sound. A *high amplitude produces a loud sound* and a *low amplitude produces a quiet sound*. Just as Sonic Pi uses numbers to represent time and notes, it uses numbers to represent amplitude. An amplitude of 0 is silent (you'll hear nothing) whereas an amplitude of 1 is normal volume. You can even crank up the amplitude higher to 2, 10, 100. However, you should note that when the overall amplitude of all the sounds gets too high, Sonic Pi uses what's called a compressor to squash them all to make sure things aren't too loud for your ears. This can often make the sound muddy and strange. So try to use low amplitudes, i.e. in the range 0 to 0.5 to avoid compression.
ru: Амплитуда - компьютерное представление громкости звука. *Высокая амплитуда даёт громкий звук*, а *низкая амплитуда даёт тихий звук*. Так же, как Sonic Pi использует числа для обозначения нот, числами обозначается и амплитуда. При значении амплитуды 0 получается тишина (ничего не будет слышно), а амплитуда 1 - это нормальная громкость. Можно, также, увеличить амплитуду до 2, 10 или 100. Но стоит отметить, что когда общая амплитуда становится слишком высокой, то Sonic Pi включает так называемый компрессор, чтобы сжать ее и не дать звуку сделаться слишком громким для ваших ушей. Часто это может делать звук непонятным и странным. Так что постарайтесь использовать значения амплитуды в промежутке от 0 до 0.5, чтобы избегать компрессии.

en: Amp it up
ru: Усиление

en: To change the amplitude of a sound, you can use the `amp:` opt. For example, to play at half amplitude pass 0.5:
ru: Чтобы изменить амплитуду звука, можно воспользоваться настройкой `amp:`. Например, передай 0.5, чтобы играть на половинной громкости:

en: To play at double amplitude pass 2:
ru: Чтобы играть на удвоенной громкости, передай 2:

en: The `amp:` opt only modifies the call to `play` it's associated with. So, in this example, the first call to play is at half volume and the second is back to the default (1):
ru: Регулировка `amp:` изменяет тот вызов `play`, с которым она идёт вместе. Поэтому в следующем примере первый вызов произойдет на половинной громкости, а второй вернется к значению по умолчанию (1):

en: Of course, you can use different `amp:` values for each call to play:
ru: Конечно, можно задавать разные значения `amp:` для каждого вызова `play`:

en: Panning
ru: Панорамирование

en: Another fun opt to use is `pan:` which controls the panning of a sound in stereo. Panning a sound to the left means that you hear it out of the left speaker, and panning it to the right means you hear it out of your right speaker. For our values, we use a -1 to represent fully left, 0 to represent center and 1 to represent fully right in the stereo field. Of course, we're free to use any value between -1 and 1 to control the exact positioning of our sound.
ru: Еще одной забавной настройкой, которую стоит использовать, является `pan:`. Она контролирует смещение звука в стереобазе. Смещение звука влево означает, что вы услышите его из левого динамика, а смещение вправо - что он будет выходить из правого динамика. Мы используем -1 для полного смещения влево, 0 для центра, а 1 - для полного смещения вправо в стереобазе. Безусловно, мы можем указывать любое значение в промежутке между -1 и 1 для точного позиционирования нашего звука.

en: Let's play a beep out of the left speaker:
ru: Давай получим звук из левого динамика:

en: Now, let's play it out of the right speaker:
ru: Теперь, повторим его из правого:

en: Finally let's play it back out of the center of both (the default position):
ru: Наконец, выведем его снова по центру (позиция по умолчанию):

en: Now, go and have fun changing the amplitude and panning of your sounds!
ru: Попробуйте сами сделать что-нибудь весёлое, меняя амплитуду и панорамирование ваших звуков!

en: 2.3 Switching Synths
ru: 2.3 Переключение между синтезаторами

en: Switching Synths
ru: Переключаем Синтезаторы

en: So far we've had quite a lot of fun making beeps. However, you're probably starting to get bored of the basic beep noise. Is that all Sonic Pi has to offer? Surely there's more to live coding than just playing beeps? Yes there is, and in this section we'll explore some of the exciting range of sounds that Sonic Pi has to offer.
ru: До сего момента мы, по большей части, развлекались с простыми звуками. Однако, простые тона уже начали вас утомлять. Разве это все, что Sonic Pi может предложить? Определенно, у лайвкодинга есть больше возможностей, чем просто гудение. Да, есть. И в этой главе мы познакомимся с захватывающим набором звуков, доступных в Sonic Pi.

en: Sonic Pi has a number of different instruments it calls synths (which is *short for synthesisers*). Whereas samples represent pre-recorded sounds, synths are capable of generating new sounds depending on how you control them (which we'll explore later in this tutorial). Sonic Pi's synths are very powerful and expressive and you'll have a lot of fun exploring and playing with them. First, let's learn how to select the current synth to use.
ru: В Sonic Pi есть ряд инструментов, называемых синтами, что есть *сокращение от термина "синтезатор"*. В то время, как сэмплы представляют собой предварительно записанные звуки, синты могут генерировать новые звуки в зависимости от того, как вы ими управляете (это мы изучим далее в этом учебнике). Синты Sonic Pi - очень мощные и яркие инструменты. Играть с ними очень весело. Вначале, давайте научимся выбирать какой синтезатор мы будем использовать.

en: Buzzy saws and prophets
ru: Жужжащие Пилы И Профеты

en: A fun sound is the *saw wave* - let's give it a try:
ru: *Пилообразная волна* - забавный звук. Давайте попробуем его:

en: Let's try another sound - the *prophet*:
ru: Попробуйте другой - *prophet*:

en: How about combining two sounds. First one after another:
ru: Как насчет смешивания обоих. Сначала один, а потом другой:

en: Now multiple sounds at the same time (by not sleeping between successive calls to `play`):
ru: А теперь несколько звуков одновременно (без засыпания между вызовами `play`):

en: Notice that the `use_synth` command only affects the following calls to `play`. Think of it like a *big switch* - new calls to `play` will play whatever synth it's currently pointing to. You can move the switch to a new synth with `use_synth`.
ru: Как вы могли заметить, команда `use_synth` влияет только на следующие вызовы `play`. Представьте, что это *большой выключатель* - новые вызовы `play` будут играть только на используемом синте. На новый синт можно переключиться с помощью `use_synth`.

en: Discovering Synths
ru: Изучаем синтезаторы

en: To see which synths Sonic Pi has for you to play with take a look at the Synths option in the menu at the bottom of this help screen (between Examples & Fx). There are over 20 to choose from. Here are a few of my favourites:
ru: Чтобы увидеть, какие синты есть в Sonic Pi, загляните во вкладку Synths в меню слева внизу (рядом с Fx). Там их больше 20 на выбор. Вот несколько моих любимых:

en: Now play around with *switching synths during your music*. Have fun combining synths to make new sounds as well as using different synths for different sections of your music.
ru: Попробуйте *попереключаться между синтами, пока ваша музыка играет*. Позабавьтесь со смешиванием синтов, чтобы получать новые звуки. Еще можно использовать разные синтезаторы для разных частей музыки.

en: 2.4 Duration with Envelopes
ru: 2.4 Длительность и огибающие

en: Duration with Envelopes
ru: Управление длительностью при помощи огибающих

en: In an earlier section, we looked at how we can use the `sleep` command to control when to trigger our sounds. However, we haven't yet been able to control the duration of our sounds.
ru: В одной из предыдущих глав мы изучали, как можно использовать команду `sleep` для того, чтобы контролировать, когда начинается звук. Однако, до этого момента мы не могли настраивать продолжительность наших звуков.

en: In order to give us a simple, yet powerful means of *controlling the duration* of our sounds, Sonic Pi provides the notion of an *ADSR amplitude envelope* (we'll cover what ADSR means later in this section). An amplitude envelope offers two useful aspects of control:
ru: В качестве простого и мощного способа *управления длительностью* наших звуков Sonic Pi предоставляет нам понятие *ADSR амплитудной огибающей* (Дальше в этой главе - ADSR). Амплитудная огибающая предлагает контроль по двум параметрам:

en: control over the duration of a sound
ru: управление длительностью звука

en: control over the amplitude of a sound
ru: управление амплитудой звука

en: Duration
ru: Длительность

en: The duration is the length the sound lasts for. A longer duration means that you hear the sound for longer. Sonic Pi's sounds all have a controllable amplitude envelope, and the total duration of that envelope is the duration of the sound. Therefore, by controlling the envelope you control the duration.
ru: Длительность - это отрезок времени, в течении которого продолжается звук. Большая продолжительность означает, что вы слышите звук дольше. Все звуки в Sonic Pi имеют контролируемую продолжительность. Поэтому, управляя огибающей, вы управляете продолжительностью.

en: The ADSR envelope not only controls duration, it also gives you *fine control over the amplitude of the sound*. All audible sounds start and end silent and contain some non-silent part in-between. Envelopes allow you to slide and hold the amplitude of non-silent parts of the sound. It's like giving someone instructions on how to turn up and down the volume of a guitar amplifier. For example you might ask someone to "start at silence, slowly move up to full volume, hold it for a bit, then quickly fall back to silence." Sonic Pi allows you to program exactly this behaviour with envelopes.
ru: ADSR-огибающая задает не только длительность, но еще и позволяет *тонкую настройку амплитуды сигнала*. Все слышимые звуки начинаются и заканчиваются тишиной, а в промежутке находится изменяющаяся часть звука. Огибающие дают вам возможность плавно изменять и удерживать амплитуду разных частей звука. Это похоже на написание инструкции о том, в каком порядке понижать и повышать громкость гитарного усилителя. Например, вы можете попросить "начать с тишины, потом медленно повышать до полной громкости, держать её на этой отметке короткое время, а потом быстро вернуть на тихий уровень". Sonic Pi дает возможность запрограммировать такое поведение очень точно с помощью огибающих.

en: Just to recap, as we have seen before, an amplitude of 0 is silence and an amplitude of 1 is normal volume.
ru: Итак, как мы видели раньше, амплитуда 0 - это тишина, а амплитуда 1 - нормальная громкость.

en: Now, let us look at each of the parts of the envelopes in turn.
ru: Теперь, пришла пора взглянуть на каждую часть огибающей по порядку.

en: Release Phase
ru: Фаза затухания (Release Phase)

en: The only part of the envelope that's used by default is the release time. This is the time it takes for the synth's sound to fade out. All synths have a release time of 1 which means that by default they have a duration of 1 beat (which at the default BPM of 60 is 1 second):
ru: Единственная часть огибающей, установленная по умолчанию, - это время затухания. Оно обозначает продолжительность времени, за которое звук полностью исчезнет. У всех синтов затухание настроено на 1, что значит по умолчанию звук длится в течение одной доли такта (что при темпе по умолчанию в 60 составляет 1 секунду):

en: The note will be audible for 1 second. Go ahead and time it :-) This is short hand for the longer more explicit version:
ru: Ноту будет слышно одну секунду. Можете измерить сами :-) В полной, и более явной записи, то же самое будет выглядеть так:

en: Notice how this sounds exactly the same (the sound lasts for one second). However, it's now very easy to change the duration by modifying the value of the `release:` opt:
ru: Заметьте, что звук получился точно таким же (длился ровно 1 секунду). Очень легко изменять длительность, изменяя значение регулировки `release:`:

en: We can make the synth sound for a very short amount of time by using a very small release time:
ru: Можно cделать звучание синта крайне непродолжительным, указав очень маленькое значение затухания:

en: The duration of the release of the sound is called the *release phase* and by default is a linear transition (i.e. a straight line). The following diagram illustrates this transition:
ru: Длительность затухания звука называется *фазой затухания* (release phase) и, по умолчанию, представляет из себя линейный переход (т.e. прямую линию). Следующая диаграмма иллюстрирует такой переход:

en: ![release envelope](../../../etc/doc/images/tutorial/env-release.png)
ru: ![огибающая затухания](../../../etc/doc/images/tutorial/env-release.png)

en: The vertical line at the far left of the diagram shows that the sound starts at 0 amplitude, but goes up to full amplitude immediately (this is the attack phase which we'll cover next). Once at full amplitude it then moves in a straight line down to zero taking the amount of time specified by `release:`. *Longer release times produce longer synth fade outs.*
ru: Вертикальная линия на левом краю диаграммы показывает, что звук начинается при амплитуде 0, но почти сразу взлетает до полной громкости (это фаза атаки, которую мы рассмотрим далее). Как только достигнута максимальная амплитуда, она спадает прямой линией до нуля, занимая время, указанное для `release:`. *Чем продолжительнее время затухания, тем дольше будет стихать синт.*

en: You can therefore change the duration of your sound by changing the release time. Have a play adding release times to your music.
ru: Таким образом, вы можете менять длительность звучания своих звуков, изменяя время затухания. Потратьте немного времени, пробуя добавлять время затухания к собственной музыке.

en: Attack Phase
ru: Фаза атаки (Attack Phase)

en: By default, the *attack phase* is 0 for all synths which means they move from 0 amplitude to 1 immediately. This gives the synth an initial percussive sound. However, you may wish to fade your sound in. This can be achieved with the `attack:` opt. Try fading in some sounds:
ru: По умолчанию *фаза атаки* равна 0 для всех синтов, что значит их амплитуда меняется от 0 до 1 мгновенно. Поэтому начальный звук синта похож на удар. Но вам может понадобиться плавно вывести звук. Этого можно добиться при помощи регулировки `attack:`. Попробуйте плавно извлекать какие-нибудь звуки:

en: You may use multiple opts at the same time. For example for a short attack and a long release try:
ru: Можно пользоваться несколькими регуляторами в одно и то же время. Например, для короткой атаки и долгого затухания попробуйте:

en: This short attack and long release envelope is illustrated in the following diagram:
ru: Эта краткая атака и длинное затухание иллюстрируются следующей диаграммой:

en: Of course, you may switch things around. Try a long attack and a short release:
ru: Конечно, можно и наоборот. Попробуйте долгую атаку и короткое затухание:

en: ![long attack short release envelope](../../../etc/doc/images/tutorial/env-long-attack-short-release.png)
ru: ![огибающая с долгой атакой и быстрым затуханием](../../../etc/doc/images/tutorial/env-long-attack-short-release.png)

en: Finally, you can also have both short attack and release times for shorter sounds.
ru: В конце-концов, для кратких звуков можно сделать короткими и атаку, и затухание.

en: ![short attack short release envelope](../../../etc/doc/images/tutorial/env-short-attack-short-release.png)
ru: ![огибающая с короткой атакой и коротким затуханием](../../../etc/doc/images/tutorial/env-short-attack-short-release.png)

en: Sustain Phase
ru: Фаза задержки (Sustain Phase)

en: In addition to specifying attack and release times, you may also specify a sustain time to control the *sustain phase*. This is the time for which the sound is maintained at full amplitude between the attack and release phases.
ru: Вдобавок, к заданию времени атаки и затухания, можно указать время задержки, чтобы управлять *фазой задержки*. Это отрезок времени, в течение которого звук остается на полной громкости в промежутке между фазами атаки и затухания.

en: ![ASR envelope](../../../etc/doc/images/tutorial/env-attack-sustain-release.png)
ru: ![ASR огибающая](../../../etc/doc/images/tutorial/env-attack-sustain-release.png)

en: The sustain time is useful for important sounds you wish to give full presence in the mix before entering an optional release phase. Of course, it's totally valid to set both the `attack:` and `release:` opts to 0 and just use the sustain to have absolutely no fade in or fade out to the sound. However, be warned, a release of 0 can produce clicks in the audio and it's often better to use a very small value such as 0.2.
ru: Задержка полезна для важных звуков, которые вы хотели бы полностью выделить при сведении, прежде чем они перейдут в необязательную фазу затухания. Конечно же, совершенно допустимо устанавливать и `attack:` и `release:` в 0 и попросту использовать задержку, чтобы не иметь абсолютно никакого нарастания и затухания у звука. Но стоит заметить, что затухание 0 может давать щелчки в аудио, и часто лучше все-таки указывать очень маленькое значение, такое как 0.2.

en: Decay Phase
ru: Фаза спада (Decay Phase)

en: For an extra level of control, you can also specify a decay time. This is a phase of the envelope that fits between the attack and sustain phases and specifies a time where the amplitude will drop from the `attack_level:` to the `decay_level:` (which unless you explicitly set it will be set to the `sustain_level:`). By default, the `decay:` opt is 0 and both the attack and sustain levels are 1 so you'll need to specify them for the decay time to have any effect:
ru: Для дополнительного уровня контроля можно указать время спада. Это фаза огибающей, которая помещается между фазами атаки и задержки. Она задает участок времени, когда амплитуда будет падать от уровня `attack_level:` до `decay_level:` (если явно не установить его, то он будет совпадать с `sustain_level:`). По умолчанию, уровни `decay:` и `attack:` установлена в 0, а уровень затухания в 1, поэтому надо указывать время спада, чтобы оно имело какой-либо эффект:

en: ![ADSR envelope](../../../etc/doc/images/tutorial/env-attack-decay-sustain-release.png)
ru: ![ADSR огибающая](../../../etc/doc/images/tutorial/env-attack-decay-sustain-release.png)

en: Decay Level
ru: Уровень спада (Decay Level)

en: One last trick is that although the `decay_level:` opt defaults to be the same value as `sustain_level:` you can explicitly set them to different values for full control over the envelope. This allows you to to create envelopes such as the following:
ru: Еще один, последний трюк, состоит в том, что хотя настройки `decay_level:` изначально совпадают со значением `sustain_level:`, вы можете явно присвоить им разные значения для полного контроля над огибающей. Это позволяет создавать огибающие наподобие следующей:

en: ![ASR envelope](../../../etc/doc/images/tutorial/env-decay-level.png)
ru: ![ASR огибающая](../../../etc/doc/images/tutorial/env-decay-level.png)

en: It's also possible to set the `decay_level:` to be higher than `sustain_level:`:
ru: Можно, к тому же, устанавливать `decay_level:` выше, чем `sustain_level:`:

en: ![ASR envelope](../../../etc/doc/images/tutorial/env-decay-level-2.png)
ru: ![ASR огибающая](../../../etc/doc/images/tutorial/env-decay-level-2.png)

en: ADSR Envelopes
ru: ADSR-огибающие

en: So to summarise, Sonic Pi's ADSR envelopes have the following phases:
ru: Итак, подведем итог. ADSR-огибающие в Sonic Pi состоят из следующих фаз:

en: *attack* - time from 0 amplitude to the `attack_level`,
ru: *Attack - атака* - время, за которое амплитуда растет от 0 до `attack_level`,

en: *decay* - time to move amplitude from `attack_level` to `decay_level`,
ru: *Decay - спад* - время, когда амплитуда переходит от `attack_level` до `decay_level`,

en: *sustain* - time to move the amplitude from `decay_level` to `sustain_level`,
ru: *Sustain - задержка* - время изменения амплитуды с `decay_level` на `sustain_level`,

en: *release* - time to move amplitude from `sustain_level` to 0
ru: *Release - затухание* - время падения амплитуда с `sustain_level` до 0

en: It's important to note that the duration of a sound is the summation of the times of each of these phases. Therefore the following sound will have a duration of 0.5 + 1 + 2 + 0.5 = 4 beats:
ru: Важно помнить, что длительность звука - это сумма продолжительностей всех фаз. Соответственно, такой звук будет длиться 0.5 + 1 + 2 + 0.5 = 4 доли такта:

en: Now go and have a play adding envelopes to your sounds...
ru: Теперь пришло время поиграть с огибающими, добавляя их в свои звуки...

en: 3 Samples
ru: 3 Сэмплы

en: Samples
ru: Сэмплы

en: Another great way to develop your music is to use pre-recorded sounds. In great hip-hop tradition, we call these pre-recorded sounds *samples*. So, if you take a microphone outside, go and record the gentle sound of rain hitting canvas, you've just created a sample.
ru: Другой отличный способ сочинять музыку - использовать заранее записанные звуки. В лучших традициях хип-хопа, мы называем такие записанные звуки *сэмплами*. То есть, если вы возьмёте микрофон, выйдете наружу и запишете мягкие звуки ударов дождя по крыше, вы создадите сэмпл.

en: Sonic Pi lets you do lots of fun things with samples. Not only does it ship with 130 public domain samples ready for you to jam with, it lets you play and manipulate your own. Let's get to it...
ru: В Sonic Pi можно делать много забавных вещей с сэмплами. Помимо 90 встроенных сэмплов со свободной лицензией, программа даёт вам работать и играть с собственными. Перейдем же к делу..

en: 3.1 Triggering Samples
ru: 3.1 Воспроизведение сэмплов

en: Triggering Samples
ru: Воспроизведение cэмплов

en: Playing beeps is only the beginning. Something that's a lot of fun is triggering pre-recorded samples. Try it:
ru: Простые звуки - это только начало. Кое-что весьма весёлое - это проигрывание сэмплов. Попробуйте:

en: Sonic Pi includes many samples for you to play with. You can use them just like you use the `play` command. To play multiple samples and notes just write them one after another:
ru: Sonic Pi включает множество сэмплов. Их можно использовать так же, как вы используете команду `play`. Чтобы проиграть несколько сэмплов и нот, просто запишите их друг под другом:

en: If you want to space them out in time, use the `sleep` command:
ru: Если их нужно разделить во времени, используйте команду `sleep`:

en: Notice how Sonic Pi doesn't wait for a sound to finish before starting the next sound. The `sleep` command only describes the separation of the *triggering* of the sounds. This allows you to easily layer sounds together creating interesting overlap effects.
ru: Обратите внимание, что Sonic Pi не ждёт, пока закончится один звук, прежде чем начать играть следующий. Команда `sleep` всего лишь описывает разделение моментов, когда звуки *начинаются*. За счет этого их можно легко совмещать, создавая интересные эффекты наложения.

en: Discovering Samples
ru: Знакомимся с сэмплами

en: There are two ways to discover the range of samples provided in Sonic Pi. First, you can use this help system. Click on Samples in the menu at the bottom of this help screen, choose your category and then you'll see a list of available sounds.
ru: Есть два способа познакомиться с набором сэмплов, включённых в Sonic Pi. Во-первых, вы можете воспользоваться системой помощи. Щелкните Samples в нижнем меню этого окна помощи, выберите желаемую категорию, и после этого вы увидите список доступных звуков.

en: Alternatively you can use the *auto-completion system*. Simply type the start of a sample group such as: `sample :ambi_` and you'll see a drop-down of sample names appear for you to select. Try the following category prefixes:
ru: В качестве альтернативы можно использовать *систему автодополнения*. Просто начните набирать название группы сэмплов, например `sample :ambi_`, и появится выпадающее меню с названиями сэмплов на выбор. Попробуйте такие варианты приставки:

en: Now start mixing samples into your compositions!
ru: А теперь попробуйте создать собственные композиции из сэмплов!

en: 3.2 Sample Parameters
ru: 3.2 Параметры сэмплов

en: Sample Parameters: Amp and Pan
ru: Параметры сэмплов: Амплитуда и Панорамирование

en: As we saw with synths, we can easily control our sounds with parameters. Samples support exactly the same parameterisation mechanism. Let's revisit our friends `amp:` and `pan:`.
ru: Также, как и с синтами, мы можем легко контролировать наши сэмплы при помощи параметров. Механизм передачи параметров сэмплам точно такой же. Вспомним наших друзей `amp:` и `pan:`.

en: Amping samples
ru: Усиливаем сэмплы

en: You can change the amplitude of samples with exactly the same approach you used for synths:
ru: Можно менять амплитуду сэмплов точно так же, как и синтов:

en: Panning samples
ru: Панорамируем сэмплы

en: We're also able to use the `pan:` parameter on samples. For example, here's how we'd play the amen break in the left ear and then half way through play it again through the right ear:
ru: Ещё один параметр сэмплов, доступный для использования - `pan:`. Например, вот так мы бы сыграли амен-брейк в левом канале, а потом на середине проиграли бы его снова, но в правом канале:

en: Note that 0.877 is half the duration of the `:loop_amen` sample in seconds.
ru: Обратите внимание, что 0.877 - это половина продолжительности сэмпла `:loop_amen` в секундах.

en: Finally, note that if you set some synth defaults with `use_synth_defaults` (which we will discuss later), these will be ignored by `sample`.
ru: Наконец, обратите внимание: если вы сбросите регулировки какого-нибудь синта на настройки по умолчанию (как это сделать при помощи `use_synth_defaults`, рассмотрим далее) - они будут проигнорированы сэмплом.

en: 3.3 Stretching Samples
ru: 3.3 Растягивание сэмплов

en: Stretching Samples
ru: Растягиваем сэмплы

en: Now that we can play a variety of synths and samples to create some music, it's time to learn how to modify both the synths and samples to make the music even more unique and interesting. First, let's explore the ability to *stretch* and *squash* samples.
ru: Теперь, когда мы умеем играть на разнообразных синтах и воспроизводить всевозможные сэмплы, пришло время научиться управлять ими обоими, чтобы музыка получалась ещё более уникальной и интересной. Вначале, давайте рассмотрим возможность *растягивать* и *сжимать* сэмплы.

en: Sample Representation
ru: Представление сэмпла

en: Samples are pre-recorded sounds stored as numbers which represent how to move the speaker cone to reproduce the sound. The speaker cone can move in and out, and so the numbers just need to represent how far in and out the cone needs to be for each moment in time. To be able to faithfully reproduce a recorded sound the sample typically needs to store many thousands of numbers per second! Sonic Pi takes this list of numbers and feeds them at the right speed to move your computer's speaker in and out in just the right way to reproduce the sound. However, it's also fun to change the speed with which the numbers are fed to the speaker to change the sound.
ru: Сэмплы - это предварительно записанные звуки в виде чисел, описывающих, как колеблется мембрана динамика, чтобы воспроизвести звук. Мембрана движется внутрь и наружу, так что числами всего лишь нужно задать насколько втянутой или выпуклой она должна быть в каждый момент времени. Для правдоподобного воспроизведения звука, обычно сэмпл хранит много тысяч чисел для каждой секунды! Sonic Pi берет список этих чисел и передаёт их с нужной скоростью, чтобы двигать мембраной динамика наружу и внутрь так, чтобы получился нужный звук. Но можно неплохо поразвлечься, меняя звук за счет изменения скорости, с которой числа идут в динамик.

en: Changing Rate
ru: Меняем скорость

en: Let's play with one of the ambient sounds: `:ambi_choir`. To play it with the default rate, you can pass a `rate:` opt to `sample`:
ru: Попробуем проверить это на одном из природных звуков: `:ambi_choir`. Чтобы воспроизвести его с обычной скоростью, можно передавать команде `sample` настройку `rate:`:

en: This plays it at normal rate (1), so nothing special yet. However, we're free to change that number to something else. How about `0.5`:
ru: Этот пример воспроизводит сэмпл с нормальной скоростью (1). Пока что ничего особенного. Однако, мы можем свободно изменить это число на что-то другое. Как насчет `0.5`:

en: Woah! What's going on here? Well, two things. Firstly, the sample takes twice as long to play, secondly the sound is an octave lower. Let's explore these things in a little more detail.
ru: Ого! Это что такое происходит? Ну, две вещи. Во-первых - сэмпл воспроизводится в два раза дольше. Во-вторых - звук стал ниже на октаву. Давайте разберём это более детально.

en: Let's stretch
ru: Давайте растянем

en: A sample that's fun to stretch and compress is the Amen Break. At normal rate, we might imagine throwing it into a *drum 'n' bass* track:
ru: Сэмпл, который забавно растягивать и сжимать, - это амен-брейк. С нормальной скоростью мы можем легко себе представить его в составе трека драм-н-бейс:

en: However by changing the rate we can switch up genres. Try half speed for *old school hip-hop*:
ru: Но, задавая скорость, можно переключать и жанры. Попробуй половинное значение, чтобы получить *старый-добрый хип-хоп*:

en: If we speed it up, we enter *jungle* territory:
ru: А если ускориться, то мы попадаем на территорию *джангл*:

en: Now for our final party trick - let's see what happens if we use a negative rate:
ru: А теперь гвоздь программы - проверим, что произойдет, если мы зададим отрицательную скорость:

en: Woah! It plays it *backwards*! Now try playing with lots of different samples at different rates. Try very fast rates. Try really slow rates. See what interesting sounds you can produce.
ru: Ничего себе! Он стал играть *задом-наперёд*! Попробуйте поиграться со множеством разных сэмплов на разных скоростях. Попробуйте очень быстрые скорости. Попробуйте несуразно медленные. Узнайте, какие интересные звуки можно создать.

en: A Simple Explanation of Sample Rate
ru: Простое объяснение скорости сэмпла

en: A useful way to think of samples is as springs. Playback rate is like squashing and stretching the spring. If you play the sample at rate 2, you're *squashing the spring* to half its normal length. The sample therefore takes half the amount of time to play as it's shorter. If you play the sample at half rate, you're *stretching the spring* to double its length. The sample therefore takes twice the amount of time to play as it's longer. The more you squash (higher rate), the shorter it gets, the more you stretch (lower rate), the longer it gets.
ru: Полезная мысленная аналогия сэмплам - пружина. Темп воспроизведения - это как сжатие и растягивание пружины. Если воспроизводить сэмпл со скоростью 2, то вы будете *сжимать пружину* до половины ее нормальной длины. Следовательно, воспроизведение сэмпла займёт половину времени, ведь он стал короче. Если играть сэмпл на половине обычной скорости, то вы *растягиваете пружину* в два раза. Поэтому сэмпл длится в два раза дольше, ведь он стал длиннее. Чем больше вы сдавливаете, тем короче он получается (скорость выше), а чем больше вы растягиваете, тем длиннее он становится (скорость ниже).

en: Compressing a spring increases its density (the number of coils per cm) - this is similar to the sample sounding *higher pitched*. Stretching the spring decreases its density and is similar to the sound having a *lower pitch*.
ru: Сжатие пружины увеличивает ее плотность (число витков на сантиметр) - это совпадает с тем, почему сэмпл начинает звучать с *высокой частотой*. Растягивание пружины снижает ее плотность, и это похоже на то, как *частота звука понижается*.

en: The Maths Behind Sample Rate
ru: Математика, объясняющая скорость сэмпла

en: (This section is provided for those that are interested in the details. Please feel free to skip it...)
ru: (Эта часть приведена для тех, кому интересны детали. Всем остальным её можно пропустить...)

en: As we saw above, a sample is represented by a big long list of numbers representing where the speaker should be through time. We can take this list of numbers and use it to draw a graph which would look similar to this:
ru: Как мы видели раньше, представление сэмпла - это очень длинный список чисел, которые описывают движение мембраны динамика во времени. Можно взять эту последовательность чисел и нарисовать по ней график, который будет выглядеть примерно так:

en: ![sample graph](../../../etc/doc/images/tutorial/sample.png)
ru: ![график сэмпла](../../../etc/doc/images/tutorial/sample.png)

en: You might have seen pictures like this before. It's called the *waveform* of a sample. It's just a graph of numbers. Typically a waveform like this will have 44100 points of data per second (this is due to the Nyquist-Shannon sampling theorem). So, if the sample lasts for 2 seconds, the waveform will be represented by 88200 numbers which we would feed to the speaker at a rate of 44100 points per second. Of course, we could feed it at double rate which would be 88200 points per second. This would therefore take only 1 second to play back. We could also play it back at half rate which would be 22050 points per second taking 4 seconds to play back.
ru: Вы могли видеть похожие картинки до этого. Они называются *волновой формой* сэмпла. Это просто числовой график. Обычно подобные формы включают 44100 точек с данными на каждую секунду времени (из-за теоремы сэмплирования Найквиста-Шэннона). Итак, если сэмпл длится две секунды, то форма волны будет состоять из 88200 чисел, которые мы бы передавали динамической головке со скоростью 44100 значения в секунду. Конечно, мы могли бы удвоить темп передачи, тогда воспроизведение бы заняло всего одну секунду. А еще мы могли бы проигрывать его в два раза медленнее, что означало бы 22500 точек в секунду, и весь процесс бы занял четыре секунды.

en: The duration of the sample is affected by the playback rate:
ru: На длительность сэмпла влияет скорость воспроизведения:

en: Doubling the playback rate halves the playback time,
ru: Удвоение темпа уполовинивает время воспроизведения,

en: Halving the playback rate doubles the playback time,
ru: Сокращение темпа вдвое удваивает время воспроизведения,

en: Using a playback rate of one fourth quadruples the playback time,
ru: Если задать темп, равный четверти от нормального, то время учетверится,

en: Using a playback rate of 1/10 makes playback last 10 times longer.
ru: Если скорость воспроизведения равна 1/10 от нормальной, то время воспроизведения увеличится в 10 раз.

en: We can represent this with the formula:
ru: Мы можем представить это отношение формулой:

en: new_sample_duration = (1 / rate) * sample_duration
ru: новая_длительность_сэмпла = (1 / скорость) * длительность_сэмпла

en: Changing the playback rate also affects the pitch of the sample. The frequency or pitch of a waveform is determined by how fast it moves up and down. Our brains somehow turn fast movement of speakers into high notes and slow movement of speakers into low notes. This is why you can sometimes even see a big bass speaker move as it pumps out super low bass - it's actually moving a lot slower in and out than a speaker producing higher notes.
ru: Изменение темпа воспроизведения, к тому же, влияет на высоту сэмпла. Частота формы сигнала и высота звука определяются тем, как часто сигнал движется вверх и вниз. Наш мозг каким-то образом превращает быстрые перемещения мембраны в высокие ноты, а медленные - в низкие. Именно поэтому иногда вы можете видеть вибрации большого басового динамика, когда он издает чрезвыйчайно низкие звуки. На самом деле он перемещается намного медленнее внутрь и наружу, чем динамик, воспроизводящий высокие ноты.

en: If you take a waveform and squash it it will move up and down more times per second. This will make it sound higher pitched. It turns out that doubling the amount of up and down movements (oscillations) doubles the frequency. So, *playing your sample at double rate will double the frequency you hear it*. Also, *halving the rate will halve the frequency*. Other rates will affect the frequency accordingly.
ru: Если взять форму сигнала и сжать ее, то она будет колебаться вверх и вниз большее количество раз за секунду. За счет этого звук получится более высоким. Выходит, что удвоение движений вверх-вниз (колебаний) удваивает частоту. Поэтому *проигрывание сэмпла на удвоенной скорости удваивает его слышимую частоту*. Точно так же *половинная скорость уменьшает частоту вдвое*. Другие значения скорости влияют на частоту соответствующим образом.

en: 3.4 Enveloped Samples
ru: 3.4 Огибающие сэмплов

en: Enveloped Samples
ru: Огибающие сэмплов

en: It is also possible to modify the *duration* and *amplitude* of a sample using an ADSR envelope. However, this works slightly differently to the ADSR envelope available on synths. Sample envelopes only allow you to reduce the amplitude and duration of a sample - and never to increase it. The sample will stop when either the sample has finished playing or the envelope has completed - whichever is first. So, if you use a very long `release:`, it won't extend the duration of the sample.
ru: Также возможно изменять *длительность* и *амплитуду* сэмпла, используя ADSR-огибающие. Но это работает немного по-другому, чем ADSR-огибающие синтов. Огибающие сэмплов позволяют уменьшать громкость и длительность, но не увеличивать их. Сэмпл остановится, либо когда его воспроизведение завершено, либо когда огибающая закончилась - в зависимости от того, что произошло раньше. Так что если задать очень долгое *затухание*, то звучание сэмпла не удлинится.

en: Amen Envelopes
ru: Огибающие амен

en: Let's return to our trusty friend the Amen Break:
ru: Вернемся к нашему верному другу амен-брейку:

en: With no opts, we hear the full sample at full amplitude. If we want to fade this in over 1 second we can use the `attack:` param:
ru: Без дополнительных регулировок мы слышим полный сэмпл на полной громкости. Если мы хотим его постепенно усиливать в течение одной секунды, то можно задейстовать параметр `attack:`:

en: For a shorter fade in, choose a shorter attack value:
ru: Для более краткого нарастания, выберите значение атаки поменьше:

en: Auto Sustain
ru: Автоудержание

en: Where the ADSR envelope's behaviour differs from the standard synth envelope is in the *sustain* value. In the standard synth envelope, the sustain defaulted to 0 unless you set it manually. With samples, the sustain value defaults to an *automagical* value - the time left to play the rest of the sample. This is why we hear the full sample when we pass no defaults. If the attack, decay, sustain and release values were all 0 we'd never hear a peep. Sonic Pi therefore calculates how long the sample is, deducts any attack, decay and release times and uses the result as your sustain time. If the attack, decay and release values add up to more than the duration of the sample, the sustain is simply set to 0.
ru: Отличие поведения ADSR-огибающей сэмпла от стандартной огибающей синта лежит в значении сустейна. В обычной огибающей синта сустейн сам по себе устанавливался в 0, если мы не указывали его вручную. Для сэмплов оно также настраивается "автомагически", и равняется времени, необходимому для завершения сэмпла. Поэтому мы слышим полный сэмпл, когда никаких настроек не задаётся. Если бы значения атаки, спада, удержания и затухания равнялись 0, то мы бы и намёка на сэмпл не услышали. Так что Sonic Pi вычисляет сколько времени длится сэмпл, вычитает длительности атаки, спада и затухания, и присваивает результат фазе удержания. Если атака, спад и затухание вместе дают значение больше продолжительности сэмпла, то удержание устанавливается в 0.

en: Fade Outs
ru: Постепенное затухание

en: To explore this, let's consider our Amen break in more detail. If we ask Sonic Pi how long the sample is:
ru: Для изучения этого явления рассмотрим наш амен-брейк более детально. Если спросить Sonic Pi сколько длится сэмпл:

en: It will print out `1.753310657596372` which is the length of the sample in seconds. Let's just round that to `1.75` for convenience here. Now, if we set the release to `0.75`, something surprising will happen:
ru: Он напечатает `1.753310657596372`, что означает собственное время звучания сэмпла в секундах. Просто для удобства округлим его до `1.75`. Затем, если установить затухание в `0.75`, произойдет кое-что неожиданное:

en: It will play the first second of the sample at full amplitude before then fading out over a period of 0.75 seconds. This is the *auto sustain* in action. By default, the release always works from the end of the sample. If our sample was 10.75 seconds long, it would play the first 10 seconds at full amplitude before fading out over 0.75s.
ru: Первая секунда сэмпла будет воспроизводиться на полной громкости, а потом последует постепенное затухание в течение 0.75 секунды. Это и есть пример *автоудержания* в действии. Само по себе затухание всегда работает с конца сэмпла. Если бы наш сэмпл длился 10.75 секунды, то первые 10 секунд он бы играл с полной амплитудой, а потом затухал оставшиеся 0.75 секунды.

en: Remember: by default, `release:` fades out at the end of a sample.
ru: Запомните: по умолчанию `release:` отсчитывает затухание от конца сэмпла.

en: Fade In and Out
ru: Постепенное усиление и затухание

en: We can use both `attack:` and `release:` together with the auto sustain behaviour to fade both in and out over the duration of the sample:
ru: Можно использовать вместе `attack:`, `release:` и поведение автоудержания для постепенного усиления и затухания при воспроизведении сэмпла:

en: As the full duration of the sample is 1.75s and our attack and release phases add up to 1.5s, the sustain is automatically set to 0.25s. This allows us to easily fade the sample in and out.
ru: Так как полная продолжительность равняется 1.75 секунды, а наши фазы атаки и затухания суммарно дают 1.5 секунды, то удержание автоматически устанавливается в 0.25 секунды. Так мы легко можем плавно усиливать и гасить сэмпл.

en: Explicit sustain
ru: Точное удержание

en: We can easily get back to our normal synth ADSR behaviour by manually setting `sustain:` to a value such as 0:
ru: Вернуться к нормальному режиму ADSR-огибающей довольно просто: достаточно вручную задать 0 для `sustain:`:

en: Now, our sample only plays for 0.75 seconds in total. With the default for `attack:` and `decay:` at 0, the sample jumps straight to full amplitude, sustains there for 0s then releases back down to 0 amplitude over the release period - 0.75s.
ru: После этого сэмпл звучит в общей сложности всего лишь 0.75 секунды. При обычных нулевых значениях `attack:` и `decay:` громкость сэмпла сразу же достигает полного значения, удерживается там в течение 0 секунд, а потом за 0.75 секунды полностью затихает во время фазы затухания.

en: Percussive cymbals
ru: Тарелки

en: We can use this behaviour to good effect to turn longer sounding samples into shorter, more percussive versions. Consider the sample `:drum_cymbal_open`:
ru: Хороший эффект от данного поведения получается, если мы хотим превратить продолжительные сэмплы в более короткие. Это даст им более отрывистое ударное звучание. Рассмотрим сэмпл `:drum_cymbal_open`:

en: You can hear the cymbal sound ringing out over a period of time. However, we can use our envelope to make it more percussive:
ru: Можно слышать, что тарелка продолжает звенеть некоторое время. С помощью огибающей можно сделать её более резкой:

en: You can then emulate hitting the cymbal and then dampening it by increasing the sustain period:
ru: А еще можно изображать удар по тарелке и его глушение за счет увеличения периода удержания:

en: Now go and have fun putting envelopes over the samples. Try changing the rate too for really interesting results.
ru: А теперь, ступайте, и как следует позабавьтесь, добавляя огибающие к сэмплам. Попробуйте изменять и скорость, чтобы получить действительно интересные результаты.

en: 3.5 Partial Samples
ru: 3.5 Фрагментированные сэмплы

en: Partial Samples
ru: Неполные сэмплы

en: This section will conclude our exploration of Sonic Pi's sample player. Let's do a quick recap. So far we've looked at how we can trigger samples:
ru: Этот раздел станет заключительным в нашем исследовании воспроизведения сэмплов в Sonic Pi. Давайте кратко повторим уже изученное. Пока мы только разбирались в том, как включать сэмплы:

en: We then looked at how we can change the rate of samples such as playing them at half speed:
ru: Потом мы рассмотрели то, как мы можем менять темп сэмплов, например для воспроизведения их на половине скорости:

en: Next, we looked at how we could fade a sample in (let's do it at half speed):
ru: Затем, мы увидели, как можно постепенно усиливать сэмпл (совместим это с уменьшённой вдвое скоростью):

en: We also looked at how we could use the start of a sample percussively by giving `sustain:` an explicit value and setting both the attack and release to be short values:
ru: Еще мы узнали как сделать начало сэмпла более резким за счет задания `sustain:` явного значения и установки коротких атаки и затухания:

en: However, wouldn't it be nice if we didn't have to always start at the beginning of the sample? Wouldn't it also be nice if we didn't have to always finish at the end of the sample?
ru: Однако, вам бы понравилось, если бы не надо было всякий раз начинать сэмпл с начала? Разве не здорово было бы, если бы можно было играть сэмпл не до конца?

en: Choosing a starting point
ru: Выбираем точку старта

en: It is possible to choose an arbitrary starting point in the sample as a value between 0 and 1 where 0 is the start of the sample, 1 is the end and 0.5 is half way through the sample. Let's try playing only the last half of the amen break:
ru: Возможно выбрать произвольную начальную точку для сэмпла, задавая ее в качестве значения в диапазоне от 0 до 1. 0 - начало сэмпла, 1 - его конец, а 0.5 - это середина. Попробуем сыграть только вторую половину амен-брейка:

en: How about the last quarter of the sample:
ru: А как насчет последней четверти:

en: Choosing a finish point
ru: Выбираем точку окончания

en: Similarly, it is possible to choose an arbitrary finish point in the sample as a value between 0 and 1. Let's finish the amen break half way through:
ru: Похожим образом разрешается выбирать конечную точку сэмпла как значение между 0 и 1. Прервем амен-брейк на середине:

en: Specifying start and finish
ru: Указываем начало и конец

en: Of course, we can combine these two to play arbitrary segments of the audio file. How about only a small section in the middle:
ru: Естественно, мы можем комбинировать оба произвольных фрагмента звукового файла. Как насчет выбрать небольшой участок в центре:

en: What happens if we choose a start position after the finish position?
ru: Что случится, если установить старт после финиша?

en: Cool! It plays it backwards!
ru: Круто! Он играет задом-наперед!

en: Combining with rate
ru: Соединяем со скоростью

en: We can combine this new ability to play arbitrary segments of audio with our friend `rate:`. For example, we can play a very small section of the middle of the amen break very slowly:
ru: Можно объединить эту новую способность играть выбранные сегменты аудио с нашим знакомым `rate:`. Например, таким образом воспроизведется очень маленькая секция из середины амен-брейка очень медленно:

en: Combining with envelopes
ru: Соединяем с огибающими

en: Finally, we can combine all of this with our ADSR envelopes to produce interesting results:
ru: Наконец, все это возможно соединить с известными нами ADSR-огибающими, чтобы получить интересный результат:

en: Now go and have a play mashing up samples with all of this fun stuff...
ru: Попробуйте также комбинировать сэмплы, не ограничивайте свою фантазию...

en: 3.6 External Samples
ru: 3.6 Внешние Сэмплы

en: External Samples
ru: Внешние Сэмплы

en: Whilst the built-in samples can get you up and started quickly, you might wish to experiment with other recorded sounds in your music. Sonic Pi totally supports this. First though, let's have a quick discussion on the portability of your piece.
ru: Хотя встроенные сэмплы помогут вам быстро приступить к работе, вы можете поэкспериментировать с другими записанными звуками в своей музыке. Sonic Pi полностью поддерживает эту функцию. Но сперва кратко обсудим переносимость вашего произведения.

en: Portability
ru: Портативность

en: However, if you start using your own pre-recorded samples, you lose this portability. This is because to reproduce your music other people not only need your code, they need your samples too. This limits the ability for others to manipulate, mash-up and experiment with your work. Of course this shouldn't stop you from using your own samples, it's just something to consider.
ru: С другой стороны, если начинать использовать собственные записанные сэмплы, то такая переносимость теряется. Это происходит из-за того, что для воспроизведения твоей музыки другим людям не только нужен твой код, но также и сэмплы. Этот факт ограничивает других в их возможностях изменять и экспериментировать с твоими работами. Конечно, знание этого не должно тебя останавливать от использования собственных сэмплов. Просто помни об этом.

en: Local Samples
ru: Локальные сэмплы

en: Sonic Pi will automatically load and play the sample. You can also pass all the standard params you're used to passing `sample`:
ru: Sonic Pi автоматически загрузит и воспроизведет сэмпл. Вместе с этим можно передавать все стандартные параметры, которые ты привык использовать с `sample`:

en: 3.7 Sample Packs
ru: 3.7 Наборы сэмплов

en: Sample Packs
ru: Наборы сэмплов

en: **Note: this section of the tutorial covers the advanced topic of working with large directories of your own samples. This will be the case if you've downloaded or bought your own sample packs and wish to use them within Sonic Pi.**
ru: **Замечание: этот раздел руководства рассказывает о расширенных возможностях работы с большими директориями ваших собственных сэмплов. Рекомендуем ознакомится с ним в тех случаях, если вы загрузили или купили набор сэмплов и хотите использовать их в Sonic Pi**

en: **Feel free to skip this if you're happy working with the built-in samples.**
ru: **Вы можете смело пропустить этот раздел, если вам хватает встроенных сэмплов**

en: When working with large folders of external samples it can be cumbersome to have to type the whole path every time to trigger an individual sample.
ru: Работая с большими папками внешних сэмплов, вы можете ощутить неудобства при набирании полного пути к каждому отдельному сэмплу.

en: For example, say you have the following folder on your machine:
ru: Например, предположим, что на вашем компьютере у вас есть папка:

en: When we look inside that folder we find the following samples:
ru: Когда мы посмотрим в директорию, то увидим следующие сэмплы:

en: Typically in order to play the piano sample we can use the full path:
ru: Как правило, для того, чтобы проиграть сэмпл пианино, мы можем использовать полный путь:

en: If we want to then play the guitar sample we can use its full path too:
ru: Если мы хотим проиграть гитарный сэмпл, мы также можем использовать его полный путь:

en: However, both of these calls to sample requires us to *know* the names of the samples within our directory. What if we just want to listen to each sample in turn quickly?
ru: Тем не менее, оба этих вызова требуют от нас *знания* имён сэмплов внутри нашей директории. Что если мы просто хотим быстро прослушать каждый сэмпл по очереди?

en: Indexing Sample Packs
ru: Индексирование наборов сэмплов

en: If we want to play the first sample in a directory we just need to pass the directory's name to `sample` and the index `0` as follows:
ru: Если мы хотим проиграть первый сэмпл в директории, мы просто должны указать имя директории в `sample` и установить индекс в значение `0` следующим образом:

en: We can even make a shortcut to our directory path using a variable:
ru: Мы также можем создать ярлык (shortcut) нашей директории, используя переменную:

en: Now, if we want to play the second sample in our directory, we just need to add 1 to our index:
ru: Теперь, если мы хотим проиграть второй сэмпл в директории, нам нужно прибавить 1 к нашему индексу:

en: Notice that we no longer need to know the names of the samples in the directory - we just need to know the directory itself (or have a shortcut to it). If we ask for an index which is larger than the number of samples, it simply wraps round just like Rings. Therefore, whatever number we use we're guaranteed to get one of the samples in that directory.
ru: Заметьте, что нам больше не нужно знать имени сэмпла в директории - мы просто должны знать название директории (или иметь её ярлык). Если мы запросим индекс, больший, чем количество сэмплов в директории, порядок сэмплов в директории будет замкнут и пойдёт по следующему кругу. Таким образом, вне зависимости от номера, мы получим один из сэмплов в директории.

en: Filtering Sample Packs
ru: Фильтрация наборов сэмплов

en: Usually indexing is enough, but sometimes we need more power to sort and organise our samples. Luckily many sample packs add useful information in the filenames. Let's take another look at the sample file names in our directory:
ru: Обычно, индексирования достаточно, но иногда нам необходимо сортировать и организовывать сэмплы. К счастью, большинство наборов сэмплов структурированы. Давайте ещё раз взглянем на имена сэмплов в нашей директории:

en: Notice that in these filenames we have quite a bit of information. Firstly, we have the BPM of the sample (beats per minute) at the start. So, the piano sample is at 120 BPM and our first three melodies are at 100 BPM. Also, our sample names contain the key. So the guitar sample is in Bb and the melodies are in A#. This information is very useful for mixing in these samples with our other code. For example, we know we can only play the piano sample with code that's in 120 BPM and in the key of Bb.
ru: Заметьте, что в их именах содержится некоторая информация. Во-первых, у нас есть BMP сэмпла (удары в секунду) в начале имени. Таким образом, сэмпл пианино имеет BPM равный 120, а первые три мелодии - 100 BPM. Имена сэмплов также содержат тональность. Таким образом, гитарный сэмпл имеет тон Bb а мелодии A#. Эта информация очень полезна для сведения этих сэмплов в нашем коде. Например, мы знаем, что сэмпл пианино содержит 120 BPM и тональность Bb.

en: It turns out that we can use this particular naming convention of our sample sets in the code to help us filter out the ones we want. For example, if we're working at 120 BPM, we can filter down to all the samples that contain the string `"120"` with the following:
ru: Оказывается, мы можем использовать это конкретное соглашение об именах наших наборов сэмплов в коде, чтобы помочь нам отфильтровать те, которые нам нужны. Например, если мы работаем с 120 BPM, мы можем отфильтровать все образцы, содержащие строку `` 120``, со следующим:

en: This will play us the first match. If we want the second match we just need to use the index:
ru: Первое совпадение будет проиграно. Если мы хотим, чтобы заиграло второе совпадение, нам нужно просто изменить индекс:

en: We can even use multiple filters at the same time. For example, if we want a sample whose filename contains both the substrings `"120"` and `"A#"` we can find it easily with the following code:
ru: Более того, мы можем использовать несколько фильтров сразу. Например, если мы хотим сэмпл, имя файла которого содержит подстроки `"120"` и `"A#"`, мы можем легко добиться этого следующим кодом:

en: Finally, we're still free to add our usual opts to the call to `sample`:
ru: Наконец, мы по-прежнему можем добавлять свойства к вызову нашего `сэмпла`:

en: Sources
ru: Источники

en: `"/path/to/samples"` - a string representing a valid path to a directory
ru: `"/path/to/samples"` - строка, представляющая валидный путь к директории

en: `"/path/to/samples/foo.wav"` - a string representing a valid path to a sample
ru: `"/path/to/samples/foo.wav"` - строка, представляющая валидный путь к сэмплу

en: For example, take a look at the following code:
ru: Например, посмотрите на следующий код:

en: Here, we're combining the contents of the samples within two directories and adding a specific sample. If `"/path/to/my/samples/"` contained 3 samples and `"/path/to/my/samples2/"` contained 12, we'd have 16 potential samples to index and filter (3 + 12 + 1).
ru: Например, здесь мы комбинируем сэмплы из двух каталогов и добавляем конкретный сэмпл. Если `"/path/to/my/samples/"`содержит 3 сэмпла и `"/path/to/my/samples2/"`содержит 12, в сумме мы получим 16 потенциальных сэмплов на индексирование и фильтрацию (3 + 12 + 1).

en: By default, only the sample files within a directory are gathered into the candidate list. Sometimes you might have a number of nested folders of samples you wish to search and filter within. You can therefore do a recursive search for all samples within all subfolders of a particular folder by adding `**` to the end of the path:
ru: По умолчанию в список совпадений попадают только файлы примеров в каталоге. Иногда у вас может быть несколько вложенных папок с сэмплами, которые вы хотите искать и фильтровать внутри. Поэтому вы можете выполнить рекурсивный поиск всех образцов во всех подпапках конкретной папки, добавив `**` в конец пути:

en: Take care though as searching through a very large set of folders may take a long time. However, the contents of all folder sources are cached, so the delay will only happen the first time.
ru: Обратите внимание, что поиск в очень большом наборе папок может занять много времени. Однако, содержимое всех источников папок кэшируется, поэтому задержка будет выполняться только в первый раз.

en: Finally, note that the sources *must go first*. If no source is given, then the set of built-in samples will be selected as the default list of candidates to work with.
ru: Наконец, заметьте, что источники *должны идти первыми*. Если не передан источник, тогда набор встроенных сэмплов будет выбран как список совпадений по умолчанию.

en: Filters
ru: Фильтры

en: Once you have a list of candidates you may use the following filtering types to further reduce the selection:
ru: Как только вы получили список совпадений, вы можете использовать следующие фильтры, чтобы уменьшить выборку:

en: `"foo"` Strings will filter on substring occurrence within file name (minus directory path and extension).
ru: `"foo"` Строки будут фильтроваться при появлении подстроки в имени файла (минус путь к каталогу и расширение).

en: `/fo[oO]/` Regular Expressions will filter on pattern matching of file name (minus directory path and extension).
ru: `/fo[oO]/`Регулярное выражение будет фильтровать соответствие имени файла шаблону (минус путь к каталогу и расширение).

en: `:foo` - Keywords will filter candidates on whether the keyword is a direct match of the filename (minus directory path and extension).
ru: `:foo`- Ключевое слово будет фильтровать совпадения по тому, является ли ключевое слово прямым соответствием имени файла (минус путь к каталогу и расширение).

en: `lambda{|a| ... }` - Procs with one argument will be treated as a candidate filter or generator function. It will be passed the list of current candidates and must return a new list of candidates (a list of valid paths to sample files).
ru: `lambda{|a| ... }` - Процесс с одним аргументом будет обрабатываться как фильтр списка совпадений или функция-генератор. Он принимает текущий и должен вернуть новый список совпадений (список действительных путей к сэмплам).

en: `1` - Numbers will select the candidate with that index (wrapping round like a ring if necessary).
ru: `1` - Числа будут выбирать совпадение с этим индексом (зацикливаться, если необходимо).

en: For example, we can filter over all the samples in a directory containing the string `"foo"` and play the first matching sample at half speed:
ru: Например, мы можем отфильтровать все образцы в каталоге, содержащем строку `"foo"`, и воспроизвести первый совпадающий образец на половинной скорости:

en: See the help for `sample` for many detailed usage examples. Note that the ordering of the filters is honoured.
ru: См. Справку по `sample` для множества подробных примеров использования. Обратите внимание, что порядок фильтров соблюдается.

en: Composites
ru: Композиции

en: Finally, you may use lists wherever you may place a source or filter. The list will be automatically flattened and the contents will be treated as regular sources and filters. Therefore the following calls to `sample` are semantically equivalent:
ru: Наконец, вы можете использовать списки везде, где вы можете разместить источник или фильтр. Список будет автоматически сплющиваться, и содержимое будет рассматриваться как обычные источники и фильтры. Поэтому следующие вызовы `sample` семантически эквивалентны:

en: Wrapping Up
ru: Подведение итогов

en: This was an advanced section for people that need real power to manipulate and use sample packs. If most of this section didn't make too much sense, don't worry. It's likely you don't need any of this functionality just yet. However, you'll know when you do need it and you can come back and re-read this when you start working with large directories of samples.
ru: Это был расширенный раздел для людей, которым нужны дополнительные возможности для манипулирования и использования наборов сэмплов. Если большая часть этого раздела не имела особого смысла, не беспокойтесь. Скорее всего, вам пока не нужна какая-либо из этих функций. Однако, вы будете знать, когда это понадобится, и вы можете вернуться и перечитать это, когда начнете работать с большими каталогами сэмплов.

en: 4 Randomisation
ru: 4 Рандомизация (Внесение случайностей)

en: Randomisation
ru: Рандомизация

en: A great way to add some interest into your music is using some random numbers. Sonic Pi has some great functionality for adding randomness to your music, but before we start we need to learn a shocking truth: in Sonic Pi *random is not truly random*. What on earth does this mean? Well, let's see.
ru: Отличный способ сделать вашу музыку несколько более интересной - это использовать случайные числа. В Sonic Pi есть замечательная функция добавления случайности в музыку, но прежде, чем мы начнем, нужно усвоить неприятную истину: в Sonic Pi *случайности не являются по-настоящему случайными*. Что же, спрашивается, это значит? Давайте разберёмся.

en: Repeatability
ru: Повторяемость

en: A really useful random function is `rrand` which will give you a random value between two numbers - a *min* and a *max*. (`rrand` is short for ranged random). Let's try playing a random note:
ru: Очень полезная случайная функция называется `rrand`. Она вернет случайное значение в диапазоне двух чисел - *минимума* и *максимума* (`rrand` это сокращение от "ранжированный генератор случайных чисел"). Попробуем проиграть какую-нибудь случайную ноту:

en: Ooh, it played a random note. It played note `83.7527`. A nice random note between 50 and 95. Woah, wait, did I just predict the exact random note you got too? Something fishy is going on here. Try running the code again. What? It chose `83.7527` again? That can't be random!
ru: Ого, получился неожиданный звук. Он воспроизвел ноту `83.7527`. Прекрасная случайная нота в промежутке между 50 и 95. Постойте-ка, я только что точно предсказал случайную ноту, которая и у вас получилась? Что-то тут нечисто. Попробуем снова. Что? Он снова выбрал `83.7527`? Это явно не случайно!

en: The answer is that it is not truly random, it's pseudo-random. Sonic Pi will give you random-like numbers in a repeatable manner. This is very useful for ensuring that the music you create on your machine sounds identical on everybody else's machine - even if you use some randomness in your composition.
ru: Правда в том, что выбор не случаен, он псевдо-случаен. Sonic Pi выдаёт повторяющиеся псевдо-случайные числа, чтобы быть уверенным, что музыка, которую вы создаёте на своей машине, будет звучать точно так же на всех других машинах. Это очень полезное свойство, даже если вы добавляете совсем немного случайности в свои композиции.

en: Of course, in a given piece of music, if it 'randomly' chose `83.7527` every time, then it wouldn't be very interesting. However, it doesn't. Try the following:
ru: Конечно же, в конкретном музыкальном произведении, если бы `83.7527` "случайно" выбиралась каждый раз, это было бы не очень интересно. Но все-таки этого не происходит. Попробуйте следующее:

en: Yes! It finally sounds random. Within a given *run* subsequent calls to random functions will return random values. However, the next run will produce exactly the same sequence of random values and sound exactly the same. It's as if all Sonic Pi code went back in time to exactly the same point every time the Run button was pressed. It's the Groundhog Day of music synthesis!
ru: Ура! Наконец-то это звучит случайно. В течение одного запуска, последующие вызовы функции генератора случайных чисел будут возвращать случайные значения. Однако, следующий прогон создаст точно такую же последовательность случайных чисел и будет звучать идентично. Это как если бы код Sonic Pi всякий раз возвращался назад во времени в тот момент, когда нажимается кнопка Run. Это День Сурка для музыкального синтеза!

en: Haunted Bells
ru: Колокола с привидениями

en: A lovely illustration of randomisation in action is the haunted bells example which loops the `:perc_bell` sample with a random rate and sleep time between bell sounds:
ru: Прекрасной иллюстрацией случайности в действии является пример колоколов, в которые как будто вселились призраки. Он повторяет пример `:perc_bell` , выбирая случайную скорость и задержку между звуками:

en: loop do
      sample :perc_bell, rate: rrand(0.125, 1.5)
      sleep rrand(0.2, 2)
    end
ru: loop do
      sample :perc_bell, rate: (rrand 0.125, 1.5)
      sleep rrand(0.2, 2)
    end

en: Random cutoff
ru: Случайная частота среза фильтра нижних частот

en: Another fun example of randomisation is to modify the cutoff of a synth randomly. A great synth to try this out on is the `:tb303` emulator:
ru: Еще один забавный пример рандомизации - управление частотой среза фильтра синта случайным образом. Отличный синт, на котором можно это попробовать, - это эмулятор `:tb303`:

en: Random seeds
ru: Начальные точки для генерации случайных чисел

en: So, what if you don't like this particular sequence of random numbers Sonic Pi provides? Well it's totally possible to choose a different starting point via `use_random_seed`. The default seed happens to be 0, so choose a different seed for a different random experience!
ru: Что, если вам не нравится конкретная последовательность случайных чисел, сгенерированная Sonic Pi? Что ж, очень легко выбрать другую начальную точку с помощью `use_random_seed`. Зерно (seed) по умолчанию равно 0, так что для другой генерации случайных чисел выбирайте другое зерно!

en: Consider the following:
ru: Рассмотрите следующее:

en: Every time you run this code, you'll hear the same sequence of 5 notes. To get a different sequence simply change the seed:
ru: Каждый раз, когда этот код выполняется, вы будете слышать одну и ту же последовательность из 5 нот. Чтобы получить другой порядок просто поменяйте начальную точку:

en: This will produce a different sequence of 5 notes. By changing the seed and listening to the results you can find something that you like - and when you share it with others, they will hear exactly what you heard too.
ru: В итоге получится другая последовательность из 5 нот. Изменяя начальную точку и слушая результат, можно выбрать что-тона свой вкус. Потом, когда вы поделитесь результатом с другими, они услышат в точности то же самое, что и вы.

en: A very common thing to do is to choose an item randomly from a list of known items. For example, I may want to play one note from the following: 60, 65 or 72. I can achieve this with `choose` which lets me choose an item from a list. First, I need to put my numbers in a list which is done by wrapping them in square brackets and separating them with commas: `[60, 65, 72]`. Next I just need to pass them to `choose`:
ru: Очень часто приходится выбирать вещь случайным образом из списка. Например, я могу захотеть проиграть одну ноту из набора: 60, 65 или 72. Я могу достичь этого с помощью функции `choose`, которая позволяет мне выбрать предмет из списка. Вначале, надо записать мои числа в список в квадратных скобках через запятую: `[60, 65, 72]`. Затем, надо просто передать их в таком виде функции `choose`:

en: Let's hear what that sounds like:
ru: Послушаем, как это звучит:

en: We've already seen `rrand`, but let's run over it again. It returns a random number between two values exclusively. That means it will never return either the top or bottom number - always something in between the two. The number will always be a float - meaning it's not a whole number but a fraction of a number. Examples of floats returned by `rrand(20, 110)`:
ru: Мы уже видели `rrand`, но пробежимся по ней вновь. Она возвращает случайную величину в промежутке двух чисел, не включая границы. Это значит, что никогда не будет выбрано самое большое или самое маленькое значение - всегда нечто между ними. Число всегда будет дробным, то есть не целым. Примеры дробных чисел, возвращаемых `rrand(20, 110)`:

en: rand
ru: случайный

en: This will return a random float between 0 (inclusive) and the max value you specify (exclusive). By default it will return a value between 0 and one. It's therefore useful for choosing random `amp:` values:
ru: Вернет случайное число с плавающей точкой между 0 (включительно), до максимального указанного вами (но не включая это число). По умолчанию числа лежат в промежутке от 0 до 1. Такая функция полезна для выбора случайного значения усиления (`amp:`):

en: dice
ru: игральная кость

en: Now, go and jumble up your code with some randomness!
ru: А теперь, пришла пора добавить немного неразберихи в вашу музыку за счет случайностей!

en: 5 Programming Structures
ru: 5 Программирование структур

en: Programming Structures
ru: Программирование структур

en: Now that you've learned the basics of creating sounds with `play` and `sample` and creating simple melodies and rhythms by `sleep`ing between sounds, you might be wondering what else the world of code can offer you...
ru: После того, как мы изучили основы создания звука при помощи `play` и `sample`, и сочинения простых мелодий и ритмов, расставляя задержки между ними, вам могло стать интересно, а что же ещё мир программирования может нам предложить...

en: Well, you're in for an exciting treat! It turns out that basic programming structures such as looping, conditionals, functions and threads give you amazingly powerful tools to express your musical ideas.
ru: Скажем так, вас ожидает захватывающее путешествие! Оказывается, что основные структуры программирования, такие как циклы, условные выражения, функции и потоки выполнения, предлагают нам очень мощные инструменты для выражения собственных музыкальных идей.

en: Let's get stuck in with the basics...
ru: Ограничимся лишь основами...

en: 5.1 Blocks
ru: 5.1 Блоки

en: Blocks
ru: Блоки

en: To do something with a chunk of code, we need to tell Sonic Pi where the code block *starts* and where it *ends*. We use `do` for start and `end` for end. For example:
ru: Чтобы сделать что-то с куском кода, нам надо сказать Sonic Pi, где этот блок кода *начинается*, и где он *заканчивается*. Для его начала мы используем `do`, а для обозначения конца - `end`. Пример:

en: 5.2 Iteration and Loops
ru: 5.2 Итерации и циклы

en: Iteration and Loops
ru: Итерации и циклы

en: So far we've spent a lot of time looking at the different sounds you can make with `play` and `sample` blocks. We've also learned how to trigger these sounds through time using `sleep`.
ru: До этого момента мы потратили немало времени, пробуя разные звуки, которые можно производить внутри блоков `play` и `sample`. Мы также изучили как разносить эти звуки во времени, используя `sleep`.

en: As you've probably found out, there's a *lot* of fun you can have with these basic building blocks. However, a whole new dimension of fun opens up when you start using the power of code to structure your music and compositions. In the next few sections we'll explore some of these powerful new tools. First up is iteration and loops.
ru: Как мы уже смогли выяснить, даже с этими простейшими блоками кода можно долго забавляться. Однако, совершенно новое измерение веселья откроется для вас, когда вы начнёте использовать мощь блоков кода для структурирования вашей музыки. В нескольких последующих главах мы рассмотрим некоторые из этих новых инструментов. Вначале идут итерации и циклы.

en: Repetition
ru: Повторение

en: Have you written some code you'd like to repeat a few times? For example, you might have something like this:
ru: Доводилось ли вам писать код, который вы бы хотели повторить несколько раз? Например, у вас могло получиться нечто подобное:

en: What if we wished to repeat this 3 times? Well, we could do something simple and just copy and paste it three times:
ru: Что, если мы захотим повторить это три раза? Что ж, можно было бы выбрать простейший путь и попросту продублировать код трижды:

en: Now that's a lot of code! What happens if you want to change the sample to `:elec_plip`? You're going to have to find all the places with the original `:elec_blup` and switch them over. More importantly, what if you wanted to repeat the original piece of code 50 times or 1000? Now that would be a lot of code, and a lot of lines of code to alter if you wanted to make a change.
ru: Этот код просто огромен! Как быть, если нам захочется поменять сэмпл на `:elec_plip`? Придется найти все места с изначальным `:elec_blup` и переписать их. Что ещё важнее, каким образом повторить кусок кода 50 раз или 1000? Это было бы и впрямь целая куча кода. Гигантское число строк пришлось бы изменять для каждой правки.

en: Iteration
ru: Итерации

en: Now isn't that much neater than cutting and pasting! We can use this to create lots of nice repeating structures:
ru: Ну, разве это не лучше дублирования? Много красивых структур может быть создано с использованием этой инструкции:

en: Nesting Iterations
ru: Вложенные Итерации

en: We can put iterations inside other iterations to create interesting patterns. For example:
ru: Еще можно поместить итерации внутрь других итераций и получить интересный рисунок. Например:

en: Looping
ru: Зацикливание

en: Now, get structuring your code with iteration and loops!
ru: Теперь, пришла пора создать интересные структуры из вашего кода при помощи итераций и циклов!

en: 5.3 Conditionals
ru: 5.3 Условные выражения

en: Conditionals
ru: Условные выражения

en: A common thing you'll likely find yourself wanting to do is to not only play a random note (see the previous section on randomness) but also make a random decision and based on the outcome run some code or some other code. For example, you might want to randomly play a drum or a cymbal. We can achieve this with an `if` statement.
ru: Часто, помимо игры произвольных нот (см. предыдущую главу), вы также будете хотеть принимать произвольные решения и выполнять либо одну, либо другую ветку кода, в зависимости от результата. Например, вы можете решить случайным образом сыграть звук барабана или звук тарелки. Мы можем достичь этого при помощи выражения `if`.

en: Flipping a Coin
ru: Подбрасывание монетки

en: Simple if
ru: Простое Условие

en: 5.4 Threads
ru: 5.4 Потоки

en: Threads
ru: Потоки

en: So you've made your killer bassline and a phat beat. How do you play them at the same time? One solution is to weave them together manually - play some bass, then a bit of drums, then more bass... However, the timing soon gets hard to think about, especially when you start weaving in more elements.
ru: Итак, вы написали чумовую бас-партию и заводной ритм. Как сыграть обе эти части одновременно? Одно из решений - переплести их вместе вручную - играть небольшую часть баса, затем немного от ударных, потом еще бас... Однако, вскоре становится очень сложно даже думать о том, как разместить это все во времени, особенно если вы начнёте добавлять новые элементы.

en: ==> Skipping thread creation: thread with name :amen already exists.
ru: ==> Пропуск создания потока: thread, поток с именем :amen уже существует.

en: 5.5 Functions
ru: 5.5 Функции

en: Press the Run button - and hear your function play. Where did the code go? How did Sonic Pi know what to play? Sonic Pi just remembered your function - so even after you deleted it from the buffer, it remembered what you had typed. This behaviour only works with functions created using `define` (and `defonce`).
ru: Нажмите кнопку "Выполнить", и убедитесь, что ваша функция играет. Куда же пропал код? Откуда Sonic Pi знал, что играть? Он просто запомнил вашу функцию даже после её удаления из буфера. Он запомнил что вы напечатали. Это работает только с функциями, которые создаются при помощи `define` (и `defonce`).

en: Parameterised functions
ru: Параметризованные функции

en: 5.6 Variables
ru: 5.6 Переменные

en: Communicating Meaning
ru: Присвоение значения

en: Managing Repetition
ru: Управление повторами

en: Capturing Results
ru: Захват результатов

en: Warning: Variables and Threads
ru: Внимание: переменные и потоки

en: Whilst variables are great for giving things names and capturing the results of things, it is important to know that they should typically only be used locally within a thread. For example, *don't do this*:
ru: Хотя переменные хороши для присвоения имени и сохранения результатов, важно знать что они обычно должны использоваться в потоке. Например, *не делайте так*:

en: In the above example we assign a ring of numbers to a variable `a` and then used it within two separate `live_loop`s. In the first live loop every `0.5`s we sort the ring (to `(ring 1, 2, 3, 4, 5, 6)`) and then print it out to the log. If you run the code, you'll find that the printed list *is not always sorted!*. This may surprise you - especially that sometimes the list is printed as sorted, and sometimes it is not. This is called non-deterministic behaviour and is the result of a rather nasty problem called a race-condition. The problem is due to the fact that the second live loop is also manipulating the list (in this case shuffling it) and by the time the list is printed, sometimes it has just been sorted and sometimes it has just been shuffled. Both live loops are racing to do something different to the same variable and every time round a different loop 'wins'.
ru: В примере выше мы присвоили ряд чисел переменной 'a' и затем использовали её в  двух отдельных 'live_loop`s'.  В первом живом цикле каждые '0,5' секунды мы сортируем кольцевой список (1, 2, 3, 4, 5, 6), затем отображаем результат в журнале.  Если ты запустишь код, ты увидишь, что выведенный список *не всегда отсортирован!*. Это может быть для тебя сюрпризом, ведь иногда список выводится отсортированным, а иногда нет. Это называется недетерминированным поведением и является результатом неприятной проблемы называемой гонкой состояний.  Проблема заключается в том, что второй живой цикл также работает с нашим кольцевым списком (в данном случае перемешивает его) и на момент вывода на экран список может быть как отсортирован, так и перемешан. Оба живых цикла  соревнуются сделать разные вещи с одной переменной и каждый раз 'побеждает' разный цикл.

en: There are two solutions to this. Firstly, *don't use the same variable in multiple live loops or threads*. For example, the following code will always print a sorted list as each live loop has its own separate variable:
ru: Есть два решения. Первое: *не использовать одну переменную в разных живых циклах или потоках*. Например, код ниже всегда выводит отсортированный список, поскольку каждый живой цикл имеет собственную отдельную переменную:

en: However, sometimes we do want to share things across threads. For example, the current key, BPM, synth etc. In these cases, the solution is to use Sonic Pi's special thread-safe state system via the fns `get` and `set`. This is discussed later on in section 10.
ru: Однако, иногда мы хотим поделиться чем-то между потоками. Например, текущей тональностью, BMP, синтом и т.д. В этом случае решением будет воспользоваться специальными потоко-безопасными состояниями системы Sonic Pi через функции 'get' и 'set. Это будет осуждаться в разделе 10.

en: 5.7 Thread Synchronisation
ru: 5.7 Синхронизация потоков

en: Thread Synchronisation
ru: Синхронизация потоков

en: Inherited Time
ru: Унаследованное время

en: Cue Names
ru: Имена сигналов синхронизации

en: Let's play with a few `cue` names:
ru: Попробуем запрограммировать что-нибудь с использованием нескольких имен `cue`:

en: Studio FX
ru: Студийные эффекты

en: One of the most rewarding and fun aspects of Sonic Pi is the ability to easily add studio effects to your sounds. For example, you may wish to add some reverb to parts of your piece, or some echo or perhaps even distort or wobble your basslines.
ru: Одной из наиболее стоящих и весёлых вещей в Sonic Pi является возможность легко добавить студийные эффекты к вашим звукам. Например, можно добавить  к частям вашей пьесы реверберацию или эхо, или даже исказить или заставить вибрировать ваши басы.

en: Guitar Pedals
ru: Гитарные педали

en: 6.1 Adding FX
ru: 6.1 Добавление эффектов

en: Adding FX
ru: Добавление эффектов

en: Sonic Pi's FX system uses blocks. So if you haven't read section 5.1 you might want to take a quick look and then head back.
ru: Система эффектов Sonic Pi использует блоки. Так что, если ты еще не прочел главу 5.1, было бы неплохо прежде её просмотреть и затем вернуться обратно.

en: Nesting FX
ru: Вложение эффектов

en: Discovering FX
ru: Исследование эффектов

en: wobble,
ru: колебание,

en: reverb,
ru: реверберации,

en: echo,
ru: эхо,

en: distortion,
ru: искажение,

en: slicer
ru: разрезание

en: 6.2 FX in Practice
ru: 6.2 Эффекты на практике

en: FX in Practice
ru: Практика использования эффектов

en: This is such a common pattern that `with_fx` supports an opt to do exactly this but without having to write the `16.times` block:
ru: Это настолько распространенный паттерн, что `with_fx` поддерживает опцию для выполнения именно этого, но без необходимости писать блок` 16.times`:

en: Both the `reps: 16` and `16.times do` examples will behave identically. The `reps: 16` essentially repeats the code in the `do/end` block 16 times so you can use them both interchangeably and choose the one that feels best for you.
ru: Обе записи: `reps: 16` и` 16.times do` будут вести себя одинаково. `Reps: 16` по сути повторяет код в блоке` do / end` 16 раз, так что вы можете использовать их оба взаимозаменяемо и выбрать тот, который вам удобнее.

en: 7 Control
ru: 7 Управление

en: Controlling running sounds
ru: Управление звуком во время воспроизведения

en: 7.1 Controlling Running Synths
ru: 7.1 Контроль выполняющихся синтов

en: Controlling Running Synths
ru: Управление играющим синтезатором

en: Non-controllable Options
ru: Неконтролируемые настройки

en: 7.2 Controlling FX
ru: 7.2 Контроль эффектов

en: Controlling FX
ru: Управление эффектами

en: 7.3 Sliding Options
ru: Настройки плавного изменения состояния

en: Sliding Opts
ru: Настройки плавного изменения состояния

en: Sliding is sticky
ru: Скольжение сохраняется

en: Sliding FX Opts
ru: Плавное изменение эффектов

en: 8 Data Structures
ru: 8 Структуры данных

en: Data Structures
ru: Структуры данных

en: Sometimes you may wish to represent and use more than one thing. For example, you may find it useful to have a series of notes to play one after another. Programming languages have data structures to allow you do exactly this.
ru: Иногда вам может потребоваться определить и использовать сразу несколько разных элементов. Например, вы можете посчитать полезным иметь последовательность нот, чтобы играть их одну за другой. Языки программирования имеют структуры данных, чтобы вы могли делать это.

en: 8.1 Lists
ru: 8.1 Списки

en: Playing a List
ru: Воспроизведение cписка

en: Accessing a List
ru: Доступ к списку

en: 8.2 Chords
ru: 8.2 Аккорды

en: Now, we're really getting somewhere. That looks a lot more pretty than the raw lists (and is easier to read for other people). So what other chords does Sonic Pi support? Well, a *lot*. Try some of these:
ru: Теперь мы действительно до чего-то добрались. Это выглядит намного симпатичнее, чем сырые списки (и это легче читать). А как на счёт других аккордов, Sonic Pi их поддерживает? Да, и *много*. Попробуйте некоторые из них:

en: 8.3 Scales
ru: Гаммы

en: Random notes
ru: Случайные ноты

en: Discovering Chords and Scales
ru: Исследование аккордов и гамм

en: 8.4 Rings
ru: Кольцевые списки

en: Rings
ru: Кольцевые списки

en: Creating Rings
ru: Создание колец

en: Indexing Rings
ru: Индексирование колец

en: Using Rings
ru: Использование колец

en: Scales and Chords are Rings
ru: Гаммы и аккорды тоже кольца

en: Ring Constructors
ru: Конструкторы колец

en: 8.5 Ring Chains
ru: Кольцевые цепи

en: Ring Chains
ru: Кольцевые цепи

en: Chain Commands
ru: Цепные методы

en: Multiple Chains
ru: Множественные цепи

en: Can you see how we can just create a long chain of these methods by just *sticking them together*. We can combine these in any order we want creating an extremely rich and powerful way of generating new rings from existing ones.
ru: Как вы видите, можно создавать длинные цепи из этих методов просто *склеивая их вместе*. Мы можем комбинировать их в любом порядке, в каком захотим, создавая чрезвычайно богатый и мощный способ генерации новых колец из существующих.

en: These rings have a powerful and important property. They are immutable which means that they can not change. This means that the chaining methods described in this section *do not change rings* rather they *create new rings*. This means you're free to share rings across threads and start chaining them within a thread knowing you won't be affecting any other thread using the same ring.
ru: Наши кольца обладают одним очень важным свойством. Оно заключается в том, что цепные методы, описанные в этом разделе *не изменяют кольца*, они *возвращают новые кольца*. Это значит, что вы можете разделять кольцо между потоками выполнения и использовать разные методы в разных потоках, зная, что не повлияете на другой поток, использующий то же самое кольцо.

en: Available Chain Methods
ru: Доступные цепные методы

en: Here's a list of the available chain methods for you to play with:
ru: Вот список доступных для вас цепных методов:

en: `.pick(3)` - returns a ring with the results of calling `.choose` 3 times
ru: `.pick (3)` - возвращает кольцо с результатами вызова `.choose` 3 раза

en: `.take(5)` - returns a new ring containing only the first 5 elements
ru: `.take(5)` - возвращает кольцо, содержащее первые 5 элементов исходного кольца

en: `.drop(3)` - returns a new ring with everything but the first 3 elements
ru: `.drop(3)` - возвращает кольцо, содержащее все элементы исходного кольца, кроме первых 3 элементов

en: `.butlast` - returns a new ring with the last element missing
ru: `.butlast` - возвращает новое кольцо с отсутствующим последним элементом

en: `.drop_last(3)` - returns a new ring with the last 3 elements missing
ru: `.drop_last(3)` - возвращает новое кольцо с отсутствующими 3 последними элементами

en: `.take_last(6)`- returns a new ring with only the last 6 elements
ru: `.take_last(6)`- возвращает кольцо, содержащее последние 6 элементов исходного кольца

en: `.stretch(2)` - repeats each element in the ring twice
ru: `.stretch(2)` - повторяет каждый элемент кольца дважды

en: `.repeat(3)` - repeats the entire ring 3 times
ru: `.repeat(3)` - повторяет всё кольцо 3 раза

en: `.mirror` - adds the ring to a reversed version of itself
ru: `.mirror` - добавляет кольцо к перевёрнутой версии себя

en: `.reflect` - same as mirror but doesn't duplicate middle value
ru: `.reflect` - то же, что и `.mirror`, но не дублирует средний элемент

en: `.scale(2)` - returns a new ring with all elements multiplied by 2 (assumes ring contains numbers only)
ru: `.scale(2)` -  возвращает новое кольцо все элементы которого умножены на 2 (если кольцо содержит только числа)

en: Of course, those chain methods that take numbers can take other numbers too! So feel free to call `.drop(5)` instead of `.drop(3)` if you want to drop the first 5 elements.
ru: Конечно, цепные методы, принимающие числовые аргументы, могут принимать и другие числа! Так что не стесняйтесь вызывать `.drop(5)` вместо `.drop(3)`, если вы хотите отбросить первые 5 элементов кольца.

en: 9 Live Coding
ru: 9 Лайв-кодинг

en: One of the most exciting aspects of Sonic Pi is that it enables you to write and modify code live to make music, just like you might perform live with a guitar. One advantage of this approach is to give you more feedback whilst composing (get a simple loop running and keep tweaking it till it sounds just perfect). However, the main advantage is that you can take Sonic Pi on stage and gig with it.
ru: Один из наиболее интересных аспектов Sonic Pi заключается в том, что он позволяет писать и модифицировать код вживую, играть музыку, как если бы вы выступали с гитарой. Одно из преимуществ такого подхода состоит в том, что он даёт вам больше обратной связи во время сочинения (просто начни выполнение цикла и продолжай настройку до тех пор, пока звук не станет идеальным). Однако, главное преимущество заключается в том, что вы можете взять Sonic Pi на сцену и выступать с ним.

en: In this section we'll cover the fundamentals of turning your static code compositions into dynamic performances.
ru: В этом разделе мы рассмотрим основы превращения статического кода ваших сочинений в динамичное исполнение.

en: Hold on to your seats...
ru: Держитесь за своё кресло...

en: 9.1 Live Coding Fundamentals
ru: 9.1 Основы лайв-кодинга

en: Now we've learned enough to really start having some fun. In this section we'll draw from all the previous sections and show you how you can start making your music compositions live and turning them into a performance. For that we'll need 3 main ingredients:
ru: Теперь мы узнали достаточно, чтобы начать по-настоящему развлекаться. В этом разделе мы будем черпать из всех предыдущих разделов и узнаем, как вы сможете делать свои музыкальные композиции живыми и превращать их в выступления. Для этого нам понадобится 3 основных компонента:

en: An ability to write code that makes sounds - CHECK!
ru: Умение писать код, который создаёт звук - ЕСТЬ!

en: An ability to write functions - CHECK!
ru: Умение писать функции - ЕСТЬ!

en: An ability to use (named) threads - CHECK!
ru: Умение использовать (именовать) потоки - ЕСТЬ!

en: Alrighty, let's get started. Let's live code our first sounds. We first need a function containing the code we want to play. Let's start simple. We also want to loop calls to that function in a thread:
ru: Чудненько, давайте начнём. Будем вживую кодировать наши первые звуки. Начнем с простого. Сначала нам нужна функция, содержащая код, который мы хотим проиграть. Ещё мы хотим зациклить вызовы этой функции в отдельном потоке:

en: If that looks a little too complicated to you, go back and re-read the sections on functions and threads. It's not too complicated if you've already wrapped your head around these things.
ru: Если это выглядит для вас довольно сложным, вернитесь и перечитайте разделы о функциях и потоках. Это не сложно, если раньше вы уже прокручивал эти вещи у себя в голове.

en: If you run this code, you'll hear note 50 repeating again and again...
ru: Если вы выполните этот код, то услышите ноту 50 повторяющуюся снова и снова...

en: Changing it up
ru: Изменяем это

en: Now, this is where the fun starts. Whilst the code is *still running* change 50 to another number, say 55, then press the Run button again. Woah! It changed! Live!
ru: Итак, вот где начинается веселье. В то время, как код *по-прежнему выполняется*, изменим 50 на другое число, скажем, на 55, и снова нажмём кнопку "Выполнить". Ого! Всё изменилось! Вживую!

en: 9.2 Live Loops
ru: 9.2 Живые циклы

en: 9.3 Multiple Live Loops
ru: Множество живых циклов

en: 9.4 Ticking
ru: 9.4 Тики

en: 10 Time State
ru: 10 Временное Состояние

en: Time State
ru: Временное Состояние

en: Often it is useful to have information that is *shared across multiple threads or live loops*. For example, you might want to share a notion of the current key, BPM or even more abstract concepts such as the current 'complexity' (which you'd potentially interpret in different ways across different threads). We also don't want to lose any of our existing determinism guarantees when doing this. In other words, we'd still like to be able to share code with others and know exactly what they'll hear when they run it. At the end of Section 5.6 of this tutorial we briefly discussed why we *should not use variables to share information across threads* due to a loss of determinism (in turn due to race conditions).
ru: Часто полезно иметь информацию, которая является *общей для нескольких потоков или живых циклов*. Например, тебе может понадобиться сделать общими значение текущей тональности, BMP или даже более отвлеченные понятия такие как текущая 'сложность' (которая может быть интерпретирована по-разному в разных потоках).  Мы также не хотим при этом потерять имеющуюся у нас гарантию определенности. Другими словами, мы все еще хотели бы иметь возможность делиться кодом с другими и точно знать, что они услышат, когда запустят его. В конце Раздела 5.6 этого руководства мы кратко обсудили, почему мы *не должны использовать переменные для обмена информацией между потоками* чтобы не потерять фактор детерминизма (из-за гонки состояний).

en: Meet `get` and `set`...
ru: Встречайте `get` и `set` ...

en: 10.1 Set and Get
ru: 10.1 Set и Get

en: Set and Get
ru: Set и Get

en: Sonic Pi has a global memory store called Time State. The two main things you do with it are to `set` information and `get` information. Let's dive deeper...
ru: Sonic PI имеет глобальное хранилище памяти, называемое Временным состоянием. В основном оно используется чтобы "установить" (set) информацию и "получить" (get)  информацию. Давайте нырнем глубже...

en: To store information into the Time State we need two things:
ru: Чтобы хранить информацию во Временном Состоянии нам нужны две вещи:

en: the information we want to store,
ru: информация, которую мы хотим сохранить,

en: a unique name (key) for the information.
ru: уникальное имя (ключ) для этой информации.

en: For example, we might want to store the number `3000` with the key `:intensity`. This is possible using the `set` function:
ru: Например, мы можем захотеть сохранить число `3000` с ключом `:intensity`. Это можно сделать используя функцию  `set`:

en: We can use any name for our key. If information has already been stored with that key, our new `set` will override it:
ru: Мы можем дать ключу любое имя. Если какая-то информация уже хранится под этим именем, наш новый `set` перезапишет её:

en: In the above example, as we stored both numbers under the same key, the last call to `set` 'wins', so the number associated with `:intensity` will be `3000` as the first call to `set` is effectively overridden.
ru: В примере выше, где мы сохранили оба числа под одним ключом, последний вызов `set` 'побеждает', поэтому число связанное с `:intensity` будет равно `3000`, так как первый вызов 'set'  эффективно перезаписан.

en: To fetch information from the Time State we just need the key we used to `set` it, which in our case is `:intensity`. We then just need to call `get[:intensity]` which we can see by printing out the result to the log:
ru: Для извлечения информации из Временного Состояния нам просто нужен ключ, который мы использовали в `set`, в нашем случае это `:intensity`. Тогда нам просто нужно вызвать `get[:intensity]`, результат которого выведем на экран:

en: print get[:intensity] #=> prints 3000
ru: print get[:intensity] #=> выведет 3000

en: Notice that calls to `get` can return information that was `set` in a previous run. Once a piece of information has been `set` it is available until either the information is overridden (just like we clobbered the `:intensity` value of `1000` to `3000` above) or Sonic Pi is closed.
ru: Обратите внимание, что запросы `get` могут возвращать информацию, которая была записана в `set` в предыдущем запуске исполнения кода. После того, как часть информации была записана в `set`, она становится доступной до тех пор, пока она либо не будет переопределена (точно так же, как мы переопределили значение`:intensity` от `1000` к ` 3000`), либо Sonic Pi не будет закрыт.

en: Multiple Threads
ru: Множество потоков выполнения

en: The main benefit of the Time State system is that it can be safely used across threads or live loops. For example, you could have one live loop setting information and another one getting it:
ru: Основное преимущество системы Time State заключается в том, что ее можно безопасно использовать в потоках или в живых циклах. Например, у вас может быть сделана установка для одного живого цикла, а другой может ее получить:

en: The nice thing about using `get` and `set` across threads like this is that it will always produce the same result every time you hit run. Go on, try it. See if you get the following in your log:
ru: Хорошая вещь об использовании `get` и` set` в потоках, подобных этому, заключается в том, что всегда будет выдаваться один и тот же результат всякий раз, когда вы запускаете исполнение кода. Попробуйте этом, и посмотрите, есть ли в вашем журнале следующее:

en: Try running it a few times - see, it's the same every time. This is what we call deterministic behaviour and it's really very important when we want to share our music as code and know that the person playing the code is hearing exactly what we wanted them to hear (just like playing an MP3 or internet stream sounds the same for all listeners).
ru: Попробуйте запустить этот код несколько раз - видите,  результат одинаков каждый раз. Это то, что мы называем детерминированным поведением, и это действительно очень важно, когда мы хотим поделиться своей музыкой в виде кода и знать, что человек, играющий код, слышит именно то, что мы хотели, чтобы он услышал (точно так же, как воспроизведение MP3 или интернет-стрим звучат одинаково для всех слушателей).

en: A Simple Deterministic State System
ru: Просто о системе детерминированных состояний

en: Back in Section 5.6 we discussed why using variables across threads can lead to random behaviour. This stops us from being able to reliably reproduce code such as this:
ru: В разделе 5.6 мы обсуждали, почему использование переменных в потоках может привести к случайному поведению. Это лишает нас возможности надежно воспроизводить код, такой как этот:

en: ## An Example of Non-Deterministic Behaviour
    ## (due to race conditions caused by multiple
    ## live loops manipulating the same variable
    ## at the same time).
    ##  
    ## If you run this code you'll notice
    ## that the list that's printed is
    ## not always sorted!
    a = (ring 6, 5, 4, 3, 2, 1)
    live_loop :shuffled do
      a = a.shuffle
      sleep 0.5
    end
    live_loop :sorted do
      a = a.sort
      sleep 0.5
      puts "sorted: ", a
    end
ru: ## Пример недетерминированного поведения
    ## (из-за гонки состояний, вызванной несколькими
    ## живыми циклами, манипулирующими одной и той же переменной
    ## в одно и то же время).
    ##
    ## Если вы запустите этот код, вы заметите
    ## что список, отображаемый в  журнале
    ## не всегда сортируется!
    a = (ring 6, 5, 4, 3, 2, 1)
    live_loop :shuffled do
      a = a.shuffle
      sleep 0.5
    end
    live_loop :sorted do
      a = a.sort
      sleep 0.5
      puts "sorted: ", a
    end

en: Let's take a look at how this might look using `get` and `set`:
ru: Давайте посмотрим, как это может выглядеть, используя `get` и` set`:

en: ## An Example of Deterministic Behaviour
    ## (despite concurrent access of shared state)
    ## using Sonic Pi's new Time State system.
    ##
    ## When this code is executed, the list that's
    ## printed is always sorted!
    set :a, (ring 6, 5, 4, 3, 2, 1)
    live_loop :shuffled do
      set :a, get[:a].shuffle
      sleep 0.5
    end
    live_loop :sorted do
      set :a, get[:a].sort
      sleep 0.5
      puts "sorted: ", get[:a]
    end
ru: ## Пример детерминированного поведения
    ## (несмотря на одновременный доступ к общему состоянию)
    ## используя новую систему Time State от Sonic Pi.
    ##
    ## Когда этот код выполняется, список,
    ## отображаемый в журнале, всегда отсортирован!
    set :a, (ring 6, 5, 4, 3, 2, 1)
    live_loop :shuffled do
      set :a, get[:a].shuffle
      sleep 0.5
    end
    live_loop :sorted do
      set :a, get[:a].sort
      sleep 0.5
      puts "sorted: ", get[:a]
    end

en: Notice how this code is pretty much identical to the version using a variable before it. However when you run the code, it behaves as you would expect with any typical Sonic Pi code - *it does the same thing every time* in this case thanks to the Time State system.
ru: Обратите внимание, что этот код в значительной степени идентичен версии, использующей переменную. Однако когда вы запускаете код, он ведет себя так, как вы ожидаете с любым типичным кодом Sonic Pi - * он делает то же самое каждый раз * в этом случае благодаря системе Time State.

en: Therefore, when sharing information across live loops and threads, use `get` and `set` instead of variables for deterministic, reproducible behaviour.
ru: Поэтому, когда вы делитесь информацией между живыми циклами и потоками, используйте `get` и` set` вместо переменных для детерминированного, воспроизводимого поведения.

en: 10.2 Sync
ru: Синхронизация

en: Sync
ru: Синхронизация

en: Waiting for Events
ru: В ожидании событий

en: In this example first we create a thread which waits for a `:foo` event to be added to the Time State. After this thread declaration we sleep for 2 beats and then `set` `:foo` to be `1`. This then releases the `sync` which then moves to the next line which is to trigger the `:ambi_lunar_land` sample.
ru: В этом примере мы сначала создаем поток, который ожидает в дальнейшем добавления события `: foo` в Time State. После этого, мы "спим" 2 такта, а затем посредством функции `set`устанавливаем для `: foo` значение `1`.  Это определяет функцию `sync`, которая в следующей строке воспроизводит сэмпл`: ambi_lunar_land`.

en: Note that `sync` always waits for *future events* and that it will block the current thread waiting for a new event. Also, it will inherit the logical time of the thread which triggered it via `set` or `cue` so it may also be used to sync time.
ru: Обратите внимание, что `sync` всегда ожидает * будущих событий * и блокирует текущий поток в ожидании нового события. Кроме того, он унаследует логическое время потока, который запустил его через `set` или` cue`, поэтому его также можно использовать для синхронизации времени.

en: Passing values into the Future
ru: Передача значений в будущее

en: In the example above we set `:foo` to `1` which we did nothing with. We can actually get this value from the thread calling `sync`:
ru: В приведенном выше примере мы установили для `: foo` значение` 1`, с которым ничего не сделали. На самом деле мы можем получить это значение из `sync`, вызывающего поток:

en: Note that values that are passed through `set` and `cue` must be thread safe - i.e. immutable rings, numbers, symbols or frozen strings. Sonic Pi will throw an error if the value you are attempting to store in the Time State is not valid.
ru: Обратите внимание, что значения, которые передаются через `set` и` cue`, должны быть потокобезопасными - то есть кольца, числа, символы или замороженные строки не должны изменяться. Sonic Pi выдаст ошибку, если значение, которое вы пытаетесь сохранить в Time State, недопустимо.

en: 10.3 Pattern Matching
ru: Сопоставление паттернов

en: Pattern Matching
ru: Сопоставление паттернов

en: When getting and setting information into the Time State, it's possible to use more complex keys than basic symbols such as `:foo` and `:bar`. You can also use URL style strings called paths such as `"/foo/bar/baz"`. Once we start working with paths, we can then start taking advantage of Sonic Pi's sophisticated pattern matching system to `get` and `sync` with 'similar' rather than 'identical' paths. Let's take a look.
ru: При получении и установке информации в Time State можно использовать более сложные ключи, чем основные символы, такие как `: foo` и`: bar`. Вы также можете использовать строки в стиле URL, которые называются пути (paths), например `" / foo / bar / baz "`. Как только мы начнем работать с путями, мы сможем воспользоваться преимуществами реализованной в Sonic Pi сложной системы сопоставления паттернов для того, чтобы пользоваться функциями `get` и `sync` с похожими, а не с полностью идентичными путями. Давайте взглянем на это.

en: Match any path segment
ru: Сопоставление любого сегмента пути

en: Let's assume we want to wait for the next event that has three path segments:
ru: Предположим, что мы хотим дождаться следующего события, которое имеет три сегмента пути:

en: This will match any Time State event with exactly three path segments, regardless of their names. For example:
ru: Это будет сопоставимо с любым событием Time State с тремя сегментами пути, независимо от их имен. Например:

en: However, it will *not* match paths with fewer or more path segments. The following will not match:
ru: Однако он * не будет * сопоставляться с путями с меньшим или большим количеством сегментов. Следующие пути не будут сопоставляться:

en: Each `*` means *any content*. So we could match paths with just one segment with `/*` or paths with five segments with `/*/*/*/*/*`
ru: Каждый символ `*` означает * любой контент *. Таким образом, мы можем сопоставлять между собой пути с одним сегментом с `/ *` или пути с пятью сегментами с `/ * / * / * / * / *`

en: Matching partial segments
ru: Сопоставление частичных сегментов

en: If we know what the segment is going to start or finish with, we can use a `*` in addition to a partial segment name. For example: `"/foo/b*/baz"` will match any path that has three segments, the first of which is `foo`, the last `baz` and the middle segment can be anything that starts with `b`. So, it would match:
ru: Если мы знаем, с чего начинается или заканчивается сегмент, мы можем использовать `*` в дополнение к частичному имени сегмента. Например: `" / foo / b * / baz "` будет соответствовать любому пути, который имеет три сегмента, первый из которых `foo`, последний` baz`,  а средний сегмент может быть любым, начинающимся с `b`. Таким образом, с этим будут сопоставимы следующие пути:

en: However, it wouldn't match the following:
ru: Однако, не будут сопоставимы следующие пути:

en: You can also place the `*` at the start of the segment to specify the last characters of a segment: `"/foo/*zz/baz"` which will match any 3 segment `cue` or `set` where the first segment is `foo`, the last is `baz` and the middle segment ends with `zz` such as `"cue "/foo/whizz/baz"`.
ru: Вы также можете поместить `*` в начале сегмента, чтобы указать последние символы сегмента: `" / foo / * zz / baz "`, который будет соответствовать любым 3 сегментам `cue` или` set`, где первый сегмент - `foo`, последний -` baz`, а средний сегмент заканчивается `zz`, например` "cue" / foo / whizz / baz "`.

en: Matching Nested Path Segments
ru: Сопоставление вложенных сегментов пути

en: Sometimes you don't know how many path segments you want to match. In these cases you can use the powerful double star: `**` such as `"/foo/**/baz"` which will match:
ru: Иногда вы не знаете, сколько сегментов пути вы хотите сопоставить. В этих случаях вы можете использовать возможности двойной звезды: `**`, например `" / foo / ** / baz "`. Тогда это будет сопоставимо с:

en: Matching Single Letters
ru: Сопоставление отдельных букв

en: You can use the `?` character to match against a single char such as `"/?oo/bar/baz"` which will match:
ru: Вы можете использовать символ `?` для сопоставления с одним символом. Например `" /? оo / bar / baz "`, что будет сопоставимо с:

en: Matching Multiple Words
ru: Сопоставление из множества слов

en: If you know that a segment may be one of a select number of words, you can use the `{` and `}` matchers to specify a list of choices such as `"/foo/{bar,beans,eggs}/quux"` which will only match the following:
ru: Если вы знаете, что сегмент может быть представлен словом из заданного набора, вы можете использовать сопоставители `{` и `}`, чтобы указать список вариантов. Например `" / foo / {bar, beans, eggs} / quux ", что может быть сопоставлено только со следующим:

en: Matching Multiple Letters
ru: Сопоставление из множества букв

en: Finally, you can match against a selection of letters if you use the `[` and `]` matchers to specify a list of choices such as `"/foo/[abc]ux/baz"` which will match only:
ru: Наконец, вы можете сопоставить сегмент из набора букв, если используете сопоставители `[` и `]`, чтобы указать список вариантов. Например путь `" / foo / [abc] ux / baz "`  будет сопоставим только с:

en: You can also use the `-` character to specify ranges of letters. For example `"/foo/[a-e]ux/baz"` which will match only:
ru: Вы также можете использовать символ `-` для указания диапазонов букв. Например, `" / foo / [a-e] ux / baz "`будет сопоставим только с:

en: Combining Matchers
ru: Объединение сопоставителей

en: OSC Pattern Matching
ru: Сопоставление паттернов по спецификации протокола OSC

en: Once you've mastered converting code to music, you might wonder - what's next? Sometimes the constraints of working purely within Sonic Pi's syntax and sound system can be exciting and put you into a new creative position. However, sometimes it is essential to break out of the code into the real world. We want two extra things:
ru: После того, как вы освоите преобразование кода в музыку, вы можете задаться вопросом - что дальше? Иногда ограничения работы исключительно в рамках синтаксиса и звуковой системы Sonic Pi могут быть захватывающими и перенести вас на новый творческий уровень. Однако иногда важно вырваться из кода в реальный мир. Мы хотим две дополнительные вещи:

en: To be able to convert actions in the real world into Sonic Pi events to code with
ru: Иметь возможность преобразовывать действия в реальном мире в события Sonic Pi с помощью кода

en: To be able to use Sonic Pi's strong timing model and semantics to control and manipulate objects in the real world
ru: Иметь возможность использовать сильную временную модель и семантику Sonic Pi для управления и манипулирования объектами в реальном мире

en: Luckily there's a protocol that's been around since the 80s that enables exactly this kind of interaction - MIDI. There's an incredible number of external devices including keyboards, controllers, sequencers, and pro audio software that all support MIDI. We can use MIDI to receive data and also use it to send data.
ru: К счастью, есть протокол, существующий с 80-х годов, который обеспечивает именно такое взаимодействие - MIDI. Существует невероятное количество внешних устройств, включая клавиатуры, контроллеры, секвенсоры и профессиональные аудио-приложения, которые поддерживают MIDI. Мы можем использовать MIDI для получения данных, а также использовать его и для отправки данных.

en: Sonic Pi provides full support for the MIDI protocol enabling you to connect your live code to the real world. Let's explore it further...
ru: Sonic Pi обеспечивает полную поддержку протокола MIDI, позволяя вам подключить ваш живой код к реальному миру. Давайте исследуем это поглубже ...

en: 11.1 MIDI In
ru: 11.1 Прием MIDI-данных

en: MIDI In
ru: Прием MIDI-данных

en: In this section we will learn how to connect a MIDI controller to send events into Sonic Pi to control our synths and sounds. Go and grab a MIDI controller such as a keyboard or control surface and let's get physical!
ru: В этом разделе мы узнаем, как подключить MIDI-контроллер для отправки событий в Sonic Pi для управления нашими синтезаторами и звуками. Хватай свою MIDI-клавиатуру или контроллер, и начнем работать физически!

en: Connecting a MIDI Controller
ru: Подсоединение MIDI контроллера

en: Receiving MIDI Events
ru: Прием событий MIDI

en: Once your device is connected, Sonic Pi will automatically receive events. You can see for yourself by manipulating your MIDI device and looking at the cue logger in the bottom right of the application window below the log (if this isn't visible go to Preferences->Editor->Show & Hide and enable the 'Show cue log' tickbox). You'll see a stream of events such as:
ru: Как только ваше устройство подключено, Sonic Pi будет автоматически получать от него события. Вы можете убедиться в этом сами, манипулируя вашим MIDI-устройством и поглядывая в регистратор сигналов в правом нижнем углу, под журналом (если его не видно, перейдите в «Настройки» -> «Редактор» -> «Показать/Скрыть» и включите «Показать журнал сигналов»). Вы увидите поток событий, таких как:

en: Once you can see a stream of messages like this, you've successfully connected your MIDI device. Congratulations, let's see what we can do with it!
ru: Как только вы увидите поток таких сообщений, вы успешно подключили ваше MIDI-устройство. Поздравляем! Давайте посмотрим, что мы можем с этим сделать!

en: MIDI Time State
ru: Временные состояние MIDI

en: These events are broken into two sections. Firstly there's the name of the event such as `/midi:nanokey2_keyboard:0:1/note_on` and secondly there's the values of the event such as `[18, 62]`. Interestingly, these are the two things we need to store information in Time State. *Sonic Pi automatically inserts incoming MIDI events into Time State*. This means you can `get` the latest MIDI value and also `sync` waiting for the next MIDI value using everything we learned in section 10 of this tutorial.
ru: Эти события разбиты на два раздела. Во-первых, есть имя события, например `/midi:nanokey2_keyboard:0:1/note_on`, а во-вторых, есть значения события, такие как` [18, 62] `. Интересно, что это две вещи, которые нам нужны для хранения информации в Time State. * Sonic Pi автоматически вставляет входящие события MIDI в Time State *. Это означает, что вы можете использовать `get`, чтобы получить последнее значение MIDI, а также использовать`sync` для ожидания следующего MIDI значения, применяя все, что мы узнали в разделе 10 этого руководства.

en: Controlling Code
ru: Контролируя код

en: Now we've connected a MIDI device, seen its events in the cue log and discovered that our knowledge of Time State is all we need to work with the events, we can now start having fun. Let's build a simple MIDI piano:
ru: Теперь мы подключили MIDI-устройство, увидели его события в журнале и обнаружили, что наше знание Time State - это все, что нам нужно для работы с этими событиями, теперь мы можем начать веселиться. Давайте создадим простое MIDI-пианино:

en: Update the code and hit Run again. Now the velocity of the keyboard is honoured. Next, let's get rid of that pesky pause.
ru: Обновите код и снова нажмите «Выполнить». Теперь зависимость громкости от скорости нажатия клавиш на клавиатуре соблюдается. Далее, давайте избавимся от этой досадной паузы.

en: Removing Latency
ru: Устранение задержки

en: Before we can remove the pause, we need to know why it's there. In order to keep all the synths and FX well-timed across a variety of differently capable CPUs, Sonic Pi schedules the audio *in advance* by 0.5s by default. (Note that this added latency can be configured via the fns `set_sched_ahead_time!` and `use_sched_ahead_time`). This 0.5s latency is being added to our `:piano` synth triggers as it is added to all synths triggered by Sonic Pi. Typically we really want this added latency as it means all synths will be well timed. However, this only makes sense for synths triggered by code using `play` and `sleep`. In this case, we're actually triggering the `:piano` synth with our external MIDI device and therefore don't want Sonic Pi to control the timing for us. We can turn off this latency with the command `use_real_time` which disables the latency for the current thread. This means you can use real time mode for live loops that have their timing controlled by `sync`ing with external devices, and keep the default latency for all other live loops. Let's see:
ru: Прежде чем мы сможем убрать эту паузу, нам нужно знать, почему она возникает. Чтобы обеспечить своевременную синхронизацию всех синтезаторов и эффектов на различных процессорах с различными возможностями, Sonic Pi по умолчанию планирует запуск аудио *заранее * на 0,5 секунды. (Обратите внимание, что эта дополнительная задержка может быть настроена через fns `set_sched_ahead_time!` и `use_sched_ahead_time`). Эта задержка 0,5 секунды добавляется и к нашим триггерам синтезатора `: piano`, поскольку она добавляется ко всем синтезаторам, запускаемым Sonic Pi. Как правило, мы действительно хотим добавить дополнительную задержку, поскольку это означает, что все синтезаторы будут рассчитаны вовремя. Однако это имеет смысл только для синтезаторов, запускаемых кодом с использованием `play` и` sleep`. В нашем случае мы фактически запускаем синтезатор `: piano` с помощью внешнего MIDI-устройства и поэтому не хотим, чтобы Sonic Pi контролировал время за нас. Мы можем отключить эту задержку с помощью команды `use_real_time`, которая отключает задержку для текущего потока. Это означает, что вы можете использовать режим реального времени для живых циклов, чье время контролируется путем `синхронизации` с внешними устройствами, и сохранять задержку по умолчанию для всех других живых циклов. Давайте взглянем на это:

en: Update your code to match the code above and hit Run again. Now we have a low latency piano with variable velocity coded in just 5 lines. Wasn't that easy!
ru: Обновите код, чтобы он соответствовал приведенному выше, и снова нажмите «Выполнить». Теперь у нас есть пианино с низкой задержкой и переменной скоростью, кодируемое всего за 5 строк. Это было не так уж и просто!

en: Getting Values
ru: Получение значений

en: Finally, as our MIDI events are going straight into the Time State, we can also use the `get` fn to retrieve the last seen value. This doesn't block the current thread and returns `nil` if there's no value to be found (which you can override by passing a default value - see the docs for `get`). Remember that you can call `get` in any thread at any time to see the latest matching Time State value. You can even use `time_warp` to jump back in time and call `get` to see past events...
ru: Наконец, поскольку наши MIDI-события идут прямо в Time State, мы также можем использовать функцию `get` для получения последнего значения. Это не блокирует текущий поток и не возвращает `nil`, если не найдено никакого значения (которое вы можете переопределить, передав значение по умолчанию - смотрите документацию по` get`). Помните, что вы можете вызвать `get` в любом потоке в любое время, чтобы увидеть последнее соответствующее значение Time State. Вы даже можете использовать `time_warp`, чтобы вернуться назад во времени, вызвать` get`  и увидеть прошедшие события ...

en: Now You are in Control
ru: Теперь контролируете Вы

en: The exciting thing now is that you can now use the same code structures to `sync` and `get` MIDI information from any MIDI device and do whatever you want with the values. You can now choose what your MIDI device will do!
ru: Самое захватывающее то, что теперь вы можете использовать одни и те же структуры кода для вызова функций `sync` и `get` в отношении MIDI-информации  с любого MIDI-устройства  и выполнения в дальнейшем любых действий с полученными значениями. Теперь вы можете выбирать, что будет делать ваше MIDI-устройство!

en: 11.2 MIDI Out
ru: 11.2 MIDI выход

en: In addition to receiving MIDI events we can also send out MIDI events to trigger and control external hardware synths, keyboards and other devices. Sonic Pi provides a full set of fns for sending various MIDI messages such as:
ru: В дополнение к получению MIDI-событий  мы также можем отправлять MIDI-события  для запуска и управления внешними аппаратными синтезаторами, клавиатурами и другими устройствами. Sonic Pi предоставляет полный набор функций для отправки различных MIDI-сообщений, таких как:

en: There are many other supported MIDI messages too - check out the API documentation for all the other fns that start with `midi_`.
ru: Также есть много других поддерживаемых MIDI-сообщений - ознакомьтесь с документацией API для остальных функций, начинающихся с `midi_`.

en: Connecting to a MIDI Device
ru: Подсоединение MIDI-устройств

en: In order to send a MIDI message to an external device, we must first have connected it. Check out the subsection 'Connecting a MIDI Controller' in section 11.1 for further details. Note that if you're using USB, connecting to a device which you're sending to (rather than receiving from) is the same procedure. However, if you're using the classic DIN connectors, make sure you connect to the MIDI out port of your computer. You should see your MIDI device listed in the preferences pane.
ru: Чтобы отправить MIDI-сообщение на внешнее устройство, мы должны сначала подключить его. Ознакомьтесь с подразделом «Подключение MIDI-контроллера» в разделе 11.1 для получения более подробной информации. Обратите внимание, что если вы используете USB, подключение к устройству, на которое вы отправляете сообщение (а не получаете от него), является той же процедурой. Однако, если вы используете классические DIN-разъемы, убедитесь, что вы подключены к MIDI-выходу вашего компьютера. Вы должны увидеть ваше MIDI-устройство в списке в панели настроек.

en: Sending MIDI events
ru: Отправка MIDI событий

en: The many `midi_*` fns work just like `play`, `sample` and `synth` in that they send a message at the current (logical) time. For example, to spread out calls to the `midi_*` fns you need to use `sleep` just like you did with `play`. Let's take a look:
ru: Многие `midi_ *` функции работают так же, как `play`,` sample` и `synth`, так как они отправляют сообщение в текущее (логическое) время. Например, чтобы распределить вызовы функций  `midi_ *` , вам нужно использовать `sleep`, как вы это делали с` play`. Давайте взглянем:

en: This will send a MIDI note on event to the connected MIDI device with velocity 50. (Note that Sonic Pi will automatically convert notes in the form `:e3` to their corresponding MIDI number such as 52 in this case.)
ru: Это отправит событие MIDI-note on на подключенное MIDI-устройство со скоростью нажатия клавиши 50. (Обратите внимание, что Sonic Pi автоматически преобразует ноты в форме `: e3` в соответствующий им номер MIDI, например, 52)

en: If your connected MIDI device is a synthesiser, you should be able to hear it playing a note. To disable it use `midi_note_off`:
ru: Если подключенное MIDI-устройство является синтезатором, вы должны услышать, как он воспроизводит ноту. Чтобы отключить ноту, используйте `midi_note_off`:

en: Selecting a MIDI device
ru: Выбор MIDI-устройства

en: By default, Sonic Pi will send each MIDI message to all connected devices on all MIDI channels. This is to make it easy to work with a single connected device without having to configure anything. However, sometimes a MIDI device will treat MIDI channels in a special way (perhaps each note has a separate channel) and also you may wish to connect more than one MIDI device at the same time. In more complicated setups, you may wish to be more selective about which MIDI device receives which message(s) and on which channel.
ru: По умолчанию Sonic Pi отправляет каждое MIDI-сообщение на все подключенные устройства на всех MIDI-каналах. Это облегчает работу с одним подключенным устройством без необходимости что-либо настраивать. Однако иногда MIDI-устройство будет обрабатывать MIDI-каналы особым образом, к примеру, если каждая нота имеет отдельный канал, или же если вы подключили более одного MIDI-устройства одновременно. В более сложных настройках вашего оборудования, вы можете пожелать иметь больше возможности выбирать относительно того, какое MIDI-устройство будет получает то или иное сообщение и по какому каналу.

en: We can specify which device to send to using the `port:` opt, using the device name as displayed in the preferences:
ru: Посредством опции `port:`и имени устройства, каким оно отображается в настройках, мы можем указать, к какому устройству желаем обратиться:

en: We can also specify which channel to send to using the `channel:` opt (using a value in the range 1-16):
ru: Мы также можем указать канал для отправки посредством опции `channel:` (используя значение в диапазоне 1-16):

en: Of course we can also specify both at the same time to send to a specific device on a specific channel:
ru: Конечно, мы также можем задействовать обе опции одновременно для отправки информации на конкретное устройство по определенному каналу:

en: MIDI Studio
ru: MIDI студия

en: Finally, a really fun thing to do is to connect the audio output of your MIDI synthesiser to one of the audio inputs of your soundcard. You can then control your synth with code using the `midi_*` fns and also manipulate the audio using `live_audio` and FX:
ru: Наконец, действительно забавная вещь - подключить аудиовыход вашего MIDI-синтезатора к одному из аудиовходов вашей звуковой карты. Тогда вы сможете управлять синтезатором с помощью кода посредством функций `midi_ *`, а также манипулировать звуком с помощью `live_audio` и FX:

en: (The fn `midi` is available as a handy shortcut to sending both note on and note off events with a single command. Check out its documentation for further information).
ru: (Функция `midi` доступна в виде удобных сокращений для отправки событий note on и note off одной командой. Для получения дополнительной информации ознакомьтесь с документацией).

en: In addition to MIDI, another way to get information in and out of Sonic Pi is via the network using a simple protocol called OSC - Open Sound Control. This will let you send messages to and from external programs (both running on your computer and on external computers) which opens up the potential for control way beyond MIDI which has limitations due to its 1980s design.
ru: В дополнение к MIDI, другой способ получать и выводить информацию из Sonic Pi, но уже через сеть, предполагает использование простого протокола OSC - Open Sound Control. Это позволит вам обмениваться сообщениями с внешними программами (как работающими на вашем компьютере, так и на других компьютерах), что открывает потенциальные возможности для контроля за пределами протокола MIDI, который имеет ограничения из-за его дизайна 1980-х годов.

en: For example, you could write a program in another programming language which sends and receives OSC (there are OSC libraries for pretty much every common language) and work directly with Sonic Pi. What you can use this for is only limited by your imagination.
ru: Например, вы можете написать программу на другом языке программирования, который отправляет и получает OSC (есть библиотеки OSC для почти всех распространенных языков) и работает непосредственно с Sonic Pi. То, для чего вы можете использовать это, ограничено только вашим воображением.

en: 12.1 Receiving OSC
ru: 12.1 Получение сообщений через протокол OSC

en: Receiving OSC
ru: Получение сообщений через протокол OSC

en: By default when Sonic Pi is launched it listens to port 4560 for incoming OSC messages from programs on the same computer. This means that without any configuration, you can send Sonic Pi an OSC message and it will be displayed in the cue log just like incoming MIDI messages. This also means that any incoming OSC message is also automatically added to the Time State which means you can also use `get` and `sync` to work with the incoming data - just like with MIDI and synchronising `live_loops` - see sections 5.7 and 10.2 to recap how this works.
ru: По умолчанию при запуске Sonic Pi он прослушивает порт 4560 для входящих сообщений OSC от программ на том же компьютере. Это означает, что без какой-либо дополнительной настройки вы можете отправить Sonic Pi сообщение OSC, и оно будет отображаться в журнале событий, как и входящие MIDI-сообщения. Любое входящее сообщение OSC автоматически добавляется в Time State, и вы можете использовать `get` и` sync` для работы с входящими данными - как с MIDI или синхронизацией `live_loops` - см. Разделы 5.7 и 10.2. Вспомним, как это работает.

en: A Basic OSC Listener
ru: Простой OSC-слушатель

en: Let's build a basic OSC listener:
ru: Давайте создадим простой OSC-слушатель:

en: In this example we described an OSC path `"/osc*/trigger/prophet"` which we're syncing on. This can be any valid OSC path (all letters and numbers are supported and the `/` is used like in a URL to break up the path to multiple words). The `/osc` prefix is added by Sonic Pi to all incoming OSC messages, so we need to send an OSC message with the path `/trigger/prophet` for our `sync` to stop blocking and the prophet synth to be triggered.
ru: В этом примере мы синхронизируем путь OSC, который описали как `"/osc*/trigger/prophet"`. Это может быть любой допустимый путь OSC (все буквы и цифры поддерживаются, а `/` используется, как и в URL-адресации, для разбиения пути на несколько слов). Префикс `/ osc` добавляется Sonic Pi ко всем входящим сообщениям OSC, поэтому нам нужно отправить сообщение OSC с путем` / trigger / prophet`, чтобы вызванная нами функция `sync` запустила синтезатор prophet.

en: Sending OSC to Sonic Pi
ru: Отправка OSC в Sonic Pi

en: We can send OSC to Sonic Pi from any programming language that has an OSC library. For example, if we're sending OSC from Python we might do something like this:
ru: Мы можем отправить OSC в Sonic Pi с любого языка программирования, который имеет библиотеку OSC. Например, если мы отправляем OSC из Python, мы можем сделать что-то вроде этого:

en: Or, if we're sending OSC from Clojure we might do something like this from the REPL:
ru: Или, если мы отправляем OSC из Clojure, мы можем сделать что-то вроде этого из REPL:

en: Receiving from External Machines
ru: Получение данных от удаленных машин

en: Note, some programs such as TouchOSC for iPhone and Android support sending OSC as a standard feature. So, once you're listening to remote machines and know your IP address you can instantly start sending messages from apps like TouchOSC which enable you to build your own custom touch controls with sliders, buttons, dials etc. This can provide you with an enormous range of input options.
ru: Обратите внимание, что некоторые программы, такие как TouchOSC для iPhone и Android, поддерживают отправку OSC в качестве стандартной функции. Так, включив опцию прослушивания входящих сообщений от удаленных машин и зная свой IP-адрес, вы можете мгновенно начать отправку сообщений из приложений, вроде TouchOSC, которые позволяют создавать собственные сенсорные элементы управления с помощью слайдеров, кнопок, валкодеров и т. Д. Это может предоставить вам огромный диапазон вариантов ввода управляющих данных.

en: 12.2 Sending OSC
ru: 12.2 Отправка OSC

en: Sending OSC
ru: Отправка OSC

en: In addition to receiving OSC and working with it using Time State, we can also send out OSC messages in time with our music (just like we can send out MIDI messages in time with our music). We just need to know which IP address and port we're sending to. Let's give it a try:
ru: В дополнение к получению OSC и работе с ним, используя Time State, мы также можем отправлять сообщения OSC одновременно с музыкой, исполняемой посредством нашего кода (точно так же, как мы можем одновременно с этим отправлять и MIDI-сообщения). Нам просто нужно знать, на какой IP-адрес и порт мы отправляем. Давайте попробуем:

en: Sending OSC to other programs
ru: Отправка OSC в другие программы

en: Of course, sending OSC messages to ourselves may be fun but it's not that useful. The real benefit starts when we send messages to other programs:
ru: Конечно, отправка сообщений OSC самому себе может быть забавной, но это не так полезно. Реальная польза начинается, когда мы отправляем сообщения в другие программы:

en: In this case we're assuming there's another program on the same machine listening to port 123456. If there is, then it will receive a `"/hello/world` OSC message with which it can do what it wants.
ru: В этом случае мы предполагаем, что есть другая программа на том же компьютере, которая прослушивает порт 123456. Если это так, то она получит сообщение OSC "/ hello / world`, с которым она сможет сделать все, что захочет.

en: If our program is running on another machine, we need to know its IP address which we use instead of `"localhost"`:
ru: Если наша программа работает на другом компьютере, нам нужно знать ее IP-адрес, который мы используем вместо `" localhost "`:

en: Now we can send OSC messages to any device reachable to us via our local networks and even the internet!
ru: Теперь мы можем отправлять сообщения OSC на любое доступное нам устройство через наши локальные сети и даже через Интернет!

en: 13 Multichannel Audio
ru: 13 Многоканальное аудио

en: Multichannel Audio
ru: Многоканальное аудио

en: So far, in terms of sound production, we've explored triggering synths and recorded sounds via the fns `play`, `synth` and `sample`. These have then generated audio which has played through our stereo speaker system. However, many computers also have the ability to input sound, perhaps through a microphone, in addition to the ability to send sound out to more than two speakers. Often, this capability is made possible through the use of an external sound card - these are available for all platforms. In this section of the tutorial we'll take a look at how we can take advantage of these external sound cards and effortlessly work with multiple channels of audio in and out of Sonic Pi.
ru: До сих пор, с точки зрения звукового производства, мы исследовали запуск синтезаторов и записанных звуков через функции `play`,` synth` и `sample`. Затем они генерировали звук, который воспроизводился через нашу стерео систему. Тем не менее, многие компьютеры также имеют возможность ввода звука, например, через микрофон, в дополнение к возможности отправлять звук на более чем две колонки. Часто эта возможность становится доступной благодаря использованию внешней звуковой карты (существуют устройства для всех платформ). В этом разделе руководства мы рассмотрим, как мы могли бы использовать преимущества этих внешних звуковых карт и без усилий работать в Sonic Pi с несколькими каналами входящего и исходящего аудио.

en: 13.1 Sound In
ru: 13.1 Аудио вход

en: Sound In
ru: Аудио вход

en: One simple (and perhaps familiar) way of accessing sound inputs is using our friend `synth` by specifying the `:sound_in` synth:
ru: Одним простым (и, должно быть, уже знакомым) способом доступа к аудио входам является использование нашего друга `synth` с указанием для него пути `: sound_in`:

en: This will operate just like any synth such as `synth :dsaw` with the exception that the audio generated will be read directly from the first input of your system's sound card. On laptops, this is typically the built-in microphone, but if you have an external sound card, you can plug any audio input to the first input.
ru: Это будет работать так же, как и любой синтезатор, такой как «synth: dsaw», за исключением того, что сгенерированный звук будет считываться непосредственно с первого входа звуковой карты вашей системы. На ноутбуках это обычно встроенный микрофон, но если у вас есть внешняя звуковая карта, вы можете подключить любой аудиовход к первому входу.

en: Increasing the Duration
ru: Увеличение длительности

en: One thing you might notice is that just like `synth :dsaw` the `:sound_in` synth only lasts for 1 beat as it has a standard envelope. If you'd like to keep it open for a little longer, change the ADSR envelope settings. For example the following will keep the synth open for 8 beats before closing the connection:
ru: Одна вещь, которую вы могли бы заметить, это то, что как `synth: dsaw`, синтезатор`: sound_in` длится всего 1 такт, поскольку к нему применяется стандартная огибающая. Если вы хотите, чтобы он звучал немного дольше, измените настройки огибающей ADSR. Например, следующий код будет ближайшие 8 тактов держать открытым аудиовход для нашего синтезатора:

en: Of course, just like any normal synth, you can easily layer on effects with the FX block:
ru: Конечно, как и на любой обычный синтезатор, вы можете легко накладывать на него эффекты с помощью FX-блока:

en: If you have plugged in a guitar to your first input, you should be able to hear it with distortion and reverb until the synth terminates as expected.
ru: Если вы подключили гитару к первому входу, вы должны услышать ее с искажением и реверберацией, пока исполняется код.

en: You are free to use the `:sound_in` synth as many times as you like concurrently (just like you would do with any normal synth). For example, the following will play two `:sound_in` synths at the same time - one through distortion and one through reverb:
ru: Вы можете использовать синтезатор `: sound_in`одновременно столько раз, сколько вам нравится (точно так же, как вы делаете это с любым обычным синтезатором). Например, следующий код будет воспроизводить два синтезатора `: sound_in` одновременно - один с искажением, а другой с реверберацией:

en: Multiple Inputs
ru: Многоканальный вход

en: You can select which audio input you want to play with the `input:` opt. You can also specify a stereo input (two consecutive inputs) using the `:sound_in_stereo` synth. For example, if you have a sound card with at least three inputs, you can treat the first two as a stereo stream and add distortion and the third as a mono stream and add reverb with the following code:
ru: Вы можете выбрать, какой аудиовход вы хотите воспроизвести, с помощью опции `input:`. Вы также можете указать стереовход (два последовательных входа), используя синтезатор `: sound_in_stereo`. Например, если у вас есть звуковая карта с по крайней мере тремя входами, вы можете рассматривать первые два как стереопоток и добавлять искажения, а третий - как монопоток и добавлять реверберацию со следующим кодом:

en: Potential Issues
ru: Потенциальные сложности

en: However, although this is a useful technique, there are a couple of limitations to this approach. Firstly, it only works for a specific duration (due to it having an ADSR envelope) and secondly, there's no way to switch the FX around once the synth has been triggered. Both of these things are typical requests when working with external audio feeds such as microphones, guitars and external synthesisers. We'll therefore take a look at Sonic Pi's solution to the problem of manipulating a (potentially) infinite stream of live audio input: `live_audio`.
ru: Однако, хотя это и действенный метод, у этого подхода есть несколько ограничений. Во-первых, он работает только в течение определенного периода времени (из-за наличия огибающей ADSR), и, во-вторых, нет возможности переключать эффекты после запуска исполнения кода. Обе эти вещи являются типичными запросами при работе с внешними аудиопотоками от микрофонов, гитар и внешних синтезаторов. Поэтому мы рассмотрим предлагаемое Sonic Pi решения проблемы (потенциально) бесконечного потока живого аудиовхода: `live_audio`.

en: 13.2 Live Audio
ru: 13.2 Живое аудио

en: Live Audio
ru: Живое аудио

en: The `:sound_in` synth as described in the previous section provides a very flexible and familiar method for working with input audio. However, as also discussed it has a few issues when working with a single input of audio as a single instrument (such as a voice or guitar). By far the best approach to working with a single continuous stream of audio is to use `live_audio`.
ru: Синтез `: sound_in`, как описано в предыдущем разделе, предоставляет очень гибкий и знакомый метод для работы с входящим аудио. Однако, как уже говорилось, у него есть несколько проблем при работе с отдельным аудио входом в смысле отдельного инструмента (например, вашего голоса или гитары). Безусловно, лучший подход к работе с отдельным непрерывным аудиопотоком - использовать live_audio.

en: A Named Audio Input
ru: Именованный аудиовход

en: `live_audio` shares a couple of core design constraints with `live_loop` (hence the similar name). Firstly it must have a unique name and secondly only one `live_audio` stream with that name may exist at any one time. Let's take a look:
ru: `live_audio` разделяет с` live_loop`пару основных ограничений, связанных с дизайном ядра Sonic Pi (отсюда и похожее имя). Во-первых, каждый объект такого типа должен иметь уникальное имя. Во-вторых, в любой момент времени может существовать только один поток `live_audio` с таким именем. Давайте взглянем:

en: This code will act in a similar fashion to `synth :sound_in` with some key differences: it runs forever (until you explicitly stop it) and you can *move* it to new FX contexts dynamically.
ru: Этот код будет действовать подобно `synth: sound_in` с некоторыми ключевыми отличиями: он работает постоянно (пока вы явно его не остановите), и вы можете  *перемещать* его в новые FX-контексты динамически.

en: Working with FX
ru: Работа с эффектами

en: On initial triggering `live_audio` works exactly as you might expect it to work with FX. For example, to start a live audio stream with added reverb simply use a `:reverb` FX block:
ru: При первоначальном запуске, `live_audio` работает с FX точно так, как вы и ожидаете. Например, чтобы запустить живой аудиопоток с добавлением реверберацией, нужно просто применить FX-блок `: reverb`:

en: However, given that `live_audio` runs forever (at least until you stop it) it would be pretty limiting if, like typical synths, the live audio was bound within the `:reverb` FX for its entire existence. Luckily this is not the case and it was designed to be easy to move between different FX. Let's try it. Run the code above to hear live audio coming directly from the first input of your sound card. Note, if you're using a laptop, this will typically be out of your built-in microphone, so it's recommended to use headphones to stop feedback.
ru: Однако, учитывая, что `live_audio` работает постоянно (по крайней мере, до тех пор, пока вы его не остановите), нас сильно бы ограничило, если, как и уже известные вам обычные синтезаторы, живой аудио поток так же был бы связан с эффектом `: reverb` все время своей работы. К счастью, это не тот случай, и эта функция была разработана  так, чтобы было легко перемещаться между различными FX. Давай попробуем. Запустите приведенный выше код, чтобы услышать живой звук, поступающий непосредственно с первого входа вашей звуковой карты. Обратите внимание, что если вы используете ноутбук, это, как правило, ваш встроенный микрофон, поэтому рекомендуется использовать наушники, чтобы пресечь обратную связь между микрофоном и динамиками.

en: Now, whilst you're still hearing the audio live from the sound card with reverb, change the code to the following:
ru: Теперь, пока вы все еще слышите звук в реальном времени с звуковой карты с реверберацией, измените код на следующий:

en: Now, hit Run, and you'll immediately hear the audio played through the echo FX and no longer through reverb. If you wanted them both, just edit the code again and hit Run:
ru: Теперь нажмите Выполнить, и вы сразу услышите звук, воспроизводимый через блок эффекта эхо, вместо реверберации. Если вы хотите слышать их оба, просто отредактируйте код еще раз и нажмите Выполнить:

en: It's important to point out that you can call `live_audio :foo` from any thread or live loop and it will move the live audio synth to *that* thread's current FX context. You could therefore easily have multiple live loops calling `live_audio :foo` at different times resulting in the FX context being automatically swapped around for some interesting results.
ru: Важно отметить, что вы можете вызывать `live_audio: foo` из любого потока или живого цикла, и он будет перемещать живое аудио в текущий FX-контекст *этого* потока. Поэтому, для получения некоторых интересных результатов, вы можете легко иметь несколько живых циклов, вызывающих `live_audio: foo` в разное время, от чего FX-контекст будет автоматически меняться.

en: Stopping live audio
ru: Остановка живого аудио

en: Unlike standard synths, as `live_audio` has no envelope, it will continue running forever (even if you delete the code, just like a function is still defined in memory if you delete the code in the editor). To stop it, you need to use the `:stop` arg:
ru: В отличие от стандартных синтезаторов, к `live_audio` не применяется огибающая, поэтому он будет работать постоянно (даже если вы удалите код, точно так же, как функция все еще определена в памяти, даже если вы удалите код в редакторе). Чтобы остановить его, вам нужно использовать аргумент `: stop` :

en: It can easily be restarted by calling it without the `:stop` arg again:
ru: Его можно легко перезапустить, выполнив код без аргумента `: stop`:

en: Additionally all running live audio synths are stopped when you hit the global Stop button (as with all other running synths and FX).
ru: Кроме того, все запущенные живые звуковые потоки останавливаются, когда вы нажимаете глобальную кнопку «Стоп» (это работает и для всех других исполняемых синтезаторов и эффектов).

en: Stereo input
ru: Стерео вход

en: With respect to audio channels, by default `live_audio` acts similarly to the `:sound_in` synth in that it takes a single mono input stream of audio and converts it to a stereo stream using the specified panning. However, just like `:sound_in_stereo` it's also possible to tell `live_audio` to read two consecutive audio inputs and treat them as the left and right channels directly. This is achieved via the `:stereo` opt. For example, to treat input 2 as the left signal and input 3 as the right signal, you need to configure the `input:` opt to 2 and enable stereo mode as follows:
ru: Что касается аудиоканалов, то по умолчанию `live_audio` работает аналогично синтезатору`: sound_in` в том смысле, что он принимает отдельный монофонический входной аудио поток и преобразует его в стереопоток, используя заданное панорамирование. Однако, как и в случае `: sound_in_stereo`, можно также указать` live_audio`, читать два последовательных аудиовхода и обрабатывать их напрямую как левый и правый каналы. Это достигается через опцию `: stereo`. Например, чтобы обрабатывать вход 2 как левый канал, а вход 3 - как правый канал, необходимо указать опции `input:` значение 2 и включить стереорежим следующим образом:

en: Note that once you have started a live audio stream in stereo mode, you cannot change it to mono without stopping and starting. Similarly, if you start it in the default mono mode, you can't switch to stereo without starting and stopping the stream.
ru: Обратите внимание, что после запуска потока живого аудио в режиме стерео вы не можете изменить его на моно без остановки и перезапуска. Точно так же, если вы запустите его в монофоническом режиме по умолчанию, вы не сможете переключиться на стерео без перезапуска потока.

en: 13.3 Sound Out
ru: 13.3 Аудио выход

en: Sound Out
ru: Аудио выход

en: So far in this section we've looked at how to get multiple streams of audio into Sonic Pi - either through the use of the `:sound_in` synth or via the powerful `live_audio` system. In addition to working with multiple streams of input audio, Sonic Pi can also output multiple streams of audio. This is achieved via the `:sound_out` FX.
ru: До сих пор в этом разделе мы рассматривали, как получить несколько потоков аудио в Sonic Pi - это возможно либо с помощью синтезатора `: sound_in`, либо с помощью мощной системы` live_audio`. В дополнение к работе с несколькими потоками входного аудио, Sonic Pi также может выводить несколько аудио потоков. Это достигается с помощью FX-контектса `: sound_out` .

en: Output contexts
ru: Выходные контексты

en: Let's quickly recap on how Sonic Pi's synths and FX output their audio to their current FX context. For example, consider the following:
ru: Давайте быстро вспомним, как синтезаторы и эффекты в Sonic Pi выводят свое аудио в текущий контекст FX. Рассмотрим следующее:

en: The simplest way to understand what's happening with the audio stream is to start at the innermost audio context and work our way out. In this case, the innermost context is labelled `A` and is the `:bd_haus` sample being triggered. The audio for this goes directly into its context which is `B` - the `:echo` FX. This then adds echo to the incoming audio and outputs it to its context which is `C` - the `:reverb` FX. This then adds reverb to the incoming audio and outputs to its context which is the top level - the left and right speakers (outputs 1 and 2 in your audio card). The audio flows outwards with a stereo signal all the way through.
ru: Самый простой способ понять, что происходит с аудиопотоком, - это начать с аудио контекста, находящегося ближе всего к центру блока, и двигаться от него наружу. В этом случае самый внутренний контекст, представляющий собой исполняемый сэмпл`: bd_haus`, пометим как `A`. Аудио из него идет напрямую в его контекст, который назовем `B` - это эффект`: echo`. Это добавляет эхо к входящему аудио и выводит его в его контекст `C` - эффект `: reverb`. Затем к входящему потоку аудио добавляется реверберация и он выводится в контекст, который является самым верхним уровнем - это левый и правый динамики (выходы 1 и 2 на вашей звуковой плате). Аудио движется от начала до выхода на динамики, будучи на всем протяжении стереофоническим потоком.

en: Sound Out FX
ru: Аудио выход FX

en: The above behaviour is true for all synths (including `live_audio`) and the majority of FX with the exception of `:sound_out`. The `:sound_out` FX does two things. Firstly it outputs its audio to its external context as described above. Secondly it *also* outputs its audio directly to an output on your sound card. Let's take a look:
ru: Вышеуказанное поведение верно для всех синтезаторов (включая `live_audio`) и большинства эффектов за исключением`: sound_out`. FX-контектс `: sound_out` делает две вещи. Во-первых, он выводит звук во внешний контекст по отношению к себе контекст, как описано выше. Во-вторых, он * также * выводит звук напрямую на выход звуковой карты. Давайте взглянем на это:

en: In this example, our `:bd_haus` sample outputs its audio to its external context which is the `:sound_out` FX. This in turn outputs its audio to its external context the `:reverb` FX (as expected). However, it *also* outputs a mono mix to the 3rd output of the system's soundcard. The audio generated within `:sound_out` therefore has two destinations - the `:reverb` FX and audio card output 3.
ru: В этом примере наш сэмпл `: bd_haus` выводит свое аудио во внешний контекст, который является FX-контекстом `: sound_out`. Это в свою очередь выводит звук далее во внешний  FX-контекст `: reverb` (как и ожидалось). Однако он * также * выводит монофонический микс на 3-й выход звуковой карты системы. Поэтому звук, сгенерированный внутри `: sound_out`, имеет два назначения - FX-контекст `: reverb` и выход звуковой карты 3.

en: Mono and Stereo out
ru: Моно и стерео выходы

en: As we've seen, by default, the `:sound_out` FX outputs a mono mix of the stereo input to a specific channel in addition to passing the stereo feed to the outer context (as expected). If outputting a mono mix isn't precisely what you want to do, there are a number of alternative options. Firstly, by using the `mode:` opt you can choose to output just the left or just the right input signal to the audio card. Or you can use the `:sound_out_stereo` FX to output to two consecutive sound card outputs. See the function documentation for more information and examples.
ru: Как мы уже видели, по умолчанию FX-контекст `: sound_out` выводит монофонический микс стереовхода на определенный канал в дополнение к передаче стереофонического канала во внешний контекст (как и ожидалось). Если вывод моно микса не совсем то, что вы хотите сделать, есть ряд альтернативных вариантов. Во-первых, используя опцию `mode:`, вы можете задать вывод только левого или только правого входного сигнала на звуковую карту. Или вы можете использовать FX-контекст `: sound_out_stereo` для вывода аудио на два последовательных выхода звуковой карты. Смотрите документацию функций для получения дополнительной информации и примеров их работы.

en: Direct Out
ru: Прямой выход

en: As we have also seen, the default behaviour for `:sound_out` and `:sound_out_stereo` is to send the audio both to their external context (as is typical of all FX) *and* to the specified output on your soundcard. However, occasionally you may wish to *only* send to the output on your soundcard and not to the external context (and therefore not have any chance of the sound being mixed and sent to the standard output channels 1 and 2). This is possible by using the standard FX opt `amp:` which operates on the audio *after* the FX has been able to manipulate the audio:
ru: Как мы также видели, поведение по умолчанию для `: sound_out` и`: sound_out_stereo` заключается в отправке аудио как во внешний контекст (что типично для всех эффектов), так *и * на указанный выход на вашей звуковой карте. Однако иногда вам может потребоваться * только * отправить аудио на выход звуковой карты, а не во внешний контекст (, следовательно, без микширования и передачи аудио на стандартные выходные каналы 1 и 2). Это возможно при использовании стандартной опции FX-контекста `amp:`, который работает с аудио *после того*, как FX-контекст смог бы на это аудио повлиять:

en: In the above example, the `:loop_amen` sample is sent to its outer context, the `:sound_out` FX. This then sends a mono mix to audio card output 3 and then multiplies the audio by 0 which essentially silences it. It is this silenced signal which is then sent out to the `:sound_out`'s outer context which is the standard output. Therefore with this code, the default output channels will not receive any audio, and channel 3 will receive a mono mix of the amen drum break.
ru: В приведенном выше примере сэмпл `: loop_amen` отправляется во внешний FX-контекст `: sound_out` . Затем он отправляет монофонический микс на выход 3 звуковой карты, а затем умножает звук на 0, что, по сути, приводит к его отключению. Именно этот заглушенный сигнал затем отправляется во внешний контекст `: sound_out`, который является стандартным выходом. Поэтому с этим кодом выходные каналы по умолчанию не будут принимать никакого звука, а 3-й канал получит монофонический микс из amen drum break.

en: This concludes the Sonic Pi introductory tutorial. Hopefully you've learned something along the way. Don't worry if you feel you didn't understand everything - just play and have fun and you'll pick things up in your own time. Feel free to dive back in when you have a question that might be covered in one of the sections.
ru: На этом вводное руководство Sonic Pi завершено. Надеюсь, вы чему-то научились на этом пути. Не беспокойтесь, если вы чувствуете, что не все поняли - просто играйте и развлекайтесь, и вы доберете недостающее в свое время. Не стесняйтесь возвращаться к этому руководству, когда у вас возникает вопрос, который мог быть рассмотрен в одном из разделов.

en: Finally, I also invite you to take a deeper look at the rest of the documentation in this help system. There are a number of features that haven't been covered in this tutorial that are waiting for your discovery.
ru: Наконец, я также приглашаю вас более подробно ознакомиться с остальной документацией в справочной системе. Существует ряд функций, которые не были рассмотрены в этом руководстве, и которые еще ожидают быть открытыми вами.

en: So play, have fun, share your code, perform for your friends, show your screens and remember:
ru: Так что играйте, веселитесь, делитесь своим кодом, выступайте для друзей, показывайте свои экраны и помните:

en: *There are no mistakes, only opportunities.*
ru: *Здесь нет ошибок, только возможности.*

en: A Appendix A - MagPi Articles
ru: A Аппендикс A - Статьи журнала MagPi

en: MagPi Articles
ru: Статьи MagPi

en: Appendix A collects all the Sonic Pi articles written for the MagPi magazine.
ru: В Приложении A собраны статьи о Sonic Pi, выходившие в журнале MagPi.

en: Dive into Topics
ru: Погружение в тематику

en: These articles aren't meant to be read in any strict order and contain a lot of cross-over material from the tutorial itself. Rather than try and teach you all of Sonic Pi, they instead each focus on a specific aspect of Sonic Pi and cover it in a fun and accessible way.
ru: Эти статьи не были задуманы для чтения в каком-либо определённом порядке и содержат много перекрёстных ссылок на материалы из разных глав этого учебника. Вместо того, чтобы пытаться рассказать вам обо всём в Sonic Pi, эти статьи фокусируются на определённом аспекте и подают это в весёлой и доступной форме.

en: Read the MagPi
ru: Читая MagPi

en: You can see them in their glorious professionally typeset form in the free PDF downloads of The MagPi here: https://www.raspberrypi.org/magpi/
ru: Вы можете прочесть эти статьи в великолепном, профессионально оформленном виде, бесплатно загрузив их в формате PDF из [MagPi](https://www.raspberrypi.org/magpi/)

en: Suggest a Topic
ru: Предложить тематику

en: If you don't see a topic that interests you covered in these articles - why not suggest one? The easiest way to do that is to tweet your suggestion to [@Sonic_Pi](http://twitter.com/sonic_pi). You never know - your suggestion might be the subject of the next article!
ru: Если вы не находите интересующую вас тему в этих статьях - почему бы не предложить свою? Самый простой способ сделать это - твитнуть в [@Sonic_Pi](http://twitter.com/sonic_pi). Кто знает, возможно предложенная вами тема станет предметом следующей статьи!

en: A.1 Tips for Sonic Pi
ru: A.1 Трюки с Sonic Pi

en: Five Top Tips
ru: Топ пять советов

en: 1. There are no mistakes
ru: 1. Здесь нет ошибок

en: The most important lesson to learn with Sonic Pi is that there really are no mistakes. The best way to learn is to just try and try and try. Try lots of different things out, stop worrying whether your code sounds good or not and start experimenting with as many different synths, notes, FX and opts as possible. You'll discover a lot of things that make you laugh because they sound just awful and some real gems that sound truly amazing. Simply drop the things you don't like and keep the things you do. The more 'mistakes' you allow yourself to make the quicker you'll learn and discover your personal coding sound.
ru: Самый главный урок в обучении работе с Sonic Pi заключается в том, что здесь действительно нет ошибок. Лучший способ узнать это - пробовать, пробовать и ещё раз пробовать. Перестаньте беспокоиться о том, звучит ли ваш код хорошо или нет, и начните экспериментировать с как можно большим количеством различных синтезаторов, нот, эффектов и параметров. Вы откроете для себя множество вещей, которые заставят вас смеяться, потому что они звучат просто ужасно, но некоторые - настоящие жемчужины, звучащие просто потрясающе. Просто отбросьте то, что не нравится, и продолжайте делать то, что делаете. Чем больше "ошибок" вы позволите себе совершить, тем быстрее вы научитесь и откроете ваш собственный уникальный звук.

en: 2. Use the FX
ru: 2. Используйте эффекты

en: Say you've already mastered the Sonic Pi basics of making sounds with `sample`, `play`? What's next? Did you know that Sonic Pi supports over 27 studio FX to change the sound of your code? FX are like fancy image filters in drawing programs except that instead of blurring or making something black and white, you can add things like reverb, distortion and echo to your sound. Think of it like sticking the cable from your guitar to an effects pedal of your choice and then into the amplifier. Luckily, Sonic Pi makes using FX really easy and requires no cables! All you need to do is to choose which section of your code you'd like the FX added to and wrap it with the FX code. Let's look at an example. Say you had the following code:
ru: Допустим, вы уже освоили основы создания звука в Sonic Pi с помощью `sample` и `play`. Что дальше? Знаете ли вы, что Sonic Pi поддерживает более 27 студийных эффектов для изменения звучания вашего кода? Эффекты похожи на причудливые фильтры изображений в графических редакторах, за исключением того, что вместо размытия или замены чего-то цветного чёрно-белым, вы можете использовать в своём звуке такие вещи, как реверберация, искажения и эхо. Думайте об этом, как о подключении кабеля от вашей гитары к педали эффектов, которую вы выбрали, а затем к усилителю. К счастью, Sonic Pi делает использование эффектов очень простым и не требует никаких проводов! Всё что вам нужно сделать - это выбрать, какой именно фрагмент кода вы бы обработали эффектом, и поместить его в FX-контекст. Давайте рассмотрим пример. Предположим, у вас есть следующий код:

en: If you wanted to add FX to the `:loop_garzul` sample, you'd just tuck it inside a `with_fx` block like this:
ru: Если вы хотите добавить эффект к сэмплу `:loop_garzul`, просто поместите его внутрь блока `with_fx`, как здесь:

en: Now, if you wanted to add FX to the bass drum, go and wrap that with `with_fx` too:
ru: Теперь, если вы захотите добавить эффект к басовому барабану, оберните его `with_fx` тоже:

en: Remember, you can wrap *any* code within `with_fx` and any sounds created will pass through that FX.
ru: Помните, вы можете обернуть *любой* код в `with_fx`, и любые созданные вами звуки будут проходить через выбранный эффект.

en: 3. Parameterise your synths
ru: 3. Параметризируйте ваши синтезаторы

en: In order to really discover your coding sound you'll soon want to know how to modify and control synths and FX. For example, you might want to change the duration of a note, add more reverb, or change the time between echoes. Luckily, Sonic Pi gives you an amazing level of control to do exactly this with special things called optional parameters or opts for short. Let's take a quick look. Copy this code into a workspace and hit run:
ru: Для того, чтобы по-настоящему раскрыть свой звук в коде, вы довольно скоро захотите узнать, как модифицировать и контролировать синтезаторы и эффекты. Например, вы можете изменить длительность ноты, добавить больше реверберации или изменить время между отражениями эхо. К счастью, Sonic Pi дает вам удивительный уровень контроля, чтобы сделать это посредством т.н. необязательных параметров или сокращенно - опций. Давайте взглянем на них. Скопируйте этот код в рабочую область и нажмите Выполнить:

en: Ooh, a lovely guitar sound! Now, let's start playing with it. How about changing its rate?
ru: О, прекрасный звук гитары! Теперь давайте поиграем с ним. Как насчёт изменения скорости?

en: Hey, what's that `rate: 0.5` bit I just added at the end? That's called an opt. All of Sonic Pi's synths and FX support them and there's loads to play around with. They're also available for FX too. Try this:
ru: Эй, что это за `rate: 0.5` я добавил в конце? Это называется параметр. Все синтезаторы и эффекты в Sonic Pi поддерживают их, и их тут множество. Они также доступны и для эффектов. Попробуйте это:

en: The best way to quickly experiment and explore Sonic Pi is to live code. This allows you to start off some code and continually change and tweak it whilst it's still playing. For example, if you don't know what the cutoff parameter does to a sample, just play around. Let's have a try! Copy this code into one of your Sonic Pi workspaces:
ru: Лучший способ начать быстро экспериментировать и исследовать Sonic Pi - кодирование в реальном времени. Это означает, что вы начинаете выполнять какой-то код, постоянно изменяя и подправляя его в то время, как он звучит. Например, если вы не знаете, что делает с сэмплом параметр частоты среза фильтра, просто играйте его по кругу и экспериментируйте. Давайте пробовать! Скопируйте этот код в буфер вашего Sonic Pi:

en: Now, hit run and you'll hear a slightly muffled drum break. Now, change the `cutoff:` value to `80` and hit run again. Can you hear the difference? Try `90`, `100`, `110`...
ru: Теперь, нажмите "Выполнить" и вы будете слышать чуть приглушенный барабанный брейк. Измените значение `cutoff:` на `80` и нажмите "Выполнить" снова. Слышите разницу? Попробуйте `90`, `100`, `110`...

en: Once you get the hang of using `live_loop`s you'll not turn back. Whenever I do a live coding gig I rely on `live_loop` as much as a drummer relies on their sticks. For more information about live coding check out Section 9 of the built-in tutorial.
ru: Как только вы зависните с `live_loop`, вы уже никогда не вернётесь обратно. Всякий раз, когда я делаю лайвкодинг гиг, я завишу от `live_loop` так, как ударник зависит от своих палочек. Для получения дополнительной информации о лайвкодинге, смотрите раздел 9, встроенного руководства.

en: 5. Surf the random streams
ru: 5. Серфинг на случайных потоках

en: Finally, one thing I love doing is cheating by getting Sonic Pi to compose things for me. A really great way to do this is using randomisation. It might sound complicated but it really isn't. Let's take a look. Copy this into a spare workspace:
ru: Наконец, ещё одна вещь, которую я люблю делать, это давать Sonic Pi сочинять за меня музыку. Действительно крутой способ сделать это - использовать рандомизацию. Это может показаться сложным, но на самом деле это не так. Давайте проверим. Скопируйте это в свободное рабочее пространство:

en: Now, when you play this, you'll hear a constant stream of random notes from the scale `:e2 :minor_pentatonic` played with the `:dsaw` synth. "Wait, wait! That's not a melody", I hear you shout! Well, here's the first part of the magic trick. Every time we go round the `live_loop` we can tell Sonic Pi to reset the random stream to a known point. This is a bit like going back in time in the TARDIS with the Doctor to a particular point in time and space. Let's try it - add the line `use_random_seed 1` to the `live_loop`:
ru: Когда вы запустите это, вы услышите постоянный поток случайных нот гаммы `:Е2 :minor_pentatonic`, сыгранных  синтезатором `:dsaw`. "Подожди, подожди! Это не мелодия", слышу я ваш возглас! Ну, это только первая часть волшебного трюка. Каждый раз, когда мы проходим круг цикла `live_loop`, мы можем сказать Sonic Pi сбросить случайный поток к уже известной начальной точке. Это как если бы возвращаться во времени в ТАРДИС с Доктором (см. британский телесериал «Доктор Кто») в определённую точку в пространстве и времени. Давайте попробуем это - добавьте строку `use_random_seed 1` к `live_loop`:

en: Now, every time the `live_loop` loops around, the random stream is reset. This means it chooses the same 16 notes every time. Hey presto! An instant melody. Now, here's the really exciting bit. Change the seed value from `1` to another number. Say `4923`. Wow! Another melody! So, just by changing one number (the random seed), you can explore as many melodic combinations as you can imagine! Now, that's the magic of code.
ru: Теперь каждый раз, когда цикл `live_loop` повторяется, случайный поток будет сброшен у началу. Это значит, что он выбирает одни и те же 16 нот каждый раз. Вуаля, мелодия в один миг! А теперь действительно захватывающая вещь. Измените значение отправной точки с `1` на другое число. Скажем, `4923`. Ого! Другая мелодия! Так, просто изменяя одну цифру (отправную точку), вы можете открыть столько мелодических комбинаций, сколько только сможете себе представить! Это и есть магия кода.

en: A.2 Live Coding
ru: A.2 Лайвкодинг

en: This may sound like a far fetched story from a futuristic night club but coding music like this is a growing trend and is often described as Live Coding (http://toplap.org). One of the recent directions this approach to music making has taken is the Algorave (http://algorave.com) - events where artists like myself code music for people to dance to. However, you don't need to be in a nightclub to Live Code - with Sonic Pi v2.6+ you can do it anywhere you can take your Raspberry Pi and a pair of headphones or some speakers. Once you reach the end of this article, you'll be programming your own beats and modifying them live. Where you go afterwards will only be constrained by your imagination.
ru: Это может звучать как притянутая за уши история из футуристичного ночного клуба, но кодирование музыки - это развивающийся тренд, часто называемый Лайвкодинг (http://toplap.org). Одним из новых направлений этого способа создания музыки является Алгорэйв (http://algorave.com) - мероприятие, где такие артисты как я, кодируют музыку для танцующих людей. Однако, вам не надо быть в ночном клубе, чтобы кодировать в реальном времени - с Sonic Pi v2.6+ вы можете делать это в любом месте, в которое сможете взять ваш Raspberry Pi и пару наушников или колонок. Как только вы дойдёте до конца этой статьи, вы будете программировать свой собственный бит и изменять его вживую. То, где вы окажетесь после этого, может быть ограничено только вашим воображением.

en: Live Loop
ru: Живой цикл

en: The key to live coding with Sonic Pi is mastering the `live_loop`. Let's look at one:
ru: Ключ к лайвкодингу с Sonic Pi - овладение циклами `live_loop`. Давайте посмотрим на один из них:

en: Redefining On-the-fly
ru: Изменения на лету

en: Ok, so what's so special about the `live_loop`? So far it just seems like a glorified `loop`! Well, the beauty of `live_loop`s is that you can redefine them on-the-fly. This means that whilst they're still running, you can change what they do. This is the secret to live coding with Sonic Pi. Let's have a play:
ru: Итак, что такого особенного в цикле `live_loop`? Он отдалённо напоминает усовершенствованный цикл `loop`. Преимущество `live_loop` в том, что вы можете изменять его на лету. Это значит, что пока выполняется цикл, вы можете изменить то, что он делает. Это и есть секрет лайвкодинга с Sonic Pi. Давайте играть:

en: Sleeping is important
ru: Сон важен

en: One of the most important lessons about `live_loop`s is that they need rest. Consider the following `live_loop`:
ru: Один из самых важных аспектов цикла `live_loop` в том, что в нём должна быть пауза. Рассмотрим следующий код:

en: If you try running this code, you'll immediately see Sonic Pi complaining that the `live_loop` did not sleep. This is a safety system kicking in! Take a moment to think about what this code is asking the computer to do. That's right, it's asking the computer to play an infinite amount of choir samples in zero time. Without the safety system the poor computer will try and do this and crash and burn in the process. So remember, your `live_loop`s must contain a `sleep`.
ru: Если вы попробуете запустить этот код, вы сразу увидите жалобу Sonic Pi на то, что в `live_loop` не указанно время `sleep`. Это ругается система безопасности! Воспользуйтесь моментом, чтобы подумать о том, что просит ваш компьютер сделать этот код. Правильно, он просит компьютер играть бесконечное количество сэмплов хора за нулевое время. Без системы безопасности бедный компьютер будет пытаться сделать это, что приведёт к аварии. Поэтому помните, ваш `live_loop` должен содержать `sleep`.

en: Combining Sounds
ru: Сочетание звуков

en: Music is full of things happening at the same time. Drums at the same time as bass at the same time as vocals at the same time as guitars... In computing we call this concurrency and Sonic Pi provides us with an amazingly simple way of playing things at the same time. Simply use more than one `live_loop`!
ru: Музыка полна вещей, происходящих одновременно. Барабаны звучат в то же самое время, что и бас, вокал, гитары... В информатике это называется параллелизм и Sonic Pi обеспечивает нам удивительно простой способ играть разные вещи в одно и то же время. Просто используйте больше, чем один `live_loop`!

en: live_loop :beats do
      sample :bd_tek
      with_fx :echo, phase: 0.125, mix: 0.4 do
        sample  :drum_cymbal_soft, sustain: 0, release: 0.1
        sleep 0.5
      end
    end
    live_loop :bass do
      use_synth :tb303
      synth :tb303, note: :e1, release: 4, cutoff: 120, cutoff_attack: 1
      sleep 4
    end
ru: live_loop :beats do
      sample :bd_tek
      with_fx :echo, phase: 0.125, mix: 0.4 do
        sample  :drum_cymbal_soft, sustain: 0, release: 0.1
        sleep 0.5
      end
    end
      
    live_loop :bass do
      use_synth :tb303
      synth :tb303, note: :e1, release: 4, cutoff: 120, cutoff_attack: 1
      sleep 4
    end

en: One of the interesting things about using multiple `live_loop`s is that they each manage their own time. This means it's really easy to create interesting polyrhythmical structures and even play with phasing Steve Reich style. Check this out:
ru: Одна из особенностей использования нескольких циклов `live_loop` состоит в том, что каждый из них обладает своим собственным независимым временем. Это значит, что с помощью этого легко создавать интересные полиритмические структуры и даже поиграть с фазировкой в стиле Стива Райха (Steve Reich). Зацени:

en: Bringing it all together
ru: Соединим всё вместе

en: In each of these tutorials, we'll end with a final example in the form of a new piece of music which draws from all of the ideas introduced. Read this code and see if you can imagine what it's doing. Then, copy it into a fresh Sonic Pi buffer and hit Run and actually hear what it sounds like. Finally, change one of the numbers or comment and uncomment things out. See if you can use this as a starting point for a new performance, and most of all have fun! See you next time...
ru: Каждую из этих статей мы будем заканчивать примером в виде фрагмента музыкального произведения, который вырисовывается из всех представленных в статье идей. Прочтите этот код и посмотрите, сможете ли вы понять, что он делает. Затем скопируйте его в свободный буфер Sonic Pi, нажмите "Выполнить" и послушайте, как он самом деле звучит. Наконец, измените одно из чисел или закомментируйте/раскомментируйте какие-нибудь строки. Посмотрите, сможете ли вы использовать этот пример в качестве отправной точки для нового выступления, и самое главное, веселитесь! До встречи в следующий раз...

en: with_fx :reverb, room: 1 do
      live_loop :time do
        synth :prophet, release: 8, note: :e1, cutoff: 90, amp: 3
        sleep 8
      end
    end
    live_loop :machine do
      sample :loop_garzul, rate: 0.5, finish: 0.25
      sample :loop_industrial, beat_stretch: 4, amp: 1
      sleep 4
    end
    live_loop :kik do
      sample :bd_haus, amp: 2
      sleep 0.5
    end
    with_fx :echo do
      live_loop :vortex do
        # use_random_seed 800
        notes = (scale :e3, :minor_pentatonic, num_octaves: 3)
        16.times do
          play notes.choose, release: 0.1, amp: 1.5
          sleep 0.125
        end
      end
    end
ru: with_fx :reverb, room: 1 do
      live_loop :time do
        synth :prophet, release: 8, note: :e1, cutoff: 90, amp: 3
        sleep 8
      end
    end
      
    live_loop :machine do
      sample :loop_garzul, rate: 0.5, finish: 0.25
      sample :loop_industrial, beat_stretch: 4, amp: 1
      sleep 4
    end
      
    live_loop :kik do
      sample :bd_haus, amp: 2
      sleep 0.5
    end
      
    with_fx :echo do
      live_loop :vortex do
        # use_random_seed 800
        notes = (scale :e3, :minor_pentatonic, num_octaves: 3)
        16.times do
          play notes.choose, release: 0.1, amp: 1.5
          sleep 0.125
        end
      end
    end

en: A.3 Coded Beats
ru: A.3 Кодирование ритм-секции

en: Coded Beats
ru: Кодирование ритм-секции

en: One of the most exciting and disrupting technical developments in modern music was the invention of samplers. These were boxes that allowed you to record any sound into them and then manipulate and play back those sounds in many interesting ways. For example, you could take an old record, find a drum solo (or break), record it into your sampler and then play it back on repeat at half-speed to provide the foundation for your latest beats. This is how early hip-hop music was born and today it's almost impossible to find electronic music that doesn't incorporate samples of some kind. Using samples is a really great way of easily introducing new and interesting elements into your live coded performances.
ru: Одним из самых захватывающих и взрывных по своим последствиям для современной музыки, стало изобретение сэмплеров. Это были коробки, которые позволяли записывать в них любой звук, а затем воспроизводить и управлять этим звуком множеством различных способов. Например, можно взять старую записать, найти в ней барабанное соло (или брэйк), записать его в свой сэмплер и воспроизводить на половине от изначальной скорости, чтобы положить его в основу для своих собственных ритмов. Так зарождался ранний хип-хоп, и сегодня практически невозможно найти электронную музыку, в составе которой нет сэмплов в том или ином виде. Использование сэмплов - это действительно отличный способ легко внедрять новые интересные элементы в ваш лайвкодинг-перформанс.

en: So where can you get a sampler? Well you already have one - it's your Raspberry Pi! The built-in live coding app Sonic Pi has an extremely powerful sampler built into its core. Let's play with it!
ru: Так и где же можно заполучить этот сэмплер? Ну, у вас уже есть один - это ваш Raspberry Pi! Идущее в комплекте приложение для лайвкодинга Sonic Pi имеет чрезвычайно мощный сэмплер, встроенный в его ядро. Давайте с ним поиграем!

en: The Amen Break
ru: Амен-брейк

en: One of the most classic and recognisable drum break samples is called the Amen Break. It was first performed in 1969 in the song "Amen Brother" by the Winstons as part of a drum break. However, it was when it was discovered by early hip-hop musicians in the 80s and used in samplers that it started being heavily used in a wide variety of other styles such as drum and bass, breakbeat, hardcore techno and breakcore.
ru: Один из самых узнаваемых сэмплов среди классических барабанных брейков называется Амен-брейк. Он впервые прозвучал в 1969 году в песне "Аминь, Брат", исполнителя "Winstons", как часть барабанного брейка. Тем не менее, когда он был обнаружен ранними хип-хоп музыкантами в 80-х годах и начал использоваться в сэмплерах, он стал активно внедряться и в другие стили, такие как драм-эн-бэйс, брейкбит, хардкор, техно и брейк-кор.

en: I'm sure you're excited to hear that it's also built right into Sonic Pi. Clear up a buffer and throw in the following code:
ru: Я уверен, что вы будете взволнованы, узнав, что он также входит в состав Sonic Pi. Очистите буфер и поместите в него следующий код:

en: Beat Stretching
ru: Растяжение ритмов

en: Let's loop the Amen Break by using our old friend the `live_loop` introduced in this tutorial last month:
ru: Давайте зациклим амен-брейк, используя наш старый добрый цикл `live_loop`, представленный в прошлом выпуске этого журнала:

en: OK, so it is looping, but there's an annoying pause every time round. That is because we asked it to sleep for `2` beats and with the default BPM of 60 the `:loop_amen` sample only lasts for `1.753` beats. We therefore have a silence of `2 - 1.753 = 0.247` beats. Even though it's short, it's still noticeable.
ru: ОК, мы его зациклили, но при каждом повторе есть неприятная пауза. Это потому, что мы сказали Sonic Pi ждать `2` тактовые доли, а с учётом того, что по умолчанию BPM (ударов в минуту) равно 60, сэмпл `:loop_amen` длится только `1.753` удара. Поэтому мы имеем тишину `2 - 1.753 = 0.247` удара. Даже не смотря на то, что она довольно короткая, она всё равно заметна.

en: To fix this issue we can use the `beat_stretch:` opt to ask Sonic Pi to stretch (or shrink) the sample to match the specified number of beats.
ru: Чтобы устранить эту проблему, мы можем воспользоваться параметром `beat_stretch:`, чтобы сказать Sonic Pi растянуть (или сжать) сэмпл согласно установленнму количеству ударов.

en: Sonic Pi's `sample` and `synth` fns give you a lot of control via optional parameters such as `amp:`, `cutoff:` and `release:`. However, the term optional parameter is a real mouthful so we just call them *opts* to keep things nice and simple.
ru: Функции `sample` и `synth` в Sonic Pi дают вам контроль через необязательные параметры, такие как `amp:`, `cutoff:` и `release:`. Однако, термин "необязательный параметр" - это слишком длинное название, поэтому для простоты будем называть их просто *параметры*.

en: Now we're dancing! Although, perhaps we want to speed it up or slow it down to suit the mood.
ru: Теперь мы можем танцевать! Хотя, возможно, вы захотите ускорить или замедлить его, чтобы придать звуку иной характер.

en: Playing with Time
ru: Играем со временем

en: OK, so what if we want to change styles to old school hip hop or breakcore? One simple way of doing this is to play with time - or in other words mess with the tempo. This is super easy in Sonic Pi - just throw in a `use_bpm` into your live loop:
ru: ОК, но что, если мы хотим изменить стиль на олдскульный хип-хоп или брейк-кор? Один из простейших способов сделать это - играть со временем - или, другими словами, сдвинуть темп. В Sonic Pi это супер просто - добавьте `use_bpm` в живой цикл:

en: Whilst you're rapping over those slow beats, notice that we're still sleeping for 2 and our BPM is 30, yet everything is in time. The `beat_stretch` opt works with the current BPM to make sure everything just works.
ru: Пока вы будете читать рэп под этот медленный ритм, обратите внимание, что мы до сих пор ждём 2 удара, и хотя наш BPM 30, всё продолжает звучать пропорционально. Параметр `beat_stretch` работает с текущим BPM, чтобы быть уверенным, что всё будет работать исправно.

en: Filtering
ru: Фильтрация

en: Now we can live loop samples, let's look at some of the most fun opts provided by the `sample` synth. First up is `cutoff:` which controls the cutoff filter of the sampler. By default this is disabled but you can easily turn it on:
ru: Теперь, когда мы можем зацикливать сэмплы в реальном времени, давайте взглянем на некоторые из самых забавных параметров, предоставляемых сэмплером. Первый - `cutoff:`, который контролирует частоту среза фильтра. По умолчанию эта возможность отключена, но вы можете легко её включить:

en: Go ahead and change the `cutoff:` opt. For example, increase it to 100, hit *Run* and wait for the loop to cycle round to hear the change in the sound. Notice that low values like 50 sound mellow and bassy and high values like 100 and 120 are more full-sounding and raspy. This is because the `cutoff:` opt will chop out the high frequency parts of the sound just like a lawn-mower chops off the top of the grass. The `cutoff:` opt is like the length setting - determining how much grass is left over.
ru: Давайте изменим параметр `cutoff:`. Например, увеличьте его до 100, нажмите *Выполнить* и ждите, пока круг цикла завершится, чтобы услышать изменения в звуке. Обратите внимание, что низкие значения, такие как 50, дают сочный звук и басы, а высокие значения, типа 100 и 120, дают более полное звучание и больше высокочастотных составляющих. Это происходит потому, что параметр `cutoff:` срезает высокочастотную область звука так же, как газонокосилка срезает верхнюю часть травы. Параметр `cutoff:` определяет сколько "травы" оставлять.

en: Slicing
ru: Нарезка

en: Another great tool to play with is the slicer FX. This will chop (slice) the sound up. Wrap the `sample` line with the FX code like this:
ru: Еще один отличный инструмент, с которым можно поиграть - это эффект `slicer`. Он позволяет "нарезать" звук сэмпла. Оберните строку `sample` кодом эффекта, как здесь:

en: Notice how the sound bounces up and down a little more. (You can hear the original sound without the FX by changing the `mix:` opt to `0`.) Now, try playing around with the `phase:` opt. This is the rate (in beats) of the slicing effect. A smaller value like `0.125` will slice faster and larger values like `0.5` will slice more slowly. Notice that successively halving or doubling the `phase:` opts val tends to always sound good. Finally, change the `wave:` opt to one of 0, 1, or 2 and hear how it changes the sound. These are the various wave shapes. 0 is a saw wave, (hard in, fade out) 1 is a square wave (hard in, hard out) and 2 is a triangle wave (fade in, fade out).
ru: Обратите внимание, как звук стал более упругим (вы можете услышать оригинальное звучание сэмпла без эффекта, установив параметр `mix:` в `0`.) Теперь поиграйтесь с параметром `phase:`. Это размер (в ударах) нарезки. Меньшее значение, такое как `0.125`, нарежет сэмпл более короткими кусками и в большем количестве, чем значение `0.5`, при котором нарезка будет реже и толще. Обратите внимание, что удвоения значений `phase`, как правило, всегда звучат хорошо. Наконец, измените параметр `wave:`, выбрав из 0, 1 или 2, и послушайте, как меняется звук. Это три разные формы волны. 0 - это пилообразная волна, (резко начинается, плавно затухает), 1 - прямоугольная волна (резко начинается, резко обрывается), и 2 - треугольная волна (плавно нарастает, плавно затухает).

en: Finally, let's go back in time and revisit the early Bristol drum and bass scene with this month's example. Don't worry too much about what all this means, just type it in, hit Run, then start live coding it by changing opt numbers and see where you can take it. Please do share what you create! See you next time...
ru: Наконец, давайте вернёмся назад во времени, и вновь посетим раннюю Бристольскую драм-эн-бэйс сцену. Не волнуйтесь о том, что всё это значит, просто введите этот код в пустой буфер, нажмите "Выполнить", и начинайте лайвкодинг. Изменяйте значения параметров и подумайте, где бы вы смогли применить это. Пожалуйста, поделитесь тем, что у вас получилось! Увидимся в следующий раз...

en: use_bpm 100
    live_loop :amen_break do
      p = [0.125, 0.25, 0.5].choose
      with_fx :slicer, phase: p, wave: 0, mix: rrand(0.7, 1) do
        r = [1, 1, 1, -1].choose
        sample :loop_amen, beat_stretch: 2, rate: r, amp: 2
      end
      sleep 2
    end
    live_loop :bass_drum do
      sample :bd_haus, cutoff: 70, amp: 1.5
      sleep 0.5
    end
    live_loop :landing do
      bass_line = (knit :e1, 3, [:c1, :c2].choose, 1)
      with_fx :slicer, phase: [0.25, 0.5].choose, invert_wave: 1, wave: 0 do
        s = synth :square, note: bass_line.tick, sustain: 4, cutoff: 60
        control s, cutoff_slide: 4, cutoff: 120
      end
      sleep 4
    end
ru: use_bpm 100
      
    live_loop :amen_break do
      p = [0.125, 0.25, 0.5].choose
      with_fx :slicer, phase: p, wave: 0, mix: rrand(0.7, 1) do
        r = [1, 1, 1, -1].choose
        sample :loop_amen, beat_stretch: 2, rate: r, amp: 2
      end
      sleep 2
    end
      
    live_loop :bass_drum do
      sample :bd_haus, cutoff: 70, amp: 1.5
      sleep 0.5
    end
      
    live_loop :landing do
      bass_line = (knit :e1, 3, [:c1, :c2].choose, 1)
      with_fx :slicer, phase: [0.25, 0.5].choose, invert_wave: 1, wave: 0 do
        s = synth :square, note: bass_line.tick, sustain: 4, cutoff: 60
        control s, cutoff_slide: 4, cutoff: 120
      end
      sleep 4
    end

en: A.4 Synth Riffs
ru: A.4 Синтезаторные риффы

en: Synth Riffs
ru: Синтезаторные риффы

en: Whether it's the haunting drift of rumbling oscillators or the detuned punch of saw waves piercing through the mix, the lead synth plays an essential role on any electronic track. In last month's edition of this tutorial series we covered how to code our beats. In this tutorial we'll cover how to code up the three core components of a synth riff - the timbre, melody and rhythm.
ru: Какой бы звук вы не использовали, солирующий синтезатор всегда играет главную роль в любом электронном треке. В статье из прошлого номера мы рассматривали, как кодировать барабанные биты. В этой статье мы узнаем, как кодировать три основных компонента синтезаторных риффов - тембр, мелодию и ритм.

en: OK, so power up your Raspberry Pi, crack open Sonic Pi v2.6+ and let's make some noise!
ru: Итак, подключите ваш Paspberry Pi, откройте Sonic Pi версии v2.6+ и давайте пошумим!

en: Timbral Possibilities
ru: Тембральные возможности

en: An essential part of any synth riff is changing and playing with the timbre of the sounds. We can control the timbre in Sonic Pi in two ways - choosing different synths for a dramatic change and setting the various synth opts for more subtle modifications. We can also use FX, but that's for another tutorial...
ru: Неотъемлемой частью любого синтезаторного риффа является его тембр. Мы можем изменять тембр в Sonic Pi двумя способами - выбирая различные синты для резкой смены тембра, и изменяя различные синтовые параметры для более тонкой настройки. Мы также можем использовать эффекты, но об этом в другой раз...

en: Let's create a simple live loop where we continually change the current synth:
ru: Давайте создадим простой живой цикл, в котором будет постоянно изменяться текущий синт:

en: Take a look at the code. We're simply ticking through a ring of synth names (this will cycle through each of these in turn repeating the list over and over). We pass this synth name to the `use_synth` fn (function) which will change the `live_loop`'s current synth. We also play note `:e2` (E at the second octave), with a release time of 0.5 beats (half a second at the default BPM of 60) and with the `cutoff:` opt set to 100.
ru: Взгляните на код. Мы просто перебираем по кругу элементы кольцевого списка, содержащего имена синтов (цикл переключает синт на следующий в списке снова и снова). Мы передаём имена этих синтов функции `use_synth`, которая и переключает текущий синтезатор цикла `live_loop`. Ещё мы играем ноту `:Е2` (ми второй октавы), со временем затухания 0.5 удара (пол секунды с ВРМ по умолчанию 60) и с параметром `cutoff:`, равным 100.

en: Hear how the different synths have very different sounds even though they're all playing the same note. Now experiment and have a play. Change the release time to bigger and smaller values. For example, change the `attack:` and `release:` opts to see how different fade in/out times have a huge impact on the sound. Finally change the `cutoff:` opt to see how different cutoff values also massively influence the timbre (values between 60 and 130 are good). See how many different sounds you can create by just changing a few values. Once you've mastered that, just head to the Synths tab in the Help system for a full list of all the synths and all the available opts each individual synth supports to see just how much power you have under your coding fingertips.
ru: Слышите, разные синтезаторы звучат совершенно по-разному, хотя играют одну и ту же ноту? Теперь давайте поэкспериментируем. Измените время затухания на большее или меньшее значение. Изменяйте оба параметра - `attack:` и `release:`, чтобы посмотреть, как сильно разные их значения изменяют звук. Наконец, измените параметр `cutoff:`, чтобы услышать, что разные значения среза фильтра также радикально изменяют тембр синта (значения между 60 и 130 обычно звучат хорошо). Посмотрите, сколько разнообразных звуков можно создать, изменяя всего лишь несколько параметров. Как только вы это освоите, откройте вкладку "Синтезаторы" справочной системы, и взгляните на полный список синтезаторов и их параметров, чтобы увидеть, какую мощь вы держите в руках.

en: Timbre
ru: Тембр

en: Timbre is just a fancy word describing the sound of a sound. If you play the same note with different instruments such as a violin, guitar, or piano, the pitch (how high or low it sounds) would be the same, but the sound quality would be different. That sound quality - the thing which allows you to tell the difference between a piano and a guitar is the timbre.
ru: Тембр - это просто слово, описывающее звук. Если вы сыграете одну и ту же ноту на разных инструментах, таких как скрипка, гитара, или пианино, высота звука будет одинаковой, но свойство звуков будет разным. Это свойство звука - то, что позволяет вам слышать разницу между пианино и гитарой - и есть тембр.

en: Melodic Composition
ru: Мелодическая структура

en: Another important aspect to our lead synth is the choice of notes we want to play. If you already have a good idea, then you can simply create a ring with your notes in and tick through them:
ru: Ещё одним важным аспектом нашего солирующего синтезатора является выбор нот, которые он будет играть. Если у вас уже есть хорошая мелодическая идея, то вы можете просто создать кольцо с вашими нотами, и воспроизводить его по кругу:

en: Here, we've defined our melody with a ring which includes both notes such as `:e3` and rests represented by `:r`. We're then using `.tick` to cycle through each note to give us a repeating riff.
ru: Здесь мы поместили нашу мелодию в кольцевой список, содержащий ноты, такие как `:е3` и паузы, обозначенные `:r`. Затем, мы использовали `.tick`, чтобы получить повторяющийся рифф.

en: Auto Melody
ru: Автомелодия

en: It's not always easy to come up with a nice riff from scratch. Instead it's often easier to ask Sonic Pi for a selection of random riffs and to choose the one you like the best. To do that we need to combine three things: rings, randomisation and random seeds. Let's look at an example:
ru: Не всегда бывает легко придумать хороший рифф с нуля. Вместо этого, иногда проще сказать Sonic Pi играть случайный рифф, и выбрать тот, который понравится вам больше всего. Для этого нам необходимо объединить три вещи: кольца, рандомизацию и отправную точку (зерно) рандомизации. Взгляните на пример:

en: There's a few things going on - let's look at them in turn. First, we specify that we're using random seed 3. What does this mean? Well, the useful thing is that when we set the seed, we can predict what the next random value is going to be - it's the same as it was last time we set the seed to 3! Another useful thing to know is that shuffling a ring of notes works in the same way. In the example above we're essentially asking for the 'third shuffle' in the standard list of shuffles - which is also the same every time as we're always setting the random seed to the same value right before the shuffle. Finally we're just ticking through our shuffled notes to play the riff.
ru: Здесь происходит несколько вещей - давайте рассмотрим их по очереди. Во-первых, мы указали, что используем зерно рандомизации 3. Что это значит? Ну, смысл в том, что когда мы устанавливаем зерно, мы можем предсказать, какой будет рандомизация в следующий раз. Той же самой, что и в тот раз, когда мы устанавливали зерно в 3! Ещё одна вещь, которую полезно знать, что перемешивание нот кольца будет произведено тем же способом. В примере выше, мы, по сути, вызываем "третье перемешивание" из стандартного списка перемешиваний, который остаётся неизменным всякий раз, когда мы устанавливаем зерно в то же значение перед перемешиванием. Наконец, мы просто вызываем по кругу наши перемешанные ноты, чтобы получить рифф.

en: Now, here's where the fun starts. If we change the random seed value to another number, say 3000, we get an entirely different shuffling of the notes. So now it's extremely easy to explore new melodies. Simply choose the list of notes we want to shuffle (scales are a great starting point) and then choose the seed we want to shuffle with. If we don't like the melody, just change one of those two things and try again. Repeat until you like what you hear!
ru: Вот где начинается веселье. Если мы меняем значение зерно рандомизации на другое, скажем 3000, мы получаем совершенно другое перемешивание нот. Так что теперь очень легко исследовать новые мелодии. Просто выберите список нот, которые вы хотите перемешать (гаммы представляют собой отличную отправную точку), а затем выберите зерно рандомизации, с которого вы хотите начать перемешивание. Если вам не нравится мелодия, просто измените одну из этих двух вещей и попробуйте снова. Повторяйте до тех пор, пока вам понравится то, что вы слышите!

en: Pseudo Randomisation
ru: Псевдо рандомизация

en: Sonic Pi's randomisation is not actually random it's what's called pseudo random. Imagine if you were to roll a dice 100 times and write down the result of each roll onto a piece of paper. Sonic Pi has the equivalent of this list of results which it uses when you ask for a random value. Instead of rolling an actual dice, it just picks the next value from the list. Setting the random seed is just jumping to a specific point in that list.
ru: Случайный выбор в Sonic Pi на самом деле не является случайным, это то, что обычно называется псевдо рандомизация. Представьте, что вы бросали игральные кости 100 раз и записывали результат каждого броска на лист бумаги. Sonic Pi имеет эквивалент этого списка результатов, которые он использует, когда вы запрашиваете случайные значения. Только вместо бросков настоящих костей, он выбирает следующее значение из списка. Настройка зерна рандомизации - это просто прыжок в определённое место этого списка.

en: Finding your Rhythm
ru: Поиск ритма

en: Another important aspect to our riff is the rhythm - when to play a note and when not to. As we saw above we can use `:r` in our rings to insert rests. Another very powerful way is to use spreads which we'll cover in a future tutorial. Today we'll use randomisation to help us find our rhythm. Instead of playing every note we can use a conditional to play a note with a given probability. Let's take a look:
ru: Ещё один важный аспект нашего риффа, это ритм - т.е. последовательность нот и пауз. Как мы видели раньше, мы можем использовать `:r` в наших кольцах, чтобы вставить паузу. Ещё один очень мощный способ - использовать методы колец, но о них мы поговорим в следующий раз. Сегодня мы будем использовать рандомизацию, чтобы помочь нам найти подходящий ритм. Вместо того, чтобы играть каждую ноту, мы можем играть ноту с заданной вероятностью. Давайте посмотрим:

en: A really useful fn to know is `one_in` which will give us a `true` or `false` value with the specified probability. Here, we're using a value of 2 so on average one time every two calls to `one_in` it will return `true`. In other words, 50% of the time it will return `true`. Using higher values will make it return `false` more often introducing more space into the riff.
ru: Очень полезно знать функцию `one_in`, которая возвращает нам `true` или `false` с заданной вероятностью. Здесь мы используем значение 2, поэтому в среднем один раз каждые два вызова, `one_in` возвратит `true`. Другими словами, она будет возвращать `true` в 50% случаев. Если использовать более высокие значения, `false`будет возвращаться чаще, добавляя в рифф больше пауз.

en: Notice that we've added some iteration in here with `16.times`. This is because we only want to reset our random seed value every 16 notes so our rhythm repeats every 16 times. This doesn't affect the shuffling as that is still done immediately after the seed is set. We can use the iteration size to alter the length of the riff. Try changing the 16 to 8 or even 4 or 3 and see how it affects the rhythm of the riff.
ru: Заметим, что мы добавили повторы `16.times`. Это потому, что мы хотим сбрасывать наше зерно рандомизаци каждые 16 нот. Так наш ритм будет повторяться каждые 16 ударов. Это не влияет на перемешивание, т.к. оно выполняется сразу после того, как установлено зерно рандомизации. Мы можем использовать разное количество повторов для изменения длины риффа. Попробуйте изменить 16 на 8 или даже на 4 или 3 и посмотрите, как это повлияет на ритм.

en: OK, so let's combine everything we've learned together into one final example. See you next time!
ru: ОК, теперь давайте совместим всё, чему мы научились, в один финальный пример. Увидимся в следующий раз!

en: A.5 Acid Bass
ru: A.5 Кислотный бас

en: Acid Bass
ru: Кислотный бас

en: It's impossible to look through the history of electronic dance music without seeing the enormous impact of the tiny Roland TB-303 synthesiser. It's the secret sauce behind the original acid bass sound. Those classic squealing and squelching TB-303 bass riffs can be heard from the early Chicago House scene through to more recent electronic artists such as Plastikman, Squarepusher and Aphex Twin.
ru: Невозможно исследовать историю электронной танцевальной музыки, и не заметить огромного влияния крошечного синтезатора Roland TB-303. Это секретный ингредиент оригинального кислотного баса. Классическое визжание и чавканье басовых риффов TB-303 можно услышать в ранней чикагской хаус сцене благодаря таким музыкантам, как Plastikman, Squarepusher и Aphex Twin.

en: Although getting your hands on an original TB-303 is not so easy you will be pleased to know that you can turn your Raspberry Pi into one using the power of Sonic Pi. Behold, fire up Sonic Pi and throw this code into an empty buffer and hit Run:
ru: Хотя получить на руки оригинал TB-303 не так уж и просто, вам будет приятно узнать, что вы можете превратить ваш Raspberry Pi в один из них, используя мощь Sonic Pi. Узрите свет Sonic Pi, забросив этот код в пустой буфер и нажав "Выполнить":

en: Instant acid bass! Let's play around...
ru: Кислотный бас в одно мгновение! Давайте с ним поиграем...

en: Squelch that Bass
ru: Изменяем бас

en: First, let's build a live arpeggiator to make things fun. In the last tutorial we looked at how riffs can just be a ring of notes that we tick through one after another, repeating when we get to the end. Let's create a live loop that does exactly that:
ru: Во-первых, построим живой арпеджиатор, чтобы играть было веселей. В прошлой статье мы узнали, что риффы могут быть простыми кольцами нот, извлекающимися одна за другой. Давайте создадим живой цикл, который сделает для нас это:

en: Take a look at each line.
ru: Для начала рассмотрим код построчно.

en: On the first line we set the default synth to be `tb303` with the `use_synth` fn.
ru: В первой строке мы задаём синтезатор по умолчанию `tb303` с помощью функции `use_synth`.

en: On line two we create a live loop called `:squelch` which will just loop round and round.
ru: Во второй строке мы создаем живой цикл с именем `:squelch`, который будет просто повторяться снова и снова.

en: Line three is where we create our riff - a ring of notes (E in octaves 1, 2, and 3) which we simply tick through with `.tick`. We define `n` to represent the current note in the riff. The equals sign just means to assign the value on the right to the name on the left. This will be different every time round the loop. The first time round, `n` will be set to `:e1`. The second time round it will be `:e2`, followed by `:e3`, and then back to `:e1`, cycling round forever.
ru: Третья строка - та, где мы создаём наш рифф - кольцо нот (ми в октавах 1, 2 и 3), которые мы извлекаем по кругу с помощью `.tick`. Мы определяем `n` для представления текущей ноты в риффе. Знак равенства означает, что присваиваем имени, находящемуся слева,значение, находящееся справа. Это значение будет отличаться каждый круг цикла. Первый круг `n` будет иметь значение `:е1`. Второй круг - `:е2`, затем `:е3`, потом снова `:е1` и так круг за кругом.

en: Line four is where we actually trigger our `:tb303` synth. We're passing a few interesting opts here: `release:`, `cutoff:`, `res:` and `wave:` which we'll discuss below.
ru: Четвёртая строка - место, где мы включаем наш `:tb303`. У нас здесь есть несколько интересных параметров: `release:`, `cutoff:`, `res:` и `wave:`, которые мы обсудим чуть позже.

en: Line five is our `sleep` - we're asking the live loop to loop round every `0.125`s or 8 times a second at the default BPM of 60.
ru: В пятой строке появляется `sleep` - мы просим цикл замыкать круг каждые `0.125` секунды, или 8 раз в секунду с BPM по умолчанию 60.

en: Line six is the `end` to the live loop. This just tells Sonic Pi where the end of the live loop is.
ru: Строка шесть - это `end` живого цикла. Мы просто говорим Sonic Pi, что здесь конец живого цикла.

en: Whilst you're still figuring out what's going on, type in the code above and hit the Run button. You should hear the `:tb303` kick into action. Now, this is where the action is: let's start live coding.
ru: В то время, как вы всё ещё пытаетесь понять, что здесь происходит, поместите этот код в пустой буфер, и нажмите кнопку "Выполнить". Вы должны услышать `:tb303` в действии. Теперь пора начинать лайвкодинг.

en: Whilst the loop is still live, change the `cutoff:` opt to `110`. Now hit the Run button again. You should hear the sound become a little harsher and more squelchy. Dial in `120` and hit run. Now `130`. Listen how higher cutoff values make it sound more piercing and intense. Finally, drop it down to `80` when you feel like a rest. Then repeat as many times as you want. Don't worry, I'll still be here...
ru: В то время, как цикл исполняется, измените параметр `cutoff:` на `110`. Затем нажмите кнопку "Выполнить" снова. Вы должны услышать, что звук стал немного жёстче и более "хлюпающим". Наберите `120` и нажмите "Выполнить". Затем `130`. Слушайте, как более высокие значения делают звук более пронзительным и интенсивным. Наконец, понизьте значение до `80`, если захотите отдохнуть. Затем повторите это столько раз, сколько захотите. Не волнуйтесь, я всё ещё буду здесь...

en: Finally, for a big impact on the timbre try changing the `wave:` opt to `1`. This is the choice of source oscillator. The default is `0` which is a sawtooth wave. `1` is a pulse wave and `2` is a triangle wave.
ru: Наконец, для резкого изменения тембра попробуйте изменить параметр `wave:` на `1`. Это выбор формы волны исходного генератора. Значение по умолчанию - `0` - пилообразная волна, `1` - прямоугольная волна, и `2` - треугольная форма волны.

en: Of course, try different riffs by changing the notes in the ring or even picking notes from scales or chords. Have fun with your first acid bass synth.
ru: Конечно, пробуйте разные риффы, изменяя ноты в кольце, или же выбирая ноты из гамм, или аккордов. Веселитесь с вашим первым кислотным басовым синтезатором.

en: Deconstructing the TB-303
ru: Деконструирование TB-303

en: The design of the original TB-303 is actually pretty simple. As you can see from the following diagram there's only 4 core parts.
ru: Конструкция оригинальных TB-303 на самом деле довольно проста. Как вы можете видеть из следующей диаграммы, главных составляющих всего 4.

en: First is the oscillator wave - the raw ingredients of the sound. In this case we have a square wave. Next there's the oscillator's amplitude envelope which controls the amp of the square wave through time. These are accessed in Sonic Pi by the `attack:`, `decay:`, `sustain:` and `release:` opts along with their level counterparts. For more information read Section 2.4 'Duration with Envelopes' in the built-in tutorial. We then pass our enveloped square wave through a resonant low pass filter. This chops off the higher frequencies as well as having that nice resonance effect. Now this is where the fun starts. The cutoff value of this filter is also controlled by its own envelope! This means we have amazing control over the timbre of the sound by playing with both of these envelopes. Let's take a look:
ru: Первой является волновой регенератор - сырая основа звука. В этом примере у нас прямоугольная волна. Дальше идёт генератор амплитудной огибающей, который контролирует амплитуду прямоугольной волны во времени. Он доступен в Sonic Pi в виде параметров `attack:`, `decay:`, `sustain:` и `release:`. Для получения более подробной информации об этих параметрах читайте раздел 2.4 "Длительность с помощью огибающих" встроенного учебника. Затем, мы пропускаем наш амплитудно модулированный сигнал через резонансный низкочастотный фильтр. Это срубает высокочастотную составляющую, а также добавляет этот приятный резонансный эффект. Теперь начинается самое весёлое. Значение среза этого фильтра может управляться своей собственной огибающей! Это значит, что мы имеем удивительный контроль над тембром звука, играя двумя этими огибающими. Давайте приступим:

en: Notice that I've passed everything through a `:reverb` FX for extra atmosphere - try other FX to see what works!
ru: Заметьте, что я пропустил звук через `:reverb` эффект для создания дополнительной атмосферы - попробуйте другие эффекты, чтобы посмотреть, как это работает!

en: A.6 Musical Minecraft
ru: A.6 Музыкальный Minecraft

en: Musical Minecraft
ru: Музыкальный Minecraft

en: Hello and welcome back! In the previous tutorials we've focussed purely on the music possibilities of Sonic Pi - (turning your Raspberry Pi into a performance ready musical instrument). So far we've learned how to:
ru: Привет, и с возвращением! В предыдущих упражнениях мы сосредотачивались исключительно на музыкальных возможностях Sonic Pi - (превращая ваш Raspberry Pi в готовый к выступлению музыкальный инструмент). К этому моменту мы научились:

en: Live Code - changing the sounds on-the-fly,
ru: Кодировать в реальном времени,

en: Code some huge beats,
ru: Создавать различные ритмы,

en: Generate powerful synth leads,
ru: Генерировать мощные солирующие синты,

en: Re-create the famous TB-303 acid-bass sound.
ru: Воссоздавать знаменитые кислотные басы TB-303.

en: There's so much more to show you (which we will explore in future editions). However, this month, let's look at something Sonic Pi can do that you probably didn't realise: control Minecraft.
ru: Однако, есть ещё множество аспектов создания музыки, которые нужно показать вам (что я и сделаю в будущем). Но в этом месяце мы рассмотрим особенность Sonic Pi, о наличии которой вы, наверное, даже и не подозревали: управлять Minecraft.

en: Hello Minecraft World
ru: Привет, Мир Minecraft

en: OK, let's get started. Boot up your Raspberry Pi, fire up Minecraft Pi and create a new world. Now start up Sonic Pi and re-size and move your windows so you can see both Sonic Pi and Minecraft Pi at the same time.
ru: ОК, давайте начнём. Подключите ваш Raspberry Pi, запустите Minecraft Pi и создайте новый мир. Теперь запустите Sonic Pi, измените размеры окон и разместите их так, чтобы вы могли видеть одновременно и Minecraft Pi, и Sonic Pi.

en: In a fresh buffer type the following:
ru: В пустом буфере наберите следующее:

en: Now, hit Run. Boom! Your message appeared in Minecraft! How easy was that? Now, stop reading this for a moment and play about with your own messages. Have fun!
ru: Теперь, нажмите "Выполнить". Бум! Ваше сообщение появилось в Minecraft! Ну как, это было легко? Теперь, прекратите на мгновение чтение этой статьи и поиграйте с вашими собственными сообщениями. Веселитесь!

en: Sonic Teleporter
ru: Sonic Телепортатор

en: Now let's do some exploring. The standard option is to reach for the mouse and keyboard and start walking around. That works, but it's pretty slow and boring. It would be far better if we had some sort of teleport machine. Well, thanks to Sonic Pi, we have one. Try this:
ru: Теперь давайте исследовать мир Minecraft. Стандартный вариант - дотянуться до мыши и клавиатуры и начать перемещаться в мире Minecraft. Это работает, но это довольно медленно и скучно. Было бы гораздо интереснее, если бы у нас было что-то вроде телепортатора. Благодаря Sonic Pi, мы имеем один. Попробуйте это:

en: Crikey! That was a long way up. If you weren't in flying-mode then you would have fallen back down all the way to the ground. If you double-tap space to enter flying-mode and teleport again, you'll stay hovering at the location you zap to.
ru: Боже мой! Это был долгий путь вверх. Если вы не находились в режиме полёта, то должны были упасть обратно на землю. Если вы дважды нажмёте пробел для входа в режим полёта и телепортируетесь снова, вы останетесь висеть на том месте, куда вы в телепортировались.

en: Now, what do those numbers mean? We have three numbers which describe the coordinates of where in the world we want to go. We give each number a name - x, y and z:
ru: Итак, что же означают эти цифры? У нас есть три числа, которые описывают координаты места, куда мы хотим переместиться. Мы даём каждой цифре имя - х, y и z:

en: x - how far left and right (80 in our example)
ru: x - как далеко от левого края (в нашем примере - 80)

en: y - how high we want to be (40 in our example)
ru: y - как высоко (в нашем примере - 40)

en: z - how far forward and back (100 in our example)
ru: z - как далеко вглубь мира (в нашем примере - 100)

en: By choosing different values for x, y and z we can teleport *anywhere* in our world. Try it! Choose different numbers and see where you can end up. If the screen goes black it's because you've teleported yourself under the ground or into a mountain. Just choose a higher y value to get back out above land. Keep on exploring until you find somewhere you like...
ru: Выбирая различные значения для x, y и z, мы можем телепортироваться *куда угодно*. Попробуйте! Выбирайте различные цифры и смотрите, где вы окажетесь. Если экран стал чёрным, это произошло потому, что вы телепортировали себя под землю или внутрь скалы. Просто выберите значение `y` выше, чтобы оказаться снова над землёй. Продолжайте исследования, пока не найдёте место, которое вам понравится...

en: Using the ideas so far, let's build a Sonic Teleporter which makes a fun teleport sound whilst it whizzes us across the Minecraft world:
ru: Используя эти идеи, построим телепортатор, который издаёт весёлый звук телепортации, пока переносит нас сквозь мир Minecraft:

en: Magic Blocks
ru: Магические блоки

en: Now you've found a nice spot, let's start building. You could do what you're used to and start clicking the mouse furiously to place blocks under the cursor. Or you could use the magic of Sonic Pi. Try this:
ru: Сейчас, когда вы нашли хорошее место, начнём строительство. Вы могли бы делать то, к чему привыкли, и начать яростно кликать мышкой, располагая блоки под курсором. Или вы могли бы использовать магию Sonic Pi. Попробуйте это:

en: Now look up! There's a melon in the sky! Take a moment to look at the code. What did we do? On line one we grabbed the current location of Steve as the variables x, y and z. These correspond to our coordinates described above. We use these coordinates in the fn `mc_set_block` which will place the block of your choosing at the specified coordinates. In order to make something higher up in the sky we just need to increase the y value which is why we add 5 to it. Let's make a long trail of them:
ru: Теперь посмотри вверх! В небе дынный блок! Найдите минутку, чтобы посмотреть на код. Что он делает? На первой строке мы определили текущее местоположение как переменные x, y и z. Они соответствуют нашим координатам, описанным выше. Мы использовали эти координаты в функции `mc_set_block`, которая поместила блок, который мы выбрали, по указанным координатам. Чтобы указать сделать что-то выше в небе, нам просто нужно увеличить значение `y`, вот почему мы добавляем 5 к нему. Сделаем длинный след из этих блоков:

en: Now, jump over to Minecraft, make sure you're in flying-mode (double tap space if not) and fly all around the world. Look behind you to see a pretty trail of melon blocks! See what kind of twisty patterns you can make in the sky.
ru: Теперь переключитесь на Minecraft, убедитесь что вы находитесь в режиме полёта (двойное нажатие на пробел, если нет) и летайте по всему миру. Обернитесь, чтобы увидеть длинный след дынных блоков! Посмотрите, какие извилистые структуры вы можете сделать в небе.

en: Live Coding Minecraft
ru: Лайвкодинг Minecraft

en: Those of you that have been following this tutorial over the last few months will probably have your minds blown at this point. The trail of melons is pretty cool, but the most exciting part of the previous example is that you can use `live_loop` with Minecraft! For those that don't know, `live_loop` is Sonic Pi's special magic ability that no other programming language has. It lets you run multiple loops at the same time and allows you to change them whilst they run. They are incredibly powerful and amazing fun. I use `live_loop`s to perform music in nightclubs with Sonic Pi - DJs use discs and I use `live_loop`s :-) However, today we're going to live code both music and Minecraft.
ru: Тем из вас, кто следит за этими статьями в течение последних нескольких месяцев, наверное снесёт крышу к этому моменту. След дынных блоков это очень здорово, но самая захватывающая часть предыдущего пример заключается в том, что вы можете использовать `live_loop` с Minecraft! Для тех, кто не знает, цикл `live_loop` в Sonic Pi - особая магическая способность, которой нет других языках программирования. Он позволяет запускать несколько циклов в одно и то же время и изменять их, пока они выполняются. Они невероятно мощные и удивительно весёлые. Я использую `live_loop`, чтобы исполнять музыку в ночных клубах с Sonic Pi - диджеи используют диски, а я циклы `live_loop`:-) Тем не менее, сегодня мы собираемся кодировать в реальном времени и музыку, и Minecraft.

en: Let's get started. Run the code above and start making your melon trail again. Now, without stopping the code, just simply change `:melon` to `:brick` and hit run. Hey presto, you're now making a brick trail. How simple was that! Fancy some music to go with it? Easy. Try this:
ru: Давайте начнём. Запустите приведенный выше код и начните делать свой дынный след снова. Теперь, не останавливая код, просто измените `:melon` на `:brick` и нажмите "Выполнить". Вуаля, вы теперь делаете кирпичную дорогу. Это было просто! Добавим немного музыки в это? Легко. Попробуйте это:

en: live_loop :bass_trail do
      tick
      x, y, z = mc_location
      b = (ring :melon, :brick, :glass).look
      mc_set_block b, x, y -1, z
      note = (ring :e1, :e2, :e3).look
      use_synth :tb303
      play note, release: 0.1, cutoff: 70
      sleep 0.125
    end
ru: live_loop :bass_trail
      tick
      x, y, z = mc_location
      b = (ring :melon, :brick, :glass).look
      mc_set_block b, x, y -1, z
      note = (ring :e1, :e2, :e3).look
      use_synth :tb303
      play note, release: 0.1, cutoff: 70
      sleep 0.125
    end

en: Now, whilst that's playing start changing the code. Change the block types - try `:water`, `:grass` or your favourite block type. Also, try changing the cutoff value from `70` to `80` and then up to `100`. Isn't this fun?
ru: Теперь, пока это играет, начнём вносить изменения в наш код. Измените тип блока. Попробуйте `:water`, `:grass` или другой ваш любимый тип блока. Также, попробуйте изменить значение отсечки фильтра с `70` до `80` и затем до `100`. Разве это не весело?

en: Let's combine everything we've seen so far with a little extra magic. Let's combine our teleportation ability with block placing and music to make a Minecraft Music Video. Don't worry if you don't understand it all, just type it in and have a play by changing some of the values whilst it's running live. Have fun and see you next time...
ru: Давайте объединим всё, что мы видели до сих пор, с небольшой дополнительной магией. Совместим наши способности к телепортации с размещением блоков и музыкой, сделав музыкальное видео Minecraft. Не волнуйтесь, если вы не всё здесь понимаете, просто введите код в буфер и играйте, изменяя значения, пока код выполняется. Повеселитесь и увидимся в следующий раз...

en: A.7 Bizet Beats
ru: Ритмы Бизе

en: Bizet Beats
ru: Ритмы Бизе

en: After our brief excursion to the fantastic world of coding Minecraft with Sonic Pi last month, let's get musical again. Today we're going to bring a classical operatic dance piece straight into the 21st century using the awesome power of code.
ru: После нашего краткого экскурса в сказочный мир кодинга Minecraft в прошлом месяце, давайте снова помузицируем. Сегодня мы собираемся перенести классический оперный танцевальный ритм в 21-й век, используя грандиозную силу кода.

en: Outrageous and Disruptive
ru: Возмутительно и дерзко

en: Let's jump into a time machine back to the year 1875. A composer called Bizet had just finished his latest opera Carmen. Unfortunately like many exciting and disruptive new pieces of music people initially didn't like it at all because it was too outrageous and different. Sadly Bizet died ten years before the opera gained huge international success and became one of the most famous and frequently performed operas of all time. In sympathy with this tragedy let's take one of the main themes from Carmen and convert it to a modern format of music that is also too outrageous and different for most people in our time - live coded music!
ru: Переместимся на машине времени в 1875 год. Композитор Бизе как раз закончил свою последнюю оперу "Кармен". К сожалению, как и множество других прогрессивных, ломающих стереотипы музыкальных произведений, публика поначалу её не приняла, ведь она была слишком дерзкой и непохожей на другие оперы того времени. Печально, но Бизе умер за десять лет до того, как эта опера возымела ошеломляющий международный успех и стала одной из самых известных и часто исполняемых опер всех времён. Из сочувствия к этой трагедии, возьмем одну из главных тем оперы "Кармен", и преобразуем её в современный формат музыки, который также слишком возмутителен и чужд большинству людей нашего времени - кодированную музыку!

en: Decoding the Habanera
ru: Расшифровка Хабанеры

en: Trying to live code the whole opera would be a bit of a challenge for this tutorial, so let's focus on one of the most famous parts - the bass line to the Habanera:
ru: Пытаться кодировать всю оперу было бы трудноватой задачей для одной статьи, так что давайте сосредоточимся на одной из самых известных её частей - басовой партии Хабанеры:

en: This may look extremely unreadable to you if you haven't yet studied music notation. However, as programmers we see music notation as just another form of code - only it represents instructions to a musician instead of a computer. We therefore need to figure out a way of decoding it.
ru: Если вы ещё не изучали нотной записи, это будет выглядеть крайне непонятным для вас. Однако, как программисты, мы видим нотную запись просто как другую форму кода, содержащего инструкции не для компьютера, а для музыканта. Поэтому нам нужно найти способ декодировать его.

en: Notes
ru: Ноты

en: The notes are arranged from left to right like the words in this magazine but also have different heights. *The height on the score represents the pitch of the note.* The higher the note on the score, the higher the pitch of the note.
ru: Ноты упорядочиваются слева направо, как слова в этой статьи, но имеют разную высоту. *Высота относительно нотной партитуры обозначает высоту тона.* Чем выше нота находится в партитуре, тем выше высоты тона.

en: In Sonic Pi we already know how to change the pitch of a note - we either use high or low numbers such as `play 75` and `play 80` or we use the note names: `play :E` and `play :F`. Luckily each of the vertical positions of the musical score represents a specific note name. Take a look at this handy look up table:
ru: Мы уже знаем, как изменить высоту ноты в Sonic Pi - либо используя цифры, такие как `play 75` и `play 80`, либо используя названия нот: `play :Е` и `play :F`. К счастью, каждой вертикальной позиции музыкальной партитуры соответствует определенная нота. Взгляните на эту удобную таблицу:

en: Rests
ru: Паузы

en: Music scores are an extremely rich and expressive kind of code capable of communicating many things. It therefore shouldn't come as much of a surprise that musical scores can not only tell you what notes to play but also when *not* to play notes. In programming this is pretty much equivalent to the idea of `nil` or `null` - the absence of a value. In other words not playing a note is like the absence of a note.
ru: Ноты представляют собой чрезвычайно богатый и выразительный вид кода, способного объединить сразу множество вещей. Поэтому для вас не должно стать большим удивлением, что партитура может не только сказать вам, какие ноты играть, но также когда ноты играть *не* нужно . В программировании это эквивалентно `nil` или `null` - отсутствию значения. Другими словами, пауза - это отсутствие ноты.

en: If you look closely at the score you'll see that it's actually a combination of black dots with lines which represent notes to play and squiggly things which represent the rests. Luckily Sonic Pi has a very handy representation for a rest: `:r`, so if we run: `play :r` it actually plays silence! We could also write `play :rest`, `play nil` or `play false` which are all equivalent ways of representing rests.
ru: Если вы внимательно посмотрите на партитуру, вы увидите, что это на самом деле сочетание горизонтальных линий с черными точками, которые представляют собой ноты, которые нужно играть, и волнистых штук, которые представляют собой паузы. К счастью, Sonic Pi имеет очень удобное представление для пауз: `:r`, так, если мы выполним: `play :r`, он на самом деле сыграет тишину! Мы могли бы также написать `play :rest`, `play nil` или `play false` - это всё эквивалентные способы представления пауз.

en: Rhythm
ru: Ритм

en: Finally, there's one last thing to learn how to decode in the notation - the timings of the notes. In the original notation you'll see that the notes are connected with thick lines called beams. The second note has two of these beams which means it lasts for a 16th of a beat. The other notes have a single beam which means they last for an 8th of a beat. The rest has two squiggly beams which means it also represents a 16th of the beat.
ru: Наконец, нужно узнать ещё одну вещь - как расшифровывать в партитуре длительности нот. В оригинальной партитуре мы видим, что ноты связаны толстыми линиями, называемыми рёбрами. Вторая нота имеет два таких ребра, что означает, что она длится 16-ю часть такта. Другие ноты имеют одно ребро, которое означает, что они длятся 8-ю часть такта. Паузы имеют два волнистых флажка, которые означают, что они также длятся 16-ю часть такта.

en: When we attempt to decode and explore new things a very handy trick is to make everything as similar as possible to try and see any relationships or patterns. For example, when we re-write our notation purely in 16ths you can see that our notation just turns into a nice sequence of notes and rests.
ru: Когда мы пытаемся расшифровать и изучить новые вещи, очень удобный приём - сделать всё как можно более однородным, чтобы увидеть соотношения и структуры. Например, если мы перепишем нашу партитуру одними только 16-ми длительностями, вы сможете увидеть, что она превращается в простую последовательность нот и пауз.

en: Re-coding the Habanera
ru: Повторное кодирование Хабанеры

en: We're now in a position to start translating this bass line to Sonic Pi. Let's encode these notes and rests in a ring:
ru: Теперь мы в состоянии начать переводить эту басовую партию для Sonic Pi. Давайте закодируем эти ноты и паузы в кольцо:

en: Let's see what this sounds like. Throw it in a live loop and tick through it:
ru: Теперь посмотрим, как это звучит. Закиньте это кольцо в живой цикл, чтобы можно было последовательно извлекать элементы кольца:

en: Fabulous, that instantly recognisable riff springs to life through your speakers. It took a lot of effort to get here, but it was worth it - high five!
ru: Легендарный, мгновенно узнаваемый рифф возвращается к жизни сквозь ваши колонки. Потребовалось немало усилий, чтобы добраться сюда, но это того стоило!

en: Moody Synths
ru: Мрачные синты

en: Now we have the bass line, let's re-create some of the ambience of the operatic scene. One synth to try out is `:blade` which is a moody 80s style synth lead. Let's try it with the starting note `:d` passed through a slicer and reverb:
ru: Теперь у нас есть басовая партия. Давайте воссоздадим атмосферу оперной сцены. Попробуем осуществить это с `:blade`, мрачным солирующим синтом в стиле 80-х. Давайте испробуем его, извлекая ноту `:d`, пропущенную через эффекты нарезки и реверберации:

en: Now, try the other notes in the bass line: `:a` and `:f5`. Remember, you don't need to hit stop, just modify the code whilst the music is playing and hit run again. Also, try different values for the slicer's `phase:` opt such as `0.5`, `0.75` and `1`.
ru: Теперь, попробуйте подставить туда другие ноты басовой партии:`:a` и `:f5`. Помните, вам не надо нажимать кнопку "Остановить", просто измените код в то время, как музыка играет, и нажмите "Выполнить" снова. Также, попробуйте разные значения параметра `phase:` нарезки, такие как `0.5`, `0.75` и `1`.

en: Finally, let's combine all the ideas so far into a new remix of the Habanera. You might notice that I've included another part of the bass line as a comment. Once you've typed it all into a fresh buffer hit Run to hear the composition. Now, without hitting stop, *uncomment* the second line by removing the `#` and hit run again - how marvellous is that! Now, start mashing it around yourself and have fun.
ru: Наконец, давайте объединим все идеи этой статьи в новый ремикс Хабанеры. Вы можете заметить, что я включил ещё одну часть басовой партии как комментарий. Как только вы набрали всё это в буфере, нажмите "Выполнить", чтобы прослушать композицию. Затем, не нажимая кнопку "Остановить", *раскомментируйте* вторую строку, удалив знак `#`, и нажмите "Выполнить" снова - как это удивительно! Итак, начинайте лайвкодинг и веселитесь.

en: A.8 Become a Minecraft VJ
ru: A.8 Становимся Minecraft-виджеями

en: Become a Minecraft VJ
ru: Становимся Minecraft-виджеями

en: Everyone has played Minecraft. You will all have built amazing structures, designed cunning traps and even created elaborate cart lines controlled by redstone switches. How many of you have performed with Minecraft? We bet you didn't know that you could use Minecraft to create amazing visuals just like a professional VJ.
ru: Все вы играли в Minecraft. Все строили удивительные сооружения, конструировали хитрые ловушки и даже создавали контролируемые транспортные линии. Но, держу пари, вы не догадывались, что могли бы использовать Minecraft для создания удивительных визуальных эффектов как профессиональный виджей.

en: If your only way of modifying Minecraft was with the mouse, you'd have a tough time changing things fast enough. Luckily for you your Raspberry Pi comes with a version of Minecraft that can be controlled with code. It also comes with an app called Sonic Pi which makes coding Minecraft not only easy but also incredibly fun.
ru: Если вашим единственным способом игры с Minecraft была модификация игрового мира с помощью мышки, вам наверняка было бы трудно изменять его достаточно быстро. К счастью, ваш Raspberry Pi поставляется с версией Minecraft, управляемой с помощью кода. Он также содержит приложение Sonic Pi, которое делает кодирование Minecraft не только лёгким, но и невероятно весёлым.

en: In today's article we'll be showing you some of the tips and tricks that we've used to create performances in night clubs and music venues around the world.
ru: В этой статье я покажу вам некоторые советы и трюки, использующиеся в выступлениях в ночных клубах и концертных площадках по всему миру.

en: Let's get started...
ru: Итак, начнём...

en: Getting Started
ru: Приступая к работе

en: Let's start with a simple warm up exercise to refresh ourselves with the basics. First up, crack open your Raspberry Pi and then fire up both Minecraft and Sonic Pi. In Minecraft, create a new world, and in Sonic Pi choose a fresh buffer and write in this code:
ru: Давайте начнём с простого разминочного упражнения, дабы освежить в памяти основы. Во-первых, подключите ваш Raspberry Pi и запустите Sonic Pi вместе с Minecraft. В Minecraft создайте новый мир, а в Sonic Pi выберите пустой буфер и наберите там этот код:

en: Hit the Run button and you'll see the message over in the Minecraft window. OK, we're ready to start, let's have some fun......
ru: Нажмите кнопку "Выполнить", и вы увидите сообщение в окне Minecraft. Хорошо, мы готовы начать, давайте повеселимся......

en: Sand Storms
ru: Песчаные бури

en: When we're using Minecraft to create visuals we try and think about what will both look interesting and also be easy to generate from code. One nice trick is to create a sand storm by dropping sand blocks from the sky. For that all we need are a few basic fns:
ru: Когда мы используем Minecraft для создания визуальных эффектов, мы стараемся думать о том, чтобы это одновременно выглядело интересно и легко генерировалось с помощью кода. Интересный трюк - создать песчаную бурю, сбрасывая песчаные блоки с неба. Для этого нам необходимы несколько базовых функций:

en: `sleep` - for inserting a delay between actions
ru: `sleep` - для того, чтобы вставить задержку между действиями

en: `mc_location` - to find our current location
ru: `mc_location` - для нахождения нашего текущего местоположения

en: `mc_set_block`- to place sand blocks at a specific location
ru: `mc_set_block`- чтобы поместить песчаный блок в заданное место

en: `rrand` - to allow us to generate random values within a range
ru: `rrand` - для генерации случайных чисел в заданном диапазоне

en: `live_loop` - to allow us to continually make it rain sand
ru: `live_loop` - позволяет сделать дождь из песка непрерывным

en: If you're unfamiliar with any of the built-in fns such as `rrand`, just type the word into your buffer, click on it and then hit the keyboard combo `Control-i` to bring up the built-in documentation. Alternatively you can navigate to the *lang* tab in the Help system and then look up the fns directly along with all the other exciting things you can do.
ru: Если вы не знакомы с какой-либо из встроенных функций, например `rrand`, просто введите её название в свой буфер, кликните на нём, а затем используйте клавиатурное сочетание `Ctrl-i`, вызывающее встроенную документацию. В качестве альтернативы вы можете переместиться к вкладке *язык* справочной системы, и найти нужную функцию прямо там, как и другие интересные вещи.

en: Let's make it rain a little first before unleashing the full power of the storm. Grab your current location and use it to create a few sand blocks up in the sky nearby:
ru: Прежде чем высвободить всю мощь бури, сделаем небольшой дождь. Возьмём ваше текущее местоположение и используем его для создания нескольких песчаных блоков в небе неподалеку:

en: When you hit Run, you might have to look around a little as the blocks may start falling down behind you depending on which direction you're currently facing. Don't worry, if you missed them just hit Run again for another batch of sand rain - just make sure you're looking the right way!
ru: Когда вы нажмете "Выполнить", вам, возможно, придется немного осмотреться, так как блоки могут начать падать позади вас в зависимости от того, в каком направлении вы в настоящее время смотрите. Не волнуйтесь, если вы пропустили их, просто нажмите "Выполнить" снова, и вы получите ещё одну порцию песчаного дождя - просто убедитесь, что вы смотрите в правильном направлении!

en: Let's quickly review what's going on here. On the first line we grabbed Steve's location as coordinates with the fn `mc_location` and placed them into the vars `x`, `y`, and `z`. Then on the next lines we used the `mc_set_block` fn to place some sand at the same coordinates as Steve but with some modifications. We chose the same x coordinate, a y coordinate 20 blocks higher and then successively larger z coordinates so the sand dropped in a line away from Steve.
ru: Давайте быстро посмотрим, что тут у нас происходит. На первой строке мы получили местоположение Стива в виде координат с помощью функции `mc_location` и присвоили их переменным `х`, `у`, и `z`. На последующих строках мы использовали функцию `mc_set_block`, чтобы поместить немного песка в тех же координатах, что и Стив но с некоторыми изменениями. Мы выбрали ту же координату `x`, но координата `y` стала на 20 блоков выше, а затем последовательно увеличивали `z`, чтобы песок падал в линию, удаляющуюся от Стива.

en: Why don't you take that code and start playing around with it yourself? Try adding more lines, changing the sleep times, try mixing `:sand` with `:gravel` and choose different coordinates. Just experiment and have fun!
ru: Почему бы вам самим не поиграть с этим кодом? Попробуйте добавить больше линий, измените время задержки, попробуйте смешать `:sand` с `:gravel` и выбирать разные координаты. Просто экспериментируйте и веселитесь!

en: Live Loops Unleashed
ru: Раскручиваем живые циклы

en: OK, it's time to get the storm raging by unleashing the full power of the `live_loop` - Sonic Pi's magical ability which unleashes the full power of live coding - changing code on-the-fly whilst it's running!
ru: Хорошо, пришло время получить бушующую бурю, высвободив мощь `live_loop` - магической способности Sonic Pi, раскрывающей всю силу лайвкодинга - изменения кода в реальном времени!

en: live_loop :sand_storm do
      x, y, z = mc_location
      xd = rrand(-10, 10)
      zd = rrand(-10, 10)
      co = rrand(70, 130)
      synth :cnoise, attack: 0, release: 0.125, cutoff: co
      mc_set_block :sand, x + xd, y+20, z+zd
      sleep 0.125
    end
ru: live_loop :sand_storm do
      x, y, z = mc_location
      xd = rrand(-10, 10)
      zd = rrand(-10, 10)
      co = rrand(70, 130)
      synth :cnoise, attack: 0, release: 0.125, cutoff: co
      mc_set_block :sand, x + xd, y + 20, z + zd
      sleep 0.125
    end

en: What fun! We're looping round pretty quickly (8 times a second) and during each loop we're finding Steve's location like before but then generating 3 random values:
ru: Это весело! Мы выполняем круг цикла довольно быстро (8 раз в секунду), и во время каждого круга мы находим местоположение Стива также, как и раньше, но в этот раз генерируем 3 случайных значения:

en: `xd` - the difference for x which will be between -10 and 10
ru: `xd` - разница для `x`, которая будет находиться между -10 и 10

en: `zd` - the difference for z also between -10 and 10
ru: `zd` - разница для `z`, которая также будет между -10 и 10

en: `co` - a cutoff value for the low pass filter between 70 and 130
ru: `co` - значение среза фильтра низких частот между 70 и 130

en: We then use those random values in the fns `synth` and `mc_set_block` giving us sand falling in random locations around Steve along with a percussive rain-like sound from the `:cnoise` synth.
ru: Затем мы используем эти случайные значения в функциях `synth` и `mc_set_block`, что даёт нам песок, падающий случайным образом вокруг Стива вместе с перкуссионным звуком, похожим на дождь, от синтезатора `:cnoise`.

en: For those of you new to live loops - this is where the fun really starts with Sonic Pi. Whilst the code is running and the sand is pouring down, try changing one of the values, perhaps the sleep time to `0.25` or the `:sand` block type to `:gravel`. Now hit run *again*. Hey Presto! Things changed without the code stopping. This is your gateway to performing like a real VJ. Keep practising and changing things around. How different can you make the visuals without stopping the code?
ru: Для тех из вас, кто ещё новичок в живых циклах - именно здесь и начинается самое интересное. Пока код выполняется и песок сыплется вниз, попробуйте изменить одно из значений. Например, время задержки на `0.25`, или тип блока с `:sand` на `:gravel`. Теперь нажмите "Выполнить" *снова*. Эй! Всё изменилось без остановки кода. Это и есть та самая дверь к выступлениям в роли виджея. Продолжайте тренироваться и что-нибудь изменять. Насколько разнообразными можно сделать визуальные эффекты, не останавливая кода?

en: Epic Block Patterns
ru: Эпические блочные структуры

en: Finally, another great way of generating interesting visuals is to generate huge patterned walls to fly towards and close by. For this effect we'll need to move from placing the blocks randomly to placing them in an ordered manner. We can do this by nesting two sets of iteration (hit the Help button and navigate to section 5.2 of the tutorial "Iteration and Loops" for more background on iteration). The funny `|xd|` after the do means that `xd` will be set for each value of the iteration. So the first time it will be 0, then 1, then 2... etc. By nesting two lots of iteration together like this we can generate all the coordinates for a square. We can then randomly choose block types from a ring of blocks for an interesting effect:
ru: Наконец, еще один отличный способ создания интересных визуальных эффектов - генерировать огромные повторяющиеся стены, парящие рядом. Для этого эффекта нам нужно перейти от размещения блоков случайным образом, к размещению их в упорядоченном виде. Мы можем сделать это с помощью двух вложенных итераций (нажмите кнопку "Помощь", чтобы перейти в раздел 5.2 учебника "Итерации И Циклы", чтобы узнать больше об итерациях). Аргумент `|xd|` после `do` означает, что `xd` будет соответствовать номеру итерации. Поэтому сначала это будет 0, потом 1, потом 2... и т. д. Совмещая две итерации вместе, мы можем сгенерировать любые координаты. Затем мы произвольно выбираем типы блоков из кольцевого списка для создания интересного эффекта:

en: Pretty neat. Whilst we're having fun here, try changing `bs.choose` to `bs.tick` to move from a random pattern to a more regular one. Try changing the block types and the more adventurous of you might want to try sticking this within a `live_loop` so that the patterns keep changing automatically.
ru: Довольно аккуратно. В то время как мы здесь веселимся, попробуйте изменить `bs.choose`, на `bs.tick`, чтобы перейти от случайного выбора к последовательному. Попробуйте изменять типы блоков более радикально. Вы можете захотеть делать это с `live_loop`, чтобы узоры продолжали изменяться автоматически.

en: Now, for the VJ finale - change the two `10.times` to `100.times` and hit Run. Kaboom! A Huge gigantic wall of randomly placed bricks. Imagine how long it would take you to build that manually with your mouse! Double-tap space to enter fly-mode and start swooping by for some great visual effects. Don't stop here though - use your imagination to conjure up some cool ideas and then use the coding power of Sonic Pi to make it real. When you've practised enough dim the lights and put on a VJ show for your friends!
ru: Теперь, измените обе итерации с `10.times` на `100.times` и нажмите "Выполнить". Бабах! Огромные исполинские стены с хаотично расположенными кирпичами. Представьте сколько времени потребуется вам, чтобы построить их вручную с помощью мыши! Дважды нажмите пробел, чтобы переключиться в режим полёта и начните парить для создания замечательных визуальных эффектов. Не останавливайтесь на этом, используйте своё воображение, чтобы придумать интересные идеи, а затем, использовав силу кода Sonic Pi, сделайте это реальностью. Когда вы достаточно попрактикуетесь, приглушите свет и покажите шоу своим друзьям!

en: A.9 Randomisation
ru: A.9 Рандомизация

en: Surfing Random Streams
ru: Серфинг случайных потоков

en: Back in episode 4 of this tutorial series we took a brief look at randomisation whilst coding up some sizzling synth riffs. Given that randomisation is such an important part of my live coding DJ sets I thought it would be useful to cover the fundamentals in much greater detail. So, get your lucky hat on and let's surf some random streams!
ru: В 4 разделе этого руководства мы кратко рассмотрели рандомизацию и закодировали несколько потрясающих синтезаторных риффов. Учитывая, что рандомизация является такой важной частью моих лайвкодинг сетов, я подумал, что было бы полезно раскрыть основы более подробно. Итак, наденьте свою счастливую шляпу и давайте посмотрим на несколько случайных потоков!

en: There is no random
ru: Там нет случайного

en: The first thing to learn which might really surprise you when playing with Sonic Pi's randomisation functions is that they're not actually really random. What does this actually mean? Well, let's try a couple of tests. First, imagine a number in your head between 0 and 1. Keep it there and don't tell me. Now let me guess... was it `0.321567`? No? Bah, I'm clearly no good at this. Let me have another go, but let's ask Sonic Pi to choose a number this time. Fire up Sonic Pi v2.7+ and ask it for a random number but again don't tell me:
ru: Первое, что можно узнать, что может вас удивить, играя с функциями рандомизации в Sonic Pi, это то, что они на самом деле не случайны. Что это на самом деле означает? Что ж, давайте предпримем пару эксперементов. Во-первых, представьте число в вашей голове от 0 до 1. Держите его там и не говорите мне. Теперь позвольте мне догадаться ... это было `0.321567`? Нет? Ба, да я явно не хорош в этом. Позвольте мне еще раз, но теперь давайте попросим Sonic Pi выбрать это число. Запустите Sonic Pi v2.7 + и укажите выбрать случайное число, но не говорите мне его:

en: Now for the reveal... was it `0.75006103515625`? Yes! Ha, I can see you're a little sceptical. Perhaps it was just a lucky guess. Let's try again. Press the Run button again and see what we get... What? `0.75006103515625` again? This clearly can't be random! You're right, it's not.
ru: Вскроем карты ... было ли это `0.75006103515625`? Да! Ха, я вижу, вы настроены немного скептически. Возможно, это была просто удачная догадка. Давай еще раз попробуем. Нажмите кнопку Выполнить еще раз и посмотрите, что мы получим ... Что? `0.75006103515625` снова? Это явно не может быть случайным! Ты прав, это не так.

en: What's going on here? The fancy computer science word here is determinism. This just means that nothing is by chance and everything is destined to be. Your version of Sonic Pi is destined to always return `0.75006103515625` in the program above. This might sound pretty useless, but let me assure you that it's one of the most powerful parts of Sonic Pi. If you stick at it you'll learn how to rely on the deterministic nature of Sonic Pi's randomisation as a fundamental building block for your compositions and live coded DJ sets.
ru: Что тут происходит? Одно причудливое слово из информатики - детерминизм. Это  означает, что ничто не случайно и всему суждено быть. Ваша версия Sonic Pi всегда должна возвращать `0.75006103515625` в ответ на указанный выше запрос. Это может показаться довольно бесполезным, но я хочу заверить вас, что это одна из самых мощных частей Sonic Pi. Если вы задержитесь на этом, вы узнаете, как использовать детерминистскую природу рандомизации Sonic Pi в качестве основного строительного блока для ваших композиций и лайвкодинг сетов.

en: A Random Melody
ru: Случайная мелодия

en: When Sonic Pi boots it actually loads into memory a sequence of 441,000 pre-generated random values. When you call a random function such as `rand` or `rrand`, this random stream is used to generate your result. Each call to a random function consumes a value from this stream. Therefore the 10th call to a random function will use the 10th value from the stream. Also, every time you press the Run button, the stream is reset for that run. This is why I could predict the result to `rand` and why the 'random' melody was the same every time. Everybody's version of Sonic Pi uses the exact same random stream which is very important when we start sharing our pieces with each other.
ru: Когда Sonic Pi загружается, он фактически загружает в память последовательность из 441 000 предварительно сгенерированных случайных значений. Когда вы вызываете случайную функцию, такую как `rand` или` rrand`, этот случайный поток используется для генерации вашего результата. Каждый вызов случайной функции берет значение из этого потока. Поэтому 10-й вызов случайной функции будет использовать 10-е значение из потока. Кроме того, каждый раз, когда вы нажимаете кнопку Выполнить, для этого цикла исполнения кода, поток случайных значений сбрасывается к своему началу. Вот почему я мог предсказать результат  `rand` и почему «случайная» мелодия всегда была одинаковой. В каждой версии Sonic Pi используется один и тот же случайный поток, что очень важно, когда мы начинаем делиться друг с другом своими произведениями.

en: Let's use this knowledge to generate a repeatable random melody:
ru: Давайте используем эти знания для генерации повторяемой случайной мелодии:

en: Type this into a spare buffer and hit Run. You'll hear a melody consisting of 'random' notes between 50 and 95. When it's finished, hit Run again to hear exactly the same melody again.
ru: Введите это в свободный буфер и нажмите Выполнить. Вы услышите мелодию, состоящую из «случайных» нот от 50 до 95. Когда она закончится, снова нажмите Выполнить, чтобы снова услышать точно такую же мелодию.

en: Handy Randomisation Functions
ru: Удобства функций рандомизации

en: Sonic Pi comes with a number of useful functions for working with the random stream. Here's a list of some of the most useful:
ru: Sonic Pi поставляется с рядом полезных функций для работы со случайным потоком. Вот список некоторых из самых полезных:

en: `rand` - Simply returns the next value in the random stream
ru: `rand` - просто возвращает следующее значение в случайном потоке

en: `rrand` - Returns a random value within a range
ru: `rrand` - возвращает случайное значение в диапазоне

en: `rrand_i` - Returns a random whole number within a range
ru: `rrand_i` - возвращает случайное целое число в диапазоне

en: `one_in` - Returns true or false with the given probability
ru: `one_in` - возвращает true или false с заданной вероятностью

en: `dice` - Imitates rolling a dice and returns a value between 1 and 6
ru: `dice` - имитирует бросание костей и возвращает значение от 1 до 6

en: `choose` - Chooses a random value from a list
ru: `choose` - выбирает случайное значение из списка

en: Check out their documentation in the Help system for detailed information and examples.
ru: Ознакомьтесь с документацией этих функций в справочной системе для получения подробной информации и примеров использования.

en: Resetting the Stream
ru: Сброс потока

en: Whilst the ability to repeat a sequence of chosen notes is essential to allow you to replay a riff on the dance floor, it might not be exactly the riff you want. Wouldn't it be great if we could try a number of different riffs and choose the one we liked best? This is where the real magic starts.
ru: Хотя возможность повторять последовательность выбранных нот очень важна, чтобы позволить вам воспроизвести риф на танцполе, это может быть не тот рифф, который вы хотите. Разве не было бы здорово, если бы мы могли попробовать несколько разных риффов и выбрать тот, который нам больше всего понравился? Здесь начинается настоящее волшебство.

en: We can manually set the stream with the fn `use_random_seed`. In Computer Science, a random seed is the starting point from which a new stream of random values can sprout out and blossom. Let's try it:
ru: Мы можем вручную установить поток с помощью функции `use_random_seed`. В информатике случайное начальное число является отправной точкой, из которой может вырасти и расцвести новый поток случайных значений. Давай попробуем:

en: Great, we get the first three notes of our random melody above: `84`, `83` and `71`. However, we can now change the seed to something else. How about this:
ru: Отлично, так мы получаем первые три ноты нашей случайной мелодии: `84`,` 83` и `71`. Однако теперь мы можем изменить семя для чего-то другого. Как насчет этого:

en: Interesting, we get `83`, `71` and `61` . You might notice that the first two numbers here are the same as the last two numbers before - this isn't a coincidence.
ru: Интересно, что мы получили `83`,` 71` и `61`. Вы можете заметить, что первые два числа здесь такие же, как и последние два числа из тех, что мы получили ранее. И это не совпадение.

en: Remember that the random stream is just a giant list of 'pre-rolled' values. Using a random seed simply jumps us to a point in that list. Another way of thinking about it is to imagine a huge deck of pre-shuffled cards. Using a random seed is cutting the deck at a particular point. The fabulous part of this is that it's precisely this ability to jump around the random stream which gives us huge power when making music.
ru: Помните, что случайный поток - это просто гигантский список предварительно сгенерированных значений. Использование случайного начального числа просто переносит нас к точке в этом списке. Другой способ думать об этом - представить огромную колоду предварительно перемешанных карт. Использование случайного семени разрезает колоду в определенной точке. Нечто потрясающее здесь в том, что именно эта возможность переноситься по случайному потоку дает нам огромные возможности при создании музыки.

en: Let's revisit our random melody of 8 notes with this new stream resetting power, but let's also throw in a live loop so we can experiment live whilst it's playing:
ru: Давайте вернемся к нашей случайной мелодии из 8 нот с этой новообретенной силой сброса случайного потока, но добавим также живой цикл, чтобы мы могли экспериментировать вживую, пока он играет:

en: Now, whilst it's still playing, change the seed value from `0` to something else. Try `100`, what about `999`. Try your own values, experiment and play around - see which seed generates the riff you like best.
ru: Теперь, пока он все еще играет, измените начальное значение с 0 на другое. Попробуйте `100`, или даже` 999`. Попробуйте свои собственные значения, поэкспериментируйте с этим - посмотрите, какое семя создает риф, который вам больше нравится.

en: This month's tutorial has been quite a technical dive into the workings of Sonic Pi's randomisation functionality. Hopefully it has given you some insight into how it works and how you can start using randomisation in a reliable way to create repeatable patterns within your music. It's important to stress that you can use repeatable randomisation *anywhere* you want. For example, you can randomise the amplitude of notes, the timing of the rhythm, the amount of reverb, the current synth, the mix of an FX, etc. etc. In the future we'll take a close look at some of these applications, but for now let me leave you with a short example.
ru: Учебное пособие этого месяца стало погружением в техническую область функционала рандомизации в Sonic Pi. Надеемся, что это дало вам некоторое представление о том, как это работает и как вы можете  использовать рандомизацию с предсказуемым результатом для создания повторяющихся паттернов в вашей музыке. Важно подчеркнуть, что вы можете использовать повторяемую рандомизацию *где угодно *. Например, вы можете рандомизировать амплитуду нот, синхронизацию ритма, количество реверберации, параметры исполняемого синтезатора, микс эффектов и т. д. В будущем мы подробно рассмотрим кое-что из этого, но сейчас позвольте мне оставить вас с коротким примером.

en: Type the following into a spare buffer, hit Run, and then start changing the seeds around, hit Run again (whilst it's still playing) and explore the different sounds, rhythms and melodies you can make. When you find a nice one, remember the seed number so you can get back to it. Finally, when you've found a few seeds you like, put on a live coded performance for your friends by simply switching between your favourite seeds to create a full piece.
ru: Введите следующие слова в свободный буфер, нажмите Run, а затем начните менять семплы местами, снова нажмите Run (пока воспроизведение продолжается) и исследуйте различные звуки, ритмы и мелодии, которые вы можете создать. Когда вы найдете хороший вариант, запомните номер семпла, чтобы иметь возможность вернуться к нему. Наконец, когда вы найдете несколько понравившихся вам сидами, устройте live code представление для своих друзей, просто переключаясь между своими любимыми сидами, чтобы создать полноценное произведение.

en: A.10 Control
ru: A.10 Управление

en: Controlling Your Sound
ru: Управление вашим звуком

en: So far during this series we've focussed on triggering sounds. We've discovered that we can trigger the many synths built into Sonic Pi with `play` or `synth` and how to trigger pre-recorded samples with `sample`. We've also looked at how we can wrap these triggered sounds within studio FX such as reverb and distortion using the `with_fx` command. Combine this with Sonic Pi's incredibly accurate timing system and you can produce a vast array of sounds, beats and riffs. However, once you've carefully selected a particular sound's options and triggered it, there's no ability to mess with it whilst it's playing right? Wrong! Today you're going to learn something very powerful - how to control running synths.
ru: До сих пор в этой серии мы фокусировались на запуске звуков. Мы обнаружили, что можем запускать синтезаторы Sonic Pi с помощью `play` или` synth`, а предварительно записанные сэмплы с помощью `sample`. Мы также рассмотрели, как обернуть эти звуки внутрь FX-контекста студийных эффектов, таких как реверберация и искажение, используя команду `with_fx`. Объединив это с невероятно точной системой синхронизации Sonic Pi, вы сможете создавать огромное количество звуков, битов и риффов. Однако, как только вы тщательно выбрали параметры определенного звука и запустили его, у вас не будет возможности поиграть с ним, пока он воспроизводится, правильно? Неправильно! Сегодня вы узнаете кое-что очень мощное - как управлять работой синтезаторов.

en: A Basic Sound
ru: Основной звук

en: Let's create a nice simple sound. Fire up Sonic Pi and in a fresh buffer type the following:
ru: Давайте создадим простой звук. Запустите Sonic Pi и в свободном буфере наберите следующее:

en: Now press the Run button at the top left to hear a lovely rumbling synth sound. Go ahead, press it again a few times to get a feel for it. OK, done? Let's start controlling it!
ru: Теперь нажмите кнопку Выполнить в левом верхнем углу, чтобы услышать чудный грохочущий синтезаторный звук. Давайте, нажмите его еще несколько раз, чтобы хорошенько прочувствовать это. Готово? Теперь давайте поуправляем им!

en: Synth Nodes
ru: Узлы синтезатора

en: A little known feature in Sonic Pi is that the fns `play`, `synth` and `sample`, return something called a `SynthNode` which represents a running sound. You can capture one of these `SynthNode`s using a standard variable and then **control** it at a later point in time. For example, let's change the value of the `cutoff:` opt after 1 beat:
ru: Малоизвестная особенность Sonic Pi заключается в том, что функции `play`,` synth` и `sample` возвращают нечто, называемое SynthNode`, что представляет собой исполняемый звук. Вы можете захватить один из этих `SynthNode`, используя стандартную переменную, а затем ** контролировать ** ее в более поздний момент времени. Например, давайте изменим значение параметр `cutoff:` после 1 такта:

en: Let's look at each line in turn:
ru: Давайте рассмотрим каждую строку по очереди:

en: Firstly we trigger the `:prophet` synth using the `synth` fn as normal. However we also capture the result in a variable called `sn`. We could have called this variable something completely different such as `synth_node` or `jane` - the name doesn't matter. However, it's important to choose a name that's meaningful to you for your performances and for people reading your code. I chose `sn` as it's a nice short mnemonic for synth node.
ru: Сначала мы запускаем синтезатор `: prophet`, используя функцию ` synth` как обычно. Кроме того, мы еще фиксируем это в переменной с именем `sn`. Мы могли бы назвать эту переменную как-то иначе, например, «synth_node» или «jane» - имя не имеет значения. Однако полезно выбрать такое имя, которое будет что-то означать для вас и для людей, читающих ваш код. Я выбрал `sn`, так как это мнемонически удобное сокращение для узла синтезатора (synth node).

en: On line 2 we have a standard `sleep` command. This does nothing special - it just asks the computer to wait for 1 beat before moving onto the next line.
ru: В строке 2 у нас есть стандартная команда `sleep`. В этом нет ничего особенного - она просто просит компьютер подождать 1 такт, прежде чем перейти к следующей строке.

en: Line 3 is where the control fun starts. Here, we use the `control` fn to tell our running `SynthNode` to change the cutoff value to `130`. If you hit the **Run** button, you'll hear the `:prophet` synth start playing as before, but after 1 beat it will shift to sound a lot brighter.
ru: В строке 3 начинается веселье управления. Здесь мы используем функцию `control`, чтобы указать исполняемому` SynthNode` изменить значение среза фильтра на `130`. Если вы нажмете кнопку ** Выполнить **, вы услышите, как синтезатор `: prophet` начнет воспроизводиться, как было прежде, но после 1 такта он будет звучать намного ярче.

en: Modulatable Options
ru: Модулируемые параметры

en: Most of Sonic Pi's synths and FX opts may be changed after being triggered. However, this isn't the case for all of them. For example, the envelope opts `attack:`, `decay:`, `sustain:` and `release:` can only be set when triggering the synth. Figuring out which opts can and can't be changed is simple - just head to the documentation for a given synth or FX and then scroll down to the individual option documentation and look for the phrases "May be changed whilst playing" or "Can not be changed once set". For example, the documentation for the `:beep` synth's `attack:` opt makes it clear that it's not possible to change it:
ru: Большинство параметров синтезаторов и эффектов в Sonic Pi могут быть изменены в процессе исполнения. Но это не относится ко всем из них. Например, параметры огибающей `attack:`, `decay:`, `Sustain:` и `release:` могут быть установлены только при запуске исполнения синтезатора. Выяснить, какие параметры можно, а какие нельзя изменять достаточно просто - перейдите к документации синтезатора или эффекта, а затем прокрутите вниз до спецификаций отдельных параметров, ориентируясь на фразы «Может быть изменено во время игры» или «Не может быть измененным после установки». Например, документация для `: beep` synth's указывает, что параметр 'attack:`изменять нельзя:

en: Must be zero or greater
ru: Должно быть больше или равно нолю

en: Can not be changed once set
ru: Не может быть изменено после установки

en: Scaled with current BPM value
ru: Масштабируется относительно текущего значения BPM

en: Multiple Changes
ru: Множественные изменения

en: Whilst a synth is running you're not limited to changing it only once - you're free to change it as many times as you like. For example, we can turn our `:prophet` into a mini arpeggiator with the following:
ru: Пока синтезатор исполняется, вы не ограничены изменять его только один раз - вы можете менять его столько раз, сколько захотите. Например, мы можем превратить наш `: prophet` в мини-арпеджиатор  следующим образом:

en: In this snippet of code we just added a couple of extra things. First we defined a new variable called `notes` which contains the notes we'd like to cycle through (an arpeggiator is just a fancy name for something that cycles through a list of notes in order). Secondly we replaced our single call to `control` with an iteration calling it 16 times. In each call to `control` we `.tick` through our ring of `notes` which will automatically repeat once we get to the end (thanks to the fabulous power of Sonic Pi's rings). For a bit of variety try replacing `.tick` with `.choose` and see if you can hear the difference.
ru: В этом фрагменте кода мы только добавили пару дополнительных вещей. Сначала мы определили новую переменную с именем `notes`, которая содержит ноты, которые мы хотели бы циклически перемещать (арпеджиатор - это просто причудливое имя для чего-то, что циклически перебирает список нот по порядку). Во-вторых, мы заменили наш одиночный вызов на `control` итерацией, вызывающей его 16 раз. В каждом вызове `control` мы проходим с помощью ` .tick` наше кольцо `notes`, которое будет автоматически повторяться, как только мы доберемся до конца (благодаря невероятной силе колец Sonic Pi). Для некоторого разнообразия попробуйте заменить `.tick` на` .choose` и посмотрите, можете ли вы услышать разницу.

en: Note that we can change multiple opts simultaneously. Try changing the control line to the following and listen for the difference:
ru: Обратите внимание, что мы можем изменять несколько параметров одновременно. Попробуйте изменить строку управления на следующую и прислушайтесь к разнице:

en: Sliding
ru: Плавные изменения

en: When we control a `SynthNode`, it responds exactly on time and instantly changes the value of the opt to the new one as if you'd pressed a button or flicked a switch requesting the change. This can sound rhythmical and percussive - especially if the opt controls an aspect of the timbre such as `cutoff:`. However, sometimes you don't want the change to happen instantaneously. Instead, you might want to smoothly move from the current value to the new one as if you'd moved a slider or dial. Of course, Sonic Pi can also do this too using the `_slide:` opts.
ru: Когда мы контролируем `SynthNode`, он реагирует точно вовремя и мгновенно меняет текущее значение параметра на новое, как если бы вы нажали кнопку или щелкнули переключателем, запрашивая изменение. Это может звучать ритмично и резко - особенно если парамметр контролирует какой-нибудь аспект тембра, как , например, `cutoff:`. Однако иногда вы не хотите, чтобы изменения произошли мгновенно. Вместо этого вы можете плавно перейти от текущего значения к новому, как если бы вы переместили слайдер или валкодер. Конечно, Sonic Pi также может сделать это посредством `_slide:`.

en: Each opt that can be modified also has a special corresponding `_slide:` opt that allows you to specify a slide time. For example, `amp:` has `amp_slide:` and `cutoff:` has `cutoff_slide:`. These slide opts work slightly differently than all the other opts in that they tell the synth note how to behave **next time they are controlled**. Let's take a look:
ru: Каждый параметр, который можно изменить, также имеет специальный соответствующий ему параметр `_slide:`, который позволяет указать время скольжения. Например, `amp:` имеет `amp_slide:`, так же как `cutoff:` имеет `cutoff_slide:`. Эти параметры скольжения работают немного иначе, чем все остальные, в том смысле, что они сообщают синтезатору, как себя вести **во время, когда ими управляют **. Давайте взглянем:

en: Notice how this example is exactly the same as before except with the addition of `cutoff_slide:`. This is saying that next time this synth has its `cutoff:` opt controlled, it will take 2 beats to slide from the current value to the new one. Therefore, when we use `control` you can hear the cutoff slide from 70 to 130. It creates an interesting dynamic feel to the sound. Now, try changing the `cutoff_slide:` time to a shorter value such as 0.5 or a longer value such as 4 to see how it changes the sound. Remember, you can slide any of the modifiable opts in exactly this way and each `_slide:` value can be totally different so you can have the cutoff sliding slowly, the amp sliding fast and the pan sliding somewhere in between if that's what you're looking to create...
ru: Обратите внимание, что этот пример точно такой же, как и раньше, за исключением добавления `cutoff_slide:`. Это говорит о том, что во время когда параметр `cutoff:` этого синтезатора будет управляться, потребуется 2 такта на то, чтобы перейти от текущего значения к новому. Поэтому, когда мы используем `control`, вы можете услышать скольжение значения среза фильтра от 70 до 130. Это создает интересное динамическое ощущение звука. Теперь попробуйте изменить время `cutoff_slide:` на более короткое значение, такое как 0,5, или более длинное значение, такое как 4, чтобы увидеть, как это меняет звук. Помните, что вы можете перемещать любые изменяемые параметры точно таким же образом, и каждое значение `_slide:` может быть совершенно разным. Вы можете одновременно медленно скользить по срезу фильтра,  быстро смещать амплитуду и плавно двигаться по панораме со средней между этими значениями скоростью, ища для себя творческие новые возможности ...

en: Let's look at a short example which demonstrates the power of controlling synths after they've been triggered. Notice that you can also slide FX just like synths although with a slightly different syntax. Check out section 7.2 of the built-in tutorial for more information on controlling FX.
ru: Давайте рассмотрим короткий пример, который демонстрирует мощь управления синтезаторами после запуска их исполнения. Обратите внимание, что вы также можете плавно изменять параметры эффектов, хотя и с немного другим синтаксисом. Ознакомьтесь с разделом 7.2 встроенного руководства для получения дополнительной информации об управлении эффектами.

en: Copy the code into a spare buffer and take a listen. Don't stop there though - play around with the code. Change the slide times, change the notes, the synth, the FX and the sleep times and see if you can turn it into something completely different!
ru: Скопируйте код в свободный буфер и прослушайте его. Не останавливайтесь на достигнутом - поиграйте с кодом. Измените время скольжения, измените ноты, синтезатор, эффекты, время сна и посмотрите, сможете ли вы превратить его во что-то совершенно другое!

en: A.11 Tick Tock
ru: A.11 Тик-так

en: Tracking the Beat
ru: Трекинг ритма

en: Last month in this series we took a deep technical dive into the randomisation system underpinning Sonic Pi. We explored how we can use it to deterministically add new levels of dynamic control over our code. This month we're going to continue our technical dive and turn our attention to Sonic Pi's unique tick system. By the end of this article you'll be ticking your way through rhythms and riffs on your way to being a live coding DJ.
ru: В прошлом месяце в этой серии мы углубились в систему рандомизации, на которой базируется Sonic Pi. Мы исследовали, как мы можем использовать это для детерминированного добавления новых уровней динамического контроля над нашим кодом. В этом месяце мы продолжим наше техническое погружение и обратим внимание на уникальную систему тиков Sonic Pi. К концу этой статьи вы пройдете через ритмы и риффы на пути к тому, чтобы стать лайвкодером.

en: Beat Counting
ru: Счетчик тактов

en: When making music we often want to do a different thing depending on which beat it is. Sonic Pi has a special beat counting system called `tick` to give you precise control over when a beat actually occurs and even supports multiple beats with their own tempos.
ru: При создании музыки мы часто хотим делать разные вещи с учетом текущего такта. Sonic Pi имеет специальную систему подсчета тактов, которая называется `tick`, чтобы дать вам контроль над тем, какой в точности сейчас такт, и даже поддерживает работу нескольких тактов одновременно с их собственными темпами.

en: Let's have a play - to advance the beat we just need to call `tick`. Open up a fresh buffer, type in the following and hit Run:
ru: Давайте поиграем - чтобы сдвинуть такт во времени, нам просто нужно вызвать `tick`. Откройте свободный буфер, введите следующий текст и нажмите Выполнить:

en: This will return the current beat: `0`. Notice that even if you press the Run button a few times it will always return `0`. This is because each run starts a fresh beat counting from 0. However, whilst the run is still active, we can advance the beat as many times as we want:
ru: Это вернет нам текущий такт: `0`. Обратите внимание, что даже если вы нажмете кнопку Выполнить несколько раз, вам всегда вернется `0`. Это связано с тем, что каждый цикл начинает новый отсчет тактов с 0. Однако, пока цикл все еще активен, мы можем сдвигать такт во времени столько раз, сколько захотим:

en: Whenever you see the symbol `#=>` at the end of a line of code it means that that line will log the text on the right-hand-side. For example, `puts foo #=> 0` means the code `puts foo` prints `0` to the log at that point in the program.
ru: Всякий раз, когда вы видите символ `# =>` в конце строки кода, это означает, что эта строка будет записывать в журнал текст, расположенный справа от этого символа. Например, `put foo # => 0` означает, что код `puts foo`, напечатает `0` в журнале.

en: Checking the Beat
ru: Проверка такта

en: We've seen that `tick` does two things. It increments (adds one) and returns the current beat. Sometimes we just want to look at the current beat without having to increment it which we can do via `look`:
ru: Мы видели, что `tick` делает две вещи. Он увеличивает (+1) и возвращает нам значение текущего такта. Иногда мы просто хотим посмотреть текущий такт, не увеличивая его. Мы можем сделать это с помощью `look`:

en: In this code we tick the beat up twice and then call `look` twice. We'll see the following values in the log: `0`, `1`, `1`, `1`. The first two `tick`s returned `0`, then `1` as expected, then the two `look`s just returned the last beat value twice which was `1`.
ru: В этом коде мы делаем два хода такта во времени, а затем дважды вызываем `look`. В журнале мы увидим следующие значения: `0`,` 1`, `1`,` 1`. Первые два `tick` вернули` 0` и `1`, как и ожидалось, затем два` look` просто дважды вернули значение последнего такта, которое было равно `1`.

en: So now we can advance the beat with `tick` and check the beat with `look`. What next? We need something to tick over. Sonic Pi uses rings for representing riffs, melodies and rhythms and the tick system has been specifically designed to work very closely with them. In fact, rings have their own dot version of `tick` which does two things. Firstly, it acts like a regular tick and increments the beat. Secondly it looks up the ring value using the beat as the index. Let's take a look:
ru: Теперь мы можем сдвигать такт во времени с помощью `tick` и узнавать его текущее значение с помощью` look`. Что дальше? Нам пригодится кое-что еще. Sonic Pi использует кольца, чтобы представлять через них рифы, мелодии и ритмы, а система тиков была специально разработана для тесного взаимодействия с ними. На самом деле у колец есть собственная версия такой системы, это `tick` с добавленной точкой. Он делает две вещи: во-первых, он действует как обычный `tick` и увеличивает значение такта. Во-вторых, он ищет значение кольца, используя такт в качестве индекса. Давайте взглянем:

en: `.tick` is a special dot version of `tick` which will return the first value of the ring `:a`. We can grab each of the values in the ring by calling `.tick` multiple times:
ru: `.tick` - это специальная версия` tick` с точкой, которая будет возвращать первое значение кольца `: a`. Мы можем получить каждое значение в кольце, вызвав `.tick` несколько раз:

en: Take a look at the log and you'll see `:a`, `:b`, `:c` and then `:a` again. Notice that `look` returns `3`. Calls to `.tick` act just like they are regular calls to `tick` - they increment the local beat.
ru: Взгляните в журнал, и вы увидите `: a`,`: b`, `: c`, а затем снова`: a`. Обратите внимание, что `look` возвращает` 3`. Вызовы `.tick` действуют так же, как и вызовы привычного `tick` - они увеличивают локальный такт во времени.

en: A Live Loop Arpeggiator
ru: Арпеджиатор живого цикла

en: The real power comes when you mix `tick` with rings and `live_loop`s. When combined we have all the tools we need to both build and understand a simple arpegiator. We need just four things:
ru: Настоящая мощь проявляется, когда вы смешиваете `tick` с кольцами и` live_loop`. В совокупности у нас есть все инструменты, необходимые для создания простого арпеджиатора. Нам нужно всего четыре вещи:

en: A ring containing the notes we want to loop over.
ru: Кольцо, содержащее ноты, которые мы хотим зациклить.

en: A means of incrementing and obtaining the beat.
ru: Средства увеличения и получения значения такта.

en: The ability to play a note based on the current beat.
ru: Возможность воспроизведения ноты  с учетом текущего такта.

en: A loop structure to keep the arpegiator repeating.
ru: Структура цикла для повторения арпеджиатора.

en: These concepts can all be found in the following code:
ru: Все эти вещи можно найти в следующем коде:

en: Let's look at each of these lines. First we define our ring of notes which we'll continually play. We then create a `live_loop` called `:arp` which loops round for us. Each time round the `live_loop` we set our synth to `:dpulse` and then play the next note in our ring using `.tick`. Remember that this will increment our beat counter and use the latest beat value as an index into our notes ring. Finally, we wait for an eighth of a beat before looping round again.
ru: Давайте посмотрим на каждую из этих строк. Сначала мы определяем кольцо нот, которые мы будем  играть. Затем мы создаем `live_loop` с именем`: arp`, который обеспечит нам цикл. Каждый раз проходя цикл `live_loop`, мы устанавливаем наш синтезатор в`: dpulse`, а затем проигрываем следующую ноту в нашем кольце, используя `.tick`. Помните, что это увеличивает наш счетчик тактов и использует последнее значение тактов в качестве индекса в нашем кольце из нот. Наконец, мы ждем восьмой такт, прежде чем снова начать цикл.

en: Multiple Simultaneous Beats
ru: Работа нескольких тактов одновременно

en: A really important thing to know is that `tick`s are local to the `live_loop`. This means that each `live_loop` has its own independent beat counter. This is much more powerful than having a global metronome and beat. Let's take a look at this in action:
ru: Очень важно знать, что `tick` связан с live_loop локальными отношениями. Это означает, что каждый `live_loop` имеет свой независимый счетчик тактов. Это намного мощнее, чем глобальный метроном. Давайте посмотрим на это в действии:

en: Clashing Beats
ru: Столкновение тактов

en: A big cause of confusion with Sonic Pi's tick system is when people want to tick over multiple rings in the same `live_loop`:
ru: Основная причина путаницы с системой тиков Sonic Pi заключается в том, что люди используют сразу несколько счетчиков наименованных тактов для несколько колец в одном и том же `live_loop`:

en: Even though each `live_loop` has its own independent beat counter, we're calling `.tick` twice within the same `live_loop`. This means that the beat will be incremented twice every time round. This can produce some interesting polyrhythms but is often not what you want. There are two solutions to this problem. One option is to manually call `tick` at the start of the `live_loop` and then use `.look` to look up the current beat in each `live_loop`. The second solution is to pass a unique name to each call to `.tick` such as `.tick(:foo)`. Sonic Pi will then create and track a separate beat counter for each named tick you use. That way you can work with as many beats as you need! See the section on named ticks in 9.4 of the built-in tutorial for more information.
ru: Несмотря на то, что каждый `live_loop` имеет свой собственный независимый счетчик ударов, мы вызываем` .tick` дважды в одном и том же `live_loop`. Это означает, что такт будет увеличиваться дважды на каждый шаг времени. Это может привести к некоторым интересным полиритмам, но часто это не то, что вы хотите. Есть два решения этой проблемы. Один из вариантов - вручную вызвать `tick` в начале` live_loop`, а затем использовать `.look` для поиска текущего такта в каждом` live_loop`. Второе решение заключается в передаче уникального имени каждому вызову `.tick`, например,` .tick (: foo) `. Sonic Pi создаст и отследит отдельный счетчик тактов для каждого поименованного тика. Таким образом, вы можете работать с таким количеством тактов, которое вам нужно! См. Раздел 9.4 о поименованных тиках встроенного руководства для получения дополнительной информации.

en: Let's bring all this knowledge of `tick`s, `ring`s and `live_loop`s together for a final fun example. As usual, don't treat this as a finished piece. Start changing things and play around with it and see what you can turn it into. See you next time...
ru: Давайте соберем все эти знания о`tick`,` ring` и `live_loop` вместе для одного забавного финального примера. Как обычно, не относитесь к этому как к готовому произведению. Начните менять значения, поиграйте с этим и посмотрите, во что вы можете превратить это. Увидимся в следующий раз...

en: A.12 Sample Slicing
ru: A.12 Нарезка сэмплов

en: Sample Slicing
ru: Нарезка сэмплов

en: Sound as Data
ru: Звук как данные

en: Before we get started let's just take a brief moment to understand how to work with samples. By now, you've all hopefully played with Sonic Pi's powerful sampler. If not, there's no time like the present! Boot up your Raspberry Pi, launch Sonic Pi from the Programming menu, type the following into a fresh buffer and then hit the Run button to hear a pre-recorded drum beat:
ru: Прежде чем мы начнем, давайте кратко рассмотрим, как работать с сэмплами. К настоящему времени вы все, надеюсь, уже играете с мощным сэмплером Sonic Pi. Если еще нет, то прямо сейчас не самое подходящее время! Загрузите Raspberry Pi, запустите Sonic Pi из меню Программирование, введите следующее в свободный буфер и затем нажмите кнопку Выполнить, чтобы услышать предварительно записанный барабанный ритм:

en: A recording of a sound is simply represented as data - lots of numbers between -1 and 1 which represent the peaks and troughs of the sound wave. If we play those numbers back in order, we get the original sound. However, what's to stop us from playing them back in a different order and creating a new sound?
ru: Запись звука можно представить в виде данных - множество чисел от -1 до 1, которые определяют пики и провалы звуковой волны. Если мы воспроизведем эти числа по порядку, то получим оригинальный звук. Однако что мешает нам воспроизводить их в другом порядке и создавать новый звук?

en: How are samples actually recorded? It's actually pretty simple once you understand the basic physics of sound. When you make a sound - for example by hitting a drum, the noise travels through the air in a similar fashion to how the surface of a lake ripples when you throw a pebble into it. When those ripples reach your ears, your eardrum moves sympathetically and converts those movements into the sound you hear. If we wish to record and play back the sound, we therefore need a way of capturing, storing and reproducing those ripples. One way is to use a microphone which acts like an eardrum and moves back and forth as the sound ripples hit it. The microphone then converts its position into a tiny electric signal which is then measured many times a second. These measurements are then represented as a series of numbers between -1 and 1.
ru: Как на самом деле записываются сэмплы? Это на самом деле довольно просто, когда вы понимаете основы физики звука. Когда вы издаете звук, например, ударяя по барабану, шум распространяется по воздуху подобно тому, как рябь распространяется по поверхности озера, когда вы бросаете в него гальку. Когда эта рябь достигает ваших ушей, ваша барабанная перепонка соответственным это волне образом движется и преобразует эти движения в звук, который вы слышите. Если мы хотим записать и воспроизвести звук, нам нужен способ захвата, хранения и воспроизведения этих волн. Одним из способов является использование микрофона, который действует как барабанная перепонка и движется туда-сюда, когда с ним встречаются волны. Затем микрофон преобразует свое текущее положение в крошечный электрический сигнал, который измеряется много раз в секунду. Эти измерения далее представляются в виде последовательности чисел от -1 до 1.

en: If we were to plot a visualisation of the sound it would be a simple graph of data with time on the x axis and microphone/speaker position as a value between -1 and 1 on the y axis. You can see an example of such a graph at the top of the diagram.
ru: Если бы мы отразили на графике звук, это был бы простой график данных со временем по оси x и положением микрофона / динамика в диапазоне от -1 до 1 по оси y. Вы можете увидеть пример такого графика на диаграмме в верхней правой части Sonic Pi.

en: Playing Part of a Sample
ru: Проигрывание части сэмпла

en: So, how do we code Sonic Pi to play a sample back in a different order? To answer this question we need to take a look at the `start:` and `finish:` opts for `sample`. These let us control the start and finish positions of our playback of the numbers which represent the sound. The values for both of these opts are represented as a number between `0` and `1` where `0` represents the start of the sample and `1` is the end. So, to play the first half of the Amen Break, we just need to specify a `finish:` of `0.5`:
ru: Итак, как же мы программируем Sonic Pi, чтобы воспроизвести сэмпл в другом порядке? Чтобы ответить на этот вопрос, нам нужно взглянуть на такие параметры `sample`, как `start:` и `finish:`. Они позволяют нам контролировать начальную и конечную позиции воспроизведения чисел, которые представляют звук. Значения для обоих этих вариантов представлены в виде числа между `0` и` 1`, где `0` это начало сэмпла, а` 1` - конец. Итак, чтобы сыграть первую половину Amen Break, нам просто нужно указать `finish:` из `0.5`:

en: We can add in a `start:` value to play an even smaller section of the sample:
ru: Мы можем добавить значение `start:`, чтобы воспроизвести еще меньшую часть сэмпла:

en: For fun, you can even have the `finish:` opt's value be *before* `start:` and it will play the section backwards:
ru: Для забавы, вы можете даже задать значение параметра `finish:` * перед * значением  параметра`start:`, и тогда указанная часть сэмпла будет воспроизведена в обратном направлении:

en: Re-ordering Sample Playback
ru: Изменение порядка воспроизведения сэмпла

en: Now that we know that a sample is simply a list of numbers that can be played back in any order and also how to play a specific part of a sample we can now start having fun playing a sample back in the 'wrong' order.
ru: Теперь, когда мы знаем, что сэмпл - это просто список чисел, которые можно воспроизвести в любом порядке, а также то, как воспроизводить определенную часть сэмпла, мы можем теперь начать веселиться, воспроизводя сэмпл в «неправильном» порядке.

en: Let's take our Amen Break and chop it up into 8 equally-sized slices and then shuffle the pieces around. Take a look at the diagram: at the top A) represents the graph of our original sample data. Chopping it into 8 slices gives us B) - notice that we've given each slice a different colour to help distinguish them. You can see each slice's start and finish values at the top. Finally C) is one possible re-ordering of the slices. We can then play this back to create a new beat. Take a look at the code to do this:
ru: Давайте возьмем наш Amen Break и нарежем его на 8 слайсов одинакового размера, а затем перемешаем кусочки. Посмотрите на диаграмму: в верхней части А) представлен график наших исходных данных. Нарезка его на 8 слайсов дает нам B) - обратите внимание, что мы дали каждому слайсу свой цвет, чтобы легче различить их. Вы можете увидеть начальные и конечные значения каждого слайса в верхней части. Наконец, C) является одним из возможных переупорядочений слайсов. Затем мы можем воспроизвести это, чтобы создать новый ритм. Взгляните на код, чтобы сделать это:

en: we choose a random slice to play which should be a random number between 0 and 7 (remember that we start counting at 0). Sonic Pi has a handy function for exactly this: `rand_i(8)`. We then store this random slice index in the variable `slice_idx`.
ru: мы выбираем случайный фрагмент для воспроизведения, который представлен случайным числом от 0 до 7 (помните, что мы начинаем считать с 0). Sonic Pi имеет удобную функцию именно для этого: `rand_i (8)`. Затем мы сохраняем этот случайный индекс слайса в переменной `slice_idx`.

en: We define our `slice_size` which is 1/8 or 0.125. The `slice_size` is necessary for us to convert our `slice_idx` into a value between 0 and 1 so we can use it as our `start:` opt.
ru: Мы определяем наш `slice_size`, который составляет 1/8 или 0,125. `Slice_size` необходим для того, чтобы мы преобразовали наш` slice_idx` в значение между 0 и 1, чтобы мы могли использовать его в качестве нашего параметра `start:` .

en: We calculate the start position `s` by multiplying the `slice_idx` by the `slice_size`.
ru: Мы вычисляем начальную позицию `s` путем умножения` slice_idx` на `slice_size`.

en: We calculate the finish position `f` by adding the `slice_size` to the start position `s`.
ru: Мы рассчитываем конечную позицию `f`, добавляя` slice_size` к начальной позиции `s`.

en: We can now play the sample slice by plugging in the `s` and `f` values into the `start:` and `finish:` opts for `sample`.
ru: Теперь мы можем воспроизвести слайс сэмпла, вставив значения `s` и` f` в  параметры`start:` и `finish:`, принадлежащие `sample`.

en: Before we play the next slice we need to know how long to `sleep` which should be the duration of the sample slice. Luckily, Sonic Pi has us covered with `sample_duration` which accepts all the same opts as `sample` and simply returns the duration. Therefore, by passing `sample_duration` our `start:` and `finish:` opts, we can find out the duration of a single slice.
ru: Перед тем, как мы начнем воспроизводить следующий слайс, нам нужно знать, как долго нужно `sleep`, равно длительности слайса сэмпла. К счастью, у Sonic Pi есть для нас функция`sample_duration`, которая принимает все те же параметры, что и` sample`, и просто возвращает продолжительность. Поэтому, передавая `sample_duration` нашим параметрам` start: `и` finish: `, мы можем узнать длительность одного слайса.

en: We wrap all of this code in a `live_loop` so that we continue to pick new random slices to play.
ru: Мы упаковываем весь этот код в `live_loop`, чтобы циклически продолжать выбирать новые случайные фрагменты для воспроизведения.

en: Let's combine everything we've seen so far into a final example which demonstrates how we can take a similar approach to combine randomly sliced beats with some bass to create the start of an interesting track. Now it's your turn - take the code below as a starting point and see if you can take it in your own direction and create something new...
ru: Давайте собрать в кучу все, что мы прошли к настоящему времени, в заключительный пример, который продемонстрирует, как мы можем использовать аналогичный подход для соединения случайно нарезанных барабанных ритмов с кое-каким басом, чтобы положить начало интересному треку. Теперь ваша очередь - возьмите приведенный ниже код в качестве отправной точки и посмотрите, сможете ли вы, обойдясь с ним по-своему, создать что-то новое ...

en: A.13 Code a Probabilistic Sequencer
ru: A.13 Программирование вероятностного секвенсора

en: Code a Probabilistic Sequencer
ru: Программирование вероятностного секвенсора

en: In a previous episode of this Sonic Pi series we explored the power of randomisation to introduce variety, surprise and change into our live coded tracks and performances. For example, we randomly picked notes from a scale to create never-ending melodies. Today we're going to learn a new technique which uses randomisation for rhythm - probabilistic beats!
ru: В предыдущем эпизоде этой серии Sonic Pi мы исследовали силу рандомизации, чтобы внести разнообразие, неожиданность и изменения в наши лайвкодинг треки и выступления. Например, мы случайным образом выбирали ноты из гаммы для создания бесконечных мелодий. Сегодня мы собираемся изучить новую технику, которая использует рандомизацию для ритма - вероятностные биты!

en: Probability
ru: Вероятность

en: Before we can start making new beats and synth rhythms we need to take a quick dive into the basics of probability. This might sound daunting and complicated, but really it's just as simple as rolling a dice - honestly! When you take a regular 6 sided board game dice and roll it what's actually happening? Well, firstly you'll roll either a 1, 2, 3, 4, 5 or 6 with exactly the same chance of getting any of the numbers. In fact, given that it's a 6 sided dice, on average (if you roll lots and lots of times) you'll throw a 1 every 6 throws. This means you have a 1 in 6 chance of throwing a 1. We can emulate dice rolls in Sonic Pi with the fn `dice`. Let's roll one 8 times:
ru: Прежде чем мы сможем начать делать новые биты и синтезаторные ритмы, нам нужно быстро обратиться к основам вероятности. Это может показаться пугающим и сложным, но на самом деле это так же просто, как бросать кости - честно! Когда вы берете обычные 6-ти сторонние кости для настольных игр и бросаете их, что на самом деле происходит? Ну, во-первых, вы с одинаковой вероятностью получите 1, 2, 3, 4, 5 или 6. Фактически, учитывая, что это 6-ти сторонние кости, в среднем (если вы бросаете множество раз) вы будете получать 1 каждые 6 бросков. Это означает, что у вас есть шанс 1 к 6 бросить 1. Мы можем эмулировать броски костей в Sonic Pi с помощью функции `dice`. Давайте бросим с ее помощью кости 8 раз:

en: Notice how the log prints values between 1 and 6 just as if we'd rolled a real dice ourselves.
ru: Обратите внимание, что журнал отображает значения от 1 до 6 так же, как если бы мы сами бросали реальные кости.

en: Random Beats
ru: Случайные барабанные ритмы

en: Now imagine you had a drum and every time you were about to hit it you rolled a dice. If you rolled a 1, you hit the drum and if you rolled any other number you didn't. You now have a probabilistic drum machine working with a probability of 1/6! Let's hear what that sounds like:
ru: Теперь представьте, что у вас есть барабан, и каждый раз, когда вы собирались в него ударить, вы бросали кости. Если вы получили 1, вы били в барабан, и не били всякий раз, когда выпадало другое число. Теперь у вас есть вероятностная драм-машина, работающая с вероятностью 1/6! Давайте послушаем, как это звучит:

en: Let's quickly go over each line to make sure everything is very clear. First we create a new `live_loop` called `:random_beat` which will continually repeat the two lines between `do` and `end`. The first of these lines is a call to `sample` which will play a pre-recorded sound (the `:drum_snare_hard` sound in this case). However, this line has a special conditional `if` ending. This means that the line will only be executed if the statement on the right hand side of the `if` is `true`. The statement in this case is `dice == 1`. This calls our `dice` function which, as we have seen, returns a value between 1 and 6. We then use the equality operator `==` to check to see if this value is `1`. If it is `1`, then the statement resolves to `true` and our snare drum sounds, if it isn't `1` then the statement resolves to `false` and the snare is skipped. The second line simply waits for `0.125` seconds before rolling the dice again.
ru: Давайте пробежим по каждой строке, чтобы убедиться, что нам с этим все ясно. Итак, сначала мы создаем новый `live_loop` с именем`: random_beat`, который будет постоянно повторять две строки между `do` и` end`. Первая из этих строк - это вызов `sample`, который будет воспроизводить предварительно записанный звук (в данном случае звук`: drum_snare_hard`). Однако эта строка имеет специальное условное окончание if. Это означает, что строка будет выполнена только в том случае, если оператор в правой части `if` равен` true`. В нашем случае, если «dice == 1». Это вызывает нашу функцию `dice`, которая, как мы видели, возвращает значение от 1 до 6. Затем мы используем оператор равенства` == `, чтобы проверить, равно ли это значение` 1`. Если это `1`, то оператор сообщает` true` и звучит наш малый барабан. Если это не `1`, тогда оператор сообщает` false` и малый барабан не звучит. Вторая строка просто ждет 0,125 секунды, прежде чем снова бросить кости.

en: Changing Probabilities
ru: Изменение вероятности

en: Those of you that have played role play games will be familiar with lots of strangely shaped dice with different ranges. For example there is the tetrahedron shaped dice which has 4 sides and even a 20 sided dice in the shape of a icosahedron. The number of sides on the dice changes the chance, or probability of rolling a 1. The fewer sides, the more likely you are to roll a 1 and the more sides the less likely. For example, with a 4 sided dice, there's a one in 4 chance of rolling a 1 and with a 20 sided dice there's a one in 20 chance. Luckily, Sonic Pi has the handy `one_in` fn for describing exactly this. Let's play:
ru: Те из вас, кто играл в ролевые игры, будут знакомы с множеством кубиков странной формы с различными диапазонами. Например, есть кости в форме тетраэдра, которые имеют 4 стороны и даже 20 сторонних кубиков в форме икосаэдра. Количество сторон на кости меняет шанс или вероятность получить 1. Чем меньше сторон, тем больше вероятность, что вы получите 1, и чем больше сторон, тем меньше вероятность. Например, с 4-х сторонними кубиками, есть один шанс к 4 получить 1, а с 20-ти сторонними кубиками есть шанс один к 20. К счастью, в Sonic Pi для этого есть удобная функция `one_in`. Давай поиграем:

en: Start the live loop above and you'll hear the familiar random rhythm. However, don't stop the code running. Instead, change the `6` to a different value such as `2` or `20` and hit the `Run` button again. Notice that lower numbers mean the snare drum sounds more frequently and higher numbers mean the snare triggers fewer times. You're making music with probabilities!
ru: Запустите живой цикл выше, и вы услышите уже знакомый случайный ритм. Но не останавливайте выполнение кода. Вместо этого измените `6` на другое значение, например ` 2` или `20`, и снова нажмите кнопку Выполнить. Обратите внимание, что более низкие числа означают, что малый барабан звучит чаще, а более высокие числа означают, что реже. Вы делаете музыку с вероятностью!

en: Combining Probabilities
ru: Комбинирование вероятности

en: Things get really exciting when you combine multiple samples being triggered with different probabilities. For example:
ru: Все становится действительно захватывающим, когда вы комбинируете несколько сэмплов, запускаемых с разными вероятностями. Например:

en: Again, run the code above and then start changing the probabilities to modify the rhythm. Also, try changing the samples to create an entirely new feel. For example try changing `:drum_cymbal_closed` to `:bass_hit_c` for extra bass!
ru: Снова запустите код выше и затем начните изменять вероятности, чтобы повлиять на ритм. Кроме того, попробуйте изменить сэмплы, чтобы создать совершенно новое звучание кода. Например, попробуйте изменить `: drum_cymbal_closed` на`: bass_hit_c`, чтобы добавить баса!

en: Repeatable Rhythms
ru: Повторяющийся ритм

en: Next, we can use our old friend `use_random_seed` to reset the random stream after 8 iterations to create a regular beat. Type the following code to hear a much more regular and repeating rhythm. Once you hear the beat, try changing the seed value from `1000` to another number. Notice how different numbers generate different beats.
ru: Затем мы можем использовать нашего старого друга `use_random_seed` для сброса случайного потока после 8 итераций для создания регулярного ритма. Введите следующий код, чтобы услышать гораздо более регулярный и повторяющийся ритм. Когда вы услышите ритм, попробуйте изменить начальное значение зерна с 1000 на другое число. Обратите внимание, как разные числа генерируют разные ритмы.

en: One thing I tend to do with this kind of structure is to remember which seeds sound good and make a note of them. That way I can easily re-create my rhythms in future practice sessions or performances.
ru: Я стараюсь запомнить, какие значения семени звучат хорошо, и сохраняю их. Таким образом, я могу легко воссоздать свои ритмы в лайвкодинг перформансах.

en: Finally, we can throw in some random bass to give it some nice melodic content. Notice that we can also use our newly discovered probabilistic sequencing method on synths just as well as samples. Don't leave it at that though - tweak the numbers and make your own track with the power of probabilities!
ru: Наконец, мы можем добавить немного случайного баса, чтобы придать этому приятный мелодичный контент. Обратите внимание, что мы также можем использовать наш недавно обнаруженный метод вероятностного секвенирования как на синтезаторах, так и на сэмплах. Но не стоит на этом останавливаться - подгоняйте цифры и создайте собственный трек с вероятностью!

en: A.14 Amplitude Modulation
ru: A.14 Амплитудная модуляция

en: Amplitude Modulation
ru: Амплитудная модуляция

en: This month we're going to take a deep dive into one of Sonic Pi's most powerful and flexible audio FX - the `:slicer`. By the end of this article you will have learned how to manipulate the overall volume of parts of our live coded sound in powerful new ways. This will allow you to create new rhythmic and timbral structures and broaden your sonic possibilities.
ru: В этом месяце мы собираемся погрузиться в `: slicer` - один из самых мощных и гибких звуковых эффектов Sonic Pi. К концу этой статьи вы узнаете, как манипулировать общей громкостью частей вашего закодированного вживую звука новыми мощными способами. Это позволит вам расширить звуковые возможности, создавая новые ритмические и тембральные структуры.

en: Slice that Amp
ru: Нарезая амплитуду

en: So, what does the `:slicer` FX actually do? One way to think about it is that it's just like having someone play around with the volume control on your TV or home hi-fi. Let's take a look but first, listen to the deep growl of the following code which triggers the `:prophet` synth:
ru: Итак, что же на самом деле делает эффект `: slicer`? Один из способов думать об этом - это то же самое, как когда кто-то играет с регулятором громкости на телевизоре или домашнем хай-фай. Давайте посмотрим, но сначала послушаем следующий код, который заставит прорычать для нас синтезатор `: prophet`:

en: Now, let's pipe it through the `:slicer` FX:
ru: Теперь давайте пропустим это через эффект `: slicer` :

en: Hear how the slicer acts like it's muting and unmuting the audio with a regular beat. Also, notice how the `:slicer` affects all the audio generated between the `do`/`end` blocks. You can control the speed at which it turns the audio on and off with the `phase:` opt which is short for phase duration. Its default value is `0.25` which means 4 times a second at the default BPM of 60. Let's make it faster:
ru: Послушайте, как работает слайсер - он как будто заглушает и включает звук в регулярном ритме. Также обратите внимание, как `: slicer` влияет на все аудио, сгенерированное между блоками` do` / `end`. Вы можете контролировать скорость, с которой он включает и выключает звук, с помощью опции `phase:`, которая сокращает длительность фазы. Его значение по умолчанию равно `0.25`, что означает 4 раза в секунду при значении BPM по умолчанию 60. Давайте сделаем это быстрее:

en: Now, play with different `phase:` durations yourself. Try longer and shorter values. See what happens when you choose a really short value. Also, try different synths such as `:beep` or `:dsaw` and different notes. Take a look at the following diagram to see how different `phase:` values change the number of amplitude changes per beat.
ru: Теперь поиграйте с разными значениями продолжительности `phase:` сами. Попробуйте более длинные и короткие значения. Посмотрите, что происходит, когда вы выбираете действительно короткое значение. Кроме того, попробуйте различные синтезаторы, такие как `: beep` или`: dsaw` и другие ноты. Взгляните на следующую диаграмму, чтобы увидеть, как различные значения `phase:` изменяют количество изменений амплитуды за такт.

en: Phase duration is the length of time for one on/off cycle. Therefore smaller values will make the FX switch on and off much faster than larger values. Good values to start playing with are `0.125`, `0.25`, `0.5` and `1`.
ru: Продолжительность фазы - это продолжительность одного цикла включения / выключения. Поэтому меньшие значения заставят эффект включаться и выключаться намного быстрее, чем большие значения. Хорошие значения для начала игры: `0.125`,` 0.25`, `0.5` и` 1`.

en: Control Waves
ru: Контролируя волны

en: By default, the `:slicer` FX uses a square wave to manipulate the amplitude through time. This is why we hear the amplitude on for a period, then immediately off for a period, then back on again. It turns out that the square wave is just one of 4 different control waves that are supported by `:slicer`. The others are saw, triangle and (co)sine. Take a look at the diagram below to see what these look like. We can also hear what they sound like. For example, the following code uses (co)sine as the control wave. Hear how the sound doesn't turn on and off abruptly but instead smoothly fades in and out:
ru: По умолчанию эффект `: slicer` использует прямоугольную волну для управления амплитудой во времени. Вот почему мы слышим, как амплитуда включается на некоторое время, затем сразу отключается на некоторое время, затем снова включается. Оказывается, прямоугольная волна - это всего лишь одна из 4 различных управляющих волн, которые поддерживаются `: slicer`. Другие это пила, треугольник и (ко)синус. Посмотрите на диаграмму ниже, чтобы увидеть, как они выглядят. Мы также можем услышать, как они звучат. Например, следующий код использует (кo)синус в качестве управляющей волны. Послушайте, как звук не включается и не выключается внезапно, а плавно затухает:

en: Have a play with the different wave forms by changing the `wave:` opt to `0` for saw, `1` for square, `2` for triangle and `3` for sine. See how different waves sound with different `phase:` opts too.
ru: Поиграйте с разными формами волн, изменив параметр `wave:` на `0` для пилы,` 1` для квадрата, `2` для треугольника и` 3` для синуса. Посмотрите, как звучат разные волны с разными параметрами `phase:`.

en: Each of these waves can be inverted with the `invert_wave:` opt which flips it on the y axis. For example, in a single phase the saw wave typically starts high, and slowly goes down before jumping back to the top. With `invert_wave: 1` it will start low and slowly go up before jumping back down again. Additionally, the control wave can be started at different points with the `phase_offset:` opt which should be a value between `0` and `1`. By playing around with `phase:`, `wave:`, `invert_wave:` and `phase_offset` opts you can dramatically change how the amplitude is modified through time.
ru: Каждая из этих волн может быть инвертирована с помощью опции `invert_wave:`, который переворачивает ее на оси y. Например, в одной фазе пилообразная волна обычно начинается с высокой отметки и медленно опускается, а затем возвращается к вершине. С помощью `invert_wave: 1` он медленно поднимется, прежде чем снова спрыгнуть вниз. Кроме того, управляющая волна может быть запущена в разных точках с помощью параметра `phase_offset:`, который должен быть значением между `0` и` 1`. Играя с параметрами `phase:`, `wave:`, `invert_wave:` и `phase_offset`, вы можете кардинально изменить способ изменения амплитуды во времени.

en: Setting your levels
ru: Настройка уровня вашего звука

en: By default, `:slicer` switches between amplitude values `1` (fully loud) and `0` (silent). This can be changed with the `amp_min:` and `amp_max:` opts. You can use this alongside the sine wave setting to create a simple tremolo effect:
ru: По умолчанию `: slicer` переключает значения амплитуды` 1` (максимальная громкость) и `0` (беззвучно). Это можно изменить с помощью параметров `amp_min:` и `amp_max:`. Вы можете использовать это вместе с синусоидальной волной, чтобы создать простой эффект тремоло:

en: This is just like grabbing the volume knob on your hi-fi and moving it up and down just a little so the sound 'wobbles' in and out.
ru: Это как если бы взять ручку регулировки громкости на своем hi-fi и немного переместить ее вверх и вниз, чтобы звук «качался» внутрь и наружу динамика.

en: Probabilities
ru: Вероятности

en: One of `:slicer`'s powerful features is its ability to use probability to choose whether or not to turn the slicer on or off. Before the `:slicer` FX starts a new phase it rolls a dice and based on the result either uses the selected control wave or keeps the amplitude off. Let's take a listen:
ru: Одной из мощных функций `: slicer` является его способность использовать вероятность, чтобы выбирать, включаться ему или выключаться. Перед тем как  эффект `: slicer` начинает новую фазу, он бросает кости и на основании результата либо использует выбранную волну управления, либо отключает амплитуду. Давайте послушаем:

en: Hear how we now have an interesting rhythm of pulses. Try changing the `probability:` opt to a different value between `0` and `1`. Values closer to `0` will have more space between each sound due to the likelihood of the sound being triggered being much lower.
ru: Послушайте, как у нас сейчас интересно пульсирует ритм. Попробуйте изменить параметр `probability:` на другое значение между` 0` и `1`. Значения, близкие к `0`, будут иметь больше места между каждым отдельным звуком, поскольку вероятность того, что звук будет срабатывать, будет намного ниже.

en: Another thing to notice is that the probability system in the FX is just like the randomisation system accessible via fns such as `rand` and `shuffle`. They are both completely deterministic. This means that each time you hit Run you'll hear exactly the same rhythm of pulses for a given probability. If you would like to change things around you can use the `seed:` opt to select a different starting seed. This works exactly the same as `use_random_seed` but only affects that particular FX.
ru: Следует также отметить, что система вероятностей в этом эффекте подобна системе рандомизации, доступной через такие функции, как `rand` и` shuffle`. Они все полностью детерминированы. Это означает, что каждый раз, когда вы нажимаете Выполнить, вы слышите точно такой же пульсирующий ритм для данной вероятности. Если вы хотите что-то изменить, вы можете использовать параметр `seed:`, чтобы выбрать другое начальное число. Это работает точно так же, как `use_random_seed`, но влияет только на этот конкретный эффект.

en: Finally, you can change the 'resting' position of the control wave when the probability test fails from `0` to any other position with the `prob_pos:` opt:
ru: Наконец, с помощью параметра `prob_pos:`, вы можете изменить положение 'resting'  для управляющей волны с `0` на любую другую позицию, когда проверка вероятности возвращает ложь, а не истину:

en: Slicing Beats
ru: Нарезаем биты

en: One really fun thing to do is to use `:slicer` to chop a drum beat in and out:
ru: Есть одна очень забавная вещь - использовать `: slicer` для нарезки барабанного ритма:

en: Changing tempo
ru: Изменяем темп

en: As we have already seen, changing the default BPM with `use_bpm` will make all the sleep times and synth envelope durations grow or shrink to match the beat. The `:slicer` FX honours this too, as the `phase:` opt is actually measured in beats not seconds. We can therefore fix the issue with `loop_amen` above by changing the BPM to match the sample:
ru: Как мы уже видели, изменение значения BPM по умолчанию с помощью `use_bpm` приведет к увеличению или уменьшению времени ожидания и длительности огибающей синтезатора в соответствии с тактом. Эффект `: slicer` также учитывает это, поскольку параметр `phase: ` фактически измеряется в тактах, а не секундах. Поэтому мы можем исправить проблему, возникшую с loop_amen выше, изменив BPM в соответствии с примером:

en: Let's apply all these ideas into a final example that only uses the `:slicer` FX to create an interesting combination. Go ahead, start changing it and make it into your own piece!
ru: Давайте применим все эти идеи в заключительном примере, в который используем только эффект `:slicer` для создания интересной комбинации. Давайте, начните изменять его и сделайте из него свое собственное произведение!

en: A.15 Five Live Coding Techniques
ru: A.15 Пять техник лайв-кодинга

en: Five Live Coding Techniques
ru: Пять техник лайв-кодинга

en: In this month's Sonic Pi tutorial we're going to take a look at how you can start treating Sonic Pi like a real instrument. We therefore need to start thinking of code in a completely different way. Live coders think of code in a similar way to how violinists think of their bow. In fact, just like a violinist can apply various bowing techniques to create different sounds (long slow motions vs short fast hits) we will explore five of the basic live coding techniques that Sonic Pi enables. By the end of this article you'll be able to start practicing for your own live coded performances.
ru: В этом уроке мы рассмотрим, как можно начать относиться к Sonic Pi как к настоящему инструменту. Поэтому нам нужно начать думать о коде совершенно по-другому. Лайвкодеры думают о коде аналогично тому, как скрипачи думают о своем смычке. Фактически, точно так же, как скрипач может применять различные техники использования смычка для создания разных звуков (длинные медленные движения против коротких быстрых ударов), мы исследуем пять основных методов лайвкодинга, которые позволяет Sonic Pi. К концу этой статьи вы сможете начать практиковаться для собственных лайвкодинг-перформансов.

en: 1. Memorise the Shortcuts
ru: 1. Помнить сокращения

en: The first tip to live coding with Sonic Pi is to start using the shortcuts. For example, instead of wasting valuable time reaching for the mouse, moving it over to the Run button and clicking, you can simply press `alt` and `r` at the same time which is much faster and keeps your fingers at the keyboard ready for the next edit. You can find out the shortcuts for the main buttons at the top by hovering the mouse over them. See section 10.2 of the built-in tutorial for the full list of shortcuts.
ru: Первый совет для лайвкодинга с Sonic Pi - начать использовать сокращения. Например, вместо того, чтобы тратить драгоценное время на то, чтобы дотянуться до мыши, переместить ее на кнопку Выполнить и сделать клик, вы можете просто одновременно нажать «alt» и «r», что намного быстрее и позволяет держать пальцы на клавиатуре наготове. для дальнейшего редактирования. Вы можете найти сокращения для основных кнопок вверху окна программы, наведя на них курсор мыши. См. Раздел 10.2 встроенного руководства для полного списка сокращений.

en: When performing, one fun thing to do is to add a bit of flair with your arm motion when hitting shortcuts. For example, it's often good to communicate to the audience when you're about to make a change - so embellish your movement when hitting `alt-r` just like a guitarist would do when hitting a big power chord.
ru: При выступлении будет забавно добавить немного изящества движениям пальцев при нажатии комбинации клавиш. Например, часто полезно общаться с аудиторией, когда вы собираетесь внести изменения - так что приукрашивайте свое движение, нажимая `alt-r` так же, как это делал бы гитарист, берущий крутой аккорд.

en: 2. Manually Layer your Sounds
ru: 2. Складывайте свои звуки вручную

en: Now you can trigger code instantly with the keyboard, you can instantly apply this skill for our second technique which is to layer your sounds manually. Instead of 'composing' using lots of calls to `play`, and `sample` separated by calls to `sleep` we will have one call to `play` which we will manually trigger using `alt-r`. Let's try it. Type the following code into a fresh buffer:
ru: Теперь вы можете мгновенно запускать код с клавиатуры. И вы сразу же можете применить этот навык для нашей второй техники, которая заключается в наложении звуков вручную. Вместо 'композирования'  с использованием большого количества вызовов `play` и `sample`, разделенных вызовами `sleep`, у нас будет один вызов `play`, который мы будем запускать вручную с помощью `alt-r`. Давай попробуем. Введите следующий код в свободный буфер:

en: Now, hit `Run` and whilst the sound is playing, modify the code in order to drop down four notes by changing it to the following:
ru: Теперь нажмите Выполнить, и пока это звучит, измените код на следующее, чтобы запустить еще четыре ноты:

en: Now, hit `Run` again, to hear both sounds playing at the same time. This is because Sonic Pi's `Run` button doesn't wait for any previous code to finish, but instead starts the code running at the same time. This means you can easily layer lots of sounds manually with minor or major modifications between each trigger. For example, try changing both the `note:` and the `cutoff:` opts and then re-trigger.
ru: Теперь снова нажмите Выполнить, чтобы услышать оба звуковых слоя одновременно. Это связано с тем, что кнопка `Выполнить` в Sonic Pi не ждет завершения предыдущего кода, а сразу же запускает измененный код на выполнение. Это означает, что вы можете легко наложить много звуков вручную с незначительными или существенными изменениями между каждым запуском. Например, попробуйте изменить оба параметра `note:` и `cutoff:`, а затем повторно запустить.

en: You can also try this technique with long abstract samples. For example:
ru: Вы также можете попробовать эту технику с длинными абстрактными сэмплами. Например:

en: Try starting the sample off, and then progressively halving the `rate:` opt between hitting `Run` from `1` to `0.5` to `0.25` to `0.125` and then even try some negative values such as `-0.5`. Layer the sounds together and see where you can take it. Finally, try adding some FX.
ru: Запустите сэмпл, а затем постепенно делите параметр `rate:` вдвое  между каждым нажатием `Выполнить`. Начав с` 1` , введите `0.5` , затем ` 0.25` и наконец `0.125`. Можете даже попробовать некоторые отрицательные значения, такие как` -0.5`. Накладывайте звуки один на другой и посмотрите, где вы можете это использовать. И, наконец, попробуйте добавить немного эффектов.

en: When performing, working with simple lines of code in this way means that an audience new to Sonic Pi has a good chance to follow what you're doing and relate the code that they can read to the sounds they are hearing.
ru: Работая таким образом с простыми строками кода, вы позволяете аудитории, не знакомой с Sonic Pi, следить за тем, что вы делаете, и соотносить код, который они могут прочитать, со звуками, которые они слышат.

en: 3. Master Live Loops
ru: 3. Овладейте живыми циклами

en: When working with more rhythmic music, it can often be hard to manually trigger everything and keep good time. Instead, it is often better to use a `live_loop`. This provides repetition for your code whilst also giving the ability to edit the code for the next time round the loop. They also will run at the same time as other `live_loop`s which means you can layer them together both with each other and manual code triggers. Take a look at section 9.2 of the built-in tutorial for more information about working with live loops.
ru: При работе с более ритмичной музыкой часто бывает сложно вручную все запустить вовремя. Вместо этого часто лучше использовать `live_loop`. Это обеспечивает повторение вашего кода, а также дает возможность редактировать код для следующего цикла. Он также будет запускаться одновременно с другими `live_loop`, что означает, что вы можете объединить их вместе друг с другом и руководить их запуском. Загляните в раздел 9.2 встроенного руководства для получения дополнительной информации о работе с живыми циклами.

en: When performing, remember to make use of `live_loop`'s `sync:` opt to allow you to recover from accidental runtime mistakes which stop the live loop running due to an error. If you already have the `sync:` opt pointing to another valid `live_loop`, then you can quickly fix the error and re-run the code to re-start things without missing a beat.
ru: При выступлении не забывайте использовать параметр `sync:` функции `live_loop`, чтобы позволить вам вернуться в такт после случайных ошибок выполнения кода, которые останавливают живой цикл. Если у вас уже есть параметр `sync:`, указывающий на другой допустимый `live_loop`, то вы можете быстро исправить ошибку и перезапустить код, не потеряв такт.

en: After you run this code, all existing and new sounds will have a low pass filter applied to them and will therefore sound more muffled. Note that this means that the new mixer values stick until they are changed again. However, if you want, you can always reset the mixer back to its default state with `reset_mixer!`. Some of the currently supported opts are: `pre_amp:`, `lpf:` `hpf:`, and `amp:`. For the full list, see the built-in docs for `set_mixer_control!`.
ru: После запуска этого кода ко всем уже существующим и новым звукам будет применен фильтр низких частот, и, следовательно, они будут звучать более приглушенно. Заметьте, это означает, что эти значения микшера остаются таковыми, пока не будут изменены снова. Однако, если вы хотите, вы всегда можете вернуть микшер обратно в состояние по умолчанию с помощью `reset_mixer!`. Вот некоторые из поддерживаемых параметров: `pre_amp:`, `lpf:` `hpf:` и `amp:`. Полный список см. Во встроенной документации для `set_mixer_control!`.

en: Use the mixer's `*_slide` opts to slide one or many opts values over time. For example, to slowly slide the mixer's low pass filter down from the current value to 30, use the following:
ru: Используйте параметры микшера `* _slide` для плавного скольжения одного или нескольких значений параметров во времени. Например, чтобы медленно передвинуть срез фильтр низких частот с текущего значения вниз до 30, используйте следующее:

en: You can then slide quickly back to a high value with:
ru: Затем вы можете быстро вернуться к высокому значению с помощью:

en: When performing, it's often useful to keep a buffer free for working with the mixer like this.
ru: При выступлении часто полезно держать один буфер свободным, чтобы работать с микшером.

en: 5. Practice
ru: 5. Практика

en: The most important technique for live coding is practice. The most common attribute across professional musicians of all kinds is that they practice playing with their instruments - often for many hours a day. Practice is just as important for a live coder as a guitarist. Practice allows your fingers to memorise certain patterns and common edits so you can type and work with them more fluently. Practice also gives you opportunities to explore new sounds and code constructs.
ru: Самым важной техникой для лайвкодинга является практика. Наиболее распространенным атрибутом среди профессиональных музыкантов всех видов является то, что они практикуют игру на своих инструментах - часто по много часов в день. Практика так же важна для лайвкодера, как и для гитариста. Практика позволяет вашим пальцам запоминать определенные шаблоны и общие изменения, чтобы вы могли набирать текст и работать с ними более свободно. Практика также дает вам возможность исследовать новые звуки и структуры кода.

en: When performing, you'll find the more practice you do, the easier it will be for you to relax into the gig. Practice will also give you a wealth of experience to draw from. This can help you understand which kinds of modifications will be interesting and also work well with the current sounds.
ru: Во время выступления вы обнаружите, что чем больше вы практикуетесь, тем более расслабленным вы будите перед аудиторией. Практика также даст вам богатый источник для извлечения уроков. Это может помочь вам понять, какие модификации будут интересны, а также как лучше работать с текущими звуками.

en: A.16 How to Practice Live Coding
ru: А. 16 Как практиковаться в лайв-кодинге

en: 8 Tips for Live Coding Practice
ru: 8 Советов, которые помогут вам при лайв-кодинге

en: Last month we took a look at five important techniques for mastering live coding - in other words, we explored how we could use Sonic Pi to approach code in the same way we would approach a musical instrument. One of the important concepts that we discussed was practice. This month we're going to take a deeper dive into understanding why live coding practice is important and how you might start.
ru: В прошлом месяце мы рассмотрели пять важных методов освоения лайвкодинга - другими словами, мы исследовали, как мы могли бы использовать Sonic Pi, подходя к коду так же, как мы подходили бы к музыкальному инструменту. Одной из важных концепций, которые мы обсуждали, была практика. В этом месяце мы углубимся в понимание того, почему практика лайвкодинга важна и как вы можете ее начать.

en: Practice regularly
ru: Практикуйтесь регулярно

en: The most important piece of advice is to make sure you practice regularly. As a rule I typically practice for 1-2 hours a day, but 20 mins is just fine when you're starting out. Little but often is what you're aiming for - so if you can only manage 10 minutes, that's a great start.
ru: Самый важный совет - регулярно заниматься. Как правило, я обычно тренируюсь по 1-2 часа в день, но и 20 минут - это хорошо, когда вы начинаете. Пусть немного, но регулярно это то, к чему вам нужно стремиться - поэтому, даже если пока вы можете справиться только с 10 минутами, это отличное начало.

en: Practice tip #1 - start to develop a practice routine. Find a nice time in the day that works for you and try and practice at that time as many days of the week as you can. Before long you'll be looking forward to your regular session.
ru: Практический совет № 1 - начните разрабатывать рутинную практику. Найдите подходящее время в подходящий день, и постарайтесь практиковать в это время столько дней недели, сколько сможете. Вскоре вы будете с нетерпением ждать вашей очередной сессии.

en: Learn to Touch Type
ru: Научитесь слепому набору

en: If you watch a professional musician performing on stage you'll likely notice a few things. Firstly, when they play they don't stare at their instrument. Their fingers, arms and bodies know which keys to press, strings to pluck or drums to hit without them having to think about it too much. This is known as "muscle memory" and although it might sound like something only professionals can do - it's just the same as when you first learned to walk or ride a bike - practicing through repetition. Live coders use muscle memory to free their minds from having to think about where to move their fingers so they can focus on the music. This is called touch-typing - typing without having to look at the keyboard.
ru: Если вы посмотрите на выступление профессиональных музыкантов, вы, вероятно, заметите несколько вещей. Во-первых, когда они играют, они не смотрят на свой инструмент. Их пальцы, руки и тело знают, на какие клавиши нажимать, какие струны касаться или в какие барабаны ударять, и им не нужно слишком много думать об этом. Это известно как «мышечная память». И, хотя это может звучать так, как если бы этим могли заниматься только профессионалы, - на деле это то же самое, как и когда вы впервые научились ходить или ездить на велосипеде - необходимо только настойчиво практиковаться. Лайвкодеры используют мышечную память, чтобы освободить свой ум от необходимости думать о том, куда двигать пальцами, в пользу сосредоточения на музыке. Это называется слепым набором текста - без необходимости смотреть на клавиатуру.

en: Practice tip #2 - learn how to touch type. There are many apps, websites and even games which can help you achieve this. Find one you like the look of and stick at it until you can code without looking down.
ru: Практический совет #2 - тренируйте слепой набор. Есть множество приложений, вебсайтов и даже игр, которые могут помочь вам в этом деле. Найдите то, которое вам нравится и поупражняйтесь в нём, пока у вас не получится набирать текст не глядя.

en: Code whilst standing
ru: Программируйте стоя

en: The body of a musician is conditioned for playing their instrument. For example, a trumpet player needs to be able to blow hard, a guitar player needs to be able to grip the fretboard with strength and a drummer needs to be able to continually hit the drums for long periods of time. So, what's physical about live coding? Just like DJs, live coders typically perform whilst standing up and some even dance whilst they code! If you practice live coding whilst sitting at a desk and then have to get up and stand at a gig, you'll likely find the difference very difficult and frustrating.
ru: Тело музыканта приспособлено к игре на его инструменте. Например, трубач должен уметь сильно дуть, гитарист должен уметь крепко держать гриф, а барабанщик должен уметь непрерывно ударять по барабанам в течение длительного периода времени. Итак, что же на уровне тела важно в лайвкодинге? Как и диджеи, лайвкодеры обычно выступают стоя, а некоторые даже танцуют, пока пишут! Если вы постоянно практикуете лайвкодинг сидя за столом, и однажды вам случится выступать перед аудиторией, то не имея навыка работать с кодом стоя, вы скорее всего испытаете серьезные трудности.

en: Practice tip #3 - stand whilst you practice. The easiest way to do this is to use a standing height desk. However, if like me you don't have one at home, there's a couple of low-fi options. The approach I take is to use an ironing board which happens to work rather well. Another is to stack some boxes or large books on a normal desk and place your keyboard on top of that. Also, make sure you stretch before you start practicing and try and dance a little during the session. Remember, nobody is watching you, so have fun and you'll feel much more natural on stage.
ru: Практический совет № 3 - стойте во время тренировки. Самый простой способ сделать это - использовать стол с высокой рабочей поверхностью. Однако, если, как и у меня, его у вас в доме нет, то есть пара вариантов на замену. Я использую гладильную доску, которая работает в этом качестве довольно хорошо. Другой способ - расположить несколько коробок или больших книг на обычном столе и на них положить вашу клавиатуру. Кроме того, не забудьте размяться перед тем, как начать практиковать, и попробуйте немного потанцевать во время вашей сессии. Помните, никто не смотрит на вас, так что повеселитесь, и вы будете чувствовать себя намного более естественно на сцене.

en: Practice setting up
ru: Практикуйтесь в настройке вашего оборудования

en: Most instruments require some assembly and tuning before they can be played. Unless you're a rockstar with a bus full of roadies, you'll have to set up your own instrument before your gig. This is often a stressful time and it is easy for problems to occur. One way to help with this is to incorporate the setup process into your practice sessions.
ru: Большинство инструментов требуют некоторой сборки и настройки, прежде чем на них можно будет играть. Если вы не рок-звезда с автобусом, полным помощников, вы сами должны настроить свой собственный инструмент перед своим выступлением. Это часто довольно не простое дело, и здесь часто возникают проблемы. Один из способов справиться с этим - включить процесс настройки в свои практические занятия.

en: Practice tip #4 - treat setting up as an important part of your practice. For example, have a box or bag that you can keep your Raspberry Pi and keyboard in etc. Before each practice session, take out all the parts, connect everything, and work through the boot process until you have Sonic Pi running and can make sounds. Once you've finished practicing, take the time to carefully pack everything away afterwards. This may take some time at first, but before long you'll be able to setup and pack everything away incredibly quickly without having to think about it.
ru: Практический совет № 4 - рассматривайте установку и настройку оборудования как важную часть вашей практики. Например, возьмите с собой коробку или сумку, в которой можно хранить Raspberry Pi, клавиатуру и т. д. Перед каждой тренировочной сессией вынимайте все элементы вашего оборудования, соединяйте их вместе, делайте все, что необходимо вплоть до того, пока не запустите Sonic Pi и не сможете издавать звуки. Как только вы закончите практиковать, не торопитесь, займитесь тем, чтобы все тщательно упаковать. Сначала это может занять некоторое время, но вскоре вы сможете невероятно быстро собрать и разобрать все необходимое, не задумываясь об этом.

en: Experiment Musically
ru: Экспериментируйте в музыке

en: Once you've set up and are ready to start making music, you might find yourself struggling to know where to start. One problem many people face is that they might have a good idea of the kinds of sounds they want to make, but are frustrated that they can't produce them. Some people don't even know what kind of sounds they want to make! The first thing to do is not to worry - this is very common and happens to every musician - even if they've been practicing for a long time. It is much more important to be making sounds you don't like than not making any sounds at all.
ru: Как только вы настроите ваше оборудование и уже будете готовы начать создавать музыку, вы можете испытать затруднения с тем, чтобы сходу понять, с чего начать. Проблема, с которой сталкиваются многие люди, заключается в том, что они могут хорошо представлять звуки, которые они хотят произвести, но разочаровываются тем, что у них выходит на деле. А некоторые люди и вовсе не знают, какие звуки они хотят издавать! Прежде всего, не нужно волноваться - это очень распространенная история и она случается с каждым музыкантом - даже если они занимаются музыкой в течение длительного времени. Здесь гораздо важнее издавать звуки, даже те, которые вам не нравятся, чем вообще не издавать никаких звуков.

en: Practice tip #5 - spend time making sounds and music you don't like. Try to make time to explore new sounds and ideas. Don't worry that it might sound terrible if it's not the style you're looking for. When you're experimenting like this you increase the chance of stumbling over a sound or combination of sounds which you love! Even if 99% of the sounds you make are bad, that 1% might be the riff or intro to your new track. Forget the things you don't like and remember the parts you do. This is even easier when you're making music with code - just hit save!
ru: Практический совет № 5 - тратьте время на создание даже таких звуков и музыки, которые вам не нравятся. Постарайтесь найти время для изучения новых звуков и идей. Не волнуйтесь, это звучит ужасно, и не так, как бы вы хотели. Когда вы экспериментируете таким образом, вы увеличиваете вероятность наткнуться на звук или комбинацию звуков, которые вы полюбите! Даже если 99% ваших звуков плохие, этот 1% может стать главным риффом или вступлением к вашему новому треку. Забудьте о том, что у вас не выходит все сразу, и помните, что вам может пригодиться часть того, что вы сделали прямо сейчас. Это даже проще, когда вы пишете музыку с кодом - просто нажмите «Сохранить»!

en: Hear the Code
ru: Учитесь слышать код

en: Practice tip #6 - write some code into Sonic Pi but don't hit the Run button. Instead, try to imagine what sound it is going to produce. Then, hit Run, listen, and think about what you got right and what you didn't. Keep repeating this until it become a natural part of your coding process. When I practice I normally have a good idea of what the code will sound like. However, I still am occasionally surprised, and then I'll stop and spend some time thinking about why I was wrong. Each time this happens, I learn new tricks which allow me to express myself in new ways.
ru: Практический совет № 6 - напишите какой-нибудь код в Sonic Pi, но не нажимайте кнопку Выполнить. Вместо этого попытайтесь представить, какой звук он произведет. Затем нажмите Выполнить, слушайте и думайте о том, верно ли вы предположили или нет. Продолжайте повторять, пока это не станет естественной частью вашего процесса кодирования. Когда занимаюсь, я обычно хорошо представляю, как будет звучать код. Тем не менее, я все еще иногда ошибаюсь, и провожу некоторое время, размышляя о том, почему я был неправ. Каждый раз, когда это происходит, я учусь новым трюкам, которые позволяют мне выразить себя по-новому.

en: Remove all distractions
ru: Устраните все отвлекающие факторы

en: A common problem when practicing is to become distracted with other things. Practicing is hard and requires real discipline regardless of the kind of music you're making - from jazz to classical to EDM. If you're struggling to get started or make progress, it's often too easy to hop on social media, or look something up on the internet etc. If you've set yourself a target of 20 minutes of practice, it's important to try and spend all that time being as productive as possible.
ru: Обычная проблема во время практики - отвлекаться на другие вещи. Практика сложна и требует настоящей дисциплины, независимо от того, какую музыку вы делаете - от джаза до классики и EDM. Если вы изо всех сил пытаетесь начать или добиться прогресса, часто слишком легко отвлечься на социальные сети, начать искать что-то в Интернете и т. д. Если вы поставили себе цель 20 минут практики, важно попробовать тратить все это время как можно более продуктивно.

en: Practice tip #7 - before you start practicing remove as many distractions as possible. For example, disconnect from the internet, put your phone in another room and try to practice in a quiet place where you're unlikely to be disturbed. Try to focus on coding music and you can return to your distractions when you've finished.
ru: Практический совет № 7 - прежде чем начать практиковаться, удалите как можно больше отвлекающих факторов. Например, отключитесь от Интернета, поместите свой телефон в другую комнату и попробуйте потренироваться в тихом месте, где вас вряд ли будут беспокоить. В этот момент попытайтесь сосредоточиться на кодировании музыки, ведь вы сможете вернуться к тому, что вас отвлекает, когда закончите.

en: Keep a practice diary
ru: Ведите дневник практики

en: When you are practicing, you'll often find your mind is full of new exciting ideas - new musical directions, new sounds to try out, new functions to write, etc. These ideas are often so interesting that you might stop what you're doing and start working on the idea. This is another form of distraction!
ru: Когда вы практикуете, вы часто обнаруживаете, что ваш ум полон новых захватывающих идей - новых направлений в исследовании музыки, новых звуков, которые нужно опробовать, новых функций для записи в код и т. д. Эти идеи часто настолько интересны, что вы можете остановить то, что вы делаете и начать работать над ними. Это еще одна форма отвлечения!

en: Practice tip #8 - keep a practice diary by your keyboard. When you get an exciting new idea, temporarily pause your practice session, quickly jot the idea down, then forget about it and carry on practicing. You can then spend some quality time thinking about and working on your ideas after you've finished practicing.
ru: Практический совет № 8 - ведите дневник тренировок. Когда у вас появляется новая захватывающая идея, временно приостановите тренировочную сессию, быстро набросайте идею, затем забудьте о ней и продолжайте практиковаться. Вы можете потратить некоторое время на обдумывание и проработку своих идей после того, как закончите практиковать.

en: Try to establish a practice routine which incorporates as many of these ideas as possible. Try to keep the sessions as fun as possible but be aware that some practice sessions will be hard and feel a little like work. However, it will all be worth it once you've created your first piece or given your first performance. Remember, practice is the key to success!
ru: Постарайтесь завести практику, которая включает в себя как можно больше из этих идей. Постарайтесь, чтобы занятия проходили как можно более увлекательно, но имейте в виду, что некоторые тренировки будут трудными и будут немного походить на работу. Однако, все это будет стоить того, как только вы создадите свою первую пьесу или дадите свое первое выступление. Помните, практика - это ключ к успеху!

en: A.17 Sample Stretching
ru: A.17 Растягивание сэмплов

en: Sample Stretching
ru: Растягивание сэмплов

en: When people discover Sonic Pi, one of the first things they learn is how simple it is to play pre-recorded sounds using the `sample` function. For example, you can play an industrial drum loop, hear the sound of a choir or even listen to a vinyl scratch all via a single line of code. However, many people don't realise that you can actually vary the speed that the sample is played back at for some powerful effects and a whole new level of control over your recorded sounds. So, fire up a copy of Sonic Pi and let's get started stretching some samples!
ru: Когда люди открывают для себя Sonic Pi, первое, что они узнают, это то, как проиграть предварительно записанные звуки с помощью функции `sample`. Например, вы можете сыграть индустриальную барабанную петлю, услышать звук хора или даже прослушать виниловой скретч через одну единственную строку кода. Однако многие люди не понимают, что могут изменить скорость воспроизведения сэмпла для получения некоторых мощных эффектов и совершенно нового уровня контроля над записанными звуками. Итак, запустите Sonic Pi и давайте начнем растягивать некоторые сэмплы!

en: Slowing Samples Down
ru: Замедление сэмплов

en: To modify the playback rate of a sample we need to use the `rate:` opt:
ru: Чтобы изменить скорость воспроизведения сэмпла, нам нужно использовать параметр `rate:`:

en: If we specify a `rate:` of `1` then the sample is played back at the normal rate. If we want to play it back at half speed we simply use a `rate:` of `0.5`:
ru: Если мы укажем `rate:` значение `1`, то сэмпл воспроизведется с нормальной скоростью. Если мы хотим воспроизвести его с половиной начальной скорости, мы просто используем  для `rate:`  значение `0.5`:

en: Notice that this has two effects on the audio. Firstly the sample sounds lower in pitch and secondly it takes twice as long to play back (see the sidebar for an explanation of why this is the case). We can even choose lower and lower rates moving towards `0`, so a `rate:` of `0.25` is a quarter speed, `0.1` is a tenth of the speed, etc. Try playing with some low rates and see if you can turn the sound into a low rumble.
ru: Обратите внимание, что это производит два эффекта на аудио. Во-первых, сэмпл звучит ниже по высоте, а во-вторых, для воспроизведения требуется вдвое больше времени. Мы можем выбрать все более низкие значения, двигаясь в сторону `0`. Так` rate: ` в значении ` 0.25` - это четверть скорости, `0.1` - это десятая часть скорости и т. д. Попробуйте поиграть с некоторыми низкими значениями и посмотрите, как вы можете превратить звук в низкий грохот.

en: Speeding Samples Up
ru: Ускорение сэмплов

en: In addition to making the sound longer and lower using a small rate, we can use higher rates to make the sound shorter and higher. Let's play with a drum loop this time. First, take a listen to how it sounds at the default rate of `1`:
ru: Помимо удлинения звука и его тональности посредством низких значений `rate`, мы можем использовать высокие значения, чтобы сделать звук короче и выше. Давайте на этот раз поиграем с барабанной петлей. Сначала послушайте, как это звучит со скоростью по умолчанию `1`:

en: Now, let's speed it up a little:
ru: Теперь давайте немного ускорим:

en: Ha! We just moved musical genres from old-skool techno to jungle. Notice how the pitch of each drum hit is higher as well as how the whole rhythm speeds up. Now, try even higher rates and see how high and short you can make the drum loop. For example, if you use a rate of `100`, the drum loop turns into a click!
ru: Ха! Мы просто сменили музыкальные жанры из техно-стиля в джангл. Обратите внимание, что высота каждого удара барабана стала выше, а также как ускоряется и весь ритм. Теперь попробуйте еще более высокие значения и посмотрите, насколько высокими и короткими вы можете сделать барабанную петлю. Например, если вы используете значение `100`, барабанная петля превращается в щелчок!

en: Reverse Gear
ru: Обратная передача

en: Now, I'm sure many of you are thinking the same thing right now... "what if you use a negative number for the rate?". Great question! Let's think about this for a moment. If our `rate:` opt signifies the speed with which the sample is played back, `1` being normal speed, `2` being double speed, `0.5` being half speed, `-1` must mean backwards! Let's try it on a snare. First, play it back at the normal rate:
ru: Теперь, я уверен, что многие из вас думают об одном и том же прямо сейчас ... «что если вы используете отрицательное значение для `rate:`?». Отличный вопрос! Давайте подумаем об этом на мгновение. Если наш параметр `rate:` обозначает скорость, с которой воспроизводится сэмпл, где `1` - нормальная скорость,` 2` - двойная скорость, `0.5` - половинная скорость,` -1` должно означать задом наперед! Давайте попробуем это на малом барабане. Сначала воспроизведите его с нормальной скоростью:

en: Now, play it backwards:
ru: Теперь проиграем это в обратном направлении:

en: Of course, you can play it backwards twice as fast with a rate of `-2` or backwards at half speed with a rate of `-0.5`. Now, play around with different negative rates and have fun. It's particularly amusing with the `:misc_burp` sample!
ru: Конечно, вы можете играть в обратном направлении в два раза быстрее со значением `-2` или назад в половину скорости со значением `-0.5`. Теперь поиграйте с разными отрицательными значениями и получайте удовольствие. Это особенно забавно с сэмплом `: misc_burp`!

en: One of the effects of rate modification on samples is that faster rates result in the sample sounding higher in pitch and slower rates result in the sample sounding lower in pitch. Another place you may have heard this effect in every day life is when you're cycling or driving past a beeping pedestrian crossing - as you're heading towards the sound source the pitch is higher than when you're moving away from the sound - the so-called Doppler effect. Why is this?
ru: Одним из эффектов изменения скорости на сэмплах является то, что более высокие значения приводят к тому, что сэмплы звучат выше по высоте, а более медленные скорости приводят к тому, что сэмплы звучат ниже по высоте. Другая ситуация, в которой вы, возможно, слышали этот эффект в повседневной жизни, - это когда вы едете на велосипеде или проезжаете мимо громкого пешеходного перехода - когда вы направляетесь к источнику звука, высота звука выше, чем при удалении от звука - это так называемый эффект Доплера. Почему это так?

en: Let's consider a simple beep which is represented by a sine wave. If we use an oscilloscope to plot a beep, we'll see something like Figure A. If we plot a beep an octave higher, we'll see Figure B and an octave lower will look like Figure C. Notice that the waves of higher notes are more compact and the waves of lower notes are more spread out.
ru: Давайте рассмотрим простой звуковой сигнал, который представлен синусоидальной волной. Если мы используем осциллограф для построения звукового сигнала, мы увидим что-то вроде рисунка А. Если мы построим звуковой сигнал на октаву выше, мы увидим рисунок Б, а октава ниже будет выглядеть как на рисунке С. Обратите внимание, что волны более высокого уровня ноты более компактны, а волны нижних нот более длинные.

en: A sample of a beep is nothing more than a lot of numbers (x, y, coordinates) which when plotted onto a graph will re-draw the original curves. See figure D where each circle represents a coordinate. To turn the coordinates back into audio, the computer works through each x value and sends the corresponding y value to the speakers. The trick here is that the rate at which the computer works through the x numbers does not have to be the same as the rate with which they were recorded. In other words, the space (representing an amount of time) between each circle can be stretched or compressed. So, if the computer walks through the x values faster than the original rate, it will have the effect of squashing the circles closer together which will result in a higher sounding beep. It will also make the beep shorter as we will work through all the circles faster. This is shown in Figure E.
ru: Сэмпл аналогового сигнала - это не что иное, как множество чисел (x, y, координаты), которые при перенесении на график воссоздают с той или иной точностью исходную звуковую волну. Смотрите рисунок D, где каждая точка представляет координату. Чтобы преобразовать координаты обратно в звук, компьютер соединяет каждое значение x с со соответствующим значением y и отправляет в динамики. Хитрость в том, что скорость, с которой компьютер работает с числами х, не обязательно должна совпадать со скоростью, с которой они были записаны. Другими словами, пространство (представляющее количество времени) между каждой точкой координат может быть растянуто или сжато. Таким образом, если компьютер будет проходить через значения x быстрее, чем исходная скорость, это приведет к сжатию координат ближе друг к другу, что приведет к более высокому тону сигнала. Также это сделает звуковой сигнал короче, так как мы будем проходить все координаты быстрее. Это показано на рисунке E.

en: Finally, one last thing to know is that a mathematician called Fourier proved that any sound is actually lots and lots of sine waves all combined together. Therefore, when we compress and stretch any recorded sound we're actually stretching and compressing many sine waves all at the same time in exactly this manner.
ru: Наконец, еще одна вещь, которую нужно знать, это то, что математик по имени Фурье доказал, что любой звук на самом деле - это множество синусоидальных волн, объединенных вместе. Поэтому, когда мы сжимаем и растягиваем любой записанный звук, мы фактически растягиваем и сжимаем множество синусоидальных волн одновременно.

en: Pitch Bending
ru: Модуляция тональности звука

en: As we've seen, using a faster rate will make the sound higher in pitch and a slower rate will make the sound lower in pitch. A very simple and useful trick is to know that doubling the rate actually results in the pitch being an octave higher and inversely halving the rate results in the pitch being an octave lower. This means that for melodic samples, playing it alongside itself at double/half rates actually sounds rather nice:
ru: Как мы уже видели, использование более высокой частоты сделает звук более высоким по тональности, а более медленной - более низким. Очень простой и полезный трюк состоит в том, чтобы знать, что удвоение скорости фактически приводит к тому, что высота тона становится на октаву выше, а обратное уменьшение частоты вдвое приводит к снижению высоты тона на октаву. Это означает, что для мелодичных сэмплов воспроизведение его вместе с двойной / половиной исходной скорости звучит довольно неплохо:

en: However, what if we just want to alter the rate such that the pitch goes up one semitone (one note up on a piano)? Sonic Pi makes this very easy via the `rpitch:` opt:
ru: Однако что, если мы просто хотим изменить скорость так, чтобы высота звука повышалась на один полутон (одна клавиша на фортепиано)? Sonic Pi делает это очень легко с помощью параметра `rpitch:`:

en: If you take a look at the log on the right, you'll notice that an `rpitch:` of `3` actually corresponds to a rate of `1.1892` and a `rpitch:` of `7` corresponds to a rate of `1.4983`. Finally, we can even combine `rate:` and `rpitch:` opts:
ru: Если вы посмотрите в журнал, то заметите, что `rpitch:` в значении `3` фактически соответствует скорости` 1.1892`, а `rpitch:` в значении `7` соответствует скорости `1.4983`. Наконец, мы можем даже объединить параметры`rate:` и `rpitch:`:

en: A.18 Sound Design - Additive Synthesis
ru: A.18 Саунд-дизайн - аддитивный синтез

en: Additive Synthesis
ru: Аддитивный синтез

en: Simple Combinations
ru: Простые комбинации

en: Let's start with the most basic sound there is - the humble pure-toned sine wave:
ru: Давайте начнем с самого основного звука -простой синусоиды с чистыми тонами:

en: Now, let's see how this sounds combined with a square wave:
ru: Теперь давайте посмотрим, как это звучит в сочетании с прямоугольной волной:

en: Notice how the two sounds combine to form a new, richer sound. Of course, we don't have to stop there, we can add as many sounds as we need. However, we need to be careful with how many sounds we add together. Just like when we mix paints to create new colours, adding too many colours will result in a messy brown, similarly - adding too many sounds together will result in a muddy sound.
ru: Обратите внимание, как эти два звука объединяются, чтобы сформировать новый, более богатый звук. Конечно, нам не нужно останавливаться на достигнутом, мы можем добавить столько звуков, сколько хотим. Однако мы должны быть осторожны с тем, сколько звуков мы смешиваем. Точно так же, как когда мы смешиваем краски для создания новых цветов, добавление слишком большого количества цветов приведет к грязному коричневому цвету, аналогично - добавление слишком большого количества звуков вместе приведет к грязному звуку.

en: Blending
ru: Смешивание со вкусом

en: Let's add something to make it sound a little brighter. We could use a triangle wave at an octave higher (for that high bright sound) yet only play it at amp `0.4` so it adds something extra to the sound rather than taking it over:
ru: Давайте добавим что-нибудь, чтобы это зазвучало немного ярче. Мы могли бы использовать треугольную волну на октаву выше (для яркого звука), но воспроизводить ее с амплитудой `0.4`, чтобы она только добавила кое-то к звуку, а не перетянула все на себя:

en: Now, try creating your own sounds by combining 2 or more synths at different octaves and amplitudes. Also, note that you can play around with each synth's opts to modify each source sound before it is mixed in for even more combinations of sounds.
ru: Теперь попробуйте создать свои собственные звуки, комбинируя 2 или более синтезатора с разными октавами и амплитудами. Также обратите внимание, что вы можете поиграть с опциями каждого синтезатора, чтобы модифицировать каждый исходный звук, прежде чем он будет смешан для еще большего количества комбинаций звуков.

en: Detuning
ru: Расстройка осцилляторов

en: So far, when combining our different synths we've used either the same pitch or switched octave. How might it sound if we didn't stick to octaves but instead chose a slightly higher or lower note? Let's try it:
ru: Пока что, комбинируя наши разные синтезаторы, мы использовали либо одинаковую высоту, либо переключали октаву. Как это могло бы звучать, если бы мы не придерживались октав, а вместо этого выбрали чуть более высокую или более низкую ноту? Давай попробуем:

en: If we detune our square waves by 0.7 notes we hear something that perhaps doesn't sound in tune or correct - a 'bad' note. However, as we move closer to 0 it will sound less and less out of tune as the pitches of the two waves get closer and more similar. Try it for yourself! Change the `detune:` opt value from `0.7` to `0.5` and listen to the new sound. Try `0.2`, `0.1`, `0.05`, `0`. Each time you change the value, take a listen and see if you can hear how the sound is changing. Notice that low detune values such as `0.1` produce a really nice 'thick' sound, with both slightly different pitches interacting with each other in interesting, often surprising, ways.
ru: Если мы расстроем наши прямоугольные волны на 0,7 ноты, мы услышим что-то, что, возможно, звучит не в гармонии или не правильно - как «плохая» нота. Однако, когда мы приближаемся к 0, это будет звучать все менее и менее заметно, так как высота звука двух волн становится все ближе и ближе. Попробуйте сами! Измените значение параметра `detune:` с `0.7` на` 0.5` и прослушайте новый звук. Попробуйте `0.2`,` 0.1`, `0.05`,` 0`. Каждый раз, когда вы меняете значение, прислушайтесь и посмотрите, можете ли вы услышать, как меняется звук. Обратите внимание, что низкие значения расстройки, такие как `0.1`, производят действительно хороший «толстый» звук, при этом оба немного отличающихся тона взаимодействуют друг с другом интересным, часто удивительным, способом.

en: Amplitude shaping
ru: Амплитудная огибающая

en: Another way we can finely craft our sound is to use a different envelope and options for each synth trigger. For example this will allow you to make some aspects of the sound percussive and other aspects ring out for a period of time.
ru: Еще один способ, которым мы можем точно создать свой звук, - это использовать разные огибающие и параметры для каждого запускаемого синтезатора. Например, это позволит вам воспроизвести некоторые аспекты перкуссионного звука, и другие, в течение времени звучания.

en: In the example above I have mixed in a noisy percussive element to the sound along with some more persistent background rumbling. This was achieved firstly by using two noise synths with middling cutoff values (`90` and `100`) using short release times along with a noise with a longer release time but with a low cutoff value (which makes the noise less crisp and more rumbly.)
ru: В приведенном выше примере я смешал шумовой перкуссионный элемент с настойчивым грохочущим призвуком. Это было достигнуто в первую очередь за счет использования двух синтезаторов шума со средними значениями среза частоты фильтра (`90` и` 100`) и с использованием короткого времени высвобождения (release) наряду с шумом с более длительным временем высвобождения, но с низким значением частоты среза фильтра (что делает шум менее четким и более гудящим.)

en: define :bell do |n|
      # Triangle waves for the 'hit'
      synth :tri, note: n - 12, release: 0.1
      synth :tri, note: n + 0.1, release: 0.1
      synth :tri, note: n - 0.1, release: 0.1
      synth :tri, note: n, release: 0.2
      # Sine waves for the 'ringing'
      synth :sine, note: n + 24, release: 2
      synth :sine, note: n + 24.1, release: 2
      synth :sine, note: n + 24.2, release: 0.5
      synth :sine, note: n + 11.8, release: 2
      synth :sine, note: n, release: 2
      # Low sine waves for the bass
      synth :sine, note: n - 11.8, release: 2
      synth :sine, note: n - 12, release: 2
    end
    # Play a melody with our new bell!
    bell :e3
    sleep 1
    bell :c2
    sleep 1
    bell :d3
    sleep 1
    bell :g2
ru: define :bell do |n|
      # Треугольные волны для 'удара':
      synth :tri, note: n - 12, release: 0.1
      synth :tri, note: n + 0.1, release: 0.1
      synth :tri, note: n - 0.1, release: 0.1
      synth :tri, note: n, release: 0.2
      # Волны-синусоиды для 'звона':
      synth :sine, note: n + 24, release: 2
      synth :sine, note: n + 24.1, release: 2
      synth :sine, note: n + 24.2, release: 0.5
      synth :sine, note: n + 11.8, release: 2
      synth :sine, note: n, release: 2
      # Низкие волны-синусоиды для баса:
      synth :sine, note: n - 11.8, release: 2
      synth :sine, note: n - 12, release: 2
    end
    # Играем мелодию с нашим новым колоколом!
    bell :e3
    sleep 1
    bell :c2
    sleep 1
    bell :d3
    sleep 1
    bell :g2

en: A.19 Sound Design - Subtractive Synthesis
ru: A.19 Саунд-дизайн - субтрактивный синтез

en: Subtractive Synthesis
ru: Субтрактивный синтез

en: This is the second in a series of articles on how to use Sonic Pi for sound design. Last month we looked at additive synthesis which we discovered was the simple act of playing multiple sounds at the same time to make a new combined sound. For example we could combine different sounding synths or even the same synth at different pitches to build a new complex sound from simple ingredients. This month we'll look at a new technique commonly called *subtractive synthesis* which is simply the act of taking an existing complex sound and removing parts of it to create something new. This is a technique which is commonly associated with the sound of analog synthesisers of the 1960s and 1970s but also with the recent renaissance of modular analog synths through popular standards such as Eurorack.
ru: Это вторая статья из серии статей о том, как использовать Sonic Pi для саунд дизайна. В прошлом месяце мы рассмотрели аддитивный синтез, который, как мы обнаружили, представлял собой простой процесс одновременного воспроизведения нескольких звуков для создания нового комбинированного звука. Например, мы могли бы комбинировать разные звучащие синтезаторы или даже один и тот же синтезатор на разных высотах, чтобы создать новый сложный звук из простых ингредиентов. В этом месяце мы рассмотрим новую технику, обычно называемую * субтрактивным синтезом *, которая представляет собой акт извлечения существующего сложного звука и удаления его частей для создания чего-то нового. Это метод, который обычно ассоциируется со звуком аналоговых синтезаторов 1960-х и 1970-х годов, а также с недавним возрождением модульных аналоговых синтезаторов в популярных стандартах, таких как Eurorack.

en: Despite this sounding like a particularly complicated and advanced technique, Sonic Pi makes it surprisingly simple and easy - so let's dive right in.
ru: Несмотря на то, что это звучит как очень сложная и продвинутая техника, Sonic Pi делает ее на удивление простой и легкой - так что давайте погрузимся в нее.

en: Complex Source Signal
ru: Комплексный исходный сигнал

en: For a sound to work well with subtractive synthesis, it typically needs to be fairly rich and interesting. This doesn't mean we need something hugely complex - in fact, just a standard `:square` or `:saw` wave will do:
ru: Чтобы звук хорошо работал в субтрактивном синтезе, он должен быть достаточно насыщенным и интересным. Это не значит, что нам нужно что-то чрезвычайно сложное - на самом деле, стандартная волна `: square` или`: saw` сделает что нужно:

en: Notice that this sound is already pretty interesting and contains many different frequencies above `:e2` (the second E on a piano) which add to create the timbre. If that didn't make much sense to you, try comparing it with the `:beep`:
ru: Обратите внимание, что этот звук уже довольно интересен и содержит много разных частот выше `: e2` (E второй октавы на фортепиано), которые добавляются для создания тембра. Если для вас это пока не особенно понятно, попробуйте сравнить его с `: beep`:

en: As the `:beep` synth is just a sine wave, you'll hear a much purer tone and only at `:e2` and none of the high crispy/buzzy sounds which you heard in the `:saw`. It's this buzziness and variation from a pure sine wave that we can play with when we use subtractive synthesis.
ru: Поскольку синтезатор `: beep` - это просто синусоида, вы услышите более чистый тон и только в регистре `: e2` и не буде выше него никаких  хрустящих / гудящих звуков, которые вы слышали в `: saw`. Именно с этими призвуками и вариациями чистой синусоидальной волны мы можем играть, используя субтрактивный синтез.

en: Once we have our raw source signal, the next step is to pass it through a filter of some kind which will modify the sound by removing or reducing parts of it. One of the most common filters used for subtractive synthesis is something called a low pass filter. This will allow all the low parts of the sound through but will reduce or remove the higher parts. Sonic Pi has a powerful yet simple to use FX system that includes a low pass filter, called `:lpf`. Let's play with it:
ru: Как только у нас будет исходный сигнал, следующий шаг - пропустить его через какой-нибудь фильтр, который будет изменять звук, удаляя или уменьшая его части. Один из наиболее распространенных фильтров, используемых для вычитающего синтеза, называется фильтром нижних частот. Он позволит пропустить все низкие части звука, но уменьшит или удалит верхние. Sonic Pi имеет мощную, но простую в использовании систему эффектов, которая включает в себя фильтр низких частот, называемый `: lpf`. Давайте поиграем с этим:

en: If you listen carefully you'll hear how some of that buzziness and crispiness has been removed. In fact, all the frequencies in the sound above note `100` have been reduced or removed and only the ones below are still present in the sound. Try changing that `cutoff:` point to lower notes, say `70` and then `50` and compare the sounds.
ru: Если вы внимательно прослушаете, вы услышите, как некоторые из этих шумных и хрустящих звуков были удалены. Фактически, все частоты в звуке выше ноты `100` были уменьшены или удалены, и только те, что ниже, все еще присутствуют в звуке. Попробуйте изменить значение `cutoff:`, укажите ему на более низкие ноты, скажем `70`, а затем` 50` и сравните звуки.

en: Of course, the `:lpf` isn't the only filter you can use to manipulate the source signal. Another important FX is the high pass filter referred to as `:hpf` in Sonic Pi. This does the opposite to `:lpf` in that it lets the high parts of the sound through and cuts off the low parts.
ru: Конечно, `: lpf` не единственный фильтр, который вы можете использовать для манипулирования исходным сигналом. Другим важным эффектом является фильтр верхних частот, в Sonic Pi называемый `: hpf`. Это противоположно `: lpf` в том смысле, что пропускает верхние части звука и обрезает низкие.

en: Notice how this sounds much more buzzy and raspy now that all the low frequency sounds have been removed. Play around with the cutoff value - notice how lower values let more of the original bass parts of the source signal through and higher values sound increasingly tinny and quiet.
ru: Обратите внимание, что теперь это звучит гораздо более шумно и скрипуче, когда все низкочастотные звуки были удалены. Поиграйте со значением среза - обратите внимание, как низкие значения позволяют большему количеству басовых частей исходного сигнала проходить, а более высокие значения звучат все более жесткими и тихими.

en: Low Pass Filter
ru: Фильтр нижних частот

en: ![Varying amounts of low pass filtering](../../../etc/doc/images/tutorial/articles/A.19-subtractive-synthesis/subtractive-synthesis-waveforms.png)
ru: ![Различная степень фильтрации низких частот](../../../etc/doc/images/tutorial/articles/A.19-subtractive-synthesis/subtractive-synthesis-waveforms.png)

en: The low pass filter is such an important part of every subtractive synthesis toolkit that it's worth taking a deeper look at how it works. This diagram shows the same sound wave (the `:prophet` synth) with varying amounts of filtering. At the top, section A shows the audio wave with no filtering. Notice how the wave form is very pointy and contains lots of sharp edges. It is these hard, sharp angles that produce the high crispy/buzzy parts of the sound. Section B shows the low pass filter in action - notice how it is less pointy and more rounded than the wave form above. This means that the sound will have fewer high frequencies giving it a more mellow rounded feel. Section C shows the low pass filter with a fairly low cutoff value - this means that even more of the high frequencies have been removed from the signal resulting in an even softer, rounder wave form. Finally, notice how the size of the wave form, which represents the amplitude, decreases as we move from A to C. Subtractive synthesis works by removing parts of the signal which means that the overall amplitude is reduced as the amount of filtering that is taking place increases.
ru: Фильтр нижних частот является настолько важной частью каждого субтрактивного инструментария синтеза, что стоит более глубоко взглянуть на его работу. Эта диаграмма показывает одну и ту же звуковую волну (синтезатор `: prophet`) с различной степенью фильтрации. Вверху в разделе A показана звуковая волна без фильтрации. Обратите внимание, что форма волны очень острая и содержит много острых краев. Именно эти жесткие, острые углы создают высокие хрустящие / шумные части звука. В разделе B показан фильтр нижних частот в действии - обратите внимание, что он менее острый и более округлый, чем форма волны выше. Это означает, что у звука будет меньше высоких частот, что придаст ему более мягкий округлый вид. В разделе C показан фильтр нижних частот с довольно низким значением отсечки - это означает, что еще больше высоких частот было удалено из сигнала, что привело к еще более мягкой, округлой форме волны. Наконец, обратите внимание, как размер формы волны, которая представляет амплитуду, уменьшается при переходе от А к С. Субтрактивный синтез работает путем удаления частей сигнала, что означает, что общая амплитуда уменьшается по мере того, как объем фильтрации увеличивается.

en: Filter Modulation
ru: Модуляция фильтра

en: So far we've just produced fairly static sounds. In other words, the sound doesn't change in any way for the entirety of its duration. Often you might want some movement in the sound to give the timbre some life. One way to achieve this is via filter modulation - changing the filter's options through time. Luckily Sonic Pi gives you powerful tools to manipulate an FX's opts through time. For example, you can set a slide time to each modulatable opt to specify how long it should take for the current value to linearly slide to the target value:
ru: Пока что мы только что создали довольно статичные звуки. Другими словами, звук никак не меняется в течение всей его продолжительности. Часто вам может понадобиться какое-то движение в звуке, чтобы оживить тембр. Одним из способов достижения этого является модуляция фильтра - изменение параметров фильтра во времени. К счастью, Sonic Pi дает вам мощные инструменты для манипулирования параметрами эффектов во времени. Например, вы можете установить время скольжения для каждого модулируемого параметра, чтобы указать, сколько времени потребуется, чтобы текущее значение линейно скользило к заданному :

en: Let's finish by designing a function which will play a new sound created with subtractive synthesis. See if you can figure out what's going on here - and for the advanced Sonic Pi readers out there - see if you can work out why I wrapped everything inside a call to `at` (please send answers to @samaaron on Twitter).
ru: Давайте закончим, разработав функцию, которая будет воспроизводить новый звук, созданный с субтрактивным синтезом. Посмотрите, сможете ли вы выяснить, что здесь происходит, - и для продвинутых читателей Sonic Pi - посмотрите, сможете ли вы понять, почему я завернул все в вызов функции `at` (пожалуйста, отправьте ответы на @samaaron в Twitter).

en: A.20 Creative coding in the classroom with Sonic Pi
ru: A.20 Креативное написание кода в классе с Sonic Pi

en: Creative coding in the classroom with Sonic Pi
ru: Креативное написание кода в классе с Sonic Pi

en: (This article was published in [issue 9 of the Hello World Magazine](https://helloworld.raspberrypi.org/issues/9))
ru: (Эта статья была опубликована в [issue 9 of the Hello World Magazine](https://helloworld.raspberrypi.org/issues/9), источник на английском)

en: Code is one of the most creative media that humans have created. The initially obscure symbols of parentheses and lambdas are not just deeply rooted in science and mathematics, they are the closest we have managed to get to casting the same kind of magical spells as Gandalf and Harry Potter. I believe that this provides a powerful means of engagement in our learning spaces. Through the magic of code we are able to conjure up individually meaningful stories and learning experiences.
ru: Код - один из самых креативных инструментов, созданных людьми. Изначально непонятные символы скобок и лямбд не просто глубоко укоренились в науке и математике. Они - самое близкое, чего нам удалось достичь практике в произнесении заклинаний, подобно Гендальфу и Гарри Поттеру. Я думаю, что это даёт нам мощные средства вовлечения в наши пространства обучения. С помощью магии кода мы можем сотворить индивидуально значимые истории и поучительный опыт.

en: We are surrounded by magical experiences. From the sleight of hand of a stage magician making the ball disappear into thin air, to the wonder of seeing your favourite band perform on a big stage. It is these "wow" moments that inspire us to pick up a magic book and learn the French Drop or to start jamming power chords on an old guitar. How might we create similarly deep and lasting senses of wonder that will motivate people to practice and learn the fundamentals of programming?
ru: Мы окружены чудесными событиями. От ловкости рук фокусника, заставляющего шар исчезнуть в воздухе, до удивительного зрелища выступления любимой группы на большой сцене. Именно эти моменты "вау" вдохновляют нас взять в руки книгу по магии и выучить "Французский Сброс" или начать играть пауэр-аккорды на старой гитаре. Как мы можем создать такое же глубокое и продолжительное чувство удивления, которое будет мотивировать людей заниматься и изучать основы программирования?

en: Musical Engines and Notation
ru: Музыкальные движки и нотация

en: The histories of music and computers have been intricately woven together since the inception of computing machines, or "engines" as Charles Babbage's powerful analytical engine was called. Back in 1842 the Mathematician Ada Lovelace, who worked very closely with Babbage, saw the creative potential of these engines. Whilst these first engines had originally been designed to accurately solve hard maths problems, Ada dreamt about making music with them:
ru: Истории музыки и компьютеров причудливо переплелись с момента появления вычислительных машин, или просто "машин", как называли мощный аналитический вычислитель Чарльза Бэббиджа. Ещё в 1842 году математик Ада Лавлейс, тесно сотрудничавшая с Бэббиджем, увидела творческий потенциал этих машин. Хотя эти первые машины изначально были разработаны для точного решения сложных математических задач, Ада мечтала создавать с их помощью музыку:

en: "..the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent." Ada Lovelace, 1842.
ru: "... машина могла бы сочинять сложные и глубокие научные произведения любой степени сложности и протяженности". Ада Лавлейс, 1842 год.

en: Of course, today in 2019 much of our music, regardless of genre, has either been composed, produced or mastered with a digital computer. Ada's dream came true. It is even possible to trace the history back even further. If you see coding as the art of writing sequences of special symbols that instruct a computer to do specific things, then musical composition is a very similar practice. In Western music, the symbols are black dots positioned on a stave of lines that tell the musician which notes to play and when. Intriguingly, if we trace the roots of Western music notation back to the Italian Benedictine monk, Guido d'Arezzo, we find that the dots and lines system that modern orchestras use is just one of a number of notation systems he worked on. Some of the others were much closer to what we might now see as code.
ru: Конечно, сегодня, в 2019 году, большая часть нашей музыки, независимо от жанра, либо сочинена, либо спродюсирована, либо сведена с помощью цифрового компьютера. Мечта Ады сбылась. Можно даже проследить историю еще дальше. Если рассматривать программирование как искусство написания последовательностей специальных символов, которые дают компьютеру инструкции для выполнения определенных действий, то музыкальная композиция - это очень похожая практика. В западной музыке символы - это черные точки, расположенные на нотной линейке, которые указывают музыканту, какие ноты и когда играть. Интересно, что если мы проследим корни западной музыкальной нотации до итальянского монаха-бенедиктинца Гвидо д'Ареццо, то обнаружим, что система точек и линий, которую используют современные оркестры, является лишь одной из нескольких систем нотации, над которыми он работал. Некоторые из них были гораздо ближе к тому, что мы сейчас считаем кодом.

en: Sonic Pi Performances
ru: Концерты Sonic Pi

en: Sonic Pi has been used to perform in a wide range of venues such as school halls, nightclubs, outdoor stages at musical festivals, college chapels and prestigious music venues. For example the amazing Convo project which brought 1000 children together in the Royal Albert Hall to perform an ambitious new composition by composer Charlotte Harding. The piece was written for traditional instruments, choirs, percussion and Sonic Pi code. The pop-artist Jylda also performed with Sonic Pi in the Sage Gateshead for the Thinking Digital Conference, where she created a unique live-coded improvised remix of her song Reeled.
ru: Sonic Pi использовался для выступлений в самых разных местах, таких как школьные залы, ночные клубы, открытые сцены на музыкальных фестивалях, часовни колледжей и престижные музыкальные заведения. Например, удивительный проект Convo, в рамках которого 1000 детей собрались в Королевском Альберт-холле, чтобы исполнить амбициозную новую композицию композитора Шарлотты Хардинг. Произведение было написано для традиционных инструментов, хора, перкуссии и кода Sonic Pi. Поп-артистка Jylda также выступила с Sonic Pi в Sage Gateshead на конференции Thinking Digital Conference, где она создала уникальный импровизированный live-coded ремикс на свою песню Reeled.

en: ![Sonic Pi in the Royal Albert Hall](../../../etc/doc/images/tutorial/articles/A.20-creative-coding-in-the-classroom/convo-small.png) Sonic Pi used as one of the instruments as part of Convo at the Royal Albert Hall. Photo credit: Pete Jones.
ru: ![Sonic Pi в Королевском Альберт-холле](../../../etc/doc/images/tutorial/articles/A.20-creative-coding-in-the-classroom/convo-small.png) Sonic Pi используется как один из инструментов в рамках Convo в Королевском Альберт-холле. Фотография предоставлена Питом Джонсом.

en: Live coding in the classroom
ru: Live coding в классе

en: Sonic Pi is a code-based music creation and performance tool that builds on all of these ideas. Unlike the majority of computing education software, it is both simple enough to use for education and also powerful enough for professionals. It has been used to perform in international music festivals, used to compose in a range of styles from classical, EDM and heavy metal, and was even reviewed in the Rolling Stone magazine. It has a diverse community of over 1.5 million live coders with a variety of backgrounds all learning and sharing their ideas and thoughts through the medium of code. It is free to download for Mac, PC and Raspberry Pi and includes a friendly tutorial that assumes you know nothing about either code or music.
ru: Sonic Pi – это инструмент для создания и исполнения музыки на основе кода, который опирается на все эти идеи. В отличие от большинства компьютерных образовательных программ, он одновременно достаточно прост для использования в учебных заведениях и достаточно мощный для профессионалов. Он использовалась для выступлений на международных музыкальных фестивалях, для создания композиций в различных стилях – от классики до EDM и хэви-метала, и даже получил рецензию в журнале Rolling Stone. Sonic Pi поддерживает разнообразное сообщество, насчитывающее более 1,5 миллионов лайвкодеров с различным опытом, которые учатся и делятся своими идеями и мыслями с помощью кода. Его можно бесплатно скачать для Mac, PC и Raspberry Pi, и он включает в себя удобный учебник, который подразумевает, что вы ничего не знаете ни о коде, ни о музыке.

en: Sonic Pi was initially conceived as a response to the UK's newly released Computing curriculum in 2014. The goal was to find a motivating and fun way to teach the fundamentals of programming. It turns out that there is a lot in common and it's huge fun to explain sequencing as melody, iteration as rhythm, conditionals as musical variety. I developed the initial designs and first iterations of the platform with Carrie Anne Philbin, who brought a teacher’s perspective to the project. Since then, Sonic Pi has undergone iterative improvements thanks to the feedback gained from observing learners and collaborating directly with educators in the classroom. A core design philosophy was to never add a feature that couldn't be easily taught to a 10 year old child. This meant that most ideas had to be heavily refined and reworked until they were simple enough. Making things simple whilst keeping them powerful continues to be the hardest part of the project.
ru: Sonic Pi был изначально задуман как ответ на новую учебную программу по информатике, выпущенную в Великобритании в 2014 году. Цель состояла в том, чтобы найти мотивирующий и веселый способ обучения основам программирования. Оказалось, что между ними много общего, и это очень весело – объяснять последовательность как мелодию, итерацию как ритм, условия как музыкальное разнообразие. Я разработал первоначальный дизайн и первые итерации платформы вместе с Кэрри Энн Филбин, которая привнесла в проект взгляд преподавателя. С тех пор Sonic Pi подвергалась итерационным улучшениям благодаря обратной связи, полученной от наблюдения за учащимися и непосредственного сотрудничества с педагогами в классе. Основная философия дизайна заключалась в том, чтобы никогда не добавлять функции, которым нельзя было бы легко обучить 10-летнего ребенка. Это означало, что большинство идей пришлось сильно дорабатывать и переделывать, пока они не стали достаточно простыми. Сделать вещи простыми, сохранив при этом их мощь, по-прежнему остается самой трудной частью проекта.

en: In order to provide the magical motivation, Sonic Pi's design was never limited to a pure focus on education. Ideally there would be famous musicians and performers using Sonic Pi as a standard instrument alongside guitars, drums, vocals, synths, violins, etc. These performers would then act as motivational role models demonstrating the creative potential of code. For this to be possible sufficient focus and effort therefore had to be placed on making it a powerful instrument whilst still keeping it simple enough for 10 year olds to pick up. In addition to educators, I also worked directly with a variety of different artists in classrooms, art galleries, studios and venues in the early stages of Sonic Pi’s development. This provided essential feedback which enabled Sonic Pi to grow and ultimately flourish as a tool for creative expression.
ru: Чтобы обеспечить необходимую мотивацию, дизайн Sonic Pi никогда не ограничивался исключительно сферой образования. В идеале должны быть известные музыканты и исполнители, использующие Sonic Pi в качестве стандартного инструмента наряду с гитарами, барабанами, вокалом, синтезаторами, скрипками и т. д. Эти исполнители выступали бы в качестве мотивирующих ролевых моделей, демонстрирующих творческий потенциал кода. Для того чтобы это стало возможным, необходимо было уделить достаточное внимание и приложить усилия, чтобы сделать Sonic Pi мощным инструментом, но при этом достаточно простым для восприятия 10-летними детьми. Помимо педагогов, на ранних стадиях разработки я также работал непосредственно с различными художниками в классах, художественных галереях, студиях и местах. Это обеспечило важную обратную связь, которая позволила Sonic Pi развиваться и в конечном итоге расцвести как инструменту для творческого самовыражения.

en: There were a number of exciting and unexpected side effects of this dual focus on education and professional musicians. Many of the features are beneficial to both groups. For example, a lot of effort has been put into making error messages more friendly and useful (rather than being a huge complicated mess of jargon). This turns out to be very useful when you write a bug while performing in front of thousands of people. Additionally, functionality such as playing studio quality audio samples, adding audio effects, providing access to live audio from the microphone all turn out to make the learning experience more fun, rewarding and ultimately meaningful.
ru: Этот двойной фокус на образовании и профессиональных музыкантах имел ряд интересных и неожиданных побочных эффектов. Многие функции полезны для обеих сторон. Например, много усилий было приложено к тому, чтобы сделать сообщения об ошибках более дружелюбными и полезными (а не огромными сложными сообщениями на жаргоне). Это оказывается очень полезным, когда вы пишете ошибку во время выступления перед тысячами людей. Кроме того, такие функциональные возможности, как воспроизведение аудиообразцов студийного качества, добавление аудиоэффектов, доступ к живому звуку с микрофона - все это делает процесс обучения более увлекательным, полезным и, в конечном счете, значимым.

en: The Sonic Pi community continues to grow and share amazing code compositions, lesson plans, musical algorithms, and much more. Much of this happens on our friendly forum in_thread (in-thread.sonic-pi.net) which is home to a very diverse group of people that includes educators, musicians, programmers, artists and makers. It is a real joy to see people learn to use code to express themselves in new ways and for that in turn to inspire others to do the same.
ru: Сообщество Sonic Pi продолжает расти и делиться удивительными программными композициями, планами уроков, музыкальными алгоритмами и многим другим. Многое из этого происходит на нашем форуме in_thread (in-thread.sonic-pi.net), который является домом для очень разнообразной группы людей, включающей педагогов, музыкантов, программистов, художников и создателей. Это настоящая радость – видеть, как люди учатся использовать код, чтобы выразить себя по-новому, и как это, в свою очередь, вдохновляет других делать то же самое.

en: Some fun capabilities
ru: Некоторые интересные возможности

en: From a Computer Science perspective, Sonic Pi provides you with the building blocks to teach you the basics as found in the UK's curriculum such as sequencing, iteration, conditionals, functions, data structures, algorithms, etc. However, it also builds on a number of important and relevant concepts which have become adopted in mainstream industry such as concurrency, events, pattern matching, distributed computing and determinism - all whilst keeping things simple enough to explain to a 10 year old child.
ru: С точки зрения информатики, Sonic Pi предоставляет вам строительные блоки для обучения основам, предусмотренным учебной программой Великобритании, таким как последовательность, итерации, условия, функции, структуры данных, алгоритмы и др. Однако он также опирается на ряд важных и актуальных концепций, которые стали общепринятыми в промышленности, таких как параллелизм, события, сопоставление шаблонов, распределенные вычисления и детерминизм – и при этом все достаточно просто, чтобы объяснить 10-летнему ребенку.

en: A melody can be constructed with one more command, sleep:
ru: Мелодия может быть построена с помощью ещё одной команды – sleep:

en: In this example, we play the note 70 (roughly the 70th note on a piano), wait for 1 second, play note 72, wait for half a second and then play note 75. What's interesting here is that with just two commands we have access to pretty much all of Western notation (which notes to play and when) and learners can code any melody they've ever heard. This leads to huge variety in expressive outcomes whilst focussing on the same computing concept: sequencing in this case.
ru: В этом примере мы играем ноту 70 (примерно 70-я нота на фортепиано), ждем 1 секунду, играем ноту 72, ждем полсекунды и затем играем ноту 75. Интересно то, что с помощью всего двух команд мы имеем доступ практически ко всей западной нотации (какие ноты играть и когда), и учащиеся могут запрограммировать любую мелодию, которую они когда-либо слышали. Это приводит к огромному разнообразию выразительных результатов, в то же время концентрируясь на одной и той же вычислительной концепции: последовательности в данном случае.

en: Taking ideas from the professional music world, we can also play back any recorded sound. Sonic Pi can play any audio file on your computer but also has a number of sounds built-in to make things easy to get started:
ru: Взяв идеи из мира профессиональной музыки, мы также можем воспроизводить любой записанный звук. Sonic Pi может воспроизводить любые аудиофайлы на вашем компьютере, а также имеет несколько встроенных звуков для облегчения начала работы:

en: This code will play back the drum break which was a pillarstone to early hip-hop, Drum and Bass and Jungle. For example, a number of early hip-hop artists played this drum break back at half speed to give it a more laid-back feeling:
ru: Этот код воспроизведет барабанную дробь, которая была основой раннего хип-хопа, драм-н-баса и джангла. Например, многие ранние исполнители хип-хопа воспроизводили эту барабанную дробь на половинной скорости, чтобы придать ей более спокойный характер:

en: In the 90s a number of music scenes burst out of new technology which enabled artists to take drum breaks like this apart and reassemble in a different order. For example:
ru: В 90-е годы ряд музыкальных площадок взорвался новой технологией, которая позволила артистам разрезать подобные барабанные брейки на части и собирать их в другом порядке. Например:

en: B Essential Knowledge
ru: B Необходимые знания

en: Essential Knowledge
ru: Необходимые знания

en: This section will cover some very useful - in fact *essential* - knowledge for getting the most out of your Sonic Pi experience.
ru: Этот раздел будет охватывать некоторые очень полезные - на самом деле даже *необходимые* знания для получения максимальной отдачи от вашего опыта работы с Sonic Pi.

en: We'll cover how to take advantage of the many keyboard shortcuts available to you, how to share your work and some tips on performing with Sonic Pi.
ru: Мы поговорим о том, как получить пользу от множества доступных вам клавиатурных сочетаний, как делиться своими работами, а ещё, я дам вам несколько советов о выступлениях с Sonic Pi.

en: B.1 Using Shortcuts
ru: B.1 Использование клавиатурных сочетаний

en: Using Shortcuts
ru: Использование клавиатурных сочетаний

en: Sonic Pi is as much an instrument as a coding environment. Shortcuts can therefore make playing Sonic Pi much more *efficient and natural* - especially when you're playing live in front of an audience.
ru: Sonic Pi такой же инструмент, как и среда разработки. Следовательно, клавиатурные сочетания могут сделать работу c Sonic Pi намного более *эффективной и естественной* - особенно когда вы играете вживую перед аудиторией.

en: Much of Sonic Pi can be controlled through the keyboard. As you gain more familiarity working and performing with Sonic Pi, you'll likely start using the shortcuts more and more. *I personally touch-type* (I recommend you consider learning too) and find myself frustrated whenever I need to reach for the mouse as it slows me down. I therefore use all of these shortcuts on a very regular basis!
ru: Многое в Sonic Pi может контролироваться с помощью клавиатуры. Когда вы лучше познакомитесь с работой и выступлениями с Sonic Pi, вы, вероятно, начнёте использовать клавиатурные сочетания всё чаще и чаще. *Лично я печатаю вслепую* (рекомендую обдумать возможность обучения этому навыку) и огорчаюсь всякий раз, когда мне нужно тянуться за мышкой, так как это меня замедляет. Поэтому я использую все эти клавиатурные сочетания на постоянной основе!

en: Therefore, if you learn the shortcuts, you'll learn to use your keyboard effectively and you'll be live coding like a pro in no time.
ru: Следовательно, если вы изучите эти клавиатурные сочетания, вы узнаете, как эффективно использовать клавиатуру, и вы начнёте кодировать вживую как профи в кратчайшие сроки.

en: However, *don't try and learn them all at once*, just try and remember the ones you use most and then keep adding more to your practice.
ru: Однако, *не пытайтесь выучить все сочетания за один раз*, просто пробуйте и запоминайте те сочетания, которые вы используете наиболее часто, а затем продолжайте добавлять новые в свою практику.

en: Consistency across Platforms
ru: Согласованность всех платформ

en: Imagine you're learning the clarinet. You'd expect all clarinets of all makes to have similar controls and fingerings. If they didn't, you'd have a tough time switching between different clarinets and you'd be stuck to using just one make.
ru: Представьте, что вы учитесь играть на кларнете. Вы ожидаете, что все кларнеты производятся со схожими элементами управления и аппликатурой. Если нет, вам будет трудно переключаться между различными кларнетами и вы будете вынуждены использовать всего один.

en: Unfortunately the three major operating systems (Linux, Mac OS X and Windows) come with their own standard defaults for actions such as cut and paste etc. Sonic Pi will try and honour these standards. However *priority is placed on consistency across platforms* within Sonic Pi rather than attempting to conform to a given platform's standards. This means that when you learn the shortcuts whilst playing with Sonic Pi on your Raspberry Pi, you can move to the Mac or PC and feel right at home.
ru: К сожалению три основные операционные системы (Linux, Mac ОС X и Windows) поставляются с собственными стандартами по умолчанию для таких действий, как вырезать, вставить и т. д. Sonic Pi будет пытаться соблюдать эти стандарты. Однако, вместо попыток соответствовать стандартам текущей платформы, Sonic Pi *приоритетное внимание уделяет согласованности между платформами*. Это значит, что если вы изучите сочетания клавиш во время игры с Sonic Pi на Raspberry Pi, то сможете перейти на Mac или PC и чувствовать себя там как дома.

en: Control and Meta
ru: Control и Meta

en: Part of the notion of consistency is the naming of shortcuts. In Sonic Pi we use the names *Control* and *Meta* to refer to the two main combination keys. On all platforms *Control* is the same. However, on Linux and Windows, *Meta* is actually the *Alt* key while on Mac *Meta* is the *Command* key. For consistency we'll use the term *Meta* - just remember to map that to the appropriate key on your operating system.
ru: Частью понятия согласованности является именование клавиатурных сочетаний. В Sonic Pi мы используем имена *Control* и *Meta*, ссылаясь на две главные комбинации клавиш. На всех платформах *Control* один и тот же (Ctrl). Однако, на Linux и Windows, *Meta* - это клавиша *Alt*, в то время как на Mac, *Meta* - это клавиша *Command*. Для единообразия мы будем использовать термин *Meta* - только не забудьте сопоставить его с соответствующей клавишей вашей операционной системы.

en: Abbreviations
ru: Аббревиатуры

en: To help keep things simple and readable, we'll use the abbreviations *C-* for *Control* plus another key and *M-* for *Meta* plus another key. For example, if a shortcut requires you to hold down both *Meta* and *r* we'll write that as `M-r`. The *-* just means "at the same time as."
ru: Чтобы сохранить вещи простыми и читабельными, мы будем использовать аббревиатуры - *С-* для *Control* плюс ещё одна клавиша, и *М-* - для *Meta* плюс ещё одна клавиша. Например, если клавиатурное сочетание требует от нас нажать одновременно *Meta* и *r*, мы напишем это как `M-r`. Символ *-* означает "одновременно с".

en: The following are some of the shortcuts I find most useful.
ru: Ниже приведены клавиатурные сочетания, которые я считаю самыми полезными.

en: Stopping and starting
ru: Выполнение и остановка

en: Instead of always reaching for the mouse to run your code, you can simply press `M-r`. Similarly, to stop running code you can press `M-s`.
ru: Вместо того, чтобы постоянно тянуться за мышью, чтобы выполнить свой код, вы можете просто нажать `M-r`. Аналогично, чтобы остановить выполнение кода, вы можете нажать `M-s`.

en: Navigation
ru: Навигация

en: I'm really lost without the navigation shortcuts. I therefore highly recommend you spend the time to learn them. These shortcuts also work extremely well when you've learned to touch type as they use the standard letters rather than requiring you to move your hand to the mouse or the arrow keys on your keyboard.
ru: Я действительно потерялся бы без навигационных клавиш. Поэтому я настоятельно рекомендую вам потратить время, чтобы выучить их. Эти клавиатурные комбинации работают чрезвычайно хорошо в том случае, если вы освоили слепую печать, так как они используют обычные буквы и не нужно перемещать руку на мышь или клавиши со стрелками на вашей клавиатуре.

en: You can move to the beginning of the line with `C-a`, the end of the line with `C-e`, up a line with `C-p`, down a line with `C-n`, forward a character with `C-f`, and back a character with `C-b`. You can even delete all the characters from the cursor to the end of the line with `C-k`.
ru: Вы можете двигаться к началу строки, используя `C-a`, к концу строки, используя `C-e`, на строку вверх - `C-p`, на строку вниз - `C-n`, на символ вперёд - `C-f`, и на символ назад - `C-b`.

en: Tidy Code
ru: Аккуратный код

en: To auto-align your code simply press `M-m`.
ru: Чтобы применить автовыравнивание к вашему коду, просто нажмите `M-m`.

en: Help System
ru: Справочная система

en: To toggle the help system you can press `M-i`. However, a much more useful shortcut to know is `C-i` which will look up the word underneath the cursor and display the docs if it finds anything. Instant help!
ru: Для перехода к справочной системе вы можете нажать `M-i`. Однако, гораздо полезнее знать сочетание `C-i`, которое будет искать слово под курсором в документации и отображать её, если что-нибудь найдет. Мгновенная помощь!

en: B.2 Shortcut Cheatsheet
ru: B.2 Шпаргалка по клавиатурным сочетаниям

en: Shortcut Cheatsheet
ru: Шпаргалка по клавиатурным сочетаниям

en: Conventions
ru: Соглашения

en: In this list, we use the following conventions (where *Meta* is one of *Alt* on Windows/Linux or *Cmd* on Mac):
ru: В этом списке мы используем следующие соглашения (где *Meta* называется *Alt* в Windows/Linux или *Cmd* в Mac):

en: `C-a` means hold the *Control* key then press the *a* key whilst holding them both at the same time, then releasing.
ru: `C-a` значит удерживая клавишу *Control*, нажмите клавишу *a*. И после того, как обе клавиши будут нажаты одновременно, отпустите их.

en: `M-r` means hold the *Meta* key and then press the *r* key whilst holding them both at the same time, then releasing.
ru: `M-r` значит удерживая клавишу *Meta*, нажмите клавишу *r*. И после того, как обе клавиши будут нажаты одновременно, отпустите их.

en: `S-M-z` means hold the *Shift* key, then the *Meta* key, then finally the *z* key all at the same time, then releasing.
ru: `S-M-z` значит удерживая клавиши *Shift* и *Meta*, нажмите клавишу *z*. И после того, как все три клавиши будут нажаты одновременно, отпустите их.

en: `C-M-f` means hold the *Control* key, then press *Meta* key, finally the *f* key all at the same time, then releasing.
ru: `C-M-f` значит удерживая клавиши *Control* и *Meta*, нажмите клавишу *f*. И после того, как все три клавиши будут нажаты одновременно, отпустите их.

en: Main Application Manipulation
ru: Основные манипуляции с приложением

en: `M-r` - Run code
ru: `M-r` - Выполнить код

en: `M-s` - Stop code
ru: `M-s` - Остановить выполнение кода

en: `M-i` - Toggle Help System
ru: `M-i` - Показать/скрыть справочную систему

en: `M-p` - Toggle Preferences
ru: `M-p` - Показать/скрыть настройки

en: `M-{` - Switch buffer to the left
ru: `M-{` - Переключить буфер влево

en: `M-}` - Switch buffer to the right
ru: `M-}` - Переключить буфер вправо

en: `S-M-0` - Switch to buffer 0
ru: `S-M-0` – Переключится на буфер 0

en: `S-M-1` - Switch to buffer 1
ru: `S-M-1` – Переключится на буфер 1

en: `S-M-9` - Switch to buffer 9
ru: `S-M-9` – Переключится на буфер 9

en: `M-+` - Increase text size of current buffer
ru: `M-+` - Увеличить размер текста в текущем буфере

en: `M--` - Decrease text size of current buffer
ru: `M--` - Уменьшить размер текста в текущем буфере

en: Selection/Copy/Paste
ru: Выделение/Копирование/Вставка

en: `M-a` - Select all
ru: `M-a` - Выбрать всё

en: `M-c` - Copy selection to paste buffer
ru: `M-c` - Копировать выделение в буфер обмена

en: `M-]` - Copy selection to paste buffer
ru: `M-]` - Копировать выделение в буфер обмена

en: `M-x` - Cut selection to paste buffer
ru: `M-x` - Вырезать выделение в буфер обмена

en: `C-]` - Cut selection to paste buffer
ru: `C-]` - Вырезать выделение в буфер обмена

en: `C-k` - Cut to the end of the line
ru: `C-k` - Вырезать от курсора до конца строки

en: `M-v` - Paste from paste buffer to editor
ru: `M-v` - Вставить из буфера обмена в редактор

en: `C-y` - Paste from paste buffer to editor
ru: `C-y` - Вставить из буфера обмена в редактор

en: `C-SPACE` - Set mark. Navigation will now manipulate highlighted region. Use `C-g` to escape.
ru: `C-SPACE` - Установить метку. Теперь навигация управляет областью выделения. Используйте `C-g` для отмены.

en: Text Manipulation
ru: Работа с текстом

en: `M-m` - Align all text
ru: `M-m` - Выровнять весь текст

en: `Tab` - Align current line or selection (or select autocompletion)
ru: `Tab` - Выровнять текущую линию/выделение

en: `C-l` - Centre editor
ru: `C-l` - Отобразить буфер с текущей строкой по центру экрана

en: `M-/` - Comment/Uncomment current line or selection
ru: `M-/` - Комментировать/раскомментировать текущую строку

en: `C-t` - Transpose/swap characters
ru: `C-t` - Перемещение/замена символов

en: `M-u` - Convert next word (or selection) to upper case.
ru: `M-u` - Преобразовать следующее слово (или выделение) в верхний регистр.

en: `M-l` - Convert next word (or selection) to lower case.
ru: `M-l` - Преобразовать следующее слово (или выделение) в нижний регистр

en: `C-a` - Move to beginning of line
ru: `C-a` - Перейти в начало строки

en: `C-e` - Move to end of line
ru: `C-e` - Перейти в конец строки

en: `C-p` - Move to previous line
ru: `C-p` - Перейти на предыдущую строку

en: `C-n` - Move to next line
ru: `C-n` - Перейти на следующую строку

en: `C-f` - Move forward one character
ru: `C-f` - Перейти вперёд на один символ

en: `C-b` - Move backward one character
ru: `C-b` - Перейти назад на один символ

en: `M-f` - Move forward one word
ru: `M-f` - Перейти вперёд на одно слово

en: `M-b` - Move backward one word
ru: `M-b` - Перейти назад на одно слово

en: `C-M-n` - Move line or selection down
ru: `C-M-n` - Переместить строку или выделение вниз

en: `C-M-p` - Move line or selection up
ru: `C-M-p` - Переместить строку или выделение вверх

en: `S-M-u` - Move up 10 lines
ru: `S-M-u` - Подняться на 10 строк

en: `S-M-d` - Move down 10 lines
ru: `S-M-d` - Опуститься на 10 строк

en: `M-<` - Move to beginning of buffer
ru: `M-<` - Перейти в начало буфера

en: `M->` - Move to end of buffer
ru: `M->` - Перейти в конец буфера

en: Deletion
ru: Удаление

en: `C-h` - Delete previous character
ru: `C-h` - Удалить предыдущий символ

en: `C-d` - Delete next character
ru: `C-d` - Удалить следующий символ

en: Advanced Editor Features
ru: Расширенные возможности редактора

en: `C-i` - Show docs for word under cursor
ru: `C-i` - Показать документацию по слову под курсором

en: `M-z` - Undo
ru: `M-z` - Отмена

en: `S-M-z` - Redo
ru: `S-M-z` - Повтор

en: `S-M-f` - Toggle fullscreen mode
ru: `S-M-f` - Переключение полноэкранного режима

en: `S-M-b` - Toggle visibility of buttons
ru: `S-M-b` - Показать/скрыть кнопки

en: `S-M-l` - Toggle visibility of log
ru: `S-M-l` - Показать/скрыть журнал

en: `S-M-m` - Toggle between light/dark modes
ru: `S-M-m` - Переключение между светлым и тёмным режимом

en: `S-M-s` - Save contents of buffer to a file
ru: `S-M-s` - Сохранить содержание буфера в файл

en: `S-M-o` - Load contents of buffer from a file
ru: `S-M-o` - Загрузить содержания из файла в буфер

en: B.3 Sharing
ru: B.3 Обмен

en: Sharing
ru: Обмен

en: Sonic Pi is all about sharing and learning with each other.
ru: Sonic Pi создан для обучения и обмена друг с другом.

en: Once you've learned how to code music, sharing your compositions is as simple as sending an email containing your code. Please do *share* your code with others so they can *learn* from your work and even use parts in a new *mash-up*.
ru: Как только вы научитесь кодировать музыку, делитесь своими композициями. Это так же просто, как отправка электронной почты, содержащей ваш код. Пожалуйста, *поделитесь* своим кодом с окружающими, чтобы они могли *учиться* с помощью вашей работы или использовать её части в своём *миксе*.

en: If you're unsure of the best way to share your work with others I recommend putting your code on [GitHub](https://github.com) and your music on [SoundCloud](https://soundcloud.com). That way you'll be able to easily reach a large audience.
ru: Если вы не уверены, какой способ поделиться своей работой с остальными лучший, я рекомендую размещать свой код на [GitHub](https://github.com) и музыку на [SoundCloud](https://soundcloud.com). Таким образом вы сможете охватить большую аудиторию.

en: Code -> GitHub
ru: Код -> GitHub

en: [GitHub](https://github.com) is a site for sharing and working with code. It's used by professional developers as well as artists for sharing and collaborating with code. The simplest way to share a new piece of code (or even an unfinished piece) is to create a [Gist](https://gist.github.com). A [Gist](https://gist.github.com) is a simple way of uploading your code in a simple way that others can see, copy and share.
ru: [GitHub](https://github.com) - это сайт для обмена и работы с кодом. Он используется профессиональными разработчиками, а также художниками для обмена и совместной работы с кодом. Самый простой способ поделиться новым куском кода (или даже незавершённым куском) - создать [Gist](https://gist.github.com). [Gist](https://gist.github.com) - это простой способ загружать свой код в удобной форме, чтобы другие могли увидеть, скопировать и поделиться им.

en: Audio -> SoundCloud
ru: Аудио -> SoundCloud

en: Another important way of sharing your work is to record the audio and upload it to [SoundCloud](https://soundcloud.com). Once you've uploaded your piece, other users can comment and discuss your work. I also recommend placing a link to a [Gist](https://gist.github.com) of your code in the track description.
ru: Еще один отличный способ поделиться вашей работой - сделать аудио запись и загрузить её на [SoundCloud](https://soundcloud.com). После того как вы загрузили свою запись, другие пользователи могут комментировать и обсуждать её. Я также рекомендую поместить ссылку на ваш код в [Gist](https://gist.github.com) в описание трека.

en: To record your work, hit the `Rec` button in the toolbar, and recording starts immediately. Hit `Run` to start your code if it isn't already in progress. When you're done recording, press the flashing `Rec` button again, and you'll be prompted to enter a filename. The recording will be saved as a WAV file, which can be edited and converted to MP3 by any number of free programs (try Audacity for instance).
ru: Для того, чтобы записать свою работу, нажмите кнопку `Запись` в панели инструментов, и запись начнётся немедленно. Нажмите кнопку `Выполнить`, чтобы запустить свой код, если он ещё не запущен. Когда вы закончите запись, нажмите мигающую кнопку `Запись` снова, и вам будет предложено ввести имя файла. Запись будет сохранена в формате WAV-файл, который можно редактировать и конвертировать любым аудиоредактором с открытым исходным кодом (попробуйте, например, Audacity).

en: Hope
ru: Надежда

en: I encourage you to share your work and really hope that we'll all teach each other new tricks and moves with Sonic Pi. I'm really excited by what you'll have to show me.
ru: Я призываю вас делиться своей работой и на самом деле надеюсь, что мы все будем учить друг друга новым трюкам и развиваться вместе с Sonic Pi. Я действительно очень воодушевлён тем, что у вас будет, что показать мне.

en: B.4 Performing
ru: B.4 Выступление

en: Performing
ru: Выступление

en: One of the most exciting aspects of Sonic Pi is that it enables you to use code as a *musical instrument*. This means that writing code live can now be seen as a new way of performing music.
ru: Один из самых интересных аспектов Sonic Pi заключается в том, что он позволяет использовать код как *музыкальный инструмент*. Это значит, что написание кода вживую может теперь рассматриваться как новый вид музыкального исполнения.

en: We call this *Live Coding*.
ru: Мы называем это *Лайвкодинг*.

en: Show Your Screen
ru: Покажи свой экран

en: When you live code I recommend you *show your screen* to your audience. Otherwise it's like playing a guitar but hiding your fingers and the strings. When I practice at home I use a Raspberry Pi and a little mini projector on my living room wall. You could use your TV or one of your school/work projectors to give a show. Try it, it's a lot of fun.
ru: Я рекомендую вам *показывать сой экран* аудитории во время лайвкодинга. Это как играть на гитаре, но скрывая свои пальцы и струны. Когда я практикуюсь дома, я использую Raspberry Pi и небольшой мини-проектор, направленный на стену моей гостиной. Вы можете использовать свой телевизор или один из своих школьных/рабочих проекторов для своего шоу. Попробуйте, это очень весело.

en: Form a Band
ru: Собери группу

en: Don't just play on your own - form a live coding band! It's a lot of fun jamming with others. One person could do beats, another ambient background, etc. Use the `live_audio` functionality to combine code with traditional instruments such as a guitar or a microphone.
ru: Играйте не только в одиночку – создайте live-code группу! Очень весело играть вместе с другими. Один человек может делать ритмы, другой – эмбиентн фон и т.д. Используйте функцию `live_audio`, чтобы объединить код с традиционными инструментами, такими как гитара или микрофон.

en: See what interesting combinations of sounds you can create with code.
ru: Посмотрите, какие интересные комбинации звуков можно создать с помощью кода.

en: Live coding isn't completely new - a small number of people have been doing it for a few years now, typically using bespoke systems they've built for themselves. A great place to go and find out more about other live coders and systems is [TOPLAP](http://toplap.org).
ru: Кодирование вживую не такая уж и новинка - небольшое количество людей делало это в течение последних нескольких лет, обычно используя собственные системы, которые они сконструировали для себя сами. Отличное место для того, чтобы узнать больше о других людях, занимающихся лайвкодингом и их системах, это [TOPLAP](http://toplap.org).

en: Algorave
ru: Алгорэйв

en: Another great resource for exploring the live coding world is [Algorave](http://algorave.com). Here you can find all about a specific strand of live coding for making music in nightclubs.
ru: Ещё один отличный ресурс для изучения лайвкодинга, это [Algorave](http://algorave.com). Здесь вы можете найти всё о конкретном направлении лайвкодинга - создании музыки в ночных клубах.
