From the original SynthMaker forum (2004–2014), with its members’ names and dates.
angstrom ·
I have so many problems with this, it is yet another attempt my eternal project with SM - a long buffer which I can delete the contents on demand. I am still trying to re-create my (se) Angstrolooper after over a year of SM and still failing.
download OSM
Instructions
you may as well hit 'delete' when it loads , then set the first player going - it will play a drum loop into the buffer. now turn the player back to 'stop'. note that when the buffer loops round the buffer is truncated.
Does the mem component have a limit on the amount of samples it can hold?
because that would be one thing that may explain one part of the problem
why doesn't the white wave redraw despite trying a lot of different ways of kicking it (t25 for example)
Also, why does the 'delete' button sometimes delete the buffer, but sometimes when create is pressed the same buffer contents will come back !
and - why does the performance of this osm degrade over time so that it requires a re-start after 20 mins
why the hell cant I write a long delay whose buffer I can drop succesfully
aaaargh. this is killing me, what a pain
😕
oddson ·
...why the hell cant I write a long delay whose buffer I can drop succesfully
I haven't looked closely enough at what you're up to to answer the rest but I have some info on this aspect.
The multiplexer used to clear the data stream on changes. I think this has since been fixed.
When I asked how to get this behavoir without relying on the buggy multiplexer Jorge said it would be no big deal to whip up a primitive that cleared the audio buffer.
See this thread.
I'd still like to see this primitive added to the toolbox.
angstrom ·
yes, sadly that function has been removed.
I realised last night that I only started making VSTi so I could make a looper exactly how I wanted one. That's the only reason I started. What an exercise in Yak shaving
I realised I have spent nearly three years of evenings leaning programs to make a long bpm matched delay with a flushable buffer. Only to run into a wall at the last stage in both programs.
[url=http://www.plugins.timeshard.com/angstrolooper/index.htm]
[/url]
I got so far with SE, but then ran into issues that would mean writing the majority of it in C anyway, so I decided to learn SM as it 'went deeper' even though it would mean starting all over again.
In retrospect I would have been better learning more functional C in that time, I'm always going to run up against an issue where I am reliant on a developer to implement something so I can continue. I hate being in such a reliant position.
As an example I actually thought about learning ASM to see if I could get round this buffer issue!
I realised that it was overkill, it would probably be easier to learn C and ignore the SM IDE !
3 years is a bit long to be stuck on one project.
SM is a great app, but at the end of the day I realise that it will be in Version 3 before the specific things that I want are available.
ah well, break out the "C++ for dummies" type books then
🙁
oddson ·
Jorge may still make that primitive to stop audio processes and fix this issue for you. So maybe wait for a response before giving up on SM for this project.
stefan ·
If it's just a delay, and not on polyphonic streams, you could always use buffers instead of arrays (that is, use the buffer components and not coded arrays). These could be cleared with a loop setting the entire buffer to 0, no?
I hope I'm not wrong in this...
angstrom ·
Hi stefan , the above example does use the buffer components, I spent so long trying to use a code based version (which is more intuitive to me) but there is definitely no way to clear a code buffer.
the buffer component has a 'delete' input which was calling out to me, but I am flailing around with it. not really sure what is going wrong. it seems a lot more troublesome than the code version.
I'm not sure that the buffer components store as much as I require as the example seems to cut out after about 2 seconds. I forget , but it's not long enough anyway.
as far as writing 0 to the buffer, 8 seconds (about 4 bars at 120bpm) at 44.1 = 352,800 zeros to be written. I think the limit on loops has been lifted now but that's a lot of writing to be done 'instantly'
Usually I only go to 16 bars in a loop but sometimes its 32 bars and usually at lower tempi than 120 bpm
8 bars at 80bpm = 24 secs = 1,058,400 zeros.
I've actually not tried this writing zeros aproach because I suspect it might take a while to write those, and that might impact playability.
but what the hell, I've tried everything else.
stefan ·
The delete trigger on the mem create component is not for clearing the memory, but for releasing / deleting it.
Writing zeroes to a buffer is the only way to clear it, but it might be faster if a component could do it instead of a loop. I haven't tried it myself.
There should really not be a 2 (or so) seconds limit on the buffer, and I am quite sure Jorge made a "audio recorder" example that could record more than 2 seconds. Maybe a bug has been introduced somewhere down the road?
sambean ·
How about using multiple buffers, those that are not in use are first cleared, then disconnected from the audio path then released from memory. You could perhaps ensure that a second empty buffer is always available for fast switching.. This though would mean it would require at least twice as much memory..
Or how about when clearing overwrite the sample in front of the pointer with a zero for a period = buffer size.
Even in C I don't think there is an instantanious way to clear a buffer while running at sample rate, you'd need to come up with a trick to do it as the player was running..
Sam
angstrom ·
@ stefan - I thought releasing clearing the buffer (and then re-creating it) would be functionally the same as writing zeros ?
I've obviously got a lot of scope to be wrong here as proven by my attempts!
I searched for and found Jorges 'audio recorder' on my machine (I'd tried it before) and loaded it up, that doesn't seem to have the 'short buffer' time issue - it's obviously some stupid mistake I was making in my own attempt.
I didn't use Jorges one as a guide previously because it used to hang my machine (some version around SM0.95 k - 0.95 t) , I meant to bring it up - but it seems resolved now other than the GUI runs very slow.
I think I should be able to take something from it to learn more about the Mem primitives
@ sam
I've tried the 'second buffer' aproach before, apart from the double memory issue, there is also the situation of users hitting delete twice. What would happen is from a full 'A' buffer - they hit delete, switch over to the B-buffer, instantly record a bum note, hit delete again - and go back to buffer A ... which is most likely still dealing with the previous delete thread.
It seemed like a lot of tangled threads!
the thing is - 'delete' (release mem) , followed by 'create' does work most of the time- but once in a while I seem to get it re-instating the previous Mem .
I have every confidence that the weak link in the chain here is me BTW.
I am the common factor every time this thing hasn't worked so far!
anyway - thanks for the input, I will persevere, I think I have a lead on a few of the issues I was facing. So that's good 🙂
stefan ·
LOL, don't be so hard on yourself angstrom. If there _would've_ been an obvious solution within SM to the issue I have no doubts you would've explored that by now 🙂
Keep us updated on this (with jorges schematic etc as reference).
malc ·
Sorry, I seem to have completely missed this thread. I think the component for stopping the sound processes will be easy so I can look at getting that sorted for you.
I haven't read the whole of this thread in detail yet - sounds like there are some mem/buffer/array issues as well. I'll digest and look into it.
Wrote something here? To have a post removed or your name hidden, write to [email protected].