![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Programming challenge... | |
JackRosete Member |
![]() ![]() ![]() I recently came across an interesting cutting tool by Nick Collins (for SuperCollider), and I'd like to build something similar in Kyma. In the words of Nick Collins, 'Whilst notionally for the cutting of Breakbeat samples, its remit is much wider, into the use of algorithmic composition techniques to cut up any source audio'. The tool is called BBCut. I posted this as a 'programming challenge' because I suspect this tool will appeal to other Kyma users, and could be programmed collaboratively? If you're interested then read on! As far as I understand it, these are the main points to BBCut: BBCut has a mode which can 'intelligently' detect transients to work at a synchronized bpm. It can cut any source audio in real-time: live, buffered, rhythmic or static. There are several algorithms within the BBCut library (link at bottom for a comprehensive review of it's capabilities by Nick Collins), which cut the audio into slices forming new rhythms with optional fills. Highlights include groove variation, independent control over tempo/pitch, organic amplitude variation, panning variation, and pitch effects. (There is also a DutyCycle control). There is a lot more to BBCut, but these are the main features as I can see them. I plan to start working on this challenge today. Off the top of my head, the following Prototypes seem appropriate: Sample If you'd like to collaborate, then please reply to this post, and share your ideas on how to best build this tool! We can use this thread to attach Sounds to, and make comments etc. Thanks! Jack This is the link to Nick Collins review: [This message has been edited by JackRosete (edited 23 October 2006).] IP: Logged | |
JackRosete Member |
![]() ![]() ![]() BTW, if you'd like to demo a cut-down version of the BBCut library (as a free VST plugin), please visit the following link: http://mdsp.smartelectronix.com/2005/07/livecut.php The plugin is called Livecut and was programmed by mdsp, for smartelectronix. It does not feature the full capabilities of BBCut, but will give you a good idea of what's possible... Jack [This message has been edited by JackRosete (edited 23 October 2006).] IP: Logged | |
tuscland Member |
![]() ![]() ![]()
This seems interesting! Attached is a sound I've been scratching my head for a long time. It is a waveset stretcher. I think the idea is kind of the same as the BBCut library, but in a microscopic viewpoint. These sounds can be a source of inspiration for working on your idea. You will need Pete's DSP algorithms in order to make them work. Building the waveset stretcher has been really worth of many learnings. I find cutting and pasting sound pieces is not a trivial task in realtime DSP systems because it involves careful tracking of indexes and memory management, even when you use such an easy user interface as the one Kyma offers. What I mean is that those algorithms are more like Event driven algorithms, and not Data driven algorithms. Time passes and you need to store events in a sort of database and process them, not like for example a reverb algorithm which process the incoming samples one at a time. Something important to consider (I think) is the precision of the cuttings. For example, if you use the AmplitudeFollower prototype, you will need to use Hot Variable (the ones that begin with a exclamation point, like !Amplitude). The thing to know with these variables is that they are updated a thousand times per second. This is because they are control signals, not data signals (which run at full sample rate, e.g. 44.1 kHz). Then, your cuttings are limited to the precision of 1000 events per second, which can lead to bigger errors when the algorithm applies many operations on a badly times event. It is not necessary to make the previous statement a general rule: the wavesets stretcher needed that resolution because one work on very smal grains of sound. For the BBCut library, control rate resolution (1 kHz) is certainly enough. If you compare 120 BPM to 1 kHz, there is a ratio of 1/2000, which make very little error, knowing that the BPM is internally computed from a much mor precise clock, that has virtually no jitter. So here were my 2 cents about cutting and pasting sound pieces ...
[This message has been edited by tuscland (edited 23 October 2006).] IP: Logged | |
JackRosete Member |
![]() ![]() ![]() Thanks for your reply Camille, I'll check out your sound right away. I see what you mean about BBCut being an event driven algorithm. I've made good progress so far, should have something finished by the weekend. One bit I haven't figured out yet is how to make my Sound 'intelligent' to an evolving input BPM, particularly sudden (big) changes in tempo. I'd like to make that feature optional (depending on the input source). I wonder whether there is a way to make it auto-switch on/off, if it detects a beat. I guess that will be the challenge, defining a beat in code! It's not just a question of tracking transients, but making the algorithm aware of their timing, in order to decide whether they constitute a rhythm or not. I also haven't decided how to store individual input 'hits' into memory buffers, so that the Sound can access them to assemble new beats. I'm going to try and figure out a system whereby a Peak Tracker (along with some probability scripts) aids in deciding which hits to store (and into which of say 8 memory buffers to store them), and use Analog Sequencers and Samples to re-sequence those hits into new phrases. But that's off the top of my head and I'll have to think about it properly later on. Thanks again for you perspective! Jack [This message has been edited by JackRosete (edited 24 October 2006).] [This message has been edited by JackRosete (edited 24 October 2006).] IP: Logged | |
Phi Curtis Member |
![]() ![]() ![]() Hi Jack, I might be up for helping out on this project. I've known about the BBCut stuff for awhile now but haven't checked it out - but now I've downloaded it and will try brush off my small bit of SuperCollider knowledge and take a look. I'm guessing that it is is built on C code which is made into external objects for SuperCollider (or is that unit generators in SC-speak?). So I'm not sure how well that will translate to Kyma without delving into creating microsounds, though maybe Pete's objects will do much of what is needed. Anyway, some of what you are describing sounds like it might tie into an idea I had for analyzing incoming audio for pitch and rhythm and storing that info in tables (global controllers or memory writers) which could then be accessed by Kyma in generating complimentary material in a random or a quasi-intelligent fashion. I'm not sure how to procede though. I think I'll try to look at what BBCut over then next few days, and maybe I'll get some ideas. I'm a big Squarepusher fan incidentally, but a little skeptical at how these Squarepusher-in-an-algorithm things work (who knows - maybe that's how he does it, but it doesn't sound like it to me...). But anyway, it's a worthwhile project for wherever it might take us. best, IP: Logged | |
JackRosete Member |
![]() ![]() ![]() 'I might be up for helping out on this project.' Cool! 'I'm a big Squarepusher fan incidentally, but a little skeptical at how these Squarepusher-in-an-algorithm things work (who knows - maybe that's how he does it, but it doesn't sound like it to me...).' I agree with you, I don't think Squarepusher uses them. My own interest in these algorithms is to build them (for fun) and then adapt them into more experimental, idiosyncratic forms, particularly for live, interactive performance. I'm especially interested in long, drawn out, organic, overlapping micro-looping! In any case, it should be a fun challenge and I look forward to sharing ideas with you on this. I will post my progress soon! Jack [This message has been edited by JackRosete (edited 25 October 2006).] IP: Logged | |
JackRosete Member |
![]() ![]() ![]() Camille - fantastic Sound! Thanks for sharing it. Well I have now come up with a basic Sound implementing some of the BBCut features (see attachment). This can serve as a starting point for further development. I will have to rethink my looping structures because the approach I've taken so far (repeat looping) has already hit the wall. The BBCut library (as far as I can tell), samples individual slices and then RE-SEQUENCES them into new structures/loops, as opposed to standard REPEAT looping (what I have done). That's how the pitch-shifting effect is so smooth, because it is actually the sample frequency of each iteration that changes, rather than a pitch-shifter acting on the whole loop. Yet to be implemented (among others): Intelligent BPM detector I will keep posting my ideas/progress. Thanks to those who have engaged so far! IP: Logged | |
JackRosete Member |
![]() ![]() ![]()
IP: Logged | |
tuscland Member |
![]() ![]() ![]() Hi Jack, I am looking forward trying your Sound. Best, IP: Logged | |
JackRosete Member |
![]() ![]() ![]() Thanks for your interest Camille ![]() I have made excellent progress on a new Looping algorithm (which I will shortly post into this thread). The new algorithm features: Better Looping algorithm (including proper !Duty controller) ...and I am currently adding the final touches to the pitching effect! Yet to be implemented (among others): Intelligent BPM detector IP: Logged | |
JackRosete Member |
![]() ![]() ![]()
Still a way to go, but getting closer [This message has been edited by JackRosete (edited 27 October 2006).] IP: Logged | |
Phi Curtis Member |
![]() ![]() ![]() Hi Jack, It sounds good. I'll try looking at the code to see what makes it tick, although I haven't yet had much chance to look at BBCut itself still. I replaced the '10 secs.aif' sampleFileDuration s in CaptureDuration of the memory writer with just "10 s," since I don't have your 10 s audio file. But I don't imagine that it makes a difference, does it? Phil IP: Logged | |
JackRosete Member |
![]() ![]() ![]() I forgot to replace that '10 secs.aif' with a duration! You can use 10 s, yes. [This message has been edited by JackRosete (edited 27 October 2006).] IP: Logged | |
JackRosete Member |
![]() ![]() ![]()
It's a pretty poor algorithm however! Any suggestions? I was thinking about adding a parametric EQ (before the Amplitude follower) to aid in the detection process. I also wondered about writing some code to reject BPM values above say 160/below 80, and instead use the last generated value within that range. Maybe that code could then be adapted to make the algorithm more 'intelligent' towards beat subdivisions. But I suspect these possibilities would only improve and not solve this problem. [This message has been edited by JackRosete (edited 27 October 2006).] IP: Logged | |
JackRosete Member |
![]() ![]() ![]() . [This message has been edited by JackRosete (edited 28 October 2006).] IP: Logged | |
JackRosete Member |
![]() ![]() ![]()
![]() I attach my latest offering, which is an improvement on the first idea, but I don't feel qualified to take it any further (for the time being). So I will proceed with the following implementations: Beat re-sequencer IP: Logged | |
JackRosete Member |
![]() ![]() ![]()
These are its main features: Automatic (live) cutting of beats I wasn't able to implement a successful tempo tracker for this version, so you'll have to adjust the VCS BPM fader if you want to keep the algorithm synched to your own samples! Don't forget to check out the VCS presets Hope you have fun... Jack p.s. Thanks to those who contributed ideas! [This message has been edited by JackRosete (edited 28 October 2006).] IP: Logged | |
Phi Curtis Member |
![]() ![]() ![]() Hi Jack, You're too fast for me. I'm programming a variation of the idea, but I've taken a bit of a different approach (and yet not solved any of the problems that remain to be solved...). I'll post my results in a few days, most likely. Phil IP: Logged | |
JackRosete Member |
![]() ![]() ![]() Yes, there were some problems I simply couldn't figure out how to program. I'm going to take a better look at the original BBCut code over the next few weeks (my current knowledge of Supercollider is rather sketchy!). In the mean time, I look forward to trying out your Sound! Jack IP: Logged | |
Phi Curtis Member |
![]() ![]() ![]() Hi Jack, I've uploaded my sound to the Tweaky now: It's more of a step sequencer that you can program via the VCS than a randomly generated thing, but it gets fairly complex between the two different sequencers. Since we're generating the loops differently, I'm not sure how easy it would be to combine our approaches, but it could be interesting to try. Phil IP: Logged | |
JackRosete Member |
![]() ![]() ![]() Nice Sound Phil, I like the step-sequencer approach you've taken. Yes, it may be interesting to combine the two ideas ![]() IP: Logged |
All times are CT (US) | next newest topic | next oldest topic |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.