Translation components API.

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

GET /api/translations/sonic-pi/tutorial/id/units/?format=api&page=41
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "count": 2023,
    "next": null,
    "previous": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/units/?format=api&page=40",
    "results": [
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -3661966415157447375,
            "content_hash": -3661966415157447375,
            "location": "06.1-Adding-FX.md:146",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 710,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 52,
            "source_unit": "https://hosted.weblate.org/api/units/76991306/?format=api",
            "priority": 100,
            "id": 76991704,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=4d2e14f285213531",
            "url": "https://hosted.weblate.org/api/units/76991704/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:04.935496+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "source": [
                "Now go wild and add FX everywhere for some amazing new sounds!"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 4306405450712306791,
            "content_hash": 4306405450712306791,
            "location": "06.1-Adding-FX.md:164",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 718,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 12,
            "source_unit": "https://hosted.weblate.org/api/units/76991308/?format=api",
            "priority": 100,
            "id": 76991705,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=bbc36cf0ec835467",
            "url": "https://hosted.weblate.org/api/units/76991705/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:04.965953+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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*."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 1525913199135953465,
            "content_hash": 1525913199135953465,
            "location": "10-State.md:16",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1001,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 78,
            "source_unit": "https://hosted.weblate.org/api/units/76991310/?format=api",
            "priority": 100,
            "id": 76991706,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=952d21f850941239",
            "url": "https://hosted.weblate.org/api/units/76991706/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:05.695434+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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:"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -4136014358425508797,
            "content_hash": -4136014358425508797,
            "location": "10.3-Pattern-Matching.md:114",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1093,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 35,
            "source_unit": "https://hosted.weblate.org/api/units/76991312/?format=api",
            "priority": 100,
            "id": 76991707,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=4699ecdac421e443",
            "url": "https://hosted.weblate.org/api/units/76991707/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:05.954505+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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)."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 4387699967319906617,
            "content_hash": 4387699967319906617,
            "location": "12.1-Receiving-OSC.md:60",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1176,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 124,
            "source_unit": "https://hosted.weblate.org/api/units/76991314/?format=api",
            "priority": 100,
            "id": 76991708,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=bce43ddf8d189939",
            "url": "https://hosted.weblate.org/api/units/76991708/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.204040+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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.)"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -2985846110664018837,
            "content_hash": -2985846110664018837,
            "location": "12.2-Sending-OSC.md:15",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1182,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 118,
            "source_unit": "https://hosted.weblate.org/api/units/76991316/?format=api",
            "priority": 100,
            "id": 76991709,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=569024c833e3b46b",
            "url": "https://hosted.weblate.org/api/units/76991709/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.220385+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -4224916118908921192,
            "content_hash": -4224916118908921192,
            "location": "A.01-tips.md:106",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1289,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 26,
            "source_unit": "https://hosted.weblate.org/api/units/76991318/?format=api",
            "priority": 100,
            "id": 76991710,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=455e152ca69c9a98",
            "url": "https://hosted.weblate.org/api/units/76991710/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.522337+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -4246432807626378226,
            "content_hash": -4246432807626378226,
            "location": "A.02-live-coding.md:5",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1302,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 92,
            "source_unit": "https://hosted.weblate.org/api/units/76991320/?format=api",
            "priority": 100,
            "id": 76991711,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=4511a3dc2add740e",
            "url": "https://hosted.weblate.org/api/units/76991711/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.552221+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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!."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -7037466761977873659,
            "content_hash": -7037466761977873659,
            "location": "A.02-live-coding.md:39",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1308,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 138,
            "source_unit": "https://hosted.weblate.org/api/units/76991322/?format=api",
            "priority": 100,
            "id": 76991712,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=1e55e5441db0bb05",
            "url": "https://hosted.weblate.org/api/units/76991712/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.568751+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "source": [
                "Here, we have two `live_loop`s, one looping quickly making beats and another looping slowly making a wild bass sound."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 643764968586422270,
            "content_hash": 643764968586422270,
            "location": "A.02-live-coding.md:121",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1320,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 19,
            "source_unit": "https://hosted.weblate.org/api/units/76991324/?format=api",
            "priority": 100,
            "id": 76991713,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=88ef1cd3ff6f27fe",
            "url": "https://hosted.weblate.org/api/units/76991713/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.596891+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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!"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 1521586608725242503,
            "content_hash": 1521586608725242503,
            "location": "A.03-coded-beats.md:97",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1346,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 46,
            "source_unit": "https://hosted.weblate.org/api/units/76991326/?format=api",
            "priority": 100,
            "id": 76991714,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=951dc2f57c0f3287",
            "url": "https://hosted.weblate.org/api/units/76991714/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.673184+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -7867591061277442200,
            "content_hash": -7867591061277442200,
            "location": "A.05-acid-bass.md:12",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1390,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 136,
            "source_unit": "https://hosted.weblate.org/api/units/76991328/?format=api",
            "priority": 100,
            "id": 76991715,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=12d0b39d3284ff68",
            "url": "https://hosted.weblate.org/api/units/76991715/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.820269+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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!"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -4627800604493713804,
            "content_hash": -4627800604493713804,
            "location": "A.05-acid-bass.md:91",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1406,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 94,
            "source_unit": "https://hosted.weblate.org/api/units/76991330/?format=api",
            "priority": 100,
            "id": 76991716,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=3fc6bfde8dd06e74",
            "url": "https://hosted.weblate.org/api/units/76991716/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.866050+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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`."
            ],
            "previous_source": "",
            "target": [
                "`:tb303`"
            ],
            "id_hash": 3221726636649060033,
            "content_hash": 3221726636649060033,
            "location": "A.05-acid-bass.md:138",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 10,
            "fuzzy": true,
            "translated": false,
            "approved": false,
            "position": 1414,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": true,
            "num_words": 64,
            "source_unit": "https://hosted.weblate.org/api/units/76991332/?format=api",
            "priority": 100,
            "id": 76991717,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=acb5df4e7ce196c1",
            "url": "https://hosted.weblate.org/api/units/76991717/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.892610+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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..."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 7954393199251507239,
            "content_hash": 7954393199251507239,
            "location": "A.05-acid-bass.md:149",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1416,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 43,
            "source_unit": "https://hosted.weblate.org/api/units/76991334/?format=api",
            "priority": 100,
            "id": 76991718,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=ee63ae78752b4827",
            "url": "https://hosted.weblate.org/api/units/76991718/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.903305+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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.*"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -5012038191127158945,
            "content_hash": -5012038191127158945,
            "location": "A.06-minecraft.md:6, A.08-minecraft-vj.md:8",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1420,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 66,
            "source_unit": "https://hosted.weblate.org/api/units/76991336/?format=api",
            "priority": 100,
            "id": 76991719,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=3a71a9d1f12c9f5f",
            "url": "https://hosted.weblate.org/api/units/76991719/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:06.922069+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -7702100723650735876,
            "content_hash": -7702100723650735876,
            "location": "A.12-sample-slicing.md:5",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1639,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 92,
            "source_unit": "https://hosted.weblate.org/api/units/76991338/?format=api",
            "priority": 100,
            "id": 76991720,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=151ca4330684d0fc",
            "url": "https://hosted.weblate.org/api/units/76991720/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:07.578050+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -8973129282977998699,
            "content_hash": -8973129282977998699,
            "location": "A.14-amplitude-modulation.md:169",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1723,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 70,
            "source_unit": "https://hosted.weblate.org/api/units/76991340/?format=api",
            "priority": 100,
            "id": 76991721,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=03790a757470d895",
            "url": "https://hosted.weblate.org/api/units/76991721/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:07.825372+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 4559014492148229474,
            "content_hash": 4559014492148229474,
            "location": "A.17-sample-stretching.md:155",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1820,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 76,
            "source_unit": "https://hosted.weblate.org/api/units/76991342/?format=api",
            "priority": 100,
            "id": 76991722,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=bf44df86a25a6562",
            "url": "https://hosted.weblate.org/api/units/76991722/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:09.108626+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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!"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 6425441300093287728,
            "content_hash": 6425441300093287728,
            "location": "A.18-additive-synthesis.md:117",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1844,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 160,
            "source_unit": "https://hosted.weblate.org/api/units/76991344/?format=api",
            "priority": 100,
            "id": 76991723,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=d92bc0d1a92f3d30",
            "url": "https://hosted.weblate.org/api/units/76991723/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:09.174875+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -2652860947510657972,
            "content_hash": -2652860947510657972,
            "location": "A.19-subtractive-synthesis.md:140",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1869,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 54,
            "source_unit": "https://hosted.weblate.org/api/units/76991346/?format=api",
            "priority": 100,
            "id": 76991724,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=5b2f2506111efc4c",
            "url": "https://hosted.weblate.org/api/units/76991724/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-05-30T15:44:09.255573+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "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`."
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": 4382752361437847492,
            "content_hash": 4382752361437847492,
            "location": "05.5-Functions.md:27",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 595,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 32,
            "source_unit": "https://hosted.weblate.org/api/units/81955794/?format=api",
            "priority": 100,
            "id": 81955822,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=bcd2aa0d4a01dfc4",
            "url": "https://hosted.weblate.org/api/units/81955822/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-08-30T13:46:26.567775+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        },
        {
            "translation": "https://hosted.weblate.org/api/translations/sonic-pi/tutorial/id/?format=api",
            "source": [
                "99 Conclusions"
            ],
            "previous_source": "",
            "target": [
                ""
            ],
            "id_hash": -5476310078453752260,
            "content_hash": -5476310078453752260,
            "location": "99-Conclusions.md:1",
            "context": "",
            "note": "",
            "flags": "",
            "labels": [],
            "state": 0,
            "fuzzy": false,
            "translated": false,
            "approved": false,
            "position": 1253,
            "has_suggestion": false,
            "has_comment": false,
            "has_failing_check": false,
            "num_words": 2,
            "source_unit": "https://hosted.weblate.org/api/units/81955796/?format=api",
            "priority": 100,
            "id": 81955823,
            "web_url": "https://hosted.weblate.org/translate/sonic-pi/tutorial/id/?checksum=34003cff95df5e3c",
            "url": "https://hosted.weblate.org/api/units/81955823/?format=api",
            "explanation": "",
            "extra_flags": "",
            "pending": false,
            "timestamp": "2022-08-30T13:46:26.746880+02:00",
            "last_updated": "2023-05-23T12:28:47.723593+02:00"
        }
    ]
}