search term:

december adventure 2025

I’m going to try to work on something small everyday during december. see the original December Adventure.

my goals:

december, 2025

♀︎
0001 0002 0003 0004 0005 0006 0007
0008 0009 0010 0011 0012 0013 0014
0015 0016 0017 0018 0019 0020 0021
0022 0023 0024 0025 0026 0027 0028
0029 0030 0031 - - -

0001

one of my goals for december adventure 2025 is to make bad dub techno. along the way we can listen to existing works and learn how to use the machines and software, much like learning any other musical instruments. at this point, I’m not even aiming for originality.

if you’re not familiar with the genre, here are some reference examples of dub techno, dub, and dub-inspired dub techno:

the 1994 Inversion/Presence is one of the pioneer vinyls of the dub techno. in these tracks we can hear the influence from Detroit techno. by 1998’s Mango Drive, there’s an evident borrowing of dub vocabulary. as it turns out, that both Cyrus and Rhythm & Sound are among the aliases of Moritz von Oswald and Mark Ernestus. they are also known as Basic Channel.

as a way of getting started, I got Teenage Engineering EP-40 Riddim. it’s a dub/reggae themed device.

thus far I’ve only played around using the Live State, and it’s pretty fun. etude 0001:

0002

I don’t want to prescribe rules around genres, but it might be useful to think about what dub techno is, or more broadly what makes minimal, techno, and house feel different from each other.

let’s start with a few house tracks:

these may not cover all bases, but hopefully you can see the commonality among them. the time signature is very 4/4, with four kick drum, and the motif repeats over 2 or 4 bars. 1998 Future of the Future, for instance makes a synth arpeggio loop of 8 beats (2 bars), highhat exactly at 1/8 position, and clap at 2 and 4, and piano chord stabs around 7 at the end.

Robag Wruhme’s 2019 Nata Alma has a more modern feel, but the note placement is similar. 4/4 kick drum, highhat at 1/8 position, and snare at 2 and 4. a nice fill at the end of 16 beat loop (4 bars). given that this track has 118 beats per minute, each bar is 2s, and 4 bar loops in 8s.

coming back to Cyrus/Basic Channel’s Inversion/Precense:

Inversion can be interpreted as either 1 bar loop of 4/4 or 2 bar loop of 2/4 TB-303 arpeggio. 4/4 kick drum, and no highhat for the first 3 minutes. the sound stage feels echoey, and there’s a slight hint of piano among the echo and white noise.

without obvious drums, Presence makes the 2/4 feel more obvious. the main synth riff loops in 1 bar of 2/4. in other words, if you can feel the invisible kick drum, the riff repeats in the count of “one, two”, which contains just one high note and another lower note of the synth. thus far it’s stoically minimal. what keeps chainging for 20 minutes is the effects, which brings out different aspects of the loop. with the reverb and the digital delay, the simple few notes multiply into a tapestry of ghost notes, and filters can highlight the hidden harmonics.

trying out the Main mode of EP-40 Riddim today. we can punch in the kick drum and synth riff, and adjust the effects while looping.

etude 0002:

0003

etude 0002 was the first time I used EP-40 Riddim’s Main mode, which is a looping sequencer. partly due to the fact that I can’t use multiple effects serially, the track lacks the general atmospheric noise. given that EP-40 is built on top of a portable sampler, I thought I can emulate the noise by sampling outside noise.

so I went outside, and just recorded a nearby highway noise on the phone. after connecting the phone to EP-40 via 3.5 mm jack audio cable, I could follow EP-40’s instruction on the sample mode and load the sound as a sample. I guess because background noise is typically something you want to cut out, it wasn’t easy to get it to be recognized at first. unfortunately, it will also be cut out through the speaker and iPhone video recording of 0003.

a bigger issue with etude 0002 I thought was that, although I was able to play around with the effects a bit, the main synth loop sounded untreated, except when I hit the FX + 8 combo, which I guessed to be some kind of a low pass filter (LPF).

fortunately, what I discovered is that the sliding fader functionality can be switched using FADER button + pad:

FADER + 1 or FADER + group is level (default), FADER + 4 is low pass filter, and FADER + 5 is high pass filter. I can set independent values for each of the 4 groups. the level can be used for muting tracks, and LPF is used to make the synth round and basey. for the drum track, we can also use LPF to mute the highhat while keeping the kick. if we can slightly let the higher frequency leak in, that would give the subtle noise.

