Miller's Pitch Shifting Example From His Book
Cool. Thanks, @jameslo.
So, getting to the Pitch Shifter example itself, it's easy enough to follow the transposition factor from the math to patch but I'm wondering why the -1 preceding the tape head rotation frequency isn't the current sample rate, as per the math?
f = (t - 1) * R / s
I see where one is subtracted from t and where the window size is divided into that but why does R = -1? Is this some other interpretation of 'sample rate?'
Miller's Pitch Shifting Example From His Book
I've never really dug into pitch shifting before and I have started looking at Miller's pitch shifting patch example from his book but I'm a little confused by the graph in this related example, specifically Fig 7. 17. (I think just because how the qualifying text is worded). I have a few clarifying questions so hopefully someone can humor me.
- The diagonal line from origin (0,0) is the input signal; the dotted line is the variable delay line; the diagonal line at D is the delay line over time relative to the input signal, yes?
- D is the distance from the origin point to the point marked D on the x axis, correct? This is the max length of the delay line?
- The y axis shows the quantity
n - d[n]
whered[n]
represents the delay in samples and this is where I get a bit fuzzy: graphically, what is the output sample here? Why am I subtracting? What am I subtracting?
Thanks in advance!
Starting a Pure Data Wiki (Database/Examples Collection)
Another sample from the work-in-progress ...
https://docs.google.com/document/d/1tzS2KU8x31JXoUxmkEr5WikJvxcrgHa4C0vM8LBw49Q
I thought it would be worth having a category for these more self-contained collections
Modular Systems in Pd
ACRE
https://git.iem.at/pd/acre
ARGOPd
http://gerard.paresys.free.fr/ARGOPd/
Automatonism
https://www.automatonism.com/
Context
https://github.com/LGoodacre/context-sequencer
https://contextsequencer.wordpress.com/
DENSO
https://www.d-e-n-s-o.org/pure
DIY
http://pdpatchrepo.info/patches/patch/76
Kraken - Virtual Guitar Effects Pedal Board
https://forum.pdpatchrepo.info/topic/11999/kraken-a-low-cpu-compact-highly-versatile-guitar-effects-stompbox
LWM Rack
http://lwmmusic.com/software-lwmrack.html
La Malinette
http://malinette.info/en/#home
Open toolkit for hardware and software interactive art-making systems
Mandril Boxes
http://musa.poperbu.net/index.php/puredata-mainmenu-50#mandril
Metastudio
http://www.sharktracks.co.uk/html/software.html
Muselectron Studio
http://www.muselectron.it/MuselectronStudio/Studio_index.html
NetPd
http://www.netpd.org
NoxSiren
https://forum.pdpatchrepo.info/topic/13122/noxsiren-modular-synthesizer-system-v10
Pd Modular Synthesizer
https://github.com/chrisbeckstrom/pd_modular_synth
Pd-Modular
https://github.com/emssej/pd-modular
PdRacks
https://github.com/jyg/pdr
Proceso
https://patchstorage.com/proceso/
Universal Polyphonic Player (UPP)
https://grrrr.org/research/software/upp/
https://github.com/grrrr/upp
VVD - Virtual (Virtual) Devices
http://www.martin-brinkmann.de/pd/vvd.zip
“a virtual modular-rack” from http://www.martin-brinkmann.de/pd-patches.html
XODULAR
https://patchstorage.com/xodular/
A previous incarnation of Automatonism
any others that should be in there?
osc~ presentation with or without arguments
@auaa If you just "put" an array without setting its size then it will be 100 samples wide.
For a 50Hz sine wave to do a complete cycle.... 0 to 1 to 0 to -1 to 0.... requires 882 samples at 44100 samples per second or 960 samples at 48000 (samplerate... samples per second / cycles per second).
So you just see a small part of the wave in your 100 sample window.
And they are different because which bit of the wave you see in the array depends on the point that the wave is at in its cycle when you bang [tabwrite~]
You can make them the same by banging them at the same time and reseting their phase just before they write.....
David.
Also you can write a sine wave into the array using the [simesum( message.
15.array.pd
There isn't much help, but I remember there being more help in the "Pd Floss Manual" which you should find with a google search.
Here...... https://archive.flossmanuals.net/pure-data/list-of-objects/introduction.html
Or more specifically here.....https://archive.flossmanuals.net/pure-data/audio-tutorials/generating-waveforms.html
Shared references to stateful objects?
@ddw_music As your send inside the abstraction is static due to the creation argument it would be more flexible to just use [list-map] from list-abs and leave the send outside the abstraction.
As to your critique: There is no comprehensive list of externals as Pd is an open system, where everybody can make externals. Many are on Deken, others are just on some Github or website.
Here are some lists of externals/objects:
- http://write.flossmanuals.net/pure-data/glue/ (other areas on the lower part of the navigation)
- http://pure-data.sourceforge.net/old/documentation.php
- https://puredata.info/docs/ListOfPdExternals/
- https://archive.flossmanuals.net/pure-data/list-of-objects/introduction.html
- http://blazicek.net/list_of_pure_data_objects.html
I believe that any community effort to build a better, up to date and more beautiful list with tags, categories and more will be highly appreciated.
RMS vs FFT complex magnitudes
I'm up to the beginning of Katja V's Fourier Transform section and I've already found a few answers to my questions. I also managed to get the sum of FFT term amplitudes to match the RMS value for arbitrary input. Here's the patch:
Inside [pd computerMagnitudes]:
compareTimeFreqAmpl2.pd
All the things on the left are just tools to fill the input table, but you can also just draw. Once you have your signal, bang computeMagnitudes to measure its amplitude both ways.
I made a couple of simplifications that not only got the test working but also gave me more confidence that I was comparing apples to apples:
- I'm computing RMS and the FFT from a single static 1024 vector, so I'm now comparing two views of the exact same signal and there's no need for averaging.
- I learned from Katja that if you perform a complex FFT on a real signal, you don't have to worry about which terms to double because the FFT gives you those terms's double in the upper half of the output explicitly. The real FFT skips the upper half for efficiency because it's related to the lower half.
- I also learned that even the cosine and sine components of each harmonic are uncorrelated signals, so I now sum their magnitudes individually across all harmonics. There's no need to compute the magnitude of each FFT term first.
So I think the issue I was having with noise was just an artifact of a badly programmed test, probably having to do with the way I was averaging term magnitudes, but I don't really know.
7/18/2020 update: I've found info in Katja's blog that suggests that this patch is wrong (or maybe even not possible). Exhibit A:
IMHO, this contradicts what she spent so much effort establishing on the prior two pages (http://www.katjaas.nl/sinusoids2/sinusoids2.html
http://www.katjaas.nl/correlation/correlation.html), that the cos and sine components of all FFT terms are orthogonal. If they're orthogonal, how could they cancel each other out?
She raises a another point on the FFT output page that really makes me wonder why my patch seems to work:
In this case I agree--Fourier coefficents are really the peak amplitudes of the cos and sine components--but my confusion over this is what made me program the patch the way that I did. So why is it working?
external objects will only load after opening help file
Here are at least some hints from the mailing list:
Dan Wilcox (Feb 12 2020):
Deken initially did this, but there are problems with this approach as it partially negates the usage of [declare]. It is highly recommended to use [declare] moving forward.
https://lists.puredata.info/pipermail/pd-list/2020-02/126896.html
The idea with [declare] is similar to Python "import". We have moved away from Pd-extended's "just load everything into the same name space" approach towards a more explicit declaration for paths and libs. This requires an extra step but it also helps make patches more portable in that it is much clearer to see what libraries the original author specifies as opposed to "oh I guess it worked in Pd-extedend but I have no idea what externals those objects come from."
https://lists.puredata.info/pipermail/pd-list/2020-02/126906.html
Here is a proposal from 2018 to get [declare external]: https://github.com/pure-data/pure-data/pull/440
A patch to do some Pixel art-V2
You're right. Piet look georgous ! What's your experience with it ?
@weightless made some great patchs that involve cellular automata.
https://www.dangermouse.net/esoteric/piet.html
https://www.dangermouse.net/esoteric/piet/samples.html
getting started with webPd
Hi all. I'm having trouble testing Pd patches via webPd as instructed in this step-by-step guide .
I've made a patch (using only the available objects) that includes a synth and a "dsp 1" message so that when the patch is loaded a middle C should start sounding. I included this patch in a folder with webPd.js and jquery.js libraries, and followed the example for the index.html file. To mock same origin policy, I used python through the terminal to enable a web server using the "python -m SimpleHTTPServer" command line, and got the following on the terminal:
Serving HTTP on 0.0.0.0 port 8000 ...
Which seems fine, however, whenever I access the link http://localhost:8000/index.html, I got no sound at all despite the fact everything seems ok in the terminal:
1.0.0.127.in-addr.arpa - - [16/Dec/2016 14:39:07] "GET /index.html HTTP/1.1" 200 -
1.0.0.127.in-addr.arpa - - [16/Dec/2016 14:39:08] "GET /js/jquery.js HTTP/1.1" 200 -
1.0.0.127.in-addr.arpa - - [16/Dec/2016 14:39:08] "GET /js/webpd-latest.min.js HTTP/1.1" 200 -
1.0.0.127.in-addr.arpa - - [16/Dec/2016 14:39:08] "GET /patches/myPatch.pd HTTP/1.1" 200 -
I tried as well running things locally in Firefox by changing the "security.fileuri.strict_origin_policy" to false. I'm using Firefix 48.0.2.
I wonder if I'm missing something very obvious but I've checked the index.html and it includes the Pd.start(), and so the patch should start sounding when the url is loaded (shouldn't it?). Also, I think the problem lives in the way I'm avoiding the same origin policy since b2renger webPd examples (which run online) also won't run locally on my machine.
Any hints on what I'm doing wrong? Here's my patch myProject.zip
Cheers
Processing.js and purr-data (beta4)
Hello,
I recently read this tutorial about Processing.js : http://ericmedine.com/processing-for-ios/
and thought maybe it's possible to run processing.js inside purr-data. As a quick test I just copied Processing.js and the corresponding test.html file to /usr/lib/pd-l2ork/bin (purr-data beta4). Then i renamed dialog_iemgui.html to dialog_iemgui_disabled.html and renamed my test.html file (the processing.js-sketch) to dialog_iemgui.html.
Then... I launched purr-data created a new Patch, created a v-slider and opend the properties from the right click menu. And as you can see in the attached image, the processing sketch is displayed!
I think it would be cool if we could have an external wich is able to load Processing.Js sketches and somehow talk to Pd. I think we would need some kind of interface to send variables to Pd.
I wasn't able to load a Processing.js sketch directly to the patching-canvas. If someone could give me some hints how to do that and get some variables out of the Processing sketch to talk to pd, I'd be very glad.