DIGITAL TURNTABLISM AS OF 2025 (Thank You @Volker Böhm for vinylcontrol2~!! 🙌)

👽'tW∆s ∆lienz👽's icon

First off, THANK YOU IMMENSELY TO VOLKER BÖHM!!!!!!!!!!!!!!!!
for the vinylcontrol2~ object: https://github.com/v7b1/max-thirdParty_externals
check his website for so much more: https://vboehm.net/
Volker has been raining down gifts like a god for decades! they are ALL worth a long hard look, not to mention the maestro's music:
https://vboehm.net/sound-music/current-projects/
is among the best of ALL electronic and electroacoustic works i've ever heard!! 🙌

_______

so wow, we've had threadz that didn't seem to go anywhere with the actual patching:

and i, too, will not be offering up my actual patch for this, but will simply offer a pic of the basic engine made(quite roughly so far) in gen~, so you can get started from there if you'd like:

it is basically as follows:

• first, i am using vinylcontrol2~ as opposed to vinylcontrol~ since '2' is signal-rate, therefore, quickest in response. we are given two main types of information from the vinylcontrol2~ object: the 'pitch' (from the tone on the record), and the 'timecode'(from the lower-volume noise on the record, which is actually the sound of a Linear-Feedback-Shift-Register outputting a pseudo-random sequence of ever-shifting-bits, somehow mapped through xwax library to discrete timestamps in the long-running time-code signal... or so i think it all works this way :p).
so, i am using the 'switch-and-ramp' technique from Miller Puckette's "Theory And Techniques Of Electronic Music" to compare a playback position, first and foremost, guided by the 'pitch' information, to the actual 'timecode' and then adjust as it detects above a certain threshold of error.

