DigiChain - web app for making sample chains

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.

11 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

Thanks, that makes more sense. I assume as long as you’re recording something with quantization on latency doesn’t have any impact on the sequencer data. Appreciate you taking the time to answer questions.

1 Like

v1.0.1 live with the following bugfixes:

  • Sorting error on length sort.
  • Re-order button glitching.
  • Shift+Up/Down, Shift+Duplicate error.
  • Waveform display on Android.
  • Show version number on bottom of screen.
  • Shift-click on waveform will loop the files playback (de-select will stop loop, click will go back to one-shot, Off in slice grid will stop all sample playback).
  • Added support for 128 slices (e.g. for wavetables or Model:Samples use on start point).
  • Cleaned up UI for mobile, moved around buttons to make use of the space better.

Also, tested importing and saving out chains on Android 13 and iPadOS 16.

https://digichain.brianbar.net/

10 Likes

My god this is so cool, ty for sharing!!

1 Like

Thanks, and you’re welcome! I hope it’s useful :slight_smile:

2 Likes

Bravo, love the look and the functionality is superb. Do you have somewhere we can tip you for your hard work?

1 Like

Thanks! I have no plans to charge for this, the hosting is free on GitHub, and it’s a tool that I want to use personally :smiley:

If anyone wants to, then maybe pick up some music on Bandcamp or sample packs? I plan to add more to my Gumroad and put out some music for the first time in a while this year (this is my year of getting out of a rut {and off my ass} watching TV after work and getting productive).

But that is completely not an expectation, I will continue to update this and add stuff to get it to what I want it to be.

I’m currently working on the bug where if you have more samples than the slice-count selected that the output file is too many samples, the next update will fix that and auto-generate multiple files at the slice-count length. issue resolved.

4 Likes

v1.0.2 is live, changes in this version:

  • When a slice grid length is selected, samples will now be auto-generated, (e.g. if you have 13 samples selected and a grid of 4, you will get 4 files downloaded instead of one chain of 13 samples [which isn’t ideal for the Digitakt!]).
  • Shift-click the slice-grid numbers to change the grid size, but retain the selected samples.
  • Added loading message while loading in files.
  • Added sort-by selected.
  • Changed button text, added joined file counts that will be produced, and a number of files that will be downloaded if downloading all.
  • More tweaks for mobile device use.
  • Fixed an issue where a looping sample would keep playing after removal.

If you’re not getting the number of files you expected for download - please double-check that the browser isn’t blocking multiple downloads.

https://digichain.brianbar.net/

5 Likes

Sorry for the silly question, I’m a newby on this technique: what is the use case?
You join a bunch of samples in a single file, how do you use it in the DT?
Thank you.

1 Like