etude 0003:

this came out to be more acid-like, but I can play around with different effects and filter settings.

0004

I got a delivery of the RCA to 1/4 inch jack converter today, so I can record from EP-40 Riddim line-in. for the audio interface, I’m using Arturia MiniFuse 2. EP-40 outputs to MiniFuse, and it connects to my laptop via USB-C. I’m just going to tweak etude 0003, and focus on the recording today. while it’s fun record off the janky EP-40 speaker, the low frequency often gets lost.

I should note that the main synth riff is loosely based on a Basic Channel track called Q 1.2:

1995 Q 1.2 is a timeless classic in its own right, and kickless. this is another 2/4 signature. the main riff starts out sounding like a Hammond organ, and with the digital delay the faint echo at times sounds like a ghost of reggae stab, which apparently is called skank.

in 2002, Scion released Tresor 200 Arrange And Process Basic Channel Tracks, a mixed CD of Basic Channel tracks. Part 2 mixes Presence, Q 1.2, and a few more tracks with the kick drum, giving it a feel of a basement nightclub in Berlin.

I’ve kept the first half of etude 0004 filtered using low pass filter, and the latter half heavy on kick. using X and Y knob, I can change the parameters to Digital Delay effect, and using the fader I can move the LPF etc.

etude 0004:

I recorded the sound and video separately, and mixed them together using iMovie.

0005

in etude 0004 when I faded in the kick drum, the kicks are on 1, 2, 3, 4 position, or 1, 2, if we feel it as 2/4, which is okay since we have the skank guitar sample that floats on 1/8 upbeat.

Scion who released Tresor 200 Arrange And Process Basic Channel Tracks is an alias of Peter Kuschnereit and René Löwe. Peter Kuschnereit is also known as Substance. Substance’s 1996 Relish is such a nice dub techno track.

the main looping pattern is actually 4/4, with reverb, and synchopated to start on the upbeat of 1, creating a rhythmical groove. in general, the offset looping pattern I think was one of minimal techno style in late 90s, maybe coming from mixing vinyl tracks in the club. I’m going to call this offsetting the kick, or metric inversion. when they mixed kickless Q 1.2, the added kick was offset by 1/8 note relative the original 1.

for etude 0005, I’ve re-punched the kick offset by 1/8.

etude 0005:

the skank guitar stabs perceptionally shift from being the upbeat to downbeat when the kick comes in. another thing I tried today was to resample the skank guitar with high-pass filter (HPF) and the digital delay, so I can use it together with the main riff on low-pass filter (LPF).

0006

yesterday, Burak Emir replied to one of my Mastodon posts about this december adventure, and said:

I expect a bad dub techno remix of “scala genau” ;)

during the time at EPFL under Martin Ordersky, Burak worked on various aspects of Scala, and also created a track called Scala genau!

I’d still have to figure out a few things, but I think it’s feasible to try a remix/rework. the original track is in the style of EDM/trance music with the strings, organ (?), piano, and vocal sample “Scala genau” layered heavily in the main part A.

the intro and part B features a fast synth riff. there are a few bars during the intro without any drumkit, so I’ve used that for sampling the synth riff. next, by hitting SHIFT + SOUND button on EP-40 Riddim, I can edit the sample, mostly by trimming so it lines up with 1. interestingly there’s a bass, sort of skank stabbing on 0.5, 1.5, etc. maybe it’s manually avoiding to be on the kick. next, I wanted the feel to be less rushed, so slowed down the tempo to 85 bmp. thankfully there’s an isolated “Scala genau” towards the end that I could sample.

borrowing from the house music theory in day 2, I’ve expanded the loop to 4 bars, and vocal sample at the end of it. I want to layer something on, but the bass sound is embedded into the synth riff, so I chopped a piano sample that was in EP-40, and punched in a simple rhythm riff, matching the key. piano appears in the original track too, and it works well with digital delay and filtering.

for the drum pattern, I wanted it to avoid the four-on-the-floor kicks, be sparse, but stand out. this reminded me of the following track:

I didn’t make a long pattern like Surgeon did, but I borrowed the idea of putting wobbly bass sound on 1 as kick. these are punched in ahead of time, and I’m adjusting the level, digital delay parameters, LPF, HPF, as well as FX (how much the effects affects the group).

