I started doing serious work on the Pd programming for my project. The goal was to build a software sample player and live performance patch to tie everything together. As it happens, Pd is not exactly built for this.
There are two objects to read audio files: readsf~ and soundfiler~. The former streams the audio from disk while the latter writes the audio file to a table that you can then scrub through. The idea is that there are some rumbling, drone sounds that occur while the installation is at rest. As people enter the installation space, the patch begins to react and the calm, peaceful samples give way to more activity.
Anytime you’re working with audio files, you’re pretty much streaming them from, if you’ve broken your HD into volumes, the fastest part of the disk. This is crucial for uninterrupted playback. Unfortunately, readsf~ doesn’t work well with looping. Pd requires you to re-open the file each time you want to play it and then send the object a “start” message. This introduces unacceptable delay on the order of seconds (!) - may not sound like a lot, but your ear will easily pick up on millisecond delays. Mine will anyway. It’s not even that I’m getting a little zipper noise - it’s flat out dropping out for a second or two.
I experimented running two instances of readsf~ so that the second gets cued up seconds before the first finishes in hopes of moving seamlessly between the two. This works a little, but not great. It reduces the delay to a few milliseconds, but there’s still the issue of zipper noise.
One possibility is to tweak this configuration, but it’s horrible programming and needlessly complex. As a last resort, I will try sizable fade-ins and fade-outs to give me some breathing room with the overlap. It’s not a huge deal because I’m not working musically in the temporal sense. There are no beats or pulses - just atmospheric ambience. If I DID want to add beats, this will not work at all.
Soundfiler~, as I said before, writes the audio files to a table. This is great for short loops. You connect a sawtooth wave to a tabread~ (table reading) object and it continually cycles through it. You can even go backwards or scrub through the waveform. The problem with this approach is that all the sound files eventually get stored in the patch. My 60-second samples that I want to loop each need a 2.5 meg graph to hold them. Once more than two of these are present, Pd starts behaving erratically. It becomes unstable to the point that it’s unusable.
A possibility for this method is to cut my samples - maybe to one 8th the size. Then they will loop fine, but they’ll also be fairly short and anyone who stands just beyond the installation will be able to notice the same sounds repeating over and over again. I could work with randomly alternating samples so that periodically, something changes, just infrequently enough to not be easily detectable.
So, I’ve got one object that’s good for streaming, but bad for looping; and one object that’s great for looping, but bad for reading. As the guy trying to remove soap scum from his shower with a tooth brush always says, “there’s got to be a better way!”
Recent Comments