you may wonder "why do it this way?": it is because upon experimentation with the actual feel of a vinyl record with control-tone(i'm using serato because this is the most readily available online these days), i found the most organic feel for turntable-drumming and scratching is actually best accomplished by the 'pitch' alone(also, if i used the 'timecode' i'd have to do more analysis than i'd care to do for reversal, etc... whereas the 'pitch' information is basically akin to the 'slope' between two points in time, and therefore, can be used to guess at future points in time, including negative values for moving the record in reverse)

in the above pic, i have not implemented a 'crossfade' yet, so that, during the switch-and-ramp, you would not have 'zipper-noise' everytime the pitch-guided playback-position updated according to the actual timecode-position(i am leaving the zipper-noise in on purpose for my first few attempts since i like the glitchiness, it also highlights the smoothness of the interpolation chosen(in the above pic, set to Catmull-Rom 6-point-spline)).

• sometimes while scratching, i wanted to be able to see a point on the record-label, and use it as a visual way to track the position of sounds which i could then manipulate reliably by hand(without constant zipper-noise/jumps to update position, which often make it so the sounds played back are constantly switching their positioning relative to where the needle is, which makes it difficult to do more advanced scratch techniques such as 'baby scratch', 'chirps', etc. which depend on knowing, and reliably/repeatedly finding, visually, where the exact start of a sound is)

the way they get out-of-sync is hard to explain, not to mention, too complex for my diminutive brain to completely fathom.. but they do get out-of-sync, and while this basic switch-and-ramp idea works well enough so far, i wanted the system to detect certain points when i'm scratching, and just leave it be at pitch-guided playback alone, until i let go and actually want regular playback to resume(when the switch-and-ramp can kick back in and return to accurate timing). for this reason, i also implemented an RMS to analyze the pitch, and be able to tell the difference between when i'm scratching, and when i'm simply letting it play(this is the codebox portion in the above pic).

if the RMS detects a certain amount of change, it gates out the switch-and-ramp, until the change falls below a certain threshold( [< 0.00001] is what i got simply by experimentation and ear... the 'slide' op just above that is used to delay it a bit more... these things all from just intuitive guessing and ear-based experimentation)

  • the rest is just added fluff to give me more features i wanted to continue experimenting with:

    • "Autechrush" - this 'mode' causes the switch-and-ramp to become more drastic, introducing more error before correction, thus causing a chaotic sound similar to LFO/strange-attractor applied to the playback position... the resultant sound reminded me of some sounds i've heard from 'Autechre'(apologies, i don't want to search out good examples of their music to show this, but it is an interesting effect) so i named it similarly

    • "Scratch Mode" - this 'mode' simply cuts out the switch-and-ramp entirely, more for dev purposes at this point until i can tweak the RMS a bit better, and also implement a proper crossfade to cut out the zipper noise of the switch-and-ramp

    • "Fresh Rec" - not yet implemented fully in the pic, but it is basically a type of 'Append'(if you're familiar with karma~, this will keep track of a where a 'fresh recording' stopped and allow me to keep appending from there... in fact, i will probably just rename it 'append' eventually)

    • 2-pole Lowpass - at the bottom of the pic, a network of 'mix' ops implements a 2-pole lopass which drops frequency cutoff whenever i'm scratching(why: because digital turntablism is a bit harsher in sound than analog vinyl scratching, therefore i subjectively chose a point of cutoff(8888) as a frequency-cutoff my ears enjoy, and then since scratching can introduce even more noisiness, i have it drop down to 6888 while the RMS detects scratching, even lower(to 2888) for 'Autechrush' mode) - the cutoffs are purely subjective choices, others have different ears, so while i recommend it, you would still want to tweak it to your liking

    • other params - 'samplen' and 'offset'(to be added later) will simply be a way to window just a section of the buffer which is controlled here

so just to explain a couple last things: 'in1' takes 'pitch' from vinylcontrol2~, 'in2' takes 'timecode' from vinylcontrol2~, 'in3' is an extra thing i have to implement so that a separate gen~ patch used for recording live-input will transmit its last stopped position there, and upon appending more content into the buffer, 'in3' will keep the 'end-of-recording' position, otherwise, the limit of playback is strictly controlled by buffer length and the 'samplen'/'offset' params. 'in4' is just a simple on/off switch for other de-clicking needs(such as if the associated buffer~ gets a new file or changes in length, or i simply need to switch vinylcontrol2~ to control a different buffer~ altogether - the outer max patch i use is designed so that i only need 1 single turntable to control as many virtual 'decks'(i.e. buffer~s) as i chose, at the press of a button on my MIDI controller).

and finally, in the above pic, there's one gen~ subpatcher called 'timed_swx' used in a couple places but you can find much better versions of that outlined by Graham in this thread:
https://cycling74.com/forums/share-autotimed-raised-cosine-onoff-signal-switch-in-gen

here is a vid of a 1st attempt, sorry for the terrible vid-quality both visually and also in terms of musicianship, i still have a lot of practicing to do, but this is going to be my main thing for the rest of my life, i'm sure of it now:

FAQ:

"why not share the patch itself?" - because, as exciting as this is: https://cycling74.com/forums/a-mcp-model-context-protocol-server-for-max... it also scares me that eventually AI will be able to scour the internet, give newbs whatever they want without proper credit to the original authors(although, it's obvious they'll apply computer-vision to study pics someday as well, it will take them awhile before they figure that out perfectly), etc. and also because this helps me not have to offer support, while i'm also simply trying to get out there, eventually, as a 'performing artist' (not so much as a 'dev' :p), last but not least, i've felt pretty thrown-away/exploited/pushed-into-a-corner by all the work-experiences i've engaged in so far, especially, those which were music-software related(the only exception was working for Rodrigo Constanzo on karma~, so a big Thank You! to Rodrigo as well, for trusting me, and helping me to understand what i want out of life better by performing that work, only for a short while, too)

"what sort of equipment do i need to get started?" - for beginners, i highly recommend just getting a 7" Serato control vinyl, but 10" works well, too, and then a Numark PT01 scratch turntable(currently, only $154 brand new, same thing i'm using in the video above), plus whatever computer you use Max on, the vinylcontrol2~ object, and an audio interface that can take, at least, stereo input(time-code vinyl sends a stereo signal), then, however many more inputs you might need for live-sampling

the PT01 scratch has a crossfader built-in, and it does seem to work even with the timecode vinyl, but crossfading is better done on the audio-output of your scratched content, rather than the timecode itself(best not to interrupt timecode), but i do also have a switch in my patch to allow for regular vinyl to be sampled in, at which point the crossfader on the PT01 is still a beautiful thing to use(it is a dinky little switch that just flops back and forth, unlike a contactless crossfader which can give a nicely, horizontally-tracked feel, but still, it is a great budget-option, and is very satisfying in its action nevertheless)

while i'm not trying to be 'salesy' about any of this, as an 'ambassador' of digital turntablism👨🏽‍✈️, i've searched and found these basics offer the most affordable option for entry, feel free to discuss here if anyone knows of much more affordable options they've tried which work well with this type of system(other cheaper turntables don't have proper anti-skate/counterbalance/scratch-friendly-needle/etc. or they are much more expensive)

the vinylcontrol~ set of objects allows you to add an extra argument to amplify the timecode signal without any need for a special mixer or 'RIAA'-standard preamp, just plug straight into the audio-interface(with PT01, you'll want to turn the volume all the way up, with other turntables such as Technics1200, just plug straight into audio-interface :).

beyond that, you could just start with keys on your computer keyboard as the controller to substitute for crossfader/mixer/virtual-deck-selection/etc., or else whatever MIDI controller you might want for crossfading/cutting. i have also tried sending the signal back out to a proper DJ-mixer because i do like working a crossfader better than just pushing buttons, and there is minimal latency when setting vector-size to around 32 or 64, but this means, for any added effects-processing over the cuts, if you send it back through Max again, it will add even more latency beyond that(or maybe you have a mixer with aux send for hardware effects, in which case, it's all good :) ).
i'm using a MIDI Fighter 3D controller in the vid above, because i also wanted to control a stereo-tempo-synced echo effect which is highly effective for a beginner like me to practice the timing of my 'cutting-and-scratching' as i get used to this new system.

"is this how the professional DJ software devs make things?" - oh hellllll noooooo! this is my own purely amateur guess, i have no real clue how serato/traktor/mixvibes work. even ms. pinky? i can't even follow links to ms. pinky to find anything about it anymore(how open-source was it, anyways? always seemed like a very hard thing to get, so i'm glad to just be able to buy serato vinyl and finally get this much done - ya! that's right, i got opinions, damnit!) - i am also starting this thread, because i'm sure many people in this community will have improvements to add/suggest, or else make much better solutions themselves and possibly upload pics of the basic idea here as well(no worries if not, but the discussion is available here now)

"what other types of turntablism can we accomplish with this?" - video scratching is even easier than this, since you don't need to worry as much about interpolation/clicks/pops/etc(not to mention the ability to control 3D objects using quaternion-based navigation :p)... and since the vinylcontrol2~ object also outputs event-rate timecode from its 3rd outlet, and this particular outlet drops to -1 whenever there is an error such as when the needle is lifted, you could imagine so many other things to try in order to follow the needle when down or up: such as, dividing the entire length of record by a certain number of steps on a scale, and then the needle placed-down/lifted-off can trigger the start/release of ADSR envelopes over synths whose frequencies are determined by position on record(in addition, once down, after a period of wait, scratching can be recorded into separate buffer as a 'looped-gesture' for LFO-like modulation added to that same synth sound)... there is an infinite ocean of possibility here! :D

• "why are you so weird, Raja?" - while i can't blame my parents, i DO keep trying to pass blame onto the country they came to, and within which i still live(The United(by name only) States Of America), and that country's weird way of stifling individuality, creativity, and diversity by forcing codependency on its particular brand of capitalism

• "speaking of the sh!t-country you live in, Raja, are there any tariffs involved here?" - not so far as i'm aware, but maybe Trump will terroriff the shit out of control-vinyl, or maybe just the ones already in place against New Zealand where my favorite control vinyl(Serato) is produced, you never know with the economic-terrorism coming from that asshole, what is going to happen. #IHateWhereILive!

"can you please, at least, apologize for what's going on in the world right now?" - yes, I'm SO SORRY FOR THE FAILURE OF HUMANITY EVERYWHERE! Being an american citizen by birth, means that is, indeed, partially my fault 😭

...but hey! we can now turntable-drum jongly while scratching cello-f2, sho0630, cherokee, or duduk (video of that to come later)! so who cares about humanity(?) when we've got turntablism augmented by Max/MSP! 🥏🦾

#JustKiddingWithThatLastSentence #EverythingSucks #ShotsFired #SorryAgain

________________

... and once again, Thank You Sincerely, Volker, for everything you do!