DigiChain - app for making sample chains

DigiChain is a web app made to make the creation of sample chains as easy as possible for use on the Digitakt / Digitakt II (and any other sampler that can slice-up samples).

Create drum kits for the OP-1 Field / OP-Z / OP-XY / Octatrack.

Import OP-1 Field / OP-Z / Octatrack / M8 chains and convert between formats.

Combine and convert chains between spaced / sliced all from the list.

Automatic creation of .ot slice data files when exporting as 44.1k 16/24 bit.

Embeds cue markers for M8 slicer.


Direct Link →

https://digichain.brianbar.net/


Application mirror hosting on itch →


Please do leave a review on Product Hunt, it helps a lot! →


Please make sure you are running the latest browser version available. Minimum versions are:

  • Chrome / Edge 114.x.x (or other mainline Chromium based browser)
  • Safari 16.3 / WebKit-7616.1.11.3
  • Firefox 115.x (not fully tested, tentative support)

Other browsers have no verified support, and I have no plans (or spare time) to test, verify, and fix things for those browsers.


Recommended minimum OS:

  • Windows 11
  • Linux using Kernel 5.10+
  • macOS Ventura
  • iOS / iPadOS 16.7
  • Android 12

Recommended minimum hardware:

  • Intel 8th gen
  • Any Apple Silicon
  • Raspberry Pi 4
  • Qualcomm Snapdragon 820
  • Apple A9
  • 4Gb RAM

If you have an issue or feature request, please do log it on the github repo, as I might miss it in this thread. GitHub · Where software is built Thanks!

digichain-v140_release

OT Exports
digichain-v140_release_ot_export2

OP-1 Field Kits
digichain-v140_release_op1f_export


v1.5.0

  • Show loading overlay until async sample processing has completed to prevent multiple calls to renderList before the list is ready.
  • Style tweaks to support rendering within itch.io windows.
  • Enhanced waveform rendering accuracy and performance (thanks to boourns · GitHub for the pull request).
  • Dither exports option when outputting 8/16/24 bit wav or 16 bit aif files.
  • Added user feedback on sample load processing.
  • Improved responsiveness of list with large numbers of samples loaded.
  • Reduced file processing load times.
  • Added a welcome screen with some usage guidance, tips, and link out to documentation page.
  • Show the length in seconds of the sample being edited on the editor.
  • Support importing samples and slices from Renoise Instrument files (.xrni) in addition to sample data from Renoise Project files (.xrnx).
  • Mini-waveform renderer no longer builds waveform cache when skip render is enabled.
  • Prevent default event bubbling on keydown events for handled keyboard shortcuts, stops ‘funk’ noise on macOS for valid shortcuts.
  • Improved creation of OP-1 Field / OP-Z chains, nudging end to zero crossing per slice if one is present in the last 256 samples.
  • OP-1 Field / OP-Z exports now default to one-shot play mode.
  • Shift + click on Pad With Zero selected action allows entering a custom value to pad the sample(s) with in seconds.
  • Config option, treat slice data in files as distinct files on join - defaults to YES, when set to YES, if a file contains slice data or has had slice data configured those slices will be represented as distinct files when creating new chains that include those selected slices; when set to NO, the per-file slices will be discarded when joined to new chains.
  • Moved about pop-up into unified audio config, settings, about panel.
  • Supporting the import and export of digichain session files.
  • Using a custom dialog instead of the browser built-ins to handle user prompts/confirmations.
  • Moved browser based alert messaging into a toast style notification that displays at the top center of the active window or dialog.
  • OP Export UI for creating drum kits for OP-1 Field and OP-XY via a drag and drop key layout.
  • OP Export supports combining samples on Left / Right / Center to more easily create A/B kits for use on the Field.
  • Chains / Spaced Chains buttons now do not both display, they are toggled via the new Chain Type toggle icon.
  • Rendering created chains to the top of the list instead of out to a downloaded zip file (the Shift + Click button action), is now toggled from an icon.
  • XY preset rendering toggle icon, when enabled, chains are created as XY Preset folders in the output zip, max 24 slices and samples longer than 20 seconds will be automatically truncated.
  • Invert phase selected action.
  • Flip L/R selected action, switched the left and right channels around.
  • Editor waveform height adjustment control (height retained as setting).
  • Crop keyboard shortcuts in the editor, Shift+Click to crop to a new sample, staying in the current sample; Shift+Ctrl+Click to crop to a new sample and open that new sample in the editor.
  • Bug fixes:
    • Delayed list rendering bug when removing all selected samples.
    • When a waveform is too short to render a valid mini-waveform, the renderer replaced the parent dom node, causing a dom tree layout issue, this is now fixed.
    • Sanitize name selected action.
    • When restore last used audio config is set to off, the text label of the audio config indicator was blank.
    • Where canvas element replacement threw an error when slicing to samples from the slice panel with skip render waveforms enabled.
    • Toggling the max-seconds per chain option de-selected all samples.
    • XY common configuration no longer sets the seconds time limit per chain to on.
    • OP Export renders at the target sample rate for XY presets and 44.1kHz regardless of the target sample rate for OP-1 Field kits.
    • Play-head was not displayed when playing the highlighted sample in the list using the P key keyboard shortcut.
    • Only positive buffer values were being removed in the condense action.
    • Edit panel not consistently closing when using the Escape key.
    • Smoothing on fuzz selected action caused peak spikes on some sample material.
    • Setting DT / DT II / XY / M8 / OT did not toggle the spaced / xy settings and icons when using the common configurations options.
    • Slice panel waveform did not show when no slices were set (regression fix from edit panel renderer changes).

