Support

If you have a problem or need to report a bug please email : support@dsprobotics.com

There are 3 sections to this support area:

DOWNLOADS: access to product manuals, support files and drivers

HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects

USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here

NEW REGISTRATIONS - please contact us if you wish to register on the forum

Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright

sound freezer

DSP related issues, mathematics, processing and techniques

Re: sound freezer

Postby tester » Thu May 01, 2014 7:31 pm

So in order to get the mem to array - it would have to be something like this?

//edit: pre-finale version.
Attachments
looper002.fsm
(291.78 KiB) Downloaded 1277 times
looper001.fsm
(179.6 KiB) Downloaded 1296 times
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
tester
 
Posts: 1786
Joined: Wed Jan 18, 2012 10:52 pm
Location: Poland, internet

Re: sound freezer

Postby tester » Thu May 01, 2014 7:57 pm

Okay, it seems this little fellow works.
Thanks KG!
Attachments
make-004.fsm
(152.75 KiB) Downloaded 1313 times
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
tester
 
Posts: 1786
Joined: Wed Jan 18, 2012 10:52 pm
Location: Poland, internet

Re: sound freezer

Postby tester » Thu May 01, 2014 11:22 pm

Okay, it appears that combined - it works, but... not as it should. Could you play with it a little bit? The design to which I'd like to integrate that stuff is posted here few posts earlier (temp.fsm).

p.s.:
Best way would be to focus the wave capture on zero crosspoint I guess.
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
tester
 
Posts: 1786
Joined: Wed Jan 18, 2012 10:52 pm
Location: Poland, internet

Re: sound freezer

Postby tester » Sat May 03, 2014 6:42 pm

Okay, I'm stuck.

1) Probably, there is no way to get sample accurate loop using waveread and wavewrite combined with selector, because selector is switched via greenery.

2) Plus - it would be better/recommended, to get the single-cycle wave file that is captured between zero-crossing points, and not randomly.

*

Question 1. How to capture and save to file - sample-accurate, single-cycle wave - from a stream? In this scenario - start/stop flipflop reference would be minus-to-plus change in the stream.

Question 2. Predicting that the single-cycle wave in the stream - may contain multiple zero crossings - how to capture what described above - having the "cycle lenght"? In this scenario - start would be the first minus-to-plus encountered, and stop would be after specified cycle lenght.
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
tester
 
Posts: 1786
Joined: Wed Jan 18, 2012 10:52 pm
Location: Poland, internet

Re: sound freezer

Postby KG_is_back » Sat May 03, 2014 10:05 pm

trogs float-array to mem experiment may help. basically it uses ruby to create a predefined-sized buffer (a sample frame) and sends its address as a value to assembler primitive. in assembler you can use this address in pretty much the same way you use arrays (write and read from it).
advantage over wave read/write is, that you can use jump commands to bypass both writing and reading.
disadvantages are that you'll need to write a lot of parts in assembly and also the initialization is quite unstable (even to a degree that the schematic cannot be loaded because it crashes on startup).
I may provide example later this evening...
KG_is_back
 
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: sound freezer

Postby tester » Sat May 03, 2014 10:18 pm

I'm starting to wonder about something else.

Here is the idea, I'm not sure how to compile it.

If indexes are in blue, driven by ramp, then ramp may be triggered once, by stream/blue change from minus to plus.

Ramp would be stopped and hold (thus - indexes would be stopped and hold) after reaching certain threshold (calculated from "lenght").

All happens in "read" mode, with no need to use selector. Because - there is a prim called mem to array. Thus - the loop would be stored directly as a text/shape. This array can be resampled then easily.

Second idea that comes to my mind - is to use the "lenght minus n%" (related to single precision accuracy) to open the way to stop the ramp - after reaching next closes minus to plus crossing.

Does it makes any sense? Is my understanding correct here?
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
tester
 
Posts: 1786
Joined: Wed Jan 18, 2012 10:52 pm
Location: Poland, internet

Re: sound freezer

Postby KG_is_back » Sat May 03, 2014 10:41 pm

yes, the ramp may be activated on first found zero crossing and stopped one sample after next zero crossing (or a first zero crossing after some "minimal period" length). Then only the desired part of mem would be read, because period would be found ... I'm actually working on that right now.
KG_is_back
 
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: sound freezer

Postby KG_is_back » Sun May 04, 2014 12:05 am

Here... a working prototype
Attachments
freeze.fsm
(373.51 KiB) Downloaded 1328 times
KG_is_back
 
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: sound freezer

Postby tester » Sun May 04, 2014 2:12 am

Thanks for effort.

Now - from what I can see - buffer can be reduced to 20000 if I understand it correctly.
From what I can see - buffer should not (or?) be changed during schematic running (invisible 100% CPU may happen).

So. Let say that I'm using Martin's crossfaded freezer, and I have frozen the sound.
I'm turning on (triggering) your prototype, to capture a sample of that sound.
Loop lenght = buffer * 1000/pitch in miliseconds; buffer = 1, so actually it's not in the equation.
(I'm not sure about the accuracy of lenght, so let say stop point should be found around "lenght - 1%"? Or?).

What should stop the prototype?
How do I get the captured sound (single cycle wave, sample accurate) to wav or text file? (mem2floatarray shows strange results)
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
tester
 
Posts: 1786
Joined: Wed Jan 18, 2012 10:52 pm
Location: Poland, internet

Re: sound freezer

Postby KG_is_back » Sun May 04, 2014 2:26 am

in my schematic in off state the freezer writes data to index [0] and reads from index[0] afterwards. In writing mode it writes to indexes 1,2,3,... until zero crossing is found and looping mode turns on. In looping mode it writes to index [0] and reads indexes [0] to period length.
the memory is fixed size - to save one period from it you have to extract section [0] to [period length].

note that there is a parameter which defines the minimum period length (basically defines how long is the algorithm latent after finding first zero crossing and stating to search for the second one). That should be calculated with from the pitch of your signal and some "tolerance" like:
minimal period length [in samples]=0.99[tolerance of 1%]*2/f[normalized frequency]
KG_is_back
 
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

PreviousNext

Return to DSP

Who is online

Users browsing this forum: No registered users and 51 guests