Hi all,
I'm a general programmer, currently focusing on Android mobile development.
I'd like to realize an app that records a short voice message and lets you hear it back with different distorsion effects applied on.
I just need classic filters (reverb, multiband compression, pitch shifting...), but since I have no theory background on signal processing, I've been looking for a library with prebuilt effects or a way to design them in pure java in a relatively easy way (I mean, without reading 30 books on DSP).
Now, why I'm writing this post? Well, in my search for such library I came across pd and I found it amazing, especially because I'm fascinated by generative software and art and I see great potential in that sense, maybe in future projects. I've read most of this book http://www.pd-tutorial.com and other tutorials and played around with pd. So I decided to figure a solution for my problem through pd even if it doesn't fit my needs so well because I essentially need non-realtime batch processing. On the other hand it looks like I would be able to find all the filters I need, ready to use, apart from little adjustments (and, in particular, lurking this forum for a couple of days was very helpful, you guys are great!).
So, that's what I need to do:
| -> filter chain 1 -> "wet" sound 1 in array_1
| -> filter chain 2 -> "wet" sound 2 in array_2
Android mic -> original snd in array | -> ...
| -> ...
| -> filter chain n -> "wet" sound n in array_n
Then the user of the app would be able to play each of the processed sounds by tapping different buttons and save them to disk.
Currently, my only concern is about processing speed. Since, as far as I learnt in the past days, pd is intended for realtime processing, its speed is limited by the sampling rate, but I want to process the original sound as fast as possible, I want CPU speed to be the limit. I've read on this forum about upsampling to speed up things, but it looks like it could introduce glitches, jumps and may require tweaks. It seems a bit dirty, plus it's not completely clear to me yet.
What do you think about that? Do you think I can make an "instantaneous" processing in an effective way using libpd and pd patches on a mobile device... or maybe it's a naive idea?
I'm sorry for the length of my post and for my English.
Ideas/suggestions are welcome!
Thanks in advance!