Scala genau! eed3si9n reprocess:

0007

we’ve thus far looked at minimal dub techno of earlier years, but as we enter into more dub-inspired dub techno, time signature changes to normal 4/4. in 2001, Rhythm & Sound released King In My Empire/King Version vinyl:

in the above, King In My Empire is a reggae track with singing. King Version is the dub of the same track. note that it’s not just the instrumental, but there’s some vocal here and there. in both cases, the loop is 2 bars of 4/4.

Girių Dvasios takes the source material from Lithuanian folk songs, which works well:

the arrangement/harmonization of Giriu Dvasios is so smooth. I’m not going to be smooth at all, but I’m going to attempt a rework/reprocess of another Lithuanian folk song. some of the themes of Lithuanian folk music include Advent, like O kas sodely pamigo (who fell asleep in the garden). I don’t know if this is Advent-related, but I found a recording of a song called Kas ten po mano sodelį vaikščiojo (who was walking around my garden):

kas ten po mano sodelį vaikščiojo reprocess:

besides the fact that I had to split the sample into two, it went ok. the difficult part was actual arrangement/harmonization of picking the backing chord and playing the bass line. I used a MIDI controller for exploration, but I couldn’t use it for recording since with USB-C ended up adding weird extra notes, maybe existing track’s note ends up repeating back.

0008

I listened to music, but no EP-40 Riddim today. I did publish the track list for chikhzen’ni (2025.12 mixtape), and posted it to Mastodon. the list contains a wide variety of electronic music, but one track I did listen to three, four times is:

the total time is 12:25, so it takes time to listen to it, but it’s good. it starts out with just reverbation, an echo of something, and gradually kick, sampled (or resampled) noise, and eventually a minimal piano loop, but everything goes back to echo again. so it’s partly ambient, and partly minimal.

in addition, I was also looking at sbt and Coursier interaction. there’s a mysterious bug that was reported a few weeks ago coursier/coursier#3520, which states that if Scala 3.8 is published locally, which now includes scala-library, Coursier ends up returning two scala-library JARs if 2.13 is also transitively depended. the core part of Coursier resolution logic is at Resolution.scala#L355-L385, which resolves version conflicts, if any, per Module. the Module looks like this:

@data(apply = false, settersCallApply = true) class Module(
  organization: Organization,
  name: ModuleName,
  attributes: Map[String, String]
)

Scala 3 team added an extra attribute on the scala-library artifact, which in ivy.xml looks like this when published locally:

  <info organisation="org.scala-lang" module="scala-library" revision="3.8.0-RC3-bin-SNAPSHOT" status="integration" publication="20251209044014" e:scala.versionLine="Next" e:info.versionScheme="always">
    <description homepage="https://scala-lang.org/">scala-library-bootstrapped</description>
  </info>

by convention, extra attributes that does not start with “info” is treated as a virtual axis (like sbt version back when it published to Bintray), so Coursier correctly distingushed two scala-library entries.

0009

I wrote about Port Gentil yesterday:

my hypothesis is that it’s using resampled tracks as drone. for example, have an isolated kick track, play it through filtering and reverb, and resample it.

also I’ve been using some of the piano skunk chord samples that came in EP-40, but I think it would be interesting to sample a jazz track, like Thelonious Monk:

sampled a small part, played it through reverb, and got the resample. similarly, I resampled quantized four-on-the-floor kicks.

etude 0009:

this is still in progress, but it does demonstrate the hypothsis.

0010

continuing with Port Gentil:

towards the beginning, there’s a part that sounds a sampling of field recording, like train sound. it’s possible that something else ends up sounding like train after resampling, but I’ll go with the train idea.

speaking of trains, 2010 album Liumin by Echospace, listed as among the best dub techno albums, features field recordings in Tokyo, including the motor acceleration sound of a subway car:

Echospace is a project by Rod Modell and Stephen Hitchell. Rob Modell is also known as DeepChord. it’s been a long time since I first heard DeepChord, but I remember feeling a joy to see dub echo progressing, and just how good his tracks were. taking from a Echospace page, I’ll use a field recording from a Tokyo train.

etude 0010:

0011

towards the middle of Port Gentil it ducks out of ambient, and has a more minimal piano loop:

