PVBox -- Drew Krause This is a set of perl scripts which exploit some of Eric Lyon's PowerPV command-line pv utilities and lets you use them as command-line 'effects' on wav files. They read & write wav files. I was working in Linux, please don't expect any help setting these up in a non-Unix environment. You are going to need a lot of stuff to run these scripts. PowerPV http://ringo.sfc.keio.ac.jp/~eric/freesoft.html CARL/Cmusic (for some scripts) http://www.crca.ucsd.edu/cmusic PVC (for some scripts) http://silvertone.princeton.edu/winham/PSK/koonce.html WaveTools http://tph.tuwien.ac.at/~oemer/wavetools.html Sox http://www.spies.com/Sox/ Wavplay from your favorite linux utility ftp site. The 'mixer' utility from csound from your favorite linux utility ftp site. SETTING UP Now, I'm assuming that you've installed the above and the programs are in your path. You now need to do the following: 1) Create the directories 'timbre.d' and 'shapes.d' in your home directory 2) Move 'morehi' to 'timbre.d' 3) Move 'updown01' to 'shapes.d' 4) Now you can use these examples when the script asks for a timbre or shape, or you can create them yourself (using CARL) and put them into these directories. ABOUT SOUNDFILES PowerPV does its magic on float files, which are not the same thing as sound files. Much of the work of these scripts has to do with converting successfully from one type of file to the other. They do this by calling the 'wvf' and 'flw' scripts, which you'll find in this directory. YOU SHOULD EXAMINE AND TEST THESE 2 SCRIPTS, THEN PUT THEM IN YOUR PATH so that any of the other scripts can call them. Briefly, 'wvf' takes a wave file, converts it to au with sox, then converts it to floats with psndin (fromsnd might work too) 'flw' takes a float file, converts it to au with normtosnd, then converts it to wav with sox The best way to test these is to do wvf on a wav file, then flw on the floats that it created, thus converting it back to wav. If the resulting file works and you got no errors, you may be in business. You can get 'normtosnd' and 'psndin' from Christopher Penrose's PVNation distribution. Substitute the conversion programs so that they'll work with your system. PERL 101 For the perl newbies out there, make sure the first line of each script is the same as what you get from typing 'which perl' at the command line. Then 'chmod +x script.pl' and fire away. Good luck! Drew Krause drkrause@mindspring.com #### CHOPS.PL written by Drew Krause #### takes a .wav file and removes random segments from it #### specify number of chops at command line #### use as "$> chops.pl myfile.wav 8" #### writes file "chops.wav" #### CROWNS.PL written by Drew Krause #### takes a .wav file and applies the 'crown' routine to it #### specify number of iterations at command line #### use as "$> crowns.pl myfile.wav 8" #### writes file "crowns.wav" #### MAPPECHO.PL written by Drew Krause #### takes a .wav file and applies 'pvmapp' to it in overlapping #### fashion #### specify number of iterations at command line #### use as "$> mappecho.pl myfile.wav 8" #### MAPPS.PL written by Drew Krause #### takes a .wav file and applies 'pvmapp' to it end-to-end #### iterations become progressively shorter and higher #### specify number of iterations at command line #### use as "$> mapps.pl myfile.wav 8" #### MSECHO.PL written by Drew Krause #### takes a .wav file and applies random 'mussel' to it #### in overlapping fashion #### specify number of iterations at command line #### use as "$> msecho.pl myfile.wav 8" #### MUSLOW.PL written by Drew Krause #### takes a .wav file and applies 'mussel' to it #### timbre is $resynth (of your choice) #### also scales the length of the file #### specify number of iterations at command line #### use as "$> muslow.pl myfile.wav mytimbre 1.5" #### MUSSEL.PL written by Drew Krause #### takes a .wav file and applies 'mussel' to it #### timbre file is $resynth (your choice) #### use as "$> mussel.pl myfile.wav mytimbre" #### REDCLAM.PL written by Drew Krause #### takes a .wav file and applies a random 'redclam' to it #### use as "$> redclam.pl myfile.wav 8" #### REDSLOW.PL written by Drew Krause #### takes a .wav file and applies a random 'redclam' to it #### also scales length of output file #### use as "$> redslow.pl myfile.wav 1.5" #### SAFLECHO.PL written by Drew Krause #### takes a .wav file and applies 'safflower' to it in overlapping #### fashion #### specify number of iterations at command line #### use as "$> saflecho.pl myfile.wav 8" #### SELFCLAM.PL written by Drew Krause #### takes a .wav file and maps 'redclam' to it between #### timbres $wave1 and $wave2 according to its envelope #### NOTE: you must have 'envelope' from PVC in your path! #### use as "$> selfclam.pl myfile.wav" #### SELFCLAM2.PL written by Drew Krause #### takes a .wav file and maps 'redclam' to it between #### timbres $wave1 and $wave2 according to its centroid #### NOTE: you must have 'centroid' from PVC in your path! #### use as "$> selfclam2.pl myfile.wav" #### SELFTEMP.PL written by Drew Krause #### takes a .wav file and maps 'temper' to it #### according to its envelope #### NOTE: you must have 'envelope' from PVC in your path! #### use as "$> selftemp.pl myfile.wav" #### SELFTEMP2.PL written by Drew Krause #### takes a .wav file and maps 'temper' to it #### according to its centroid #### NOTE: you must have 'centroid' from PVC in your path! #### use as "$> selftemp2.pl myfile.wav" #### SEQSEGS.PL written by Drew Krause #### takes a .wav file, saves random segments of it, #### and places them end-to-end #### you specify the number of segments #### use as "$> seqsegs.pl myfile.wav 6" #### SHING.PL written by Drew Krause #### takes a .wav file and applies 'shingles' to it #### uses a random decay function #### use as "$> shing.pl myfile.wav" #### SHRINKS.PL written by Drew Krause #### takes a .wav file and makes it progressively faster #### and (hence) shorter #### you specify the number of iterations #### use as "$> shrinks.pl myfile.wav 5" #### SLICE.PL written by Drew Krause #### takes a .wav file and replays it starting later & later #### you specify the number of iterations #### use as "$> slice.pl myfile.wav 4" #### SQECHO.PL written by Drew Krause #### takes a .wav file and applies 'squeegie' to it #### with random warp and offset for each iteration #### #### use as "$> sqecho.pl myfile.wav 4" #### SQRAND.PL written by Drew Krause #### takes a .wav file and applies 'squeegie' to it #### with random warp and offset #### use as "$> sqrand.pl myfile.wav" #### SQRPT.PL written by Drew Krause #### takes a .wav file and applies 'squeegie' to it #### with random warp and offset for each iteration #### places them end-to-end #### use as "$> sqrpt.pl myfile.wav 4" #### SQSEGS.PL written by Drew Krause #### takes a .wav file and applies 'squeegie' to #### randomly-chosen segments of it #### with random warp and offset for each iteration #### #### use as "$> sqsegs.pl myfile.wav 4" #### SQUEEGIE.PL written by Drew Krause #### takes a .wav file and applies 'squeegie' to it #### with a $warp and $offset that you specify #### #### use as "$> squeegie.pl myfile.wav warpshape offsetshape" #### STRCHMIX.PL written by Drew Krause #### takes a .wav file, changes its length with each #### iteration then mixes them together w/overlap #### #### use as "$> strchmix.pl myfile.wav 4" #### STRECHO.PL written by Drew Krause #### takes a .wav file, changes its length with each #### iteration then mixes them together w/overlap #### #### use as "$> strecho.pl myfile.wav 4" #### TEMPERS.PL written by Drew Krause #### takes a .wav file, modifies pitch and speed at each #### iteration with 'temper' then places them end-to-end #### #### use as "$> tempers.pl myfile.wav 4" #### TMPRECHO.PL written by Drew Krause #### takes a .wav file, modifies pitch and speed at each #### iteration with 'temper' then overlaps them #### #### use as "$> tmprecho.pl myfile.wav 4" #### TMPRMIX.PL written by Drew Krause #### takes a .wav file, modifies pitch and speed at each #### iteration with 'temper' and overlaps them #### #### use as "$> tmprmix.pl myfile.wav 4" #### TOFECHO.PL written by Drew Krause #### takes a .wav file, modifies speed and applies 'tofu' #### with random warp and offset at each iteration #### then overlaps them #### use as "$> tofecho.pl myfile.wav 4" #### TOFRAND.PL written by Drew Krause #### takes a .wav file and applies 'tofu' #### with random warp and offset #### use as "$> tofrand.pl myfile.wav" #### TOFRPT.PL written by Drew Krause #### takes a .wav file applies 'tofu' #### with random warp and offset at each iteration #### then places them end-to-end #### use as "$> tofrpt.pl myfile.wav 4" #### TOFSEGS.PL written by Drew Krause #### takes a .wav file and applies 'tofu' to random segments #### with random warp and offset at each iteration #### then places them end-to-end #### use as "$> tofecho.pl myfile.wav 4" #### TOFU.PL written by Drew Krause #### takes a .wav file, modifies speech and applies 'tofu' #### according to your choice of $warp and $offset #### (use cmusic gen functions for these) #### use as "$> tofu.pl myfile.wav warpfile offsetfile"