Sonic Pi - en to pl translation catalogue (1391 entries)

en: 1 Welcome to Sonic Pi
pl: 1 Witaj w Sonic Pi

en: Welcome friend :-)
pl: Witaj, Kolego :-)

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.
pl: Witaj w Sonic Pi. Mam nadzieję, że jesteś podekscytowany tym, że za chwilę zaczniesz tworzyć zwariowane dźwięki tak samo, jak ja jestem podekscytowany tym, że mogę Ci to pokazać. To będzie naprawdę *świetna* zabawa, podczas której nauczysz się wszystkiego o muzyce, syntezie, programowaniu, kompozycji, interpretacji oraz wielu innych rzeczach.

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.
pl: Ale zaraz zaraz, gdzie moje maniery! Pozwól, że się przedstawię - jestem [Sam Aaron](http://twitter.com/samaaron) - facet, który stworzył Sonic Pi. Możesz znaleźć mnie na Twitterze pod nickiem [@samaaron](http://twitter.com/samaaron) i będzie mi bardzo miło, jeśli będę mógł powiedzieć Ci cześć. Być może zainteresuje Cię również moja strona [Live Coding Performances](https://youtube.com/samaaron), gdzie koduję przed publicznością na żywo, używając 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!
pl: Jeśli masz jakiekolwiek spostrzeżenia lub pomysły, jak można ulepszyć Sonic Pi - będę wdzięczny za ich przekazanie - każda informacja zwrotna jest bardzo cenna. Nigdy nie wiadomo, być może Twój pomysł stanie się kolejną niesamowitą funkcją, która wzbogaci 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.
pl: Samouczek został podzielony na sekcje, które są pogrupowane według kategorii. Pomimo że napisałem go w taki sposób, aby umożliwiał łatwą naukę od początku do końca, to nic nie szkodzi na przeszkodzie, abyś po prostu zaczął czytać dowolną z sekcji - taką, która wydaje Ci się odpowiednia dla Ciebie. Jeśli uważasz, że czegoś tutaj brakuje, daj mi o tym znać, rozważę dołożenie tego do kolejnej wersji.

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 :-)
pl: Jeszcze jedna sprawa na koniec. Oglądanie innych osób kodujących na żywo jest naprawdę bardzo dobrym sposobem nauki. Regularnie nadaję na żywo na moim kanale [http://youtube.com/samaaron](http://youtube.com/samaaron), możesz więc wpaść, powiedzieć mi cześć i zadać dowolne pytanie :-)

en: OK, let's get started...
pl: Dobra, zaczynajmy..

en: 1.1 Live Coding
pl: 1.1 Kodowanie na żywo

en: Live Coding
pl: Kodowanie na żywo

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.
pl: Jednym z najbardziej ekscytujących aspektów Sonic Pi jest to, że pozwala Ci na pisanie i *modyfikację kodu na żywo*, aby móc tworzyć muzykę w czasie rzeczywistym, tak samo jak podczas gry na gitarze na żywo. Oznacza to, że dzięki odpowiednim ćwiczeniom i praktyce możesz wykorzystać Sonic Pi do koncertów przed publicznością na żywo.

en: Free your mind
pl: Uwolnij swój umysł

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...
pl: Zanim przejdziemy do dalszej części samouczka i zaczniemy zgłębiać szczegóły tego, w jaki sposób działa Sonic Pi, chciałbym, abyś mógł przez chwilę poczuć, czym jest Kodowanie na żywo (Live Coding). Nie przejmuj się, jeśli nic nie zrozumiesz z tego, co zobaczysz i zrobisz za chwilę. Po prostu usiądź wygodnie, zapnij pasy i poczuj radość...

en: A live loop
pl: Żywa Pętla

en: Let's get started, copy the following code into an empty buffer:
pl: Zacznijmy od skopiowania następującego kawałka kodu do pustego buforu:

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:
pl: A teraz naciśnij przycisk `Run` - usłyszysz fajne i rytmiczne uderzenia bębna. W każdym momencie możesz zatrzymać dźwięk, naciskając przycisk `Stop`. Na razie wstrzymaj się i jeszcze tego nie rób... Zamiast tego wykonaj następujące kroki:

en: Make sure the bass drum sound is still running
pl: Upewnij się, że wciąż słyszysz dźwięk uderzającego bębna

en: Change the `sleep` value from `0.5` to something higher like `1`.
pl: Zmień wartość `0.5` znajdującą się przy poleceniu `sleep` na większą, np. 1.

en: Press the `Run` button again
pl: A teraz ponownie naciśnij przycisk `Run`

en: Notice how the drum speed has changed.
pl: Zauważ, jak zmieniła się szybkość uderzeń bębna.

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...
pl: A teraz... *zapamiętaj ten moment*, gdyż jest to pierwszy (i prawdopodobnie nie ostatni) raz, kiedy kodujesz na żywo w 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:
pl: No dobra, to było całkiem łatwe. Wplećmy coś jeszcze do naszego miksu. Powyżej linii `sample :bd_haus` dodaj linijkę `sample :ambi_choir, rate: 0.3`. Twój kod powinien teraz wyglądać następująco:

en: live_loop :flibble do
      sample :ambi_choir, rate: 0.3
      sample :bd_haus, rate: 1
      sleep 1
    end
pl: live_loop :flibble do
     sample :ambi_choir, rate: 0.3
     sample :bd_haus, rate: 1
     sleep 1
    end

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).
pl: A teraz czas na zabawę. Zacznij zmieniać liczby - co się stanie, gdy użyjesz dużych, małych lub ujemnych liczb? Zobacz przebieg wydarzeń, gdy zmienisz odrobinę wartość parametru `rate:` dla sampla `:ambi_choir` (np. na 0.29). Co się stanie, jeśli wybierzesz naprawdę małą wartość dla parametru `sleep`? Zobacz, czy uda Ci się uruchomić powyższą pętlę w tak szybkim tempie, że Twój komputer zatrzyma się z powodu błędu, gdyż nie będzie w stanie nadążyć (jeśli to się zdarzy, po prostu wybierz większą wartość dla parametru `sleep` i ponownie naciśnij przycisk `Run`).

en: Try commenting one of the `sample` lines out by adding a `#` to the beginning:
pl: Spróbuj zrobić komentarz w jednej z linii zawierających polecenie `sample`, dodając na początku linii znak `#`, np.:

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.
pl: Zauważ, że dodanie znaku `#` na początku linii nakazuje komputerowi, aby zignorował daną linię, dzięki temu jej nie słyszymy. Taką linijkę nazywamy komentarzem. W Sonic Pi możemy używać komentarzy do usuwania i dodawania różnych rzeczy do naszej muzyki.

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:
pl: Na koniec pozwól, że pozostawię Ci do zabawy coś fajnego. Spójrz na kod poniżej i skopiuj go do wolnego i pustego buforu. Teraz nie próbuj zrozumieć niczego więcej, ponadto że w tym kodzie są dwie pętle (`live_loop`). Oznacza to, że w tym samym czasie dzieją się dwie rzeczy. A teraz rób to, co umiesz najlepiej - eksperymentuj i baw się, próbując zmieniać ten kod. Oto kilka sugestii, co ciekawego możesz zrobić:

en: Try changing the blue `rate:` values to hear the sample sound change.
pl: Spróbuj zmienić wartość niebieskich wskaźników `rate:`, aby usłyszeć, jak zmienia się brzmienie sampli.

en: Try changing the `sleep` times and hear that both loops can spin round at different rates.
pl: Spróbuj zmieniać wartości parametrów `sleep`, dzięki czemu usłyszysz, że obie pętle mogą kręcić się z różną szybkością.

en: Try uncommenting the sample line (remove the `#`) and enjoy the sound of the guitar played backwards.
pl: Spróbuj usunąć komentarz z linijki zawierającą sample (usuń znak `#`), a usłyszysz dźwięk gitary granej od tyłu.

en: Try changing any of the blue `mix:` values to numbers between `0` (not in the mix) and `1` (fully in the mix).
pl: Spróbuj zmieniać niebieską liczbę znajdującą się przy parametrze `mix:` na wartości pomiędzy `0` (brak dźwięku w naszym utworze) a `1` (brzmienie o normalnej głośności).

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...
pl: Pamiętaj tylko, żeby wcisnąć przycisk `Run`. Dzięki temu usłyszysz zmianę przy kolejnym przebiegu pętli. Jeśli coś pójdzie nie tak i zacznie się kakofonia, nie przejmuj się tym. Wystarczy, że naciśniesz przycisk `Stop`, usuniesz cały kod w buforze, wkleisz świeżą kopię poniższego kodu i będziesz znowu gotowy do zabawy od nowa. Pamiętaj - człowiek najszybciej uczy się na błędach...

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.
pl: Baw się i eksperymentuj tym kawałkiem kodu do momentu, w którym Twoja ciekawość sprawi, że zaczniesz zastanawiać się, jak to wszystko właściwie działa oraz co innego można jeszcze wyczarować za pomocą Sonic Pi. Jeśli ten moment już nastąpił, to jesteś gotów, aby przejść do dalszej części samouczka.

en: So what are you waiting for...
pl: Więc na co czekasz...

en: 1.2 Exploring the Interface
pl: 1.2 Zapoznanie z interfejsem użytkownika

en: The Sonic Pi Interface
pl: Interfejs użytkownika Sonic Pi

en: Sonic Pi has a very simple interface for coding music. Let's spend a little time exploring it.
pl: Sonic Pi ma bardzo prosty interfejs umożliwiający kodowanie muzyki. Poświęćmy chwilę na zapoznanie się z nim.

en: ![Sonic Pi Interface](../../../etc/doc/images/tutorial/GUI.png)
pl: ![Interfejs Sonic Pi](../../../etc/doc/images/tutorial/GUI.png)

en: *A* - Play Controls
pl: *A* - Kontrola Odtwarzania

en: *B* - Editor Controls
pl: *B* - Kontrola Edytora

en: *C* - Info and Help
pl: *C* - Informacje i Pomoc

en: *D* - Code Editor
pl: *D* - Edytor Kodu

en: *E* - Prefs Panel
pl: *E* - Panel Preferencji (Ustawienia)

en: *F* - Log Viewer
pl: *F* - Podgląd Logów

en: *G* - Help System
pl: *G* - System Pomocy

en: *H* - Scope Viewer
pl: *H* - Podgląd Logów

en: *I* - Cue Viewer
pl: *F* - Podgląd znaczników

en: A. Play Controls
pl: A. Kontrola Odtwarzania

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.
pl: Różowe przyciski zapewniają podstawową kontrolę nad uruchamianiem i zatrzymywaniem dźwięków. Jest przycisk *Run* (Uruchom), który umożliwia uruchomienie kodu znajdującego się w edytorze. Przycisk *Stop* (Zatrzymaj) pozwala na zatrzymanie aktualnie uruchomionego kodu. Przycisk *Save* (Zapisz) służy do zapisywania kodu wpisanego w edytorze do zewnętrznego pliku tekstowego. Przycisk *Record* (Nagrywaj) umożliwia nagranie aktualnie odtwarzanego dźwięku (w formacie WAV) .

en: B. Editor Controls
pl: B. Kontrola Edytora

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.
pl: Te pomarańczowe przyciski pozwalają Ci manipulować edytorem kodu. Przyciski *Size +* i *Size -* pozwalają Ci zwiększać i zmniejszać tekst.

en: C. Info and Help
pl: C. Informacje i Pomoc

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.
pl: Niebieskie przyciski dają Ci dostęp do informacji, pomocy i ustawień. Naciśnięcie przycisku *Info* (Informacje) spowoduje otworzenie dodatkowego okna, które zawiera informacje dotyczące Sonic Pi - podstawowa ekipa twórców programu, historia, współtwórcy oraz społeczność. Przycisk *Help* (Pomoc) otwiera i zamyka system pomocy (*G*), który właśnie czytasz. Przycisk *Prefs* (Ustawienia) otwiera i zamyka panel preferencji, który pozwala Ci na kontrolę kilku podstawowych ustawień aplikacji.

en: D. Code Editor
pl: D. Edytor Kodu

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.
pl: Jest to obszar, w którym będziesz pisał kod oraz komponował i wykonywał muzykę. Jest to prosty edytor tekstowy, gdzie możesz tworzyć, kasować, wycinać, wklejać, itd. Myśl o nim jako o bardzo prostej wersji edytora Word czy Google Docs. Edytor automatycznie koloruje słowa bazując na ich znaczeniu w kodzie. Na początku może się to wydawać dziwne, ale bardzo szybko zauważysz, że jest to bardzo przydatne. Na przykład - wiesz, że dany tekst jest liczbą, ponieważ ma kolor niebieski.

en: E. Prefs Panel
pl: E. Panel preferencji

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.
pl: Sonic Pi wspiera wiele ustawień, które są dostępne po naciśnięciu przycisku *Prefs* (ustawienia). Jest to przycisk znajdujący się tuż za przyciskami Info (informacje) i Help (pomoc). Naciśnięcie go spowoduje pokazanie Panelu Ustawień, gdzie istnieje wiele opcji, które można zmieniać. Przykłady takich ustawień to: wymuszenie trybu mono, odwrócone stereo, włączanie i wyłączanie panelu logowania, a także suwak głośności i selektor dźwięku, które są dostępne tylko na platformie Raspberry Pi.

en: F. Log Viewer
pl: F. Podgląd Logów

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.
pl: Kiedy uruchamiasz swój kod, informacja o tym, co program aktualnie robi, będzie wyświetlana w panelu z logami. Domyślnie zobaczysz wiadomość pojawiającą się dla każdego dźwięku, który stworzysz, wraz z dokładnym czasem, kiedy ten dźwięk został uruchomiony. Jest to bardzo przydatne do debugowania Twojego kodu i zrozumienia, co on robi.

en: G. Help System
pl: G. System Pomocy

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.
pl: I na koniec została jedna z najważniejszych części interfejsu Sonic Pi - system pomocy, który pojawia się w dolnym oknie. Może on zostać włączony i wyłączony za pomocą niebieskiego przycisku *Help* (pomoc). System pomocy zawiera pomoc oraz informacje dotyczące wszystkich aspektów związanych z Sonic Pi, włączając w to ten samouczek, listę dostępnych syntezatorów, sampli (próbki dźwięków), przykłady, FX (efekty) oraz listę wszystkich funkcji, jakie Sonic Pi udostępnia do tworzenia muzyki.

en: H. Scope Viewer
pl: H. Podgląd Zakresu

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).
pl: Podgląd zakresu pozwala Ci na zobaczenie dźwięków, które słyszysz. Możesz łatwo zauważyć, że dźwięki piły (saw) wyglądają jak piła oraz że podstawowy dźwięk beep jest krzywą sinusoidalną. Możesz też dostrzec różnicę pomiędzy głośnymi i cichymi dźwiękami, obserwując wielkości linii. Możesz bawić się z 3-ma typami zakresów. Domyślny zakres to kombinacja prezentująca lewy i prawy kanał. Drugi zakres to skala stereo, która rysuje oddzielne zakresy dla każdego z kanałów. Na końcu jest krzywa Lissajous, która obrazuje zależność fazową pomiędzy lewym i prawym kanałem oraz pozwala Ci na rysowanie ładnych obrazków za pomocą dźwięku (https://pl.wikipedia.org/wiki/Krzywa_Lissajous).

en: I. Cue Viewer
pl: I. Podgląd logów

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.
pl: Wszystkie wewnętrzne i zewnętrzne wydarzenia (nazywane w Sonic Pi sygnałami) są automatycznie rejestrowane w Cue Viewer. Na przykład, jeśli masz podłączony kontroler MIDI i naciśniesz jeden z jego przycisków, zobaczysz nowy sygnał w Cue Viewer informujący o nazwie kontrolera i który przycisk został naciśnięty. Gdy opanujesz podstawy tworzenia i produkcji dźwięków, zaczniesz chcieć sygnalizować dźwięki lub całe sekcje dźwięków w oparciu o takie wydarzenia. Sygnał to po prostu wskazanie, że coś się wydarzyło. Na przykład, za każdym razem, gdy żywa pętla wykona swój kolejny cykl, wysyła sygnał, który jest rejestrowany w Cue Viewer. Również zewnętrzne wydarzenia, takie jak wiadomości MIDI z podłączonego sprzętu MIDI i wiadomości OSC z innych programów lub komputerów, są wyświetlane w Cue Viewer. Możliwe jest również bezpośrednie generowanie sygnałów za pomocą funkcji cue. Wszystko, co pojawia się w Cue Viewer, może być użyte do wywołania jakiegoś zdarzenia. Temat ten jest omawiany bardziej szczegółowo w sekcjach 10 do 12 tego samouczka.

en: 1.3 Learning through Play
pl: 1.3 Nauka przez zabawę

en: Learning through Play
pl: Nauka przez zabawę

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.
pl: Sonic Pi zachęca Cię, abyś uczył się programowania i tworzenia muzyki poprzez zabawę oraz eksperymentowanie. A najważniejsze jest, abyś przy tym dobrze się bawił. Nawet się nie obejrzysz, jak stwierdzisz, że nauczyłeś się programować, komponować i tworzyć muzykę na żywo.

en: There are no mistakes
pl: Błędów nie ma

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*.
pl: Skoro jesteśmy już przy tym temacie, to pozwól, że dam Ci radę. Coś, czego nauczyłem się przez lata kodowania muzyki na żywo - *błędów nie ma, są tylko nowe możliwości*. Jest to zdanie, które często słyszy się w kontekście muzyki z gatunku jazz, ale sprawdza się równie dobrze w odniesieniu do kodowania na żywo. Nie ma znaczenia, jak dużo masz doświadczenia - niezależnie czy jesteś całkowitym żółtodziobem, czy zaprawionym w bojach Algorejwerem, na pewno zdarzy Ci się napisać kod, którego wynik po uruchomieniu będzie całkowicie niespodziewany. Czasami może brzmieć odlotowo - i w takim przypadku po prostu pozwól mu grać. Innym razem zdarzy się, że będzie brzmiał beznadziejnie i totalnie nie będzie pasował do reszty. Ale pamiętaj: to, że się to wydarzyło, jest całkowicie nieistotne - ważne jest to, co zrobisz dalej. Weź to brzmienie, zabaw się nim i przekształć go w coś niesamowitego. Tłum będzie *szalał*.

en: Start Simple
pl: Zacznij od czegoś prostego

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.
pl: Zawsze kiedy się czegoś uczysz, istnieje pokusa, żeby robić niesamowite rzeczy *tu i teraz*. Postaraj się jednak powstrzymać tę chęć i spójrz na nią jako odległy cel, który uda się osiągnąć *później*. Zamiast tego pomyśl o *najprostszej* rzeczy, jaką potrafisz napisać, która będzie fajna, a jednocześnie sprawi, że będziesz czuł satysfakcję ze zrobienia małego kroku w kierunku realizacji wizji istniejącej w Twojej głowie. Gdy już będziesz miał pomysł na ten mały krok, spróbuj go wykonać - napisz kawałek kodu, uruchom go, baw się nim i zobacz, jakie nowe pomysły przyjdą Ci do głowy. Zobaczysz, niedługo będziesz w całości pochłonięty tą zabawą i będziesz robić szybkie postępy.

en: Just make sure to share your work with others!
pl: Nie zapomnij tylko podzielić się swoją pracą z innymi!

en: 2 Synths
pl: 2 Syntezatory

en: Synths
pl: Syntezatory

en: OK, enough of the intros - let's get into some sound.
pl: OK, tyle tytułem wstępu - pora zająć się muzyką.

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.
pl: W tym rozdziale poznasz podstawy uruchamiania i operowania syntezatorami. Syntezator to taka fajna nazwa dla czegoś, co wytwarza dźwięk. Normalnie są one dość skomplikowane w użyciu. Zwłaszcza syntezatory analogowe zawierają wiele różnych połączeń, kabelków i modułów. Natomiast Sonic Pi oddaje w Twoje ręce wiele z tych możliwości w bardzo prostej i przystępnej formie.

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...
pl: Nie daj się zwieść prostocie interfejsu Sonic Pi. Jeśli tylko będziesz tego chciał, masz do swojej dyspozycji bardzo wyszukane możliwości manipulacji dźwiękiem. Lepiej zapnij pasy...

en: 2.1 Your First Beeps
pl: 2.1 Twoje pierwsze dźwięki

en: Your First Beeps
pl: Twoje pierwsze dźwięki

en: Take a look at the following code:
pl: Spójrz na poniższy kod:

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...
pl: To jest miejsce, w którym wszystko się zaczyna. Śmiało, skopiuj powyższy kod i wklej go do edytora kodu na górze aplikacji (duża biała przestrzeń tuż pod przyciskiem *Run*). Kiedy już to zrobisz, naciśnij przycisk Run...

en: Beep!
pl: Bip!

en: Intense. Press it again. And again. *And again...*
pl: A teraz naciśnij przycisk jeszcze raz. I jeszcze raz. *I jeszcze raz...*

en: Can you hear the difference? Try a lower number:
pl: Słyszysz różnicę? Teraz spróbuj mniejszej liczby:

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.
pl: Zatem, mniejsze liczby stworzą niższe dźwięki, a większe liczby stworzą wyższe dźwięki. Jak w fortepianie - klawisze po lewej stronie grają niższe nuty, a klawisze po prawej grają wyższe nuty.

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`.
pl: Wychodzi na to, że C w czwartej oktawie (C w notacji angielskiej) jest zidentyfikowane jako numer 60. A więc `play 60` zagra C z czwartej oktawy. Żeby zagrać następny spod następnego klawisza po prawej, musisz dodać 1 do 60, wpisując `play 61`, co w tym przypadku oznacza czarny klawisz Cis. Żeby zagrać D, czyli kolejny klawisz na prawo, napisz `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*.
pl: *Nie przejmuj się*, jeśli nic z tego nie rozumiesz - ja również nie rozumiałem, gdy zaczynałem, dokładnie jak Ty teraz. Wszystko, co się teraz liczy, to to, że wiesz już, że *małe liczby generują dźwięki o niskim brzmieniu*, a *duże liczby generują dźwięki o wyższym brzmieniu*.

en: Chords
pl: Akordy

en: Playing a note is quite fun, but playing many at the same time can be even better. Try it:
pl: Zagranie nuty jest całkiem fajne, ale zagranie kilku jednocześnie może być jeszcze fajniejsze. Spróbuj:

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.
pl: Super! Zauważ, że kiedy napiszesz kilka razy komendę `play`, wszystkie dźwięki zagrają w tym samym momencie. Teraz spróbuj sam - które z nich brzmią dobrze razem? Które brzmią okropnie? Eksperymentuj, odkrywaj i przekonaj się na własnej skórze.

en: Melody
pl: Melodia

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:
pl: Granie nut i akordów jest fajne - a co powiesz na zagranie melodii? Co, jeśli chciałbyś zagrać jedną nutę po drugiej, a nie obie w tym samym czasie? Nic prostszego, wystarczy, że odczekasz chwilę pomiędzy zagraniem poszczególnych nut. Możesz to zrobić, używając polecenia `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`:
pl: Cudownie, właśnie stworzyłeś małe arpeggio. No dobrze, ale co oznacza liczba `1` w poleceniu `sleep 1`? Oznacza ona *długość trwania odstępu pomiędzy nutami*. Zasadniczo oznacza to odstęp o długości jednego uderzenia, ale póki co możesz myśleć o tym jako o przerwie trwającej jedną sekundę. Co powinniśmy w takim razie zrobić, jeśli chcielibyśmy trochę przyśpieszyć nasze arpeggio? Należy użyć "krótszych" wartości dla polecenia sleep. Weźmy na przykład połowę, czyli wartość `0.5`:

en: Notice how it plays faster. Now, try for yourself, change the times - use different times and notes.
pl: Zauważ, że arpeggio gra teraz szybciej. Teraz Twoja kolej, pobaw się tym kawałkiem kodu, zmieniając czasy według własnego uznania oraz używając różnych nut.

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.
pl: Jest jeszcze jedna rzecz, którą warto wypróbować. Spróbuj użyć tych, które są "pomiędzy" całymi nutami, np. `play 52.3`, `play 52.63`. Nie ma absolutnie żadnej konieczności, abyś kurczowo trzymał się standardowych, pełnych nut. Pokombinuj z różnymi wartościami i baw się dobrze.

en: Traditional Note Names
pl: Tradycyjne Nazwy Nut

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:
pl: Osoby, które aktualnie znają już trochę notację muzyczną (nie przejmuj się, jeśli jej nie znasz - nie potrzebujesz tego, żeby móc się dobrze bawić), być może będą preferować pisanie melodii przy wykorzystaniu standardowych nazw nut, np. C lub F# (Fis) zamiast liczb. Sonic Pi na to pozwala. Nic nie stoi na przeszkodzie, abyś napisał i uruchomił taki kod:

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:
pl: Pamiętaj tylko, żeby umieścić dwukropek `:` tuż przed nazwą Twojej nuty, tak że zmieni ona kolor na różowy. Możesz również zdefiniować oktawę, umieszczając odpowiednią liczbę tuż po jej nazwie:

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`.
pl: Jeśli chcesz sprawić, aby nuta brzmiała o pół tonu wyżej (uzyskanie dźwięku fis), dodaj `s` tuż za Twoją nutą, np. `play :Fs3`. Analogicznie - jeśli chcesz obniżyć jej dźwięk o połowę (uzyskanie dźwięku mol), dodaj na końcu niej `b`, np. `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`.
pl: Jest również przydatny skrót na pauzę (muzyczny sposób na powiedzenie, żeby nic nie grać zamiast dźwięku) używając `:r`, `:rest` lub `nil`.

en: 2.2 Synth Options
pl: 2.2 Opcje Syntezatorów

en: Synth Options: Amp and Pan
pl: Opcje Syntezatorów: Amplituda i Balans

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.
pl: Tak samo, jak masz kontrolę nad tym, którą nutę zagrać lub który sampel uruchomić, Sonic Pi udostępnia cały asortyment parametrów umożliwiających kształtowanie i kontrolowanie dźwięków. Wiele z tych parametrów zostanie omówionych w tym samouczku. Ponadto w systemie pomocy jest obszerna dokumentacja szczegółowo opisująca każdy z nich. Tymczasem przedstawimy dwa najbardziej przydatne: *aplituda* (amp) i *balans* (pan). Na początek zobaczmy, czym są te parametry w rzeczywistości.

en: Options
pl: Opcje

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).
pl: Syntezatory obecne w Sonic Pi wspierają pojęcie opcji. Opcje to sterowniki, które po przekazaniu do polecenia `play` modyfikują i kontrolują różne aspekty odtwarzanego dźwięku słyszanego przez Ciebie. Każdy z syntezatorów posiada własny zestaw opcji, które pozwalają na subtelny tuning danego dźwięku. Jednakże istnieje zestaw parametrów wspólnych dla wielu dźwięków. Przykładami takich parametrów są np. `amp:` czy opcje obwiedni dźwięku (zostaną omówione w dalszej części samouczka).

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:
pl: Opcje są przekazywane do polecenia `play` w następujący sposób: najpierw dodajemy tuż za poleceniem przecinek `,`, po nim wpisujemy nazwę opcji, np. `amp:` (nie zapomnij o dwukropku `:`) i na końcu po spacji podajemy jej wartość. Oto przykład:

en: play 50, cheese: 1
pl: play 50, ser: 1

en: (Note that `cheese:` isn't a valid opt, we're just using it as an example).
pl: (Zauważ, że `ser:` nie jest poprawną opcją, używamy go tutaj tylko jako przykład).

en: You can pass multiple opts by separating them with a comma:
pl: Możesz przekazać wiele opcji, oddzielając je przecinkami:

en: play 50, cheese: 1, beans: 0.5
pl: play 50, ser: 1, fasolki: 0.5

en: The order of the opts doesn't matter, so the following is identical:
pl: Kolejność opcji nie ma znaczenia, poniższy kod też zadziała i da taki sam wynik:

en: play 50, beans: 0.5, cheese: 1
pl: play 50, fasolki: 0.5, ser: 1

en: Opts that aren't recognised by the synth are just ignored (like `cheese` and `beans` which are clearly ridiculous opt names!)
pl: Opcje, które nie są rozpoznawane przez dany syntezator, są po prostu ignorowane (tak jak `ser` i `fasolki` jak w powyższym przypadku, które są po prostu śmiesznymi nazwami dla opcji!)

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:
pl: Jeśli niechcący zdarzy Ci się dwa razy użyć opcji o tej samej nazwie, to wygrywa ostatnia. Na przykład - ostateczna wartość dla opcji `fasolki:` w poniższym przykładzie wyniesie 2 (a nie 0.5):

en: play 50, beans: 0.5, cheese: 3, eggs: 0.1, beans: 2
pl: play 50, fasolki: 0.5, ser: 3, jajka: 0.1, fasolki: 2

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:`.
pl: Wiele poleceń w Sonic Pi akceptuje opcje, warto więc, żebyś poświęcił parę chwil, aby nauczyć się, jak ich używać, dzięki temu będziesz ustawiony! Spróbujmy pobawić się trochę z naszą pierwszą: `amp:`.

en: Amplitude
pl: Amplituda

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.
pl: Amplituda jest wielkością, która w świecie komputerów oznacza głośność dźwięku. *Wysoka amplituda powoduje głośny dźwięk*, a *niska amplituda powoduje cichy dźwięk*. Jak już wcześniej widziałeś, Sonic Pi używa liczb do reprezentacji czasu oraz nut. W taki sam sposób liczby są używane do reprezentacji wielkości amplitudy (głośności). Amplituda o wartości 0 to cisza (nie słyszysz nic). Natomiast amplituda o wartości 1 oznacza ustawienie głośności na standardowy poziom. Możesz podkręcić głośność wyżej, na 2, 10, 100. Musisz jednak wiedzieć, że gdy całkowita amplituda wszystkich dźwięków stanie się zbyt wysoka, Sonic Pi wykorzysta narzędzie zwane kompresorem, żeby zdusić dźwięk tak, że będzie mieć pewność, iż dźwięk nie jest zbyt głośny dla Twoich uszu. Takie działanie może spowodować, że stanie się on nieczysty i dziwny. Staraj się więc używać niskich wartości dla amplitudy, np. wartości w zakresie pomiędzy 0 a 0.5. Dzięki temu unikniesz mechanizmu kompresji.

en: Amp it up
pl: Amplituda w górę

en: To change the amplitude of a sound, you can use the `amp:` opt. For example, to play at half amplitude pass 0.5:
pl: Aby zmienić amplitudę dźwięku, możesz użyć opcji `amp:`. Przykładowo żeby zagrać z głośnością na poziomie 0.5, napisz taki kawałek kodu i uruchom go:

en: To play at double amplitude pass 2:
pl: Aby zagrać z podwójną głośnością, przekaż liczbę 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):
pl: Opcja `amp:` modyfikuje tylko pojedyncze polecenie `play`, do którego została przekazana. Zauważ, że w poniższym przykładzie pierwsze wywołanie polecenia play zostanie zagrane z głośnością na poziomie równym połowie standardowej głośności, natomiast drugie zostanie zagrane z głośnością standardową (1):

en: Of course, you can use different `amp:` values for each call to play:
pl: Nic nie stoi na przeszkodzie, żebyś użył różnych wartości opcji `amp:` dla każdego polecenia play:

en: Panning
pl: Balansowanie

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.
pl: Kolejną fajną opcją, z której można korzystać, jest `pan:`. Kontroluje ona balans dźwięku w stereo. Balansowanie dźwiękiem w lewą stronę oznacza, że będziesz go słyszał tylko w lewym głośniku (słuchawce). Z kolei balansowanie dźwiękiem na prawą stronę oznacza, że usłyszysz go tylko w prawym głośniku (słuchawce). W naszym przypadku używamy wartości -1 do reprezentacji dźwięku, którego balans został w pełni ustawiony na lewą stronę, 0 dla ustawienia balansu po środku (wartość domyślna) oraz 1 dla dźwięku ustawionego na prawą stronę w polu stereo. Naturalnie nic nie stoi na przeszkodzie, abyśmy używali dowolnej wartości znajdującej się pomiędzy -1 i 1 w celu dokładnej kontroli "pozycji" naszego dźwięku.

en: Let's play a beep out of the left speaker:
pl: Zagrajmy dźwięk bip z lewego głośnika:

en: Now, let's play it out of the right speaker:
pl: A teraz zagrajmy go z prawego głośnika:

en: Finally let's play it back out of the center of both (the default position):
pl: Na koniec zagrajmy go z powrotem z obu głośników pośrodku (domyślna pozycja):

en: Now, go and have fun changing the amplitude and panning of your sounds!
pl: Teraz kolej na Ciebie. Spróbuj samodzielnie pobawić się, zmieniając Twoje dźwięki za pomocą opcji amplituda (amp:) i balans (pan:)!

en: 2.3 Switching Synths
pl: 2.3 Zmienianie Syntezatorów

en: Switching Synths
pl: Zmienianie Syntezatorów

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.
pl: Do tej pory bawiliśmy się całkiem nieźle, tworząc wiele fajnych dźwięków. Jest jednak bardzo prawdopodobne, że ten podstawowy dźwięk zaczyna Cię już powoli nudzić. Czy to jest wszystko, na co stać Sonic Pi? Przecież kodowanie na żywo na pewno daje dużo więcej możliwości, niż tylko granie jednego prostego dźwięku bip? Owszem, są inne możliwości. W tym rozdziale poznasz fascynującą paletę dźwięków, jaką oferuje Ci 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.
pl: Sonic Pi posiada szeroki wachlarz instrumentów, będących *syntezatorami*. Zważywszy na to, że sample (próbki) reprezentują nagrane dźwięki, syntezatory mają możliwość generowania nowych dźwięków zależnych od tego, jak je kontrolujesz (w tym samouczku dowiesz się o tym później). Syntezatory Sonic Pi są bardzo potężne i ekspresyjne. Będziesz miał wiele radości podczas poznawania i zabawy nimi. Na początku jednak nauczmy się, jak wybierać aktualnie grający syntezator.

en: Buzzy saws and prophets
pl: Brzęczące syntezatory saw i prophet

en: A fun sound is the *saw wave* - let's give it a try:
pl: Fajnym dźwiękiem jest *saw wave* - spróbujmy:

en: Let's try another sound - the *prophet*:
pl: A teraz spróbujmy innego dźwięku - syntezatora *prophet*:

en: How about combining two sounds. First one after another:
pl: Co powiesz na połączenie dwóch dźwięków? Jeden po drugim:

en: Now multiple sounds at the same time (by not sleeping between successive calls to `play`):
pl: A teraz kilka dźwięków równocześnie (nie ma `sleep` między kolejnymi wywołaniami `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`.
pl: Zauważ, że polecenie `use_synth` wywiera wpływ tylko kolejne polecenia `play`. Pomyśl o nim jako o *dużym przełączniku* - kolejne wywołania polecenia `play` będą używać syntezatora, który jest w danym momencie wskazany. Możesz zmienić aktualny syntezator na inny, używając przełącznika `use_synth`.

en: Discovering Synths
pl: Odkrywanie Syntezatorów

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:
pl: Aby zobaczyć, jakie syntezatory Sonic Pi ma dla Ciebie do zabawy, zerknij na zakładkę Syntezatory w lewym dolnym rogu (pomiędzy Przykładami a Efektami). Znajdziesz ich tam ponad 20 do wyboru. Oto kilka moich ulubionych:

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.
pl: Teraz pobaw się, *zmieniając syntezatory, gdy Twoja muzyka wciąż gra*. Próbuj rozerwać się, łącząc ze sobą różne dźwięki, aby tworzyć nowe brzmienia, jak również używając różnych syntezatorów w różnych sekcjach Twojego utworu.

en: 2.4 Duration with Envelopes
pl: 2.4 Czas trwania obwiedni dźwięku

en: Duration with Envelopes
pl: Czas trwania obwiedni dźwięku

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.
pl: W poprzedniej sekcji zobaczyliśmy, w jaki sposób możemy używać polecenia `sleep`, aby kontrolować, kiedy dźwięki zaczynają grać. Nie wiemy jednak jeszcze, w jaki sposób kontrolować długość ich trwania.

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:
pl: Aby móc korzystać z prostej, ale jakże potężnej możliwości *kontrolowania długości trwania* naszych dźwięków, Sonic Pi udostępnia pojęcie *obwiedni dźwięku dla amplitudy ADSR* (czym jest ADSR dowiesz się za chwilę w kolejnych sekcjach tego rozdziału). Obwiednia amplitudy udostępnia dwa przydatne aspekty kontroli:

en: control over the duration of a sound
pl: kontrolę nad długością trwania dźwięku

en: control over the amplitude of a sound
pl: kontrolę poziomu głośności (amplitudy) dźwięku

en: Duration
pl: Długość trwania dźwięku (ang. Duration)

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.
pl: Długość trwania mówi o tym, jak długo słychać dany dźwięk. Im długość trwania jest większa, tym dłużej słyszysz dźwięk. Wszystkie dźwięki w Sonic Pi posiadają kontrolowalną obwiednię amplitudy, a całkowita długości trwania tej obwiedni to długość trwania dźwięku. Dlatego też kontrolując obwiednię, kontrolujesz długość trwania całego dźwięku.

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.
pl: Obwiednia ADSR kontroluje nie tylko długość trwania, lecz pozwala Ci również na *precyzyjną kontrolę amplitudy dźwięku*. Wszystkie dźwięki zaczynają się i kończą ciszą. Pomiędzy tymi ciszami jest moment, podczas którego słychać dźwięk. Obwiednie pozwalają Ci przesuwać i kontrolować głośność tej części, w której go słychać. Jest to analogiczne do sytuacji, w której powiedziałbyś komuś, kiedy powinien zwiększać i zmniejszać głośność wzmacniacza gitarowego. Na przykład - możesz poprosić kogoś "zacznij od ciszy, potem powoli zwiększaj poziom głośności, utrzymaj go na tym poziomie przez chwilę, po czym szybko wycisz". Sonic Pi pozwala Ci na zaprogramowanie tego za pomocą obwiedni.

en: Just to recap, as we have seen before, an amplitude of 0 is silence and an amplitude of 1 is normal volume.
pl: Jak widzieliśmy już w poprzedniej sekcji samouczka, amplituda o wartości 0 to cisza, natomiast amplituda o wartości 1 to głośność normalna.

en: Now, let us look at each of the parts of the envelopes in turn.
pl: A teraz przyjrzyjmy się kolejno każdej ze składowych obwiedni.

en: Release Phase
pl: Faza zanikania (z ang. 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):
pl: Jedyną częścią obwiedni dźwięku, która jest domyślnie używana, to faza zwolnienia (release). Odpowiada ona za czas, podczas którego następuje wyciszenie dźwięku. Domyślnie wszystkie syntezatory posiadają czas zanikania amplitudy równy 1. Oznacza to, że trwa to 1 uderzenie (przy domyślnej wartości BPM jest to 1 sekunda):

en: The note will be audible for 1 second. Go ahead and time it :-) This is short hand for the longer more explicit version:
pl: Nuta będzie odtwarzana przez 1 sekundę. Weź do ręki stoper i sprawdź :-). Jest to skrót dla dłuższej, bardziej dokładnej wersji:

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:
pl: Zauważ, że brzmienie jest dokładnie takie samo (dźwięk trwa przez jedną sekundę). Jednakże teraz bardzo łatwo możemy zmienić czas trwania przez zmianę wartości opcji `release`:

en: We can make the synth sound for a very short amount of time by using a very small release time:
pl: Możemy też sprawić, aby syntezator brzmiał przez bardzo krótką chwilę. Wystarczy użyć bardzo małej wartości dla czasu zanikania amplitudy:

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:
pl: Czas, podczas którego zmniejsza się głośność dźwięku, to tak zwana *faza zanikania (ang. release phase)* i domyślnie jest to przejście liniowe (tzn. obniżające się w linii prostej). Poniższy diagram ilustruje je:

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.*
pl: Pionowa linia po lewej stronie diagramu pokazuje, że dźwięk zaczyna się z amplitudą równą 0, ale momentalnie osiąga pełną głośność (jest to faza narastania, omówimy ją za chwilę). Gdy pełna głośność zostanie już osiągnięta, następuje liniowe jej zmniejszanie, aż do zera. Zajmuje to tyle czasu, ile zostało ustawione za pomocą opcji zanikania `release:`. *Im czas zanikania jest dłuższy, tym dłuższy będzie czas wybrzmiewania dźwięku syntezatora.*

en: You can therefore change the duration of your sound by changing the release time. Have a play adding release times to your music.
pl: Możesz zatem zmieniać długość trwania Twoich dźwięków, zmieniając czas trwania fazy zanikania. Spróbuj teraz pobawić się, dodając do Twojej muzyki różne czasy dla fazy zanikania.

en: Attack Phase
pl: Faza narastania (z ang. 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:
pl: Domyślnie faza ataku jest równa 0 dla wszystkich syntezatorów. Oznacza to, że przejście od amplitudy 0 do amplitudy 1 jest natychmiastowe. Nadaje to syntezatorowi perkusyjne brzmienie na początku. Mimo to może się zdarzyć, że będziesz chciał, aby Twój dźwięk zaczynał brzmieć stopniowo. Aby to zrobić, wystarczy wykorzystać opcję 'attack:'. Spróbuj użyć takiego stopniowego wejścia w kilku różnych dźwiękach:

en: You may use multiple opts at the same time. For example for a short attack and a long release try:
pl: Zauważ, że możesz używać wielu opcji w tym samym czasie. Na przykład dla krótkiej fazy ataku i długiej fazy zanikania spróbuj napisać i uruchomić coś takiego:

en: This short attack and long release envelope is illustrated in the following diagram:
pl: Taka obwiednia z krótką fazą ataku i długą zanikania została zilustrowana na poniższym rysunku:

en: Of course, you may switch things around. Try a long attack and a short release:
pl: Oczywiście możesz zmieniać opcje według swoich upodobań. Spróbuj teraz długiej fazy ataku i krótkiej fazy zanikania:

en: Finally, you can also have both short attack and release times for shorter sounds.
pl: Na koniec możesz też spróbować ustawić obie wartości dla czasu narastania i zanikania na małe wartości, aby uzyskać krótsze dźwięki.

en: Sustain Phase
pl: Faza podtrzymania (z ang. 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.
pl: Oprócz możliwości ustawiania czasu narastania i czasu zanikania dźwięku, możesz również kontrolować fazę podtrzymania (z ang. Sustain Phase). Jest to moment, w którym dźwięk jest utrzymany na pełnej amplitudzie pomiędzy fazami narastania i zanikania.

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.
pl: Czas podtrzymania (ang. sustain) jest bardzo przydatny dla ważnych dźwięków, którym chciałbyś dać pełną obecność w miksie tuż przed wejściem w opcjonalną fazę zanikania. Oczywiście całkowicie dopuszczalne jest ustawienie obu opcji, zarówno fazy ataku jak i fazy zanikania na wartość 0, a także użycie tylko fazy podtrzymania, żeby nie mieć absolutnie żadnej fazy wejścia lub wyjścia dla danego dźwięku. Bądź jednak ostrożny i wiedz, że ustawienie fazy zanikania na 0 może spowodować dziwne kliki w dźwiękach i bardzo często zamiast tego dużo lepiej jest użyć bardzo małej wartości, np. 0.2.

en: Decay Phase
pl: Faza opadania (z ang. 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:
pl: Na sam koniec: dla momentów, gdzie potrzebujesz dodatkowego poziomu kontroli, masz możliwość skorzystania z fazy opadania (ang. decay). Jest to taki moment obwiedni dźwięku, który znajduje się pomiędzy fazą ataku a fazą podtrzymania i określa moment, w którym amplituda spada z poziomu ataku `attack_level` do poziomu podtrzymania `sustain_level`. Domyślnym argumentem dla fazy opadania jest 0, natomiast poziomy ataku i podtrzymania posiadają domyślną wartość 1. W związku z tym musisz określić dla nich czas opadania, aby uzyskać jakikolwiek efekt:

en: Decay Level
pl: Poziom opadania

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:
pl: Ostatnia sztuczka polega na tym, że pomimo iż domyślna wartość opcji `decay_level:` jest taka sama jak wartość opcji `sustain_level:`, to możesz bezpośrednio zmienić jej wartość, aby mieć pełną kontrolę nad całą obwiednią dźwięku. Pozwala Ci to na tworzenie obwiedni takich, jak poniższa:

en: It's also possible to set the `decay_level:` to be higher than `sustain_level:`:
pl: Jest również możliwe ustawienie opcji `decay_level:` na wartość wyższą niż poziom `sustain_level:`:

en: ADSR Envelopes
pl: Obwiednia dźwięku ADSR

en: So to summarise, Sonic Pi's ADSR envelopes have the following phases:
pl: Podsumowując, obwiednia dźwięku ADSR w Sonic Pi posiada następujące fazy:

en: *attack* - time from 0 amplitude to the `attack_level`,
pl: *attack* - czas narastania amplitudy od wartości 0 do poziomu maksymalnego, którego wysokość jest określana przez opcję `attack_level`,

en: *decay* - time to move amplitude from `attack_level` to `decay_level`,
pl: *decay* - czas opadania amplitudy od poziomu maksymalnego (`attack_level`) do poziomu opadania (`decay_level`),

en: *sustain* - time to move the amplitude from `decay_level` to `sustain_level`,
pl: *sustain* - czas, który jest potrzebny, żeby zmienić poziom głośności dźwięku od wartości określonej przez opcję `decay_level` do wartości określonej przez opcję `sustain_level`,

en: *release* - time to move amplitude from `sustain_level` to 0
pl: *release* - czas zanikania amplitudy od poziomu podtrzymania (`sustain_level`) do wartości 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:
pl: Należy tu zwrócić uwagę na fakt, że całkowita długość trwania dźwięku jest sumą czasu trwania każdej z faz ustawionych na danym dźwięku. Dlatego też poniższy dźwięk będzie miał długość 0.5 + 1 + 2 + 0.5 = 4 uderzeń:

en: Now go and have a play adding envelopes to your sounds...
pl: Tyle teorii, teraz zabaw się i spróbuj dodać różne obwiednie dźwięku do Twoich melodii...

en: 3 Samples
pl: 3 Sample

en: Samples
pl: Sample

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.
pl: Innym świetnym sposobem tworzenia Twojej muzyki jest wykorzystanie nagranych wcześniej dźwięków. Technika ta ma swoje korzenie w muzyce hip hop i takie nagrane wcześniej dźwięki nazywamy *samplami*. Innymi słowy, jeśli weźmiesz mikrofon i nagrasz subtelny dźwięk kropel deszczu uderzających o szybę, to właśnie stworzyłeś swój pierwszy sampel.

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...
pl: Sonic Pi pozwala Ci robić wiele fajnych rzeczy z samplami. Poza tym, że na pokładzie jest ponad 90 gotowców, które tylko czekają na to, abyś zaczął się nimi bawić, to masz też możliwość manipulowania nimi oraz korzystania z Twoich własnych. Bierzmy się do zabawy...

en: 3.1 Triggering Samples
pl: 3.1 Uruchamianie Sampli

en: Triggering Samples
pl: Uruchamianie Sampli

en: Playing beeps is only the beginning. Something that's a lot of fun is triggering pre-recorded samples. Try it:
pl: Granie prostych dźwięków to dopiero początek. Coś, co jest dużo fajniejsze, to uruchamianie nagranych wcześniej sampli. Spróbuj tego:

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:
pl: Sonic Pi posiada wiele sampli, których możesz używać do tworzenia swojej muzyki - tak samo, jak używasz polecenia `play'. Aby zagrać kilka sampli i nut, po prostu napisz je jeden po drugim:

en: If you want to space them out in time, use the `sleep` command:
pl: Jeśli chcesz oddzielić je od siebie, wykorzystaj polecenie `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.
pl: Zauważ, że Sonic Pi nie czeka, aż dźwięk przestanie grać, zanim zacznie grać kolejny dźwięk. Polecenie `sleep` określa jedynie rozdzielenie *wyzwalania* poszczególnych dźwięków. Takie podejście pozwala na łatwe nawarstwianie kolejnych dźwięków, tworząc ciekawe efekty nakładania się na siebie.

en: Discovering Samples
pl: Odkrywanie Sampli

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.
pl: Są dwa sposoby na odkrywanie wielu sampli, dostępnych w Sonic Pi. Po pierwsze, możesz korzystać z systemu pomocy. Kliknij na sekcję Sample w lewym dolnym menu, wybierz kategorię, a zobaczysz listę dostępnych dźwięków.

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:
pl: Alternatywnie możesz skorzystać z *systemu autopodpowiadania*. Wystarczy, że wpiszesz początek wybranej grupy sampli, np. `sample :ambi_`, a Twoim oczom ukaże się rozwijana lista reszty gotowców do wyboru. Wypróbuj następujące prefiksy kategorii:

en: Now start mixing samples into your compositions!
pl: A teraz zacznij wplatać sample w Twoje własne kompozycje!

en: 3.2 Sample Parameters
pl: 3.2 Parametry Sampli

en: Sample Parameters: Amp and Pan
pl: Parametry Sampli: Amp i Pan

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:`.
pl: Tak samo jak w przypadku Syntezatorów możemy łatwo kontrolować nasze dźwięki za pomocą parametrów. Sample wspierają taki sam mechanizm parametrów. Przyjrzyjmy się ponownie naszym kolegom `amp:` i `pan:`.

en: Amping samples
pl: Zmiana głośności sampli

en: You can change the amplitude of samples with exactly the same approach you used for synths:
pl: Możesz zmieniać głośność sampli dokładnie w taki sam sposób, jakiego używałeś dla syntezatorów:

en: Panning samples
pl: Przesuwanie sampli na różne kanały

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:
pl: Możemy również używać parametru `pan:` dla sampli. Na przykład oto, jak możemy zagrać breakbeat amen, aby brzmiał tylko w lewym głośniku, a potem w połowie czasu, żeby zaczął grać też w prawym głośniku:

en: Note that 0.877 is half the duration of the `:loop_amen` sample in seconds.
pl: Zauważ, że liczba 0.877 jest połową czasu trwania sampla `:loop_amen` wyrażoną w sekundach.

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`.
pl: Na koniec należy zauważyć, że jeśli ustawisz pewne wartości domyślne syntezatorów za pomocą parametru `use_synth_defaults` (zostanie on omówiony później), to będą one ignorowane przez polecenie `sample`.

en: 3.3 Stretching Samples
pl: 3.3 Rozciąganie Sampli

en: Stretching Samples
pl: Rozciąganie Sampli

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.
pl: Teraz, gdy już umiemy grać za pomocą różnorodnych syntezatorów i sampli, przyszedł czas, aby nauczyć się, w jaki sposób można modyfikować syntezatory i sample, aby sprawić, by muzyka była jeszcze bardziej unikalna i interesująca. Na początek poznajmy możliwość rozciągania (*stretch*) i ściskania (*squash*) sampli.

en: Sample Representation
pl: Reprezentacja Sampla

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.
pl: Sample to nagrane dźwięki, które są przechowywane niczym liczby mówiące o tym, jak poruszyć stożek głośnika, by zreprodukować dany dźwięk. Stożek głośnika może poruszać się do środka i na zewnątrz, tak samo liczby muszą jedynie przedstawiać, jak daleko do środka lub na zewnątrz powinien znajdować się stożek głośnika w danym momencie. Aby móc wiernie odwzorować nagrany dźwięk sampla, zazwyczaj potrzeba do tego wiele tysięcy liczb na sekundę! Sonic Pi bierze tę listę liczb i zasila nimi głośniki z odpowiednią prędkością tak, aby głośniki Twojego komputera poruszały się do przodu i do tyłu w taki właśnie sposób, by zreprodukować dany dźwięk. Mimo to całkiem fajnie jest zmieniać prędkość, z jaką te liczby są przekazywane do głośnika, aby w ten sposób zmieniać brzmienie.

en: Changing Rate
pl: Zmiana tempa

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`:
pl: Pobawmy się jednym z dźwięków z [gatunku ambient](https://pl.wikipedia.org/wiki/Ambient): `:ambi_choir`. Aby zagrać go w domyślnym tempie, możesz przekazać opcję `rate:` do polecenia sample:

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`:
pl: Takie polecenie sprawi, że sampel zostanie zagrany w normalnym tempie (1), więc póki co nic specjalnego się nie dzieje. Nic jednak nie stoi nam na przeszkodzie, abyśmy zmienili tę liczbę na coś innego. Co powiesz na wartość `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.
pl: Łał! Co się tutaj dzieje? Otóż dwie rzeczy. Po pierwsze, odtworzenie naszego sampla zajmuje drugie tyle czasu. Po drugie, dźwięk jest niższy o oktawę. Przyjrzyjmy się tym dwóm tematom nieco bardziej szczegółowo.

en: Let's stretch
pl: Rozciągamy

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:
pl: Sampel, który jest bardzo fajny do rozciągania i kompresji, to Amen Break. Przy normalnym tempie możemy wyobrazić sobie wrzucenie go do utworu *drum 'n' bass*:

en: However by changing the rate we can switch up genres. Try half speed for *old school hip-hop*:
pl: Jednak gdy zmienimy tempo, możemy bardzo szybko zmienić gatunek. Spróbuj połowy prędkości, aby stworzyć *oldschool'owy hip hop*:

en: If we speed it up, we enter *jungle* territory:
pl: Jeśli przyśpieszymy, to wejdziemy na terytorium *jungle*:

en: Now for our final party trick - let's see what happens if we use a negative rate:
pl: A teraz nasz ulubiony trik imprezowy - zobaczmy, co się stanie, jeśli użyjemy ujemnego tempa:

en: A Simple Explanation of Sample Rate
pl: Proste Wyjaśnienie Częstotliwości Próbkowania

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.
pl: Przydatnym sposobem myślenia o samplach jest myślenie o nich jak o sprężynkach. Z tempem (szybkością) odtwarzania jest tak jak ze ściskaniem i rozciąganiem sprężyny. Zagranie sampla w tempie równym 2 spowoduje, że *ściśniesz sprężynę* do połowy jej normalnej długości. Dlatego też zagranie takiego sampla zajmie o połowę mniej czasu. Jeśli zagrasz sampel w tempie równym połowę normalnego, to wtedy *rozciągasz sprężynę tak, że podwaja swoją długość*. W takim przypadku zagranie całego sampla zajmie dwa razy więcej czasu. Im bardziej ściśniesz sprężynę (wyższe tempo), tym stanie się krótsza. Analogicznie, im bardziej rozciągniesz (niższe tempo), tym będzie dłuższa.

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*.
pl: Ściskanie sprężyny zwiększa jej gęstość (liczba zwojów na cm) - jest to podobne do tego, gdy sampel brzmi na *wyższym poziomie* (pitch). Rozciąganie zmniejsza gęstość i jest podobne to dźwięku posiadającego *niższy poziom* (pitch).

en: The Maths Behind Sample Rate
pl: Matematyka Stojąca Za Częstotliwością Próbkowania

en: (This section is provided for those that are interested in the details. Please feel free to skip it...)
pl: (Ta sekcja została przygotowana dla tych osób, które są zainteresowane szczegółami. Jeśli nie jesteś, możesz ją po prostu pominąć...)

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:
pl: Jak zauważyliśmy już powyżej, sampel jest reprezentowany przez wielką, długą listę liczb, które definiują to, w jakiej pozycji powinien znajdować się głośnik w danym momencie czasu. Możemy wziąć te liczby i wykorzystać je do narysowania wykresu graficznego mogącego wyglądać bardzo podobnie do tego:

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.
pl: Być może widziałeś już podobne obrazki. Nazywa się ją *przebiegiem fali* sampla. Jest to nic innego jak tylko wykres prezentujący liczby. Zazwyczaj przebieg fali takiej jak ta będzie miał 44100 punktów z danymi na sekundę (jest związane z twierdzeniem Kotelnikowa-Shanona). Więc jeśli sampel trwa przez 2 sekundy, to *przebieg fali* będzie reprezentowany przez 88200 liczb, które przekażemy do głośnika z prędkością 44100 punktów na sekundę. Odtworzenie tego powinno zatem zająć tylko 1 sekundę. Możemy spróbować również odtworzyć go w tempie o połowę mniejszym, co dałoby wartość 22050 punktów na sekundę i odtworzenie zajęłoby 4 sekundy.

en: The duration of the sample is affected by the playback rate:
pl: Na czas trwania sampli ma wpływ szybkość odtwarzania:

en: Doubling the playback rate halves the playback time,
pl: Podwojenie szybkości odtwarzania skraca o połowę czas odtwarzania,

en: Halving the playback rate doubles the playback time,
pl: Skrócenie szybkości odtwarzania o połowę podwaja czas odtwarzania,

en: Using a playback rate of one fourth quadruples the playback time,
pl: Ustawienie szybkości odtwarzania równej jednej czwartej sprawi, że czas odtwarzania będzie czterokrotnie dłuższy,

en: Using a playback rate of 1/10 makes playback last 10 times longer.
pl: Ustawienie szybkości odtwarzania na poziomie 1/10 spowoduje, że czas odtwarzania zajmie 10 razy dłużej.

en: We can represent this with the formula:
pl: Możemy przedstawić to za pomocą następującego wzoru:

en: new_sample_duration = (1 / rate) * sample_duration
pl: nowy_czas_trwania_sampla = (1 / tempo) * czas_trwania_sampla

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.
pl: Zmiana szybkości odtwarzania wpływa również na wysokość tonu (pitch) sampla. Częstotliwość lub wysokość tonu, widoczna na fali dźwięku, jest determinowana przez to, jak szybko się ona zmienia w górę i w dół. Nasze mózgi w jakiś sposób zmieniają szybkie ruchy głośnika na wysokie nuty oraz wolne ruchy głośników na niskie nuty. To jest właśnie przyczyną tego, że czasami możesz nawet zobaczyć ruch dużego głośnika basowego, gdy wydaje on z siebie super niski bas - w zasadzie to porusza się on wtedy znacznie wolniej w tę i z powrotem niż wtedy, gdy głośnik produkuje wyższe dźwięki.

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.
pl: Jeśli weźmie się falę dźwięku i ściśnie się, to wtedy będzie się ona poruszać w górę i w dół więcej razy na sekundę. Spowoduje to, że dany dźwięk będzie miał wyższy ton. Oznacza to, że podwojenie ruchów w górę i w dół (oscylacji) zwiększa częstotliwość dwukrotnie. Podsumowując, *zagranie twojego sampla z podwójną prędkością spowoduje, że częstotliwość, którą usłyszysz będzie dwa razy wyższa*. Analogicznie, *obniżenie tempa o połowę spowoduje, że częstotliwość będzie też niższa o połowę*. Inne wartości tempa będą będą oddziaływać na częstotliwość odpowiednio.

en: 3.4 Enveloped Samples
pl: 3.4 Opakowane Sample

en: Enveloped Samples
pl: Opakowane Sample

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.
pl: Korzystając z obwiedni ADSR, możliwa jest również modyfikacja *czasu trwania* oraz *amplitudy* sampli. Jednakże działanie jest w tym przypadku trochę inne niż w przypadku syntezatorów. Obwiednie sampli pozwalają Ci tylko na zmniejszanie amplitudy oraz czasu trwania sampla - natomiast nigdy nie jest możliwe zwiększanie wartości tych parametrów. Sampel przestanie grać, gdy się skończy lub gdy zakończy się obwiednia - obojętne, co skończy się szybciej. Jeśli więc użyjesz bardzo długiego parametru `release:`, to nie spowoduje takiej sytuacji, że wydłuży się czas odtwarzania sampla.

en: Amen Envelopes
pl: Obwiednie Amen

en: Let's return to our trusty friend the Amen Break:
pl: Wróćmy do naszego sprawdzonego kolegi Amen Break:

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:
pl: Bez podawania żadnych parametrów słyszymy całego sampla na pełnej głośności. Jeśli chcemy, aby dźwięk pojawiał się stopniowo przez 1 sekundę, możemy użyć parametru `attack:`:

en: For a shorter fade in, choose a shorter attack value:
pl: Jeśli chcemy, aby wejście trwało krócej, wystarczy, że użyjemy krótszej wartości dla fazy ataku:

en: Auto Sustain
pl: Automatyczne Podtrzymanie (Auto Sustain)

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.
pl: Miejscem, w którym zachowanie obwiedni ADSR dla sampli różni się od obwiedni dla syntezatorów, jest wartość parametru *sustain*. Domyślnie w obwiedni syntezatorów, parametr fazy podtrzymania domyślnie otrzymuje wartość 0, o ile nie zmienimy jej ręcznie. W przypadku sampli faza podtrzymania domyślnie otrzymuje wartość *automagiczną* - czas potrzebny na odtworzenie pozostałej części sampla. Jest to właśnie przyczyną, dla której słyszymy cały sampel, kiedy nie ustawimy żadnej wartości dla fazy podtrzymania. Jeśli domyślne wartości dla parametrów ataku, opadania, podtrzymania i zanikania były ustawione na 0, nigdy nie usłyszelibyśmy nawet jednego piknięcia. Sonic Pi sam oblicza, jak długi jest czas trwania sampla, obcina fazy ataku, opadania oraz zanikania i używa wyniku jako czasu dla fazy podtrzymania. Jeśli wartości podane dla ataku, opadania lub zanikania po zsumowaniu dają wartość większą od czasu trwania sampla, to faza podtrzymania otrzymuje po prostu wartość 0.

en: Fade Outs
pl: Płynne Zanikanie (Fade Outs)

en: To explore this, let's consider our Amen break in more detail. If we ask Sonic Pi how long the sample is:
pl: Aby to zbadać, przyjrzyjmy się bardziej szczegółowo naszej pętli Amen Loop. Jeśli zapytamy Sonic Pi o to, jak długo trwa ten sampel:

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:
pl: To wyświetli liczbę `1.753310657596372` i jest ona długością sampla wyrażoną w sekundach. Dla wygody zaokrąglijmy ją tutaj do wartości `1.75`. Teraz, jeśli ustawimy fazę zanikania (release) na wartość `0.75`, to wydarzy się coś niespodziewanego:

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.
pl: Pierwsza sekunda sampla zostanie zagrana z pełną amplitudą, po czym zacznie stopniowo zanikać przez okres 0.75 sekundy. To jest właśnie *auto sustain* w akcji (automatyczne ustawianie czasu trwania dla fazy podtrzymania). Domyślnie faza zanikania (release) zawsze działa (jest ustawiana) od końca sampla. Jeśli nasz sample trwałby 10.75 sekundy, to najpierw pierwsze 10 sekund zostałoby zagrane z pełną amplitudą, po czym zaczęłoby się stopniowe zanikanie (fade out) trwające przez 0.75s.

en: Remember: by default, `release:` fades out at the end of a sample.
pl: Zapamiętaj: domyślnie faza zanikania (`release:`) wchodzi pod koniec sampla.

en: Fade In and Out
pl: Wejście i Wyjście (Fade In i Fade Out)

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:
pl: Możemy używać jednocześnie parametrów dla ustawiania fazy ataku `attack:` oraz fazy zanikania `release:`, z wykorzystaniem automatycznego ustawiania fazy podtrzymania (sustain), aby użyć stopniowego pojawienia się i stopniowego zanikania przez cały czas trwania sampla:

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.
pl: Jako że pełny czas trwania naszego sampla to 1.75s, a nasze fazy ataku i zanikania dają w sumie 1.5s, to czas trwania fazy podtrzymania (sustain) automagicznie ustawia się na wartość 0.25s. Pozwala nam to na łatwe tworzenie łagodnych wejść i wyjść w samplach.

en: Explicit sustain
pl: Sprecyzowana faza podtrzymania (sustain)

en: We can easily get back to our normal synth ADSR behaviour by manually setting `sustain:` to a value such as 0:
pl: Możemy bardzo łatwo przywrócić normalne zachowanie ADSR znane z syntezatorów poprzez manualne ustawienie wartości parametru `sustain:` na wartość 0:

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.
pl: Teraz nasz sampel zostanie zagrany w sumie tylko przez 0.75 sekundy. Używając domyślnych wartości dla parametrów ataku `attack:` i opadania `decay:` na poziomie 0, sampel przeskakuje bezpośrednio do pełnej amplitudy, przechodzi w fazę podtrzymania na 0s, po czym zanika z powrotem do amplitudy równej zero, przy czym czas zanikania to 0.75s.

en: Percussive cymbals
pl: Talerze perkusyjne

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`:
pl: Możemy wykorzystać to zachowanie, aby uzyskać dobry efekt, sprawiając, że sample trwające dłużej będą krótsze, bardziej perkusyjne. Przyjrzyjmy się samplowi `: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:
pl: Słyszysz dźwięk talerza, który brzmi przez chwilę czasu. Możemy jednak skorzystać z naszej obwiedni, aby sprawić, by ten dźwięk stał się bardziej perkusyjny:

en: You can then emulate hitting the cymbal and then dampening it by increasing the sustain period:
pl: Następnie możesz spróbować zasymulować uderzenie w talerz i stłumienie go poprzez zwiększenie wartości parametru podtrzymania:

en: Now go and have fun putting envelopes over the samples. Try changing the rate too for really interesting results.
pl: A teraz spróbuj się pobawić, nakładając obwiednie na sample. Próbuj również zmieniać wartości różnych parametrów obwiedni, aby otrzymać naprawdę ciekawe rezultaty.

en: 3.5 Partial Samples
pl: 3.5 Kawałki Sampli

en: Partial Samples
pl: Kawałki Sampli

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:
pl: Ta sekcja sfinalizuje nasze odkrywanie odtwarzacza sampli dostępnego w Sonic Pi. Zróbmy szybkie podsumowanie: do tej pory wiemy już, w jaki sposób uruchamiać sample:

en: We then looked at how we can change the rate of samples such as playing them at half speed:
pl: Następnie dowiedzieliśmy się, w jaki sposób można zmieniać parametry sampli, aby przykładowo zagrać wybraną próbkę w tempie równym połowie normalnego:

en: Next, we looked at how we could fade a sample in (let's do it at half speed):
pl: Kolejną rzeczą, jakiej się nauczyliśmy, była umiejętność stopniowego wchodzenia sampla (spróbujmy zrobić to dla sampla zagranego w połowie jego normalnego tempa):

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:
pl: Dowiedzieliśmy się również, że za pomocą podania konkretnych krótkich wartości dla parametrów podtrzymania `sustain:` oraz ataku, możemy uzyskać perkusyjne brzmienie:

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?
pl: Jednakże czy nie byłoby fajnie, gdybyśmy nie musieli zawsze zaczynać odtwarzania sampla od jego początku? Gdybyśmy nie musieli też zawsze kończyć odtwarzania sampla dopiero w momencie jego końca?

en: Choosing a starting point
pl: Wybór momentu startu

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:
pl: Możliwe jest wybranie bezwzględnego momentu startu, od którego uruchomimy sampel za pomocą podania liczby o wielkości od 0 do 1, gdzie 0 to początek sampla, 1 oznacza koniec sampla, a 0.5 to połowa sampla. Spróbujmy zagrać tylko drugą połowę sampla amen break:

en: How about the last quarter of the sample:
pl: A teraz spróbujmy zagrać ostatnią ćwiartkę sampla:

en: Choosing a finish point
pl: Wybór momentu zakończenia

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:
pl: Analogicznie jest również możliwy wybór bezwzględnego momentu końca odtwarzania sampla za pomocą wartości pomiędzy 0 a 1. Spróbujmy skończyć sampel amen break w połowie czasu:

en: Specifying start and finish
pl: Ustawianie startu i zakończenia

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:
pl: Nic nam nie stoi na przeszkodzie, abyśmy połączyli oba powyższe parametry, by zagrać wybrane kawałki z danego sampla. Co powiesz na wycięcie tylko małego fragmentu ze środka?:

en: What happens if we choose a start position after the finish position?
pl: Co się stanie, jeśli ustawimy moment startu, tak aby znajdował się po momencie końca?

en: Cool! It plays it backwards!
pl: Świetnie! Wybrany kawałek jest odtwarzany od końca!

en: Combining with rate
pl: Łączenie z tempem

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:
pl: Możemy teraz połączyć tę nową możliwość odtwarzania wybranych części dźwięku z naszym starym dobrym znajomym parametrem tempa `rate:`. Przykładowo możemy zagrać bardzo mały kawałek ze środka sampla amen break w bardzo wolnym tempie:

en: Combining with envelopes
pl: Łączenie z obwiedniami

en: Finally, we can combine all of this with our ADSR envelopes to produce interesting results:
pl: Na sam koniec możemy połączyć wszytkie powyższe możliwości z naszą obwiednią ADSR, aby stworzyć bardzo ciekawe rezultaty:

en: Now go and have a play mashing up samples with all of this fun stuff...
pl: A teraz idź i spróbuj pobawić się, zmieniając sample, wykorzystując cały ten kram...

en: 3.6 External Samples
pl: 3.6 Sample Zewnętrzne

en: External Samples
pl: Sample Zewnętrzne

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.
pl: Podczas gdy wbudowane sample pomogą Ci zacząć dość szybko, być może chciałbyś poeksperymentować z innymi nagraniami, które posiadasz w swojej bibliotece muzycznej. Sonic Pi całkowicie to wspiera. Zanim jednak pokażemy, jak można tego dokonać, przeprowadźmy krótką dyskusję dotyczącą przenośności Twoich utworów.

en: Portability
pl: Przenośność

en: When you compose your piece purely with built-in synths and samples, the code is all you need to faithfully reproduce your music. Think about that for a moment - that's amazing! A simple piece of text you can email around or stick in a [Gist](https://gist.github.com) represents everything you need to reproduce your sounds. That makes it *really easy to share* with your friends as they just need to get hold of the code.
pl: Kiedy komponujesz swoje utwory, opierając się tylko i wyłącznie na wbudowanych syntezatorach i samplach, kod to jedyna rzecz, która jest niezbędna, aby wiernie odtworzyć Twoją muzykę. Pomyśl o tym przez chwilę - to jest niesamowite! Prosty kawałek tekstu, który możesz wysłać pocztą lub trzymać jako [Gist](https://gist.github.com), przedstawia wszystko, czego potrzebujesz, aby odtworzyć Twoje kawałki. Takie podejście sprawia, że *dzielenie się tą muzyką z Twoimi znajomymi jest naprawdę proste*, gdyż jedyne, co muszą zrobić, to zdobyć kod.

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.
pl: Jednakże gdy zaczniesz używać swoich własnych sampli, stracisz tę przenośność. Stanie się tak dlatego, gdyż do odtworzenia Twojej muzyki inni ludzie będą potrzebować nie tylko Twojego kodu - będą potrzebować również Twoich sampli. Takie podejście ogranicza innymi możliwość manipulowania, zmieniania i eksperymentowania z Twoją pracą. Oczywiście nie powinno to powstrzymać Cię od używania własnych sampli - to tylko coś, co musisz wziąć pod uwagę, gdy się na to zdecydujesz.

en: Local Samples
pl: Sample Lokalne

en: Sonic Pi will automatically load and play the sample. You can also pass all the standard params you're used to passing `sample`:
pl: Sonic Pi automatycznie załaduje i zagra wybrany sampel. Możesz również przekazać wszystkie standardowe parametry, które do tej pory przekazywałeś do polecenia `sample`:

en: 3.7 Sample Packs
pl: 3.7 Paczki z samplami

en: Sample Packs
pl: Paczki z samplami

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.**
pl: **Uwaga: Ten rozdział samouczka omawia kwestię pracy z dużymi katalogami zawierającymi Twoje sample. Jest to przypadek, w którym pobrałeś lub kupiłeś swoje własne paczki z samplami i chciałbyś ich użyć w Sonic Pi.**

en: **Feel free to skip this if you're happy working with the built-in samples.**
pl: **Możesz spokojnie pominąć ten rozdział, jeśli wystarcza Ci zestaw sampli domyślnie dostarczonych z Sonic Pi.**

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.
pl: Kiedy pracujemy z katalogami zawierającymi duże ilości zewnętrznych sampli, wpisywanie ścieżki do każdego pliku może być bardzo uciążliwe.

en: For example, say you have the following folder on your machine:
pl: Na przykład przypuśćmy, że masz na swoim komputerze następujący folder:

en: When we look inside that folder we find the following samples:
pl: Kiedy zajrzymy do tego katalogu, znajdziemy w nim następujące sample:

en: Typically in order to play the piano sample we can use the full path:
pl: Zazwyczaj, jeśli chcielibyśmy użyć sampla pianino (piano), możemy użyć pełnej ścieżki do danego pliku:

en: If we want to then play the guitar sample we can use its full path too:
pl: Jeśli chcemy później użyć sampla o brzmieniu gitary (guitar), to też możemy użyć pełnej ścieżki:

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?
pl: Jednakże w obu tych przypadkach polecenie sample wymaga od nas, żebyśmy *znali* nazwy sampli znajdujących się w naszym katalogu. A co, jeśli chcielibyśmy tylko szybko przesłuchać każdy z nich?

en: Indexing Sample Packs
pl: Sporządzanie indeksu dla paczki z samplami

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:
pl: Jeśli chcemy pierwszy sampel znajdujący się w danym katalogu, wystarczy, że przekażemy do polecenia `sample` nazwę tego katalogu oraz indeks `0`, tak jak poniżej:

en: We can even make a shortcut to our directory path using a variable:
pl: Możemy nawet stworzyć skrót do naszego katalogu, używając zmiennej:

en: Now, if we want to play the second sample in our directory, we just need to add 1 to our index:
pl: Teraz, jeśli chcielibyśmy zagrać drugi sampel z naszego katalogu, wystarczy, że do naszego indeksu dodamy 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.
pl: Zauważ, że nie potrzebujemy znać nazw sampli znajdujących się naszym katalogu - musimy tylko wiedzieć, gdzie znajduje się ten katalog (lub posiadać skrót do niego). Jeśli użyjemy indeksu, który jest większy niż ilość sampli w danym katalogu, to wrócimy znowu do pierwszego sampla, tak samo jak w przypadku pracy z pierścieniami. Dlatego też niezależnie od tego, jakiej liczby użyjemy, to zawsze mamy zagwarantowane, że otrzymamy jakiegoś sampla znajdującego się w naszym katalogu.

en: Filtering Sample Packs
pl: Filtrowanie paczek z samplami

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:
pl: Zazwyczaj indeksowanie jest wystarczające, ale czasami potrzebujemy więcej możliwości, aby móc sortować i organizować nasze sample. Na szczęście wiele paczek z samplami umieszcza przydatne informacje w nazwach poszczególnych gotowców. Spójrzmy jeszcze raz na ich nazwy znajdujące się w naszym katalogu:

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.
pl: Zauważ, że nazwy plików zawierają całkiem sporo informacji. Po pierwsze mamy informację o tempie sampla wyrażonym w BPM (ilość uderzeń na minutę, z ang. beats per minute). Widać więc, że sampel z dźwiękiem pianina ma 120 BPM, a pozostałe trzy próbki mają po 100 BPM. Ponadto nazwy sampli zawierają informację o tonacji. Sampel z gitarą ma więc tonację B mol (Bb), a pozostałe melodie są w tonacji A fis (A#). Informacje te są bardzo przydatne, gdy chcemy użyć danego sampla w naszym kodzie. Na przykład wiemy, że możemy użyć sampla z pianinem tylko wtedy, gdy nasz kod ma tempo 120 BPM i jest w tonacji B mol (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:
pl: Okazuje się, że możemy użyć tej specyficznej konwencji nazewnictwa dla naszych sampli w kodzie, żeby móc filtrować i znajdywać te, których właśnie potrzebujemy. Na przykład jeśli akurat pracujemy w tempie 120 BPM, to możemy odfiltrować tylko takie sample, które posiadają ciąg znaków `"120"` w następujący sposób:

en: This will play us the first match. If we want the second match we just need to use the index:
pl: Spowoduje to, że zagramy pierwszy pasujący do tego wzorca dźwięk. Jeśli chcemy drugi sampel, który pasuje do tego wzorca, wystarczy, że użyjemy indeksu:

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:
pl: Możemy nawet użyć kilku filtrów jednocześnie. Na przykład jeśli chcemy wszystkie sample, których nazwa pliku zawiera zarówno ciąg znaków `"120"` oraz `"A#"`, możemy znaleźć je bardzo łatwo, wykorzystując taki kawałek kodu:

en: Finally, we're still free to add our usual opts to the call to `sample`:
pl: Oczywiście wciąż możemy dodawać do poleceń `sample` nasze standardowe opcje:

en: Sources
pl: Źródła

en: The sample filter pre-arg system understands two types of information: *sources* and *filters*. Sources are information used to create the list of potential candidates. A source can take two forms:
pl: System wstępnego przetwarzania parametrów dla funkcji filtrującej sample rozumie dwa typy informacji: *źródła* oraz *filtry*. Źródła są informacją wykorzystywaną do stworzenia listy potencjalnych kandydatów. Źródło może przyjmować 2 formy:

en: `"/path/to/samples"` - a string representing a valid path to a directory
pl: `"/ścieżka/do/sampli"` - ciąg znaków reprezentujący poprawną ścieżkę do katalogu

en: `"/path/to/samples/foo.wav"` - a string representing a valid path to a sample
pl: `"/ścieżka/do/sampli/foo.wav"` - ciąg znaków reprezentujący poprawną ścieżkę do sampla

en: For example, take a look at the following code:
pl: Dla przykładu przyjrzyjmy się następującemu kawałkowi kodu:

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).
pl: W powyższym przykładzie łączymy wykorzystanie sampli znajdujących się w dwóch katalogach oraz dodanie jednego konkretnego sampla. Jeśli `"/path/to/my/samples/"` zawiera 3 sample, a `"/path/to/my/samples2/"` zawiera 12, to mamy w sumie 16 potencjalnych sampli do dodania do naszego indeksu i filtrów (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:
pl: Domyślnie, tylko do listy kandydatów zostają dołączone tylko sample znajdujące się w danym katalogu. Czasami może się zdarzyć, że będziesz posiadał wiele zagnieżdżonych katalogów z samplami, które chciałbyś móc przeszukiwać i filtrować. Możesz wykonać wyszukiwanie rekurencyjne wszystkich sampli we wszystkich podfolderach danego katalogu poprzez dodanie na końcu ścieżki `**`:

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.
pl: Przeglądanie i wyszukiwanie sampli wśród wielu katalogów może zająć sporo czasu. Jednakże zawartość wszystkich katalogów jest buforowana, opóźnienie wystąpi więc tylko za pierwszym razem.

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.
pl: Na koniec zauważ, że źródła *muszą iść jako pierwsze*. Jeśli żadne źródła nie zostaną podane, wtedy zestaw wbudowanych sampli będzie wybrany jako domyślna lista kandydatów, z którymi będziesz pracować.

en: Filters
pl: Filtry

en: Once you have a list of candidates you may use the following filtering types to further reduce the selection:
pl: Gdy już masz listę kandydatów, możesz wtedy użyć następującego filtrowania typów, aby ograniczyć wybór:

en: `"foo"` Strings will filter on substring occurrence within file name (minus directory path and extension).
pl: `"foo"` Ciągi znaków filtrują podzbiór znaków występujących w danej nazwie pliku (z pominięciem ścieżki katalogu oraz rozszerzenia).

en: `/fo[oO]/` Regular Expressions will filter on pattern matching of file name (minus directory path and extension).
pl: `/fo[oO]/` Wyrażenie Regularne odfiltruje wszystkie nazwy plików pasujące do podanego wzorca (pomijając ścieżkę do pliku i rozszerzenie).

en: `:foo` - Keywords will filter candidates on whether the keyword is a direct match of the filename (minus directory path and extension).
pl: `:foo` - Słowa kluczowe odfiltrują kandydatów, dla których słowo kluczowe jest dokładnym dopasowaniem do nazwy pliku (bez ścieżki do katalogu i rozszerzenia tego pliku).

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).
pl: `lambda{|a| ... }` - Prócz z jednym argumentem będą traktowane jako kandydat do odfiltrowania lub jako funkcja generującą. Zostanie do niej przekazana lustra aktualnych kandydatów i musi sycić nową listę kandydatów (listę poprawnych ścieżek do plików z samplami).

en: `1` - Numbers will select the candidate with that index (wrapping round like a ring if necessary).
pl: `1` - Liczby spowodują wybranie kandydata pod podanym indeksem (zataczając rundę tak jak pierścień, jeśli będzie to konieczne).

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:
pl: Na przykład możemy odfiltrować wszystkie sample z danego katalogu, które zawierają ciąg znaków `"foo"` i zagrać pierwszy pasujący sampel z prędkością równej połowie normalnego tempa:

en: See the help for `sample` for many detailed usage examples. Note that the ordering of the filters is honoured.
pl: Zajrzyj do pomocy, gdzie opisane jest polecenie `sample`, żeby zobaczyć wiele szczegółowych przykładów użycia. Zwróć uwagę na to, iż kolejność nakładania filtrów ma znaczenie.

en: Composites
pl: Kompozyty (obiekty złożone)

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:
pl: I na koniec chciałbym, żebyś wiedział, że wszędzie tam, gdzie wykorzystujesz źródła i filtry, możesz użyć list. Lista zostanie automatycznie spłaszczona, a jej zawartość zostanie użyta w taki sam sposób jak regularne źródła i filtry. Dlatego też poniższe użycia polecenia `sample` są semantycznie tożsame:

en: sample "/path/to/dir", "100", "C#"
    sample ["/path/to/dir", "100", "C#"]
    sample "/path/to/dir", ["100", "C#"]
    sample ["/path/to/dir", ["100", ["C#"]]]
pl: sample "/path/to/dir", "100", "C#"
    sample ["/path/to/dir", "100", "C#"]
    sample "/path/to/dir", ["100", "C#"]
    sample ["/path/to/dir", ["100", ["C#"]]

en: Wrapping Up
pl: Pakowanie

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.
pl: To była zaawansowana sekcja dla osób, które potrzebują potężnego narzędzia do manipulacji paczkami sampli. Nie przejmuj się, jeśli znaczna część tej sekcji jest dla Ciebie niezrozumiała. Bardzo prawdopodobne jest to, że na razie nie będzie Ci to do niczego potrzebne. Jednak będziesz tego wymagał, kiedy nadejdzie odpowiednia pora. Możesz wtedy wrócić do tej sekcji i ponownie przeczytać, w jaki sposób można radzić sobie z dużymi katalogami sampli.

en: 4 Randomisation
pl: 4 Losowość

en: Randomisation
pl: Losowość

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.
pl: Wspaniałym sposobem, aby dodać odrobine intrygi do Twojej muzyki, jest wykorzystanie paru losowych liczb. Sonic Pi posiada kilka fajnych funkcjonalności, które umożliwiają dodanie przypadkowości do Twojej muzyki. Zanim jednak zaczniemy, musimy nauczyć się jednej szokującej prawdy: w Soni Pi *losowość nie jest tak naprawdę losowa*. Co to do diaska znaczy? No cóż, zobaczmy.

en: Repeatability
pl: Powtarzalność

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:
pl: Bardzo przydatną funkcją do generowania liczb losowych jest `rrand`, która zwróca losową wartość pomiędzy dwoma liczbami - minimum *min* i maksimum *max*. (`rrand` to skrót od angielskiego ranged random - liczba losowa z określonego przedziału). Spróbujmy zagrać losową nutę:

en: play rrand(50, 95)
pl: play rrand(50, 100)

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!
pl: Och, została zagrana losowa nuta - to `77.4407`. Fajna liczba losowa pomiędzy 50 a 100. Zaraz zaraz, czy przypadkiem nie zgadłem dokładnej wartości losowej nuty, którą przed chwilą otrzymałeś? Dzieje się tu coś podejrzanego... Spróbuj uruchomić kod ponownie. I co? Znowu została wybrana liczba `77.4407`? Toć to nie jest liczba losowa!

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.
pl: Odpowiedzią jest fakt, że tak naprawdę wynik nie jest losowy, jest pseudo losowy. Sonic Pi wygeneruje dla Ciebie liczby, które wyglądają jak losowe, lecz w sposób powtarzalny. Takie podejście jest bardzo przydatne, jeśli chcesz być pewny, że muzyka, którą tworzysz na swojej maszynie, będzie brzmieć identycznie na każdym innym komputerze - nawet jeśli używasz w swojej kompozycji pewnej losowości.

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:
pl: Oczywiście, jeśli w danym utworze ta 'losowo wybrana liczba' będzie za każdym razem miała wartość `77.4407`, to nie będzie to zbyt interesujące. Jednakże jest inaczej. Spróbuj poniższego kawałka kodu:

en: loop do
      play rrand(50, 95)
      sleep 0.5
    end
pl: loop do
      play rrand(50, 100)
      sleep 0.5
    end

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!
pl: Tak! Wreszcie uzyskaliśmy losowe dźwięki. W ramach danego *uruchomienia* kolejnych wywołań funkcji losującej zostaną zwrócone wartości losowe. Jednakże kolejne uruchomienie spowoduje wyprodukowanie dokładnie takiej samej sekwencji losowych wartości i brzmienie będzie takie same, jak przy pierwszym uruchomieniu. To tak, jakby cały kod Sonic Pi cofnął się w czasie dokładnie do tego samego punktu za każdym razem, gdy zostaje wciśnięty przycisk Run (Uruchom). Toć to Dzien Świstaka dla syntezy muzycznej!

en: Haunted Bells
pl: Haunted Bells (Nawiedzone Dzwony)

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:
pl: Piękną ilustracją randomizacji w akcji jest przykład nawiedzonych dzwonów (Haunted Bells), który zapętla sampel `:perc_bell`, nadając mu przy tym losowe tempo (parametr rate) oraz czas przerwy (polecenie sleep) pomiędzy poszczególnymi dźwiękami dzwonów:

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

en: Random cutoff
pl: Losowe odcięcie

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:
pl: Innym ciekawym przykładem losowości jest modyfikacja odcięcia syntezatora losowo. Świetnym syntezatorem, na którym możemy tego spróbować, jest emulujący `:tb303`:

en: Random seeds
pl: Losowe zarzewie

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!
pl: A co, jeśli nie podoba Ci się ta konkretna sekwencja liczb losowych, które generuje Sonic Pi? Nic nie stoi na przeszkodzie, abyś wybrał inny punkt rozpoczęcia za pomocą polecenia `use_random_seed`. Domyślną wartością dla funkcji odsiewu (seed) jest 0, zatem wybierz różny odsiew dla różnych doświadczeń losowych!

en: Consider the following:
pl: Weźmy pod uwagę poniższy przykład:

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:
pl: Za każdym razem, gdy uruchomisz powyższy kod, usłyszysz sekwencję tych samych 5-ciu nut. Aby uzyskać inną sekwencję, wystarczy zmienić wartość odsiewu (seed):

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.
pl: Spowoduje to wygenerowanie sekwencji 5-ciu innych losowych nut. Zmieniając parametr odsiewu (seed) i słuchając wyników, jakie to spowodowało, możesz w końcu znaleźć taką sekwencję, która Ci się spodoba - a gdy wtedy podzielisz się nią z innymi, usłyszą oni dokładnie to samo co Ty.

en: Let's have a look at some other useful random functions.
pl: A teraz przyjrzyjmy się kilku innym, przydatnym funkcjom generującym wartości losowe.

en: choose
pl: choose (wybierz)

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`:
pl: Bardzo popularną rzeczą jest wybór losowego obiektu z listy znanych nam obiektów. Przykładowo mogę chcieć zagrać jedną z następujących nut: 60, 65 lub 72. Żeby to osiągnąć, mogę użyć funkcji `choose`, która pozwala mi na wybór jednego obiektu z istniejącej listy obiektów. Po pierwsze, muszę wsadzić moje liczby (nuty) do listy. Aby tego dokonać, wystarczy, że opakujemy nasze liczby w nawiasy kwadratowe i oddzielimy każdą z nich przecinkiem: `[60, 65, 72]`. Następnie wystarczy przekazać je jako parametr do polecenia `choose`:

en: Let's hear what that sounds like:
pl: Posłuchajmy zatem, jak to brzmi:

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)`:
pl: Widzieliśmy już w akcji funkcję `rrand`, ale spróbujmy uruchomić ją raz jeszcze. Zwraca ona losową liczbę z podanego przedziału, który jest w tym wypadku przedziałem otwartym. Oznacza to, że żadna z podanych liczb, jako wartości minimalna i maksymalna, nigdy nie zostanie zwrócona - zawsze coś pomiędzy tymi dwoma liczbami. Zwrócona liczba będzie liczbą zmiennoprzecinkową - oznacza to, że nie jest to liczba całkowita, tylko ułamek. Oto kilka przykładów liczb zmiennoprzecinkowych zwracanych przez polecenie `rrand(20,110)`:

en: Occasionally you'll want a whole random number, not a float. This is where `rrand_i` comes to the rescue. It works similarly to `rrand` except it may return the min and max values as potential random values (which means it's inclusive rather than exclusive of the range). Examples of numbers returned by `rrand_i(20, 110)` are:
pl: Sporadycznie może się zdarzyć, że będziesz potrzebował liczbę losową, która jest liczbą całkowitą, a nie zmiennoprzecinkową. W tym przypadku z pomocą przychodzi polecenie `rrand_i`. Polecenie to działa bardzo podobnie do `rrand`, z tą jednak różnicą, że może zwracać też liczbę minimalną i maksymalną z podanego przedziału jako potencjalna wartość losowa (co oznacza, że podawany przedział jest domknięty, a nie otwarty). Poniżej przykłady liczb losowych, które mogą zostać zwrócone przez polecenie `rrand_i(20, 110)`:

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:
pl: Te polecenie zwraca losową liczbę zmiennoprzecinkową pomiędzy 0 (przedział domknięty) a maksymalną liczbą, którą podajesz jako parametr (przedział otwarty). Domyślnie (jeśli nie podamy parametru) zostanie zwrócona liczba z przedziału od 0 do 1. Warto zauważyć, że polecenie to może być bardzo użyteczne do ustawiania losowego poziomu amplitudy `amp:`:

en: Similar to the relationship between `rrand_i` and `rrand`, `rand_i` will return a random whole number between 0 and the max value you specify.
pl: Przy tym poleceniu mamy relację podobną jak w przypadku poleceń `rrand_i` i `rrand`. Polecenie `rand_i` zwraca losową liczbę całkowitą z zakresu od 0 do maksymalnej wartości, którą podasz.

en: dice
pl: dice (kostka do gry)

en: Sometimes you want to emulate a dice throw - this is a special case of `rrand_i` where the lower value is always 1. A call to `dice` requires you to specify the number of sides on the dice. A standard dice has 6 sides, so `dice(6)` will act very similarly - returning values of either 1, 2, 3, 4, 5, or 6. However, just like fantasy role-play games, you might find value in a 4 sided dice, or a 12 sided dice, or a 20 sided dice - perhaps even a 120 sided dice!
pl: Czasami chciałbyś zasymulować rzut kostką - jest to specyficzny przypadek dla polecenia `rrand_i`, dla którego najniższa liczba to zawsze 1. Uruchomienie polecenia rzut kostką `dice` wymaga, abyś podał liczbę oczek na kostce. Standardowa kostka ma 6 oczek, więc polecenie `dice(6)` zachowa się bardzo podobnie - każde uruchomienie będzie zwracać jedną z wartości 1, 2, 3, 4, 5 lub 6. Jednakże tak samo jak w grach RPG (role-playing games) może się zdarzyć, że będziesz potrzebować kostki o 4 oczkach albo o 12, albo o 20 - być może będziesz potrzebować nawet kostki, która będzie miała 120 oczek!

en: Finally you may wish to emulate throwing the top score of a dice such as a 6 in a standard dice. `one_in` therefore returns true with a probability of one in the number of sides on the dice. Therefore `one_in(6)` will return true with a probability of 1 in 6 or false otherwise. True and false values are very useful for `if` statements which we will cover in a subsequent section of this tutorial.
pl: Na koniec może się zdarzyć, że będziesz chciał zasymulować wyrzucenie najlepszego wyniku dla danej kostki, np. 6 oczek dla standardowej kostki. Polecenie `one_in` zwraca prawdę (true) z prawdopodobieństwem, że zostało wyrzucone jedno oczko. Idąc dalej, polecenie `one_in(6)` zwróci prawdę (true) z prawdopodobieństwem 1 do 6-ciu lub fałsz. Wartości prawda (true) i fałsz (false) są bardzo przydatne przy korzystaniu z polecenie warunkowego `if`, które omówimy w jednej z kolejnych sekcji tego tutoriala.

en: Now, go and jumble up your code with some randomness!
pl: A teraz spróbuj trochę zagmatwać Twój kod i muzykę odrobiną losowości!

en: 5 Programming Structures
pl: 5 Konstrukcje Programistyczne

en: Programming Structures
pl: Konstrukcje Programistyczne

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...
pl: Teraz, kiedy nauczyłeś się podstaw tworzenia dźwięków z wykorzystaniem poleceń `play` i `sample` oraz utworzyłeś swoje pierwsze proste melodie i rytmy, korzystając z polecenia `sleep` do tworzenia odstępów między poszczególnymi dźwiękami, zastanawiasz się zapewne, co takiego może Ci jeszcze zaoferować świat kodowania...

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.
pl: Dobrze, jesteś przygotowany na ekscytującą ucztę. Okazuje się, że proste konstrukcje programistyczne takie jak pętle (looping), instrukcje warunkowe oraz funkcje mogą stać się dla Ciebie niesamowicie potężnymi narzędziami do wyrażenia Twoich muzycznych pomysłów.

en: Let's get stuck in with the basics...
pl: Zakasaj rękawy i zabieramy się do podstaw...

en: 5.1 Blocks
pl: 5.1 Bloki kodu

en: Blocks
pl: Bloki kodu

en: A structure you'll see a lot in Sonic Pi is the block. Blocks allow us to do useful things with large chunks of code. For example, with synth and sample parameters we were able to change something that happened on a single line. However, sometimes we want to do something meaningful to a number of lines of code. For example, we may wish to loop it, to add reverb to it, to only run it 1 time out of 5, etc. Consider the following code:
pl: Struktura, którą będzie Ci dane zobaczyć w Sonic Pi niezwykle często, to blok kodu. Bloki pozwalają nam na robienie wielu przydatnych rzeczy z dużymi kawałkami kodu. Na przykład w przypadku parametrów syntezatorów i sampli byliśmy w stanie zmieniać coś, co działo się w obrębie jednej linii. Jednakże czasami chcielibyśmy zrobić coś znaczącego dla kilku linii kodu. Przykładowo chcielibyśmy zapętlić coś, potem nałożyć na to efekt reverb, tak żeby uruchomił się tylko przy 1-wszym przebiegu pętli z wszystkich 5-ciu, itd. Przyjrzyj się poniższemu kawałkowi kodu:

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:
pl: Abyśmy mogli zrobić coś z kawałkiem kodu, musimy powiedzieć Sonic Pi, gdzie *zaczyna się* i *kończy* dany blok kodu. Aby określić początek takiego bloku, używamy polecenia *do*, natomiast polecenie *end* służy do określenia, gdzie dany blok się kończy. Na przykład `do`:

en: However, this isn't yet complete and won't work (try it and you'll get an error) as we haven't told Sonic Pi what we want to do with this *do/end block*. We tell Sonic Pi this by writing some special code before the `do`. We'll see a number of these special pieces of code later on in this tutorial. For now, it's important to know that wrapping your code within `do` and `end` tells Sonic Pi you wish to do something special with that chunk of code.
pl: Jednakże nie jest to jeszcze całość i nie zadziała (spróbuj uruchomić powyższy kod, a zobaczysz błąd), ponieważ nie powiedzieliśmy na razie Sonic Pi, co chcielibyśmy zrobić z naszym *blokiem* zawartym pomiędzy poleceniami *do/end*. Aby to zrobić, musimy napisać kawałek specjalnego kodu przed poleceniem `do`. Zobaczysz jeszcze wiele takich różnych specjalnych kawałków kodu w kolejnych sekcjach tego samouczka. Na razie najważniejsze jest, abyś wiedział, że umieszczenie Twojego kodu pomiędzy polecenia `do` i `end`, mówi Sonic Pi, że chciałbyś zrobić z tym kawałkiem kodu coś specjalnego.

en: 5.2 Iteration and Loops
pl: 5.2 Iteracja i Pętle

en: Iteration and Loops
pl: Iteracja i Pętle

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`.
pl: Do tej pory spędziliśmy sporo czasu, patrząc na różne dźwięki, które możesz zrobić użyciem bloków `play` i `sample`. Nauczyliśmy się również, w jaki sposób je uruchamiać na przestrzeni czasu, używając polecenia `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.
pl: Jak zapewne już zauważyłeś, przy korzystaniu z tych kilku podstawowych bloków możesz mieć *całą masę frajdy*. Jednakże kiedy zaczniesz wykorzystywać możliwości kodu do porządkowania Twojej muzyki i kompozycji, Twoim oczom ukaże się zupełnie nowy wymiar możliwości i zabawy. W najbliższych kilku sekcjach poznasz kilka z tych potężnych narzędzi. Na początek zaczniemy od iteracji i pętli.

en: Repetition
pl: Powtórzenie

en: Have you written some code you'd like to repeat a few times? For example, you might have something like this:
pl: Czy zdarzyło Ci się napisać kawałek kodu, który chciałbyś powtórzyć kilka razy? Przypuśćmy, że napisałeś coś w tym stylu:

en: What if we wished to repeat this 3 times? Well, we could do something simple and just copy and paste it three times:
pl: Co, jeśli chciałeś, aby powyższy kawałek powtórzył się 3 razy? Najprostszą rzeczą, którą mógłbyś zrobić, to po prostu skopiować i wkleić powyższy kawałek kodu trzy razy:

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.
pl: Zobacz, ile kodu! Pomyśl, co trzeba by było zrobić, gdybyś chciał zmienić sampel na `:elec_plip`? Musiałbyś wtedy znaleźć w kodzie wszystkie miejsca, gdzie użyłeś oryginalnego sampla `:elec_blup`, a zmienić je ręcznie. Ale to i tak nic. Pomyśl, co by było, gdybyś chciał powtórzyć oryginalny blok kodu 50 albo 1000 razy? Dopiero teraz byłoby to dużo kodu, bardzo dużo kodu, który musiałbyś zmienić, gdybyś chciał dokonać tak prostej zmiany, jak przełączenie się na inny sampel.

en: Iteration
pl: Iteracja

en: In fact, repeating the code should be as easy as saying *do this three times*. Well, it pretty much is. Remember our old friend the code block? We can use it to mark the start and end of the code we'd like to repeat three times. We then use the special code `3.times`. So, instead of writing *do this three times*, we write `3.times do` - that's not too hard. Just remember to write `end` at the end of the code you'd like to repeat:
pl: W rzeczywistości powtórzenie kodu powinno być tak proste, jak powiedzenie *zrób to trzy razy*. Dobrze, w dużym stopniu tak jest. Pamiętasz naszego starego dobrego znajomego - blok kodu? Możemy użyć go, aby zaznaczyć miejsce początku i końca kodu, który chcielibyśmy powtórzyć 3 razy. Następnie wystarczy, że użyjemy specjalnego kawałka kodu `3.times` (3.razy). Zamiast więc napisać *zrób to trzy razy*, napiszemy `3.times do` - to nie jest zbyt trudne. Pamiętaj tylko, aby napisać polecenie `end` na końcu bloku kodu, który zamierzać powtórzyć:

en: Now isn't that much neater than cutting and pasting! We can use this to create lots of nice repeating structures:
pl: Przyznasz, że takie podejście jest dużo bardziej eleganckie niż kopiowanie i wklejanie! Możemy użyć tego specjalnego polecenia do tworzenia wielu fajnych powtarzających się struktur:

en: Nesting Iterations
pl: Zagnieżdżanie Iteracji

en: We can put iterations inside other iterations to create interesting patterns. For example:
pl: Możemy umieszczać jedne iteracje wewnątrz innych iteracji do utworzenia ciekawych wzorców. Na przykład:

en: Looping
pl: Zapętlanie

en: If you want something to repeat a lot of times, you might find yourself using really large numbers such as `1000.times do`. In this case, you're probably better off asking Sonic Pi to repeat forever (at least until you press the stop button!). Let's loop the amen break forever:
pl: Jeśli chcesz powtórzyć coś wiele razy, możesz złapać się na tym, że będziesz podawał naprawdę bardzo dużych liczb jako parametr iteracji, na przykład `1000.times do`. W takim przypadku zapewne dużo lepiej byłoby poprosić Sonic Pi, aby powtarzać dany wzorzec w nieskończoność (a przynajmniej do momentu, w którym naciśniesz przycisk Stop, żeby zatrzymać odtwarzanie!). Spróbujmy zapętlić w nieskończoność sampel amen break:

en: The important thing to know about loops is that they act like black holes for code. Once the code enters a loop it can never leave until you press stop - it will just go round and round the loop forever. This means if you have code after the loop you will *never* hear it. For example, the cymbal after this loop will never play:
pl: Bardzo ważną rzeczą do zapamiętania o pętlach jest to, że dla kodu mają one takie same zachowanie jak czarne dziury. Jak tylko kod raz już wejdzie w daną pętlę, może już jej nigdy nie opuścić, chyba że naciśniesz przycisk Stop - nasza pętla będzie się kręcić w kółko w nieskończoność. Oznacza to, iż jeśli masz jakiś kod, który jest umieszczony po pętli, to *nigdy* go nie usłyszysz. Na przykład talerz, który znajduje się poniżej poniższej pętli, nie zostanie zagrany nigdy:

en: Now, get structuring your code with iteration and loops!
pl: A teraz spróbuj poprawić strukturę Twojego kodu za pomocą iteracji i pętli!

en: 5.3 Conditionals
pl: 5.3 Instrukcje Warunkowe

en: Conditionals
pl: Instrukcje Warunkowe

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.
pl: Bardzo prawdopodobne jest, że często będziesz chciał zagrać nie tylko losową nutę (patrz poprzednia sekcja dot. losowości), lecz również będziesz miał zamiar podejmować losowe decyzje i na podstawie ich wyniku uruchomić taki lub inny kod. Na przykład mógłbyś chcieć, aby losowo zagrać bęben lub talerz perkusji. Możemy tego dokonać, używając polecenia warunkowego `if` (jeśli).

en: Flipping a Coin
pl: Rzut Monetą

en: So, let's flip a coin: if it's heads, play a drum, if it's tails, play a cymbal. Easy. We can emulate a coin flip with our `one_in` function (introduced in the section on randomness) specifying a probability of 1 in 2: `one_in(2)`. We can then use the result of this to decide between two pieces of code, the code to play the drum and the code to play the cymbal:
pl: Spróbujmy rzucić monetą: jeśli (if) wypadnie orzeł, zagraj bęben, a jeśli wypadnie reszka (else), zagraj talerz. Proste. Możemy zasymulować rzut monetą, wykorzystując naszą funkcję `one_in` (poznaliśmy ją w sekcji dotyczącej losowości), określając prawdopodobieństwo wyboru 1 z 2: `one_in(2)`. Następnie możemy użyć tego wyniku, aby wybrać do zagrania jeden z dwóch kawałków kodu - jeden, który zagra bęben i drugi, który zagra talerz:

en: Notice that `if` statements have three parts:
pl: Zauważ, że polecenie warunkowe `if` posiada 3 części:

en: The question to ask
pl: Postawienie pytania (warunku)

en: The first choice of code to run (if the answer to the question is yes)
pl: Pierwszy wybór kodu do uruchomienia (jeśli odpowiedź na nasze pytanie/warunek brzmi tak)

en: The second choice of code to run (if the answer to the question is no)
pl: Drugi wybór kodu do uruchomienia (jeśli odpowiedź na nasze pytanie/warunek brzmi nie)

en: Typically in programming languages, the notion of yes is represented by the term `true` and the notion of no is represented by the term `false`. So we need to find a question that will give us a `true` or `false` answer which is exactly what `one_in` does.
pl: Zazwyczaj w językach programowania pojęcie odpowiedzi "tak" jest reprezentowane przez termin `true` (prawda), natomiast pojęcie odpowiedzi "nie" - przez `false` (nieprawda, fałsz). Do nas więc należy znalezienie odpowiedniego pytania, którego zadanie zwróci nam odpowiedź `true` (prawda) lub `false` (fałsz). W tym przypadku naszym pytaniem jest uruchomienie funkcji `one_in`.

en: Notice how the first choice is wrapped between the `if` and the `else` and the second choice is wrapped between the `else` and the `end`. Just like do/end blocks you can put multiple lines of code in either place. For example:
pl: Zauważ, że pierwszy wybór jest wpasowany pomiędzy polecenia `if` (jeśli) a `else` (w przeciwnym razie), natomiast drugi wybór mieści się między `else` i `end` (koniec). Tak samo, jak w przypadku bloków kodu do/end, pomiędzy obiema tymi przestrzeniami możesz napisać wiele linii kodu. Oto przykład:

en: loop do
      if one_in(2)
        sample :drum_heavy_kick
        sleep 0.5
      else
        sample :drum_cymbal_closed
        sleep 0.25
      end
      
    end
pl: loop do
      if one_in(2)
        sample :drum_heavy_kick
        sleep 0.5
      else
        sample :drum_cymbal_closed
        sleep 0.25
      end
    end

en: This time we're sleeping for a different amount of time depending on which choice we make.
pl: Tym razem, w zależności od tego, jaka decyzja została wylosowana, śpimy (`sleep`) przez różne długości czasu.

en: Simple if
pl: Proste polecenie if

en: Sometimes you want to optionally execute just one line of code. This is possible by placing `if` and then the question at the end. For example:
pl: Czasami chciałbyś wykonać opcjonalnie tylko jedną określoną linię kodu. Aby to osiągnąć, wystarczy umieścić polecenie `if` wraz z naszym pytaniem (warunkiem) na końcu tej linii. Oto przykład:

en: This will play chords of different numbers with the chance of each note playing having a different probability.
pl: Powyższy kod zagra akordy złożone z różnych liczb. Szansa na to, że każda z podanych nut zostanie zagrana, jest różna, gdyż wszystkie linijki (oprócz pierwszej) są opatrzone warunkiem o różnym prawdopodobieństwie wystąpienia.

en: 5.4 Threads
pl: 5.4 Wątki

en: Threads
pl: Wątki

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.
pl: A więc udało Ci się przygotować zabójczy bassline oraz tłusty beat. W jaki sposób możesz zagrać je w tym samym czasie? Jednym z możliwych rozwiązań jest przeplecenie ich razem ręcznie - najpierw zagrać jakiś bas, potem trochę bębnów, potem znowu bas... Jednakże bardzo szybko chronometraż stanie się czymś, o czym będzie ciężko myśleć, zwłaszcza kiedy zaczniemy wplatać do naszej kompozycji kolejne elementy.

en: What if Sonic Pi could weave things for you automatically? Well, it can, and you do it with a special thing called a *thread*.
pl: A co, jeśli Sonic Pi mógłby przeplatać różne elementy za Ciebie automagicznie? Takie coś jest możliwe i możesz to robić, używając specjalnego polecenia nazywanego wątkiem - *thread*.

en: Infinite Loops
pl: Nieskończone Pętle

en: To keep this example simple, you'll have to imagine that this is a phat beat and a killer bassline:
pl: Aby sprawić, by kolejny przykład był prosty, musisz sobie wyobrazić, jak wygląda ten tłusty beat i zabójczy bassline:

en: As we've discussed previously, loops are like *black holes* for the program. Once you enter a loop you can never exit from it until you hit stop. How do we play both loops at the same time? We have to tell Sonic Pi that we want to start something at the same time as the rest of the code. This is where threads come to the rescue.
pl: Jak już wcześniej mówiliśmy, pętle są jak *czarne dziury* dla naszych programów. Gdy już raz wejdziesz do pętli, nie wyjdziesz z niej nigdy, chyba że naciśniesz przycisk Stop. W jaki zatem sposób możemy zagrać obie pętle jednocześnie? Musimy powiedzieć Sonic Pi, że chcemy rozpocząć coś w tym samym czasie, gdy uruchamiamy pozostały kod. To jest właśnie moment, w którym z pomocą przychodzą nam Wątki (ang. threads).

en: Threads to the Rescue
pl: Wątki na Ratunek

en: By wrapping the first loop in an `in_thread` do/end block we tell Sonic Pi to run the contents of the do/end block at *exactly* the same time as the next statement after the do/end block (which happens to be the second loop). Try it and you'll hear both the drums and the bassline weaved together!
pl: Jeśli otoczymy pierwszą pętlę blokiem kodu do/end `in_thread`, to w ten sposób powiemy Sonic Pi, żeby uruchomił zawartość tego bloku do/end *dokładnie* w tym samym czasie, gdy zostają uruchomione kolejne polecenia znajdujące się tuż za blokiem kodu (w tym przypadku jest to druga pętla). Spróbuj uruchomić ten kod, a usłysz jednocześnie bębny oraz bassline, które są przeplecione i grają jednocześnie!

en: Now, what if we wanted to add a synth on top. Something like:
pl: A co teraz, jeśli chcielibyśmy dodać jeszcze jakiś syntezator (synth)? Coś w tym stylu:

en: Now we have the same problem as before. The first loop is played at the same time as the second loop due to the `in_thread`. However, *the third loop is never reached*. We therefore need another thread:
pl: Znowu mamy taki sam problem, jak przed chwilą. Pierwsza pętla jest uruchomiona w tym samym momencie co druga pętla, ze względu na to, że użyliśmy polecenia `in_thread`. Jednakże *trzecia pętla nigdy nie zostaje uruchomiona*. Żeby to naprawić, potrzebujemy kolejnego wątku (thread):

en: Runs as threads
pl: Uruchamianie w Wątkach

en: What may surprise you is that when you press the Run button, you're actually creating a new thread for the code to run. This is why pressing it multiple times will layer sounds over each other. As the runs themselves are threads, they will automatically weave the sounds together for you.
pl: Coś, co może być dla Ciebie zaskakujące, to fakt, że gdy naciskasz przycisk Uruchom, to w rzeczywistości tworzysz nowy wątek do uruchomienia Twojego kodu. Dlatego też, gdy klikniesz ten element wiele razy, dźwięki zaczną nakładać się na siebie. Jako że kolejne uruchomienia same są po prostu wątkami, to dźwięki zostaną dla Ciebie automatycznie poprzeplatane.

en: Scope
pl: Zasięg

en: As you learn how to master Sonic Pi, you'll learn that threads are the most important building blocks for your music. One of the important jobs they have is to isolate the notion of *current settings* from other threads. What does this mean? Well, when you switch synths using `use_synth` you're actually just switching the synth in the *current thread* - no other thread will have their synth switched. Let's see this in action:
pl: Gdy już nauczysz się, w jaki sposób opanować Sonic Pi, zdobędziesz wiedzę na temat również tego, że wątki są jednym z najważniejszych materiałów używanych do tworzenia Twojej muzyki. Jednym z ważnych zadań, które do nich należą, to izolacja pojęcia *aktualnych ustawień* od innych wątków. Co to oznacza? Otóż, kiedy zmieniasz syntezatory poleceniem `use_synth`, w rzeczywistości po prostu zmieniasz syntezator dla *aktualnego wątku (current thread)* - w żadnym innym wątku syntezator się nie zmieni. Zobaczmy te zachowanie w akcji:

en: Notice how the middle sound was different to the others? The `use_synth` statement only affected the thread it was in and not the outer main run thread.
pl: Zauważyłeś, że środkowy dźwięk był inny od pozostałych? Polecenie `use_synth` wpłynęło tylko na to, co zostało uruchomione w wątku, natomiast pozostała, zewnętrzna część kodu została nietknięta.

en: Inheritance
pl: Dziedziczenie

en: When you create a new thread with `in_thread`, the new thread will automatically inherit all of the current settings from the current thread. Let's see that:
pl: Kiedy utworzysz nowy wątek z wykorzystaniem `in_thread`, nowy wątek automatycznie odziedziczy wszystkie aktualne ustawienia z bieżącego wątku. Spójrzmy na taki kod:

en: Notice how the second note is played with the `:tb303` synth even though it was played from a separate thread? Any of the settings modified with the various `use_*` functions will behave in the same way.
pl: Zauważyłeś, iż druga nuta zostaje zagrana z użyciem syntezatora `:tb303`, mimo to została odtworzona z oddzielnego wątku? Każde ustawienie zmienione przy użyciu różnych funkcji `use_*`, będzie zachowywać się tak samo.

en: When threads are created, they inherit all the settings from their parent but they don't share any changes back.
pl: Kiedy są tworzone kolejne wątki, dziedziczą one wszystkie ustawienia ze swoich rodziców, natomiast jakiekolwiek zmiany nie są udostępniane z powrotem.

en: Naming Threads
pl: Nazywanie Wątków

en: Finally, we can give our threads names:
pl: Finalnie możemy nadawać naszym Wątkom nazwy:

en: Look at the log pane when you run this code. See how the log reports the name of the thread with the message?
pl: Spójrz na panel z logiem, kiedy uruchomisz ten kod. Czy widzisz, jak w logach przy kolejnych wiadomościach pojawiają się nazwy wątków?

en: Only One Thread per Name Allowed
pl: Tylko Jeden Wątek na Jedną Nazwę

en: One last thing to know about named threads is that only one thread of a given name may be running at the same time. Let's explore this. Consider the following code:
pl: Ostatnią rzeczą, którą powinieneś wiedzieć o wątkach posiadających swoją nazwę, jest, iż w tym samym czasie może być uruchomiony tylko jeden wątek o tej samej nazwie. Spróbujmy to zbadać. Weźmy pod uwagę następujący kod:

en: Go ahead and paste that into a buffer and press the Run button. Press it again a couple of times. Listen to the cacophony of multiple amen breaks looping out of time with each other. Ok, you can press Stop now.
pl: Śmiało wklej powyższy kod do obszaru roboczego i naciśnij przycisk Uruchom. Następnie zrób to jeszcze kilka razy. Usłyszysz kakofonię wielu zapętlonych w czasie sampli amen break. Okej, możesz teraz nacisnąć przycisk Stop.

en: This is the behaviour we've seen again and again - if you press the Run button, sound layers on top of any existing sound. Therefore if you have a loop and press the Run button three times, you'll have three layers of loops playing simultaneously.
pl: To jest zachowanie, które widzieliśmy już nie raz - jeśli naciśniesz przycisk Uruchom, dźwięk zostanie nałożony na istniejące już dźwięki. Dlatego jeśli masz pętle i naciśniesz przycisk Uruchom trzy razy, to będziesz miał trzy warstwy pętli, które będą grane jednocześnie.

en: However, with named threads it is different:
pl: Jednakże w przypadku nazwanych wątków jest inaczej:

en: Try pressing the Run button multiple times with this code. You'll only ever hear one amen break loop. You'll also see this in the log:
pl: Spróbuj teraz dla tego kodu nacisnąć przycisk Uruchom kilkukrotnie. Nie usłyszysz teraz więcej niż jedną pętlę amen na raz. W logach zauważysz również taką wiadomość:

en: Sonic Pi is telling you that a thread with the name `:amen` is already playing, so it's not creating another.
pl: Sonic Pi mówi Ci, że wątek o nazwie `:amen` już istnieje, nie zostanie więc utworzony kolejny.

en: This behaviour may not seem immediately useful to you now - but it will be very handy when we start to live code...
pl: Takie zachowanie może się teraz nie wydawać do niczego przydatne - ale stanie się bardzo użyteczne, kiedy zaczniemy kodować na żywo...

en: 5.5 Functions
pl: 5.5 Funkcje

en: Functions
pl: Funkcje

en: Once you start writing lots of code, you may wish to find a way to organise and structure things to make them tidier and easier to understand. Functions are a very powerful way to do this. They give us the ability to give a name to a bunch of code. Let's take a look.
pl: Gdy już zaczniesz pisać znaczne ilości kodu, to w pewnym momencie będziesz chciał znaleźć sposób, aby uporządkować i poukładać go tak, by był on elegancki i łatwiejszy do zrozumienia. Funkcje są bardzo skutecznym sposobem, który to umożliwia - pozwalają nam nadać kawałkowi kodu nazwę. Rzućmy na to okiem.

en: Defining functions
pl: Definiowane Funkcji

en: Here, we've defined a new function called `foo`. We do this with our old friend the do/end block and the magic word `define` followed by the name we wish to give to our function. We didn't have to call it `foo`, we could have called it anything we want such as `bar`, `baz` or ideally something meaningful to you like `main_section` or `lead_riff`.
pl: W powyższym przykładzie zdefiniowaliśmy nową funkcję zwaną `foo`. Zrobiliśmy to, używając naszego dobrego znajomego bloku do/end oraz magicznego słowa `define` -
     po nim podaliśmy nazwę, którą chcemy nadać naszej funkcji. Nie musieliśmy nazywać jej `foo`, gdyż mogliśmy to zrobić tak, jak tylko mamy na to ochotę, np. `bar`, `baz`. Dobrym pomysłem jest nadanie im znaczących nazw, np. `czesc_glowna` albo `glowna_gitara`.

en: Calling functions
pl: Uruchamianie Funkcji

en: Once we have defined our function we can call it by just writing its name:
pl: Skoro już udało się nam zdefiniować naszą funkcję, możemy uruchomić ją, wpisując jej nazwę:

en: We can even use `foo` inside iteration blocks or anywhere we may have written `play` or `sample`. This gives us a great way to express ourselves and to create new meaningful words for use in our compositions.
pl: Możemy użyć naszej funkcji `foo` wewnątrz bloku iteracji albo gdziekolwiek indziej, gdzie mogliśmy do tej pory używać polecenia `play` i `sample`. Pozwala nam to w bardzo fajny sposób na wyrażanie siebie i na tworzenie nowych słów, które znaczą coś nowego, i używanie ich w naszych kompozycjach.

en: Functions are remembered across runs
pl: Funkcje są zapamiętywane pomiędzy poszczególnymi uruchomieniami

en: So far, every time you've pressed the Run button, Sonic Pi has started from a completely blank slate. It knows nothing except for what is in the buffer. You can't reference code in another buffer or another thread. However, functions change that. When you define a function, Sonic Pi *remembers* it. Let's try it. Delete all the code in your buffer and replace it with:
pl: Jak do tej pory, za każdym razem, gdy nacisnąłeś przycisk Uruchom, Sonic Pi zaczynał od czystej tablicy. Nie wiedział nic poza tym, co znajduje się aktualnej przestrzeni roboczej. Nie możesz odnosić się do kodu w innych przestrzeniach roboczych lub innym wątku. Możliwość korzystania z funkcji zmienia to. Kiedy zdefiniujesz funkcję, Sonic Pi *zapamiętuje* ją. Spróbujmy to wykorzystać. Usuń cały kod znajdujący się w Twojej aktualnej przestrzeni roboczej i zastąp go następującą linią:

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`).
pl: Naciśnij przycisk Uruchom - usłyszysz, jak gra Twoja funkcja. Skąd się wziął ten kod? Skąd Sonic Pi wiedział, co powinien zagrać? Sonic Pi po prostu zapamiętał wcześniej Twoją funkcję - więc nawet po tym, jak już ją skasujesz z jednej przestrzeni roboczej, to i tak będzie on pamiętał, co wcześniej napisałeś. Ten mechanizm działa tylko z funkcjami stworzonymi z wykorzystaniem polecenia `define` (oraz `defonce`).

en: Parameterised functions
pl: Funkcje z Parametrami

en: You might be interested in knowing that just like you can pass min and max values to `rrand`, you can teach your functions to accept arguments. Let's take a look:
pl: Być może zainteresuje Cię fakt, że tak samo, jak możesz przekazywać wartości minimalną (min) i maksymalną (max) do funkcji `rrand`, tak samo możesz nauczyć Twoją funkcję, aby potrafiła przyjmować różne argumenty. Spójrzmy na następujący kod:

en: This isn't very exciting, but it illustrates the point. We've created our own version of `play` called `my_player` which is parameterised.
pl: Nie jest on za bardzo ekscytujący, ale świetnie przedstawia, o co chodzi. Stworzyliśmy naszą własną wersję polecenia `play`, która przyjmuje parametr i nazwaliśmy ją `my_player`.

en: The parameters need to go after the `do` of the `define` do/end block, surrounded by vertical goalposts `|` and separated by commas `,`. You may use any words you want for the parameter names.
pl: Parametry należy umieścić tuż za poleceniem `do` bloku kodu `define`, otoczyć pionowymi kreskami `|` oraz oddzielić przecinkami `,`. Dla nazw parametrów możesz użyć dowolnego słowa, jakiego chcesz.

en: The magic happens inside the `define` do/end block. You may use the parameter names as if they were real values. In this example I'm playing note `n`. You can consider the parameters as a kind of promise that when the code runs, they will be replaced with actual values. You do this by passing a parameter to the function when you call it. I do this with `my_player 80` to play note 80. Inside the function definition, `n` is now replaced with 80, so `play n` turns into `play 80`. When I call it again with `my_player 90`, `n` is now replaced with 90, so `play n` turns into `play 90`.
pl: Magia dzieje się w środku bloku do/end `define`. Możesz używać nazw parametrów, tak jakby były prawdziwymi wartościami. W powyższym przykładzie gram nutę `n`. Możesz patrzeć na parametry jak na swego rodzaju obietnice, które mówią o tym, że gdy kod zostanie uruchomiony, to zostaną one zastąpione aktualnymi wartościami. Możesz to zrobić poprzez przekazanie parametru do funkcji, gdy ją uruchamiasz. Uruchamiam polecenie `my_player 80`, aby zagrać nutę 80. Wewnątrz definicji funkcji, `n` zostanie zamienione na 80, więc polecenie `play n` przemieni się w `play 80`. Kiedy uruchomię ją ponownie w taki sposób `my_player 90`, to teraz `n` zostanie zastąpione przez 90, więc polecenie `play n` będzie zmieni się teraz w polecenie `play 90`.

en: Let's see a more interesting example:
pl: Przyjrzyjmy się teraz bardziej interesującemu przykładowi:

en: Here I used `repeats` as if it was a number in the line `repeats.times do`. I also used `root` as if it was a note name in my call to `play`.
pl: Użyłem tutaj parametru `repeats` w linii `repeats.times do`, tak jakby był liczbą. Zrobiłem to samo z `root` dla polecenia `play` - jakby był normalną nazwą nuty.

en: See how we're able to write something very expressive and easy to read by moving a lot of our logic into a function!
pl: Zauważ, że poprzez przeniesienia dużej ilości logiki do funkcji, jesteśmy teraz w stanie napisać coś bardzo ekspresyjnego, a zarazem łatwego do przeczytania!

en: 5.6 Variables
pl: 5.6 Zmienne

en: Variables
pl: Zmienne

en: A useful thing to do in your code is to create names for things. Sonic Pi makes this very easy: you write the name you wish to use, an equal sign (`=`), then the thing you want to remember:
pl: Przydatną rzeczą, którą możesz robić w swoim kodzie, to tworzenie nazw dla różnych rzeczy. Sonic Pi sprawia, że jest to bardzo łatwe - wpisujesz wybraną przez siebie nazwę, znak równości (`=`), a następnie rzecz do zapamiętania:

en: Here, we've 'remembered' the symbol `:loop_amen` in the variable `sample_name`. We can now use `sample_name` everywhere we might have used `:loop_amen`. For example:
pl: W powyższym kawałku kodu 'zapisaliśmy' wartość symbolu `:loop_amen` w zmiennej `sample_name`. Od teraz możemy używać nazwy `sample_name` wszędzie, gdzie do tej pory użylibyśmy sampla `:loop_amen`. Na przykład:

en: There are three main reasons for using variables in Sonic Pi: communicating meaning, managing repetition and capturing the results of things.
pl: Są trzy podstawowe powody na korzystanie ze zmiennych w Sonic Pi: komunikowanie znaczenia, zarządzanie powtórzeniami oraz przechwytywanie wyników różnych rzeczy.

en: Communicating Meaning
pl: Komunikowanie Znaczenia

en: When you write code it's easy to just think you're telling the computer how to do stuff - as long as the computer understands it's OK. However, it's important to remember that it's not just the computer that reads the code. Other people may read it too and try to understand what's going on. Also, you're likely to read your own code in the future and try to understand what's going on. Although it might seem obvious to you now - it might not be so obvious to others or even your future self!
pl: Kiedy piszesz kod, łatwo jest myśleć, że jedyne, co robisz, to mówisz komputerowi, jak ma wykonać jakieś rzeczy - tak długo, jak on rozumie, co do niego mówisz, to jest w porządku. Jednakże ważne jest, aby pamiętać, że nie tylko komputer czyta kod. Inni ludzie również mogą chcieć przeczytać go i spróbować zrozumieć, co się w nim dzieje. Ponadto bardzo prawdopodobne, że Ty również będziesz czytał swój własny kod w przyszłości i próbował zrozumieć, o co w nim chodzi. Chociaż w tej chwili jego znaczenie może być dla Ciebie oczywiste - może nie być takie oczywiste dla innych lub nawet dla Ciebie samego w przyszłości!

en: One way to help others understand what your code is doing is to write comments (as we saw in a previous section). Another is to use meaningful variable names. Look at this code:
pl: Jedną z metod, która pomoże innym zrozumieć, co Twój kod robi, jest pisanie komentarzy (co widzieliśmy już we wcześniejszej sekcji tego samouczka). Inną jest używanie takich nazw dla zmiennych, które coś znaczą. Spójrz na poniższy kod:

en: Why does it use the number `1.7533`? Where did this number come from? What does it mean? However, look at this code:
pl: Dlaczego używa on liczby `1.7533`? Skąd wzięła się ta liczba? Co ona oznacza? A teraz spójrz na poniższy kod:

en: Now, it's much clearer what `1.7533` means: it's the duration of the sample `:loop_amen`! Of course, you might say why not simply write:
pl: Teraz zrozumienie tego, co oznacza liczba `1.7533`, jest znacznie prostsze: oznacza ona długość trwania sampla `:loop_amen`! Oczywiście możesz zapytać, dlaczego po prostu nie napisaliśmy:

en: Which, of course, is a very nice way of communicating the intent of the code.
pl: Co jak najbardziej jest bardzo fajnym sposobem zakomunikowania intencji zawartych w kodzie.

en: Managing Repetition
pl: Zarządzanie Powtórzeniami

en: Often you see a lot of repetition in your code and when you want to change things, you have to change it in a lot of places. Take a look at this code:
pl: Często widzisz dużo powtórzeń w Twoim kodzie i kiedy chcesz coś zmienić, musisz wprowadzić zmiany w wielu miejscach. Spójrz na poniższy kawałek kodu:

en: We're doing a lot of things with `:loop_amen`! What if we wanted to hear what it sounded like with another loop sample such as `:loop_garzul`? We'd have to find and replace all `:loop_amen`s with `:loop_garzul`. That might be fine if you have lots of time - but what if you're performing on stage? Sometimes you don't have the luxury of time - especially if you want to keep people dancing.
pl: Robiliśmy tutaj sporo rzeczy z samplem `:loop_amen`! Co, jeśli chcielibyśmy usłyszeć, jak ten kawałek kodu brzmi z innym samplem, na przykład `:loop_garzul`? Musielibyśmy wtedy znaleźć i zamienić wszystkie wystąpienia sampla `:loop_amen` na `:loop_garzul`. To może być całkiem w porządku, jeśli masz sporo luzu - ale co, gdy właśnie występujesz na scenie? Czasami nie masz tego luksusu, że masz czasu tyle, ile chcesz - zwłaszcza wtedy, gdy chcesz utrzymać ludzi na parkiecie.

en: What if you'd written your code like this:
pl: A co, jeśli powyższy kawałek kodu przepiszemy na coś takiego?:

en: Now, that does exactly the same as above (try it). It also gives us the ability to just change one line `sample_name = :loop_amen` to `sample_name = :loop_garzul` and we change it in many places through the magic of variables.
pl: Teraz ten kod robi dokładnie to samo, co wcześniejszy (spróbuj). Oprócz tego daje nam możliwość zmiany tylko jednej linijki z obecnej `sample_name = :loop_amen` na `sample_name = :loop_garzul`, aby jednocześnie zmienić brzmienie w wielu miejscach dzięki magii zmiennych.

en: Capturing Results
pl: Przechwytywanie Wyników

en: Finally, a good motivation for using variables is to capture the results of things. For example, you may wish to do things with the duration of a sample:
pl: I na koniec dobrym powodem do używania zmiennych jest przechwytywanie wyniku wykonania różnych rzeczy. Przykładowo możesz chcieć robić różne rzeczy z długością trwania sampla:

en: We can now use `sd` anywhere we need the duration of the `:loop_amen` sample.
pl: Możemy teraz używać zmiennej `sd` wszędzie tam, gdzie potrzebujemy użyć długości trwania sampla `:loop_amen`.

en: Perhaps more importantly, a variable allows us to capture the result of a call to `play` or `sample`:
pl: Możliwe, że nawet bardziej ważne jest to, iż zmienne pozwalają nam na przechwycenie i zapisanie wyniku uruchomienia polecenia `play` lub `sample`:

en: Now we have caught and remembered `s` as a variable, which allows us to control the synth as it is running:
pl: Teraz złapaliśmy i zapamiętaliśmy `s` jako zmienną, co pozwala nam na kontrolę syntezatora w trakcie jego działania:

en: We'll look into controlling synths in more detail in a later section.
pl: Przyjrzymy się bardziej kontrolowaniu syntezatorów w kolejnej sekcji.

en: Warning: Variables and Threads
pl: Ostrzeżenie: Zmienne i Wątki

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*:
pl: Zmienne są świetne do nadawania rzeczom nazw oraz zapisywania wyników różnych operacji, ale musisz pamiętać, że zazwyczaj powinny być używane tylko lokalnie w ramach jednego wątku. Na przykład, *nie rób tego*:

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'.
pl: W powyższym przykładzie do zmiennej `a` przypisujemy pierścień liczb a następnie wykorzystujemy go wewnątrz dwóch różnych żywych pętli. W pierwszej pętli co każde pół uderzenia sortujemy pierścień (aby wyglądał następująco `(ring 1, 2, 3, 4, 5, 6)`) a następnie wyświetlamy jego zawartość w panelu z logami. Gdy uruchomisz kod, zauważysz że lista wyświetlana w logach *nie zawsze jest dobrze posortowana!*. Może to być dla Ciebie niespodzianką - zwłaszcza, że czasami lista jest wyświetlana jako posortowany zbiór, a czasami nie. To jest tak zwane niedeterministyczne zachowanie i jest wynikiem raczej nieprzyjemnego problemu zwanego wyścigiem. Przyczyną problemu jest fakt, że druga żywa pętla również modyfikuje listę (w tym wypadku tasuje ją) i tak naprawdę w momencie wyświetlenia czasem będzie one posortowana a czasem potasowana. Obie żywe pętle ścigają się aby zrobić coś innego z tą samą zmienną i za każdym razem 'wygrywa' inna pętla.

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:
pl: Istnieją dwa rozwiązania tego problemu. Po pierwsze, *nie używaj tej samej zmiennej w wielu różnych żywych pętlach lub wątkach*. Na przykład, następujący kod zawsze wyświetli posortowaną listę ponieważ każda żywa pętla ma swoją własną, niezależną zmienną:

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.
pl: Czasami jednak zdarza się, że chcielibyśmy współdzielić rzeczy pomiędzy różnymi wątkami. Na przykład aktualną tonację, BPM, syntezator (synth), itd. W takich sytuacjach rozwiązaniem jest używanie specjalnego wątkowo-bezpiecznego systemu stanu wykorzystując funkcje `get` i `set`. Zostanie to przedyskutowane dalej w sekcji 10.

en: 5.7 Thread Synchronisation
pl: 5.7 Synchronizacja Wątków

en: Thread Synchronisation
pl: Synchronizacja Wątków

en: Once you have become sufficiently advanced live coding with a number of functions and threads simultaneously, you've probably noticed that it's pretty easy to make a mistake in one of the threads which kills it. That's no big deal, because you can easily restart the thread by hitting Run. However, when you restart the thread it is now *out of time* with the original threads.
pl: Skoro osiągnąłeś już wystarczająco zaawansowane umiejętności kodowania na żywo (live coding) wraz z wykorzystaniem jednocześnie funkcji i wątków, na pewno zauważyłeś już, że bardzo łatwo jest popełnić błąd w jednym z wątków, co powoduje, że zostaje on zabity. To nie jest wielka rzecz, ponieważ możesz bardzo łatwo zrestartować wątek poprzez ponowne naciśnięcie przycisku Uruchom. Jednakże kiedy zrestartujesz wątek, to wypadnie on teraz z rytmu oryginalnych wątków.

en: Inherited Time
pl: Odziedziczony Czas

en: As we discussed earlier, new threads created with `in_thread` inherit all of the settings from the parent thread. This includes the current time. This means that threads are always in time with each other when started simultaneously.
pl: Jak już mówiliśmy wcześniej, nowe wątki, tworzone z wykorzystaniem polecenia `in_thread`, dziedziczą wszystkie ustawienia z wątku rodzica. W skład tych ustawień wchodzi też aktualny czas. Oznacza to, że wątki pozostają zawsze w korelacji czasowej, kiedy zostaną uruchomione jednocześnie.

en: However, when you start a thread on its own it starts with its own time which is unlikely to be in sync with any of the other currently running threads.
pl: Jednakże kiedy uruchomisz samodzielny wątek, rozpoczyna się on ze swoim własnym czasem i jest mało prawdopodobne, że będzie on w synchronizacji z jakimkolwiek innym, który jest aktualnie uruchomiony.

en: Cue and Sync
pl: Cue (Wskazówka) i Sync (Synchronizacja)

en: Sonic Pi provides a solution to this problem with the functions `cue` and `sync`.
pl: Sonic Pi udostępnia rozwiązanie dla tego problemu za pomocą funkcji `cue` (wskazówka) i `sync` (synchronizacja).

en: `cue` allows us to send out heartbeat messages to all other threads. By default the other threads aren't interested and ignore these heartbeat messages. However, you can easily register interest with the `sync` function.
pl: `cue` pozwala nam na wysłanie wiadomości o pulsie do wszystkich innych aktualnie uruchomionych wątków. Domyślnie inne wątki nie są tym zainteresowane i ignorują tę wiadomość, jednakże możesz bardzo łatwo wywołać takie zaintrygowanie za pomocą funkcji `sync`.

en: The important thing to be aware of is that `sync` is similar to `sleep` in that it stops the current thread from doing anything for a period of time. However, with `sleep` you specify how long you want to wait while with `sync` you don't know how long you will wait - as `sync` waits for the next `cue` from another thread which may be soon or a long time away.
pl: Ważną rzeczą, której należy być świadomym, jest to, że funkcja `sync` wygląda podobnie do funkcji `sleep` w taki sposób, że powstrzymuje ona aktualny wątek od robienia czegokolwiek przez pewien okres czasu. Jednakże w przypadku funkcji `sleep` musisz zdefiniować, jak długo chcesz poczekać, natomiast w funkcji `sync` nie wiesz, jak długo będziesz chciał poczekać, ponieważ ta funkcja czeka na następny punkt `cue` z innego wątku, co może nastąpić szybciej lub później.

en: Let's explore this in a little more detail:
pl: Spróbujmy przyjrzeć się temu trochę bardziej dokładnie:

en: Here we have two threads - one acting like a metronome, not playing any sounds but sending out `:tick` heartbeat messages every beat. The second thread is synchronising on `tick` messages and when it receives one it inherits the time of the `cue` thread and continues running.
pl: Mamy tutaj dwa wątki - jeden zachowuje się jak metronom, nie gra żadnych dźwięków, tylko wysyła komunikat `:tik` (cyk) przy każdym uderzeniu. Drugi wątek synchronizuje się natomiast przy otrzymaniu każdej kolejnej wiadomości `:tick` i kiedy otrzymuje kolejną, odziedzicza czas uruchomienia `cue` i rozpoczyna swoje działanie.

en: As a result, we will hear the `:drum_heavy_kick` sample exactly when the other thread sends the `:tick` message, even if the two threads didn't start their execution at the same time:
pl: Jako wynik słyszymy sampel `:drum_heavy_kick` dokładnie w tym samym momencie, gdy inny wątek wysyła komunikat `:tick`, nawet jeśli obydwa z nich nie zostały uruchomione w tym samym czasie:

en: That naughty `sleep` call would typically make the second thread out of phase with the first. However, as we're using `cue` and `sync`, we automatically sync the threads bypassing any accidental timing offsets.
pl: Te niegrzeczne polecenie `sleep` normalnie stworzyłoby drugi wątek, który byłby zupełnie niezsynchronizowany z pierwszym. Jednakże dzięki użyciu poleceń `cue` i `sync`, automatycznie synchronizujemy wątki, blokując jednocześnie jakiekolwiek nieprzewidziane rozjazdy w czasie.

en: Cue Names
pl: Nazwy dla komunikatów Cue

en: You are free to use whatever name you'd like for your `cue` messages - not just `:tick`. You just need to ensure that any other threads are `sync`ing on the correct name - otherwise they'll be waiting for ever (or at least until you press the Stop button).
pl: Dla nazw Twoich komunikatów `cue` możesz używać dowolnych słów - może to być nie tylko `:tick`. Musisz się tylko upewnić, że inne wątki `sync`hronizują się z właściwą nazwą - w przeciwnym wypadku będą czekać w nieskończoność (albo do momentu, w którym naciśniesz przycisk Stop).

en: Let's play with a few `cue` names:
pl: Spróbujmy pobawić się z kilkoma komunikatami `cue` o różnych nazwach:

en: Here we have a main `cue` loop which is randomly sending one of the heartbeat names `:foo`, `:bar` or `:baz`. We then also have three loop threads syncing on each of those names independently and then playing a different sample. The net effect is that we hear a sound every 0.5 beats as each of the `sync` threads is randomly synced with the `cue` thread and plays its sample.
pl: Mamy tutaj główną pętlę `cue`, która co iterację wysyła komunikat z losową wybraną nazwą punktu cue do synchronizacji - `:foo`, `:bar` lub `:baz`. Następnie mamy trzy wątki z pętlami, które synchronizują się na każdym z tych komunikatów niezależnie i odtwarzają różne sample. Wynikiem tego jest to, że słyszymy dźwięk co każde 0.5 uderzenia, jako że każdy z synchronizowanych (`sync`) wątków jest wybierany losowo z wątku `cue`, po czym odtwarza swojego sampla.

en: This of course also works if you order the threads in reverse as the `sync` threads will simply sit and wait for the next `cue`.
pl: Oczywiście to wszystko zadziała analogicznie - nawet jeśli poukładasz wątki w odwrotnej kolejności, jako że wątek `sync` będzie po prostu czekał na kolejną wartość wysłaną przez wątek `cue`.

en: 6 FX
pl: 6 FX (efekty)

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.
pl: Jednym z najbardziej satysfakcjonujących aspektów Sonic Pi jest możliwość łatwego dodawania efektów studyjnych do Twoich brzmień. Na przykład być może zdarzy się, że będziesz chciał dodać trochę efektu reverb (pogłos) do pewnych części Twojego kawałka albo trochę echa, albo może nawet efektu distort czy wobble do Twojej linii basowej.

en: Sonic Pi provides a very simple yet powerful way of adding FX. It even allows you to chain them (so you can pass your sounds through distortion, then echo and then reverb) and also control each individual FX unit with opts (in a similar way to giving params to synths and samples). You can even modify the opts of the FX whilst it's still running. So, for example, you could increase the reverb on your bass throughout the track...
pl: Sonic Pi udostępnia bardzo prosty, a jednocześnie potężny sposób na dodawanie takich efektów (FX). Pozwala on nawet na łączenie ich (możesz więc przepuścić Twoje brzmienie kolejno przez efekt distortion/overdrive, potem przez echo i na końcu przez reverb) i jednocześnie daje Ci możliwość kontrolowania każdego z nich indywidualnie za pomocą parametrów (w podobny sposób do tego, w jaki przekazujemy parametry do syntezatorów czy sampli). Możesz nawet modyfikować parametry efektu (FX), gdy wciąż jest uruchomiony. Możesz więc przykładowo zwiększyć wartość efektu reverb Twojej sekcji basowej na przestrzeni całego utworu...

en: Guitar Pedals
pl: Efekty gitarowe

en: Guitar -> Distortion -> Reverb -> Amplifier
pl: Gitara -> Distortion -> Reverb -> Wzmacniacz

en: Let's explore FX!
pl: Poznajmy zatem efekty (FX)!

en: 6.1 Adding FX
pl: 6.1 Dodawanie Efektów

en: Adding FX
pl: Dodawanie Efektów

en: In this section we'll look at a couple of FX: reverb and echo. We'll see how to use them, how to control their opts and how to chain them.
pl: W tej sekcji przyjrzymy się kilku efektom (FX): reverb i echo. Zobaczymy, w jaki sposób ich używać, jak kontrolować ich parametry oraz jak je łączyć ze sobą w jeden łańcuch.

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.
pl: System efektów w Sonic Pi korzysta z bloków kodu. Jeśli więc do tej pory nie przeczytałeś jeszcze sekcji 5.1, to teraz jest dobry moment, by nadrobić zaległości.

en: Reverb
pl: Efekt Reverb

en: If we want to use reverb we write `with_fx :reverb` as the special code to our block like this:
pl: Jeśli chcemy użyć efektu reverb, wystarczy, że napiszemy `with_fx :reverb` jako specjalny kawałek kodu dla naszego bloku do/end:

en: Now play this code and you'll hear it played with reverb. It sounds good, doesn't it! Everything sounds pretty nice with reverb.
pl: Teraz uruchom ten kod, a usłyszysz, jak jest zagrany z nałożonym na niego efektem reverb. Brzmi nieźle, prawda? Wszystko łączy się całkiem fajnie z efektem reverb.

en: Now let's look what happens if we have code outside the do/end block:
pl: A teraz zobaczmy, co się wydarzy, gdy umieścimy jakiś dodatkowy kod poza naszym blokiem do/end:

en: Notice how the final `play 55` isn't played with reverb. This is because it is *outside* the do/end block, so it isn't captured by the reverb FX.
pl: Zauważ, że ostania linia `play 55` nie jest zagrana z efektem reverb. Dzieje się tak, ponieważ znajduje się *poza blokiem* kodu do/end, więc dzięki temu nie jest objęta efektem reverb.

en: Similarly, if you make sounds before the do/end block, they also won't be captured:
pl: Analogicznie, jeśli zrobisz jakieś dźwięki przed blokiem do/end, to one również nie będą pod wpływem efektu reverb:

en: Echo
pl: Efekt Echo

en: There are many FX to choose from. How about some echo?
pl: Jest wiele efektów do wyboru. Co powiesz na echo?

en: One of the powerful aspects of Sonic Pi's FX blocks is that they may be passed opts similar to opts we've already seen with `play` and `sample`. For example a fun echo opt to play with is `phase:` which represents the duration of a given echo in beats. Let's make the echo slower:
pl: Jednym z potężnych aspektów bloków efektów w Sonic Pi jest to, że można do nich przekazywać parametry podobne do tych, które już widzieliśmy, gdy korzystaliśmy z poleceń `play` i `sample`. Na przykład bardzo fajnym, który nieźle brzmi z efektem echo, jest `phase:`. Reprezentuje on czas trwania danego efektu przez określoną liczbę uderzeń (ile uderzeń trwa efekt). Spróbujmy sprawić, aby efekt echo był trochę wolniejszy:

en: Let's also make the echo faster:
pl: Spróbujmy też sprawić, aby echo brzmiało szybciej:

en: Let's make the echo take longer to fade away by setting the `decay:` time to 8 beats:
pl: Sprawmy teraz, aby zanikanie echa trwało dłużej, ustawiając parametr `decay` na 8 sekund:

en: Nesting FX
pl: Zagnieżdżanie Efektów

en: One of the most powerful aspects of the FX blocks is that you can nest them. This allows you to very easily chain FX together. For example, what if you wanted to play some code with echo and then with reverb? Easy, just put one inside the other:
pl: Jednym z najbardziej potężnych aspektów bloków zawierających efekty jest to, że możesz je zagnieżdżać. Pozwala to na bardzo łatwe łączenie ich ze sobą. Przykładowo co, jeśli chciałeś zagrać kawałek jakiegoś kodu z efektami echo i reverb? Łatwizna, po prostu umieść jeden w drugim:

en: Think about the audio flowing from the inside out. The sound of all the code within the inner do/end block such as `play 50` is first sent to the echo FX and the sound of the echo FX is in turn sent out to the reverb FX.
pl: Pomyśl o przepływie dźwięku ze środka na zewnątrz. Dźwięk z najbardziej wewnętrznego bloku kodu, np. `play 50` jest najpierw wysyłany do efektu echo, a następnie dźwięk z nałożonym echo jest z kolei do efektu reverb.

en: Discovering FX
pl: Odkrywanie Efektów

en: Sonic Pi ships with a large number of FX for you to play with. To find out which ones are available, click on FX in the far left of this help system and you'll see a list of available options. Here's a list of some of my favourites:
pl: W Sonic Pi możesz korzystać z wielu wbudowanych efektów. Aby zobaczyć, które z nich są dostępne, kliknij na ikonę *Fx* (efekty) w sekcji pomocy, a zobaczysz listę wszystkich dostępnych opcji. Oto kilka moich ulubionych:

en: 6.2 FX in Practice
pl: 6.2 Efekty w praktyce

en: FX in Practice
pl: Efekty w praktyce

en: Although they look deceptively simple on the outside, FX are actually quite complex beasts internally. Their simplicity often entices people to overuse them in their pieces. This may be fine if you have a powerful machine, but if - like me - you use a Raspberry Pi to jam with, you need to be careful about how much work you ask it to do if you want to ensure the beats keep flowing.
pl: Pomimo że na pierwszy rzut oka wyglądają one na zwodniczo łatwe, to od środka efekty są tak naprawdę bardzo złożonymi bestiami. Ich prostota bardzo często kusi ludzi, by nadużywać ich w swoich kawałkach. Może to być w porządku, jeśli masz dobry i wydajny komputer, ale jeśli tak jak ja korzystasz z Raspberry Pi do jamowania, musisz być wtedy bardzo ostrożny z tym, ile pracy mu zlecisz do wykonania, jeżeli chcesz być pewien, że beat zachowa swą płynność.

en: Consider this code:
pl: Rozważ taki kawałek kodu:

en: In this code we're playing note 60 with a very short release time, so it's a short note. We also want reverb so we've wrapped it in a reverb block. All good so far. Except...
pl: W powyższym kawałku zagraliśmy nutę 60 z bardzo krótkim czasem zanikania (release), więc jest ona niezwykle krótka. Chcemy również nałożyć na nią efekt reverb, więc opakowaliśmy ją w blok związany z nim. Jak na razie wszystko w porządku. Z wyjątkiem...

en: Let's look at what the code does. First we have a `loop` which means everything inside of it is repeated forever. Next we have a `with_fx` block. This means we will create a new reverb FX *every time we loop*. This is like having a separate FX reverb pedal for every time you pluck a string on a guitar. It's cool that you can do this, but it's not always what you want. For example, this code will struggle to run nicely on a Raspberry Pi. All the work of creating the reverb and then waiting until it needs to be stopped and removed is all handled by `with_fx` for you, but this takes CPU power which may be precious.
pl: Przyjrzyjmy się, co ten kod tak naprawdę robi. Na początku mamy pętlę `loop`, co oznacza, że wszystko wewnątrz niej będzie powtarzane w nieskończoność. Następnie mamy blok `with_fx`. Oznacza to, że utworzymy nowych efekt FX *dla każdej iteracji pętli `loop`*. To tak, jakbyśmy chcieli mieć oddzielny efekt gitarowy reverb przy każdym jednym uderzeniu w strunę gitary. Fajnie, że możemy tak zrobić, ale nie zawsze jest to coś, co chciałbyś osiągnąć. Na przykład ten kawałek kodu czeka niezła walka, aby został on ładnie uruchomiony na Raspberry Pi. Cała praca potrzebna do stworzenia efektu reverb, a potem czekanie do momentu, w którym będzie wymagał zatrzymania i usunięcia, jest obsługiwana za Ciebie przez funkcję `with_fx`, zajmie to jednak sporo mocy procesora (CPU), która może okazać się bardzo cenna.

en: How do we make it more similar to a traditional setup where our guitarist has just *one* reverb pedal which all sounds pass through? Simple:
pl: A co, jeśli sprawimy, by ten kod był bardziej podobny do tradycyjnego zestawu, gdzie nasz gitarzysta posiada tylko *jeden* efekt reverb i to przez niego przechodzą wszystkie dźwięki? Łatwizna:

en: We put our loop *inside* the `with_fx` block. This way we only create a single reverb for all notes played in our loop. This code is a lot more efficient and would work fine on a Raspberry Pi.
pl: Umieściliśmy naszą pętlę *wewnątrz* bloku `with_fx`. W ten sposób tworzymy tylko jeden efekt reverb dla wszystkich nut, które zostaną w niej zagrane. Taki kod jest dużo bardziej wydajny i na pewno będzie działał w porządku na Raspberry Pi.

en: A compromise is to use `with_fx` over an iteration within a loop:
pl: Kompromisem może też być użycie efektu `with_fx` wewnątrz pętli loop, ale powyżej iteracji wewnętrznej:

en: This way we've lifted the `with_fx` out of the inner part of the `loop` and we're now creating a new reverb every 16 notes.
pl: W ten sposób przenieśliśmy efekt `with_fx` na zewnątrz wewnętrznej części pętli `loop` i teraz tworzymy nowy efekt reverb tylko co 16 zagranych nut.

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:
pl: To jest tak często używany wzorzec, że funkcja `with_fx` posiada dodatkową opcję, która umożliwia nam to samo, ale bez konieczności pisania bloku `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.
pl: Oba przykłady `reps: 16` i `16.times do` zachowają się tak samo. Zasadniczo kawałek ` reps: 16` spowoduje powtórzenie kodu znajdującego się w bloku `do/end`. Możesz więc używać obu konstrukcji zamiennie i wybrać tę, która odpowiada Ci bardziej.

en: Remember, there are no mistakes, just possibilities. However, some of these approaches will have a different sound and also different performance characteristics. So play around and use the approach that sounds best to you whilst also working within the performance constraints of your platform.
pl: Pamiętaj jedno - błędów nie ma, są tylko nowe możliwości. Jednakże każdy z powyższych podejść będzie miał inne brzmienie oraz inną charakterystykę wydajności. Staraj się więc używać takiego podejścia, które będzie brzmiało najlepiej, mając jednocześnie na uwadze fakt pracy z ograniczeniami wydajnościowymi Twojego komputera/platformy, na której pracujesz.

en: 7 Control
pl: 7 Kontrola

en: Controlling running sounds
pl: Kontrola działających dźwięków

en: So far we've looked at how you can trigger synths and samples, and also how to change their default opts such as amplitude, pan, envelope settings and more. Each sound triggered is essentially its own sound with its own list of options set for the duration of the sound.
pl: Do tej pory dowiedzieliśmy się, jak możemy wyzwalać syntezatory i sample oraz w jaki sposób zmieniać ich domyślne parametry takie jak amplituda, kanał, ustawienia obwiedni i inne. Każdy uruchomiony dźwięk jest w zasadzie osobnym dźwiękiem z jego własnym zestawem parametrów ustalonych na czas trwania dźwięku.

en: Wouldn't it also be cool if you could change a sound's opts whilst it's still playing, just like you might bend a string of a guitar whilst it's still vibrating?
pl: Czy nie byłoby super, gdybyś mógł zmieniać parametry dźwięku w trakcie odtwarzania danego dźwięku tak samo, jak możesz naciągnąć struny gitary, gdy jej struny wciąż wibrują?

en: You're in luck - this section will show you how to do exactly this.
pl: Masz szczęście - ten rozdział pokaże Ci dokładnie, jak możesz tego dokonać.

en: 7.1 Controlling Running Synths
pl: 7.1 Kontrolowanie Uruchomionych Syntezatorów

en: Controlling Running Synths
pl: Kontrolowanie Uruchomionych Syntezatorów

en: So far we've only concerned ourselves with triggering new sounds and FX. However, Sonic Pi gives us the ability to manipulate and control currently running sounds. We do this by using a variable to capture a reference to a synth:
pl: Do tej pory interesowaliśmy się tylko uruchamianiem nowych dźwięków i efektów. Jednakże Sonic Pi daje nam możliwość manipulacji i kontroli aktualnie uruchomionych dźwięków. Dokonujemy tego, używając zmiennych do przechwycenia referencji do syntezatora:

en: Here, we have a run-local variable `s` which represents the synth playing note 60. Note that this is *run-local* - you can't access it from other runs like functions.
pl: Mamy tutaj zmienną lokalną `s`, która reprezentuje syntezator grający nutę 60. Zauważ jednak, że to jest *zmienna działająca lokalnie* - nie masz do niej dostępu z innych uruchomień takich jak funkcje.

en: Once we have `s`, we can start controlling it via the `control` function:
pl: Gdy już mamy zmienną `s`, możemy zacząć kontrolować ją za pomocą funkcji `control`:

en: The thing to notice is that we're not triggering 4 different synths here - we're just triggering one synth and then change the pitch 3 times afterwards, while it's playing.
pl: Rzeczą godną zauważenia jest tutaj to, że nie uruchamiamy 4 oddzielnych syntezatorów - uruchamiamy tylko jeden, po czym zmieniamy wysokość tonu 3 razy, w trakcie gdy wciąż gra.

en: We can pass any of the standard opts to `control`, so you can control things like `amp:`, `cutoff:` or `pan:`.
pl: Możemy przekazywać dowolne ze standardowych parametrów do polecenia `control` - pozwala nam to na kontrolowanie takich rzeczy jak `amp:`, `cutoff:` czy `pan:`.

en: Non-controllable Options
pl: Parametry Nie Dające Się Kontrolować

en: Some of the opts can't be controlled once the synth has started. This is the case for all the ADSR envelope parameters. You can find out which opts are controllable by looking at their documentation in the help system. If the documentation says *Can not be changed once set*, you know it's not possible to control the opt after the synth has started.
pl: Są pewne parametry, które nie mogą być kontrolowane, gdy syntezator został już uruchomiony. Dotyczy to m.in. wszystkich parametrów obwiedni ADSR. Możesz samodzielnie sprawdzić, które z parametrów danego syntezatora mogą być kontrolowane, zaglądając do systemu pomocy. Jeśli w dokumentacji jest napisane *can not be changed once set* (nie może być zmieniony, gdy już raz został ustawiony), to wiesz, że nie możesz kontrolować i zmieniać danego parametru, gdy syntezator już wystartuje.

en: 7.2 Controlling FX
pl: 7.2 Kontrolowanie Efektów

en: Controlling FX
pl: Kontrolowanie Efektów

en: It is also possible to control FX, although this is achieved in a slightly different way:
pl: Możliwe jest również kontrolowanie efektów, jednakże jest ono realizowane w trochę inny sposób:

en: Instead of using a variable, we use the goalpost parameters of the do/end block. Inside the `|` bars, we need to specify a unique name for our running FX which we then reference from the containing do/end block. This behaviour is identical to using parameterised functions.
pl: Zamiast używać zmiennej, korzystamy z parametru pomiędzy słupkami znajdującymi się w bloku kodu do/end. Pomiędzy słupki `|` wstawiamy unikalną nazwę dla naszego efektu, dzięki czemu możemy się później do niej odwoływać w danym bloku kodu do/end. Postępowanie w tym przypadku jest identyczne do używania parametrów w funkcjach.

en: Now go and control some synths and FX!
pl: A teraz spróbuj wykorzystać kontrolę nad syntezatorami i efektami!

en: 7.3 Sliding Options
pl: 7.3 Parametry Przesuwne

en: Sliding Opts
pl: Parametry Przesuwne

en: Whilst exploring the synth and FX opts, you might have noticed that there are a number of opts ending with `_slide`. You might have even tried calling them and seeing no effect. This is because they're not normal parameters, they're special opts that only work when you control synths as introduced in the previous section.
pl: Podczas poznawania parametrów syntezatorów i efektów być może udało Ci się zauważyć, że kilka nazw parametrów kończy się na `_slide`. Być może nawet próbowałeś korzystać z nich i nie zauważyłeś żadnego efektu. Dzieje się tak, ponieważ nie są one normalnymi parametrami, a są to specjalne opcje, które działają tylko wtedy, gdy kontrolujesz syntezatory w taki sposób, jaki pokazaliśmy w poprzedniej sekcji.

en: Consider the following example:
pl: Przyjrzyjmy się następującemu przykładowi:

en: Here, you can hear the synth pitch changing immediately on each `control` call. However, we might want the pitch to slide between changes. As we're controlling the `note:` parameter, to add slide, we need to set the `note_slide` parameter of the synth:
pl: W powyższym przykładzie słyszymy, jak wysokość tonu (pitch) zmienia się przy każdym uruchomieniu polecenia `control`. Może się jednak zdarzyć, że będziemy chcieli, aby zmiana tonu nastąpiła w sposób płynny (tak jakbyśmy użyli do tego suwaka). Tak samo, jak kontrolujemy zmianę tonu parametrem `note:`, aby dodać płynne przejście, musimy ustawić na syntezatorze parametr `note_slide`:

en: Now we hear the notes being bent between the `control` calls. It sounds nice, doesn't it? You can speed up the slide by using a shorter time such as `note_slide: 0.2` or slow it down by using a longer slide time.
pl: Teraz słyszymy, że pomiędzy poszczególnymi wywołaniami poleceń `control`, nuty są "naciągane". Brzmi to całkiem fajnie, prawda? Możesz przyśpieszyć płynne przejście pomiędzy nutami, używając krótszego czasu, np. `note_slide: 0.2', albo zwolnić je, używając dłuższego czasu przejścia (ślizgania).

en: Every parameter that can be controlled has a corresponding `_slide` parameter for you to play with.
pl: Każdy z parametrów, który może być kontrolowany, posiada odpowiadający mu parametr typu `_slide`, z którego możesz korzystać.

en: Sliding is sticky
pl: Ślizganie jest lepkie

en: Once you've set a `_slide` parameter on a running synth, it will be remembered and used every time you slide the corresponding parameter. To stop sliding you must set the `_slide` value to 0 before the next `control` call.
pl: Gdy już raz ustawimy parametr typu `_slide` na uruchomionym syntezatorze, to zostanie on zapamiętany i ta wartość będzie wykorzystywana za każdym razem, gdy będziesz zmieniał płynnie wartość odpowiadającego mu parametru. Aby zatrzymać płynne przejścia, musisz ustawić wartość parametru `_slide` na 0 przed kolejnym wywołaniem polecenia `control`.

en: Sliding FX Opts
pl: Płynne Przejścia w Parametrach Efektów

en: It is also possible to slide FX opts:
pl: Są również możliwe płynne przejścia dla parametrów efektów:

en: Now have fun sliding things around for smooth transitions and flowing control...
pl: Spróbuj teraz pobawić się płynnymi przejściami, aby spróbować dokonać płynnych przejść i płynnej kontroli...

en: 8 Data Structures
pl: 8 Struktury Danych

en: Data Structures
pl: Struktury Danych

en: A very useful tool in a programmer's toolkit is a data structure.
pl: Struktury danych to bardzo przydatne narzędzie dostępne w standardowym zestawie narzędzi każdego programisty.

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.
pl: Czasami będziesz chciał reprezentować i używać czegoś więcej niż tylko jednej rzeczy. Na przykład przydatna może okazać się możliwość posiadania serii nut do zagrania jedna po drugiej. Języki programowania posiadają coś takiego jak struktury danych, które pozwalają Ci robić takie rzeczy.

en: There are many exciting and exotic data structures available to programmers - and people are always inventing new ones. However, for now we only really need to consider a very simple data structure - the list.
pl: Istnieje wiele ekscytujących i egzotycznych struktur danych dostępnych dla programistów - a ludzie wciąż wymyślają nowe. Na razie potrzebujemy w zasadzie wziąć pod uwagę z nich tylko jedną prostą - listę.

en: Let's look at it in more detail. We'll cover its basic form and then also how lists can be used to represent scales and chords.
pl: Przyjrzyjmy się jej bardziej szczegółowo. Skupimy się na niej podstawowej formie, następnie pokażemy, w jaki sposób możemy wykorzystać listy do reprezentacji skal oraz akordów.

en: 8.1 Lists
pl: 8.1 Listy

en: Lists
pl: Listy

en: In this section we'll take a look at a data structure which is very useful - the list. We met it very briefly before in the section on randomisation when we randomly chose from a list of notes to play:
pl: Tutaj przyjrzymy się bardzo przydatnej strukturze danych - liście. Spotkaliśmy ją na krótko już wcześniej w sekcji poświęconej randomizacji, kiedy to wybieraliśmy z listy losowe nuty do zagrania:

en: In this section we'll explore using lists to also represent chords and scales. First let's recap how we might play a chord. Remember that if we don't use `sleep`, sounds all happen at the same time:
pl: W obecnym rozdziale zobaczymy, jak możemy wykorzystać listy również do reprezentacji akordów i skal. Na początku jednak spróbujmy sobie przypomnieć, w jaki sposób zagrać dowolny akord. Pamiętasz, że jeśli nie użyliśmy polecenia `sleep`, to wszystkie dźwięki zagrają jednocześnie:

en: Let's look at other ways to represent this code.
pl: Spróbujmy przyjrzeć się innym sposobom, za pomocą których możemy wyrazić powyższy kod.

en: Playing a List
pl: Granie Listy

en: One option is to place all the notes in a list: `[52, 55, 59]`. Our friendly `play` function is smart enough to know how to play a list of notes. Try it:
pl: Jedną z opcji jest umieszczenie wszystkich nut w liście `[52, 55 , 59]`. Nasza poczciwa funkcja `play` jest wystarczająco bystra, by wiedzieć, w jaki sposób ma ją zagrać. Spróbuj tego:

en: Ooh, that's already nicer to read. Playing a list of notes doesn't stop you from using any of the parameters as normal:
pl: Ooh, taki kod jest dużo przyjemniejszy do czytania! Zagranie listy nut nie blokuje Ci korzystania z żadnego z parametrów:

en: Of course, you can also use the traditional note names instead of the MIDI numbers:
pl: Oczywiście możesz również używać tradycyjnych nazw nut zamiast korzystania z liczb MIDI:

en: Now those of you lucky enough to have studied some music theory might recognise that chord as *E Minor* played in the 3rd octave.
pl: Teraz Ci z Was, który mieli farta i studiowali trochę teorii muzycznej, mogą zauważyć, że to jest akord *E Minor* zagrany na 3-ciej oktawie.

en: Accessing a List
pl: Dostęp do Listy

en: Another very useful feature of a list is the ability to get information out of it. This may sound a bit strange, but it's no more complicated than someone asking you to turn a book to page 23. With a list, you'd say, what's the element at index 23? The only strange thing is that in programming indexes usually start at 0 not 1.
pl: Inną bardzo przydatną cechą list jest możliwość wyciągnięcia z nich informacji. Może to brzmieć odrobinę dziwnie, ale nie jest to nic bardziej trudnego niż prośba kogoś, abyś otworzył książkę na stronie 23. Czy korzystając z listy, mógłbyś zapytać, jaki element znajduje się na 23 pozycji? Jedyną dziwną rzeczą w programowaniu jest to, że numery takich pozycji (indeksy) zazwyczaj zaczynają się od 0 a nie od 1.

en: With list indexes we don't count 1, 2, 3... Instead we count 0, 1, 2...
pl: Indeksy w listach nie są odliczane przez 1, 2, 3... Zamiast tego odliczamy 0, 1, 2...

en: Let's look at this in a little more detail. Take a look at this list:
pl: Przyjrzyjmy się temu trochę bardziej. Spójrz na taką listę:

en: There's nothing especially scary about this. Now, what's the second element in that list? Yes, of course, it's `55`. That was easy. Let's see if we can get the computer to answer it for us too:
pl: Nie ma w niej nic specjalnie strasznego. Teraz pytanie: jaki jest drugi element w tej liście. Tak, zgadłeś, jest to `55`. To było proste. Sprawdźmy, czy możemy poprosić komputer, aby odpowiedział nam na to pytanie:

en: OK, that looks a bit weird if you've never seen anything like it before. Trust me though, it's not too hard. There are three parts to the line above: the word `puts` , our list `52, 55, 59` and our index `[1]`. Firstly we're saying `puts` because we want Sonic Pi to print the answer out for us in the log. Next, we're giving it our list, and finally our index is asking for the second element. We need to surround our index with square brackets and because counting starts at `0`, the index for the second element is `1`. Look:
pl: Dobrze, to wygląda trochę dziwnie, jeśli jeszcze nigdy nie widziałeś niczego takiego. Zaufaj mi jednak, to nie jest trudne. W powyższej linii są 3 części: słowo `puts`, nasza lista `52, 55, 59` oraz nasz indeks `[1]`. Najpierw mówimy `puts`, ponieważ chcemy, aby Sonic Pi wyświetlił nam odpowiedź w panelu logowania (po prawej stronie). Następnie, przekazujemy do tego polecenia naszą listę i na końcu nasz indeks pyta nas o drugi element. Musimy otoczyć go w nawiasy kwadratowe, a ponieważ liczenie zaczynamy od `0`, to indeks dla drugiego elementu wynosi `1`. Spójrz:

en: # indexes:  0   1   2
               [52, 55, 59]
pl: # indeksy:  0   1   2
               [52, 55, 59]

en: Try running the code `puts [52, 55, 59][1]` and you'll see `55` pop up in the log. Change the index `1` to other indexes, try longer lists and think about how you might use a list in your next code jam. For example, what musical structures might be represented as a series of numbers...
pl: Spróbuj uruchomić kod `puts [52, 55, 59][1]`, a zobaczysz, że liczba `55` pojawi się w panelu logowania. Zmień indeks `1` na inne wartości, spróbuj użyć dłuższych list i pomyśl, w jaki sposób mógłbyś wykorzystać je w Twojej kolejnej zabawie kodem. Jakie muzyczne struktury mogą być reprezentowane jako seria liczb...

en: 8.2 Chords
pl: 8.2 Akordy

en: Sonic Pi has built-in support for chord names which will return lists. Try it for yourself:
pl: Sonic Pi posiada wbudowane wsparcie dla nazw akordów, które zwracają listy. Spróbuj sam:

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:
pl: Teraz naprawdę zaczynamy dokądś zmierzać. To wygląda dużo ładniej niż czyste listy (i jest znacznie łatwiejsze do czytania dla innych ludzi). Jakie więc inne akordy wspiera Sonic Pi? Całkiem *sporo*. Spróbuj tych:

en: Arpeggios
pl: Arpeggia

en: We can easily turn chords into arpeggios with the function `play_pattern`:
pl: Możemy bardzo łatwo zmienić akordy w arpeggia za pomocą funkcji `play_pattern`:

en: We can even pass a list of times which it will treat as a circle of times:
pl: Możemy nawet przekazać listę czasów, która zostanie potraktowania jako krąg czasów:

en: This is the equivalent to:
pl: Jest to odpowiednik takiego kawałka kodu:

en: Which would you prefer to write?
pl: Który kawałek wydaje Ci się wygodniejszy do napisania i którego byś użył?

en: 8.3 Scales
pl: 8.3 Skale

en: Scales
pl: Skale

en: Sonic Pi has support for a wide range of scales. How about playing a C3 major scale?
pl: Sonic Pi posiada wsparcie dla szerokiego zakresu skal. Co powiesz na to, aby zagrać C3 ze skali durowej?

en: We can even ask for more octaves:
pl: Możemy nawet poprosić o więcej oktaw:

en: How about all the notes in a pentatonic scale?
pl: Co powiesz na wszystkie nuty w skali pentatonicznej (pentatonika)?

en: Random notes
pl: Losowe nuty

en: Chords and scales are great ways of constraining a random choice to something meaningful. Have a play with this example which picks random notes from the chord E3 minor:
pl: Akordy i skale są świetnym sposobem na ograniczenie wyboru losowego do czegoś sensownego. Spróbuj pobawić się z poniższym przykładem, który wybiera losowe nuty z akordu E3 moll:

en: Try switching in different chord names and cutoff ranges.
pl: Spróbuj poustawiać inne nazwy akordów oraz inne zakresy odcięcia (cutoff).

en: Discovering Chords and Scales
pl: Odkrywanie Akordów i Skal

en: To find out which scales and chords are supported by Sonic Pi simply click the Lang button on the far left of this tutorial and then choose either chord or scale in the API list. In the information in the main panel, scroll down until you see a long list of chords or scales (depending on which you're looking at).
pl: Aby zobaczyć, jakie skale i akordy są wspierane przez Sonic Pi, kliknij na przycisk Lang znajdujący się po lewej stronie tego samouczka, a następnie z listy dostępnych API wybierz pozycję chord (akord) lub scale (skala). W informacjach znajdujących się w głównym panelu, przewiń w dół, aż ujrzysz długą listę akordów lub skal (w zależności od tego, na którą pozycję patrzysz).

en: Have fun and remember: there are no mistakes, only opportunities.
pl: Baw się i pamiętaj: błędów nie ma, są tylko możliwości.

en: 8.4 Rings
pl: 8.4 Pierścienie

en: Rings
pl: Pierścienie

en: An interesting spin on standard lists are rings. If you know some programming, you might have come across ring buffers or ring arrays. Here, we'll just go for ring - it's short and simple.
pl: Ciekawym przypadkiem standardowych list są pierścienie. Jeśli znasz się trochę na programowaniu, to mogło się zdarzyć, że miałeś do czynienia z buforami cyklicznymi lub tablicami cyklicznymi. Tutaj przyjrzymy się tylko pierścieniowi - jest krótki i prosty.

en: In the previous section on lists we saw how we could fetch elements out of them by using the indexing mechanism:
pl: W poprzedniej sekcji dotyczącej list widzieliśmy, w jaki sposób możemy wyciągać z nich elementy, korzystając z mechanizmu indeksowania:

en: Now, what happens if you want index `100`? Well, there's clearly no element at index 100 as the list has only three elements in it. So Sonic Pi will return you `nil` which means nothing.
pl: A co się stanie, jeśli chciałbyś pozycję spod indeksu `100`? Dobrze, więc na pozycji 100 nie ma żadnego elementu, jako że lista posiada w sobie tylko trzy elementy. Sonic Pi zwróci więc wartość `nil`, co oznacza nic.

en: However, consider you have a counter such as the current beat which continually increases. Let's create our counter and our list:
pl: Jednakże biorąc pod uwagę, że masz licznik taki, jak aktualne uderzenie, które nieustannie rośnie. Spróbujmy go utworzyć oraz do tego listę:

en: We can now use our counter to access a note in our list:
pl: Możemy teraz użyć naszego licznika, aby dostać się do nuty znajdującej się w naszej liście:

en: Great, we got `52`. Now, let's increment our counter and get another note:
pl: Super, otrzymaliśmy `52`! Teraz, spróbujmy zwiększyć nasz licznik i dostać się do kolejnej nuty:

en: Super, we now get `55` and if we do it again we get `59`. However, if we do it again, we'll run out of numbers in our list and get `nil`. What if we wanted to just loop back round and start at the beginning of the list again? This is what rings are for.
pl: Wspaniale, teraz otrzymaliśmy `55` i jeśli dokonamy tego jeszcze raz, otrzymamy liczbę `59`. Jednakże jeśli to zrobimy, wyskoczymy poza liczby znajdujące się w naszej liście i otrzymamy `nil`. A co, jeśli chcieliśmy tylko stworzyć pętlę, wrócić do początku i zacząć na samym początku listy od nowa? Do tego właśnie służą pierścienie.

en: Creating Rings
pl: Tworzenie Pierścieni

en: We can create rings one of two ways. Either we use the `ring` function with the elements of the ring as parameters:
pl: Możemy tworzyć pierścienie na dwa sposoby. Albo użyjemy funkcji `ring`, podając elementy dla danego pierścienia jako parametry:

en: Or we can take a normal list and convert it to a ring by sending it the `.ring` message:
pl: Albo możemy wziąć normalną listę i przekształcić ją w pierścień poprzez wysłanie do niej wiadomości `.ring`:

en: Indexing Rings
pl: Indeksowanie Pierścieni

en: Once we have a ring, you can use it in exactly the same way you would use a normal list with the exception that you can use indexes that are negative or larger than the size of the ring and they'll wrap round to always point at one of the ring's elements:
pl: Gdy już masz pierścień, możesz go używać dokładnie w ten sam sposób, w jaki używasz normalnej listy, z tym jednym wyjątkiem, że masz możliwość korzystania z indeksów ujemnych oraz takich, które są większe niż ilość elementów w danym pierścieniu, a będą one powtarzać się cyklicznie i zawsze będą wskazywać na jeden z elementów pierścienia:

en: Using Rings
pl: Korzystanie z Pierścieni

en: Let's say we're using a variable to represent the current beat number. We can use this as an index into our ring to fetch notes to play, or release times or anything useful we've stored in our ring regardless of the beat number we're currently on.
pl: Przyjmijmy, że używamy zmiennej do reprezentacji aktualnego numeru uderzenia. Możemy użyć jej jako indeksu w naszym pierścieniu, aby wydobywać kolejne nuty do zagrania, czasy zanikania albo cokolwiek innego przydatnego, co załadowaliśmy do naszego pierścienia, niezależnie od numeru uderzenia (beat), przy którym aktualnie się znajdujemy.

en: Scales and Chords are Rings
pl: Skale i Akordy są Pierścieniami

en: A useful thing to know is that the lists returned by `scale` and `chord` are also rings and allow you to access them with arbitrary indexes.
pl: Przydatną rzeczą jest wiedza o tym, że listy zwracane przez skale `scale` oraz akordy `chord` są również pierścieniami i pozwalają Ci na dostęp do nich z wykorzystaniem bezwzględnych indeksów.

en: Ring Constructors
pl: Konstruktory Pierścieni

en: In addition to `ring` there are a number of other functions which will construct a ring for us.
pl: Oprócz funkcji `ring` istnieje również kilka innych funkcji, które pozwalają nam na tworzenie pierścieni.

en: `range` invites you specify a starting point, end point and step size.
pl: `range` wymaga, abyś określił punkt startu, końca oraz rozmiar kroku.

en: `bools` allows you to use `1`s and `0`s to succinctly represent booleans.
pl: `bools` pozwala Ci na użycie wartości `1` i `0`, aby treściwie reprezentować wartości logiczne (boolean).

en: `knit` allows you to knit a sequence of repeated values.
pl: `knit` pozwala Ci na spajanie sekwencji powtarzalnych wartości.

en: `spread` creates a ring of bools with a Euclidean distribution.
pl: `spread` tworzy pierścień wartości logicznych o rozkładzie euklidesowym.

en: Take a look at their respective documentation for more information.
pl: Przyjrzyj się poszczególnym dokumentacjom dla uzyskania większej ilości informacji.

en: 8.5 Ring Chains
pl: 8.5 Łańcuchy Pierścieni (Ring Chains)

en: Ring Chains
pl: Łańcuchy Pierścieni (Ring Chains)

en: In addition to the constructors such as `range` and `spread` another way of creating new rings is to manipulate existing rings.
pl: Oprócz konstruktorów takich jak `range` i `spread`, innym sposobem tworzenia nowych pierścieni jest manipulowanie i modyfikacja istniejących pierścieni (rings).

en: Chain Commands
pl: Łańcuchy poleceń (Chain Commands)

en: To explore this, take a simple ring:
pl: Aby zbadać ten temat, stwórzmy prosty pierścień:

en: What if we wanted it backwards? Well we'd use the chain command `.reverse` to take the ring and turn it around:
pl: Co, jeśli chcielibyśmy otrzymać wszystkie elementy tego pierścienia w odwrotnej kolejności? Wystarczy, że użyjemy w łańcuchu poleceń `.reverse`, aby wziąć go i odwrócić:

en: Now, what if we wanted the first three values from the ring?
pl: A co, jeśli teraz potrzebujemy tylko pierwsze trzy elementy z naszego pierścienia?

en: Finally, what if we wanted to shuffle the ring?
pl: I na koniec jeszcze jedno: co, jeśli chcielibyśmy przetasować elementy naszego pierścienia tak, jak tasujemy karty przed grą?

en: Multiple Chains
pl: Wielokrotność Łańcuchów

en: This is already a powerful way of creating new rings. However, the *real* power comes when you chain a few of these commands together.
pl: Powyższe polecenia dają bardzo duże możliwości tworzenia nowych pierścieni (rings). Jednakże *prawdziwa* moc pojawia się dopiero w momencie, gdy połączysz kilka poleceń w jeden łańcuch.

en: How about shuffling the ring, dropping 1 element and then taking the next 3?
pl: Co powiesz na to, aby najpierw przetasować pierścień, potem usunąć z niego 1 element, i z elementów, które pozostały, wybrać tylko pierwsze 3?

en: Let's take this in stages:
pl: Zróbmy to krok po kroku:

en: `(ring 10, 20, 30, 40, 50)` - our initial ring
pl: `(ring 10, 20, 30, 40, 50)` - nasz początkowy pierścień

en: `(ring 10, 20, 30, 40, 50).shuffle` - shuffles - `(ring 40, 30, 10, 50, 20)`
pl: `(ring 10, 20, 30, 40, 50).shuffle` - tasujemy - `(ring 40, 30, 10, 50, 20)`

en: `(ring 10, 20, 30, 40, 50).shuffle.drop(1)` - drop 1 - `(ring 30, 10, 50, 20)`
pl: `(ring 10, 20, 30, 40, 50).shuffle.drop(1)` - usuwamy 1-wszy element - `(ring 30, 10, 50, 20)`

en: `(ring 10, 20, 30, 40, 50).shuffle.drop(1).take(3)` - take 3 - `(ring 30, 10, 50)`
pl: `(ring 10, 20, 30, 40, 50).shuffle.drop(1).take(3)` - pozostawiamy tylko pierwsze 3 - `(ring 30, 10, 50)`

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.
pl: Widzisz, jak łatwo możemy stworzyć długi łańcuch tych metod, *sklejając je po prostu razem*? Możemy użyć ich w dowolnej kolejności, na jaką nas tylko najdzie ochota. Dzięki temu mamy bardzo bogatą i potężną paletę sposobów, dzięki którym możemy tworzyć nowe pierścienie z już istniejących.

en: Immutability
pl: Niezmienność

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.
pl: Pierścienie posiadają pewną potężną i ważną cechę. Są niezmienne, co oznacza, że gdy raz zostaną już utworzone, to nie mogą zostać zmienione. Z tego wynika, że łańcuchy wywołań metod opisane w tym rozdziale *nie zmieniają pierścieni*, lecz *tworzą nowe pierścienie*. Dzięki takiemu podejściu nic nie stoi na przeszkodzie, abyś mógł współdzielić dany pierścień pomiędzy różnymi wątkami i wywoływać na nim łańcuchy metod w ramach jednego wątku, gdyż wiesz, że nie wpłynie to w żaden sposób na jakikolwiek inny wątek, który korzysta z tego samego pierścienia.

en: Available Chain Methods
pl: Dostępne Łańcuchy Metod

en: Here's a list of the available chain methods for you to play with:
pl: Oto lista metod, które możesz łączyć w łańcuchy wywołań:

en: `.reverse` - returns a reversed version of the ring
pl: `.reverse` - zwraca odwróconą wersję pierścienia

en: `.sort` - creates a sorted version of the ring
pl: `.sort` - tworzy posortowaną wersję pierścienia

en: `.shuffle` - creates a shuffled version of the ring
pl: `.shuffle` - tworzy pierścień z wartościami, które są przetasowane

en: `.pick` - returns a ring with the results of calling `.choose` once
pl: `.pick` - zwraca pierścień zawierający wyniki pojedynczego uruchomienia funkcji `.choose`

en: `.pick(3)` - returns a ring with the results of calling `.choose` 3 times
pl: `.pick(3)` - zwraca pierścień, który zawiera 3 losowo wybrane elementy z oryginalnego pierścienia (działanie analogiczne do funkcji `choose`)

en: `.take(5)` - returns a new ring containing only the first 5 elements
pl: `.take(5)` - zwraca nowy pierścień, który zawiera tylko 5 pierwszych elementów

en: `.drop(3)` - returns a new ring with everything but the first 3 elements
pl: `.drop(3)` - zwraca nowy pierścień, który zawiera wszystkie elementy oprócz pierwszych 3

en: `.butlast` - returns a new ring with the last element missing
pl: `.butlast` - zwraca nowy pierścień, który nie zawiera ostatniego elementu

en: `.drop_last(3)` - returns a new ring with the last 3 elements missing
pl: `.drop_last(3)` - zwraca nowy pierścień, który nie zawiera 3 ostatnich elementów

en: `.take_last(6)`- returns a new ring with only the last 6 elements
pl: `.take_last(6)`- zwraca nowy pierścień, który posiada tylko 6 ostatnich elementów

en: `.stretch(2)` - repeats each element in the ring twice
pl: `.stretch(2)` - powtarza każdy z elementów w pierścieniu dwukrotnie

en: `.repeat(3)` - repeats the entire ring 3 times
pl: `.repeat(3)` - powtarza cały pierścień trzykrotnie

en: `.mirror` - adds the ring to a reversed version of itself
pl: `.mirror` - dodaje pierścień do odwróconej wersji samego siebie

en: `.reflect` - same as mirror but doesn't duplicate middle value
pl: `.reflect` - działa tak samo jak mirror, ale nie powtarza środkowej wartości z pierścienia

en: `.scale(2)` - returns a new ring with all elements multiplied by 2 (assumes ring contains numbers only)
pl: `.scale(2)` - zwraca nowy pierścień, do którego zostają załadowane wszystkie elementy po uprzednim przemnożeniu przez 2 (przy założeniu, że pierścień ten zawiera tylko liczby)

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.
pl: Oczywiście metody, które przyjmują jako parametr liczbę, mogą przyjmować też inne liczby! Nie krępuj się więc i spróbuj wywołać metodę `.drop(5)` zamiast widocznej parę linijek wyżej metody `.drop(3)`. Pozwoli Ci to stworzyć nową listę, która nie będzie zawierała 5 pierwszych elementów.

en: 9 Live Coding
pl: 9 Kodowanie na Żywo

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.
pl: Jednym z najbardziej ekscytujących aspektów Sonic Pi jest to, że możesz tworzyć muzykę poprzez pisanie i modyfikację kodu na żywo, tak samo, jakbyś mógł występować na żywo z gitarą. Jedną z zalet takiego podejścia jest to, że powala Ci na otrzymywanie informacji zwrotnej znacznie szybciej niż w sytuacji, gdybyś komponował (stwórz prostą pętlę, która będzie się kręcić w kółko i zacznij dopieszczać ją, aż zacznie brzmieć idealnie). Głównym i podstawowym plusem jest jednak to, że możesz wziąć Sonic Pi ze sobą na scenę i wykorzystać go do występów na żywo.

en: In this section we'll cover the fundamentals of turning your static code compositions into dynamic performances.
pl: W tym rozdziale przedstawimy Ci podstawy tego, w jaki sposób możesz zmienić Twoje statyczne kompozycje w pełne życia występy.

en: Hold on to your seats...
pl: Zapnijcie pasy...

en: 9.1 Live Coding Fundamentals
pl: 9.1 Podstawy Kodowania na Żywo

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:
pl: Teraz nauczyliśmy się już wystarczająco dużo, aby rozpocząć prawdziwą zabawę. W tym rozdziale będziemy czerpać ze wszystkich poprzednich i pokażę Ci, w jaki sposób możesz zacząć tworzyć swoje własne kompozycje muzyczne na żywo i zmienić je w występy na żywo. Będziemy do tego potrzebować 3 podstawowych składników:

en: An ability to write code that makes sounds - CHECK!
pl: Umiejętność pisania kodu, który tworzy dźwięki - JEST!

en: An ability to write functions - CHECK!
pl: Umiejętność pisania własnych funkcji - JEST!

en: An ability to use (named) threads - CHECK!
pl: Umiejętność korzystania z (nazwanych) wątków - JEST!

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:
pl: W porząsiu, zaczynamy. Spróbujmy zakodować na żywo nasze pierwsze dźwięki. Najpierw potrzebujemy funkcję zawierającą kod, który chcemy zagrać. Zacznijmy od czegoś prostego. Potrzebujemy również, aby każda pętla wywołująca tę funkcję była uruchamiana w nowym wątku:

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.
pl: Jeśli powyższy kawałek kodu wydaje Ci się zbyt skomplikowany, wróć z powrotem i ponownie przeczytaj rozdziały dotyczące funkcji i wątków. Gdy to zrobisz i uda Ci się dobrze zrozumieć te 2 tematy, to powyższy kawałek nie powinien sprawić Ci żadnych kłopotów.

en: What we have here is a function definition which just plays note 50 and sleeps for a beat. We then define a named thread called `:looper` which just loops around calling `my_sound` repeatedly.
pl: To, co mamy powyżej, to nic innego jak funkcja, która po prostu gra nutę o wartości 50 i następnie czeka 1 uderzenie. W kolejnym kroku mamy definicję wątku nazwanego `:looper`, który po prostu kręci się w kółko i uruchamia funkcję `my_loop`.

en: If you run this code, you'll hear note 50 repeating again and again...
pl: Gdy uruchomisz ten kod, usłyszysz nutę 50, która powtarza się i gra w kółko...

en: Changing it up
pl: Spróbujmy coś zmienić

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!
pl: Teraz czas na moment, w którym zaczyna się cała zabawa. W momencie, gdy kod jest *wciąż uruchomiony*, spróbuj zmienić liczbę 50 na inną, powiedzmy 55, następnie naciśnij przycisk Run jeszcze raz. Łał! To się zmieniło! Ten kod żyje!

en: It didn't add a new layer because we're using named threads which only allow one thread for each name. Also, the sound changed because we *redefined* the function. We gave `:my_sound` a new definition. When the `:looper` thread looped around it simply called the new definition.
pl: Nowa warstwa dźwięku nie została dodana, ponieważ korzystamy z nazwanych wątków, co pozwala tylko na jeden wątek dla jednej nazwy. Ponadto, dźwięk się zmienił, ponieważ *przedefiniowaliśmy* funkcję. Nadaliśmy funkcji `:my_loop` nową definicję - znaczenie. Kiedy wątek `:looper` przekręci się po raz kolejny, to w następnej iteracji zostanie zawołana funkcja o nowej definicji.

en: Try changing it again, change the note, change the sleep time. How about adding a `use_synth` statement? For example, change it to:
pl: Spróbuj zmienić ją ponownie, zmień nutę, zmień wartość parametru, jaki przekazujemy do funkcji sleep. Co powiesz na dodanie polecenia `use_synth`? Na przykład zmieńmy kod w taki sposób:

en: define :my_sound do
      use_synth :tb303
      play 50, release: 0.3
      sleep 0.25
    end
pl: define :my_loop do
      use_synth :tb303
      play 50, release: 0.3
      sleep 0.25
    end

en: Now it sounds pretty interesting, but we can spice it up further. Instead of playing the same note again and again, try playing a chord:
pl: Brzmi to całkiem ciekawie, ale możemy urozmaicić to jeszcze bardziej. Zamiast grać w kółko tę samą nutę, spróbujmy zagrać akord:

en: define :my_sound do
      use_synth :tb303
      play chord(:e3, :minor), release: 0.3
      sleep 0.5
    end
pl: define :my_loop do
      use_synth :tb303
      play chord(:e3, :minor), release: 0.3
      sleep 0.5
    end

en: How about playing random notes from the chord:
pl: A co powiesz na granie losowych nut z akordu:

en: define :my_sound do
      use_synth :tb303
      play choose(chord(:e3, :minor)), release: 0.3
      sleep 0.25
    end
pl: define :my_loop do
      use_synth :tb303
      play choose(chord(:e3, :minor)), release: 0.3
      sleep 0.25
    end

en: Or using a random cutoff value:
pl: Albo użycie losowej wartości dla parametru odcięcia (cutoff):

en: define :my_sound do
      use_synth :tb303
      play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
      sleep 0.25
    end
pl: define :my_loop do
      use_synth :tb303
      play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
      sleep 0.25
    end

en: Finally, add some drums:
pl: I na sam koniec dodajmy trochę bębnów:

en: define :my_sound do
      use_synth :tb303
      sample :drum_bass_hard, rate: rrand(0.5, 2)
      play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
      sleep 0.25
    end
pl: define :my_loop do
      use_synth :tb303
      sample :drum_bass_hard, rate: rrand(0.5, 2)
      play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
      sleep 0.25
    end

en: Now things are getting exciting!
pl: Teraz zabawa zaczyna być naprawdę ekscytująca!

en: However, before you jump up and start live coding with functions and threads, stop what you're doing and read the next section on `live_loop` which will change the way you code in Sonic Pi forever...
pl: Jednakże zanim zamkniesz tutorial i zaczniesz kodować na żywo z wykorzystaniem funkcji i wątków, zatrzymaj się na chwilę i przeczytaj kolejny rozdział dotyczący funkcji `live_loop`, która zmieni Twój sposób kodowania w Sonic Pi na zawsze...

en: 9.2 Live Loops
pl: 9.2 Żywe Pętle (Live Loops)

en: Live Loops
pl: Żywe Pętle (Live Loops)

en: Ok, so this section of the tutorial is the real gem. If you only read one section, it should be this one. If you read the previous section on Live Coding Fundamentals, `live_loop` is a simple way of doing exactly that but without having to write so much.
pl: Dobrze, ten rozdział to prawdziwa perełka w tym samouczku. Jeśli masz przeczytać tylko jeden znajdujący się w tutorialu, powinien to być właśnie ten. Jeśli zaznajomiłeś się z poprzednim o Podstawach Kodowania Na Żywo, to `live_loop` jest prostszą metodą dokonania dokładnie tego samego, ale bez konieczności pisania tak dużej ilości kodu.

en: If you didn't read the previous section, `live_loop` is the best way to jam with Sonic Pi.
pl: Jeśli nie przeczytałeś poprzedniego rozdziału, funkcja `live_loop` jest najlepszym sposobem na jamowanie z Sonic Pi.

en: Let's play. Write the following in a new buffer:
pl: Zabawmy się. Wpiszmy następujący kod do nowego bufora:

en: Now press the Run button. You hear a basic beep every beat. Nothing fun there. However, don't press Stop just yet. Change the `60` to `65` and press Run again.
pl: Naciśnij przycisk Run. Słyszysz podstawowy bip przy każdym uderzeniu - nic szczególnego. Powstrzymaj się jednak i nie naciskaj jeszcze przycisku Stop. Zmień wartość `60` na `65` i naciśnij przycisk Run jeszcze raz.

en: Woah! It changed *automatically* without missing a beat. This is live coding.
pl: Łał! Brzmienie zmieniło się *automatycznie*, bez utraty żadnego uderzenia. To jest Kodowanie na Żywo.

en: Why not change it to be more bass like? Just update your code whilst it's playing:
pl: Czemu więc nie spróbować zmienić ten kawałek, aby brzmiał trochę bardziej jak linia basowa? Wystarczy, że wprowadzisz zmiany w kodzie, gdy ten wciąż jest uruchomiony:

en: Then hit Run.
pl: I naciśniesz przycisk Run.

en: Let's make the cutoff move around:
pl: Spróbujmy sprawić, aby pojawiła się odrobina odcięcia (cutoff):

en: Hit Run again.
pl: Ponownie naciśnij przycisk Run.

en: Add some drums:
pl: Dodajmy trochę bębnów:

en: Change the note from `e1` to `c1`:
pl: Zmień nutę `e1` na `c1`:

en: Now stop listening to me and play around yourself! Have fun!
pl: A teraz przestań słuchać moich propozycji i zacznij bawić się samodzielnie! Miłej zabawy!

en: 9.3 Multiple Live Loops
pl: 9.3 Wiele Żywych Pętli

en: Multiple Live Loops
pl: Wiele Żywych Pętli

en: Consider the following live loop:
pl: Przyjrzyjmy się następującej żywej pętli:

en: You may have wondered why it needs the name `:foo`. This name is important because it signifies that this live loop is different from all other live loops.
pl: Być może zastanawiałeś się, dlaczego konieczna jest nazwa `:foo`. Nazwa ta jest ważna, ponieważ oznacza, że ta konkretna żywa pętla jest inna od wszystkich innych żywych pętli.

en: *There can never be two live loops running with the same name*.
pl: *W tym samym czasie nie mogą być uruchomione dwie żywe pętle o tej samej nazwie*.

en: This means that if we want multiple concurrently running live loops, we just need to give them different names:
pl: Oznacza to, że jeśli potrzebujemy kilku jednocześnie kręcących się żywych pętli, to po prostu musimy nadać im inne nazwy:

en: You can now update and change each live loop independently and it all just works.
pl: Możesz teraz aktualizować i zmieniać każdą z żywych pętli niezależnie - i wszystko będzie po prostu działać.

en: Syncing Live Loops
pl: Synchronizacja Żywych Pętli

en: One thing you might have already noticed is that live loops work automatically with the thread cue mechanism we explored previously. Every time the live loop loops, it generates a new `cue` event with the name of the live loop. We can therefore `sync` on these cues to ensure our loops are in sync without having to stop anything.
pl: Jedną z rzeczy, które być może już zauważyłeś, jest to, że żywe pętle działają automatycznie z mechanizmem punktów cue dla wątków, które poznaliśmy już wcześniej. Za każdym razem, gdy żywa pętla wykona jedno okrążenie, generuje nowe zdarzenie `cue`, nadając mu nazwę taką samą, jaką nadaliśmy żywej pętli. Możemy więc synchronizować się z wykorzystaniem funkcji `sync` na każdym zdarzeniu `cue`, aby upewnić się, że nasze pętle są zsynchronizowane, bez konieczności zatrzymywania czegokolwiek.

en: Consider this badly synced code:
pl: Spójrzmy na poniższy kod, który został źle zsynchronizowany:

en: Let's see if we can fix the timing and sync without stopping it. First, let's fix the `:foo` loop to make the sleep a factor of 1 - something like `0.5` will do:
pl: Zobaczmy, czy możemy naprawić chronometraż (timing) bez zatrzymywania. Najpierw naprawmy pętlę `:foo`, tak aby sprawić, że wartość parametru sleep będzie współczynnikiem liczby 1 - coś jak `0.5` powinno być okej:

en: We're not quite finished yet though - you'll notice that the beats don't quite line up correctly. This is because the loops are *out of phase*. Let's fix that by syncing one to the other:
pl: To jeszcze nie koniec - powinieneś zauważyć, że uderzenia nie do końca ustawiają się odpowiednio. Dzieje się tak, ponieważ pętle *nie są synchronizowane*. Spróbujmy to naprawić przez ich synchronizację:

en: Wow, everything is now perfectly in time - all without stopping.
pl: Łał, teraz wszystko działa perfekcyjnie w czasie - i to wszystko bez zatrzymywania.

en: Now, go forth and live code with live loops!
pl: A teraz nie zatrzymuj się i koduj na żywo z wykorzystaniem żywych pętli!

en: 9.4 Ticking
pl: 9.4 Cykanie

en: Ticking
pl: Cykanie

en: Something you'll likely find yourself doing a lot when live coding is looping through rings. You'll be putting notes into rings for melodies, sleeps for rhythms, chord progressions, timbral variations, etc. etc.
pl: Coś, co na pewno będziesz robił dość często podczas kodowania na żywo, to iterowanie przez pierścienie. Będziesz wrzucał nuty do pierścieni dla tworzenia melodii, czasów uśpienia dla rytmów, progresji akordów, różnych wariacji barw dźwięku itd.

en: Ticking Rings
pl: Cykające Pierścienie

en: Sonic Pi provides a *very* handy tool for working with rings within `live_loop`s. It's called the tick system. In the section about the rings we were talking about the counter that is constantly increasing, like a current beat number. Tick just implements this idea. It provides you with the ability to *tick through rings*. Let's look at an example:
pl: Sonic Pi udostępnia *bardzo* przydatne narzędzie do pracy z pierścieniami w żywych pętlach `live_loop`. Nazywa się to systemem cykania. Udostępnia Ci możliwość *cykania przez pierścienie*. Spójrzmy na następujący przykład:

en: This is equivalent to:
pl: Jest to odpowiednik dla:

en: Here, we're just grabbing the scale E3 minor pentatonic and ticking through each element. This is done by adding `.tick` to the end of the scale declaration. This tick is local to the live loop, so each live loop can have its own independent tick:
pl: Wzięliśmy tu pentatoniczną skalę E3 moll i cykamy przez każdy jej element. Dokonaliśmy tego przez dodanie polecenia `.tick` na końcu deklaracji skali. Każde cyknięcie jest lokalne dla danej żywej pętli, więc każda żywa pętla może posiadać swojego własnego niezależnego cykacza:

en: Tick
pl: Cyknięcie

en: You can also call `tick` as a standard fn and use the value as an index:
pl: Możesz również uruchomić polecenie cyknięcia `tick` jako standardową funkcję i używać zwracanej wartości jako indeksu:

en: However, it is much nicer to call `.tick` at the end. The `tick` fn is for when you want to do fancy things with the tick value and for when you want to use ticks for other things than indexing into rings.
pl: Jednakże dużo ładniej jest korzystać z polecenia `.tick` dodanego na końcu. Funkcja `tick` jest stworzona dla sytuacji gdy chcesz zrobić coś fantazyjnego z wartością zwracaną przy cyknięciu oraz wtedy, gdy chcesz używać cyknięć do innych rzeczy niż indeksowania elementów pierścieni.

en: Look
pl: Look (z ang. podejrzeć)

en: The magical thing about tick is that not only does it return a new index (or the value of the ring at that index) it also makes sure that next time you call tick, it's the next value. Take a look at the examples in the docs for `tick` for many ways of working with this. However, for now, it's important to point out that sometimes you'll want to just look at the current tick value and *not increase* it. This is available via the `look` fn. You can call `look` as a standard fn or by adding `.look` to the end of a ring.
pl: Magiczną rzeczą w cykaniu jest to, że masz możliwość nie tylko zwrócić nowy indeks (albo wartość znajdującą się w pierścieniu pod tym indeksem). Mechanizm ten pilnuje też, aby przy każdym Twoim kolejnym cyknięciu była to kolejna wartość. Zerknij na przykłady znajdujące się w dokumentacji dla polecenia `tick`, by zobaczyć wiele różnych sposobów na pracę z nim. Jednakże na tę chwilę ważne jest zaznaczenie tego, iż czasami będziesz chciał po prostu podejrzeć aktualną wartość cyknięcia *bez zwiększania* jego wartości. Możesz tego dokonać za pomocą funkcji `look`. Masz również możliwość uruchomienia polecenia `look` jako standardowej funkcji lub poprzez dodanie `.look` na końcu pierścienia.

en: Naming Ticks
pl: Nazwane Cyknięcia

en: Finally, sometimes you'll need more than one tick per live loop. This is achieved by giving your tick a name:
pl: Finalnie czasami będziesz potrzebował więcej niż jednego cykacza dla danej żywej pętli. Można tego dokonać poprzez nadanie Twojemu cyknięciu nazwę:

en: Here we're using two ticks one for the note to play and another for the sleep time. As they're both in the same live loop, to keep them separate we need to give them unique names. This is exactly the same kind of thing as naming `live_loop`s - we just pass a symbol prefixed with a `:`. In the example above we called one tick `:foo` and the other `:bar`. If we want to `look` at these we also need to pass the name of the tick to `look`.
pl: Powyżej używamy dwóch cykaczy, jednego dla zagrania nuty i drugiego dla odliczania czasu uśpienia. Jako że oba znajdują się w tej samej żywej pętli, potrzebowaliśmy nadać im unikalne nazwy, aby sprawić, by były oddzielne. To jest dokładnie taki sam mechanizm, jak w przypadku żywych pętli (`live_loop`) - po prostu przekazujemy symbol poprzedzony dwukropkiem `:`. W powyższym przykładzie nazwaliśmy pierwszego cykacza `:foo`, a drugiego `:bar`. Jeśli chcemy podejrzeć aktualną wartość któregoś z nich za pomocą polecenia `look`, to musimy do polecenia `look` również przekazać nazwę konkretnego cykacza.

en: Don't make it too complicated
pl: Nie twórz zbyt skomplikowanych rzeczy

en: Most of the power in the tick system isn't useful when you get started. Don't try and learn everything in this section. Just focus on ticking through a single ring. That'll give you most of the joy and simplicity of ticking through rings in your `live_loop`s.
pl: Większość mocy zawartej w systemie cykania nie jest przydatna, gdy dopiero zaczynasz. Nie próbuj i nie ucz się wszystkiego z tego rozdziału. Postaraj skupić się na cykaniu przez pojedynczy pierścień. To powinno dać Ci największą satysfakcję oraz prostotę związaną z cykaniem przez pierścienie w Twoich żywych pętlach.

en: Take a look at the documentation for `tick` where there are many useful examples and happy ticking!
pl: Zerknij do dokumentacji na polecenie `tick`, gdzie znajdziesz wiele przydatnych przykładów. Wesołego cykania!

en: 10 Time State
pl: 10 Stan Czasu

en: Time State
pl: Stan czasu

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).
pl: Bardzo często przydatne jest posiadanie informacji, która jest *współdzielona pomiędzy wieloma wątkami lub żywymi pętlami*. Na przykład, chciałbyś współdzielić aktualną gamę, BPM albo może nawet bardziej abstrakcyjne koncepty takie jak aktualna 'złożoność' (coś co mógłbyś interpretować na różne sposoby w różnych wątkach). Ponadto nie chcemy także zgubić żadnego z naszych istniejących i deterministycznych mechanizmów gdy to robimy. Innymi słowy, chcielibyśmy być w stanie współdzielić kod z innymi i być stuprocentowo pewnymi tego, że usłyszą to co chcemy gdy go uruchomią. Pod koniec Sekcji 5.6 tego samouczka krótko wyjaśniliśmy dlaczego *nie powinniśmy używać zmiennych do współdzielenia informacji pomiędzy różnymi wątkami* ze względu na możliwość utraty determinizmu (to z kolei z powodu wyścigu wątków).

en: Meet `get` and `set`...
pl: Poznaj `get` i `set`...

en: 10.1 Set and Get
pl: 10.1 Set i Get

en: Set and Get
pl: Set i 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...
pl: Sonic Pi posiada globalny magazyn pamięci nazywany Stanem Czasu. Dwie podstawowe operacje jakie możesz na nim wykonywać to ustawienie informacji (`set`) oraz pobranie informacji (`get`). Zanurzmy się głębiej...

en: To store information into the Time State we need two things:
pl: Aby dodać jakąś informację do Stanu Czasu musimy zrobić dwie rzeczy:

en: the information we want to store,
pl: informacja, którą zamierzamy dodać,

en: a unique name (key) for the information.
pl: unikalna nazwa (klucz) dla naszej informacji.

en: For example, we might want to store the number `3000` with the key `:intensity`. This is possible using the `set` function:
pl: Na przykład, możemy chcieć zachować liczbę `3000` pod kluczem `:intensity` (intensywność). Można to zrobić używając funkcji `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:
pl: Możemy użyć dowolnej nazwy dla naszego klucza (key). Jeśli jakaś informacja została już zapisana pod tym kluczem, nasze nowe ustawienie (`set`) nadpisze je:

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.
pl: W powyższym przykładzie, jako że zapisaliśmy obie liczby pod tym samym kluczem, ostanie uruchomienie funkcji `set` 'wygrywa'. Wynika z tego, że liczba powiązana z `:intensity` będzie wynosić `3000` ponieważ pierwsze wywołanie funkcji `set` zostało efektywnie nadpisane.

en: Get
pl: Pobierz (Get)

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:
pl: Aby pobrać informację ze Stanu Czasu (Time State) potrzebujemy tylko klucza, którego użyliśmy do ustawienia go za pomocą funkcji `set`, w naszym przypadku jest to `:intensity` Następnie musimy tylko uruchomić polecenie `get[:intensity]` i będziemy mogli podejrzeć tę wartość poprzez wyświetlenie wyniku w panelu z logami:

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.
pl: Zauważ, że odwołanie do `get` może zwrócić informację która została ustawiona (`set`) w poprzednim uruchomieniu. Gdy już raz pewna informacja zostanie ustawiona za pomocą polecenia `set` staje się ona dostępna dopóki nie zostanie nadpisana (dokładnie tak samo jak zmieniliśmy wartość dostępną pod symbolem`:intensity`z `1000` na `3000` powyżej) lub Sonic PI zostanie zamknięty.

en: Multiple Threads
pl: Wiele Wątków

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:
pl: Podstawową korzyścią systemu Stanu Czasu (Time State) jest to, że może być on bezpiecznie używany pomiędzy różnymi wątkami oraz żywymi pętlami. Na przykład, możesz mieć jedną żywą pętlę, która ustawia pewną informację oraz inną, która ją wyciąga:

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:
pl: Ogromną zaletą korzystania z funkcji `set` i `get` w różnych wątkach jest fakt, że zawsze dają one ten sam wynik przy uruchomieniu przycisku 'Run'. Dalej, spróbuj sam. Sprawdź czy dostaniesz taki sam rezultat w swoich logach:

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).
pl: Spróbuj uruchomić to kilkukrotnie - zauważ, że za każdym razem wynik jest taki sam. To jest właśnie coś co nazywamy zachowaniem deterministycznym. Jest to bardzo ważne gdy chcemy podzielić się naszą muzyką jako kodem. Zależy nam na tym aby osoba uruchamiająca nasz kod usłyszała dokładnie to co chcieliśmy aby usłyszała (dokładnie tak samo jak z odtworzeniem utworu MP3 czy stream'a z dźwiękiem w internecie brzmi identycznie dla każdego ze słuchaczy).

en: A Simple Deterministic State System
pl: Prosty Deterministyczny System Stanu

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:
pl: Wcześniej w Sekcji 5.6 rozważaliśmy dlaczego wykorzystywanie zmiennych w różnych wątkach może prowadzić do nieoczekiwanych zachowań. Powoduje to, że nie jesteśmy w stanie wiarygodnie odtworzyć kod taki jak ten:

en: Let's take a look at how this might look using `get` and `set`:
pl: Spróbujmy zobaczyć jak mogłoby to wyglądać gdybyśmy użyli funkcji `get` i `set`:

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.
pl: Zauważ, że ten kod jest prawie identyczny z wersją, w której używaliśmy wcześniej zmiennej. Jednakże, kiedy uruchomisz ten kod, zacznie się on zachowywać tak jakbyś tego oczekiwał od typowego kodu Sonic Pi - w tym wypadku *za każdym razem jest wykonywana ta sama rzecz*, wszystko dzięki systemowi Stanu Czasu (Time State).

en: Therefore, when sharing information across live loops and threads, use `get` and `set` instead of variables for deterministic, reproducible behaviour.
pl: Dlatego, gdy współdzielimy informację pomiędzy różnymi żywymi pętlami i wątkami, używajmy funkcji `get` i `set` zamiast zmiennych aby otrzymać deterministyczne i powtarzalne zachowanie.

en: 10.2 Sync
pl: 10.2 Synchronizacja (Sync)

en: Section 5.7 introduced the functions `cue` and `sync` when dealing with the issue of synchronising threads. What it didn't explain was that it is the Time State system which provides this functionality. It just so happens that `set` is actually a variation of `cue` and is built on top of the same core functionality which is to insert information into the Time State system. Additionally, `sync` is also designed in such a way that it works seamlessly with Time State - any information that we plan to store in Time State we can sync on. In other words - *we `sync` on events yet to be inserted into Time State*.
pl: Sekcja 5.7 wprowadziła funkcje `cue` i `sync`, mieliśmy wtedy do czynienia z problemem synchronizacji wątków. To co nie zostało wytłumaczone to fakt, że funkcjonalność ta jest zapewniona przez system Stanu Czasu (Time State). Tak się właśnie dzieje gdyż funkcja `set` jest w zasadzie wariacją funkcji `cue` i jest zbudowana na bazie tej samej podstawowej funkcjonalności, która pozwala na umieszczenie informacji w systemie Stanu Czasu. Ponadto, `sync` jest również zaprojektowany w taki sposób, że działa bezproblemowo z Stanem Czasu - do każdej informacji, którą chcielibyśmy umieścić w Stanie Czasu, możemy się zsynchronizować. Innymi słowy - *synchronizujemy się (`sync`) na zdarzeniach, które będą umieszczone w Stanie Czasu*.

en: Waiting for Events
pl: Czekając na Zdarzenia

en: Let's take a quick look at how to use `sync` to wait for new events to be added to Time State:
pl: Spróbujmy spojrzeć szybko jak należy używać polecenia `sync` aby móc poczekać aby nowe zdarzenia zostały dodane do Stanu Czasu (Time State):

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.
pl: W tym przykładzie najpierw tworzymy wątek, który czeka na zdarzenie `:foo` aby można go było dodać do Stanu Czasu. Po zadeklarowaniu tego wątku śpimy przez 2 uderzenia i następnie ustawiamy (`set`) `:foo` na wartość `1`. To z kolei zwalnia `sync` co pozwala na przeniesienie się do kolejnej linii, w której zostaje wywołany sampel `: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.
pl: Zauważ, że funkcja `sync` zawsze czeka na *przyszłe zdarzenia*, i że zablokuje on aktualny wątek w oczekiwaniu na kolejne zdarzenie. Ponadto, odziedziczy ona czas logiczny wątku, który wywołał ją poprzez funkcję `set` lub `cue`, więc może też być używana do synchronizowania czasu.

en: Passing values into the Future
pl: Przekazywanie wartości w Przyszłość

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`:
pl: W przykładzie powyżej nadajemy `:foo` wartość `1` i nic z nią nie robimy. Możemy właściwie pobrać tę wartość wewnątrz wątku korzystając z `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.
pl: Zauważ, że wartości które są przekazywane do funkcji `set` i `cue` muszą być bezpieczne dla wątków - np. niezmienne pierścienie (rings) liczby, symbole lub zamrożone łańcuch znaków (strings). Sonic Pi rzuci błąd jeśli wartość którą próbujesz umieścić w Stanie Czasu (Time State) jest niepoprawna.

en: 10.3 Pattern Matching
pl: 10.3 Dopasowanie Do Wzorca

en: Pattern Matching
pl: Dopasowanie do wzorca

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.
pl: Kiedy pobieramy i ustawiamy informacje w Stanie Czasu (Time State), możemy używać bardziej złożonych kluczy niż podstawowe symbole takie jak `:foo` czy ':bar`. Możesz także używać ciągów znaków w stylu adresów URL zwanymi ścieżkami, np. `"/foo/bar/baz"`. Gdy już zaczniemy pracować ze ścieżkami, możemy wtedy zacząć korzystać z wyrafinowanego systemu dopasowania wzorców Sonic Pi aby pobierać (`get`) i synchronizować (`sync`) się z 'podobnymi' a niekoniecznie 'takimi samymi' ścieżkami. Rzućmy okiem.

en: Match any path segment
pl: Dopasuj dowolny segment w ścieżce

en: Let's assume we want to wait for the next event that has three path segments:
pl: Załóżmy, że chcemy poczekać na kolejne zdarzenie, które posiada trzy segmenty w ścieżce:

en: This will match any Time State event with exactly three path segments, regardless of their names. For example:
pl: Spowoduje to dopasowanie do dowolnego zdarzenia w Stanie Czasu posiadającego dokładnie trzy segmenty ścieżki, bez względu na ich nazwy. Na przykład:

en: However, it will *not* match paths with fewer or more path segments. The following will not match:
pl: Jednakże, *nie* zostaną dopasowane ścieżki z mniejszą lub większą ilością segmentów. Poniższe nie zostaną dopasowane:

en: Each `*` means *any content*. So we could match paths with just one segment with `/*` or paths with five segments with `/*/*/*/*/*`
pl: Każda gwiazdka `*` oznacza *dowolną treść*. Możemy więc dopasować ścieżki tylko z jednym segmentem używając `/*` lub ścieżek z pięcioma segmentami używając `/*/*/*/*/*`

en: Matching partial segments
pl: Częściowe dopasowanie segmentów

en: However, it wouldn't match the following:
pl: Jednakże, nie będzie to pasować do następującego:

en: Matching Nested Path Segments
pl: Dopasowywanie Zagnieżdżonych Segmentów Ścieżki

en: Matching Single Letters
pl: Dopasowywanie Pojedynczych Liter

en: You can use the `?` character to match against a single char such as `"/?oo/bar/baz"` which will match:
pl: Możesz użyć znaku zapytania `?`, aby dopasować pojedynczy znak, na przykład `"/?oo/bar/baz"`, który będzie pasować do:

en: Matching Multiple Words
pl: Dopasowywanie Wielu Słów

en: Matching Multiple Letters
pl: Dopasowywanie Wielu Liter

en: Combining Matchers
pl: Łączenie Wzorców Dopasowania

en: OSC Pattern Matching
pl: Dopasowywanie Wzorców 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:
pl: Gdy opanujesz konwertowanie kodu na muzykę, możesz się zastanawiać – co dalej? Czasami ograniczenia wynikające z pracy wyłącznie ze składnią i systemem dźwiękowym Sonic Pi mogą być ekscytujące i wpłynąć na nową kreatywność. Jednakże czasami istotne jest, aby wyjść poza kod i zanurzyć się w prawdziwym świecie. Chcemy uzyskać dwie dodatkowe rzeczy:

en: To be able to convert actions in the real world into Sonic Pi events to code with
pl: Aby móc przekształcać zdarzenia z prawdziwego świata na zdarzenia w Sonic Pi, które można zakodować

en: Controlling Code
pl: Kontrolowanie Kodu

en: Getting Values
pl: Wyciąganie Wartości

en: Increasing the Duration
pl: Zwiększanie Czasu Trwania

en: Multiple Inputs
pl: Wiele Wejść

en: Live Audio
pl: Dźwięk Na Żywo

en: Conclusions
pl: Wnioski

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.
pl: Czas na podsumowanie samouczka wprowadzającego do Sonic Pi. Mam nadzieję, że nauczyłeś się czegoś w trakcie jego czytania. Nie przejmuj się, jeśli czujesz, że nie wszystko zrozumiałeś - po prostu graj i baw się, a na pewno załapiesz kolejne rzeczy w odpowiednim dla siebie czasie. Nie krępuj się i zajrzyj tutaj ponownie, jeśli będziesz miał jakieś pytanie, na które odpowiedź znajduje się w jednym z rozdziałów.

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.
pl: I na koniec zachęcam Cię również, abyś przyjrzał się głębiej pozostałej części dokumentacji dostępnej w systemie pomocy. Znajdziesz tam wiele funkcjonalności, które nie zostały omówione w tym samouczku i czekają tam, abyś je odkrył.

en: So play, have fun, share your code, perform for your friends, show your screens and remember:
pl: A więc graj, baw się, dziel się twoim kodem, występuj na żywo przed twoimi znajomymi, pokazuj swój ekran i pamiętaj:

en: *There are no mistakes, only opportunities.*
pl: *Błędów nie ma, są tylko nowe możliwości.*

en: A Appendix A - MagPi Articles
pl: A Dodatek A - Artykuły z magazynu MagPi

en: MagPi Articles
pl: Artykuły z magazynu MagPi

en: Appendix A collects all the Sonic Pi articles written for the MagPi magazine.
pl: Dodatek A to zbiór wszystkich artykułów o Sonic Pi, które zostały napisane dla magazynu MagPi.

en: Dive into Topics
pl: Jak czytać poszczególne tematy

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.
pl: Artykuły te nie zostały napisane, aby czytać je w określonej kolejności czy porządku. Materiał w nich zawarty często pokrywa się z materiałem zawartym w samouczku. Zamiast próbować nauczyć Cię wszystkiego o Sonic Pi, skupia się raczej na specyficznych aspektach aplikacji i stara się opisać je w sposób zabawny i przystępny.

en: Read the MagPi
pl: Czytaj magazyn 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/
pl: Artykuły te możesz przeczytać i obejrzeć w pełnej krasie w darmowej wersji PDF magazynu MagPi, który możesz pobrać tutaj: https://www.raspberrypi.org/magpi/

en: Suggest a Topic
pl: Zaproponuj temat

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!
pl: Jeśli okaże się, że pośród tych artykułów nie znalazłeś tematu, który Cię interesuje - to czemu nie miałbyś go zaproponować? Najlepszy sposób to napisanie o tym pomyśle do [@Sonic Pi](http://twitter.com/sonic_pi). Nigdy nie wiadomo - być może Twoja sugestia będzie głównym tematem kolejnego artykułu!

en: A.1 Tips for Sonic Pi
pl: A.1 Wskazówki dla Sonic Pi

en: Five Top Tips
pl: Pięć najważniejszych wskazówek

en: 1. There are no mistakes
pl: 1. Błędów nie ma

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.
pl: Najważniejszą lekcją, jaką powinieneś wynieść z Sonic Pi, jest taka, że tak naprawdę błędów nie ma. Najlepsza metoda nauki to ciągłe próbowanie, próbowanie i próbowanie. Próbuj wielu różnych pomysłów oraz nie przejmuj się tym, czy Twój kod brzmi dobrze czy źle - zacznij eksperymenty z możliwie największą liczbą różnych syntezatorów, nut, efektów (FX) i opcji. Odkryjesz ogrom rzeczy, które spowodują, że będziesz się śmiać. Niektóre będą brzmieć strasznie, a inne będą prawdziwymi perełkami brzmiącymi niesamowicie dobrze. Wystarczy, że pominiesz rzeczy, które Ci się nie podobają i zostawisz tylko te wpadające Ci w ucho. Im więcej 'błędów' pozwolisz sobie popełnić, tym szybciej się będziesz uczyć i odkryjesz kod, który oddaje Twoje indywidualne brzmienie.

en: 2. Use the FX
pl: 2. Używaj efektów (FX)

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:
pl: Więc mówisz, że właśnie opanowałeś podstawy Sonic Pi polegające na tworzeniu dźwięków z wykorzystaniem poleceń `sample` i `play`? Co dalej? Czy wiedziałeś, że Sonic Pi wspiera ponad 27 efektów studyjnych (FX), które pozwalają na zmianę brzmienia Twojego kodu? Są one niczym ekstrawaganckie filtry obrazów, jakie możesz znaleźć w programach graficznych, z tym że zamiast rozmazywania lub sprawiania, iż coś staje się czarno białe, możesz dodać rzeczy takie jak pogłos (ang. reverb), zniekształcenie (ang. distortion) lub echo do Twoich dźwięków. Pomyśl o tym jak o kablu, który łączy Twoją gitarę z pedałami do efektów, które sam wybrałeś, a następnie prowadzi do wzmacniacza. Na szczęście Sonic Pi sprawia, że używanie efektów jest naprawdę proste i nie wymaga żadnych kabli! Jedyne, co musisz zrobić, to wybrać sekcję Twojego kodu, która powinna być objęta efektem i otoczyć ją kodem FX. Spójrzmy na przykład - powiedzmy, że masz następujący kawałek kodu:

en: If you wanted to add FX to the `:loop_garzul` sample, you'd just tuck it inside a `with_fx` block like this:
pl: Jeśli chcesz nałożyć efekt na sampel `:loop_garzul`, wystarczy, że wsadzisz go w blok `with_fx` w taki sposób:

en: Now, if you wanted to add FX to the bass drum, go and wrap that with `with_fx` too:
pl: A teraz, jeśli chcesz dodać efekt do bębna, to jego też po prostu otocz poleceniem `with_fx`:

en: Remember, you can wrap *any* code within `with_fx` and any sounds created will pass through that FX.
pl: Zapamiętaj - możesz otoczyć *dowolny* kawałek kodu poleceniem `with_fx` i każdy z tworzonych dźwięków będzie przepuszczony przez ten efekt (FX).

en: 3. Parameterise your synths
pl: 3. Używaj parametrów w Twoich syntezatorach

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:
pl: Jeśli naprawdę chcesz odkryć Twoje własne brzmienie w kodzie, to dość szybko będziesz chciał dowiedzieć się, w jaki sposób zmieniać i kontrolować syntezatory oraz efekty. Na przykład możesz chcieć zmienić czas trwania jakiejś nuty, dodać więcej pogłosu (reverb) lub zmienić odstęp pomiędzy echo. Na szczęście Sonic Pi daje Ci niesamowity poziom kontroli nad tymi aspektami za pomocą rzeczy, które nazywają się parametrami opcjonalnymi, w skrócie opcjami. Rzućmy okiem. Skopiuj poniższy kawałek kodu do buforu i naciśnij przycisk "Run":

en: Ooh, a lovely guitar sound! Now, let's start playing with it. How about changing its rate?
pl: Ooo, przyjemny dźwięk gitary! A teraz spróbujmy się tym pobawić. Co powiesz na zmianę tempa?

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:
pl: Hej, czym jest ten kawałek `rate: 0.5`, który przed chwilą dodałem na końcu? Nazywamy to opcją. Wszystkie syntezatory i efekty w Sonic Pi je wspierają i jest ich bardzo dużo do zabawy. Są również dostępne dla efektów. Spróbuj tego:

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:
pl: Najlepszym metodą na szybkie eksperymenty i naukę Sonic Pi jest kodowanie na żywo. Pozwala Ci to na uruchomienie jakiegoś kawałka kodu, a następnie na sukcesywne zmienianie i ulepszanie go, gdy ten cały czas gra. Przypuśćmy, że nie wiesz, jak działa opcja `cutoff` na wybrany przez Ciebie sampel - wystarczy, że zaczniesz się nim bawić. Spróbujmy tego! Skopiuj poniższy kawałek kodu do jednego z Twoich buforów:

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`...
pl: Teraz naciśnij przycisk "Run", a usłyszysz lekko przytłumiony breakbit. Następnie mień wartość opcji `cutoff:` na 80 i ponownie naciśnij "Run". Słyszysz różnicę? Spróbuj tego samego dla kolejnych wartości: `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.
pl: Gdy raz spróbujesz polecenia `live_loop`, to już nigdy nie będziesz chciał wrócić. Zawsze, kiedy koduję na żywo na jakiejś imprezie, polegam na poleceniu `live_loop` tak samo, jak perkusista polega na swoich pałeczkach. Jeśli chcesz dowiedzieć się więcej o kodowaniu na żywo, zajrzyj do rozdziału nr 9 samouczka, który jest wbudowany w Sonic Pi.

en: 5. Surf the random streams
pl: 5. Surfuj po losowych strumieniach

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:
pl: Jedna z rzeczy, którą uwielbiam robić, to oszukiwanie poprzez wykorzystywanie Sonic Pi, aby komponował melodie za mnie. Bardzo dobrym sposobem jest wykorzystanie do tego celu randomizacji. Może to brzmieć odrobinę skomplikowanie, ale tak naprawdę nie jest. Przyjrzyjmy się temu bliżej - skopiuj poniższy kod do jakiegoś pustego buforu:

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`:
pl: Teraz, kiedy włączysz ten kawałek, usłyszysz stały strumień losowych nut z gamy (skali) pentatonicznej e-moll zagranej przez syntezator `:dsaw`. "Czekaj, czekaj! Przecież to nie jest melodia" Usłyszałem jak krzyczysz! Spokojnie, to pierwsza część magicznej ścieżki. Możemy powiedzieć Sonic Pi, aby zmieniał losowy strumień dźwięków po każdym przebiegu pętli. To jest trochę podobne do sytuacji, w której przenieślibyśmy się w czasie i przestrzeni za pomocą TARDIS'a razem z Doktorem Who. Spróbuj dodać linijkę `use_random_seed 1` w pętli `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.
pl: Teraz, przy każdej kolejnej iteracji pętli, losowy strumień jest resetowany. Oznacza to, że za każdym razem losowane są te same nuty. Bułka z masłem! Melodia błyskawiczna. A teraz czas na coś naprawdę ekstra. Zmień wartość przy poleceniu `seed` na inną liczbę. Powiedzmy `4923`. Łał! Kolejna melodia! Wystarczy więc zmienić jedną liczbę, aby móc poznawać tyle kombinacji melodii, ile tylko sobie wyobrazisz. I to jest właśnie magia kodu!

en: A.2 Live Coding
pl: A.2 Kodowanie na żywo

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.
pl: Być może brzmi to jak historia z przyszłości opisująca futurystyczny klub, ale kodowanie muzyki w ten sposób to rosnący trend i często jest opisywany jako kodowanie na żywo (http://toplap.org). Jednym z obecnych kierunków, jaki obrał ruch tworzący muzykę w taki sposób, jest Algorave (http://algorave.com) - wydarzenia, podczas których osoby takie jak ja kodują muzykę do tańca dla ludzi. Jednakże, wcale nie musisz być w klubie, żeby Kodować Na Żywo z Sonic Pi v2.6+, możesz to robić gdziekolwiek tylko Ci się uda zabrać ze sobą swój komputer, parę słuchawek lub głośniki. Kiedy skończysz czytać ten artykuł, będziesz programował swoje własne bity i zmieniał je na żywo. Gdzie pójdziesz - dalej będzie ograniczone tylko Twoją wyobraźnią.

en: Live Loop
pl: Live Loop (Żywa Pętla)

en: The key to live coding with Sonic Pi is mastering the `live_loop`. Let's look at one:
pl: Kluczem do kodowania na żywo jest okiełznanie polecenia `live_loop`. Przyjrzyjmy się jednej:

en: Redefining On-the-fly
pl: Redefiniowanie w locie

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:
pl: No dobra, ale co w takim razie jest takiego wyjątkowego w żywej pętli `live_loop`? Jak do tej pory wygląda to jak zwykła pętla `loop`, która została wyniesiona na piedestał. Całe piękno pętli `live_loop` polega na tym, że możemy zmieniać ją w locie. Oznacza to, iż możemy mamy możliwość zmiany jej zachowania. Jest to klucz do kodowania na żywo. Spróbujmy zrobić coś takiego:

en: Sleeping is important
pl: Spanie (ang. sleep) jest ważne

en: One of the most important lessons about `live_loop`s is that they need rest. Consider the following `live_loop`:
pl: Jedną z najważniejszych lekcji dotyczących pętli `live_loop` jest to, że potrzebują one odpoczynku. Przyjrzyjmy się następującej pętli `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`.
pl: Jeśli spróbujesz uruchomić powyższy kawałek kodu, szybko zauważysz, że pętla `live_loop` zacznie narzekać, że nie spała. To jest miejsce, w którym do akcji wkracza system bezpieczeństwa! Zatrzymaj się na chwilę i zastanów się, czego ten kawałek kodu oczekuje od komputera. Tak jest, prosi komputer, żeby zagrał sampel ambi_hoir nieskończoną ilość razy od razu. Gdyby nie system bezpieczeństwa, to nasz biedny komputer spróbowałby zrobić to, o co go prosimy, w wyniku czego popsułby się i spalił. Pamiętaj więc, Twoje żywe pętle muszą posiadać polecenie `sleep`.

en: Combining Sounds
pl: Łączenie Dźwięków

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`!
pl: Muzyka jest pełna rzeczy, które się dzieją w tym samym czasie. Bębny grają, a w tym samym czasie słychać bas, wokal i gitarę... W komputerach nazywamy to współbieżnością, a Sonic Pi pozwala nam na granie różnych dźwięków w tym samym czasie w niesamowicie prosty sposób. Wystarczy, że użyjemy więcej niż jednej pętli `live_loop`!

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:
pl: Jedną z interesujących rzeczy w używaniu wielu pętli `live_loop` jest to, że każda z nich zarządza swoim czasem. Oznacza to, iż bardzo łatwo można stworzyć interesujące struktury polirytmiczne, a nawet grać fazami w stylu Stevena Reicha! Spróbuj tego:

en: Bringing it all together
pl: Połączenie tego wszystkiego w jedną całość

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...
pl: Każdy z tutoriali ma swoje zwieńczenie, którym jest przykład końcowy. Jest to kawałek muzyki reprezentujący wszystkie idee zaprezentowane w danej sekcji. Przeczytaj ten kod i zobacz, czy jesteś w stanie wyobrazić sobie, co ten kod robi. Następnie skopiuj go do czystego buforu w Sonic Pi i naciśnij przycisk Run, aby usłyszeć, jak brzmi w rzeczywistości. Na koniec zmień wybraną przez siebie liczbę albo wykomentuj lub odkomentuj wybrane według własnego uznania linijki kodu. Pomyśl, czy możesz użyć tego kawałka jako punkt wyjściowy dla nowego występu, a co najważniejsze - spróbuj się dobrze bawić. Do zobaczenia następnym razem...

en: A.3 Coded Beats
pl: A.3 Zakodowane Bity

en: Coded Beats
pl: Zakodowane bity

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.
pl: Jednym z najbardziej ekscytujących i zawrotnych rozwoju technicznego nowoczesnej muzyki było wynalezienie samplerów - znane jako pudełka pozwalające na nagrywanie i wrzucenie do nich dowolnego dźwięku, który można było potem zmieniać i odtwarzać te dźwięki na wiele ciekawych sposobów. Na przykład mogłeś wziąć jakieś stare nagranie, znaleźć sekcję z solówką na perkusji, nagrać ją na Twoim samplerze, a następnie odtwarzać ją w kółko, zwalniając przy tym tempo tego fragmentu o połowę, aby stworzyć bazę dla Twoich najnowszych bitów. W taki właśnie sposób narodził się wczesny hip-hop i w dzisiejszych czasach prawie niemożliwym jest znalezienie muzyki elektronicznej, która by nie korzystała z sampli w jakimś stopniu. Używanie ich jest naprawdę świetnym sposobem na wprowadzanie nowych i ciekawych elementów do Twoich występów polegających na kodowaniu muzyki na żywo.

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!
pl: Skąd w takim razie możesz wziąć sampler? Właściwie to aktualnie już jeden posiadasz - to Twój komputer Raspberry Pi (albo Mac lub PC)! Aplikacja Sonic Pi posiada swój własny wbudowany, który jest bardzo potężny. Spróbujmy się nim pobawić!

en: The Amen Break
pl: Amen Break

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.
pl: Jeden z najbardziej klasycznych i rozpoznawalnych samplem zawierającym perkusję nazywa się Amen Break. Po raz pierwszy został użyty w roku 1969 w piosence "Amen Brother" (Amen Bracie) przez zespół Winstons jako część solówki na perkusji. Jednakże, od chwili kiedy została odkryta przez wczesnych muzyków tworzących hip-hop w latach 80-tych i użyta w samplerach, zaczęła być bardzo często używana w wielu innych stylach muzycznych np. drum and bass, breakbeat, hardcore techno i breakcore.

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:
pl: Jestem pewien, że będziesz podekscytowany, gdy powiem Ci, że one też są wbudowane w Sonic Pi. Wyczyść bufor i wklej następujący kod:

en: Hit *Run* and boom! You're listening to one of the most influential drum breaks in the history of dance music. However, this sample wasn't famous for being played as a one-shot, it was built for being looped.
pl: Naciśnij *Run* i bum! Słuchasz jednej z najbardziej wpływowych połamanych pętli w historii muzyki tanecznej. Jednakże sampel ten nie zawdzięcza swej sławy jednorazowemu odtworzeniu - został stworzony po to, aby kręcić się w kółko.

en: Beat Stretching
pl: Sięgnięcie Po Beat

en: Let's loop the Amen Break by using our old friend the `live_loop` introduced in this tutorial last month:
pl: Zapętlijmy amen break, używając naszego starego dobrego przyjaciela `live_loop`, wprowadzonego w tym poradniku ostatniego miesiąca:

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.
pl: Okej, więc to jest zapętlone, ale są tutaj irytujące pauzy za każdym razem, gdy ponownie odtwarzany jest sampel. Tak się dzieje, gdyż poprosiliśmy go o uśpienie na '2' uderzenia, a z domyślnym BPM 60. `: loop_amen` trwa jedynie przez `1.753` uderzenia. Mamy więc ciszę przez 0.247 uderzenia ('2-1.753 = 0.247'). Mimo krótkiego czasu trwania, jest to jeszcze zauważalne.

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.
pl: Żeby naprawić ten problem, możemy użyć opcji `beat_stretch:`, aby poprosić Sonic Pi, by rozciągnęło (lub skurczyło) sampel, tak aby wpasował się w określoną liczbę uderzeń (bitów).

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.
pl: Funkcje `sample` i `synth`, które są dostępne w Sonic Pi, pozwalają Ci na dużą kontrolę za pomocą opcjonalnych parametrów takich jak `amp:`, `cutoff:` czy `release:`. Jednakże termin parametry opcjonalne jest dosyć długi, więc będziemy używać skróconego terminu *opcje*, aby było nam wygodniej i łatwiej.

en: Now we're dancing! Although, perhaps we want to speed it up or slow it down to suit the mood.
pl: Teraz możemy zacząć tańczyć! Aczkolwiek może chcielibyśmy przyśpieszyć trochę tempo lub zwolnić, aby dostosować je do nastroju.

en: Playing with Time
pl: Zabawa z Czasem

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:
pl: Dobrze! Więc co, jeśli chcemy zmienić styl na starą szkołę hip-hop lub breakcore? Jednym z prostszych sposobów jest zabawa z czasem - lub, w innym słowa znaczeniu, bałagan z tempem. Możesz z tego korzystać w Sonic Pi w bardzo łatwy sposób - po prostu dodaj 'use_bpm' do Twojej żywej pętli:

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.
pl: Zauważ, że w czasie, gdy rapujesz do tych powolnych uderzeń, przy każdym kolejnym obiegu pętli wciąż śpimy przez 2 uderzenia, nasze BPM (z ang. Beats Per Minute - ilość uderzeń na minutę) jest równe 30, a wszystkie dźwięki idealnie mieszczą się w czasie jednej pętli. Opcja `beat_stretch` współpracuje z aktualnym BPM, aby zapewnić, że wszystko działa tak, jak należy.

en: Filtering
pl: Filtrowanie

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:
pl: Potrafimy już wplatać sample do naszych żywych pętli, spójrzmy zatem na jedną z najfajniejszych opcji dostępnych dla syntezatora `sample`. Pierwszą jest `cutoff:`, która kontroluje filtr odcięcia samplera. Domyślnie jest ona wyłączona, ale możesz ją bardzo łatwo włączyć:

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.
pl: Śmiało, spróbuj zmienić wartość opcji `cutoff:`. Na przykład zwiększ ją do 100, naciśnij przycisk *Run*, poczekaj, aż aktualna pętla skończy swój przebieg, aby usłyszeć zmianę w dźwięku. Zauważ, że niskie wartości takie jak 50 brzmią łagodnie i basowo, natomiast wyższe wartości takie jak 100 czy 120 pozwalają uzyskać pełniejsze i bardziej zgrzytliwe brzmienie. Dzieje się tak ponieważ opcja `cutoff:` wycina część dźwięku o wyższych częstotliwościach - tak jak kosiarka ścina trawę. Opcja `cutoff:` jest jak ustawienie długości - określamy, jaka wysokość trawy ma pozostać po skoszeniu.

en: Slicing
pl: Przycinanie

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:
pl: Kolejnym świetnym narzędziem do zabawy jest efekt slicer. Użycie go spowoduje posiekanie dźwięku (z ang. slice - pokroić). Opakujmy linijkę zawierającą polecenie `sample` w efekt tak jak na poniższym kodzie:

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).
pl: Zauważ, jak dźwięki odbijają się po trochu w górę i w dół. (Możesz usłyszeć pierwotne brzmienie bez efektu, zmieniając wartość opcji `mix:` na `0`.) Teraz spróbuj pobawić się opcją `phase:`. Opowiada ona za tempo (w uderzeniach), z jakim jest aplikowany efekt cięcia. Mniejsze wartości takie jak `0.125` spowodują, że cięcia będą szybsze, natomiast większe wartości takie jak `0.5` będą powodować, że staną się wolniejsze. Zauważ, że zmniejszenie lub zwiększenie o połowę wartości opcji `phase:` zazwyczaj powoduje fajne brzmienia. Na koniec zmień wartość opcji `wave:` na 0, 1 lub 2, a usłyszysz, jak zmienia się dźwięk. To są różne barwy dźwięku. 0 to fala piłokształtna (mocne wejście i normalne wyjście), 1 to fala kwadratowa (mocne wejście, mocne wyjście), natomiast 2 to fala trójkątna (normalne wejście, normalne wyjście).

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...
pl: Na koniec cofnijmy się w czasie i zanurzmy się ponownie we wczesnej scenie drum and bass miasta Bristol wykorzystując do tego celu przykład z bieżącego miesiąca. Nie przejmuj się zbytnio tym, że nie rozumiesz wszystkiego z tego kawałka kodu, po prostu przepisz go lub przekopiuj i naciśnij przycisk Run, a następnie zacznij kodować na żywo, zmieniając liczby znajdujące się przy opcjach i zobacz, dokąd Cię to zaprowadzi. Pamiętaj tylko, żeby podzielić się tym, co uda Ci się stworzyć! Do zobaczenia następnym razem...

en: A.4 Synth Riffs
pl: A.4 Riffy Syntezatorów

en: Synth Riffs
pl: Riffy Syntezatorów

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.
pl: Niezależnie od tego, czy mamy do czynienia z niepokojącym dryftem dudniących oscylatorów, czy rozstrojonymi uderzeniami dźwięków piły przeszywającej miks, syntezator wiodący odgrywa kluczową rolę w każdym utworze muzyki elektronicznej. W ostatniej edycji tego samouczka z poprzedniego miesiąca omówiliśmy, w jaki sposób możemy kodować nasze bity. W bieżącym numerze omówimy zaś kodowanie trzech podstawowych części riffu syntezatorem - tembr (barwa dźwięku), melodię i rytm.

en: OK, so power up your Raspberry Pi, crack open Sonic Pi v2.6+ and let's make some noise!
pl: OK, czas żebyś włączył Twojego Raspberry Pi, odpal Sonic Pi w wersji 2.6+ i zróbmy jakiś hałas!

en: Timbral Possibilities
pl: Możliwości związane z Barwą Dźwięku

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...
pl: Esencją dowolnego riffu opartego o syntezatory jest zmienianie i granie z różnymi barwami dźwięku. W Sonic Pi możemy kontrolować barwę dźwięku na dwa sposoby - wybierając różne syntezatory dla uzyskania diametralnej zmiany oraz poprzez ustawianie różnych wartości opcji danego syntezatora dla otrzymania bardziej subtelnych zmian. Możemy również używać efektów (FX), ale to temat na osobny artykuł...

en: Let's create a simple live loop where we continually change the current synth:
pl: Spróbujmy stworzyć prostą żywą pętlę, w której będziemy zmieniać aktualny syntezator w trakcie gry:

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.
pl: Spójrzmy na powyższy kawałek kodu. Cykamy tu przez pierścień z nazwami syntezatorów (iterując w kółko po wszystkich syntezatorach z listy). Przekazujemy nazwy kolejno wybieranych syntezatorów do funkcji `use_synth`, co powoduje zmianę aktualnego syntezatora przy każdym kolejnym przebiegu żywej pętli. Ponadto gramy nutę `:e2` (dźwięk E w drugiej oktawie) z czasem zanikania amplitudy ustawionym na 0.5 uderzenia (przy domyślnym BPM równym 60 jest to pół sekundy) oraz z opcją `cutoff:` ustawioną na 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.
pl: Zauważ, że każdy z syntezatorów ma zupełnie inne brzmienie, pomimo że wszystkie grają tę samą nutę. Spróbuj teraz poeksperymentować i pobaw się! Zmień czas zanikania amplitudy (opcja release) na wyższe i mniejsze wartości. Na przykład zmień wartości dla opcji `attack:` i `release:`, aby zobaczyć, jak wielki wpływ na dźwięk mają różne czasy wejścia/wyjścia. Na koniec zmień opcję `cutoff:`, aby usłyszeć, jak znaczące na barwę dźwięku ma ustawianie różnych wartości odcięcia (najlepsze są wartości pomiędzy 60 a 130). Widzisz, jak wiele różnych dźwięków możesz stworzyć, zmieniając tylko kilka wartości? Gdy już uda Ci się to opanować, udaj się na zakładkę Syntezatory znajdującą się w systemie pomocy. Zobaczysz tam pełną listę syntezatorów oraz wszystkie indywidualne opcje, jakie są dostępne dla każdego z nich. Powinno dać Ci to wyobrażenie, jak wiele możliwości jest w zasięgu Twoich palców.

en: Timbre
pl: Barwa dźwięku

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.
pl: Tembr to nic innego jak wyszukane słowo dla opisania, jakie jest brzmienie dźwięku. Jeśli zagrasz tę samą nutę z innym instrumentem takim jak skrzypce, gitara czy fortepian, wysokość dźwięku (jak wysoki lub niski jest dźwięk) będzie taka sama, za to barwa będzie inna. Ta właściwość dźwięku - ta cecha, która pozwala ci rozróżnić pianino od gitary, to tembr.

en: Melodic Composition
pl: Kompozycja Malodyczna

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:
pl: Kolejnym aspektem ważnym dla naszego syntezatora wiodącego jest wybór nut, które chcemy zagrać. Jeśli posiadasz aktualnie fajny pomysł, wtedy możesz po prostu stworzyć pierścień (ring) z Twoich nut i cykać przez nie w kółko:

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.
pl: Zdefiniowaliśmy tutaj naszą melodię za pomocą pierścienia, który zawiera w sobie zarówno nuty takie jak `:e3`, jak i przerwy reprezentowane za pomocą symbolu `:r`. Następnie wykorzystujemy polecenie `.tick`, żeby przechodzić kolejno przez każdą z nut, co daje nam powtarzalny riff.

en: Auto Melody
pl: Melodia Automatyczna

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:
pl: Nie zawsze łatwo jest wymyślić ciekawy riff od zera. Zamiast tego często dużo łatwiej jest poprosić Sonic Pi, aby wybrał dla nas losowy riff i użyć tego, który spodoba się nam najbardziej. Aby to osiągnąć, potrzebujemy połączyć trzy rzeczy: pierścienie, losowość oraz losowe ziarna. Spójrzmy na poniższy przykład:

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.
pl: Dzieje się tutaj kilka rzeczy - przyjrzyjmy się im po kolei. Na samym początku określamy, że używamy 3-go zestawu losowych ziaren. Co to znaczy? Otóż dość przydatną rzeczą jest możliwość ustawienia określonej wartości dla tych ziaren, dzięki czemu możemy przewidzieć, jaka będzie kolejna losowa wartość. Przy każdym obiegu żywej pętli będzie to taki sam zestaw wartości, jaki ustawiliśmy na początku - zestaw nr 3! Kolejną przydatną rzeczą, którą warto wiedzieć, jest to, że tasowanie pierścienia z nutami działa w taki sam sposób. W powyższym przykładzie prosimy w gruncie rzeczy o 'trzecie rozdanie' ze standardowej listy tasowań - które za każdym jest tym samym rozdaniem, gdyż za zawsze tuż przed tasowaniem ustawiamy losowe ziarno na tę samą. Koniec końców tykamy kolejno przez nasze potasowane nuty, aby zagrać riff.

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!
pl: A teraz moment, w którym zaczyna się zabawa. Jeśli zmienimy wartość losowego ziarna na inną liczbę, powiedzmy 3000, otrzymamy zupełnie inne rozdanie nut. Dzięki temu możemy teraz bardzo łatwo odkrywać nowe melodie. Po prostu wybieramy listę nut, które chcemy przetasować (gamy są tutaj dobrym punktem wyjścia), a następnie bierzemy wartość ziarna, według jakiej chcemy tasować. Jeśli dana melodia nam się nie spodoba, wystarczy zmienić jedną z tych dwóch rzeczy i spróbować ponownie. Teraz wystarczy, że będziesz powtarzał te kroki do momentu, aż usłyszysz coś, co Ci się spodoba!

en: Pseudo Randomisation
pl: Pseudo Losowość

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.
pl: Losowość Sonic Pi tak naprawdę wcale nie jest losowa tylko pseudo losowa. Wyobraź sobie, że rzucasz kostką do gry 100 razy i zapisujesz wynik każdego rzutu na kartce papieru. Sonic Pi posiada odpowiednik takiej listy wyników, której używa, kiedy prosisz o losową wartość. Zamiast rzucania prawdziwą kostką do gry, po prostu wybiera kolejne wartości z listy. Ustawianie losowego ziarna jest po prostu skokiem do konkretnego miejsca w tej liście.

en: Finding your Rhythm
pl: Znajdź swój Rytm

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:
pl: Kolejnym ważnym aspektem naszego riffu jest rytm - kiedy grać daną nutę, a kiedy nie. Jak widzieliśmy wcześniej, możemy użyć symbolu `:r` w naszych pierścieniach, aby wypełnić pozostałości. Kolejnym bardzo skutecznym sposobem jest użycie rozpiętości - nauczymy się tego w dalszej części poradnika. Dzisiaj użyjemy losowości, która pomoże nam znaleźć nasz rytm. Zamiast grać każdą nutę, możemy użyć warunku logicznego, aby zagrać ją z zadanym prawdopodobieństwem. Rzućmy okiem:

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.
pl: Bardzo przydatną i wartą poznania funkcją jest `one_in`. Zwraca ona prawdę (`true`) lub fałsz (`false`) z określonym prawdopodobieństwem. W naszym przypadku używamy wartości 2 więc przeciętnie raz na każde 2 wołania funkcji `one_in` zostanie zwrócona wartość `true` (prawda). Innymi słowy, przez 50% czasu będzie zwracała `true`. Użycie wyższych wartości spowoduje, że wartość `false` zacznie być zwracana częściej, co wprowadzi więcej wolnej przestrzeni do naszego riffu.

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.
pl: Zauważ, że wraz z poleceniem `16.times` dodaliśmy tutaj pewien rodzaj iteracji. Zrobiliśmy tak, ponieważ chcemy tylko zresetować losowe ziarno co każde 16 nut, tak żeby nasz rytm powtarzał się co każde 16 uderzeń. Nie wpłynie to na tasowanie, ponieważ dzieje się to od razu, jak tylko ziarno jest ustawione. Możemy użyć rozmiaru iteracji do zmiany długości trwania rytmu. Spróbuj zmienić liczbę 16 na 8 lub nawet 4 czy 3 i zobacz, jak wpływa to na rytm naszego riffu.

en: OK, so let's combine everything we've learned together into one final example. See you next time!
pl: No dobrze, to spróbujmy teraz wykorzystać wszystko, czego się nauczyliśmy w naszym finalnym przykładzie. Do zobaczenia w następnym odcinku!

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.
pl: Gdy spojrzymy wstecz na historię muzyki elektronicznej, nie sposób jest nie zauważyć ogromnego wpływu, jaki miał na nią malutki syntezator TB-303. Jest to sekretny składnik stojący za oryginalnym brzmieniem acid'owej linii basowej. Te klasycznie piszczące i chlupiące riffy basowe TB-303 można usłyszeć zarówno we wczesnej scenie Chicago House, jak i u bardziej współczesnych artystów takich jak Plastikman, Squarepusher czy 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:
pl: Pomimo że dostanie w swoje ręce oryginalnego egzemplarza TB-303 nie jest zbyt łatwe, to na pewno ucieszy Cię fakt, iż możesz zmienić swój komputer w jeden z nich, korzystając z możliwości, jakie daje Sonic Pi. Spójrz, odpal Sonic Pi, wrzuć ten kawałek kodu do pustego buforu i naciśnij przycisk Run:

en: Instant acid bass! Let's play around...
pl: Błyskawiczna acid'owa linia basowa! Zabawmy się...

en: Squelch that Bass
pl: Chlupnij Basem

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:
pl: Najpierw zbudujmy żywy arpeggiator, aby sprawić, by było jeszcze ciekawiej. W ostatnim tutorialu dowiedzieliśmy się, jak riffy mogą być po prostu pierścieniami nut, przez które tykamy raz po raz, powtarzając całość od nowa, kiedy tylko dobrniemy do końca. Stwórzmy żywą pętlę robiącą właśnie coś takiego:

en: Take a look at each line.
pl: Przyjrzyjmy się każdej linii.

en: On the first line we set the default synth to be `tb303` with the `use_synth` fn.
pl: W pierwszej linii za pomocą funkcji `use_synth` ustawiamy, aby domyślnym syntezatorem był `tb303`.

en: On line two we create a live loop called `:squelch` which will just loop round and round.
pl: W drugiej linii tworzymy żywą pętlę, która po prostu będzie kręciła się w kółko i nazywamy ją `: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.
pl: Trzecia linia jest miejscem, gdzie tworzymy nasz riff - pierścień nut (dźwięk E w 1, 2 i 3 oktawie), przez który po prostu cykamy za pomocą polecenia `.tick`. Definiujemy `n` reprezentującą aktualną nutę z naszego riffu. Znak równości mówi, żeby przypisać wartość z prawej strony do nazwy po lewej stronie. W każdym przebiegu pętli będzie to inna wartość. W pierwszym przebiegu `n` będzie ustawione jako dźwięk `:e1`. Przy drugiej rundzie będzie to `:e2`, potem `:e3', a potem znowu `:e1', kręcąc się tak bez końca.

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.
pl: Linia czwarta to miejsce, gdzie faktycznie uruchamiamy nasz syntezator `:tb303`. Przekazujemy do niego tutaj kilka interesujących opcji: `release:`, `cutoff:`, `res:` i `wave:`, które omówimy poniżej.

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.
pl: Czwarta linia jest naszym miejscem drzemki (polecenie `sleep`) - prosimy żywą pętlę, aby kręciła się co każde '0.125' sekundy, co daje nam 8 razy na sekundę przy domyślnym tempie 60 BPM (z ang. Beats Per Minute - uderzenia na minutę).

en: Line six is the `end` to the live loop. This just tells Sonic Pi where the end of the live loop is.
pl: Linia szósta jest miejscem, gdzie żywa pętla ma swój koniec (`end`). Mówi ona Sonic Pi o miejscu zakończenia żywej pętli.

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.
pl: Podczas gdy wciąż próbujesz połapać się, co jest grane, wpisz powyższy kod i naciśnij przycisk Run. Powinieneś usłyszeć, jak `:tb303` wkracza do działania. A teraz moment, w którym coś się dzieje: zacznijmy kodowanie na żywo.

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...
pl: Podczas gdy pętla wciąż się kręci, zmień opcję `cutoff:` na wartość `110`. Teraz ponownie naciśnij przycisk Run. Powinieneś usłyszeć, że dźwięk stał się trochę ostrzejszy i bardziej chlupotliwy. Wprowadź `120` i naciśnij przycisk Run. Teraz `130`. Posłuchaj jak wyższe wartości odcięcia (ang. cutoff) powodują, że dźwięk staje się bardziej przeszywający i intensywny. Na koniec, kiedy poczujesz, że masz na to ochotę, obniż wartość do `80`. Następnie możesz to powtarzać tyle razy, ile tylko chcesz. Nie przejmuj się, nadal będę tutaj...

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.
pl: Na koniec, aby uzyskać duży wpływ na tembr, spróbuj zmienić opcję `wave:` na `1`. W ten sposób wybieramy źródło oscylatora. Domyślna wartość to `0` i daje w efekcie falę piłokształtną, wartość `1` daje falę pulsującą, a `2` - falę trójkątną.

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.
pl: Naturalnie spróbuj różnych riff'ów, zmieniając nuty w pierścieniu lub nawet wybierając nuty ze skal lub akordów. Zabaw się z Twoim pierwszym acid'owym syntezatorem basu.

en: Deconstructing the TB-303
pl: Dekonstrukcja 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.
pl: Konstrukcja oryginalnego TB-303 jest w zasadzie bardzo prosta. Jak możesz zauważyć na poniższym diagramie, składa się on tylko z 4-ech głównych części.

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:
pl: Pierwszy to fala oscylatora - podstawowe składniki dźwięku. W tym przypadku mamy do czynienia z falą kwadratową. Następnie mamy obwiednię amplitudy oscylatora, która kontroluje poziom głośności fali kwadratowej na przestrzeni czasu. Można się w Sonic Pi do nich dobrać za pomocą opcji `attack:`, `decay:`, `sustain:` i `release:` wraz z odpowiednikami odpowiadającymi za ich poziom. Aby uzyskać więcej informacji, przeczytaj sekcję 2.4 zatytułowaną 'Czas trwania obwiedni dźwięku', która znajduje się w samouczku wbudowanym w aplikację. Następnie przepuszczamy naszą falę kwadratową opakowaną w obwiednię dźwięku przez filtr rezonansowy niskich tonów. Powoduje to odcięcie wyższych częstotliwości, a jednocześnie dodaje ten fajny efekt rezonansu. To jest moment, w którym zaczyna się robić ciekawie. Wartość odcięcia (cutoff) tego filtra jest również kontrolowana przez jego własną obwiednię! Oznacza to, że mamy niesamowitą kontrolę nad tembrem dźwięku poprzez bawienie się obiema obwiedniami. Przyjrzyjmy się temu bliżej:

en: Notice that I've passed everything through a `:reverb` FX for extra atmosphere - try other FX to see what works!
pl: Zauważ, że dla uzyskania ekstra atmosfery przepuściłem wszystkie dźwięki przez efekt `:reverb` - spróbuj innych efektów i przekonaj się, który z nich się tutaj sprawdzi!

en: A.6 Musical Minecraft
pl: A.6 Muzyczny Minecraft

en: Musical Minecraft
pl: Muzyczny 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:
pl: Witam ponownie! W poprzednich tutorialach skupiliśmy się tylko i wyłącznie na muzycznych możliwościach Sonic Pi - zmieniając w ten sposób Twój komputer (np. Raspberry Pi) w gotowy do wystąpień publicznych instrument muzyczny. Do tej pory opanowaliśmy następujące umiejętności:

en: Live Code - changing the sounds on-the-fly,
pl: Kodowania Na Żywo - zmienianie dźwięków w locie

en: Code some huge beats,
pl: Kodowania paru potężnych bitów,

en: Generate powerful synth leads,
pl: Wygenerowania potężnych melodii uzyskanych przy pomocy syntezatorów,

en: Re-create the famous TB-303 acid-bass sound.
pl: Odtworzyliśmy sławne brzmienie acid'owego basu 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.
pl: Istnieje znacznie więcej rzeczy, które mógłbym Ci pokazać (i omówimy je w kolejnych edycjach). Jednakże w tym miesiącu spójrzmy na coś, co Sonic Pi potrafi, a Ty prawdopodobnie nawet sobie nie zdawałeś z tego sprawy: kontrolowanie Minecrafta.

en: Hello Minecraft World
pl: Witaj Świecie Minecrafta

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.
pl: OK, zaczynajmy! Włącz Twojego Raspberry Pi, uruchom Minecraft Pi i stwórz nowy świat. Teraz uruchom program i zmień rozmiar oraz ustawienie okien w taki sposób, abyś mógł jednocześnie widzieć Sonic Pi i Minecraft Pi.

en: In a fresh buffer type the following:
pl: W czystym buforze wpisz następujący kod:

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!
pl: A teraz naciśnij przycisk Run. Bum! Twoja wiadomość pojawiła się w Minecraft! Jakie to proste! A teraz przerwij na chwilę czytanie i spróbuj stworzyć swoje własne wiadomości. Milej zabawy!

en: Sonic Teleporter
pl: Teleporter Dźwiękowy

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:
pl: Czas na małe rozpoznanie. Sięgnięcie po myszkę i klawiaturę jest standardową opcją, która umożliwia chodzenie po naszym świecie. To działa, ale jest całkiem wolne i nudne. Byłoby znacznie lepiej, gdybyśmy mieli pewien rodzaj maszyny umożliwiającej teleportację. Dzięki Sonic Pi mamy takie cudo. Spróbuj tego:

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.
pl: Niespodzianka! To była długa droga w górę. Jeśli nie byłeś akurat w trybie latania, wtedy prawdopodobnie spadłeś w dół aż do samej ziemi. Jeśli szybko naciśniesz 2 razy spację, aby wejść w tryb latania i spróbujesz jeszcze raz się przeteleportować, zaczniesz unosić się w miejscu, do którego się przeniosłeś.

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:
pl: Chyba czas na wyjaśnienie, co oznaczają te liczby. Mamy trzy cyfry opisujące koordynaty miejsca w naszym świecie, do którego chcemy się przenieść. Nadamy każdej z liczb nazwę - x, y i z:

en: x - how far left and right (80 in our example)
pl: x - jak daleko w lewo lub prawo (w naszym przykładzie jest to 80)

en: y - how high we want to be (40 in our example)
pl: y - jak wysoko chcemy się znaleźć (w naszym przykładzie jest to 40)

en: z - how far forward and back (100 in our example)
pl: z - jak daleko w przód lub do tyłu (w naszym przykładzie 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...
pl: Wybierając różne wartości dla x, y i z, możemy teleportować się *gdziekolwiek* w naszym świecie. Spróbuj! Wybierz inne liczby i zobacz, gdzie możesz wylądować. Jeśli ekran stanie się czarny, będzie tak, ponieważ przeteleportowałeś się pod ziemię lub w głąb góry. Wystarczy, że wybierzesz po prostu większą wartość y, aby ponownie znaleźć się powyżej gruntu. Eksploruj teren tak długo, aż znajdziesz się w miejscu, które Ci się podoba...

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:
pl: Korzystając z dotychczasowych idei, zbudujmy Dźwiękowy (Sonic) Teleporter, który będzie wydawał fajne dźwięki teleportacji w momencie, gdy będziemy śmigać wskroś świata Minecraft:

en: Magic Blocks
pl: Magiczne Bloki

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:
pl: Teraz, gdy już znalazłeś fajne miejsce, zacznijmy budować. Mógłbyś zrobić to, do czego przywykłeś i zacząć wściekle klikać myszką, aby zacząć umieszczać kolejne bloki pod kursorem. Możesz też użyć magii Sonic Pi. Spróbuj tego:

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:
pl: A teraz spójrz! Na niebie pojawił się melon. Poświęć chwilę, aby przyjrzeć się temu kawałkowi kodu. Co zrobiliśmy? W linii pierwszej przechwyciliśmy aktualne położenie Steve'a jako zmienne x, y i z. Odpowiada to naszym koordynatom, które omówiliśmy już wcześniej. Następnie używamy tych współrzędnych w funkcji `mc_set_block`, co powoduje umieszczenie wybranego bloku w określonych współrzędnych. Aby zrobić coś wyżej na niebie, wystarczy, że zwiększymy wartość y. I to jest właśnie przyczyna, dla której dodajemy 5. Spróbujmy utworzyć z nich długą ścieżkę:

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.
pl: A teraz przenieś się do Minecraft, upewnij, że jesteś w trybie latania (wciśnij dwa razy spację jeśli nie) i przeleć dookoła po świecie. Spójrz za siebie, aby zobaczyć za sobą ścieżką złożoną z melonowych bloków! Zobacz, jaki rodzaj pokręconych wzorków możesz zrobić na niebie.

en: Live Coding Minecraft
pl: Kodowanie Na Żywo z 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.
pl: Ci Was, którzy obserwowali ten poradnik przez ostatnich kilka miesięcy, prawdopodobnie czują teraz, że ich umysł za chwilę eksploduje. Ścieżka z melonów wygląda co prawda całkiem ciekawie, ale najbardziej ekscytującą częścią poprzedniego przykładu jest to, że możesz użyć w Minecraft żywej pętli `live_loop`! Dla tych, co jeszcze nie wiedzą - polecenie `live_loop` daje Sonic Pi specjalną magiczną zdolność, a nie posiada jej żaden inny język programowania. Pozwala Ci na uruchomienie wielu różnych pętli w tym samym czasie i zmianę ich zachowania w trakcie działania. Dzięki temu są one niewiarygodnie potężne i niesamowicie fantastyczne. Używam polecenia `live_loop` dostępnego w Sonic Pi do koncertowania na żywo w klubach - DJ'e korzystają z płyt, a ja z żywych pętli (`live_loop`'y). Dzisiaj będziemy jednak kodować na żywo zarówno muzykę, jak i 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:
pl: Zaczynajmy. Uruchom powyższy kod i zacznij ponownie kreślić swoją ścieżkę z melonów. Teraz bez zatrzymywania kodu, po prostu zmień polecenie `:melon` na `:brick` (cegła) i naciśnij przycisk Run. Hej, zobacz, jak szybko robisz teraz ścianę z cegieł. Jakież to było proste! Wyobrażasz sobie może jakąś melodię, która mogłaby być odtwarzana, gdy to się dzieje? Bułka z masłem! Spróbuj tego:

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?
pl: Teraz, podczas gdy wciąż gra muzyka zacznij zmieniać kod. Zmień typy bloku - spróbuj `:water` (woda), `:grass` (trawa) albo jakiś inny ulubiony typ bloku. Spróbuj również zmienić wartość odcięcia (cutoff) z `70` na `80` a później na `100`. Czyż to nie jest fajne?

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...
pl: Spróbujmy połączyć wszystko, co do tej pory widzieliśmy z odrobiną dodatkowej magii. Połączmy naszą zdolność teleportacji z umieszczaniem bloków i muzyki, aby stworzyć Muzyczne Minecraft'owe Video. Nie przejmuj się, jeśli nie wszystko jeszcze rozumiesz, po prostu wpisz ten kawałek i baw się, zmieniając różne wartości, gdy kod jest wciąż uruchomiony. Miłej zabawy i do zobaczenia następnym razem...

en: A.7 Bizet Beats
pl: A.7 Bizet'owe Bity

en: Bizet Beats
pl: Bizet'owe Bity

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.
pl: Po naszej krótkiej wycieczce do fantastycznego świata kodowania Minecraft'a z Sonic Pi w ubiegłym miesiącu wróćmy z powrotem do muzyki. Dzisiaj przeniesiemy klasyczną operowy taniec prosto w XXI wiek, używając niesamowitej potęgi kodu.

en: Outrageous and Disruptive
pl: Skandaliczne i Szkodliwe

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!
pl: Wskoczmy do wehikułu czasu i cofnijmy się do roku 1875. Kompozytor o nazwisku Bizet właśnie skończył jego najnowszą operę Carmen. Niestety, jak to ma zazwyczaj miejsce z wieloma nowymi ekscytującymi utworami, ludzie na początku nie polubili jej wcale, ponieważ była zbyt skandaliczna i inna niż wszystko. Niestety Bizet zmarł dziesięć lat przed jej wielkim międzynarodowym sukcesem. Opera stała się jedną z najsławniejszych i najczęściej granych oper wszech czasów. Z współczuciem dla tej tragedii weźmy jeden z najbardziej znanych motywów z Carmen i przekształćmy go do nowoczesnego formatu muzyki, który również będzie zbyt skandaliczny i inny dla większości ludzi w naszych czasach - muzykę kodowaną na żywo!

en: Decoding the Habanera
pl: Rozszyfrowywanie Habanery

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:
pl: Próba kodowania na żywo całej opery mogłaby być sporym wyzwaniem dla tego poradnika, skupmy się więc na jednej z jej najbardziej popularnych części - sekcja basowa Habanery:

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.
pl: Jeśli nie uczyłeś się jeszcze notacji muzycznej, to może to dla Ciebie wyglądać ekstremalnie niezrozumiałe. Jednakże, jako programiści, widzimy notację muzyczną jako kolejną formę kodu - jedyna różnica polega tu na tym, że reprezentuje instrukcje dla muzyka zamiast komputera. Musimy zatem znaleźć sposób na jego rozszyfrowanie go.

en: Notes
pl: Nuty

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.
pl: Nuty są ułożone od lewej do prawej tak samo jak słowa, w tym tekście mają jednak różne wysokości. *Wysokość na partyturze reprezentuje wysokość danej nuty.* Im wyżej nuta znajduje się na pięciolinii, tym wyższy jest dźwięk tej nuty.

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:
pl: Wiemy już w jaki sposób możemy zmieniać wysokość nut w Sonic Pi - możemy używać dużych lub małych liczb takich jak `play 75` czy `play 80`. Możemy też użyć nazw nut np. `play :E` lub `play :F`. Na szczęście każda z pozycji na pięciolinii reprezentuje konkretną nazwę nuty. Zerknij na tą przydatną tabelkę poniżej:

en: Rests
pl: Przerwy

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.
pl: Nuty są bardzo bogatym i ekspresyjnym sposobem na przedstawianie wielu rzeczy. Skoro tak, to nie powinno Cię zbytnio zdziwić fakt, że nuty potrafią powiedzieć nie tylko jakie nuty powinniśmy zagrać, ale też kiedy ich *nie* grać. W programowaniu jest to bardzo analogiczne do idei `nil` lub `null` - oznacza ona brak wartości. Innymi słowy, moment, w którym nie gramy nuty, jest miejscem, gdzie jej nie ma.

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.
pl: Jeśli przyjrzysz się uważnie nutom, zauważysz, że jest ona aktualnie kombinacją czarnych kropek z liniami reprezentujące nuty do zagrania oraz falujące ogonki, które oznaczają przerwy. Na nasze szczęście Sonic Pi posiada bardzo poręczną reprezentację dla przerw - `:r`. Jeśli więc uruchomimy polecenie `play :r`, to zagra on ciszę! Możemy napisać również `play :rest`, `play nil` lub `play false`. Są to analogiczne odpowiedniki dla reprezentacji przerw.

en: Rhythm
pl: Rytm

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.
pl: Na końcu jest jeszcze jedna rzecz do zrozumienia przy rozszyfrowywaniu nut - czasy ich trwania. Zauważ, że w oryginalnej notacji niektóre są połączone grubymi liniami, które nazywamy belkami. Druga nuta posiada dwie takie belki, co oznacza, że przerwa trwa jedną szesnastą uderzenia (bitu). Inne nuty posiadają pojedyncze belki - trwają one przez jedną ósmą uderzenia. Pozostałe nuty mają dwie falowane belki - one również reprezentują jedną szesnastą uderzenia.

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.
pl: Kiedy próbujemy rozszyfrować i odkrywać nowe rzeczy, bardzo przydatną sztuczką jest robienie wszystkiego tak bardzo analogicznie, jak to jest tylko możliwe, aby móc spróbować i wybadać ew. relacje lub wzorce. Na przykład, kiedy przepisujemy szesnastki, możesz zobaczyć, że nasza notacja zostaje zmieniona w prostą sekwencję nut i przerw.

en: Re-coding the Habanera
pl: Zamiana Habanery na kod

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:
pl: Jesteśmy teraz w stanie zacząć tłumaczyć tę linię basową na kod zrozumiały dla Sonic Pi. Spróbujmy rozszyfrować te noty i przerwy, używając do tego celu pierścienia:

en: Let's see what this sounds like. Throw it in a live loop and tick through it:
pl: Zobaczmy, jak to brzmi. Wrzuć ten kawałek kodu do żywej pętli i zacznij przez niego tykać:

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!
pl: Fantastycznie, ten natychmiastowo rozpoznawalny riff został przywrócony do życia w Twoich głośnikach. Dotarcie tutaj kosztowało wiele wysiłku, ale opłaciło się - przybij piątkę!

en: Moody Synths
pl: Nastrojowe Syntezatory

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:
pl: Teraz, gdy już mamy linię basową, spróbujmy odtworzyć klimat sceny operowej. Jednym z syntezatorów do wypróbowania to`:blade`, który jest jednym z wiodących w stylu lat 80-tych. Spróbujmy go użyć z początkową nutą `:d` i przepuścić przez efekty slicer i reverb:

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`.
pl: A teraz spróbuj z innymi nutami z naszej linii basowej: `:a` i `:f5`. Pamiętaj - nie musisz naciskać stop - wystarczy, że zmodyfikujesz kod, podczas gdy muzyka wciąż gra i naciśniesz przycisk Run. Spróbuj również ustawić inne wartości dla opcji `phase:` np. `0.5`, `0.75` czy `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.
pl: Na koniec spróbujmy połączyć wszystkie pomysły, tak aby stworzyć nowy remix Habanery. Możesz zauważyć, że dorzuciłem kolejną partię linii basowej jako komentarz. Gdy już wpiszesz to wszystko do świeżego buforu, naciśnij przycisk Run, żeby usłyszeć kompozycję. Teraz, bez naciskania przycisku Stop, *odkomentuj* drugą linię poprzez usunięcie znaku `#` i ponownie wciśnij Run - ależ to jest fenomenalne! A teraz zacznij kombinować z tym kodem samodzielnie i baw się dobrze.

en: A.8 Become a Minecraft VJ
pl: A.8 Zostań VJ'em Minecraft'a

en: Become a Minecraft VJ
pl: Zostań VJ'em Minecraft'a

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.
pl: Każdy grał w Minecraft'a i każdy z nas budował niesamowite budowle, projektował pomysłowe pułapki, a nawet stworzył wypracowane linie przewozowe kontrolowane za pomocą czerwonych kamieni pełniących rolę przełączników. Ale jak wielu z was korzystało z Minecraft do koncertowania? Założę się, że żaden z Was nie wiedział, iż można użyć Minecraft'a do stworzenia niesamowitych wizualizacji, tak jak to robią profesjonalni VJ'e.

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.
pl: Jeśli Twoim jedynym sposobem na wprowadzanie zmian w świecie Minecraft była myszka, to masz pewnie za sobą ciężki czas zmieniania rzeczy w wystarczająco szybkim czasie. Na szczęście Twoje Raspberry Pi domyślnie jest wyposażone w wersję Minecraft'a, która może być kontrolowana za pomocą kodu. Ponadto posiada ono domyślnie zainstalowaną aplikację Sonic Pi umożliwiającą nie tylko łatwe kodowanie Minecraft'a ale też i sprawiającą, że jest to niesamowicie fajne.

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.
pl: W dzisiejszym artykule pokażemy Ci parę sztuczek i trików, których używaliśmy do występowania w klubach oraz na wydarzeniach muzycznych na całym świecie.

en: Let's get started...
pl: Zaczynajmy...

en: Getting Started
pl: Pierwsze Kroki

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:
pl: Zacznijmy na rozgrzewkę z czymś prostym, aby odświeżyć sobie podstawy. Najpierw włącz Twojego Raspberry Pi, a następnie uruchom Minecraft'a i Sonic Pi. W Minecraft, stwórz nowy świat, a w Sonic Pi wybierz świeży pusty bufor i wprowadź do niego następujący kod:

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......
pl: Naciśnij przycisk Run, a zobaczysz wiadomość w oknie Minecraft'a. Dobrze, jesteśmy gotowi, by zacząć, zabawmy się...

en: Sand Storms
pl: Burze Piaskowe

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:
pl: Kiedy używamy Minecraft'a do tworzenia wizualizacji, próbujemy i zastanawiamy się co będzie zarówno wyglądać ciekawie jak i będzie łatwe do wygenerowania za pomocą kodu. Jedną z ciekawych sztuczek jest stworzenie burzy piaskowej poprzez zrzucenie bloków piasku z nieba. Jedyne co do tego jest potrzebne to kilka podstawowych funkcji:

en: `sleep` - for inserting a delay between actions
pl: `sleep` - dla wstawiania przerw pomiędzy akcjami

en: `mc_location` - to find our current location
pl: `mc_location` - aby odczytać naszą aktualną pozycję

en: `mc_set_block`- to place sand blocks at a specific location
pl: `mc_set_block`- aby umieścić bloki piasku w określonej lokalizacji

en: `rrand` - to allow us to generate random values within a range
pl: `rrand` - pozwala nam na wygenerowanie losowych wartość w określonym przedziale

en: `live_loop` - to allow us to continually make it rain sand
pl: `live_loop` - pozwala nam na ciągłe tworzenie deszczu piasku

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.
pl: Jeśli którakolwiek z wbudowanych funkcji takich jak np. `rrand` jest dla Ciebie czymś nowym, wystarczy, że wpiszesz te słowo do buforu, ustawisz na nim kursor, a następnie naciśniesz kombinację klawiszy (skrót) `Control-i`, a spowodujesz, że otworzy się wbudowana dokumentacja. Innym sposobem jest przejście na zakładkę *Język* w systemie pomocy (przycisk Help), by następnie poszukać bezpośrednio funkcji, o której chcesz poczytać, podczas gdy w międzyczasie możesz robić wiele innych ekscytujących rzeczy (uwaga od tłumacza: niestety na razie wszystkie funkcje są opisane tylko po angielsku).

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:
pl: Spróbujmy sprawić by deszcz był delikatny, zanim rozpętamy sztorm w pełnej jego mocy. Przechwyć swoją aktualną lokalizację i użyj jej, aby stworzyć kilka bloków piasku gdzieś niedaleko na niebie:

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!
pl: Kiedy naciśniesz przycisk Run, być może będziesz musiał rozejrzeć się trochę dookoła, gdyż bloki mogą zacząć spadać za Tobą, a to zależy, w którym kierunku akurat będziesz zwrócony. Nie przejmuj się, jeśli je przegapiłeś, po prostu uruchom ponownie przycisk Run dla kolejnej partii padającego piasku - upewnij się tylko, że patrzysz we właściwą stronę!

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.
pl: Spróbujmy szybko się rozejrzeć, co tutaj się wyprawia. W pierwszej linii przechwyciliśmy aktualne położenie Steve'a jako koordynaty za pomocą funkcji `mc_location` i zapisaliśmy je w zmiennych `x`, `y` i `z`. Następnie w kolejnych linijkach użyliśmy funkcji `mc_set_block`, aby umieścić trochę piasku w tym samym miejscu, w którym znajduje się Steve, ale z małymi modyfikacjami. Wybraliśmy takie same wartości dla koordynatu x, parametr y ustawiliśmy na 20 bloków wyżej, a na końcu znacznie większą wartość dla koordynatu z, żeby piasek opadał w pewnej odległości od Steve'a.

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!
pl: A może byś tak wziął ten kod i zaczął się nim bawić sam? Spróbuj dodać kolejne linie, zmienić czasy przerw (`sleep`), wymieszać piasek (`:sand`) ze żwirem (`:gravel`) albo wybrać inne współrzędne. Po prostu eksperymentuj i baw się dobrze!

en: Live Loops Unleashed
pl: Żywe Pętle Zdemaskowane

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!
pl: Dobrze, nadszedł czas, aby rozhulać naszą burzę dzięki uwolnieniu pełnej potęgi żywej pętli `live_loop` - magicznej zdolności Sonic Pi, która ujawnia prawdziwą potęgę kodowania na żywo - zmienianie kodu w locie!

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:
pl: Ale zabawa! Kręcimy się w kółko całkiem szybko (8 razy na sekundę) i w trakcie każdego przebiegu odczytujemy aktualną lokację Steve'a tak samo jak wcześniej, ale tym razem generujemy 3 losowe wartości:

en: `xd` - the difference for x which will be between -10 and 10
pl: `xd` - różnica dla x, która będzie między -10 a 10

en: `zd` - the difference for z also between -10 and 10
pl: `zd` - różnica dla z także między -10 a 10

en: `co` - a cutoff value for the low pass filter between 70 and 130
pl: `co` - wartość odcięcia dla filtra niskich tonów pomiędzy 70 a 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.
pl: Następnie używamy tych wartości w fns `synth` oraz `mc_set_block', co daje nam bloki piasku spadające w losowych miejscach wokół Steve'a razem z perkusyjnym dźwiękiem deszczu podobnym do `: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?
pl: Dla nowych z żywymi pętlami - to jest miejsce, gdzie naprawdę zaczyna się zabawa z Sonic Pi. Spróbuj zmienić wartość uśpienia na `0.25` lub `:sand` na `:gravel:`, podczas spadania bloków piasku wokół Steve'a. Następnie naciśnij *jeszcze raz* przycisk Run. Bułka z masłem! Zmieniło się to bez zatrzymywania uruchomionego kodu! To jest Twoja brama do działania jako prawdziwy VJ. Nie krępuj się zmieniać rzeczy dookoła - jak różne można tworzyć wizualizacje bez zatrzymywania kodu?

en: Epic Block Patterns
pl: Epickie Wzory Bloków

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:
pl: Na końcu innym bardzo dobrym sposobem na generowanie ciekawych wizualizacji jest generowanie ogromnych ozdobionych wzorami ścian i przemieszczanie się w ich kierunku oraz blisko nich. Aby uzyskać taki efekt, musimy zmienić podejście i, zamiast losowego ustawiania bloków, zacząć je układać w sposób uporządkowany. Możemy tego dokonać poprzez zagnieżdżenie dwóch pętli (naciśnij przycisk Help i przejdź w poradniku do sekcji 5.2 zatytułowanej "Iteracja i Pętle", aby dowiedzieć się więcej o iteracjach). Zabawne polecenie `|xd|` tuż po poleceniu `do` oznacza, że przy każdej iteracji do zmiennej `xd` zostanie przypisana wartość, po której aktualnie iterujemy. Będą to więc kolejno 0, potem 1, potem 2, ...., itd. Dzięki podwójnemu zagnieżdżeniu dużej ilości iteracji, tak jak to robimy tutaj, możemy wygenerować wszystkie współrzędne do narysowania kwadratu. Następnie mamy możliwość losowo wybierać typ bloku dla uzyskania ciekawego efektu:

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.
pl: Całkiem schludnie. Kiedy czerpiemy radość z zabawy, spróbuj zmienić `bs.choose` na `bs.tick`, aby ruszyć z losowego wzoru na bardziej regularny. Zrób to także z typami bloków. Niektórzy z Was będą pewnie chcieli wypróbować to w taki sposób, żeby zmieniały się one automatycznie.

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!
pl: Czas na finał VJ - zmień dwa `10.times` na `100.times` oraz kliknij *Run*. Bum! Ogromna gigantyczna ściana zbudowana z losowo rozmieszczonych cegieł. Wyobraź sobie, ile czasu zajęłoby zbudowanie tego za pomocą myszki! Naciśnij dwa razy spację w krótkim odstępie czasu, by wznieść się w powietrze, a następnie zacznij pikować dla paru wspaniałych efektów wizualnych. Nie zatrzymuj tutaj swoich myśli - użyj wyobraźni do wyczarowania naprawdę fajnych pomysłów, a następnie skorzystaj z mocy kodowania Sonic Pi do uczynienia ich prawdziwymi. Kiedy potrenujesz wystarczającą ilość czasu, przyciemnij światło i stwórz pokaz VJ dla Twoich znajomych!

en: A.9 Randomisation
pl: A.9 Randomizacja

en: Surfing Random Streams
pl: Surfowanie Po Losowych Strumieniach

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!
pl: W czwartym odcinku tej serii samouczków rzuciliśmy okiem na losowość podczas kodowania paru ciekawych riffów syntezatorów. Biorąc pod uwagę fakt, iż losowość jest ważną częścią mojego życia jako kodujący DJ, pomyślałem, iż przydatne może być bardziej szczegółowe ich wytłumaczenie. Zdobądź więc swoją szczęśliwą czapkę i zasurfujmy kilka losowych strumieni!

en: There is no random
pl: Nie istnieje żadna losowość

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:
pl: Pierwszą rzeczą, która na początku może Cię naprawdę zaskoczyć podczas zabawy z funkcjami losowości w Sonic Pi, jest fakt, iż nie są one rzeczywiście losowe. Co to więc oznacza? Dobrze, zróbmy więc kilka testów. Na starcie wyobraź sobie liczbę między 0 oraz 1. Zachowaj ją dla siebie i nie mów mi jej - to będzie na razie Twoja tajemnica. Niech zgadnę... czy to jest `0.321567`? Nie? Nonsens, najwidoczniej nie jestem w tym dobry. Daj mi kolejną próbę, lecz teraz zapytajmy Sonic Pi o wybranie numeru tym razem. Uruchom Sonic Pi v2.7+ i poproś o losową liczbę, ale pamiętaj, żeby mi jej nie mówić:

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.
pl: Teraz dla odkrycia... czy to było `0.75006103515625`? Tak! Heh, widzę, że jesteś trochę sceptyczny. Może to był szczęśliwy traf i wcale nie jestem w tym zły? Spróbujmy jeszcze raz. Naciśnij ponownie przycisk *Run* i zobaczmy, co otrzymaliśmy... Hę? Ponownie `0.75006103515625`? To najwidoczniej nie może być losowe! Masz rację.

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.
pl: Co się tutaj dzieje? Fantazyjnym słowem nauki komputerowej jest tutaj determinizm. To po prostu oznacza, iż nic nie staje się przypadkowo i wszystko ma swoją wartość. Twoja wersja Sonic Pi przeznaczona jest do zwracania zawsze wartości `0.75006103515625`. To może brzmieć trochę bezużytecznie, jednak zapewniam Cię, iż ma to miano najbardziej potężnej części programu. Jeżeli nad tym spędzisz trochę czasu, nauczysz się polegania na determinizmie natury losowości Sonic Pi jako fundamentu budowania bloków dla Twoich kompozycji i kodowanych na żywo zestawów DJ-ów.

en: A Random Melody
pl: Losowa Melodia

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.
pl: Kiedy Sonic Pi startuje, to właściwie ładuje do pamięci sekwencję 441,000 wstępnie wygenerowanych losowych wartości. Po wywołaniu funkcji losowej jak `rand` lub `rrand`, strumień wykorzystywany jest do generowania wyników. Dosłownie każde użycie tych funkcji używa danej wartości - dziesiąte użycie funkcji losowania także użyje dziesiątej wartości ze strumienia. Także za każdym razem, kiedy naciśniesz przycisk *Run*, jest on resetowany dla tego uruchomienia. Właśnie dzięki temu mogę przewidzieć wynik dla `rand` i dlaczego ta 'losowa' melodia jest za każdym razem taka sama. Każda wersja Sonic Pi wykorzystuje dokładnie ten sam losowy strumień, co odgrywa ważną rolę podczas udostępniania naszych kawałków innym.

en: Let's use this knowledge to generate a repeatable random melody:
pl: Użyjmy zatem tej wiedzy do wygenerowania losowo powtarzanej melodii:

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.
pl: Wpisz ten kod do wolnego bufora i wciśnij *Run*. Usłyszysz melodię, która składa się z losowych nut z przedziału między 50 a 95. Po jego zakończeniu ponownie to zrób, aby jeszcze raz usłyszeć dokładnie tę samą melodię.

en: Handy Randomisation Functions
pl: Przydatne Funkcje Randomizacji

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:
pl: Sonic Pi zawiera wiele przydatnych funkcji do działania z losowym strumieniem. Oto lista paru najbardziej użytkowych z nich:

en: `rand` - Simply returns the next value in the random stream
pl: `rand` - Zwyczajnie zwraca następną wartość w losowym strumieniu

en: `rrand` - Returns a random value within a range
pl: `rrand` - Zwraca losową wartość z danego zakresu

en: `rrand_i` - Returns a random whole number within a range
pl: `rrand_i` - Zwraca losową liczbę całkowitą z danego zakresu

en: `one_in` - Returns true or false with the given probability
pl: `one_in` - Zwraca true lub false z danym prawdopodobieństwem

en: `dice` - Imitates rolling a dice and returns a value between 1 and 6
pl: `dice` - naśladuje rzut kostki i zwraca wartość między 1 a 6

en: `choose` - Chooses a random value from a list
pl: `choose` - Wybiera losową wartość z listy

en: Check out their documentation in the Help system for detailed information and examples.
pl: Sprawdź ich dokumentację w systemie pomocy dla uzyskania szczegółowych informacji i przykładów.

en: Resetting the Stream
pl: Resetowanie Strumienia

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.
pl: Kiedy zdolność powtarzania sekwencji wybranych nut jest niezbędna, aby pozwolić Ci odtwarzać riff na parkiecie, to nie może być to dokładnie taki riff, jakiego oczekujesz. Czy nie byłoby to wspaniałe, gdybyśmy mogli wypróbować wielu różnych riffów i wybrać taki, który uważamy za najlepszy? Oto miejsce, gdzie zaczyna się prawdziwa magia.

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:
pl: Możemy ręcznie ustawić strumień z fn `use_random_seed`. W informatyce losowy seed to punkt początkowy, z którego nowy strumień składający się z losowych wartości może kiełkować i kwitnąć jak prawdziwy kwiat. Spróbujmy tego:

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:
pl: Doskonale, mamy pierwsze trzy nuty powyżej z losowej melodii: `84`, `83` oraz `71`. Natomiast możemy zmienić teraz seed na cokolwiek innego. Co powiesz na to:

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.
pl: Interesujące, mamy teraz `83`, `71` oraz `61`. Możesz zauważyć, że pierwsze dwa numery z tej krótkiej listy są takie same jak przedtem - to nie jest przypadkowy zbieg okoliczności.

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.
pl: Pamiętaj, że strumień losowych wartości jest tak naprawdę po prostu olbrzymią listą 'wylosowanych wcześniej' wartości. Korzystając z losowego ziarna, powoduje, że po prostu przeskakujemy do pewnego punktu w tej liście. Innym sposobem myślenia o tym to próba wyobrażenia sobie ogromnej, potasowanej zawczasu talii kart. Korzystanie z losowego ziarna (`seed`) powoduje odcięcie tej talii od pewnego momentu. Fantastyczną rzeczą jest to, iż pozwala nam to na bardzo precyzyjne skakanie po strumieniu losowych wartości, a co za tym idzie, daje nam ogromne możliwości, gdy tworzymy muzykę.

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:
pl: Powtórzmy naszą losową melodię z 8 nut z nowym strumieniem zresetowanej mocy, ale także dajmy ją w żywą pętlę, co pozwoli nam eksperymentować z kodem na żywo podczas jego odtwarzania:

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.
pl: Podczas kiedy nadal jest odtwarzany, zmień wartość seed'u z `0` na cokolwiek innego - masz tutaj wolną rękę. Co powiesz na `100`, a może skusisz się na `999`? Spróbuj swoich własnych wartości, eksperymentuj i baw się z kodem - zobacz, który seed generuje najlepszy Twoim zdaniem riff.

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.
pl: W tym miesiącu poradnik był mocno technicznym zanurzeniem się w to, jak w Sonic Pi działa mechanizm losowości. Mam nadzieję, że pozwoliło Ci to na pewne zaznajomienie się, jak działa ta funkcjonalność oraz że będziesz czuł się komfortowo, aby zacząć tworzyć powtarzalne wzorce w Twojej muzyce. Chciałbym zwrócić Twoją uwagę na to, iż możesz używać powtarzalnej losowości *gdziekolwiek* tylko chcesz. Na przykład możesz losowo różnicować poziom głośności Twoich nut, tempo Twojego rytmu, poziom efektu reverb, aktualny syntezator, poziom opcji mix dla danego efektu itp., itd. W przyszłości pochylimy się nad niektórymi z tych przykładów, ale teraz pozwól, że zostawię Cię z tym krótkim przykładem.

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.
pl: Wpisz następujący kod do czystego bufora, naciśnij Run i następnie zmieniając wartości seed dookoła, naciśnij Run jeszcze raz (kiedy muzyka ciągle jest grana). Odkrywaj różne dźwięki, rytmy i melodie, które możesz stworzyć. Kiedy znajdziesz ten jeden całkiem niezły, zapamiętaj wartość seed, aby móc do niego później powrócić. Gdy na końcu znajdziesz kilka seedów, które Ci się podobają, użyj ich w występie kodowanym na żywo dla Twoich znajomych, przełączając się między Twoimi ulubionymi seedami, by stworzyć cały kawałek.

en: A.10 Control
pl: A.10 Kontrola

en: Controlling Your Sound
pl: Kontroluj Swój Dźwięk

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.
pl: Do tej pory skupialiśmy się w tej serii na tworzeniu dźwięków. Odkryliśmy, że możemy uruchamiać wiele różnych syntezatorów wbudowanych w Sonic Pi z wykorzystaniem poleceń `play` i `synth` oraz wiemy, w jaki sposób uruchamiać nagrane wcześniej sample z wykorzystaniem polecenia `sample`. Zobaczyliśmy również, że możemy na te dźwięki nałożyć efekty studyjne (FX) takie jak reverb czy distortion, wykorzystując do tego polecenie `with_fx`. Jeśli połączysz to wszystko z niesamowicie dokładnym systemem koordynacji czasu (timing system), jaki posiada Sonic Pi, to daje Ci to szeroki wachlarz dźwięków, bitów i riff'ów. Jednakże gdy raz uruchomisz te pieczołowicie dobierane brzmienia, to nie ma już możliwości, aby cokolwiek zmienić, gdy muzyka już gra, prawda? Błąd! Dzisiaj nauczysz się czegoś bardzo potężnego - jak kontrolować syntezatory, gdy te już wystartowały.

en: A Basic Sound
pl: Podstawowy Dźwięk

en: Let's create a nice simple sound. Fire up Sonic Pi and in a fresh buffer type the following:
pl: Stwórzmy prosty, ładny dźwięk. Uruchom Sonic Pi oraz w wolnym buforze wpisz poniższy tekst:

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!
pl: Naciśnij teraz przycisk *Run*, który znajduje się w lewym górnym rogu, by następnie usłyszeć piękny, dudniący dźwięk syntezatora. Śmiało, zrób to jeszcze kilka razy - poczuj ją. Okej, zrobione? Zacznijmy ją kontrolować!

en: Synth Nodes
pl: Węzły Syntezatorów (Synth Nodes)

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:
pl: Małą znaną funkcją w Sonic Pi jest to, że polecenia `play`, `synth` oraz `sample` zwracają coś, co nazywamy `SynthNode`. Obiekt ten reprezentuje grający dźwięk. Możesz przechwycić jeden z tych `SynthNode`ów, korzystając ze standardowego mechanizmu zmiennych, a następnie **kontrolować** go w dalszym punkcie czasu. Przykładowo zmieńmy wartość opcji `cutoff:` po jednym uderzeniu:

en: Let's look at each line in turn:
pl: Spójrzmy na każdy wiersz:

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.
pl: Najpierw uruchamiamy syntezator `:prophet`, korzystając tak jak zwykle z funkcji `synth`. Jednakże przechwytujemy tutaj także wynik tego wywołania i zapisujemy go w zmiennej `sn`. Moglibyśmy nazwać tą zmienną zupełnie inaczej, np. `synth_node` lub `jane` - ta nazwa tak naprawdę nie ma znaczenia. Lecz bardzo ważne jest to, aby wybierać takie nazwy, które będą zrozumiałe i pomocne dla Ciebie podczas Twoich występów oraz dla ludzi czytających Twój kod. Wybrałem nazwę `sn`, ponieważ jest to bardzo fajny skrót do zapamiętania dla węzła syntezatora (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.
pl: W linii drugiej mamy podstawową komendę `sleep`. Nie robi ona nic specjalnego - tylko pyta komputer o czekanie na jedno uderzenie przed przejściem do następnej linii.

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.
pl: Linia trzecia to miejsce, gdzie rozpoczyna się zabawa z kontrolą. Tutaj używamy funkcji `control`, by powiedzieć naszemu działającemu `SynthNode` o zmianie wartości na `130`. Kiedy naciśniesz przycisk **Run**, usłyszysz, że syntezator `:prophet` gra jak wcześniej, jednak po jednym uderzeniu zmieni dźwięk na znacznie jaśniejszy.

en: Modulatable Options
pl: Opcje Z Możliwością Modulacji

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:
pl: Większość opcji syntezatorów i efektów (FX) w Sonic Pi może zostać zmieniona po uruchomieniu. Jednakże nie należą do nich wszystkie. Na przykład opcje `attack:`, `decay:`, `sustain:` i `release:` dotyczące obwiedni dźwięku mogą być ustawione tylko raz przy uruchomieniu dźwięku. Ocena tego, czy dana opcja może lub nie może być zmieniana, jest prosta - wystarczy otworzyć dokumentację dla danego syntezatora lub efektu, a następnie przewinąć ją w dół do szczegółowej dokumentacji dla każdej z opcji i poszukać fraz "May be changed whilst playing" (dana opcja może być zmieniana w trakcie gry) lub "Can not be changed once set" (nie można jej zmieniać po ustawieniu wartości). Przykładowo dokumentacja dla opcji `attack:` syntezatora `:beep` jasno mówi, że nie ma możliwości jej zmiany:

en: Default: 0
pl: Domyślnie: 0

en: Must be zero or greater
pl: Wartość musi wynosić 0 lub być wyższa

en: Can not be changed once set
pl: Nie może być zmienione po ustawieniu

en: Scaled with current BPM value
pl: Skalowanie z bieżącą wartością BPM

en: Multiple Changes
pl: Wielokrotne Zmiany

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:
pl: Kiedy syntezator jest uruchomiony, nie masz żadnych ograniczeń, by zmienić to tylko raz - towarzyszy Ci wolny wybór, więc możesz go przemieniać tyle razy, ile masz na to ochotę. Dla przykładu możemy to zrobić z naszym `:prophet` na mini arpeggiator:

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.
pl: W tym kawałku kodu dodaliśmy tylko kilka dodatkowych rzeczy. Najpierw zdefiniowaliśmy nową zmienną o nazwie `notes` zawierającą nuty, przez które będziemy chcieli iterować (arpeggiator to tylko fantazyjna nazwa dla czegoś, co iteruje przez listę nut w określonym porządku). Następnie zastąpiliśmy nasze pojedyncze wywołania polecenia `control` wywołaniem go 16 razy w pętli. Przy każdym uruchomieniu polecenia `control`, tykamy poleceniem `:tick` przez nasz pierścień z nutami `notes`, powtarzając go od nowa za każdym razem, gdy dobrniemy do jego końca (dzięki fantastycznym możliwościom pierścieni dostępnych w Sonic Pi). Aby wprowadzić trochę urozmaicenia, spróbuj zamiast polecenia `:tick` użyć polecenia `:choose` i zobacz, czy słyszysz różnicę.

en: Note that we can change multiple opts simultaneously. Try changing the control line to the following and listen for the difference:
pl: Zauważ, że możemy zmienić wiele z nich jednocześnie. Spróbuj to zrobić z linią kontrolną i posłuchaj dla różnicy:

en: Sliding
pl: Przesuwne

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.
pl: Kiedy kontrolujemy `SynthNode`, ten odpowiada dokładnie na czas i natychmiast zmienia wartość opt na nową, niczym wciśnięty przycisk lub śmigający przełącznik odpowiadający na zmianę. Może on brzmieć rytmicznie i perkusyjnie, zwłaszcza gdy opt kieruje aspektem barwy takim jak `cutoff:`. Jednakże czasami nie chcesz zmiany, która dzieje się od razu. Zamiast tego chciałbyś płynnie przejść z obecnej wartości na nową, jakbyś poruszał suwakiem lub pokrętłem. Oczywiście Sonic Pi może to zrobić, używając `_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:
pl: Każda opcja, która może być modyfikowana, posiada również specjalną odpowiadającą jej opcję `_slide`, która pozwala Ci na ustawienie czasu ślizgania. Na przykład opcja `amp:` posiada `amp_slide:`, a opcja `cutoff:` ma `cutoff_slide`. Te opcje ślizgania działają nieco inaczej niż wszystkie inne, ponieważ mówią one nucie syntezatora, jak powinny się zachowywać, **gdy zostaną kontrolowane następnym razem**. Spójrz na to:

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...
pl: Zauważ, że ten przykład jest prawie taki sam jak poprzedni, z tą jednak różnicą, że dodaliśmy opcję `cutoff_slide:`. Powoduje to, iż następnym razem syntezator ten, będzie miał kontrolowaną opcję `cutoff:`, przejście z aktualnej wartości do kolejnej zajmie 2 uderzenia. Dlatego, kiedy użyjemy polecenia `control`, możesz usłyszeć, że odcięcie (`cutoff`) ślizga się od 70 do 130. Nadaje to temu dźwiękowi bardzo ciekawy i dynamiczny charakter. A teraz spróbuj zmienić czas trwania ślizgu `cutoff_slide:` na mniejszą wartość, np. 0.5 albo na większą, np. 4, aby zobaczyć, jak zmienia się brzmienie. Pamiętaj, że możesz ślizgać się w ten sposób po każdej modyfikowalnej opcji, a każda wartość opcji `_slide:` może być całkowicie inna. Możesz więc ślizgać się powoli po filtrze odcięcia (`cutoff:`), amplituda dźwięku (`amp:`) może przesuwać się szybko, a zmiana kanału z jednego na drugi (`pan:`) może być gdzieś pomiędzy, o ile jest to brzmienie, którego właśnie szukasz...

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.
pl: Rzućmy okiem na krótki przykład, który demonstruje moc kontrolowania syntezatorów po tym, jak zostały one uruchomione. Zauważ, że możesz także przesuwać FX jak syntezatory, choć korzystając z trochę innej składni. Sprawdź sekcję 7.2 we wbudowanym poradniku, by uzyskać więcej informacji na temat kontroli FX.

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!
pl: Skopiuj kod do czystego bufora i posłuchaj. Nie zatrzymuj się jeszcze na tym etapie - rozpocznij zabawę z kodem. Zmień czas suwaków, nuty, syntezator, FX oraz czas uśpienia. Zauważysz, że możesz go przekształcić w coś zupełnie innego!

en: A.11 Tick Tock
pl: A.11 Tik Tak

en: Tracking the Beat
pl: Śledzenie Rytmu

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.
pl: W poprzednim numerze tego poradnika mieliśmy okazję zgłębiać bardzo techniczne tematy związane z systemem randomizacji, który jest fundamentalną częścią Sonic Pi. Dowiedzieliśmy się, w jaki sposób możemy użyć go, aby wynieść możliwość dynamicznej kontroli nad naszym kodem na zupełnie nowy poziom. W tym miesiącu zamierzamy kontynuować naszą techniczną wycieczkę i zwrócimy naszą uwagę ku unikalnemu systemowi tykania dostępnego w Sonic Pi. Pod koniec tego artykułu będziesz tykał po swojemu poprzez rytmy i riffy, aby stać się DJ'em kodującym na żywo.

en: Beat Counting
pl: Licznik Uderzeń

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.
pl: Podczas tworzenia muzyki często mamy ochotę na zrobienie czegoś innego, w zależności od którego uderzenia to jest. Sonic Pi posiada specjalny system liczenia uderzeń zwany `tick`. Daje on precyzyjną kontrolę podczas występowania uderzenia, a także i obsługuje wiele uderzeń mających własne tempa.

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:
pl: Zabawmy się - by przyspieszyć uderzanie, musimy tylko wezwać `tick`. Otwórz czysty bufor, by następnie wpisać poniższy fragment kodu i nacisnąć Run:

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:
pl: Spowoduje to zwrócenie aktualnego bitu: `0`. Zauważ, że nawet gdy naciśniesz kilkukrotnie przycisk Run, to i tak zawsze zostanie zwrócona wartość `0`. Dzieje się tak, ponieważ każde uruchomienie spowoduje, że bit zacznie być liczony od 0. Jednakże tak długo, jak nasza muzyka jest uruchomiona, możemy przechodzić do kolejnych uderzeń tak wiele razy, jak tylko chcemy:

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.
pl: W każdym miejscu, w którym zobaczysz symbol `#=>` na końcu danej linii kodu, oznacza to, że linia ta spowoduje zalogowanie tekstu po prawej stronie okna. Na przykład `puts foo #=> 0` oznacza, iż kod `puts foo` wyświetli `0` w logach w danym punkcie programu.

en: Checking the Beat
pl: Sprawdzanie Bitu

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`:
pl: Widzieliśmy, że `tick`anie robi dwie rzeczy. Powiększa ono (dodaje jedno) i powraca do obecnego uderzenia. Czasami chcemy tylko spojrzeć na obecne uderzenia bez zwiększania ich ilości. Do tego zadania wykorzystamy polecenie `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`.
pl: W tym kawałku kodu cykniemy nasz bit dwa razy, a następnie dwa razy uruchomimy polecenie `look`. W logu zobaczymy następujące wartości: `0`, `1`, `1`, `1`. Pierwsze dwa tyknięcia (wywołania polecenia `tick`) zwracają `0`, potem `1` tak jak tego oczekujemy, a kolejne dwa polecenia `look` zwracają po prostu ostatnią wartość bitu dwa razy, co w tym przypadku oznacza `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:
pl: Teraz możemy więc zwiększać bit z wykorzystaniem polecenia `tick` i sprawdzać go z wykorzystaniem polecenia `look`? Co teraz? Potrzebujemy czegoś, przez co moglibyśmy tykać. Sonic Pi wykorzystuje pierścienie do reprezentacji riffów, melodii i rytmów, natomiast system tykania został zaprojektowany z myślą o ścisłej współpracy z nimi. W rzeczywistości pierścienie posiadają swoją własną kropkową wersję polecenia `tick`, która robi dwie rzeczy. Po pierwsze, zachowuje się tak jak normalne tykanie i powoduje podniesienie wartości aktualnego bitu. Po drugie, przeszukuje wartości pierścienia, wykorzystując dane tyknięcie bitu jako indeks. Spójrzmy na to:

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:
pl: Polecenie `.tick` to specjalna kropkowa wersja polecenia `tick`, która zwraca w tym przypadku pierwszą wartość z pierścienia - `:a`. Możemy dostać się do każdej z wartości w pierścieniu przez kilkukrotne wywołanie polecenia `.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.
pl: Zwróć uwagę na log, a zauważysz, że zostały wypisane kolejno `:a`, `:b`, `:c`, a potem znowu `:a`. Zauważ, iż polecenie `look` zwraca wartość `3`. Kolejne uruchomienia polecenia `.tick` zachowują się dokładnie tak samo jak normalne standardowe wywołania polecenia `tick` - zwiększają aktualną wartość dla lokalnego wskaźnika bitu.

en: A Live Loop Arpeggiator
pl: Arpeggiator Żywej Pętli

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:
pl: Prawdziwą moc zobaczysz, gdy połączysz razem polecenie `tick` z pierścieniami (`ring`) i żywymi pętlami (`live_loop`). Gdy je połączymy, to mamy wszystkie narzędzia, które są potrzebne, aby zbudować i zrozumieć prosty arpeggiator. Potrzebujemy tylko czterech rzeczy:

en: A ring containing the notes we want to loop over.
pl: Pierścień zwracający nuty, przez które będziemy iterować.

en: A means of incrementing and obtaining the beat.
pl: Środek, który pozwoli nam na inkrementację i dostęp do aktualnego licznika bitów.

en: The ability to play a note based on the current beat.
pl: Zdolność do zagrania nuty na podstawie aktualnego bitu.

en: A loop structure to keep the arpegiator repeating.
pl: Struktura pętli zachowująca powtarzanie arpegiatora.

en: These concepts can all be found in the following code:
pl: Te pojęcia można znaleźć w poniższym kodzie:

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.
pl: Przyjrzyjmy się uważnie każdej z tych linii. Najpierw definiujemy pierścień z naszymi nutami, które będziemy grać w kółko. Następnie tworzymy żywą pętlę `live_loop` o nazwie `:arp` kręcącą się dla nas w kółko. Przy każdym kolejnym przebiegu naszej żywej pętli jako aktualny syntezator ustawiamy `:dpulse`, a następnie gramy kolejną nutę z naszego pierścienia, korzystając z polecenia `.tick`. Pamiętaj, że spowoduje to, iż nasz licznik bitów będzie się zwiększał i każde jego kolejne użycie będzie korzystało z ostatniego bitu jako indeksu do wyciągania nut z naszego pierścienia. Na koniec chcemy poczekać przez jedną ósmą uderzenia zanim rozpoczniemy kolejny przebieg żywej pętli.

en: Multiple Simultaneous Beats
pl: Wielokrotne Równoczesne Uderzenia

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:
pl: Bardzo ważną rzeczą, którą warto wiedzieć, jest to, iż polecenia `tick`i są lokalne dla danej pętli `live_loop`. Oznacza to, iż każda żywa pętla `live_loop` posiada własny niezależny licznik uderzeń. Takie podejście daje o wiele więcej możliwości niż posiadanie jednego globalnego metronomu i bitu. Rzućmy okiem na to, jak to działa w praktyce:

en: Clashing Beats
pl: Kolidujące Uderzenia

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`:
pl: Duża przyczyna zamieszania z systemem cykania Sonic Pi jest wtedy, gdy ludzie chcą użyć go na wielu pierścieniach w tym samym `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.
pl: Nawet jeśli każda żywa pętla `live_loop` posiada swój własny niezależny licznik bitów, to wywołujemy polecenie `.tick` dwa razy w ramach tej samej żywej pętli. Ta informacja oznacza, że bit zostanie zwiększony dwa razy przy każdej rundzie. Może to spowodować pewne interesujące polirytmie, ale zazwyczaj nie jest to coś, czego byś oczekiwał. Istnieją dwa rozwiązania tego problemu. Pierwsza opcja to manualne uruchomianie polecenia `tick` na początku każdej żywej pętli `live_loop`, a następnie korzystanie z polecenia `.look`, aby odwołać się do aktualnego uderzenia w każdym przebiegu żywej pętli. Drugie rozwiązanie to przekazanie unikalnej nazwy do każdego wywołania polecenia `.tick`, na przykład `.tick(:foo)`. Sonic Pi stworzy wtedy i będzie śledził oddzielny licznik bitów dla każdej użytej przez Ciebie z nazw. Tym sposobem masz możliwość pracy z tyloma licznikami uderzeń, z iloma będziesz tylko chciał. Aby dowiedzieć się więcej, zwróć uwagę na sekcję poświęconą nazwanym cyknięciom, która jest dostępna w puncie 9.4 samouczka wbudowanego w Sonic Pi.

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...
pl: Doprowadźmy tę całą wiedzę na temat `tick`ania, `ring`ów i `live_loop`ów razem do ostatecznego przykładu zabawy. Jak przywykliśmy już do tego, nie traktuj tego jako gotowy kawałek - rozpocznij zmianę wielu rzeczy i baw się z nimi. Za pomocą swojej wyobraźni wyczaruj coś, co Cię zachwyci. Do zobaczenia następnym razem...

en: A.12 Sample Slicing
pl: A.12 Krojenie Sampli

en: Sample Slicing
pl: Krojenie Sampli

en: Sound as Data
pl: Dźwięk jako Dane

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:
pl: Zanim jednak zaczniemy, poświęćmy krótką chwilę, aby zrozumieć, w jaki sposób pracuje się z samplami. Podejrzewam, że każdy z Was miał już do czynienia z potężnym samplerem Sonic Pi. Jeśli nie - jest to najlepszy moment ku temu! Włącz swojego Raspberry Pi, uruchom Sonic Pi, wybierając go z Menu zawierającego aplikacje związane z programowaniem, wprowadź następujący kawałek kodu do czystego buforu, a następnie naciśnij przycisk Run - usłyszysz nagrany wcześniej beat z perkusją:

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?
pl: Nagranie dźwięku jest prosto reprezentowane jako dane - dużo liczb pomiędzy -1 a 1, które odzwierciedlają szczyty i doliny danej fali dźwięku. Jeśli zagramy te liczby w odwrotnej kolejności, otrzymamy oryginalne brzmienie. Jednakże nic nas nie powstrzymuje przed tym, żeby zagrać je odwrotnie i stworzyć nowe brzmienie, prawda?

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.
pl: Ale w jaki sposób tak naprawdę sample są nagrywane? W sumie jest to dość proste, gdy już zrozumiesz podstawowe prawa, jakimi rządzi się dźwięk. Kiedy wydajesz jakiś dźwięk, na przykład poprzez uderzenie bębna, hałas przemieszcza się przez powietrze w sposób bardzo podobny tego, w jaki faluje tafla jeziora, kiedy wrzucisz do niego kamyk. Kiedy te fale dotrą do Twoich uszu, Twój bębenek porusza się sympatycznie i przetwarza te ruchy na dźwięk, który słyszysz. Jeśli chcemy nagrać i odtworzyć ten dźwięk ponownie, potrzebny jest nam sposób, w który moglibyśmy uchwycić, zapisać i odtworzyć te fale. Jednym ze sposobów jest wykorzystanie mikrofonu, który zachowuje się tak jak bębenek oraz porusza się tam i z powrotem, gdy kolejne fale dźwięku uderzają w niego. Następnie mikrofon konwertuje jego pozycję na małe elektroniczne sygnały, które są następnie mierzone wiele razy na sekundę. Te pomiary są następnie odwzorowane jako seria liczb pomiędzy -1 i 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.
pl: Jeśli chcielibyśmy narysować wykres wizualizujący dźwięk, byłby to prosty graf przedstawiający dane, gdzie x byłoby osią czasu, natomiast aktualna pozycja mikrofonu/głośnika byłaby oznaczona na osi y jako wartość pomiędzy -1 a 1. Możesz zobaczyć przykład takiego grafu na samej górze diagramu.

en: Playing Part of a Sample
pl: Granie Wycinka Sampla

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`:
pl: Zastanówmy się zatem, w jaki sposób możemy zakodować Sonic Pi, aby zagrało dany sampel od tyłu? Żeby odpowiedzieć na te pytanie, musimy przyjrzeć się opcjom `start:` i `finish:`, które są zdefiniowane dla polecenia `sample`. Pozwalają nam one na kontrolę momentu początku i zakończenia naszego dźwięku za pomocą liczb reprezentujących dźwięk. Wartości te dla obu opcji są reprezentowane jako liczby pomiędzy `0` i `1`, gdzie `0` stanowi początek danego sampla, natomiast `1` jest jego końcem. Aby więc zagrać pierwszą połowę sampla Amen Break, wystarczy, że w opcji `finish:` ustawimy wartość `0.5`:

en: We can add in a `start:` value to play an even smaller section of the sample:
pl: Możemy ponadto zdefiniować wartość początku opcją `start:` dla zagrania jeszcze mniejszego wycinka sampla:

en: For fun, you can even have the `finish:` opt's value be *before* `start:` and it will play the section backwards:
pl: Dla zabawy możesz nawet ustawić opcję `finish:`, tak aby była *przed* opcją `start:`, a spowodujesz, że ta część sampla zostanie zagrana od tyłu:

en: Re-ordering Sample Playback
pl: Zmiana kolejności Odtwarzania Sampla

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.
pl: Teraz, gdy już wiemy, że sampel to nic innego jak tylko lista liczb, które mogą być zagrane w odwróconej kolejności oraz w jaki sposób możemy zagrać określoną część danego sampla, możemy zacząć zabawę w zagranie sampla od tyłu w 'niewłaściwej` kolejności.

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:
pl: Spróbujmy wziąć nasz sampel Amen Break, pociąć go na 8 równych kawałków, a następnie przetasować te części. Spójrz na diagram: na samej górze sekcja A) reprezentuje diagram przedstawiający dane naszego oryginalnego sampla. Pocięcie go na 8 kawałków da nam to, co widzimy w sekcji B) - zauważ, że nadaliśmy każdej części inny kolor, abyśmy mogli łatwiej je rozróżnić. Możesz zauważyć, że każdy kawałek ma na górze wartości początku i końca. Na koniec w sekcji C) widzimy jedną z możliwych kombinacji przetasowania tych kawałków. Następnie możemy zagrać te części, aby stworzyć zupełnie nowy beat. Zobacz na poniższy kawałek kodu, który robi te rzeczy:

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`.
pl: wybieramy losowe cięcie do zagrania, co powinno być losową liczbą z zakresu od 0 do 7 (pamiętaj, że zaczynamy liczyć od 0). Sonic Pi posiada bardzo przydatną funkcję, która idealnie nadaje się do tego celu : `rand_i(8)`. Następnie zapisujemy indeks tego losowego wycinka w zmiennej `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.
pl: Definiujemy rozmiar dla każdego kawałka (`slice_size`), który w naszym przypadku ma wielkość 1/8 lub 0.125. Wielkość wycinka `slice_size` jest nam niezbędna, abyśmy mogli skonwertować nasz indeks `slice_idx` do wartości pomiędzy 0 a 1, tak żebyśmy użyli go jako nasza opcja startu `start:`.

en: We calculate the start position `s` by multiplying the `slice_idx` by the `slice_size`.
pl: Aby obliczyć pozycję startu `s`, mnożymy indeks `slice_idx` przez wielkość wycinka `slice_size`.

en: We calculate the finish position `f` by adding the `slice_size` to the start position `s`.
pl: Obliczamy pozycję końcową `f` poprzez dodanie wielkości wycinka `slice_size` do pozycji początkowej `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`.
pl: Teraz możemy zagrać wycinek sampla poprzez podłączenie wartości `s` i `f` po opcje `start:` i `finish:` polecenia `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.
pl: Zanim zagramy kolejny kawałek, musimy wiedzieć, jak długo powinniśmy poczekać (`sleep`) - powinien to być czas równy długości trwania jednego wycinka sampla. Na szczęście Sonic Pi udostępnia nam funkcję `sample_duration`, akceptującą wszystkie te same opcje, które możemy przekazać do polecenia `sample` i po prostu zwraca długość trwania. W związku z tym poprzez przekazanie do polecenia `sample_duration` naszych opcji `start:` i `finish:`, możemy łatwo dowiedzieć się, jaki jest czas trwania pojedynczego wycinka sampla.

en: We wrap all of this code in a `live_loop` so that we continue to pick new random slices to play.
pl: Cały ten kod opakowujemy w żywą pętlę `live_loop`, dzięki temu w kółko wybieramy kolejne losowe kawałki do zagrania.

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...
pl: Spróbujmy teraz połączyć wszystko to, co do tej pory widzieliśmy i stwórzmy finałowy przykład, który zademonstruje, jak możemy wykorzystać podobne podejście do połączenia losowo pociętych beatów z odrobiną basu, aby utworzyć zaczyn ciekawego utworu. Teraz Twoja kolej - użyj poniższego kodu jako punkt wyjściowy i zobacz, czy potrafisz zmienić go po swojemu, aby utworzyć coś nowego...

en: A.13 Code a Probabilistic Sequencer
pl: A.13 Kodowanie Probabilistycznego Sekwencera

en: Code a Probabilistic Sequencer
pl: Kodowanie Probabilistycznego Sekwencera

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!
pl: W poprzednim odcinku tej serii Sonic Pi odkrywaliśmy niesamowite możliwości randomizacji, aby móc zaprezentować różnorodność, zaskoczenie i zmianę w naszych utworach kodowanych na żywo oraz koncertach. Przykładowo wybieraliśmy losowe nuty z gamy do utworzenia nieskończonej melodii. Dzisiaj nauczymy się nowej techniki, która wykorzystuje randomizację dla rytmu - probabilistyczne uderzenia!

en: Probability
pl: Prawdopodobieństwo

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:
pl: Zanim będziemy mogli zacząć tworzenie nowych beat'ów i syntezowanych rytmów, musimy zrobić szybką wycieczkę w krainę podstaw prawdopodobieństwa. Może to brzmieć odrobinę strasznie i skomplikowanie, ale tak naprawdę to jest to proste jak rzut kostką do gry - serio! Kiedy weźmiesz do ręki standardową kostkę do gry o 6 oczkach i rzucisz ją, to co tak naprawdę się dzieje? Dobrze, najpierw wyrzucisz 1, 2, 3, 4, 5 lub 6 oczek, z czego każda opcja będzie miała takie same szanse powodzenia. Tak naprawdę jeśli wiemy, że mamy do czynienia z kostką o 6 oczkach, to przeciętnie (jeśli będziesz rzucał bardzo wiele razy) powinieneś wyrzucić 1 przynajmniej raz na każde 6 rzutów. Oznacza to, że masz 1/6 szansy na to, aby wyrzucić 1. W Sonic Pi możemy naśladować takie rzuty kostką za pomocą funkcji `dice`. Spróbujmy rzucić jedną kostką 8 razy:

en: Notice how the log prints values between 1 and 6 just as if we'd rolled a real dice ourselves.
pl: Zauważ, jak w logu są wyświetlane wartości od 1 do 6 - dokładnie tak samo, jak byśmy rzucali prawdziwą kostką do gry.

en: Random Beats
pl: Losowe Beat'y

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:
pl: A teraz wyobraź sobie, że masz bęben i za każdym, gdy chcesz w niego uderzyć, rzucasz kostką. Jeśli wyrzuciłeś 1 oczko - uderzasz, jeśli wyrzuciłeś cokolwiek innego, nie uderzasz. Masz teraz probabilistyczną maszynę perkusyjną, która pracuje z prawdopodobieństwem 1 na 6! Posłuchajmy, jak to brzmi:

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.
pl: Spróbujmy szybko przyjrzeć się każdej linii, aby upewnić się, że wszystko jest jasne i zrozumiałe. Najpierw tworzymy nową żywą pętlę `live_loop` o nazwie `:random_beat`, która będzie w kółko powtarzać 2 linie pomiędzy poleceniami `do` i `end`. Pierwsza z tych linii to wywołanie polecenia `sample`, które spowoduje, iż zostanie odtworzony nagrany wcześniej dźwięk (w tym wypadku będzie to `:drum_snare_hard`). Zauważ jednak, że linia ta ma na końcu specjalną klauzulę `if`. Oznacza ona, iż dany wiersz zostanie wykonany tylko wtedy, gdy warunek logiczny po prawej stronie jest prawdą i zwróci wartość `true`. Nasz warunek w tym wypadku to `dice == 1`. Powoduje to zawołanie naszej funkcji `dice`, która, jak już widzieliśmy, zwraca wartości pomiędzy 1 a 6. Następnie używamy operatora `==`, aby sprawdzić, czy wylosowana wartość to `1`. Jeśli tak, to nasze wyrażenie logiczne zwraca wartość `true` i usłyszymy dźwięk naszego werbla (z ang. snare drum). Jeśli jednak zwrócona wartość to nie `1`, wtedy nasze wyrażenie logiczne zwróci wartość `false` i nasz werbel zostanie ominięty. Druga linia po prostu sprawia, że czekamy `0.125` sekundy, zanim ponownie wykonamy rzut kostką.

en: Changing Probabilities
pl: Zmienianie Prawdopodobieństwa

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:
pl: Ci z Was, którzy mieli okazję grać w gry fabularne (RPG - z ang. role-playing game), będą zapewne zaznajomieni z wieloma kostkami o dziwnych kształtach, które mają różną ilość oczek. Na przykład istnieje kostka o kształcie czworościanu, która posiada 4 ścianki, a nawet kostka o 20 ściankach w kształcie dwudziestościanu. Liczba ścian kostki zmienia szansę lub prawdopodobieństwo wyrzucenia 1 oczka. Im mniej ścianek, tym większa szansa na to, że wyrzucisz 1 i analogicznie im więcej ścianek, tym prawdopodobieństwo jest mniejsze. Przykładowo, korzystając z kostki o 4 oczkach, mamy szansę jeden do czterech na wyrzucenie liczby 1, a korzystając z kostki z 20 oczkami, jest tylko jedna dwudziesta szansy. Na szczęście Sonic Pi posiada bardzo wygodną funkcję `one_in`, która została stworzona właśnie do tego celu. Zagrajmy:

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!
pl: Uruchom powyższą żywą pętlę, a usłyszysz znany Ci już rytm o losowym brzmieniu. Nie zatrzymuj jednak tego kodu. Zamiast tego, w trakcie działania, zmień wartość `6` na inną, taką na przykład jak `2` lub `20` i naciśnij ponownie przycisk `Run`. Zauważ, że mniejsze liczby oznaczają, iż werbel będzie brzmiał częściej, a wyższe liczby spowodują, że będziemy go słyszeć rzadziej. Właśnie tworzysz muzykę, korzystając z mechanizmu prawdopodobieństwa!

en: Combining Probabilities
pl: Łączenie Prawdopodobieństwa

en: Things get really exciting when you combine multiple samples being triggered with different probabilities. For example:
pl: Bardzo ciekawe efekty można uzyskać wtedy, gdy połączymy jednocześnie uruchamianie wielu sampli z różnym prawdopodobieństwem. Na przykład:

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!
pl: A teraz uruchom powyższy kod i zacznij zmieniać prawdopodobieństwa, aby zmienić rytm. Spróbuj również zmieniać sample, żeby utworzyć zupełnie nowe brzmienie. Na przykład spróbuj zmienić sampel `:drum_cymbal_closed` na `:bass_hit_c` dla uzyskania ekstra bass'u!

en: Repeatable Rhythms
pl: Powtarzalne Rytmy

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.
pl: Następnie możemy użyć naszej starej, dobrej znajomej funkcji `use_random_seed`, aby zresetować losowy strumień po 8 iteracjach, żeby utworzyć regularny beat. Wpisz następujący kod dla usłyszenia bardziej regularnego i powtarzalnego rytmu. Gdy już usłyszysz beat, spróbuj zmienić wartość ziarna z `1000` na inną liczbę. Zauważ, jak różne liczby będą generowały różne beaty.

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.
pl: Kiedy pracuję z tego typu strukturami, staram się zazwyczaj zapamiętać, które ciągi dźwięków brzmią fajnie i staram się je zapisywać. W ten sposób mogę bardzo łatwo odtwarzać moje rytmy w przyszłych wprawkach czy wystąpieniach na żywo.

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!
pl: Na koniec możemy wrzucić tu trochę losowego basu, aby nadać mu fajną melodyjny charakter. Zauważ, że tutaj również możemy użyć naszej świeżo odkrytej metody probabilistycznego sekwencjonowania dla naszych syntezatorów - dokładnie w taki sam sposób, jak zrobiliśmy to w przypadku sampli. Nie zostawiaj tego jednak samemu sobie - spróbuj zmieniać liczby i zacznij tworzyć Twoje własne numery, korzystając z mocy probabilistyki!

en: A.14 Amplitude Modulation
pl: A.14 Modulacja Amplitudy

en: Amplitude Modulation
pl: Modulacja Amplitudy

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.
pl: W tym miesiącu zgłębimy jeden z najbardziej potężnych i elastycznych efektów audio dostępnych w Sonic Pi - efekt `:slicer`. Po przeczytaniu tego artykułu nauczysz się, w jaki sposób manipulować całkowitą głośnością wszystkich części naszego dźwięku kodowanego na żywo w nowe, bardzo potężne sposoby. Pozwoli Ci to na tworzenie nowych struktur rytmicznych i dźwiękowych oraz rozszerzy Twoje możliwości dźwiękowe.

en: Slice that Amp
pl: Pokrój tę Amplitudę

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:
pl: Ale co tak właściwie robi efekt `:slicer`? Jednym ze sposobów na myślenie o nim jest próba wyobrażenia sobie, że ktoś bawi się w kółko poziomem głośności na Twoim TV lub domowym zestawie hi-fi. Za chwilę się temu przyjrzymy, najpierw jednak posłuchajmy niskiego ryku poniższego kodu, który uruchamia syntezator `:prophet`:

en: Now, let's pipe it through the `:slicer` FX:
pl: A teraz spróbujmy nałożyć na niego efekt `: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:
pl: Posłuchaj, w jaki sposób efekt slicer przycisza i pogłaśnia dźwięk regularnie w rytm beatu. Zauważ również, jak efekt `:slicer` wpływa na cały dźwięk, który jest generowany spomiędzy bloku `do`/`end`. Możesz kontrolować prędkość, z jaką powoduje on włączanie i wyłączanie dźwięku za pomocą opcji fazy `phase:`, która kontroluje czas trwania pojedynczej fazy. Domyślnie jest to wartość `0.25`, co oznacza, że będzie to miało miejsce 4 razy na sekundę przy domyślnym tempie 60 BPM (ang. Beats Per Minute - ilość uderzeń na minutę). Spróbujmy to przyspieszyć:

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.
pl: A teraz spróbuj samodzielnie użyć innej długości fazy `phase:`. Spróbuj użyć dłuższych i krótszych wartości. Zobacz, co się stanie, jeśli wybierzesz naprawdę małą liczbę. Spróbuj również użyć innych syntezatorów, np. `:beep` lub `:dsaw` oraz innych nut. Zerknij na poniższy diagram, aby zobaczyć, jak różne wartości fazy `phase:` zmieniają ilość modulacji amplitudy przypadających na jedno uderzenie (beat).

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`.
pl: Czas trwania fazy to długość czasu, jaka jest potrzebna dla jednego włączenia/wyłączenia cyklu. Dlatego też mniejsze wartości spowodują, że efekt FX będzie włączany i wyłączany dużo częściej niż przy ustawieniu większych wartości. Dobrymi wartościami na początek zabawy są `0.125`, `0.25`, `0.5` i `1`.

en: Control Waves
pl: Kontrola Fal

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:
pl: Domyślnym zachowaniem efektu `:slicer` jest korzystanie z kwadratowej fali do manipulacji amplitudą na przestrzeni czasu. To właśnie dlatego słyszymy pełną amplitudę naszego dźwięku przez pewien moment, a potem nagle zostaje on całkowicie wyłączony na kolejny moment, potem znowu gra - i tak w kółko. Okazuje się jednak, że fala kwadratowa jest zaledwie jedną z 4 różnych fal, które mogą być używane przez efekt `:slicer`. Inne fale, z których możemy korzystać, to piła (ang. saw), trójkąt (ang. triangle) i sinusoida. Zerknij na poniższy diagram, aby zobaczyć, jak one wyglądają. Możemy również posłuchać, jak brzmią. Na przykład poniższy kod używa sinusoidy jako fali sterującej. Posłuchaj, jak dźwięk nie jest już włączany i wyłączany nagle, lecz zamiast tego płynnie pojawia się i zanika:

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.
pl: Spróbuj pobawić się z różnymi formami fali poprzez zmianę opcji `wave:` na wartość `0`, aby uzyskać falę podobną do piły, `1` dla uzyskania fali o kwadratowym kształcie, `2` dla stworzenia fali trójkątnej oraz `3`, aby fala miała kształt sinusoidalny. Zobacz też, jak różne fale brzmią z innymi opcjami, na przykład `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.
pl: Każda z tych fal może zostać odwrócona za pomocą opcji `invert_wave:`, która obraca ją wokół osi y. Przykładowo w jednej fazie fala o kształcie piły zazwyczaj zaczyna się wysoko, powoli opada, po czym ponownie wskakuje na szczyt. Ustawiając opcję `invert_wave: 1`, fala taka zacznie się nisko i najpierw będzie powoli szła w górę do momentu, w którym z powrotem zeskoczy na dół. Oprócz tego możemy kontrolować falę poprzez uruchomienie jej w różnych momentach, korzystając z polecenia `phase_offset:` - używamy do tego wartości pomiędzy `0` a `1`. Bawiąc się i zmieniając wartości opcji `phase:`, `wave:`, `invert_wave:` i `phase_offset`, możesz znacząco wpłynąć na to, w jaki sposób amplituda jest zmieniana na przestrzeni czasu.

en: Setting your levels
pl: Ustawianie własnych poziomów

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:
pl: Domyślnie `:slicer` zmienia się w zakresie amplitudy o wartościach od `1` (pełna głośność) do `0` (cisza). Może to zostać zmienione za pomocą opcji `amp_min:` (amplituda minimalna) oraz `amp_max:` (amplituda maksymalna). Możesz z nich skorzystać w połączeniu z falą sinusoidalną, aby stworzyć prosty efekt tremolo:

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.
pl: To jest zupełnie tak jak złapanie pokrętła od głośności znajdującego się na Twoim sprzęcie hi-fi i przekręcanie go odrobinę w górę i w dół w taki sposób, że dźwięk 'drga' (z ang. wobble) w jedną i drugą stronę.

en: Probabilities
pl: Prawdopodobieństwa

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:
pl: Jednym z najbardziej potężnych właściwości efektu `:slicer` jest zdolność do używania prawdopodobieństwa, aby decydowało o tym, kiedy go włączać, a kiedy wyłączać. Zanim `:slicer` zacznie nową fazę, następuje rzut kostką i w zależności od wyniku albo zostaje użyta określona fala, albo dźwięk pozostanie wyciszony. Posłuchaj:

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.
pl: Posłuchaj teraz, jak udało nam się uzyskać bardzo interesujący rytm impulsów. Spróbuj zmienić opcję `probability:` na inną wartość pomiędzy `0` a `1`. Te bliższe zeru spowodują, iż między każdym z dźwięków pojawi się więcej przestrzeni. Będzie to spowodowanie tym, że prawdopodobieństwo tego, iż dźwięki zostaną uruchomione, będzie znacznie większe.

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.
pl: Inną rzeczą godną zanotowania jest to, że system prawdopodobieństwa w efektach (FX) jest dokładnie taki sam jak system randomizacji (losowości), do którego można uzyskać dostęp przez funkcje takie jak `rand` czy `shuffle`. Oba są całkowicie przewidywalne. Oznacza to, że za każdym razem, gdy naciśniesz przycisk Run, usłyszysz dokładnie ten sam rytm pulsujący dla danego prawdopodobieństwa. Jeśli chciałbyś to zmienić, to zawsze możesz użyć opcji `seed:`, aby wybrać inny punkt początkowy dla losowych wartości. Działa to dokładnie tak samo jak funkcja `use_random_seed`, ale wpływa tylko na ten konkretny efekt.

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:
pl: Na koniec możesz zmienić pozycję `spoczynku` dla fali kontrolującej, kiedy test prawdopodobieństwa nie udaje się z wartości `0` na dowolną inną pozycję, wykorzystując opcję `prob_pos`:

en: Slicing Beats
pl: Przycinanie Beat'ów

en: One really fun thing to do is to use `:slicer` to chop a drum beat in and out:
pl: Jedną naprawdę fajną rzeczą jest spróbowanie użycia efektu `:slicer` do pocięcia beatu perkusyjnego:

en: Changing tempo
pl: Zmiana tempa

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:
pl: Jak już widzieliśmy, zmiana domyślnego tempa BPM z wykorzystaniem polecenia `use_bpm` spowoduje, że wszystkie czasy odpoczynku (ang. sleep) oraz długość trwania obwiedni dźwięku syntezatorów zwiększą się lub skrócą, aby dopasować się do beatu. Dotyczy to również efektu `:slicer`, ponieważ długość trwania opcji `phase:` jest mierzona w beatach, a nie sekundach. Możemy zatem naprawić problem, jaki mamy w pętli `loop_amen` powyżej poprzez zmianę tempa BPM, tak aby pasowało do naszego sampla:

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!
pl: Spróbujmy zastosować wszystkie te pomysły w finalnym przykładzie, który używa tylko samego efektu `:slicer` do stworzenia ciekawej kombinacji. Dalej, śmiało - zacznij zmieniać ten kawałek i zrób z niego swój nowy numer!

en: A.15 Five Live Coding Techniques
pl: A.15 Pięć Technik Kodowania Na Żywo

en: Five Live Coding Techniques
pl: Pięć Technik Kodowania Na Żywo

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.
pl: W bieżącym numerze tego poradnika o Sonic Pi zobaczymy, w jaki sposób możesz zacząć traktować Sonic Pi jak prawdziwy instrument. Musimy zatem zacząć myśleć o kodzie w zupełnie nowy sposób. Osoby kodujące na żywo myślą o kodzie w sposób podobny do tego, w jaki skrzypkowie myślą o swoich smyczkach. W rzeczy samej tak jak skrzypek potrafi wykorzystać różne techniki smyczkowania, aby stworzyć różne dźwięki (długie powolne ruchy kontra szybkie krótkie pociągnięcia), tak samo my poznamy pięć podstawowych technik kodowania na żywo, które umożliwia Sonic Pi. Pod koniec tego artykułu będziesz mógł samodzielnie ćwiczyć na potrzeby swoich własnych występów przed publicznością.

en: 1. Memorise the Shortcuts
pl: 1. Zapamiętaj Skróty

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.
pl: Pierwszą wskazówką w kodowaniu na żywo z Sonic Pi jest zaczęcie używania skrótów klawiszowych. Na przykład zamiast tracić cenny czas na sięganie po myszkę, przesuwanie ją na przycisk Run i kliknięcie, możesz po prostu nacisnąć jednocześnie przyciski `alt` i `r`. Będzie to dużo szybsze i dzięki temu wciąż będziesz miał palce na klawiaturze gotowe do kolejnej edycji kodu. Możesz poznać wszystkie skróty klawiszowe dotyczące przycisków na górze poprzez najechanie na nie myszką i poczekanie chwilę, aż pokaże się opis. Aby zobaczyć pełną listę skrótów klawiszowych, udaj się do sekcji 10.2 samouczka wbudowanego w Sonic Pi.

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.
pl: Jedną z fajniejszych rzeczy, które można zrobić podczas występów na żywo, jest nadanie Twoim ruchom finezji, gdy naciskasz skróty klawiszowe. Na przykład bardzo dobrą rzeczą jest zakomunikowanie publiczności, że zamierzasz wprowadzić zmianę - postaraj się więc ozdobić Twój ruch, gdy naciskasz `alt-r` dokładnie w taki sam sposób, w jaki zrobiłby to gitarzysta gdy uderza o struny, aby zagrać fantastyczny "akord mocy" (ang. power chord).

en: 2. Manually Layer your Sounds
pl: 2. Układaj Swoje Dźwięki Manualnie

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:
pl: Teraz potrafisz już natychmiast uruchamiać kod za pomocą klawiatury, możesz więc od razu zacząć wykorzystywać tę umiejętność przy drugiej technice polegającej na ręcznym układaniu kolejnej warstwy Twojej kompozycji. Zamiast 'komponowania' przy wykorzystaniu wielu poleceń `play` i `sample` oddzielonych odwołaniami do `sleep`, będziemy mieli tylko jedno wywołanie polecenia `play`, które będziemy manualnie zmieniać, używając polecenia `alt-r`. Spróbujmy zatem! Wpisz poniższy kod do pustego bufora:

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:
pl: A teraz naciśnij przycisk `Run` i gdy dźwięk wciąż jeszcze gra, popraw kod, aby dorzucić cztery nuty poprzez zmianę kodu na następujący:

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.
pl: A teraz naciśnij ponownie przycisk `Run`, aby usłyszeć oba dźwięki grające w tym samym czasie. Dzieje się tak, ponieważ przycisk `Run` dostępny w Sonic Pi nie czeka w ogóle na zakończenie jakiegokolwiek poprzedniego kodu, lecz zamiast tego uruchamia nasz kod w tym samym czasie. Oznacza to, że możesz ręcznie w bardzo łatwy sposób nawarstwić wiele razy różne dźwięki z małymi lub dużymi zmianami pomiędzy każdym uruchomieniem. Na przykład spróbuj zmienić za jednym razem opcje `note:` i `cutoff:`, a następnie odpalić kod ponownie.

en: You can also try this technique with long abstract samples. For example:
pl: Możesz spróbować tej techniki z długimi abstrakcyjnymi samplami. Na przykład:

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.
pl: Spróbuj zacząć z wyłączonym samplem, a następnie sukcesywnie zmniejszaj o połowę wartości opcji `rate:` pomiędzy kolejnymi naciśnięciami `Run`. Zacznij od `1`, potem `0.5`, `0.25` aż do `0.125` - sprawdź nawet jakieś liczby ujemne, na przykład `-0.5`. Spróbuj nawarstwić te dźwięki na siebie i zobacz, dokąd uda Ci się to doprowadzić. Na koniec spróbuj dodać jakiś efekt.

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.
pl: Kiedy występujesz na żywo, pracując w ten sposób z prostymi liniami kodu, to publiczność, dla której Sonic Pi jest czymś nowym, ma całkiem niezłą szansę na to, żeby śledzić to, co robisz i kod, który tworzysz, dzięki czemu mogą czytać docierający do nich dźwięk.

en: 3. Master Live Loops
pl: 3. Opanuj Żywe Pętle (Live Loops)

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.
pl: Kiedy pracujemy z bardziej rytmiczną muzyką, uruchamianie wszystkiego z ręki przy utrzymaniu odpowiedniego tempa może być dosyć trudne, jeśli nie niemożliwe. Zamiast tego dużo lepiej jest skorzystać z żywej pętli `live_loop`. Pozwala Ci to na powtarzanie Twojego kodu, a jednocześnie masz możliwość edycji i przygotowania go na kolejny przebieg pętli. Ponadto będą one uruchomione w tym samym czasie co inne żywe pętle `live_loop` - oznacza to, że możesz połączyć je razem ze sobą oraz z manualnym uruchamianiem kodu. Zerknij na sekcję 9.2 wbudowanego samouczka, aby uzyskać więcej informacji o tym, jak możesz pracować z żywymi pętlami.

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.
pl: Kiedy występujesz na żywo, pamiętaj, aby korzystać z dostępnej dla polecenia `live_loop` opcji `sync:`. Pozwoli Ci to na naprawienie nieoczekiwanych pomyłek, które powodują zatrzymanie danego kawałka kodu ze względu na błąd. Jeśli posiadasz już opcję `sync:`, która wskazuje na inną istniejącą i poprawną pętlę `live_loop`, to możesz szybko naprawić błąd i ponownie uruchomić kod, co pozwoli na zresetowanie całej sytuacji bez utraty choćby jednego beatu.

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!`.
pl: Po uruchomieniu tego kodu wszystkie nowe dźwięki będą miały zaaplikowany filtr niskich tonów i w związku z tym zostaną bardziej stłumione. Zauważ, że oznacza to, iż nowe wartości miksera zostaną takie same, dopóki nie zostaną ponownie zmienione. Jeśli jednak chcesz, możesz zawsze zresetować mikser do domyślnego poziomu poprzez użycie `reset_mixer!`. Kilkoma obecnie wspieranymi opcjami są: `pre_amp:`, `lpf:` `hpf:` oraz `amp:`. Aby zobaczyć pełną listę dostępnych parametrów, wystarczy, że zajrzysz do wbudowanej dokumentacji dostępnej dla polecenia `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:
pl: Użyj opcji typu `*slide`, aby zmienić poziom wartości jednej lub wielu opcji w taki sposób, jakbyś używał do tego celu suwaka na mikserze. Posługując się przykładem, żeby powoli przesunąć na mikserze filtr niskich częstotliwości w dół z obecnej wartości do 30, użyj poniższego:

en: You can then slide quickly back to a high value with:
pl: Po tym przesunięciu możesz szybko wrócić do wyższej wartości za pomocą:

en: When performing, it's often useful to keep a buffer free for working with the mixer like this.
pl: Kiedy występujesz, często przydatne jest zachowanie czystego bufora do pracy z takim mikserem jak ten.

en: 5. Practice
pl: 5. Praktyka

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.
pl: Najważniejszą techniką do nauki żywego kodowania jest praktyka. Tę metodę wykorzystuje wielu profesjonalnych muzyków - grają oni na swoich instrumentach przez kilka godzin dziennie, by stać się coraz to lepszymi twórcami. Trenowanie jest tak samo ważne zarówno dla osoby kodującej na żywo, jak i gitarzysty. Pozwala ono Twoim palcom na zapamiętanie pewnych wzorców, co umożliwia im następnie o wiele płynniejszą pracę. Praktyka daje również możliwości do odkrywania nowych dźwięków i składni kodów.

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.
pl: Podczas występów na żywo zauważysz, że im więcej ćwiczysz, tym łatwiej będzie Ci się rozluźnić na imprezie. Ponadto dzięki praktyce zdobędziesz sporo doświadczenia, które będziesz mógł potem wykorzystać. Także pomoże Ci zrozumieć, które typy zmian będą interesujące oraz czy będą dobrze współgrać z aktualnie grającymi dźwiękami.

en: A.16 How to Practice Live Coding
pl: A.16 W jaki sposób ćwiczyć kodowanie na żywo (Live Coding)

en: 8 Tips for Live Coding Practice
pl: 8 Wskazówek dotyczących ćwiczenia kodowania na żywo (Live Coding)

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.
pl: W ubiegłym miesiącu mieliśmy okazję poznać pięć ważnych technik, które umożliwiają opanowanie kodowania na żywo (Live Coding) - innymi słowy, dowiedzieliśmy się, w jaki sposób możemy wykorzystać Sonic Pi, aby zastosować do kodu takie same podejście jak do instrumentu muzycznego. Jedną z ważnych koncepcji, które omówiliśmy, była praktyka. W tym miesiącu posuniemy się dalej i głębiej, żeby zrozumieć, dlaczego praktykowanie kodowania na żywo jest takie ważne i w jaki sposób możesz zacząć.

en: Practice regularly
pl: Ćwicz regularnie

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.
pl: Najważniejszą radą, jaką mogę Ci dać, to pilnowanie się, aby ćwiczyć regularnie. Z zasady zazwyczaj ćwiczę ok. 1-2 godzin dziennie, ale dla Ciebie na początek może wystarczyć i 20 minut dziennie. Mało, ale często jest to Twój cel - jeśli więc możesz wygospodarować choćby 10 min, to świetny początek.

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.
pl: Wskazówka #1 - spraw, aby ćwiczenie stało się Twoją rutyną. Znajdź w ciągu dnia dobry moment, który będzie Ci odpowiadał i postaraj się ćwiczyć w tym czasie tak wiele dni w tygodniu, jak tylko możesz. Już niedługo będziesz nie będziesz mógł się doczekać Twojej kolejnej regularnej sesji.

en: Learn to Touch Type
pl: Naucz się pisać bezwzrokowo na klawiaturze

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.
pl: Jeśli zdarzy Ci się oglądać profesjonalnego muzyka występującego na scenie, to na pewno zauważysz kilka rzeczy. Po pierwsze, kiedy grają, nie patrzą na swój instrument. Ich palce, ramiona i ciała wiedzą, które klawisze naciskać, które struny uderzać, w który bęben uderzyć bez nadmiernej konieczności myślenia o tym, jak to zrobić. Nazywa się to "pamięcią mięśniową" i mimo że może to brzmieć jak coś, co mogą robić tylko profesjonaliści - to jest z tym dokładnie tak samo jak wtedy, gdy nauczyłeś się chodzić czy jeździć na rowerze - ćwiczenie poprzez powtarzanie. Osoby kodujące na żywo (Live Coders) używają pamięci mięśniowej, aby zwolnić ich umysły z konieczności myślenia o tym, jak układać swoje palce, dzięki czemu mogą skupić się na muzyce. Nazywa się to pisaniem bezwzrokowym - pisaniem bez konieczności patrzenia na klawiaturę.

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.
pl: Wskazówka #2 - naucz się pisać bez patrzenia na klawiaturę. Istnieje wiele aplikacji, stron, a nawet gier, które pomogą Ci to osiągnąć. Znajdź jedną, która Ci się podoba i trzymaj się jej, dopóki nie będziesz umiał kodować bez konieczności opuszczania wzroku na klawiaturę.

en: Code whilst standing
pl: Koduj na stojąco

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.
pl: Ciało muzyka jest przystosowane do grania na swoim instrumencie. Na przykład osoba grająca na trąbce musi być zdolna do porządnego dmuchania, gitarzysta musi umieć złapać gryf z odpowiednią siłą, perkusista musi umieć nieprzerwanie uderzać w bębny przez długi kawałek czasu. A jakie zdolności fizyczne są niezbędne do kodowania na żywo? Dokładnie tak jak DJe, kodujący na żywo zazwyczaj występują na stojąco, a niektórzy nawet tańczą podczas kodowania! Jeśli zaczniesz ćwiczyć kodowanie, siedząc za biurkiem, a następnie będziesz zmuszony, żeby stać podczas imprezy, to na pewno od razu zauważysz różnicę i będzie to dla Ciebie trudne oraz frustrujące.

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.
pl: Wskazówka #3 - stój podczas swoich ćwiczeń. Najprostszą metodą jest użycie do tego wysoko stojącego biurka. Jednakże, jeśli tak jak ja nie posiadasz takiego w domu, jest kilka tańszych opcji. Używam do tego deski do prasowania, która sprawuje się tutaj całkiem nieźle. Inną metodą jest postawienie kilku pudełek lub dużych książek na normalnym biurku i umieszczenie na nich Twojej klawiatury. Pamiętaj tylko o tym, aby się dobrze porozciągać przed ćwiczeniami i spróbować trochę tańczyć podczas sesji. Pamiętaj - nikt nie patrzy, więc baw się, a sprawi to, że na scenie będziesz czuł się dużo bardziej komfortowo.

en: Practice setting up
pl: Ćwicz konfigurację

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.
pl: Większość instrumentów wymaga przygotowania i nastrojenia, zanim będzie można na nich grać. O ile nie jesteś gwiazdą rocka z autobusem pełnym pomocników odpowiadających za sprzęt, to będziesz musiał samodzielnie skonfigurować i podłączyć swój instrument przed imprezą. Często jest to dość stresujący moment i bardzo łatwo wtedy o wystąpienie problemów. Najlepszą metodą na poradzenie sobie z tym jest włączenie procesu ustawiania i podłączania sprzętu do Twoich sesji.

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.
pl: Wskazówka #4 - traktuj ustawianie i podłączanie sprzętu jako bardzo ważną część Twoich ćwiczeń. Na przykład przygotuj sobie pudełko lub torbę, w której możesz trzymać swojego Raspberry Pi, klawiaturę itp. Przed każdą sesją wyjmij wszystkie części, podłącz wszystko i przejdź przez proces uruchomienia aż do momentu, gdy będziesz miał uruchomionego Sonic Pi i będziesz mógł wydawać z niego dźwięki. Kiedy skończysz ćwiczenia, poświęć odpowiednią ilość czasu na ostrożne spakowanie wszystkiego z powrotem do torby. Na początku może Ci to zajmować trochę czasu, ale po praktyce będziesz w stanie przygotować wszystko i spakować z powrotem w niewiarygodnie krótkiej chwili bez konieczności myślenia o tym, co i jak.

en: Experiment Musically
pl: Eksperymentuj Muzycznie

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.
pl: Gdy masz już wszystko podłączone i jesteś gotowy, aby zacząć tworzyć muzykę, możesz na początku zastanowić się nad tym, jak z tym wystartować. Jednym z problemów, który dotyka wielu ludzi, jest to, że czasami mają dobry pomysł na to, jaki rodzaj dźwięków chcieliby zacząć tworzyć, ale są sfrustrowani tym, że nie wiedzą, jak je uzyskać. Niektórzy ludzie nie wiedzą nawet, jakiego rodzaju dźwięki chcieliby tworzyć! Pierwsza rzecz to nie należy się tym przejmować - jest to bardzo popularny problem i zdarza się każdemu muzykowi - nawet jeśli ćwiczą już od wielu lat. Dużo ważniejsze jest tworzenie dźwięków, które Ci się nie podobają, aniżeli nie tworzenie żadnych dźwięków.

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!
pl: Wskazówka #5 - postaraj się poświęcić czas na tworzenie dźwięków i muzyki, której nie lubisz. Spróbuj wykorzystać wolną chwilę na poznawanie nowych dźwięków i pomysłów. Nie przejmuj się, że mogą brzmieć kiepsko, jeśli to nie jest styl, którego szukasz. Kiedy eksperymentujesz, w taki sposób zwiększasz szanse na to, że trafisz przypadkiem na dźwięk lub kombinacje dźwięków, które pokochasz! Nawet jeśli 99% dźwięków, które stworzysz, będzie do kitu, to ten 1% może okazać się riffem lub niezłym intro do Twojego nowego kawałka. Zapomnij o rzeczach, które Ci się nie podobają, a zapamiętaj tylko te części, które Ci leżą. Tworząc muzykę za pomocą kodu, jest to nawet łatwiejsze - wystarczy nacisnąć przycisk zapisz (Save)!

en: Hear the Code
pl: Usłysz Kod

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.
pl: Wskazówka #6 - napisz pewien kawałek kodu w Sonic Pi, ale nie naciskaj przycisku Run. Zamiast tego spróbuj wyobrazić sobie dźwięk, jaki on wyprodukuje. Następnie naciśnij przycisk Run, posłuchaj i zastanów się nad tym, czy miałeś rację, czy nie. Postaraj się to powtarzać, aż stanie się naturalną częścią Twojego procesu kodowania. Kiedy ćwiczę, zazwyczaj mam dobre rozeznanie w tym, jak będzie brzmiał dany kod. Mimo to wciąż zdarza mi się, że od czasu do czasu jestem zaskoczony i wtedy zatrzymuję się oraz spędzam chwilę czasu, aby zrozumieć, dlaczego się myliłem. Za każdym razem, gdy się to wydarzy, uczę się nowych sztuczek, które pozwalają mi na wyrażanie siebie na nowe sposoby.

en: Remove all distractions
pl: Usuń wszelkie rozpraszacze

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.
pl: Dość znanym problemem podczas ćwiczeń jest możliwość rozproszenia się przez inne rzeczy. Ćwiczenie jest bardzo ciężkie i wymaga samodyscypliny niezależnie od gatunku muzycznego, jaki tworzysz - od jazzu poprzez muzykę klasyczną po EDM (ang. Electronic Dance Music - elektroniczna muzyka taneczna). Jeśli borykasz się z tym, żeby zacząć lub zrobić jakiś postęp, to często zbyt łatwo jest przełączyć się na serwis społecznościowy, zacząć grzebać po internecie, itp. Jeśli ustawisz sobie za cel 20 minut ćwiczeń dziennie, bardzo ważne jest, aby spróbować spędzić cały ten czas na byciu tak bardzo produktywnym, jak tylko się da.

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.
pl: Wskazówka #7 - zanim zaczniesz ćwiczyć, postaraj się usunąć wszelkie rzeczy, które Cie rozpraszają. Na przykład odłącz się od internetu, wynieś telefon do innego pokoju i spróbuj ćwiczyć w cichym miejscu, gdzie nikt i nic nie będzie Cię rozpraszać. Spróbuj skupić się na kodowaniu muzyki, a do swoich rozpraszaczy możesz wrócić, kiedy skończysz.

en: Keep a practice diary
pl: Prowadź dziennik ćwiczeń

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!
pl: Kiedy zaczniesz trenować, często zdasz sobie sprawę z tego, iż Twój umysł jest pełen wielu ekscytujących pomysłów - nowych muzycznych ścieżek, dźwięków czekających na wypróbowanie, świeżych funkcji do wpisania itd. Te myśli są na każdym kroku bardzo interesujące, przez co będziesz chciał zboczyć z wybranej ścieżki i je swobodnie wypróbować. Jest to kolejna forma rozproszenia!

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.
pl: Wskazówka #9 - trzymaj dziennik ćwiczeń tuż przy swojej klawiaturze. Kiedy wpadniesz na nowy ekscytujący pomysł, na chwilę przerwij swoje ćwiczenia, szybko zapisz tę ideę, a następnie zapomnij o niej i wróć do swoich ćwiczeń. Później, gdy już zakończysz ćwiczenia, możesz poświęcić odpowiednią ilość czasu, aby przemyśleć i rozwinąć swoje pomysły.

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!
pl: Postaraj się zaplanować sesję, która będzie zawierała tak wiele z tych pomysłów, jak to tylko możliwe. Postaraj się, aby były one tak bardzo fajne i zabawne, ale miej na uwadze to, że część sesji będzie ciężka i będzie sprawiała wrażenie pracy. Jednakże to wszystko będzie tego warte, gdy już uda Ci się stworzyć swój pierwszy kawałek lub będziesz miał za sobą pierwszy publiczny występ. Pamiętaj, trening czyni mistrza!

en: A.17 Sample Stretching
pl: A.17 Rozciąganie Sampli

en: Sample Stretching
pl: Rozciąganie Sampli

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!
pl: Kiedy ludzie odkrywają Sonic Pi, jedną z pierwszych rzeczy, których się uczą, jest to, jak łatwo można z jego pomocą odtwarzać nagrane dźwięki, korzystając z funkcji `sample`. Na przykład możesz zagrać w pętli industrialny bęben, usłyszeć dźwięk chóru, a nawet dźwięk scratch'ującego winyla za pomocą pojedynczej linii kodu. Niezależnie od tego, wiele z tych osób nie zdaje sobie sprawy z tego, że można zmieniać prędkość, z jaką jest odtwarzany dany sampel, aby uzyskać różne bardzo dobre efekty i równocześnie zupełnie nowy poziom kontroli nad swoimi nagranymi dźwiękami. Nie czekaj więc, tylko odpal swoją kopię Sonic Pi i porozciągajmy jakieś sample!

en: Slowing Samples Down
pl: Spowalnianie Sampli

en: To modify the playback rate of a sample we need to use the `rate:` opt:
pl: Aby zmienić tempo odtwarzania sampla, musimy użyć opcji `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`:
pl: Jeśli ustawimy wartość opcji `rate:` jako `1`, to sampel zostanie zagrany z normalną szybkością. Jeśli chcemy zagrać go ponownie z prędkością zmniejszoną o połowę, wystarczy, że dla opcji `rate:` użyjemy wartości `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.
pl: Zauważ, że odciśnie to na nasz dźwięk dwa efekty. Po pierwsze sampel będzie miał niższą wysokość dźwięku, po drugie zagranie go zajmie dwa razy tyle czasu co normalnie (zerknij na pasek boczny, aby uzyskać wyjaśnienie, dlaczego tak się dzieje). Możemy nawet wybierać coraz mniejsze i mniejsze wartości, zbliżając się do `0`, i tak szybkość `rate:` o wartości `0.25` będzie jedną czwartą prędkości, `0.1` będzie jedną dziesiątą prędkości itd. Spróbuj pobawić się z różnymi niskimi wartościami opcji `rate:` i zobacz, czy uda Ci się uzyskać bardzo niskie dudnienie.

en: Speeding Samples Up
pl: Przyśpieszanie Sampli

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`:
pl: Oprócz możliwości sprawiania, aby dźwięk był dłuższy oraz niższy za pomocą niskich wartości tempa, możemy użyć wyższego tempa w celu skrócenia dźwięku i sprawienia, by był wyższy. Tym razem spróbujmy wziąć na warsztat pętlę z bębnem. Najpierw posłuchaj, jak brzmi ten dźwięk na domyślnym tempie równym `1`:

en: Now, let's speed it up a little:
pl: A teraz spróbujmy odrobinę go przyspieszyć:

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!
pl: Ha! Właśnie przeszliśmy na inny gatunek muzyczny - z oldschool'owego techno do jungle. Zauważ, że zmieniła się zarówno wysokość każdego uderzenia bębna, jak i cały rytm uległ przyśpieszeniu. Teraz spróbuj wykorzystać jeszcze wyższe tempo i zobacz, jak wysoką i jak krótką pętlę z bębnem uda Ci się stworzyć. Na przykład, jeśli użyjesz tempa o wartości `100`, pętla zmieni się w kliknięcie!

en: Reverse Gear
pl: Wsteczny Bieg

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:
pl: Teraz jestem pewien, że w tej chwili wielu z Was ma w głowie tę samą rzecz... "A co, jeśli użyjesz minusowej liczby dla tempa?". Ciekawe pytanie! Pomyślmy zatem o tym przez chwilkę. Jeśli nasza wartość `rate:` oznacza prędkość, z którą odtwarzany jest dany sampel, czyli `1` - normalna szybkość, pod `2` kryje się podwójna, `0.5` oznacza tempo mniejsze o połowę, to wartość `-1` spowoduje, iż dźwięk zostanie zagrany od końca! Wypróbujmy to na "snare", lecz rozpoczynając od normalnego tempa:

en: Now, play it backwards:
pl: Świetnie! Wybrany kawałek jest odtwarzany od końca!

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!
pl: Oczywiście możesz zagrać go od końca dwa razy szybciej z wartością `-2` albo dwa razy wolniej za pomocą `-0.5`. Obeznaj się z różnymi minusowymi tempami oraz baw się dobrze! Ten efekt brzmi całkiem zabawnie z samplem `: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?
pl: Jednym z efektów zmiany tempa sampli jest to, iż szybsze wartości oznaczają wyższą wysokość dźwięku i na odwrót - wolniejsze zaś niższą. Słyszysz go prawdopodobnie codziennie w swoim życiu - wtedy, gdy jeździsz na rowerze lub przechodzisz obok służb na sygnale. Im bliżej dźwięku, tym wysokość jest wyższa, im dalej zaś, tym jest niższa. Nazywa się to efektem Dopplera. Dlaczego tak się dzieje?

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.
pl: Rozważmy prosty sygnał dźwiękowy reprezentowany przez falę sinusoidalną. Jeżeli użyjemy oscyloskopu, by rozrysować dźwięk, zobaczymy coś podobnego do Figury A. Dźwięk z wyższą oktawą reprezentuje Figura B, a z niższą - Figura C. Zauważ to, iż fale wyższych nut są bardziej ściśle oraz niższych - bardziej rozłożone.

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.
pl: Sampel sygnału jest niczym innym jak wiele liczb (x, y, współrzędne), które rozrysowane na grafie odrysowują pierwotne krzywe. Spójrz na figurę D, gdzie każde koło reprezentuje współrzędne. By zamienić je ponownie w dźwięk, komputer pracuje przy każdej wartości x i wysyła odpowiednie wartości y do głośników. Magią jest to, iż tempo, nad którym pracuje maszyna poprzez numery x, nie musi być takie same jak tempo, z którym zostały nagrane. Używając innych słów - przestrzeń (reprezentująca ilość czasu) między każdym kołem może zostać rozciągnięta lub ściśnięta. Więc jeśli komputer przechodzi przez wartość x szybciej niż za pomocą oryginalnego tempa, wpłynie to na efekt zgniatania kół ze sobą, czego rezultatem będzie wyżej brzmiący sygnał. To także uczyni go krótszym, poprzez szybszą pracę przez koła. Zostało to pokazane na Figurze 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.
pl: Wreszcie ostatnią rzeczą potrzebną do zrozumienia tego wszystkiego jest matematyk o imieniu Fourier, który udowodnił, że każdy dźwięk to tak naprawdę wiele fal sinusoidalnych połączonych w jedną całość. W związku z tym ściśnięcie i rozciągnięcie każdego nagranego sygnału oznacza wykonanie tej czynności na wielu falach sinusoidalnych - w tym samym czasie i w tej samej formie.

en: Pitch Bending
pl: Funkcja Pitch Bending

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:
pl: Jak widzimy, używanie szybszego tempa powoduje, iż dźwięk będzie miał wyższą wysokość i na odwrót - niższe tempo = niższa wysokość. Bardzo prosta i użyteczna sztuczka dotyczy tego, iż wysokość większa o oktawę jest rezultatem podwójnego tempa i na odwrót - wysokość mniejsza o oktawę jest rezultatem dwa razy mniejszego tempa. Melodyjne sample grane jeden obok drugiego brzmią całkiem fajnie:

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:
pl: Jednakże co w przypadku, gdy po prostu chcemy zmienić tempo tak, aby wysokość zwiększyła się o jeden półton (jedną nutę na pianinie)? Sonic Pi sprawia, iż jest to banalnie proste - wystarczy użyć parametru `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:
pl: Jeśli spojrzysz na logi po prawej stronie, to zauważysz, iż `rpitch:` trójki aktualnie odpowiada tempie o wartości `1.1892` i `rpitch:` siódemki odpowiada tempie o wartości `1.4983`. Wreszcie możemy także łączyć ze sobą parametry `rate:` oraz `rpitch:`:

en: A.18 Sound Design - Additive Synthesis
pl: A.18 Design Dźwięku - Synteza Addytywna

en: Additive Synthesis
pl: Synteza Addytywna

en: Simple Combinations
pl: Proste Kompozycje

en: Let's start with the most basic sound there is - the humble pure-toned sine wave:
pl: Rozpocznijmy więc od najbardziej podstawowego dźwięku, który możesz tutaj znaleźć - prostej czystotonowej fali sinusoidalnej:

en: Now, let's see how this sounds combined with a square wave:
pl: Teraz spójrzmy na brzmienie w połączeniu z falą kwadratową:

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.
pl: Zauważ, jak one się łączą, tworząc całkowicie nowe i bogate dźwięki. Jasne jest dla nas to, iż nie musimy się zatrzymywać na tym etapie - możemy dodać tyle dźwięków, ile tak naprawdę potrzebujemy. Jednak musimy być ostrożni podczas ich łączenia, gdyż to jest tak, jak z łączeniem nowych kolorów - kiedy dodamy ich za dużo, wynikiem będzie brzydki brązowy. Ta sama rzecz dzieje się z dźwiękami - pakowanie za dużej ich liczby do jednego pola spowoduje zamianę w coś niezbyt "zjadliwego".

en: Blending
pl: Mieszanie

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:
pl: Dodajmy coś, aby dźwięk brzmiał trochę jaśniej. Możemy użyć fali trójkątnej z wyższą oktawą (dla tego wysokiego, jasnego dźwięku), ale tylko grając z amplitudą o wartości `0.4`. To tylko dodaje coś ekstra zamiast całkowicie zmienić znaczenie:

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.
pl: Teraz spróbuj stworzyć swoje własne dźwięki poprzez połączenie dwóch lub większej ilości syntezatorów z różnymi oktawami i aplitudami. Także zauważ to, jak możesz się bawić każdymi ustawieniami parametrów syntezatorów, których źródło muzyki jest wcześniej miksowane w większą ilość ich kombinacji.

en: Detuning
pl: Strojenie

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:
pl: Łącząc różne syntezatory, używaliśmy tej samej wysokości lub zmienionej oktawy przez całą naszą drogę. Jak może to zabrzmieć, jeżeli nie będziemy się trzymać tego drugiego parametru, a właśnie wybierzemy troszeczkę wyższą lub niższą nutę? Spróbujmy tego:

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.
pl: Jeśli rozstroimy nasze fale kwadratowe przez 0.7 nuty usłyszymy coś, co nie brzmi zbyt dobrze, a mówiąc poprawnie - otrzymamy 'złą' nutę. Jednakże jeśli przybliżmy się do 0, to dźwięk będzie bardziej i bardziej nieczysty - jak wysokość dźwięku dwóch fal zbliżających się do siebie. Wypróbuj tego! Zmień wartość parametru `detune:` z `0.7` na `0.5` i wsłuchaj się w nowy dźwięk. Skorzystaj z `0.2`, `0.1`, `0.05`, `0`. Za każdym razem, gdy zmieniasz wartość, poświęć chwilę na wysłuchanie i zobacz, czy możesz usłyszeć to, jak dźwięk się zmienia. Zauważ, że niskie rozstrojenie (np. `0.1`) wytwarza naprawdę niezły 'gęsty' dźwięk z innymi wysokościami każdego z nich -
     zmieniającymi się w ciekawy, często zaskakujący sposób.

en: Some of the built-in synths already include a detune option that does exactly this in one synth. Try playing with the `detune:` opt of `:dsaw`, `:dpulse` and `:dtri`.
pl: Niektóre z wbudowanych syntezatorów obsługują już opcję rozstrojenia, przez co można z niej korzystać w jednym z nich. Spróbuj zagrać z parametrem `detune:` - `:dsaw`, `:dpulse` oraz `:dtri`.

en: Amplitude shaping
pl: Kształtowanie Amplitudy

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.
pl: Kolejnym sposobem na tworzenie naszych dźwięków jest użycie innej obwiedni i ustawień dla każdego wyzwalacza syntezatora. Przykładowo pozwoli Ci to na wymyślenie aspektów perkusyjnej muzyki oraz pierścieni na okres czasu.

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.)
pl: W powyższym przykładzie zmiksowałem hałaśliwy, perkusyjny element wraz z trwałym dudnieniem w tle. Zostało to osiągnięte poprzez użycie dwóch głośnych syntezatorów: jednego ze środkowymi wartościami odcięcia (`90` i `100` i krótkim czasem wyzwolenia) oraz drugiego z niską wartością odcięcia (co powoduje, że dźwięk jest mniej chrupki, a także i bardziej burczący).

en: A.19 Sound Design - Subtractive Synthesis
pl: A.19 Design Dźwięku - Synteza Subtraktywna

en: Subtractive Synthesis
pl: Synteza Subtraktywna

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.
pl: Oto drugi z serii artykułów poświęconych designowi dźwięku w Sonic Pi! W poprzednim miesiącu rzuciliśmy okiem na syntezę addytywną, dzięki której odkryliśmy, jak łatwe jest granie wielu dźwięków w tym samym czasie do stworzenia różnorakich kombinacji. Na przykład mogliśmy połączyć różnie brzmiące syntezatory, a nawet te same z nich w różnych wysokościach dźwięku, by zbudować nowy, bardziej złożony dźwięk z prostych składników. W tym miesiącu zajmiemy się świeżą techniką zwaną zwyczajnie *syntezą subtraktywną*, która bierze złożone dźwięki oraz usuwa niektóre części z nich do utworzenia czegoś całkowicie nowego. Ten sposób jest powiązany z dźwiękiem analogowych syntezatorów z lat 60. oraz 70., ale również z wczesnym renesansem, idąc poprzez popularnych standardy takie jak 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.
pl: Pomimo iż to brzmi jak szczególnie skomplikowana i zaawansowana technika, Sonic Pi sprawia, że jest to zaskakująco proste oraz łatwe - zanurkujmy więc!

en: Complex Source Signal
pl: Złożone Źródło Sygnału

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:
pl: Dźwięk, który ma pracować dobrze z syntezą subtraktywną, zazwyczaj musi być dość bogaty i ciekawy. To nie oznacza jednak, że potrzebujemy czegoś ogromnie złożonego - w rzeczywistości standardowe fale `:square` lub `:saw` w zupełności wystarczą:

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`:
pl: Zauważ to, iż dźwięk jest całkiem intrygujący oraz zawiera wiele różnych częstotliwości powyżej `:e2` (drugi klawisz E na fortepianie), które dodaje się, by utworzyć barwę dźwięku. Jeżeli to na razie nie ma dla Ciebie większego sensu, spróbuj porównać go z `: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.
pl: Ze względu na to, iż syntezator `:beep` jest po prostu falą sinusoidalną, usłyszysz o wiele czystszy ton tylko na `:e2` oraz żaden z tych chrupiących/brzęczących dźwięków, z którymi miałeś do czynienia w `:saw`. To jest brzęczenie i odmiana z czystej fali sinusoidalnej, gdzie możemy grać, kiedy używamy syntezy subtraktywnej.

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:
pl: Gdy mamy już nasze pierwotne źródło sygnału, następnym krokiem będzie przejście przez filtr pewnego typu, który zmodyfikuje dźwięk za pomocą usunięcia lub zredukowania jakiejś części. Jeden z najczęstszych filtrów używanych w syntezie subtraktywnej nazywany jest filtrem dolnoprzepustowym. Pozwala on przejść wszystkim niższym częściom dźwięku, lecz redukując przy tym także wyższe. Sonic Pi posiada potężny, ale prosty w obsłudze system FX, który zawiera filtr dolnoprzepustowy o nazwie `:lpf`. Zabawmy się:

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.
pl: Jeśli wsłuchasz się uważnie, usłyszysz, jak parę z tych brzęczących i chrupiących dźwięków zostało usuniętych. W rzeczywistości wszystkie częstotliwości dźwięku powyżej nuty `100` zostały zredukowane lub usunięte i tylko te niższe są w nim obecne. Spróbuj zamienić parametr `cutoff:` do niższych nut, przykładowo `70`, a następnie `50`, by je porównać.

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.
pl: Oczywiście parametr `:lpf` nie jest jedynym filtrem, którego możesz użyć do kontrolowania źródłem sygnału. Kolejnym równie ważnym FX jest filtr górnoprzepustowy określony jako `:hpf`. Robi dokładnie to, co `:lpf`, tylko odwrotnie - pozwala on przejść wszystkim wyższym częściom dźwięku, redukując lub usuwając niższe.

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.
pl: Zauważ, jak dźwięk brzmi teraz bardziej brzęcząco i chrupiąco, a to wszystko z tego powodu, iż niskie częstotliwości zostały usunięte. Pobaw się z wartością cutoff i zobacz, jak niskie wartości pozwalają istnieć oryginalnym częściom basu źródła sygnału oraz jak wysokie wartości zwiększają brzękliwość oraz ciszę.

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.
pl: Filtr dolnoprzepustowy jest ważną częścią narzędzi każdej syntezy subtraktywnej - warto zatem zanurzyć się głębiej, by zobaczyć, jak on działa. Ten diagram pokazuje tę samą falę dźwięku (syntezator `:prophet`) z różnymi wartościami filtrowania. U góry, w sekcji A, pokazuje falę dźwiękową bez filtrowania. Zauważ, że fala ta jest bardzo punktowa i zawiera wiele ostrych krawędzi. To właśnie one produkują tę chrupiącą/brzęczącą część dźwięku. Sekcja B pokazuje wszystkie filtry dolnoprzepustowe w akcji - fala jest mniej punktowa i bardziej zaokrąglona niż powyżej. Oznacza to, iż jeśli dźwięk posiada mniejszą częstotliwość, daje on bardziej ładne oraz zaokrąglone linie. Sekcja C zawiera filtr dolnoprzepustowy z dość niską wartością funkcji cutoff - im większe częstotliwości zostały usunięte z sygnału, tym skutkuje to bardziej łagodną, zaokrągloną falą. Na końcu rzuć okiem na wielkość formy fali reprezentującej amplitudę, zmniejszającą się podczas przechodzenia od A do C. Synteza subtraktywna działa poprzez usuwanie części sygnału, które oznaczają, iż ogólna amplituda jest redukowana wraz z zwiększaniem się liczby filtrowania.

en: Filter Modulation
pl: Modulacja Filtra

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:
pl: Do tej pory tworzyliśmy dość statyczne dźwięki. Używając innych słów - nie zmieniał się on podczas całej drogi jej trwania. Często możesz chcieć trochę ruchu w dźwięku, aby nadać barwie trochę życia. Aby to osiągnąć, możesz skorzystać z filtra modulacji - zmieniając jego ustawienia poprzez czas. Na szczęście Sonic Pi oferuje potężne narzędzie służące do manipulowania parametrami FX. Przykładowo możesz ustawić czas ślizgu dla każdego modulowanego parametru, aby zdefiniować, jak długo powinien on zająć z obecnej wartości do docelowej:

en: Let's take a quick look at what's going on here. Firstly we start an `:lpf` FX block as normal with an initial `cutoff:` of a low `50`. However, the first line also finishes with the strange `|fx|` at the end. This is an optional part of the `with_fx` syntax which allows you to directly name and control the running FX synth. Line 2 does exactly this and controls the FX to set the `cutoff_slide:` opt to 3 and the new target `cutoff:` to be `130`. The FX will now start sliding the `cutoff:` opt's value from `50` to `130` over a period of 3 beats. Finally we also trigger a source signal synth so we can hear the effect of the modulated low pass filter.
pl: Rzućmy okiem na to, co się tutaj dzieje. Początkowo rozpoczynamy funkcją `:lpf` jako normalną z początkowym `cutoff:` o bardzo niskim parametrze `20`. Jednakże pierwsza linia kończy się także dziwnym `|fx|` na końcu. Jest to opcjonalna część składni `with_fx`, która umożliwia nam na bezpośrednie nazwanie i kontrolowanie syntezatora FX. Linia 2 robi to oraz kontroluje FX, by ustawić parametr `cutoff_slide:` na 4 i nowy obiekt docelowy `cutoff:` na `130`. FX rozpocznie prześlizg `cutoff:` z wartości `50` na `130` przez okres 3 uderzeń. Na końcu wyzwalamy sygnał źródłowy syntezatora, przez co możemy usłyszeć efekt modulowanego filtra dolnoprzepustowego.

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).
pl: Zakończmy, projektując funkcję, która zagra nowy dźwięk utworzony za pomocą syntezy substraktywnej. Sprawdź, czy możesz ogarnąć to, co się tutaj dzieje - a dla zaawansowanych Czytelników Sonic Pi - zobacz, czy możesz sprawdzić, dlaczego owinąłem wszystko w środku połączenia do `at` (proszę wysłać rozwiązania do @samaaron na Twitterze w języku angielskim).

en: Getting started is as simple as:
pl: Zaczęcie jest proste jak:

en: B Essential Knowledge
pl: B Wiedza Podstawowa

en: Essential Knowledge
pl: Niezbędna Wiedza

en: This section will cover some very useful - in fact *essential* - knowledge for getting the most out of your Sonic Pi experience.
pl: Ten rozdział obejmie trochę bardzo przydatnej - w zasadzie *niezbędnej* - wiedzy, która pozwoli Ci na wyciągnięcie maksimum możliwości z 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.
pl: Pokażemy tutaj, jak wykorzystać wiele skrótów klawiszowych, które są dostępne, w jaki sposób możesz dzielić się swoją pracą, a także parę przydatnych sztuczek dotyczących występów z Sonic Pi.

en: B.1 Using Shortcuts
pl: B.1 Korzystanie ze Skrótów Klawiszowych

en: Using Shortcuts
pl: Korzystanie ze Skrótów Klawiszowych

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.
pl: Sonic Pi jest zarówno instrumentem muzycznym, jak i środowiskiem programistycznym. Skróty klawiszowe mogą więc sprawić, że granie z Sonic Pi będzie dużo bardziej *wydajne i naturalne* - zwłaszcza wtedy, gdy będziesz występować na żywo przed publicznością.

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!
pl: Wiele funkcji Sonic Pi może być kontrolowanych za pomocą klawiatury. Gdy posiądziesz już więcej wprawy w pracy i występach z Sonic Pi, na pewno zaczniesz używać skrótów coraz częściej i częściej. *Potrafię pisać na klawiaturze bezwzrokowo* (Tobie też polecam się tego nauczyć) i czuję frustrację za każdym razem, kiedy tylko muszę sięgnąć po myszkę, ponieważ to spowalnia moją pracę. W związku z powyższym używam wszystkich tych skrótów w kółko!

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.
pl: Ponadto, jeśli nauczysz się skrótów, zyskasz umiejętność korzystania z Twojej klawiatury dużo bardziej efektywnie i zaczniesz kodować na żywo niczym profesjonalista w bardzo krótkim czasie.

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.
pl: Jednakże *nie próbuj i nie ucz się ich wszystkich na raz* - postaraj się sprawdzić i zapamiętać tylko te, których używasz najczęściej. Dopiero potem postaraj się regularnie dodawać i ćwiczyć kolejne.

en: Consistency across Platforms
pl: Spójność pomiędzy Platformami

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.
pl: Wyobraź sobie, że uczysz się gry na klarnecie. Zapewne oczekiwałbyś, że wszystkie z nich będą zapewniały podobną kontrole i palcowanie. Jeśli nie, to potrzebowałbyś sporo czasu za każdym razem, gdy przesiadałbyś się pomiędzy różnymi klarnetami i tak naprawdę byłbyś wtedy ograniczony do korzystania tylko z jednego wybranego modelu.

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.
pl: Na nieszczęście trzy podstawowe systemy operacyjne (Linux, Mac OS X i Windows) posiadają swoje własne standardy dla domyślnych akcji takich jak np. kopiuj-wklej. Sonic Pi postara się honorować wszystkie te standardy. Jednakże *priorytet został położony na spójność pomiędzy różnymi platformami*, na których działa Sonic Pi i jest on ważniejszy, niż próby zapewnienia zgodności z poszczególnymi platformami. Oznacza to, że jeśli nauczysz się skrótów klawiszowych, gdy będziesz grał na Sonic Pi na Raspberry Pi, to będziesz mógł przenieść się na komputer marki Apple z systemem Mac OS lub peceta z zainstalowanym Windowsem i dalej czuć się jak w domu.

en: Control and Meta
pl: Klawisze Control i 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.
pl: Częścią dotyczącą pojęcia spójności jest nazewnictwo skrótów. W Sonic Pi używamy nazw *Control* i *Meta* dla odniesienia się do dwóch podstawowych klawiszy używanych w kombinacjach skrótów. Na wszystkich platformach klawisz *Control* odnosi się do tego samego przycisku na klawiaturze. Jednakże w systemach Linux i Windows, klawisz *Meta* oznacza klawisz *Alt*, podczas gdy w systemie Mac OS klawisz *Meta* oznacza klawisz *Command*. Dla zachowania spójności będziemy używali terminu *Meta* - jedyne, co musisz zapamiętać, to w jaki sposób zmapować ten termin na odpowiedni klawisz dla Twojego systemu operacyjnego.

en: Abbreviations
pl: Skróty

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."
pl: Aby dalsze instrukcje były proste i czytelne, będziemy używać skrótu *C-* dla klawisza *Control* plus innego klawisza oraz *M-* dla *Meta* plus inny klawisz. Na przykład, jeśli skrót klawiszowy wymaga, abyś nacisnął razem klawisze *Meta* i *r*, zapiszemy to jako `M-r`. Symbol *-* oznacza po prostu "w tym samym czasie co."

en: The following are some of the shortcuts I find most useful.
pl: Przedstawię Ci kilka skrótów klawiszowych, które są dla mnie najbardziej przydatne.

en: Stopping and starting
pl: Zatrzymywanie i uruchamianie

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`.
pl: Zamiast za każdym razem sięgać po myszkę, aby uruchomić Twój kod, możesz po prostu nacisnąć skrót `M-r`. Podobnie, aby zatrzymać uruchomiony kod, możesz nacisnąć `M-s`.

en: Navigation
pl: Nawigacja

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.
pl: Bez skrótów umożliwiających nawigację czuję się naprawdę zagubiony. W związku z tym bardzo zalecam Ci spędzić tyle czasu, ile potrzeba, aby się ich nauczyć. Działają one również bardzo dobrze, kiedy już nauczysz się pisać na klawiaturze bezwzrokowo, jako że używają standardowych liter i nie wymagają od Ciebie, abyś sięgał ręką do myszki lub klawiszy ze strzałkami na Twojej klawiaturze.

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`.
pl: Możesz przenieść się do początku linii, naciskając skrót `C-a`, aby przenieść się na koniec linii, naciśnij `C-e`, aby przenieść się o 1 linię w górę, naciśnij `C-p`, jedną linię w dół `C-n`, aby przesunąć się o jeden znak do przodu, użyj `C-f`, jeden znak do tyłu `C-b`. Możesz nawet usunąć wszystkie znaki od miejsca, w którym aktualnie znajduje się kursor aż do końca linii, używając skrótu `C-k`.

en: Tidy Code
pl: Elegancki Kod

en: To auto-align your code simply press `M-m`.
pl: Aby automatycznie wyrównać Twój kod, wystarczy, że naciśniesz `M-m`.

en: Help System
pl: System Pomocy

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!
pl: Aby pokazać i ukryć system pomocy, możesz nacisnąć przycisk `M-i`. Jednakże dużo bardziej przydatnym skrótem, który warto znać, jest `C-i` - pozwala on na wyszukanie w systemie pomocy słowa, na którym aktualnie znajduje się kursor i wyświetlenie tego, jeśli uda mu się znaleźć cokolwiek. Pomoc błyskawiczna!

en: B.2 Shortcut Cheatsheet
pl: B.2 Ściągawka Skrótów Klawiszowych

en: Shortcut Cheatsheet
pl: Ściągawka Skrótów Klawiszowych

en: Conventions
pl: Konwencje

en: In this list, we use the following conventions (where *Meta* is one of *Alt* on Windows/Linux or *Cmd* on Mac):
pl: W poniższej liście używamy następujących konwencji (gdzie *Meta* oznacza klawisz *Alt* w systemach Windows/Linux oraz *Cmd* w systemie Mac OS):

en: `C-a` means hold the *Control* key then press the *a* key whilst holding them both at the same time, then releasing.
pl: `C-a` oznacza: przytrzymaj klawisz *Control*, następnie naciśnij klawisz *a* tak, żeby przez chwilę oba były jednocześnie naciśnięte, po czym je puść.

en: `M-r` means hold the *Meta* key and then press the *r* key whilst holding them both at the same time, then releasing.
pl: `M-r` oznacza: przytrzymaj klawisz *Meta* i następnie naciśnij klawisz *r* tak, żeby przez chwilę oba były naciśnięte jednocześnie, po czym je puść.

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.
pl: `S-M-z` oznacza: naciśnij i przytrzymaj klawisz *Shift*, następnie naciśnij i przytrzymaj klawisz *Meta* i na końcu dołóż do tej kombinacji w tym samym czasie klawisz *z*, następnie puść wszystkie klawisze.

en: `C-M-f` means hold the *Control* key, then press *Meta* key, finally the *f* key all at the same time, then releasing.
pl: `C-M-f` oznacza: naciśnij i przytrzymaj klawisz *Control*, potem naciśnij i przytrzymaj klawisz *Meta*, po czym na końcu naciśnij do tego jeszcze klawisz *f* i puść wszystkie klawisze.

en: Main Application Manipulation
pl: Podstawowe Manipulowanie Aplikacją

en: `M-r` - Run code
pl: `M-r` - Uruchom kod (przycisk Run)

en: `M-s` - Stop code
pl: `M-s` - Zatrzymaj kod (przycisk Stop)

en: `M-i` - Toggle Help System
pl: `M-i` - Otwórz/Zamknij System Pomocy

en: `M-p` - Toggle Preferences
pl: `M-p` - Otwórz/Zamknij Ustawienia

en: `M-{` - Switch buffer to the left
pl: `M-{` - Przejdź do buforu po lewej stronie

en: `M-}` - Switch buffer to the right
pl: `M-}` - Przejdź do buforu po prawej stronie

en: `M-+` - Increase text size of current buffer
pl: `M-+` - Zwiększ rozmiar czcionki w aktualnym buforze

en: `M--` - Decrease text size of current buffer
pl: `M--` - Zmniejsz rozmiar czczionki w aktualnym buforze

en: Selection/Copy/Paste
pl: Zaznaczanie/Kopiowanie/Wklejanie

en: `M-a` - Select all
pl: `M-a` - Zaznacz wszystko

en: `M-c` - Copy selection to paste buffer
pl: `M-c` - Skopiuj zaznaczony obszar, aby móc go wkleić do bufora w innym miejscu

en: `M-]` - Copy selection to paste buffer
pl: `M-]` - Skopiuj zaznaczony obszar, aby móc go wkleić do bufora w innym miejscu

en: `M-x` - Cut selection to paste buffer
pl: `M-x` - Wytnij zaznaczony obszar, aby móc wkleić go do bufora w innym miejscu

en: `C-]` - Cut selection to paste buffer
pl: `C-]` - Wytnij zaznaczony obszar, aby móc wkleić go do bufora w innym miejscu

en: `C-k` - Cut to the end of the line
pl: `C-k` - Wytnij tekst od aktualnej pozycji kursora do końca linii

en: `M-v` - Paste from paste buffer to editor
pl: `M-v` - Wklej zawartość schowka do aktualnego bufora

en: `C-y` - Paste from paste buffer to editor
pl: `C-y` - Wklej zawartość schowka do aktualnego bufora

en: `C-SPACE` - Set mark. Navigation will now manipulate highlighted region. Use `C-g` to escape.
pl: `C-SPACE` - Ustaw punkt zaznaczenia. Następnie nawiguj po tekście, aby podświetlić tekst do zaznaczenia. Użyj `C-g` aby wyłączyć/usunąć zaznaczenie.

en: Text Manipulation
pl: Manipulacja Tekstu

en: `M-m` - Align all text
pl: `M-m` - Wyrównaj cały tekst w buforze

en: `Tab` - Align current line or selection (or select autocompletion)
pl: `Tab` - Popraw wyrównianie/zaznaczenie aktualnej liczby lub pokaż podpowiedzi

en: `C-l` - Centre editor
pl: `C-l` - Wyśrodkuj edytor

en: `M-/` - Comment/Uncomment current line or selection
pl: `M-/` - Dodaj lub usuń znak komentarza (#) na początku aktualnie wybranej (lub wybranych) linii kodu

en: `C-t` - Transpose/swap characters
pl: `C-t` - Transponuj/zamień znaki

en: `M-u` - Convert next word (or selection) to upper case.
pl: `M-u` - Konwertuj następne słowo (lub zaznaczenie) do wielkich liter.

en: `M-l` - Convert next word (or selection) to lower case.
pl: `M-l` - Konwertuj następne słowo (lub zaznaczenie) do małych liter.

en: `C-a` - Move to beginning of line
pl: `C-a` - Przenieś kursor do początku linii

en: `C-e` - Move to end of line
pl: `C-e` - Przenieś kursor na koniec linii

en: `C-p` - Move to previous line
pl: `C-p` - Przenieś kursor do poprzedniej linii

en: `C-n` - Move to next line
pl: `C-n` - Przenieś kursor do następnej linii

en: `C-f` - Move forward one character
pl: `C-f` - Przenieś kursor o jeden znak do przodu (w prawo)

en: `C-b` - Move backward one character
pl: `C-b` - Przenieś kursor o jeden znak do tyłu (w lewo)

en: `M-f` - Move forward one word
pl: `M-f` - Przenieś kursor do przodu (w prawo) o jedno słowo

en: `M-b` - Move backward one word
pl: `M-b` - Przenieś kursor do tyłu (w lewo) o jedno słowo

en: `C-M-n` - Move line or selection down
pl: `C-M-n` - Przenieś aktualną linie lub zaznaczenie w dół

en: `C-M-p` - Move line or selection up
pl: `C-M-p` - Przenieś aktualną linię lub zaznaczenie do góry

en: `S-M-u` - Move up 10 lines
pl: `S-M-u` - Przenieś się do góry o 10 linii

en: `S-M-d` - Move down 10 lines
pl: `S-M-d` - Przenieś się w dół o 10 linii

en: `M-<` - Move to beginning of buffer
pl: `M-<` - Przenieś się na początek bufora

en: `M->` - Move to end of buffer
pl: `M->` - Przenieś się na koniec bufora

en: Deletion
pl: Usuwanie

en: `C-h` - Delete previous character
pl: `C-h` - Usuń poprzedni znak

en: `C-d` - Delete next character
pl: `C-d` - Usuń kolejny znak

en: Advanced Editor Features
pl: Zaawansowane Funkcje Edytora

en: `C-i` - Show docs for word under cursor
pl: `C-i` - Pokaż dokumentację dla słowa, na którym znajduje się aktualnie kursor

en: `M-z` - Undo
pl: `M-z` - Wstecz (cofnij zmianę)

en: `S-M-z` - Redo
pl: `S-M-z` - Redo (powtórz zmianę)

en: `C-g` - Escape
pl: `C-g` - Ucieczka (anulowanie)

en: `S-M-f` - Toggle fullscreen mode
pl: `S-M-f` - Otwórz/Zamknij tryb pełnoekranowy

en: `S-M-b` - Toggle visibility of buttons
pl: `S-M-b` - Pokaż/Schowaj przyciski

en: `S-M-l` - Toggle visibility of log
pl: `S-M-l` - Pokaż/Schowaj panel logowania

en: `S-M-m` - Toggle between light/dark modes
pl: `S-M-m` - Przełączanie pomiędzy trybem jasnym i ciemnym

en: `S-M-s` - Save contents of buffer to a file
pl: `S-M-s` - Zapisz zawartość bufora do pliku

en: `S-M-o` - Load contents of buffer from a file
pl: `S-M-o` - Wczytaj zawartość z wybranego pliku do bufora

en: B.3 Sharing
pl: B.3 Udostępnianie

en: Sharing
pl: Udostępnianie

en: Sonic Pi is all about sharing and learning with each other.
pl: W Sonic Pi chodzi przede wszystkim o udostępnianie i uczenie się od siebie nawzajem.

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*.
pl: Gdy już nauczyłeś się, w jaki sposób kodować muzykę, udostępnienie Twojej kompozycji jest tak łatwe, jak wysłanie wiadomości email, która będzie zawierać Twój kod. Proszę, abyś *dzielił* się swoim kodem z innymi, dzięki temu będą oni mogli *uczyć* się z Twojej pracy, a nawet używać kawałków Twojej muzyki do tworzenia nowych *mash-up'ów*.

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.
pl: Jeśli nie jesteś pewien tego, w jaki sposób możesz najlepiej dzielić się Twoimi dokonaniami z innymi, to polecam Ci wrzucanie Twojego kodu na stronę [GitHub](https://github.com), natomiast gotową muzykę na stronę [SoundCloud](https://soundcloud.com). W ten sposób bardzo łatwo uda Ci się zyskać znaczną publiczność.

en: Code -> GitHub
pl: Kod -> 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.
pl: [GitHub](https://github.com) to strona umożliwiająca dzielenie się i pracę nad kodem. Jest ona używana zarówno przez profesjonalnych programistów, jak i artystów w celu udostępniania i współpracy z kodem. Najprostszą metodą, aby podzielić się nowym kawałkiem kodu (nawet tym niedokończonym), jest stworzenie [Gist'a](https://gist.github.com) [Gist](https://gist.github.com) - to bardzo prosty sposób na przesłanie Twojego kodu w bardzo prosty sposób, tak żeby inni mogli go zobaczyć, skopiować i dzielić się nim.

en: Audio -> SoundCloud
pl: Dźwięki -> 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.
pl: Innym bardzo ważnym sposobem na dzielenie się Twoją pracą, jest nagranie pliku audio i przesłanie go na stronę [SoundCloud](https://soundcloud.com). Gdy już wrzucisz tam swój kawałek, inni użytkownicy tej strony będą mogli komentować i rozmawiać o Twoim dziele. Zalecam również zamieszczenie w opisie linku do [Gist'a](https://gist.github.com) zawierającego kod źródłowy tego utworu.

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).
pl: Aby nagrać Twoją pracę, wystarczy że naciśniesz przycisk `Rec` znajdujący się w panelu z przyciskami, a nagrywanie rozpocznie się natychmiast. Naciśnij więc przycisk `Run`, aby uruchomić Twój kod, jeśli przypadkiem jeszcze tego nie zrobiłeś. Kiedy skończysz nagranie, naciśnij ponownie migający przycisk `Rec`, a zostaniesz poproszony o podanie nazwy pliku, pod jaką ma zostać zapisane Twoje nagranie. Będzie miało ono rozszerzenie WAV, który może być bardzo łatwo zedytowany i skonwertowany do formatu MP3 przez jeden z wielu darmowych programów (spróbuj na przykład aplikacji Audacity).

en: Hope
pl: Nadzieja

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.
pl: Zachęcam Cię, abyś dzielił się swoją pracą i naprawdę wierzę w to, że wszyscy razem będziemy się uczyć od siebie nowych sztuczek i trików w Sonic Pi. Jestem bardzo podekscytowany tym, co będziesz chciał mi pokazać.

en: B.4 Performing
pl: B.4 Występy Na Scenie

en: Performing
pl: Występy Na Scenie

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.
pl: Jednym z najbardziej ekscytujących aspektów Sonic Pi jest fakt, że pozwala Ci na używanie kodu jako *instrumentu muzycznego*. Oznacza to, że pisanie kodu na żywo może być teraz uznawane jako nowa metoda prezentowania muzyki na scenie.

en: We call this *Live Coding*.
pl: Nazywamy to *Kodowaniem Na Żywo*.

en: Show Your Screen
pl: Pokaż Swój Ekran

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.
pl: Kiedy kodujesz na żywo, polecam Ci, abyś *pokazał* swojej publiczności *Twój ekran*. W przeciwnym przypadku będzie to tak jak granie na gitarze, ale chowając swoje palce i struny. Kiedy ćwiczę w domu, używam Raspberry Pi i małego mini projektora na ścianie w moim salonie. Możesz użyć Twojego telewizora albo jednego z projektorów, które są dostępne w Twojej szkole lub pracy, aby dać występ. Spróbuj, to świetna zabawa!

en: Form a Band
pl: Stwórz Zespół

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).
pl: Kodowanie na żywo nie jest całkowicie nowe - mała grupa ludzi robi to już od kilku lat, zazwyczaj korzystając z systemów na zamówienie, które zbudowali dla siebie sami. Świetnym miejscem, do którego możesz się udać i dowiedzieć się więcej na temat innych osób kodujących na żywo oraz ich systemów, jest [TOPLAP](http://toplap.org).

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.
pl: Innym świetnym źródłem dla odkrywania świata kodowania na żywo jest [Algorave](http://algorave.com). Możesz tutaj znaleźć wszystko, co dotyczy wszystkich aspektów kodowania na żywo, które są związane z tworzeniem muzyki w klubach.