in day 7 I tried to record with MIDI controller unsuccessfully, but I’ve been thinking that I probably just need to limit the input MIDI channel to the controller, so EP-40 Riddim’s signal doesn’t loop back, which seemed to have worked.

I’ve been meaning to use EP-40’s Supertone synth, which sets EP-40 apart from just being a sampling machine. I wish it came with piano and organ, but there’s either bass or synth lead.

etude 0011:

synth lead exposes cut off filter, which is fun to tweak. I’m constantly reassigning the fader and knobs, so it would be useful if I can use the MIDI controller for this purpose.

0012

no progress today.

0013

shifting gear to DeepChord, I listened to 2003 Kettle Point EP by Rod Modell. in the early 00s, sometime before DeepChord, Rod Modell release a few tracks as Rod Modell.

the basic structure of the track is relatively simple. the signature feels like 4/4, and slightly wonky synth loop that’s 4 or 8 bars long. the bass is one note. kick is four on the floor. distant conga sample. however with filtering and reverb, the whole thing sounds like a dub techno.

to emulate the synth loop, I recorded organ chords and resampled it through phaser.

etude 0013:

pressing SHIFT + TEMPO creates a mini loop while playing, which has a cool effect.

0014

did a bit of GitHub issue gardening today. first, I’ve searched through the issues, and labeled all sbt 2.x related issues with a label called area/sbt2. there are several GitHub milestones:

the allocation of which issue goes into which bucket is subject to change. there are a few issues that need fixing, but I’ve been putting off since they are relatively easy, so decided to work on them today.

