Click to download

Sample List

Parameter range: [, ]


So this is a sound experiment/toy that takes audio files you provide and throws them into a blender to create shifting, nightmarish sound collages. It essentially works by randomly placing emitters—looping chunks of the samples—into a hallway and then moving back and forth down the hallway, giving you constantly-changing combinations of sounds.

    Help >

    1. Load one or more samples by either dragging them into the xkk2[9d area or clicking the "Show Sample List" button in the upper right corner and then the "Add Samples" button in the next dialog.
    2. Edit one or more of the tracks by clicking on one of the tabs on the lefthand side, selecting a sample from the popup menu to be used for the emitters in that track, and hitting "Save." (I might suggest "(random).")
    3. Select one of the automatic movement programs from the "Automation" menu on the righthand side. (I might suggest "start and stop.")
    4. Hit the "Start Playback" button in the bottom right and listen to the horrible monstrosity you've wrought!

    Loading Samples

    There are two ways to load samples: you can either drag audio files into the xkk2[9d area, or you can click the "Add Samples" button in the Sample List dialog, which is accessible by clicking the "Show Sample List" button in the upper right corner.

    xkk2[9d will load whatever kind of audio files that your web browser supports; perhaps consult this chart on Wikipedia for more information. If you're not sure about a file, you can just try loading it and seeing if it works!

    There's no hard limit on the amount of samples you can load, but if you have too many loaded at any one time, your browser might run out of memory and either refresh the page or crash. You probably don't want that to happen.

    Managing Samples

    You can browse through all the samples that are currently loaded by selecting one from the popup menu or using the ← and → buttons. You can also delete samples from here, either one at a time or everything at once.

    If playback is currently going, you won't be able to delete any samples that are in use until you stop playback. If you have any tracks set to pick samples randomly, every sample will be considered "in use" and you won't be able to delete anything.

    xkk2[9d generates audio by randomly placing emitters—infinitely looping chunks of the samples you've loaded—into ten different tracks. You can change the sample assigned to each track and the parameters used to create and place emitters in that track. To edit a track, click on one of the tabs on the lefthand side of the visualizer to open up the edit window.

    The "Sample" popup menu contains every sample you've loaded, as well as two special options: "(none)" to disable all audio on that track and "(random)" to randomly pick a sample for every emitter.

    The "Copy" button will copy the current sample and parameter values, which can then be pasted with the "Paste" button into another track.

    Note that you can't change track data while playback is going, though you can still view it.


    Each parameter has two different ranges associated with it, a near range and a far range, as well as a far distance. If an emitter is created at the starting point in the track (position 0), it will randomly choose a value for the parameter from the near range. If the emitter's distance from the origin is greater than or equal to the far distance, its value will be randomly chosen from the far range. If the distance is somewhere between, the value will be randomly chosen from a range that's linearly interpolated between the near range and far range.

    These are all the parameters:

    Loop Length

    • This parameter defines the length of the chunk of the sample that an emitter will cut out and loop. If the chosen loop length is greater than the length of the sample, the entire sample will be used.
    • Minimum value:
    • Maximum value:

    Playback Rate

    • This parameter defines the speed at which the sample is played, affecting both tempo and pitch. Values below 1 will slow the sample down, and values greater than 1 will speed it up.
    • Minimum value: x
    • Maximum value: x

    Emitter Probability

    • This parameter defines the probability that an emitter will be created at a given spot.
    • Special note: if you edit this parameter, you'll probably want to make sure that the near min = the near max and the far min = the far max, because probability ranges are not particularly meaningful. When xkk2[9d decides whether to create an emitter, it first calculates the probability and then flips a coin with that probability. So if this parameter is a range, the probabilities used will be random and inconsistent, which may not be the behavior you're expecting.
    • Minimum value: 0 (0%)
    • Maximum value: 1 (100%)

    Emitter Length

    • This parameter defines the length in units (pixels) that an emitter will be. A longer emitter will remain within the audio window for longer.
    • Minimum value:
    • Maximum value:

    Emitter Spacing

    • This parameter defines the distance in units (pixels) between the places that a track will try to place an emitter.
    • Minimum value:
    • Maximum value:

    After you've edited some tracks, hit the "Start Playback" button in the bottom right corner to start making some noises.

    The visualizer will change to show your current position and all of the emitters within hearing range. The checkbox on a track's edit tab will enable or disable all emitters on that track. You can also view more information about a specific emitter by clicking on its bubble in the visualizer.

    To entirely too much precision, the dialog shows the start and end points of the chunk in the source sample, how far into the loop the sample is initially started when you hit play, and the playback rate.


    Listening to the same couple of emitters forever will get old real fast, so you'll probably want to move the tracks around at some point.

    You can manually adjust the "Speed" slider at any time to scroll to the right (increasing position) or left (decreasing position) at various speeds. You can also have xkk2[9d control the movement for you with some automatic programs in the "Automation" menu that will change the speed at a fixed time interval:

    • Linear increasing: the speed will increase by a fixed n.
    • Start and stop: the speed will alternate between 0 and a random number in the range [0, n].
    • Monotonic random: the speed will change to a random number in the range [0, n].
    • Fully random: the speed will change to a random number in the range [-n, n].

    The value of n is controlled by the "Intensity" menu; a higher intensity will result in a higher n. The "Change" menu controls how frequently the speed will change. The "Increasing" checkbox changes the direction of movement for the linear, start and stop, and monotonic random movement programs; if unchecked, movement will be leftward (decreasing) instead of rightward.

    xkk2[9d uses a seed string to create emitters and move on its own; if you use the same seed and same settings, you'll get more or less the same audio every time. By default it'll randomly create a new seed every time you hit play, but you can also manually type in anything you want as a seed.

    For emitters: if you use the same seed, have the same samples loaded, and configure a track in exactly the same way, xkk2[9d will place the same emitters on that track in the same places every time you run it. This means that if you go to a specific position at a specific point in time, you'll hear the same audio every time.

    For automatic movement: if you use the same seed, use the same automation settings, and start at the same speed, xkk2[9d will make the same movement changes at roughly the same points in time. However, the points at which it'll update emitter positions and the movement speed are determined by the framerate and when the browser decides to redraw, so there will be (hopefully minute and imperceptible) differences in every run.

    🚨 NOTE: This feature is not available in your web browser, sorry. I wish it was! If you want xkk2[9d to directly record its audio, you'll have to use Firefox or something else.

    If you check the "Record" checkbox in the bottom right hand corner before starting playback, xkk2[9d will record all the audio it produces on that run. This includes changes in the audio as you enable/disable tracks or select different movement programs.

    After you stop playback, you'll get a dialog where you can preview the recording and save it.

    I didn't put in a limit to how long it'll record, so it'll just keep going until your browser decides you've used enough memory and stops the party. You probably don't want that to happen, so maybe just be careful you don't leave it recording for hours or something.

    File Formats

    To record the audio, xkk2[9d uses a JavaScript API that's limited in the amount of file formats it can write to in current browser implementations. Here's a list of formats it'll try to make, in order, as well as what a few web browsers will end up choosing:

    1. WAV
    2. Opus (Ogg) -- Firefox
    3. Opus (WebM) -- Chrome and Chromium browsers (Edge, Opera, etc.)

    Maybe someday the API will be less experimental and I'll be able to output audio in a more accessible format!

    If you have a normal U.S. English keyboard, set your input layout to JIS kana (Japanese), and type xkk2[9d, the resulting text you'll get is さののぶよし, or Nobuyoshi Sano. Sano is a game composer I'm fond of; most relevantly to this project, he was the sound director and one of the composers of Drakengard for the PlayStation 2, the music of which is superficially similar to the kinds of sounds this produces:

    I don't have an intended pronunciation for the name, so feel free to say it however you like.

    Almost all of this thing was made by me, CHz, except for the seedrandom library by David Bau. The source is available on Bitbucket, if you feel like crying for some reason.

    I don't know that I actually need to explicitly say this, but just in case I do: I make absolutely no legal claim on anything you make with this. As long as you have the right to use the samples in the first place, feel free to use the output in whatever way you want. Though if you do something cool with it, I'd appreciate it if you link back here and show me what you did!