v1.4.16
  • Nudge Crossings selected action, nudges all zero crossings off from zero.
  • Pad with Zero selected action, adds a zero sample to the beginning and end of each file.
  • Shift selected action, moves the sample start position over 50%.
  • Fixed bug where resampling the list when changing the working sample-rate caused the loop point to bet set on .ot slice metadata.
  • Support for reading slice data from the Sonicware LoFi-12 XT custom header data.
  • Added common configurations for Sonicware LoFi-12 XT (12/24 kHz target sample rate).
  • Added common configurations for Teenage Engineering EP-133 / EP-1320 mono/stereo.
  • Fixed some browser specific UI element positioning quirks.
  • Added de-serialize from mono L/R back to a stereo sample selected action (halves a mono sample and puts the first half on the left channel, second half on the right).
  • Prevent slicing by transient assigning an ot meta loop point flag.
  • Added button to set a custom slice count on the slices panel.
  • Change default chain names to not contain _ or chars.
  • Turn off embed slice data config option by default.
  • Use Cue markers as preferred slice data storage within the wav file data.
  • Minor wav encode bug, the cue chunk size property should be 8 bytes less than the total chunk byte length, not 4.
  • Turn on/off .ot file export options when choosing the ot common configuration on the audio config panel.
  • Add OP-XY to common configurations, as this uses wav files as the primary file type.
  • Sanitize Names selected action to format file names to align with the guidelines for successful MTP transfer to Teenage Engineering OP-XY filesystem.

v1.4.15
  • Amplitude threshold condense selected action, enter an upper and lower amplitude value (between 0 and 1), the sample will be modified to only include amplitudes within the given range, gaps between the audio is removed condensing the sample size.
  • Ctrl + Click on Filename column header to sort the list by numeric filename content only.
  • Improved drop file order consistency.
  • Allow dropping mp3 files.
  • If sample has slice information, the slices will be shown on the waveform when the slice panel opens.
  • Support multi-touch for selecting/deselecting samples.

Full Change Log


More info → DigiChain v1.3.0 – brianbar.net



If you want to take a look at how things are progressing, you can use the development branch https://digichain-latest.brianbar.net/ - this may be broken at any point, but will be more frequently updated as I work on the project.

166 Likes

Also, while this is a web app, it all runs locally - the samples don’t leave your computer as all processing is done in the browser in JavaScript.

12 Likes

This is so great - thank you.
I don’t have a digitakt, but there is a similar functionality on the m8 and this is great for that.
It looks so clean and very easy to understand.

Thank you!