first is creating a shaded Gson. sbt 2.x uses Gson in the forked test, but this will collide if the test itself uses another version of Gson. a quick fix is to publish a shaded version of it, and use that instead. this was fixed in Switch to using shaded-gson (#8419).

next is Scala 3.8 REPL support. I’ve implemented that in sbt 1.x side, so I just need merge them into 2.x side. I thought I’ve done that already for 2.0.0-RC7, but apparently I didn’t for Zinc, so I’ve sent a merge PR in zinc#1620.

0015

fixing low-hanging (for me) sbt 2.x bugs, continuing from yesterday. I published a new Zinc milestone, but still wasn’t able to run Scala 3.8 REPL. it looks like there was a diff missing in develop branch, so fixed that in fix: Scala 3.8 REPL support #8420.

next, there was a report that sbt 2.x’s projectMatrix is missing the crossVersion feature that’s in sbt-projectmatrix, which allows the user to pass crossVersion = CrossVersion.full for compiler plugin projects. this was fixed in projectMatrix crossVerson support #8421. this wasn’t necessarily hard, but cumbersome to port since there are numerous overloaded methods.

0016

listening to Mass Digital from the 2015 album Ultraviolet Music, 2h 37m of the sound closer to what I think of DeepChord dub techno:

taking notes of some of the EP-40 steps

there’s an electronic piano loop at the beginning. it might be difficult to fully reproduce it, but we can capture the gist using 628 chord.

record low pass filter (LPF) movement over the 2 bars to filter out some sounds. same for high pass filter (HPF).

next we need some white noise, which I guess is supposed to be field recording. 736 has a generic hiss sound, so we can use that for now.

the bass make like two sound, so low that almost sounds like a kick drum. 413 has the super low bass, but the attack is too weak for short notes so we have to go with 412

there’s also a djembe-like drum sample after a few bars. I opted to play this instead of trying to sample something that matches. normally this would go into the drum group, but we want drum group for kick and highhats, so we’ll play it on the sample group.

finally, we can put kicks and highhats into the drum group, which I will omit here.

each time we hit SHIFT + MAIN, EP-40 automatically creates a scene.

the intro part will be S10, and the main part will be S11.

etude 0016:

I also sent a quick bug fix PR fix: Replace Scala version with u when crossPaths is false #8422.

0017

followed up on fix: Replace Scala version with u when crossPaths is false #8422, by fixing a few failing scripted tests.

0018

released Zinc 1.12.0-M2 and lm 1.12.0-M2 in preparation for 1.12.0-RC.

0019

released sbt 1.2.0-RC1.

listening to Fluxion’s 1998 Atlos:

it got included into Vibrant Forms compilation in 1999, but the EP came out in 1998. first the drony sample loops, with faint kick, which makes the track initially feel like 64 BPM. after about 2 min in, the kick comes in at 128 BPM. afterwards, spacy synth floats over both.

for the sample loop, I’m using a seconds of a jazz sample.

etude 0019:

the synth part needs to be more echoy.

0020

winter vacation begins today. went to a skate session in the evening, which is significant since I had a shoulder surgery a month ago. I figured it might be more stable to try the 8.25 inch (normally I skate 8 inch board) and AF-1, which is heavier. got used to pushing around quickly. tried a few 180 turns, trying to avoid jumping around. I kind of remember kick turns being easier on 8.25 board last year as well. eventually I tried to ollie, but it felt awkward. I did manage to record ollie and revert combo, which I think is first time.

went to a holiday party, said hi old colleague and their family, and went out for a dinner.

continuing with Fluxion’s 1998 Atlos:

with the effects on EP-40, I couldn’t really make the synth part echoy, but I programmed it in so I can turn knobs for modulation instead.

etude 0020 (Fluxion Atlos cover):

a minor change from 0019.

0021

went skating again. not that my ollie was good before, but still feels awkward. one thing I was trying was to load the tail to get a strong pop on release, which is satisfying when it works.

to work on a non-ollie trick, I tried no comply 180 a bit, off the board, just trying to scoop, but it was still difficult.

0022

went out to Dhamaka in the city for dinner with my lovely vegeratian wife. the overall atmosphere was okay. the seating was packed, and not much decor. I got prema and wife got garden nimbu pani for our non-alcoholic beverage. when I stole a sip, nimbu pani had the masala that immediately transported me back to my in-law’s house. prema was okay.

so far winning, wife started with paneer tikka (2 pc), which had the proper soft texture, usually not found in takeouts. the wait staff really recommended butter pepper garlic crab as a starter for me, so I caved in instead of gurda kapoora (goat kidney). I’ve had crabs in my life, and while cooking it with butter and garlic was tasty, I wasn’t impressed. maybe it would hit different if I’ve tagged along to Goa vacays. 0-2.

wife wanted to try their bread, so she’s ordered paratha with main, but it just arrived on its own, between starter and main. very confusing. anyway, it was the best paratha I’ve had. layered, and flaky, like the outer edge of a pie, and fragrant with butter. so 0-3.

for the main, I was set on nalli biryani (lamb shank rice). a huge clay pot arrived on the table sealed with dough, and inside was bone-in lamb shank, barely covered in basmati rice. opening the pot, and deboning it was a table-side show. with 50:50 lamb to rice ratio, it was a perfect biryani. wife went for dahi waali bhindi, which unfortunately was too spicy for her. it was truly a Dhamaka (explosion, bang, or sudden success). I’d be enjoying the biryani we took home. 1-3.

no progress on dub techno or coding today.

0023

listening to grad_u’s Sanctuary Bay from 2019 album Umwelt:

grad_u is also based in Lithuania, like Girių Dvasios, but he’s more Fluxion, DeepChord, Heavenchord type. somewhat analogous to Basic Channel, he created his own label called Redscale in 2012, and released a bunch of tracks as vinyl, and some became CDs afterwards.

Sanctuary Bay’s tempo is 126 bpm, but it starts half-speed like Atlos. initially there’s a synth pan and a slow piano loop. 30s in, the bass comes in offset from the piano loop, and when the kick comes in at 60s mark it’s offset as well, creating the metric inversion.

etude 0023:

I tried to get the compression effect of the pan by resampling, but it’s difficult to get a crisp noise with just using EP-40.

0024

getting back to fixing low-hanging sbt 2.x bugs, I sent:

0025

EP-40 is supposed to be a sampler beat machine, so I figured I should add some sample layer on top of etude 0023.

there’s a sample loop called Diwali Riddim, which has been sampled by a bunch of 90s dancehall tracks. using that I can try the dub techno dub thing.

etude 0025:

0026

I’ve fixed the low-hanging bug fixes that I’ve bucketed for the next RC, so I decided to tackle a more complicated one today. there’s somewhat long-standing request #2795 from 2016 to require scalaVersion in build.sbt. in a few days, 2016 would be a decade ago.

this is a tricky issue since setting a scalaVersion requires you are familiar with Scala, and if you’re already familiar with it you’ve likely set scalaVersion. if we assume that the situation where you won’t have scalaVersion set would be either a new user or by accident, erroring out saying “scalaVersion is required” might not be helpful. instead, keeping the existing behavior of picking the Scala version used by the metabuild, and displaying a warning would be more helpful.

detecting if a particular setting has been set by build.sbt or not is not exactly easy. I’ve copied some of the code from the unused setting detector since it displays the setting’s source position. this has exposed at least one bug related position tracking code.

0027

I attempted to investigate NoClassDefFoundError: $Wrap #7424, but did not make much headway.

I also worked on an interesting issue #8429 reported by azdrojowa123 via Discord #sbt a few weeks ago:

I did a small test and ran a simple cached task. The symlink was added to the project directory, and then I removed the AC (once the whole directory and another time only the content of the file corresponding to my task). In both cases, in the next task execution, it was re-run, and the cache wasn’t used at all (at least that’s how it seems).

So, it looks like even though there’s a symlink, it still relies on (or reads? I’m not sure) the AC. Is this expected?

I think I had justified the rationale behind the symlink files under target as an optimization mechanism to avoid reading Action Cache (AC) JSON, by pointing directly to the CAS json, but a few weeks later she exposed that the optimization wasn’t really implemented on the usage side.

I’ve sent a PR to try to address this:

however, it’s failing scripted tests.

0028

continued a bit on fix: Fixes task value optimization #8430 from day 27. the optimization itself works as intended, but the value it returns is insufficient for some the tasks that captures file creation effects. we can try to make special cases for those, but it ends up making both cache reading and writing more complicated.

listening to Altone’s track Buoyancy from 2019 Echo Node EP:

Altone I think is based in Japan, but the Echo Node is released from the Greyscale label by grad_u. the track loops on 2/4, but as the name buoyancy suggests, it has a heavy synchopation.

the main loop I’m guessing is a combination of piano and synth, but synth part sounding like an echo noise.

etude 0028 (Altone Buoyancy cover):

I couldn’t quite get the bouncy feel of the original. a fun element in etude 0028 is that I got to live tweak the envelope, attack and release, of the piano sample.

0029

went for grocery shopping to Mitsuwa and H-Mart, and also baked cookies in the evening.

I’m listening to Barker’s Positive Disintegration from the 2025 Stochastic Drift album:

Barker’s music doesn’t fit into the categorization of dub techno, but since he’s based in Berlin and since he has been pursuing techno without 4/4 kick, or what I call kickless, some of the tracks can be approached from dub techno angle, with syncopation and digital delay.

when there’s a feel for the beats, it’s around 68 bpm. around 3:30 there’s a cool synth arpeggio that comes in with high attack, which reminded me of Chinese zheng (bridged zitar). in Japan, traditional koto music is played during the new years, which is zheng that came from the Tang dynasty in 8th century. koto didn’t seem to have much cultural significance until 1600s when they adopted miyako bushi scale.

there’s some phrase we might be able to use around 4:23.

the first half of the Positive Disintegration has chord stabs, which I’m not sure if it’s reprocessed from the later synth. I can chop a chord sound from koto, resample with chorus, and resample again with reverb.

0030

continuing Barker’s Positive Disintegration:

the chord stab short, so I tried resampling with shorter release. next the bass. I hooked up the MIDI controller to play along the koto sample, then step recorded the bassline.

towards the end of the loop, there’s a slow crescendo, almost like reversed highhat. I made the sound by stretching the chord stab to 4 bars, and lowering the attack.

etude 0030 (rokudan):

used the loop feature towards the end to break the track down.

0031

made vegan soba and chikuzen’ni for the new year in the evening. listening to Akmuo’s In from 2025 album Atgimimas:

this is another kickless dub techno. not only it’s kickless, the main echoy sample runs at 63 bpm but the rest does not seem to line up to the grid, like Terminator’s misaligned loop that gives polyrhythm/odd meter feel.

for the loop material, I reused yesterday’s Rokudan. also as a general white noise, I’m reusing the Tokyo train sound from day 10. I resampled a chopped up koto with digital deplay, so when I’m playing I can use phaser.

etude 0031:

since I don’t know what I’m doing with the loop feature, I end up creating glitchy feel. a fitting end to this unfortunate series of bad dub techno.