-
Architekt
Hi there,
I'm building a DJ patch - the whole thing is nearly complete apart from one final problem - accurately setting the playback speed of tracks.
For example, to mix a track at 145 bpm into a track at 146 bpm, you need to increase its playback speed by about 0.7% - playing the track back at a speed of 1.007.
I noticed I couldn't match the two tracks when applying this increase. I wanted to test what was going on by taking the analog output of my soundcard and feeding that into another soundcard which was recording the input in logic (both 44.1khz). I then ran bpm tests on the recorded full tracks using Mixmeister bpm detector (its really accurate!).
What I found was a 145 bpm track was actually being played back at 144.68 bpm, at a play speed of 1. It should have been 145. And when I increased the speed by 0.7% (1.007) the resulting bpm was 144.89, only a 0.145% increase [from 144.68 to 144.89]...
I then reset to 1 playback speed and rerecorded it, it returned to 144.68 - at least it is consistent!
I then set the playback speed to 1.014 (should have been about 2 bpm increase from 145 - 147) and the bpm read 147.69. That's a 2.038% increase [from 144.68 to 147.69], not 1.4%.
Another 145 bpm track gave a reading of 144.71 at playback speed of 1, then 145.67 at playback speed of 1.007. Quite confusing!
Any insight into this problem would be really appreciated! A simplified version of the DJ patch is attached.
Thanks in advance!
-
Architekt
Hi,
I'm working on my final year engineering project in Auckland, NZ, and I'm developing a DJ system that basically replicates what a CDJ does with pure data. Ofcourse, I came across the soundfiler issue of audio dropouts when loading tracks.
I thought of a potential way around this issue:
- Firstly using tables instead of arrays to reduce loading time
- Secondly, break the track into smaller parts (~300000 samples). This was done by playing the first 300000 samples, then incrementing the start position by 300000 samples and playing that, and so on.
This works sometimes. I've found that using Select to detect when the samples reach 300000, or 299999, does not trigger. If I use an if statement for triggering a bang, it only works if I make the threshold < 299500. If I set it to less, it does not always trigger the new section to begin playing...
Is there some sort of accuracy limitation? Why can't pure data detect the 300000th sample and trigger the new section when it's been detected?
Thanks in advance for any help!
Cheers