I think this one is a little beyond me being able to code it in any reasonable time, especially getting a usable GUI to go with it which so far has been the part of the API that I have struggled with the most, so I thought I put forwards an idea I had the other night which may be interesting to some of you out there.
The idea is to create shorter samples out of larger ones using what I assume could be called a granular approach. It could probably be extended to stretching samples to longer but for the moment let us take some simple cases of foreshortening.
Settings the GUI would have:
Granule Size
No. of Granules (that make up new sample)
Offset
Offset Snap
Crossfade Amount
(Possible an Advance Granule checkbox)
Note that nowhere do you set specifically the length of the final sample, nor do any pitch shifting. I will start with a basic example of a four bar break…
Say you have a 4 bar break of 4/4 measure. We will take a Granule Size of 1/16 (think of it as Slices of Original Sample.) Set to output a new sample made up of 4 of these granules.
Now the most likely result of this would be a sample of one bar length, each hit the kick drum on the 1 of each bar of the original sample. Not very interesting!
To change this to get a repetition of any of the other beats would be a case of changing the Offset value. 50% and you would get the new sample made of each of the 3rd beat of each bar. Offset Snap allows you to restrict the offset to full Granule lengths, or to have it be free flowing over all possible locations.
Crossfade Amount will allow you to mix each slices into the one that follows it. With most setting this probably wont work for breaks but could give some nice effects when shortening pads or other extended sounds. 0% and the granules are added end to end, 50% would leave the middle 50% of each granule unmixed, the first 25% with the preceding granule, the last 25% with the following granule. Unsure if granules should be extended for mixing of if it should cut into the original length (another checkbox option??)
((Granule Advance… Basically it advances by a full granule length after each inserted granule. So, back to the initial example of the 4 bar beat into 16 granules and new sample of 4 granules length. If we number each granule 1-16 then with Granule Advance Off the new sample will be 1-5-9-13. If we were to enable Granule Advance it would instead be 1-6-11-16 (1st beat, 2nd beat, 3rd beat, 4th beat of subsequent bars.) If it was 32 slices down to 8 granules length it would be 1-6-11-16-17-22-27-32.))
How to work with a Number Of Granules which isn’t a division of 1/Granule Size I’m not quite sure… Maybe instead of specifying the number of granules that make up final sample you could select how many granules to jump each time? More realistically is probably have Granule Size set the absolute Length and then have No. Of Granules determine each start position. Have a No Of Granules larger than Granule Size would also give longer samples that the original, so guess it should work both ways. I guess that would work overall…
Pie in the sky? Ridiculous? Not useful in the slightest? Or does somebody think this could actually be worth running with??