Translation components API.

See the Weblate's Web API documentation for detailed description of the API.

GET /api/translations/sonic-pi/tutorial/gl/changes/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "count": 43,
    "next": null,
    "previous": null,
    "results": [
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": null,
            "timestamp": "2024-04-29T19:05:56.711101+02:00",
            "action": 17,
            "target": "",
            "old": "",
            "details": {},
            "id": 88474368,
            "action_name": "Changes committed",
            "url": "https://hosted.weblate.org/api/changes/88474368/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2022-08-30T13:46:22.676154+02:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {
                "reason": "content changed",
                "filename": "etc/doc/lang/sonic-pi-tutorial-gl.po"
            },
            "id": 32812962,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/32812962/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/81955817/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-08-30T13:46:22.676030+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "99 Conclusions",
                "old_state": -1
            },
            "id": 32812961,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/32812961/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/81955816/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-08-30T13:46:22.675896+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Remember to prepend a colon `:` to the name of your function when you define it. Function names should also start with a lower case letter, so use `:foo` rather than `:Foo`.",
                "old_state": -1
            },
            "id": 32812960,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/32812960/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2022-05-30T15:43:48.440836+02:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {
                "reason": "content changed",
                "filename": "etc/doc/lang/sonic-pi-tutorial-gl.po"
            },
            "id": 25895513,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/25895513/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991637/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440745+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "This is just a very basic taster of what's possible when you use filters to modify and change a source sound. Try playing with Sonic Pi's many built-in FX to see what fun sounds you can design. If your sound feels too static, remember you can start modulating the options to create some movement.",
                "old_state": -1
            },
            "id": 25895512,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895512/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991636/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440654+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Let's combine all these techniques to see if we can use additive synthesis to re-create a basic bell sound. I've broken this example into four sections. Firstly we have the 'hit' section which is the initial onset part of the bell sound - so uses a short envelope (e.g. a `release:` of around `0.1`). Next we have the long ringing section in which I'm using the pure sound of the sine wave. Notice that I'm often increasing the note by roughly `12` and `24` which are the number of notes in one and two octaves. I have also thrown in a couple of low sine waves to give the sound some bass and depth. Finally, I used `define` to wrap my code in a function which I can then use to play a melody. Try playing your own melody and also messing around with the contents of the `:bell` function until you create your own fun sound to play with!",
                "old_state": -1
            },
            "id": 25895511,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895511/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991635/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440566+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Let's take a look at a simple piece which combines these ideas. Copy it into an empty Sonic Pi buffer, hit play, listen to it for a while and then use it as a starting point for your own piece. See how much fun it is to manipulate the playback rate of samples. As an added exercise try recording your own sounds and play around with the rate to see what wild sounds you can make.",
                "old_state": -1
            },
            "id": 25895510,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895510/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991634/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440479+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "This allows us to take any sample and create new rhythmical possibilities which is a lot of fun. However, one thing to be careful about is to make sure that the tempo of the sample matches the current BPM in Sonic Pi otherwise the slicing will sound totally off. For example, try swapping `:loop_mika` with the `loop_amen` sample to hear how bad this can sound when the tempos don't align.",
                "old_state": -1
            },
            "id": 25895509,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895509/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991633/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440390+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Way back in episode 3 of this Sonic Pi series we looked at how to loop, stretch and filter one of the most famous drum breaks of all time - the Amen Break. In this tutorial we're going to take this one step further and learn how to slice it up, shuffle the slices and glue it back together in a completely new order. If that sounds a bit wild to you, don't worry, it will all become clear and you'll soon master a powerful new tool for your live coded sets.",
                "old_state": -1
            },
            "id": 25895508,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895508/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991632/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440303+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "**Deprecation Warning** *Apologies but this article was written back when Minecraft Pi Edition was still part of Raspberry Pi OS and Sonic Pi had built-in support to control it with code. Unfortunately this is no longer the case and the minecraft specific code (`mc_*` functions) are no longer available in Sonic Pi. However, this article is left here as a memory of what was once possible.*",
                "old_state": -1
            },
            "id": 25895507,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895507/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991631/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440216+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Finally, here's a piece I composed using the ideas in this tutorial. Copy it into an empty buffer, listen for a while and then start live coding your own changes. See what wild sounds you can make with it! See you next time...",
                "old_state": -1
            },
            "id": 25895506,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895506/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991630/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440128+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "For each standard envelope opt, there's a `cutoff_` equivalent opt in the `:tb303` synth. So, to change the cutoff attack time we can use the `cutoff_attack:` opt. Copy the code above into an empty buffer and hit Run. You'll hear a strange sound warble in and out. Now start to play. Try changing the `cutoff_attack:` time to `1` and then `0.5`. Now try `8`.",
                "old_state": -1
            },
            "id": 25895505,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895505/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991629/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.440036+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Another opt worth playing with is `res:`. This controls the level of resonance of the filter. A high resonance is characteristic of acid bass sounds. We currently have our `res:` set to `0.8`. Try cranking it up to `0.85`, then `0.9`, and finally `0.95`. You might find that a cutoff such as `110` or higher will make the differences easier to hear. Finally go wild and dial in `0.999` for some insane sounds. At a `res` this high, you're hearing the cutoff filter resonate so much it starts to make sounds of its own!",
                "old_state": -1
            },
            "id": 25895504,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895504/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991628/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439924+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Interestingly, Roland never intended for the TB-303 to be used in dance music. It was originally created as a practice aid for guitarists. They imagined that people would program them to play bass lines to jam along to. Unfortunately there were a number of problems: they were a little fiddly to program, didn't sound particularly good as a bass-guitar replacement and were pretty expensive to buy. Deciding to cut their losses, Roland stopped making them after 10,000 units were sold and after a number of years sitting on guitarist's shelves, they soon could be found in the windows of second hand shops. These lonely discarded TB-303s were waiting to be discovered by a new generation of experimenters who started using them in ways that Roland didn't imagine to create wild new sounds. Acid House was born.",
                "old_state": -1
            },
            "id": 25895503,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895503/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991627/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439805+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Now, here's the fun part. Whilst the loop is still live, change the `30` in the `use_bpm 30` line to `50`. Woah, everything just got faster yet *kept in time*! Try going faster - up to 80, to 120, now go wild and punch in 200!",
                "old_state": -1
            },
            "id": 25895502,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895502/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991626/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439720+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Here, we have two `live_loop`s, one looping quickly making beats and another looping slowly making a wild bass sound.",
                "old_state": -1
            },
            "id": 25895501,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895501/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991625/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439630+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "There are 4 core ingredients to a `live_loop`. The first is its name. Our `live_loop` above is called `:beats`. You're free to call your `live_loop` anything you want. Go wild. Be creative. I often use names that communicate something about the music they're making to the audience. The second ingredient is the `do` word which marks where the `live_loop` starts. The third is the `end` word which marks where the `live_loop` finishes, and finally there is the body of the `live_loop` which describes what the loop is going to repeat - that's the bit between the `do` and `end`. In this case we're repeatedly playing a bass drum sample and waiting for half a beat. This produces a nice regular bass beat. Go ahead, copy it into an empty Sonic Pi buffer and hit run. Boom, Boom, Boom!.",
                "old_state": -1
            },
            "id": 25895500,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895500/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991624/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439542+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "The laser beams sliced through the wafts of smoke as the subwoofer pumped bass deep into the bodies of the crowd. The atmosphere was ripe with a heady mix of synths and dancing. However something wasn't quite right in this nightclub. Projected in bright colours above the DJ booth was futuristic text, moving, dancing, flashing. This wasn't fancy visuals, it was merely a projection of Sonic Pi running on a Raspberry Pi. The occupant of the DJ booth wasn't spinning disks, they wrote, edited and evaluated code. Live. This is Live Coding.",
                "old_state": -1
            },
            "id": 25895499,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895499/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991623/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439436+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Now, try increasing that feedback to 1 to hear some fun sounds! Read the docs for full details on all the many opts available to you.",
                "old_state": -1
            },
            "id": 25895498,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895498/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991622/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439303+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "If you run the code above, you'll notice that Sonic Pi is sending itself an OSC message! This is because we set the IP address to the current machine and the port to the default OSC in port. This is essentially the same as posting a letter to yourself - the OSC packet is created, leaves Sonic Pi, gets to the network stack of the operating system which then routes the packet back to Sonic Pi and then it's received as a standard OSC message and is visible in the cue logger as the incoming message `/osc:127.0.0.1:4560/hello/world`. (Notice how Sonic Pi automatically prefixes all incoming OSC messages with `/osc` and then the hostname and port of the sender.)",
                "old_state": -1
            },
            "id": 25895497,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895497/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991621/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439169+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "For security reasons, by default Sonic Pi does not let remote machines send it OSC messages. However, you can enable support for remote machines in Preferences->IO->Networked OSC->Allow OSC from other computers. Once you've enabled this, you can receive OSC messages from any computer on your network. Typically the sending machine will need to know your IP address (a unique identifier for your computer on your network - kind of like a phone number or an email address). You can discover the IP address of your computer by looking at the IO section of the preferences pane. (If your machine happens to have more than one IP address, hovering the mouse over the listed address will pop up with a list of all known addresses).",
                "old_state": -1
            },
            "id": 25895496,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895496/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991620/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.439039+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "When calling `sync` or `get` you are free to combine matchers in any order you see fit to powerfully match any Time State event created by `cue` or `set`. Let's look at a far-fetched example:",
                "old_state": -1
            },
            "id": 25895495,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895495/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991619/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438902+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Sonic Pi's solution to the problem of easily working with global variables in a deterministic way is through a novel system it calls Time State. This might sound complex and difficult (in fact, in the UK, programming with multiple threads and shared memory is typically a university level subject). However, as you'll see, just like playing your first note, *Sonic Pi makes it incredibly simple to share state across threads* whilst still keeping your programs *thread-safe and deterministic*.",
                "old_state": -1
            },
            "id": 25895494,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895494/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991618/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438738+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Now go wild and add FX everywhere for some amazing new sounds!",
                "old_state": -1
            },
            "id": 25895493,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895493/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991617/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438581+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "We may use very deep nestings for a huge range of results. However, be warned, the FX can use a lot of resources and when you nest them you're effectively running multiple FX simultaneously. So be sparing with your use of FX especially on low powered platforms such as the Raspberry Pi.",
                "old_state": -1
            },
            "id": 25895492,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895492/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991616/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438447+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "This is called FX chaining. Sonic Pi supports exactly this. Additionally, each pedal often has dials and sliders to allow you to control how much distortion, reverb, echo etc. to apply. Sonic Pi also supports this kind of control. Finally, imagine a guitarist jamming along whilst someone else changes and plays with the controls of their FX pedals. Sonic Pi also supports this - but instead of needing someone else to control things for you, that's where the computer steps in.",
                "old_state": -1
            },
            "id": 25895491,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895491/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991615/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438314+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "If all of this sounds a bit complicated, don't worry. Once you play around with it a little, it will all become quite clear. Before you do though, a simple analogy is that of guitar FX pedals. There are many kinds of FX pedals you can buy. Some add reverb, others distort etc. A guitarist will plug their guitar into one FX pedal - i.e. distortion -, then take another cable and connect (chain) a reverb pedal. The output of the reverb pedal can then be plugged into the amplifier:",
                "old_state": -1
            },
            "id": 25895490,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895490/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991614/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438185+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Woah! It plays it *backwards*! Now try playing with lots of different samples at different rates. Try very fast rates. Try really slow rates. See what interesting sounds you can produce.",
                "old_state": -1
            },
            "id": 25895489,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895489/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991613/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.438054+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Opts have two major parts, their name (the name of the control) and their value (the value you want to set the control at). For example, you might have an opt called `cheese:` and want to set it with a value of `1`.",
                "old_state": -1
            },
            "id": 25895488,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895488/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991612/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.437924+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Now go *wild* and have fun making your own tunes.",
                "old_state": -1
            },
            "id": 25895487,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895487/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991611/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.437790+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "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`.",
                "old_state": -1
            },
            "id": 25895486,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895486/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991610/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.437646+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "Woah, fun! I'm sure you could keep doing that all day. But wait, before you lose yourself in an infinite stream of beeps, try changing the number:",
                "old_state": -1
            },
            "id": 25895485,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895485/?format=api"
        },
        {
            "unit": "https://hosted.weblate.org/api/units/76991609/?format=api",
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2022-05-30T15:43:48.437412+02:00",
            "action": 59,
            "target": "",
            "old": "",
            "details": {
                "state": 0,
                "source": "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.",
                "old_state": -1
            },
            "id": 25895484,
            "action_name": "String updated in the repository",
            "url": "https://hosted.weblate.org/api/changes/25895484/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2022-05-30T14:53:47.103259+02:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {
                "reason": "check forced",
                "filename": "etc/doc/lang/sonic-pi-tutorial-gl.po"
            },
            "id": 25893647,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/25893647/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2020-10-13T20:26:06.934454+02:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 7807649,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/7807649/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2020-02-17T22:58:24+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 5511753,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/5511753/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2020-02-09T15:22:06+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 5450755,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/5450755/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2020-02-05T16:04:23+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 5430749,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/5430749/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2020-02-02T14:25:04+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 5415276,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/5415276/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "author": "https://hosted.weblate.org/api/users/samaaron/?format=api",
            "timestamp": "2020-01-23T22:19:48+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 5361764,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/5361764/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2017-12-12T15:00:07+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 2319522,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/2319522/?format=api"
        },
        {
            "unit": null,
            "component": "https://hosted.weblate.org/api/components/sonic-pi/tutorial/?format=api",
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/gl/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2017-12-12T10:42:52+01:00",
            "action": 0,
            "target": "",
            "old": "",
            "details": {},
            "id": 2318589,
            "action_name": "Resource updated",
            "url": "https://hosted.weblate.org/api/changes/2318589/?format=api"
        }
    ]
}