2 Likes

thank you.

1 Like

This looks amazing. Fantastic work! And a massive shoutout for sharing with your peers!

2 Likes

this is amazing. thanks a million Brian :partying_face::space_invader:

2 Likes

thanks brian, this is great!

2 Likes

Great! Thank you!

1 Like

As a massive fan of OctaChainer, it’s cool to see this is a web app as it means I don’t need a program installed to make slice chains, and I could theoretically use it on my phone/tablet.

1 Like

At the moment, this is focused on the Digitakt, so all output is to 48k/16bit mono. no longer the case.

If you load up a stereo file, it will by default use the left channel, with the option per sample to change that between left, right or summed. edit: Stereo samples are now supported as stereo exports when the session is set to a stereo out option.

And while it does work on Android, the waveform view isn’t rendered correctly, and the up/down sample list position buttons are weird, and the UI needs some changes to scale better at lower screen sizes (all of which I’m taking a look at this evening after work, as I want to be able to use it on my Samsung phone). These issues are resolved.

I did take a peek at the OctaChainer .ot file struct on that projects github source, it looks straightforward enough to port to JavaScript. I do also have an OT, so once I’m happy with the DT features I may add some OT specific stuff here too, but as there is already OctaChainer for that use-case, I figured focusing on DT stuff is more useful. - edit: Creation of .ot meta files can be toggled in the menu for 44.1khz 16/24bit audio exports.

10 Likes

And surprisingly, it works as it does on the desktop on my iPad, the only issue I see on iOS, is the sample length sort isn’t accurate, which I will fix later issues resolved.

10 Likes

Awesome work!
I truly believe we’re still just scratching the surface with web tech.
I had been working on a now abandoned Song mode/arranger for digis that ran from a web app, but I’m no web programmer so didnt get far.
Did you write this in js or compile to wasm via something like rust?

2 Likes

Thanks! This is all vanilla JavaScript with HTML/CSS for the UI and HTML Canvas for the waveform view.

I had downloaded all the MD sound-packs from the Elektron shop on Sunday, and was having a hard time converting those files to .wav to load onto my Digitakt, so I had a dig into how to convert those files, found some C++ on GitHub where someone else had already figured out how to parse the binary, I re-wrote that in JavaScript and then learned some stuff about the web audio API’s (I’ve only ever done audio programming with CSound before).

Then it was a case of, “wouldn’t it be neat to join these samples into a chain for the DT slice grid?”, and so it grew from there.

I’ve been working on it most of Sunday, then every evening this week after work.

I made a MIDI spreader last month (https://brian3kb.github.io/midi-spreader/) using web-midi to spread notes over multiple channels, I plan to add some form of MIDI support to this once the existing bugs and audio processing bits I have in mind are done.

12 Likes

Is this so you can use Digitakt as an 8 voice poly synth? (that is if all 8 tracks have the same Sound assigned)

Yep - I was too cheap to buy an RK-003 cable, so I made that instead lol

2 Likes

haha, me too. But I previously used a Mosaic script on iPad, so I was actually too lazy and cheap :rofl:

1 Like

can you quickly explain the midi spreader? sorry my mind is a bit blown.

1 Like

Sure - before you open it, make sure you have your MIDI devices powered on and connected.

Choose the channel to receive MIDI from (all devices in the input list will have their input on this channel go out to the selected output channels to the chosen output device only).

Click the boxes to choose the channels to send out MIDI on (you can’t choose the input channel for obvious reasons!).

Choose the output device in the MIDI output list, this is the only device that will receive the spread notes.

When you play notes, the input device will highlight, and the output channels will highlight to show things are working:

4 Likes

Thanks so much, really appreciate the information and the access to the utilities. As per the conditions of use, are you step recording the note spread into the dt sequencer?

It’s just forwarding notes from one channel to the others, it doesn’t know about the device receiving the MIDI (other than its ID and name).

Live recording works great on my Syntakt/Digitakt to record MIDI at the same time on multiple tracks, I’m not sure how that works in step-record mode tbh (and my Elektron gear isn’t to hand at the moment to test it out).

1 Like