From 4d84d14ac1aa13958eaa2971b03f7f929a519105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Fri, 8 Feb 2008 13:00:32 +0000 Subject: reorganized svn path=/trunk/; revision=9400 --- desiredata/COPYING | 30 + desiredata/COPYING.desire-client.txt | 340 + desiredata/INSTALL.txt | 73 + desiredata/LICENSE.txt | 35 + desiredata/README.txt | 37 + desiredata/doc/1.manual/1.introduction.txt | 23 + desiredata/doc/1.manual/fig1.1.png | Bin 0 -> 3586 bytes desiredata/doc/1.manual/fig1.2.jpg | Bin 0 -> 4361 bytes desiredata/doc/1.manual/fig1.3.jpg | Bin 0 -> 1056 bytes desiredata/doc/1.manual/fig1.4.png | Bin 0 -> 1154 bytes desiredata/doc/1.manual/fig1.5.jpg | Bin 0 -> 6187 bytes desiredata/doc/1.manual/fig11.1.png | Bin 0 -> 14795 bytes desiredata/doc/1.manual/fig11.2.png | Bin 0 -> 4333 bytes desiredata/doc/1.manual/fig11.3.png | Bin 0 -> 5014 bytes desiredata/doc/1.manual/fig11.4.png | Bin 0 -> 4573 bytes desiredata/doc/1.manual/fig3.1.jpg | Bin 0 -> 1201 bytes desiredata/doc/1.manual/fig3.10.jpg | Bin 0 -> 2884 bytes desiredata/doc/1.manual/fig3.2.jpg | Bin 0 -> 2932 bytes desiredata/doc/1.manual/fig3.3.jpg | Bin 0 -> 2177 bytes desiredata/doc/1.manual/fig3.4.jpg | Bin 0 -> 2359 bytes desiredata/doc/1.manual/fig3.5.jpg | Bin 0 -> 2029 bytes desiredata/doc/1.manual/fig3.6.jpg | Bin 0 -> 2977 bytes desiredata/doc/1.manual/fig3.7.jpg | Bin 0 -> 2846 bytes desiredata/doc/1.manual/fig3.8.jpg | Bin 0 -> 1267 bytes desiredata/doc/1.manual/fig3.9.jpg | Bin 0 -> 5708 bytes desiredata/doc/1.manual/fig7.1.jpg | Bin 0 -> 2410 bytes desiredata/doc/1.manual/fig7.2.jpg | Bin 0 -> 7327 bytes desiredata/doc/1.manual/fig7.3.jpg | Bin 0 -> 2588 bytes desiredata/doc/1.manual/fig7.4.jpg | Bin 0 -> 3245 bytes desiredata/doc/1.manual/fig7.5.jpg | Bin 0 -> 2490 bytes desiredata/doc/1.manual/fig7.6.jpg | Bin 0 -> 7758 bytes desiredata/doc/1.manual/fig8.1.jpg | Bin 0 -> 2551 bytes desiredata/doc/1.manual/fig8.2.jpg | Bin 0 -> 2414 bytes desiredata/doc/1.manual/fig8.3.jpg | Bin 0 -> 2036 bytes desiredata/doc/1.manual/fig8.4.jpg | Bin 0 -> 3428 bytes desiredata/doc/1.manual/fig8.5.jpg | Bin 0 -> 5182 bytes desiredata/doc/1.manual/fig8.6.jpg | Bin 0 -> 7549 bytes desiredata/doc/1.manual/fig9.1.jpg | Bin 0 -> 15267 bytes desiredata/doc/1.manual/fig9.2.jpg | Bin 0 -> 17390 bytes desiredata/doc/1.manual/fig9.3.jpg | Bin 0 -> 38881 bytes desiredata/doc/1.manual/index.htm | 165 + desiredata/doc/1.manual/pdmanual.css | 39 + desiredata/doc/1.manual/x1.htm | 150 + desiredata/doc/1.manual/x2.htm | 1276 +++ desiredata/doc/1.manual/x3.htm | 790 ++ desiredata/doc/1.manual/x4.htm | 61 + desiredata/doc/1.manual/x5.htm | 1568 ++++ desiredata/doc/2.control.examples/00.INTRO.txt | 19 + .../doc/2.control.examples/01.PART1.hello.pd | 16 + desiredata/doc/2.control.examples/02.editing.pd | 17 + .../doc/2.control.examples/03.connections.pd | 58 + desiredata/doc/2.control.examples/04.messages.pd | 35 + desiredata/doc/2.control.examples/05.counter.pd | 45 + .../doc/2.control.examples/06.more.counters.pd | 55 + desiredata/doc/2.control.examples/07.time.pd | 39 + desiredata/doc/2.control.examples/08.depthfirst.pd | 48 + .../doc/2.control.examples/09.send_receive.pd | 35 + .../doc/2.control.examples/10.more.messages.pd | 56 + desiredata/doc/2.control.examples/11.review.pd | 42 + .../doc/2.control.examples/12.PART2.subpatch.pd | 72 + desiredata/doc/2.control.examples/13.locality.pd | 27 + .../doc/2.control.examples/14.dollarsigns.pd | 5 + desiredata/doc/2.control.examples/15.array.pd | 70 + desiredata/doc/2.control.examples/15.file.txt | 2 + .../doc/2.control.examples/16.more.arrays.pd | 23 + desiredata/doc/2.control.examples/17.PART3.midi.pd | 35 + .../doc/2.control.examples/18.conditional.pd | 59 + desiredata/doc/2.control.examples/19.random.pd | 39 + .../doc/2.control.examples/20.weighted-random.pd | 44 + .../doc/2.control.examples/21.markov.chain.pd | 105 + .../doc/2.control.examples/22.random-walk.pd | 64 + desiredata/doc/2.control.examples/23.sequencing.pd | 28 + desiredata/doc/2.control.examples/dollarsign.pd | 35 + desiredata/doc/2.control.examples/dollarsign2.pd | 54 + desiredata/doc/2.control.examples/sendnumber.pd | 20 + desiredata/doc/3.audio.examples/A00.intro.pd | 10 + desiredata/doc/3.audio.examples/A00.intro.txt | 9 + desiredata/doc/3.audio.examples/A01.sinewave.pd | 32 + desiredata/doc/3.audio.examples/A02.amplitude.pd | 37 + desiredata/doc/3.audio.examples/A03.line.pd | 55 + desiredata/doc/3.audio.examples/A04.line2.pd | 59 + .../doc/3.audio.examples/A05.output.subpatch.pd | 30 + desiredata/doc/3.audio.examples/A06.frequency.pd | 60 + .../doc/3.audio.examples/A07.frequency.mod.pd | 54 + desiredata/doc/3.audio.examples/A08.review.pd | 41 + desiredata/doc/3.audio.examples/B01.wavetables.pd | 50 + .../doc/3.audio.examples/B02.two-wavetables.pd | 147 + desiredata/doc/3.audio.examples/B03.tabread4.pd | 130 + .../3.audio.examples/B04.tabread4.interpolation.pd | 44 + desiredata/doc/3.audio.examples/B05.tabread.FM.pd | 107 + .../doc/3.audio.examples/B06.table.switching.pd | 127 + desiredata/doc/3.audio.examples/B07.sampler.pd | 52 + .../doc/3.audio.examples/B08.sampler.loop.pd | 64 + .../3.audio.examples/B09.sampler.loop.smooth.pd | 72 + .../doc/3.audio.examples/B10.sampler.scratch.pd | 83 + .../doc/3.audio.examples/B11.sampler.nodoppler.pd | 85 + .../doc/3.audio.examples/B12.sampler.transpose.pd | 109 + .../doc/3.audio.examples/B13.sampler.overlap.pd | 158 + .../doc/3.audio.examples/B14.sampler.rockafella.pd | 166 + desiredata/doc/3.audio.examples/C01.nyquist.pd | 102 + .../doc/3.audio.examples/C02.sawtooth-foldover.pd | 39 + .../doc/3.audio.examples/C03.zipper.noise.pd | 55 + .../doc/3.audio.examples/C04.control.to.signal.pd | 48 + .../doc/3.audio.examples/C05.sampler.oneshot.pd | 84 + .../doc/3.audio.examples/C06.signal.to.control.pd | 25 + .../doc/3.audio.examples/C07.envelope.follower.pd | 113 + .../doc/3.audio.examples/C08.analog.sequencer.pd | 156 + desiredata/doc/3.audio.examples/C09.sample.hold.pd | 104 + .../doc/3.audio.examples/C10.monophonic.synth.pd | 107 + .../doc/3.audio.examples/D01.envelope.gen.pd | 50 + desiredata/doc/3.audio.examples/D02.adsr.pd | 42 + desiredata/doc/3.audio.examples/D03.envelope.dB.pd | 100 + .../doc/3.audio.examples/D04.envelope.quartic.pd | 81 + .../doc/3.audio.examples/D05.envelope.pitch.pd | 153 + .../3.audio.examples/D06.envelope.portamento.pd | 148 + desiredata/doc/3.audio.examples/D07.additive.pd | 50 + .../doc/3.audio.examples/D08.table.spectrum.pd | 91 + .../doc/3.audio.examples/D09.shepard.tone.pd | 108 + .../doc/3.audio.examples/D10.sampler.notes.pd | 263 + .../doc/3.audio.examples/D11.sampler.poly.pd | 175 + desiredata/doc/3.audio.examples/D12.sampler.bis.pd | 203 + .../doc/3.audio.examples/D13.additive.qlist.pd | 47 + desiredata/doc/3.audio.examples/D14.vibrato.pd | 104 + desiredata/doc/3.audio.examples/E01.spectrum.pd | 179 + .../doc/3.audio.examples/E02.ring.modulation.pd | 197 + .../doc/3.audio.examples/E03.octave.divider.pd | 141 + .../doc/3.audio.examples/E04.difference.tone.pd | 45 + desiredata/doc/3.audio.examples/E05.chebychev.pd | 257 + desiredata/doc/3.audio.examples/E06.exponential.pd | 335 + desiredata/doc/3.audio.examples/E07.evenodd.pd | 109 + desiredata/doc/3.audio.examples/E08.phase.mod.pd | 196 + desiredata/doc/3.audio.examples/E09.FM.spectrum.pd | 139 + desiredata/doc/3.audio.examples/E10.complex.FM.pd | 156 + desiredata/doc/3.audio.examples/F01.pulse.pd | 82 + desiredata/doc/3.audio.examples/F02.just.say.pd | 152 + .../doc/3.audio.examples/F03.pulse.spectrum.pd | 126 + .../doc/3.audio.examples/F04.waveshaping.pulse.pd | 133 + .../doc/3.audio.examples/F05.ring.modulation.pd | 160 + desiredata/doc/3.audio.examples/F06.packets.pd | 117 + .../doc/3.audio.examples/F07.packet.spectrum.pd | 147 + desiredata/doc/3.audio.examples/F08.two.cosines.pd | 70 + desiredata/doc/3.audio.examples/F09.declickit.pd | 94 + .../doc/3.audio.examples/F10.sweepable.FM.pd | 152 + .../doc/3.audio.examples/F11.anharmonic.FM.pd | 126 + desiredata/doc/3.audio.examples/F12.paf.pd | 226 + desiredata/doc/3.audio.examples/F13.paf.control.pd | 164 + desiredata/doc/3.audio.examples/G01.delay.pd | 48 + desiredata/doc/3.audio.examples/G02.delay.loop.pd | 44 + .../doc/3.audio.examples/G03.delay.variable.pd | 77 + .../doc/3.audio.examples/G04.control.blocksize.pd | 79 + .../doc/3.audio.examples/G05.execution.order.pd | 79 + .../doc/3.audio.examples/G06.octave.doubler.pd | 114 + desiredata/doc/3.audio.examples/G07.shaker.pd | 80 + desiredata/doc/3.audio.examples/G08.reverb.pd | 253 + desiredata/doc/3.audio.examples/G09.pitchshift.pd | 162 + desiredata/doc/3.audio.examples/H01.low-pass.pd | 185 + desiredata/doc/3.audio.examples/H02.high-pass.pd | 173 + desiredata/doc/3.audio.examples/H03.band-pass.pd | 57 + .../doc/3.audio.examples/H04.filter.sweep.pd | 58 + .../doc/3.audio.examples/H05.filter.floyd.pd | 132 + .../doc/3.audio.examples/H06.envelope.follower.pd | 86 + .../doc/3.audio.examples/H07.measure.spectrum.pd | 88 + .../doc/3.audio.examples/H08.heterodyning.pd | 85 + .../doc/3.audio.examples/H09.ssb.modulation.pd | 103 + desiredata/doc/3.audio.examples/H10.measurement.pd | 90 + desiredata/doc/3.audio.examples/H11.shelving.pd | 74 + desiredata/doc/3.audio.examples/H12.peaking.pd | 112 + desiredata/doc/3.audio.examples/H13.butterworth.pd | 74 + desiredata/doc/3.audio.examples/H14.all.pass.pd | 85 + desiredata/doc/3.audio.examples/H15.phaser.pd | 109 + .../doc/3.audio.examples/H16.adsr.filter.qlist.pd | 167 + .../doc/3.audio.examples/I01.Fourier.analysis.pd | 90 + desiredata/doc/3.audio.examples/I02.Hann.window.pd | 181 + desiredata/doc/3.audio.examples/I03.resynthesis.pd | 132 + desiredata/doc/3.audio.examples/I04.noisegate.pd | 330 + desiredata/doc/3.audio.examples/I05.compressor.pd | 237 + .../doc/3.audio.examples/I06.timbre.stamp.pd | 370 + .../doc/3.audio.examples/I07.phase.vocoder.pd | 548 ++ desiredata/doc/3.audio.examples/I08.pvoc.reverb.pd | 421 + .../doc/3.audio.examples/I09.sheep.from.goats.pd | 411 + desiredata/doc/3.audio.examples/I10.phase.bash.pd | 569 ++ desiredata/doc/3.audio.examples/J01.even.odd.pd | 66 + desiredata/doc/3.audio.examples/J02.trapezoids.pd | 84 + .../doc/3.audio.examples/J03.pulse.width.mod.pd | 48 + desiredata/doc/3.audio.examples/J04.corners.pd | 112 + desiredata/doc/3.audio.examples/J05.triangle.pd | 56 + desiredata/doc/3.audio.examples/J06.enveloping.pd | 97 + .../doc/3.audio.examples/J07.oversampling.pd | 61 + .../doc/3.audio.examples/J08.classicsynth.pd | 135 + desiredata/doc/3.audio.examples/J09.bandlimited.pd | 216 + desiredata/doc/3.audio.examples/adsr.pd | 96 + desiredata/doc/3.audio.examples/buttercoef3.pd | 80 + desiredata/doc/3.audio.examples/butterworth3~.pd | 104 + desiredata/doc/3.audio.examples/filter-graph1.pd | 84 + desiredata/doc/3.audio.examples/filter-graph2.pd | 121 + desiredata/doc/3.audio.examples/osc-voice.pd | 89 + desiredata/doc/3.audio.examples/output~.pd | 66 + desiredata/doc/3.audio.examples/partial.pd | 76 + desiredata/doc/3.audio.examples/qlist-sampler.txt | 147 + desiredata/doc/3.audio.examples/qlist.txt | 56 + desiredata/doc/3.audio.examples/qlist2.txt | 5 + desiredata/doc/3.audio.examples/reverb-echo.pd | 24 + desiredata/doc/3.audio.examples/sampvoice.pd | 114 + desiredata/doc/3.audio.examples/sampvoice2.pd | 122 + desiredata/doc/3.audio.examples/shepvoice.pd | 47 + desiredata/doc/3.audio.examples/sinevoice.pd | 67 + .../doc/3.audio.examples/spectrum-partial.pd | 57 + desiredata/doc/4.data.structures/00.intro.txt | 113 + desiredata/doc/4.data.structures/01.scalars.pd | 63 + .../doc/4.data.structures/02.getting.data.pd | 77 + .../doc/4.data.structures/03.setting.data.pd | 141 + desiredata/doc/4.data.structures/04.append.pd | 36 + desiredata/doc/4.data.structures/05.array.pd | 120 + desiredata/doc/4.data.structures/06.file.pd | 69 + desiredata/doc/4.data.structures/07.sequencer.pd | 148 + desiredata/doc/4.data.structures/08.selection.pd | 81 + desiredata/doc/4.data.structures/09.scaling.pd | 74 + desiredata/doc/4.data.structures/10.onoff.pd | 51 + .../doc/4.data.structures/11.array.controls.pd | 49 + .../doc/4.data.structures/12.beat-patterns.pd | 455 + desiredata/doc/4.data.structures/13.sliderule.pd | 205 + .../doc/4.data.structures/14.sinedecomposer.pd | 250 + .../doc/4.data.structures/15.partialtracer.pd | 839 ++ desiredata/doc/4.data.structures/add-trace.pd | 152 + desiredata/doc/4.data.structures/beat-maker.pd | 44 + desiredata/doc/4.data.structures/data-array.pd | 64 + desiredata/doc/4.data.structures/data-start.pd | 40 + desiredata/doc/4.data.structures/file.txt | 39 + desiredata/doc/4.data.structures/osc-voice.pd | 54 + desiredata/doc/4.data.structures/output~.pd | 66 + desiredata/doc/4.data.structures/voice.pd | 119 + desiredata/doc/4.data.structures/z.txt | 64 + desiredata/doc/5.reference/0.INTRO.txt | 153 + desiredata/doc/5.reference/0_all_guis-INTRO.txt | 131 + desiredata/doc/5.reference/acoustics-help.pd | 47 + desiredata/doc/5.reference/acoustics~-help.pd | 81 + desiredata/doc/5.reference/adc~_dac~-help.pd | 11 + desiredata/doc/5.reference/append-help.pd | 44 + desiredata/doc/5.reference/bag-help.pd | 27 + desiredata/doc/5.reference/bang-help.pd | 13 + desiredata/doc/5.reference/bang~-help.pd | 18 + desiredata/doc/5.reference/biquad~-help.pd | 36 + desiredata/doc/5.reference/block~-help.pd | 75 + desiredata/doc/5.reference/bng-help.pd | 265 + desiredata/doc/5.reference/bp~-help.pd | 40 + desiredata/doc/5.reference/canvas-help.pd | 19 + desiredata/doc/5.reference/change-help.pd | 23 + desiredata/doc/5.reference/clip~-help.pd | 30 + desiredata/doc/5.reference/cos~-help.pd | 32 + desiredata/doc/5.reference/cpole~-help.pd | 119 + desiredata/doc/5.reference/cputime-help.pd | 15 + desiredata/doc/5.reference/czero_rev~-help.pd | 142 + desiredata/doc/5.reference/czero~-help.pd | 124 + desiredata/doc/5.reference/delay-help.pd | 30 + desiredata/doc/5.reference/delread~-help.pd | 33 + desiredata/doc/5.reference/delwrite~-help.pd | 15 + desiredata/doc/5.reference/drawnumber-help.pd | 43 + desiredata/doc/5.reference/drawpolygon-help.pd | 44 + desiredata/doc/5.reference/element-help.pd | 51 + desiredata/doc/5.reference/env~-help.pd | 28 + desiredata/doc/5.reference/fft~-help.pd | 64 + desiredata/doc/5.reference/float-help.pd | 18 + desiredata/doc/5.reference/framp~-help.pd | 40 + desiredata/doc/5.reference/gatom-help.pd | 32 + desiredata/doc/5.reference/get-help.pd | 51 + desiredata/doc/5.reference/getsize-help.pd | 41 + desiredata/doc/5.reference/graph-help.pd | 13 + desiredata/doc/5.reference/hdial-help.pd | 282 + desiredata/doc/5.reference/hip~-help.pd | 33 + desiredata/doc/5.reference/hslider-help.pd | 303 + desiredata/doc/5.reference/int-help.pd | 24 + desiredata/doc/5.reference/key-help.pd | 24 + desiredata/doc/5.reference/line-help.pd | 35 + desiredata/doc/5.reference/line~-help.pd | 37 + desiredata/doc/5.reference/list-help.pd | 364 + desiredata/doc/5.reference/lop~-help.pd | 37 + desiredata/doc/5.reference/makefilename-help.pd | 49 + desiredata/doc/5.reference/makenote-help.pd | 26 + desiredata/doc/5.reference/math-help.pd | 60 + desiredata/doc/5.reference/message-help.pd | 67 + desiredata/doc/5.reference/metro.pd | 29 + desiredata/doc/5.reference/midi-help.pd | 129 + desiredata/doc/5.reference/moses-help.pd | 17 + desiredata/doc/5.reference/my_canvas-help.pd | 243 + desiredata/doc/5.reference/namecanvas-help.pd | 8 + desiredata/doc/5.reference/netreceive-help.pd | 23 + desiredata/doc/5.reference/netsend-help.pd | 55 + desiredata/doc/5.reference/noise~-help.pd | 18 + desiredata/doc/5.reference/numbox2-help.pd | 302 + desiredata/doc/5.reference/openpanel-help.pd | 11 + desiredata/doc/5.reference/operators-help.pd | 31 + desiredata/doc/5.reference/osc~-help.pd | 58 + desiredata/doc/5.reference/otherbinops-help.pd | 90 + desiredata/doc/5.reference/pack-help.pd | 37 + desiredata/doc/5.reference/pd-help.pd | 52 + desiredata/doc/5.reference/phasor~-help.pd | 36 + desiredata/doc/5.reference/pipe-help.pd | 41 + desiredata/doc/5.reference/plot-help.pd | 70 + desiredata/doc/5.reference/pointer-help.pd | 79 + desiredata/doc/5.reference/poly-help.pd | 30 + desiredata/doc/5.reference/print-help.pd | 13 + desiredata/doc/5.reference/print~-help.pd | 18 + desiredata/doc/5.reference/qlist-help.pd | 76 + desiredata/doc/5.reference/qlist.txt | 3 + desiredata/doc/5.reference/random-help.pd | 19 + desiredata/doc/5.reference/readsf~-help.pd | 63 + desiredata/doc/5.reference/realtime-help.pd | 15 + desiredata/doc/5.reference/receive-help.pd | 26 + desiredata/doc/5.reference/route-help.pd | 80 + desiredata/doc/5.reference/rpole~-help.pd | 79 + desiredata/doc/5.reference/rsqrt~-help.pd | 32 + desiredata/doc/5.reference/rzero_rev~-help.pd | 81 + desiredata/doc/5.reference/rzero~-help.pd | 79 + desiredata/doc/5.reference/samphold~-help.pd | 46 + desiredata/doc/5.reference/savepanel-help.pd | 12 + desiredata/doc/5.reference/select-help.pd | 73 + desiredata/doc/5.reference/send-help.pd | 26 + desiredata/doc/5.reference/send~-help.pd | 32 + desiredata/doc/5.reference/set-help.pd | 61 + desiredata/doc/5.reference/setsize-help.pd | 54 + desiredata/doc/5.reference/setsize.txt | 21 + desiredata/doc/5.reference/sigbinops-help.pd | 60 + desiredata/doc/5.reference/sig~-help.pd | 20 + desiredata/doc/5.reference/snapshot~-help.pd | 33 + desiredata/doc/5.reference/soundfiler-help.pd | 68 + desiredata/doc/5.reference/spigot-help.pd | 25 + desiredata/doc/5.reference/sqrt~-help.pd | 32 + desiredata/doc/5.reference/stripnote-help.pd | 16 + desiredata/doc/5.reference/struct-help.pd | 26 + desiredata/doc/5.reference/sublist-help.pd | 10 + desiredata/doc/5.reference/swap-help.pd | 20 + desiredata/doc/5.reference/switch~-help.pd | 45 + desiredata/doc/5.reference/table.txt | 1 + desiredata/doc/5.reference/tabosc4~-help.pd | 96 + desiredata/doc/5.reference/tabplay~-help.pd | 66 + desiredata/doc/5.reference/tabread-help.pd | 21 + desiredata/doc/5.reference/tabread4~-help.pd | 43 + desiredata/doc/5.reference/tabreceive~-help.pd | 6 + desiredata/doc/5.reference/tabsend~-help.pd | 6 + desiredata/doc/5.reference/tabwrite-help.pd | 21 + desiredata/doc/5.reference/tabwrite~-help.pd | 30 + desiredata/doc/5.reference/text-help.pd | 4 + desiredata/doc/5.reference/textfile-help.pd | 59 + desiredata/doc/5.reference/textfile.txt | 6 + desiredata/doc/5.reference/threshold~-help.pd | 31 + desiredata/doc/5.reference/throw~-help.pd | 34 + desiredata/doc/5.reference/timer-help.pd | 15 + desiredata/doc/5.reference/toggle-help.pd | 273 + desiredata/doc/5.reference/trigger-help.pd | 37 + desiredata/doc/5.reference/unpack-help.pd | 28 + desiredata/doc/5.reference/until-help.pd | 25 + desiredata/doc/5.reference/value-help.pd | 30 + desiredata/doc/5.reference/vcf~-help.pd | 36 + desiredata/doc/5.reference/vdial-help.pd | 282 + desiredata/doc/5.reference/vd~-help.pd | 19 + desiredata/doc/5.reference/vline~-help.pd | 46 + desiredata/doc/5.reference/vslider-help.pd | 302 + desiredata/doc/5.reference/vu-help.pd | 247 + desiredata/doc/5.reference/wrap~-help.pd | 26 + desiredata/doc/5.reference/writesf~-help.pd | 49 + desiredata/doc/5.reference/x_all_guis.pd | 20 + desiredata/doc/6.externs/0.README.txt | 9 + desiredata/doc/6.externs/dspobj~.c | 67 + desiredata/doc/6.externs/makefile | 82 + desiredata/doc/6.externs/obj1.c | 47 + desiredata/doc/6.externs/obj2.c | 45 + desiredata/doc/6.externs/obj3.c | 39 + desiredata/doc/6.externs/obj4.c | 47 + desiredata/doc/6.externs/obj5.c | 54 + desiredata/doc/6.externs/test-dspobj~.pd | 11 + desiredata/doc/6.externs/test-obj1.pd | 6 + desiredata/doc/6.externs/test-obj2.pd | 8 + desiredata/doc/6.externs/test-obj3.pd | 8 + desiredata/doc/6.externs/test-obj4.pd | 6 + desiredata/doc/6.externs/test-obj5.pd | 4 + .../doc/7.stuff/soundfile-tools/1.ring-mod.pd | 189 + .../doc/7.stuff/soundfile-tools/2.bandpass.pd | 202 + .../doc/7.stuff/soundfile-tools/3.phase.vocoder.pd | 551 ++ desiredata/doc/7.stuff/soundfile-tools/4.looper.pd | 338 + desiredata/doc/7.stuff/soundfile-tools/5.reverb.pd | 214 + .../doc/7.stuff/soundfile-tools/6.vocoder.pd | 314 + desiredata/doc/7.stuff/soundfile-tools/README.txt | 2 + desiredata/doc/7.stuff/synth/1.poly.synth.pd | 311 + desiredata/doc/7.stuff/synth/README.txt | 7 + desiredata/doc/7.stuff/synth/gadsr.pd | 146 + desiredata/doc/7.stuff/synth/numset.pd | 27 + desiredata/doc/7.stuff/synth/preset.pd | 54 + desiredata/doc/7.stuff/synth/preset1.txt | 13 + desiredata/doc/7.stuff/synth/preset2.txt | 13 + desiredata/doc/7.stuff/synth/preset3.txt | 13 + desiredata/doc/7.stuff/synth/preset4.txt | 14 + desiredata/doc/7.stuff/synth/synthvoice.pd | 73 + desiredata/doc/7.stuff/synth/test-gadsr.pd | 2 + desiredata/doc/7.stuff/tools/latency.pd | 99 + desiredata/doc/7.stuff/tools/load-meter.pd | 21 + desiredata/doc/7.stuff/tools/testtone.pd | 469 + desiredata/doc/sound/bell.aiff | Bin 0 -> 312012 bytes desiredata/doc/sound/voice.wav | Bin 0 -> 124204 bytes desiredata/doc/sound/voice2.wav | Bin 0 -> 78194 bytes desiredata/extra/Makefile.am | 26 + desiredata/extra/README.txt | 30 + desiredata/extra/bonk~/bonk~.c | 1077 +++ desiredata/extra/bonk~/makefile | 4 + desiredata/extra/bonk~/templates.txt | 4 + desiredata/extra/choice/choice.c | 128 + desiredata/extra/choice/makefile | 4 + desiredata/extra/complex-mod~.pd | 30 + desiredata/extra/expr~/LICENSE.txt | 341 + desiredata/extra/expr~/README.txt | 97 + desiredata/extra/expr~/fts_to_pd.h | 41 + desiredata/extra/expr~/makefile | 168 + desiredata/extra/expr~/vexp.c | 2142 +++++ desiredata/extra/expr~/vexp.h | 244 + desiredata/extra/expr~/vexp_fun.c | 1315 +++ desiredata/extra/expr~/vexp_if.c | 1223 +++ desiredata/extra/fiddle~/fiddle~.c | 1845 ++++ desiredata/extra/fiddle~/makefile | 4 + desiredata/extra/help-complex-mod~.pd | 26 + desiredata/extra/help-expr.pd | 497 ++ desiredata/extra/help-hilbert~.pd | 18 + desiredata/extra/help-rev1~.pd | 119 + desiredata/extra/help-rev2~.pd | 134 + desiredata/extra/help-rev3~.pd | 136 + desiredata/extra/hilbert~.pd | 15 + desiredata/extra/loop~/loop~.c | 164 + desiredata/extra/loop~/makefile | 4 + desiredata/extra/loop~/test-loop~.pd | 58 + desiredata/extra/lrshift~/lrshift~.c | 74 + desiredata/extra/lrshift~/makefile | 4 + desiredata/extra/makefile | 96 + desiredata/extra/pique/makefile | 4 + desiredata/extra/pique/pique.c | 238 + desiredata/extra/pique/pique.c.old | 148 + desiredata/extra/pureunity/2times.pd | 31 + desiredata/extra/pureunity/3times.pd | 40 + desiredata/extra/pureunity/4times.pd | 49 + desiredata/extra/pureunity/COPYING | 340 + desiredata/extra/pureunity/ChangeLog | 23 + desiredata/extra/pureunity/Makefile | 19 + desiredata/extra/pureunity/README | 624 ++ desiredata/extra/pureunity/^.pd | 25 + desiredata/extra/pureunity/antireflexive-test.pd | 13 + desiredata/extra/pureunity/antisymmetric-test.pd | 4 + desiredata/extra/pureunity/arith-test.pd | 76 + desiredata/extra/pureunity/associative-test.pd | 32 + desiredata/extra/pureunity/associator.pd | 38 + desiredata/extra/pureunity/commutative-test.pd | 39 + desiredata/extra/pureunity/commutator.pd | 41 + desiredata/extra/pureunity/comparators-test.pd | 65 + desiredata/extra/pureunity/distributive-test.pd | 32 + desiredata/extra/pureunity/distributor.pd | 46 + desiredata/extra/pureunity/equivalence-test.pd | 14 + desiredata/extra/pureunity/glue-test.pd | 15 + desiredata/extra/pureunity/invertible-test.pd | 31 + desiredata/extra/pureunity/invertor.pd | 30 + desiredata/extra/pureunity/locale/english.tcl | 56 + desiredata/extra/pureunity/main.pd | 90 + desiredata/extra/pureunity/norm.#.pd | 8 + desiredata/extra/pureunity/norm.f.pd | 8 + desiredata/extra/pureunity/norm.~.pd | 8 + desiredata/extra/pureunity/op2.#.pd | 8 + desiredata/extra/pureunity/op2.f.pd | 8 + desiredata/extra/pureunity/op2.~.pd | 8 + desiredata/extra/pureunity/operator1-rule.pd | 11 + desiredata/extra/pureunity/operator1-test.pd | 5 + desiredata/extra/pureunity/operator2-rule.pd | 10 + desiredata/extra/pureunity/operator2-test.pd | 10 + desiredata/extra/pureunity/packunpack3.#.pd | 18 + desiredata/extra/pureunity/packunpack3.f.pd | 16 + desiredata/extra/pureunity/packunpack3.~.pd | 10 + desiredata/extra/pureunity/partialorder-test.pd | 14 + desiredata/extra/pureunity/partialordereq-test.pd | 14 + desiredata/extra/pureunity/protocols-tree.pd | 65 + desiredata/extra/pureunity/pureunity.c | 37 + desiredata/extra/pureunity/rand.#.pd | 42 + desiredata/extra/pureunity/rand.f.pd | 40 + desiredata/extra/pureunity/rand.~.pd | 22 + desiredata/extra/pureunity/reflexive-test.pd | 13 + desiredata/extra/pureunity/swap.#.pd | 14 + desiredata/extra/pureunity/swap.f.pd | 10 + desiredata/extra/pureunity/swap.~.pd | 7 + desiredata/extra/pureunity/taa.#.pd | 8 + desiredata/extra/pureunity/taa.f.pd | 8 + desiredata/extra/pureunity/taa.~.pd | 6 + desiredata/extra/pureunity/totalorder-test.pd | 11 + desiredata/extra/pureunity/totalordereq-test.pd | 11 + desiredata/extra/pureunity/transitive-test.pd | 4 + desiredata/extra/pureunity/tree.pd | 20 + desiredata/extra/pureunity/trichotomy-test.pd | 32 + desiredata/extra/rev1-final.pd | 106 + desiredata/extra/rev1-stage.pd | 99 + desiredata/extra/rev1~.pd | 64 + desiredata/extra/rev2~.pd | 237 + desiredata/extra/rev3~.pd | 439 + desiredata/extra/sigmund~/makefile | 4 + desiredata/extra/sigmund~/sigmund~-help.pd | 172 + desiredata/extra/sigmund~/sigmund~.c | 1333 +++ desiredata/icons/Array.gif | Bin 0 -> 129 bytes desiredata/icons/CommentBox.gif | Bin 0 -> 108 bytes desiredata/icons/FloatBox.gif | Bin 0 -> 84 bytes desiredata/icons/Graph.gif | Bin 0 -> 115 bytes desiredata/icons/MessageBox.gif | Bin 0 -> 82 bytes desiredata/icons/ObjectBox.gif | Bin 0 -> 121 bytes desiredata/icons/SymbolBox.gif | Bin 0 -> 91 bytes desiredata/icons/bng.gif | Bin 0 -> 123 bytes desiredata/icons/cnv.gif | Bin 0 -> 89 bytes desiredata/icons/hradio.gif | Bin 0 -> 104 bytes desiredata/icons/hsl.gif | Bin 0 -> 115 bytes desiredata/icons/mode_edit.gif | Bin 0 -> 90 bytes desiredata/icons/mode_run.gif | Bin 0 -> 85 bytes desiredata/icons/nbx.gif | Bin 0 -> 83 bytes desiredata/icons/pd.gif | Bin 0 -> 77 bytes desiredata/icons/tgl.gif | Bin 0 -> 116 bytes desiredata/icons/vradio.gif | Bin 0 -> 112 bytes desiredata/icons/vsl.gif | Bin 0 -> 114 bytes desiredata/icons/vu.gif | Bin 0 -> 106 bytes desiredata/man/pd.1 | 25 + desiredata/man/pdreceive.1 | 26 + desiredata/man/pdsend.1 | 26 + desiredata/portmidi_osx/Makefile | 24 + desiredata/portmidi_osx/README | 12 + desiredata/portmidi_osx/pmdarwin.c | 78 + desiredata/portmidi_osx/pminternal.h | 100 + desiredata/portmidi_osx/pmmacosx.c | 439 + desiredata/portmidi_osx/pmmacosx.h | 4 + desiredata/portmidi_osx/pmtest.c | 142 + desiredata/portmidi_osx/pmutil.c | 86 + desiredata/portmidi_osx/pmutil.h | 44 + desiredata/portmidi_osx/portmidi.c | 357 + desiredata/portmidi_osx/portmidi.h | 341 + .../portmidi_osx/portmidi_osx_change_log.txt | 70 + desiredata/portmidi_osx/porttime.h | 33 + desiredata/portmidi_osx/ptdarwin.c | 58 + desiredata/src/ChangeLog | 233 + desiredata/src/TODO | 454 + desiredata/src/bgerror.tcl | 254 + desiredata/src/builtins.c | 3060 +++++++ desiredata/src/builtins_dsp.c | 3844 +++++++++ desiredata/src/config.h.in | 5 + desiredata/src/configure | 6562 ++++++++++++++ desiredata/src/configure.in | 213 + desiredata/src/cvs-switch-user | 5 + desiredata/src/d_fftroutine.c | 999 +++ desiredata/src/d_mayer_fft.c | 422 + desiredata/src/d_soundfile.c | 2059 +++++ desiredata/src/d_ugen.c | 1016 +++ desiredata/src/defaults.ddrc | 193 + desiredata/src/desire.c | 7332 ++++++++++++++++ desiredata/src/desire.h | 353 + desiredata/src/desire.tk | 9019 ++++++++++++++++++++ desiredata/src/dzinc.tcl | 157 + desiredata/src/icons/array.gif | Bin 0 -> 129 bytes desiredata/src/icons/bang.gif | Bin 0 -> 123 bytes desiredata/src/icons/canvas.gif | Bin 0 -> 89 bytes desiredata/src/icons/comment.gif | Bin 0 -> 108 bytes desiredata/src/icons/graph.gif | Bin 0 -> 115 bytes desiredata/src/icons/hradio.gif | Bin 0 -> 104 bytes desiredata/src/icons/hslider.gif | Bin 0 -> 115 bytes desiredata/src/icons/message.gif | Bin 0 -> 82 bytes desiredata/src/icons/mode_edit.gif | Bin 0 -> 90 bytes desiredata/src/icons/mode_run.gif | Bin 0 -> 85 bytes desiredata/src/icons/number.gif | Bin 0 -> 84 bytes desiredata/src/icons/number2.gif | Bin 0 -> 83 bytes desiredata/src/icons/object.gif | Bin 0 -> 121 bytes desiredata/src/icons/symbol.gif | Bin 0 -> 91 bytes desiredata/src/icons/toggle.gif | Bin 0 -> 116 bytes desiredata/src/icons/vradio.gif | Bin 0 -> 112 bytes desiredata/src/icons/vslider.gif | Bin 0 -> 114 bytes desiredata/src/icons/vu.gif | Bin 0 -> 106 bytes desiredata/src/install-sh | 251 + desiredata/src/iostream.txt | 61 + desiredata/src/kb-mode.tcl | 210 + desiredata/src/kernel.c | 2348 +++++ desiredata/src/locale/bokmal.tcl | 453 + desiredata/src/locale/brasiliano.tcl | 577 ++ desiredata/src/locale/catala.tcl | 58 + desiredata/src/locale/chinese.tcl | 560 ++ desiredata/src/locale/dansk.tcl | 564 ++ desiredata/src/locale/deutsch.tcl | 280 + desiredata/src/locale/english.tcl | 573 ++ desiredata/src/locale/espanol.tcl | 526 ++ desiredata/src/locale/euskara.tcl | 554 ++ desiredata/src/locale/francais.tcl | 539 ++ desiredata/src/locale/index.tcl | 21 + desiredata/src/locale/italiano.tcl | 544 ++ desiredata/src/locale/localeutils.tcl | 109 + desiredata/src/locale/nederlands.tcl | 599 ++ desiredata/src/locale/nihongo.tcl | 574 ++ desiredata/src/locale/polski.tcl | 557 ++ desiredata/src/locale/portugues.tcl | 119 + desiredata/src/locale/russkij.tcl | 574 ++ desiredata/src/locale/turkce.tcl | 572 ++ desiredata/src/m_atomic.h | 55 + desiredata/src/m_fifo.c | 443 + desiredata/src/m_pd.h | 936 ++ desiredata/src/m_sched.c | 654 ++ desiredata/src/m_simd.c | 145 + desiredata/src/m_simd.h | 82 + desiredata/src/m_simd_sse_gcc.c | 1131 +++ desiredata/src/m_simd_ve_gcc.c | 748 ++ desiredata/src/m_simd_ve_gcc.h | 18 + desiredata/src/main.c | 17 + desiredata/src/makefile.in | 122 + desiredata/src/notes.txt | 300 + desiredata/src/pkgIndex.tcl | 15 + desiredata/src/plusminus | 42 + desiredata/src/poe.tcl | 281 + desiredata/src/pre8.5.tcl | 209 + desiredata/src/profile_dd.tcl | 20 + desiredata/src/rules.txt | 42 + desiredata/src/s_audio.c | 724 ++ desiredata/src/s_audio_alsa.c | 594 ++ desiredata/src/s_audio_alsa.h | 40 + desiredata/src/s_audio_alsamm.c | 889 ++ desiredata/src/s_audio_asio.cpp | 1014 +++ desiredata/src/s_audio_jack.c | 381 + desiredata/src/s_audio_mmio.c | 571 ++ desiredata/src/s_audio_oss.c | 532 ++ desiredata/src/s_audio_pa.c | 332 + desiredata/src/s_audio_pablio.c | 304 + desiredata/src/s_audio_pablio.h | 112 + desiredata/src/s_audio_paring.c | 172 + desiredata/src/s_audio_paring.h | 101 + desiredata/src/s_audio_portaudio.c | 416 + desiredata/src/s_audio_sgi.c | 313 + desiredata/src/s_inter.c | 732 ++ desiredata/src/s_loader.c | 196 + desiredata/src/s_main.c | 632 ++ desiredata/src/s_midi.c | 619 ++ desiredata/src/s_midi_alsa.c | 209 + desiredata/src/s_midi_mmio.c | 505 ++ desiredata/src/s_midi_none.c | 16 + desiredata/src/s_midi_oss.c | 234 + desiredata/src/s_midi_pm.c | 239 + desiredata/src/s_midi_sgi.c | 143 + desiredata/src/s_path.c | 350 + desiredata/src/s_stuff.h | 321 + desiredata/src/s_watchdog.c | 40 + desiredata/src/tests/abstr-test.pd | 3 + desiredata/src/tests/abstr.pd | 11 + desiredata/src/tests/abstr2.pd | 15 + desiredata/src/tests/all_guis_and_gop.pd | 116 + desiredata/src/tests/all_guis_and_gop.pd.gif | Bin 0 -> 11002 bytes desiredata/src/tests/bof.pd | 27 + desiredata/src/tests/chun.pd | 36 + desiredata/src/tests/city.pd | 128 + .../src/tests/desiredata-presentation-piksel06.pd | 26 + desiredata/src/tests/gop-one.pd | 18 + desiredata/src/tests/gop-three.pd | 41 + desiredata/src/tests/gop-two.pd | 19 + desiredata/src/tests/sub.pd | 21 + desiredata/src/tests/subgop-test.pd | 8 + desiredata/src/u_pdreceive.c | 321 + desiredata/src/u_pdsend.c | 138 + desiredata/src/valgrind3.supp | 89 + 655 files changed, 117755 insertions(+) create mode 100644 desiredata/COPYING create mode 100644 desiredata/COPYING.desire-client.txt create mode 100644 desiredata/INSTALL.txt create mode 100644 desiredata/LICENSE.txt create mode 100644 desiredata/README.txt create mode 100644 desiredata/doc/1.manual/1.introduction.txt create mode 100644 desiredata/doc/1.manual/fig1.1.png create mode 100644 desiredata/doc/1.manual/fig1.2.jpg create mode 100644 desiredata/doc/1.manual/fig1.3.jpg create mode 100644 desiredata/doc/1.manual/fig1.4.png create mode 100644 desiredata/doc/1.manual/fig1.5.jpg create mode 100644 desiredata/doc/1.manual/fig11.1.png create mode 100644 desiredata/doc/1.manual/fig11.2.png create mode 100644 desiredata/doc/1.manual/fig11.3.png create mode 100644 desiredata/doc/1.manual/fig11.4.png create mode 100644 desiredata/doc/1.manual/fig3.1.jpg create mode 100644 desiredata/doc/1.manual/fig3.10.jpg create mode 100644 desiredata/doc/1.manual/fig3.2.jpg create mode 100644 desiredata/doc/1.manual/fig3.3.jpg create mode 100644 desiredata/doc/1.manual/fig3.4.jpg create mode 100644 desiredata/doc/1.manual/fig3.5.jpg create mode 100644 desiredata/doc/1.manual/fig3.6.jpg create mode 100644 desiredata/doc/1.manual/fig3.7.jpg create mode 100644 desiredata/doc/1.manual/fig3.8.jpg create mode 100644 desiredata/doc/1.manual/fig3.9.jpg create mode 100644 desiredata/doc/1.manual/fig7.1.jpg create mode 100644 desiredata/doc/1.manual/fig7.2.jpg create mode 100644 desiredata/doc/1.manual/fig7.3.jpg create mode 100644 desiredata/doc/1.manual/fig7.4.jpg create mode 100644 desiredata/doc/1.manual/fig7.5.jpg create mode 100644 desiredata/doc/1.manual/fig7.6.jpg create mode 100644 desiredata/doc/1.manual/fig8.1.jpg create mode 100644 desiredata/doc/1.manual/fig8.2.jpg create mode 100644 desiredata/doc/1.manual/fig8.3.jpg create mode 100644 desiredata/doc/1.manual/fig8.4.jpg create mode 100644 desiredata/doc/1.manual/fig8.5.jpg create mode 100644 desiredata/doc/1.manual/fig8.6.jpg create mode 100644 desiredata/doc/1.manual/fig9.1.jpg create mode 100644 desiredata/doc/1.manual/fig9.2.jpg create mode 100644 desiredata/doc/1.manual/fig9.3.jpg create mode 100644 desiredata/doc/1.manual/index.htm create mode 100755 desiredata/doc/1.manual/pdmanual.css create mode 100644 desiredata/doc/1.manual/x1.htm create mode 100644 desiredata/doc/1.manual/x2.htm create mode 100644 desiredata/doc/1.manual/x3.htm create mode 100644 desiredata/doc/1.manual/x4.htm create mode 100644 desiredata/doc/1.manual/x5.htm create mode 100644 desiredata/doc/2.control.examples/00.INTRO.txt create mode 100644 desiredata/doc/2.control.examples/01.PART1.hello.pd create mode 100644 desiredata/doc/2.control.examples/02.editing.pd create mode 100644 desiredata/doc/2.control.examples/03.connections.pd create mode 100644 desiredata/doc/2.control.examples/04.messages.pd create mode 100644 desiredata/doc/2.control.examples/05.counter.pd create mode 100644 desiredata/doc/2.control.examples/06.more.counters.pd create mode 100644 desiredata/doc/2.control.examples/07.time.pd create mode 100644 desiredata/doc/2.control.examples/08.depthfirst.pd create mode 100644 desiredata/doc/2.control.examples/09.send_receive.pd create mode 100644 desiredata/doc/2.control.examples/10.more.messages.pd create mode 100644 desiredata/doc/2.control.examples/11.review.pd create mode 100644 desiredata/doc/2.control.examples/12.PART2.subpatch.pd create mode 100644 desiredata/doc/2.control.examples/13.locality.pd create mode 100644 desiredata/doc/2.control.examples/14.dollarsigns.pd create mode 100644 desiredata/doc/2.control.examples/15.array.pd create mode 100644 desiredata/doc/2.control.examples/15.file.txt create mode 100644 desiredata/doc/2.control.examples/16.more.arrays.pd create mode 100644 desiredata/doc/2.control.examples/17.PART3.midi.pd create mode 100644 desiredata/doc/2.control.examples/18.conditional.pd create mode 100644 desiredata/doc/2.control.examples/19.random.pd create mode 100644 desiredata/doc/2.control.examples/20.weighted-random.pd create mode 100644 desiredata/doc/2.control.examples/21.markov.chain.pd create mode 100644 desiredata/doc/2.control.examples/22.random-walk.pd create mode 100644 desiredata/doc/2.control.examples/23.sequencing.pd create mode 100644 desiredata/doc/2.control.examples/dollarsign.pd create mode 100644 desiredata/doc/2.control.examples/dollarsign2.pd create mode 100644 desiredata/doc/2.control.examples/sendnumber.pd create mode 100644 desiredata/doc/3.audio.examples/A00.intro.pd create mode 100644 desiredata/doc/3.audio.examples/A00.intro.txt create mode 100644 desiredata/doc/3.audio.examples/A01.sinewave.pd create mode 100644 desiredata/doc/3.audio.examples/A02.amplitude.pd create mode 100644 desiredata/doc/3.audio.examples/A03.line.pd create mode 100644 desiredata/doc/3.audio.examples/A04.line2.pd create mode 100644 desiredata/doc/3.audio.examples/A05.output.subpatch.pd create mode 100644 desiredata/doc/3.audio.examples/A06.frequency.pd create mode 100644 desiredata/doc/3.audio.examples/A07.frequency.mod.pd create mode 100644 desiredata/doc/3.audio.examples/A08.review.pd create mode 100644 desiredata/doc/3.audio.examples/B01.wavetables.pd create mode 100644 desiredata/doc/3.audio.examples/B02.two-wavetables.pd create mode 100644 desiredata/doc/3.audio.examples/B03.tabread4.pd create mode 100644 desiredata/doc/3.audio.examples/B04.tabread4.interpolation.pd create mode 100644 desiredata/doc/3.audio.examples/B05.tabread.FM.pd create mode 100644 desiredata/doc/3.audio.examples/B06.table.switching.pd create mode 100644 desiredata/doc/3.audio.examples/B07.sampler.pd create mode 100644 desiredata/doc/3.audio.examples/B08.sampler.loop.pd create mode 100644 desiredata/doc/3.audio.examples/B09.sampler.loop.smooth.pd create mode 100644 desiredata/doc/3.audio.examples/B10.sampler.scratch.pd create mode 100644 desiredata/doc/3.audio.examples/B11.sampler.nodoppler.pd create mode 100644 desiredata/doc/3.audio.examples/B12.sampler.transpose.pd create mode 100644 desiredata/doc/3.audio.examples/B13.sampler.overlap.pd create mode 100644 desiredata/doc/3.audio.examples/B14.sampler.rockafella.pd create mode 100644 desiredata/doc/3.audio.examples/C01.nyquist.pd create mode 100644 desiredata/doc/3.audio.examples/C02.sawtooth-foldover.pd create mode 100644 desiredata/doc/3.audio.examples/C03.zipper.noise.pd create mode 100644 desiredata/doc/3.audio.examples/C04.control.to.signal.pd create mode 100644 desiredata/doc/3.audio.examples/C05.sampler.oneshot.pd create mode 100644 desiredata/doc/3.audio.examples/C06.signal.to.control.pd create mode 100644 desiredata/doc/3.audio.examples/C07.envelope.follower.pd create mode 100644 desiredata/doc/3.audio.examples/C08.analog.sequencer.pd create mode 100644 desiredata/doc/3.audio.examples/C09.sample.hold.pd create mode 100644 desiredata/doc/3.audio.examples/C10.monophonic.synth.pd create mode 100644 desiredata/doc/3.audio.examples/D01.envelope.gen.pd create mode 100644 desiredata/doc/3.audio.examples/D02.adsr.pd create mode 100644 desiredata/doc/3.audio.examples/D03.envelope.dB.pd create mode 100644 desiredata/doc/3.audio.examples/D04.envelope.quartic.pd create mode 100644 desiredata/doc/3.audio.examples/D05.envelope.pitch.pd create mode 100644 desiredata/doc/3.audio.examples/D06.envelope.portamento.pd create mode 100644 desiredata/doc/3.audio.examples/D07.additive.pd create mode 100644 desiredata/doc/3.audio.examples/D08.table.spectrum.pd create mode 100644 desiredata/doc/3.audio.examples/D09.shepard.tone.pd create mode 100644 desiredata/doc/3.audio.examples/D10.sampler.notes.pd create mode 100644 desiredata/doc/3.audio.examples/D11.sampler.poly.pd create mode 100644 desiredata/doc/3.audio.examples/D12.sampler.bis.pd create mode 100644 desiredata/doc/3.audio.examples/D13.additive.qlist.pd create mode 100644 desiredata/doc/3.audio.examples/D14.vibrato.pd create mode 100644 desiredata/doc/3.audio.examples/E01.spectrum.pd create mode 100644 desiredata/doc/3.audio.examples/E02.ring.modulation.pd create mode 100644 desiredata/doc/3.audio.examples/E03.octave.divider.pd create mode 100644 desiredata/doc/3.audio.examples/E04.difference.tone.pd create mode 100644 desiredata/doc/3.audio.examples/E05.chebychev.pd create mode 100644 desiredata/doc/3.audio.examples/E06.exponential.pd create mode 100644 desiredata/doc/3.audio.examples/E07.evenodd.pd create mode 100644 desiredata/doc/3.audio.examples/E08.phase.mod.pd create mode 100644 desiredata/doc/3.audio.examples/E09.FM.spectrum.pd create mode 100644 desiredata/doc/3.audio.examples/E10.complex.FM.pd create mode 100644 desiredata/doc/3.audio.examples/F01.pulse.pd create mode 100644 desiredata/doc/3.audio.examples/F02.just.say.pd create mode 100644 desiredata/doc/3.audio.examples/F03.pulse.spectrum.pd create mode 100644 desiredata/doc/3.audio.examples/F04.waveshaping.pulse.pd create mode 100644 desiredata/doc/3.audio.examples/F05.ring.modulation.pd create mode 100644 desiredata/doc/3.audio.examples/F06.packets.pd create mode 100644 desiredata/doc/3.audio.examples/F07.packet.spectrum.pd create mode 100644 desiredata/doc/3.audio.examples/F08.two.cosines.pd create mode 100644 desiredata/doc/3.audio.examples/F09.declickit.pd create mode 100644 desiredata/doc/3.audio.examples/F10.sweepable.FM.pd create mode 100644 desiredata/doc/3.audio.examples/F11.anharmonic.FM.pd create mode 100644 desiredata/doc/3.audio.examples/F12.paf.pd create mode 100644 desiredata/doc/3.audio.examples/F13.paf.control.pd create mode 100644 desiredata/doc/3.audio.examples/G01.delay.pd create mode 100644 desiredata/doc/3.audio.examples/G02.delay.loop.pd create mode 100644 desiredata/doc/3.audio.examples/G03.delay.variable.pd create mode 100644 desiredata/doc/3.audio.examples/G04.control.blocksize.pd create mode 100644 desiredata/doc/3.audio.examples/G05.execution.order.pd create mode 100644 desiredata/doc/3.audio.examples/G06.octave.doubler.pd create mode 100644 desiredata/doc/3.audio.examples/G07.shaker.pd create mode 100644 desiredata/doc/3.audio.examples/G08.reverb.pd create mode 100644 desiredata/doc/3.audio.examples/G09.pitchshift.pd create mode 100644 desiredata/doc/3.audio.examples/H01.low-pass.pd create mode 100644 desiredata/doc/3.audio.examples/H02.high-pass.pd create mode 100644 desiredata/doc/3.audio.examples/H03.band-pass.pd create mode 100644 desiredata/doc/3.audio.examples/H04.filter.sweep.pd create mode 100644 desiredata/doc/3.audio.examples/H05.filter.floyd.pd create mode 100644 desiredata/doc/3.audio.examples/H06.envelope.follower.pd create mode 100644 desiredata/doc/3.audio.examples/H07.measure.spectrum.pd create mode 100644 desiredata/doc/3.audio.examples/H08.heterodyning.pd create mode 100644 desiredata/doc/3.audio.examples/H09.ssb.modulation.pd create mode 100644 desiredata/doc/3.audio.examples/H10.measurement.pd create mode 100644 desiredata/doc/3.audio.examples/H11.shelving.pd create mode 100644 desiredata/doc/3.audio.examples/H12.peaking.pd create mode 100644 desiredata/doc/3.audio.examples/H13.butterworth.pd create mode 100644 desiredata/doc/3.audio.examples/H14.all.pass.pd create mode 100644 desiredata/doc/3.audio.examples/H15.phaser.pd create mode 100644 desiredata/doc/3.audio.examples/H16.adsr.filter.qlist.pd create mode 100644 desiredata/doc/3.audio.examples/I01.Fourier.analysis.pd create mode 100644 desiredata/doc/3.audio.examples/I02.Hann.window.pd create mode 100644 desiredata/doc/3.audio.examples/I03.resynthesis.pd create mode 100644 desiredata/doc/3.audio.examples/I04.noisegate.pd create mode 100644 desiredata/doc/3.audio.examples/I05.compressor.pd create mode 100644 desiredata/doc/3.audio.examples/I06.timbre.stamp.pd create mode 100644 desiredata/doc/3.audio.examples/I07.phase.vocoder.pd create mode 100644 desiredata/doc/3.audio.examples/I08.pvoc.reverb.pd create mode 100644 desiredata/doc/3.audio.examples/I09.sheep.from.goats.pd create mode 100644 desiredata/doc/3.audio.examples/I10.phase.bash.pd create mode 100644 desiredata/doc/3.audio.examples/J01.even.odd.pd create mode 100644 desiredata/doc/3.audio.examples/J02.trapezoids.pd create mode 100644 desiredata/doc/3.audio.examples/J03.pulse.width.mod.pd create mode 100644 desiredata/doc/3.audio.examples/J04.corners.pd create mode 100644 desiredata/doc/3.audio.examples/J05.triangle.pd create mode 100644 desiredata/doc/3.audio.examples/J06.enveloping.pd create mode 100644 desiredata/doc/3.audio.examples/J07.oversampling.pd create mode 100644 desiredata/doc/3.audio.examples/J08.classicsynth.pd create mode 100644 desiredata/doc/3.audio.examples/J09.bandlimited.pd create mode 100644 desiredata/doc/3.audio.examples/adsr.pd create mode 100644 desiredata/doc/3.audio.examples/buttercoef3.pd create mode 100644 desiredata/doc/3.audio.examples/butterworth3~.pd create mode 100644 desiredata/doc/3.audio.examples/filter-graph1.pd create mode 100644 desiredata/doc/3.audio.examples/filter-graph2.pd create mode 100644 desiredata/doc/3.audio.examples/osc-voice.pd create mode 100644 desiredata/doc/3.audio.examples/output~.pd create mode 100644 desiredata/doc/3.audio.examples/partial.pd create mode 100644 desiredata/doc/3.audio.examples/qlist-sampler.txt create mode 100644 desiredata/doc/3.audio.examples/qlist.txt create mode 100644 desiredata/doc/3.audio.examples/qlist2.txt create mode 100644 desiredata/doc/3.audio.examples/reverb-echo.pd create mode 100644 desiredata/doc/3.audio.examples/sampvoice.pd create mode 100644 desiredata/doc/3.audio.examples/sampvoice2.pd create mode 100644 desiredata/doc/3.audio.examples/shepvoice.pd create mode 100644 desiredata/doc/3.audio.examples/sinevoice.pd create mode 100644 desiredata/doc/3.audio.examples/spectrum-partial.pd create mode 100644 desiredata/doc/4.data.structures/00.intro.txt create mode 100644 desiredata/doc/4.data.structures/01.scalars.pd create mode 100644 desiredata/doc/4.data.structures/02.getting.data.pd create mode 100644 desiredata/doc/4.data.structures/03.setting.data.pd create mode 100644 desiredata/doc/4.data.structures/04.append.pd create mode 100644 desiredata/doc/4.data.structures/05.array.pd create mode 100644 desiredata/doc/4.data.structures/06.file.pd create mode 100644 desiredata/doc/4.data.structures/07.sequencer.pd create mode 100644 desiredata/doc/4.data.structures/08.selection.pd create mode 100644 desiredata/doc/4.data.structures/09.scaling.pd create mode 100644 desiredata/doc/4.data.structures/10.onoff.pd create mode 100644 desiredata/doc/4.data.structures/11.array.controls.pd create mode 100644 desiredata/doc/4.data.structures/12.beat-patterns.pd create mode 100644 desiredata/doc/4.data.structures/13.sliderule.pd create mode 100644 desiredata/doc/4.data.structures/14.sinedecomposer.pd create mode 100644 desiredata/doc/4.data.structures/15.partialtracer.pd create mode 100644 desiredata/doc/4.data.structures/add-trace.pd create mode 100644 desiredata/doc/4.data.structures/beat-maker.pd create mode 100644 desiredata/doc/4.data.structures/data-array.pd create mode 100644 desiredata/doc/4.data.structures/data-start.pd create mode 100644 desiredata/doc/4.data.structures/file.txt create mode 100644 desiredata/doc/4.data.structures/osc-voice.pd create mode 100644 desiredata/doc/4.data.structures/output~.pd create mode 100644 desiredata/doc/4.data.structures/voice.pd create mode 100644 desiredata/doc/4.data.structures/z.txt create mode 100644 desiredata/doc/5.reference/0.INTRO.txt create mode 100644 desiredata/doc/5.reference/0_all_guis-INTRO.txt create mode 100644 desiredata/doc/5.reference/acoustics-help.pd create mode 100644 desiredata/doc/5.reference/acoustics~-help.pd create mode 100644 desiredata/doc/5.reference/adc~_dac~-help.pd create mode 100644 desiredata/doc/5.reference/append-help.pd create mode 100644 desiredata/doc/5.reference/bag-help.pd create mode 100644 desiredata/doc/5.reference/bang-help.pd create mode 100644 desiredata/doc/5.reference/bang~-help.pd create mode 100644 desiredata/doc/5.reference/biquad~-help.pd create mode 100644 desiredata/doc/5.reference/block~-help.pd create mode 100644 desiredata/doc/5.reference/bng-help.pd create mode 100644 desiredata/doc/5.reference/bp~-help.pd create mode 100644 desiredata/doc/5.reference/canvas-help.pd create mode 100644 desiredata/doc/5.reference/change-help.pd create mode 100644 desiredata/doc/5.reference/clip~-help.pd create mode 100644 desiredata/doc/5.reference/cos~-help.pd create mode 100644 desiredata/doc/5.reference/cpole~-help.pd create mode 100644 desiredata/doc/5.reference/cputime-help.pd create mode 100644 desiredata/doc/5.reference/czero_rev~-help.pd create mode 100644 desiredata/doc/5.reference/czero~-help.pd create mode 100644 desiredata/doc/5.reference/delay-help.pd create mode 100644 desiredata/doc/5.reference/delread~-help.pd create mode 100644 desiredata/doc/5.reference/delwrite~-help.pd create mode 100644 desiredata/doc/5.reference/drawnumber-help.pd create mode 100644 desiredata/doc/5.reference/drawpolygon-help.pd create mode 100644 desiredata/doc/5.reference/element-help.pd create mode 100644 desiredata/doc/5.reference/env~-help.pd create mode 100644 desiredata/doc/5.reference/fft~-help.pd create mode 100644 desiredata/doc/5.reference/float-help.pd create mode 100644 desiredata/doc/5.reference/framp~-help.pd create mode 100644 desiredata/doc/5.reference/gatom-help.pd create mode 100644 desiredata/doc/5.reference/get-help.pd create mode 100644 desiredata/doc/5.reference/getsize-help.pd create mode 100644 desiredata/doc/5.reference/graph-help.pd create mode 100644 desiredata/doc/5.reference/hdial-help.pd create mode 100644 desiredata/doc/5.reference/hip~-help.pd create mode 100644 desiredata/doc/5.reference/hslider-help.pd create mode 100644 desiredata/doc/5.reference/int-help.pd create mode 100644 desiredata/doc/5.reference/key-help.pd create mode 100644 desiredata/doc/5.reference/line-help.pd create mode 100644 desiredata/doc/5.reference/line~-help.pd create mode 100644 desiredata/doc/5.reference/list-help.pd create mode 100644 desiredata/doc/5.reference/lop~-help.pd create mode 100644 desiredata/doc/5.reference/makefilename-help.pd create mode 100644 desiredata/doc/5.reference/makenote-help.pd create mode 100644 desiredata/doc/5.reference/math-help.pd create mode 100644 desiredata/doc/5.reference/message-help.pd create mode 100644 desiredata/doc/5.reference/metro.pd create mode 100644 desiredata/doc/5.reference/midi-help.pd create mode 100644 desiredata/doc/5.reference/moses-help.pd create mode 100644 desiredata/doc/5.reference/my_canvas-help.pd create mode 100644 desiredata/doc/5.reference/namecanvas-help.pd create mode 100644 desiredata/doc/5.reference/netreceive-help.pd create mode 100644 desiredata/doc/5.reference/netsend-help.pd create mode 100644 desiredata/doc/5.reference/noise~-help.pd create mode 100644 desiredata/doc/5.reference/numbox2-help.pd create mode 100644 desiredata/doc/5.reference/openpanel-help.pd create mode 100644 desiredata/doc/5.reference/operators-help.pd create mode 100644 desiredata/doc/5.reference/osc~-help.pd create mode 100644 desiredata/doc/5.reference/otherbinops-help.pd create mode 100644 desiredata/doc/5.reference/pack-help.pd create mode 100644 desiredata/doc/5.reference/pd-help.pd create mode 100644 desiredata/doc/5.reference/phasor~-help.pd create mode 100644 desiredata/doc/5.reference/pipe-help.pd create mode 100644 desiredata/doc/5.reference/plot-help.pd create mode 100644 desiredata/doc/5.reference/pointer-help.pd create mode 100644 desiredata/doc/5.reference/poly-help.pd create mode 100644 desiredata/doc/5.reference/print-help.pd create mode 100644 desiredata/doc/5.reference/print~-help.pd create mode 100644 desiredata/doc/5.reference/qlist-help.pd create mode 100644 desiredata/doc/5.reference/qlist.txt create mode 100644 desiredata/doc/5.reference/random-help.pd create mode 100644 desiredata/doc/5.reference/readsf~-help.pd create mode 100644 desiredata/doc/5.reference/realtime-help.pd create mode 100644 desiredata/doc/5.reference/receive-help.pd create mode 100644 desiredata/doc/5.reference/route-help.pd create mode 100644 desiredata/doc/5.reference/rpole~-help.pd create mode 100644 desiredata/doc/5.reference/rsqrt~-help.pd create mode 100644 desiredata/doc/5.reference/rzero_rev~-help.pd create mode 100644 desiredata/doc/5.reference/rzero~-help.pd create mode 100644 desiredata/doc/5.reference/samphold~-help.pd create mode 100644 desiredata/doc/5.reference/savepanel-help.pd create mode 100644 desiredata/doc/5.reference/select-help.pd create mode 100644 desiredata/doc/5.reference/send-help.pd create mode 100644 desiredata/doc/5.reference/send~-help.pd create mode 100644 desiredata/doc/5.reference/set-help.pd create mode 100644 desiredata/doc/5.reference/setsize-help.pd create mode 100644 desiredata/doc/5.reference/setsize.txt create mode 100644 desiredata/doc/5.reference/sigbinops-help.pd create mode 100644 desiredata/doc/5.reference/sig~-help.pd create mode 100644 desiredata/doc/5.reference/snapshot~-help.pd create mode 100644 desiredata/doc/5.reference/soundfiler-help.pd create mode 100644 desiredata/doc/5.reference/spigot-help.pd create mode 100644 desiredata/doc/5.reference/sqrt~-help.pd create mode 100644 desiredata/doc/5.reference/stripnote-help.pd create mode 100644 desiredata/doc/5.reference/struct-help.pd create mode 100644 desiredata/doc/5.reference/sublist-help.pd create mode 100644 desiredata/doc/5.reference/swap-help.pd create mode 100644 desiredata/doc/5.reference/switch~-help.pd create mode 100644 desiredata/doc/5.reference/table.txt create mode 100644 desiredata/doc/5.reference/tabosc4~-help.pd create mode 100644 desiredata/doc/5.reference/tabplay~-help.pd create mode 100644 desiredata/doc/5.reference/tabread-help.pd create mode 100644 desiredata/doc/5.reference/tabread4~-help.pd create mode 100644 desiredata/doc/5.reference/tabreceive~-help.pd create mode 100644 desiredata/doc/5.reference/tabsend~-help.pd create mode 100644 desiredata/doc/5.reference/tabwrite-help.pd create mode 100644 desiredata/doc/5.reference/tabwrite~-help.pd create mode 100644 desiredata/doc/5.reference/text-help.pd create mode 100644 desiredata/doc/5.reference/textfile-help.pd create mode 100644 desiredata/doc/5.reference/textfile.txt create mode 100644 desiredata/doc/5.reference/threshold~-help.pd create mode 100644 desiredata/doc/5.reference/throw~-help.pd create mode 100644 desiredata/doc/5.reference/timer-help.pd create mode 100644 desiredata/doc/5.reference/toggle-help.pd create mode 100644 desiredata/doc/5.reference/trigger-help.pd create mode 100644 desiredata/doc/5.reference/unpack-help.pd create mode 100644 desiredata/doc/5.reference/until-help.pd create mode 100644 desiredata/doc/5.reference/value-help.pd create mode 100644 desiredata/doc/5.reference/vcf~-help.pd create mode 100644 desiredata/doc/5.reference/vdial-help.pd create mode 100644 desiredata/doc/5.reference/vd~-help.pd create mode 100644 desiredata/doc/5.reference/vline~-help.pd create mode 100644 desiredata/doc/5.reference/vslider-help.pd create mode 100644 desiredata/doc/5.reference/vu-help.pd create mode 100644 desiredata/doc/5.reference/wrap~-help.pd create mode 100644 desiredata/doc/5.reference/writesf~-help.pd create mode 100644 desiredata/doc/5.reference/x_all_guis.pd create mode 100644 desiredata/doc/6.externs/0.README.txt create mode 100644 desiredata/doc/6.externs/dspobj~.c create mode 100644 desiredata/doc/6.externs/makefile create mode 100644 desiredata/doc/6.externs/obj1.c create mode 100644 desiredata/doc/6.externs/obj2.c create mode 100644 desiredata/doc/6.externs/obj3.c create mode 100644 desiredata/doc/6.externs/obj4.c create mode 100644 desiredata/doc/6.externs/obj5.c create mode 100644 desiredata/doc/6.externs/test-dspobj~.pd create mode 100644 desiredata/doc/6.externs/test-obj1.pd create mode 100644 desiredata/doc/6.externs/test-obj2.pd create mode 100644 desiredata/doc/6.externs/test-obj3.pd create mode 100644 desiredata/doc/6.externs/test-obj4.pd create mode 100644 desiredata/doc/6.externs/test-obj5.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/1.ring-mod.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/2.bandpass.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/3.phase.vocoder.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/4.looper.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/5.reverb.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/6.vocoder.pd create mode 100644 desiredata/doc/7.stuff/soundfile-tools/README.txt create mode 100644 desiredata/doc/7.stuff/synth/1.poly.synth.pd create mode 100644 desiredata/doc/7.stuff/synth/README.txt create mode 100644 desiredata/doc/7.stuff/synth/gadsr.pd create mode 100644 desiredata/doc/7.stuff/synth/numset.pd create mode 100644 desiredata/doc/7.stuff/synth/preset.pd create mode 100644 desiredata/doc/7.stuff/synth/preset1.txt create mode 100644 desiredata/doc/7.stuff/synth/preset2.txt create mode 100644 desiredata/doc/7.stuff/synth/preset3.txt create mode 100644 desiredata/doc/7.stuff/synth/preset4.txt create mode 100644 desiredata/doc/7.stuff/synth/synthvoice.pd create mode 100644 desiredata/doc/7.stuff/synth/test-gadsr.pd create mode 100644 desiredata/doc/7.stuff/tools/latency.pd create mode 100644 desiredata/doc/7.stuff/tools/load-meter.pd create mode 100644 desiredata/doc/7.stuff/tools/testtone.pd create mode 100644 desiredata/doc/sound/bell.aiff create mode 100644 desiredata/doc/sound/voice.wav create mode 100644 desiredata/doc/sound/voice2.wav create mode 100644 desiredata/extra/Makefile.am create mode 100644 desiredata/extra/README.txt create mode 100644 desiredata/extra/bonk~/bonk~.c create mode 100644 desiredata/extra/bonk~/makefile create mode 100644 desiredata/extra/bonk~/templates.txt create mode 100644 desiredata/extra/choice/choice.c create mode 100644 desiredata/extra/choice/makefile create mode 100644 desiredata/extra/complex-mod~.pd create mode 100644 desiredata/extra/expr~/LICENSE.txt create mode 100644 desiredata/extra/expr~/README.txt create mode 100644 desiredata/extra/expr~/fts_to_pd.h create mode 100644 desiredata/extra/expr~/makefile create mode 100644 desiredata/extra/expr~/vexp.c create mode 100644 desiredata/extra/expr~/vexp.h create mode 100644 desiredata/extra/expr~/vexp_fun.c create mode 100644 desiredata/extra/expr~/vexp_if.c create mode 100644 desiredata/extra/fiddle~/fiddle~.c create mode 100644 desiredata/extra/fiddle~/makefile create mode 100644 desiredata/extra/help-complex-mod~.pd create mode 100644 desiredata/extra/help-expr.pd create mode 100644 desiredata/extra/help-hilbert~.pd create mode 100644 desiredata/extra/help-rev1~.pd create mode 100644 desiredata/extra/help-rev2~.pd create mode 100644 desiredata/extra/help-rev3~.pd create mode 100644 desiredata/extra/hilbert~.pd create mode 100644 desiredata/extra/loop~/loop~.c create mode 100644 desiredata/extra/loop~/makefile create mode 100644 desiredata/extra/loop~/test-loop~.pd create mode 100644 desiredata/extra/lrshift~/lrshift~.c create mode 100644 desiredata/extra/lrshift~/makefile create mode 100644 desiredata/extra/makefile create mode 100644 desiredata/extra/pique/makefile create mode 100644 desiredata/extra/pique/pique.c create mode 100644 desiredata/extra/pique/pique.c.old create mode 100644 desiredata/extra/pureunity/2times.pd create mode 100644 desiredata/extra/pureunity/3times.pd create mode 100644 desiredata/extra/pureunity/4times.pd create mode 100644 desiredata/extra/pureunity/COPYING create mode 100644 desiredata/extra/pureunity/ChangeLog create mode 100644 desiredata/extra/pureunity/Makefile create mode 100644 desiredata/extra/pureunity/README create mode 100644 desiredata/extra/pureunity/^.pd create mode 100644 desiredata/extra/pureunity/antireflexive-test.pd create mode 100644 desiredata/extra/pureunity/antisymmetric-test.pd create mode 100644 desiredata/extra/pureunity/arith-test.pd create mode 100644 desiredata/extra/pureunity/associative-test.pd create mode 100644 desiredata/extra/pureunity/associator.pd create mode 100644 desiredata/extra/pureunity/commutative-test.pd create mode 100644 desiredata/extra/pureunity/commutator.pd create mode 100644 desiredata/extra/pureunity/comparators-test.pd create mode 100644 desiredata/extra/pureunity/distributive-test.pd create mode 100644 desiredata/extra/pureunity/distributor.pd create mode 100644 desiredata/extra/pureunity/equivalence-test.pd create mode 100644 desiredata/extra/pureunity/glue-test.pd create mode 100644 desiredata/extra/pureunity/invertible-test.pd create mode 100644 desiredata/extra/pureunity/invertor.pd create mode 100644 desiredata/extra/pureunity/locale/english.tcl create mode 100644 desiredata/extra/pureunity/main.pd create mode 100644 desiredata/extra/pureunity/norm.#.pd create mode 100644 desiredata/extra/pureunity/norm.f.pd create mode 100644 desiredata/extra/pureunity/norm.~.pd create mode 100644 desiredata/extra/pureunity/op2.#.pd create mode 100644 desiredata/extra/pureunity/op2.f.pd create mode 100644 desiredata/extra/pureunity/op2.~.pd create mode 100644 desiredata/extra/pureunity/operator1-rule.pd create mode 100644 desiredata/extra/pureunity/operator1-test.pd create mode 100644 desiredata/extra/pureunity/operator2-rule.pd create mode 100644 desiredata/extra/pureunity/operator2-test.pd create mode 100644 desiredata/extra/pureunity/packunpack3.#.pd create mode 100644 desiredata/extra/pureunity/packunpack3.f.pd create mode 100644 desiredata/extra/pureunity/packunpack3.~.pd create mode 100644 desiredata/extra/pureunity/partialorder-test.pd create mode 100644 desiredata/extra/pureunity/partialordereq-test.pd create mode 100644 desiredata/extra/pureunity/protocols-tree.pd create mode 100644 desiredata/extra/pureunity/pureunity.c create mode 100644 desiredata/extra/pureunity/rand.#.pd create mode 100644 desiredata/extra/pureunity/rand.f.pd create mode 100644 desiredata/extra/pureunity/rand.~.pd create mode 100644 desiredata/extra/pureunity/reflexive-test.pd create mode 100644 desiredata/extra/pureunity/swap.#.pd create mode 100644 desiredata/extra/pureunity/swap.f.pd create mode 100644 desiredata/extra/pureunity/swap.~.pd create mode 100644 desiredata/extra/pureunity/taa.#.pd create mode 100644 desiredata/extra/pureunity/taa.f.pd create mode 100644 desiredata/extra/pureunity/taa.~.pd create mode 100644 desiredata/extra/pureunity/totalorder-test.pd create mode 100644 desiredata/extra/pureunity/totalordereq-test.pd create mode 100644 desiredata/extra/pureunity/transitive-test.pd create mode 100644 desiredata/extra/pureunity/tree.pd create mode 100644 desiredata/extra/pureunity/trichotomy-test.pd create mode 100644 desiredata/extra/rev1-final.pd create mode 100644 desiredata/extra/rev1-stage.pd create mode 100644 desiredata/extra/rev1~.pd create mode 100644 desiredata/extra/rev2~.pd create mode 100644 desiredata/extra/rev3~.pd create mode 100644 desiredata/extra/sigmund~/makefile create mode 100644 desiredata/extra/sigmund~/sigmund~-help.pd create mode 100644 desiredata/extra/sigmund~/sigmund~.c create mode 100644 desiredata/icons/Array.gif create mode 100644 desiredata/icons/CommentBox.gif create mode 100644 desiredata/icons/FloatBox.gif create mode 100644 desiredata/icons/Graph.gif create mode 100644 desiredata/icons/MessageBox.gif create mode 100644 desiredata/icons/ObjectBox.gif create mode 100644 desiredata/icons/SymbolBox.gif create mode 100644 desiredata/icons/bng.gif create mode 100644 desiredata/icons/cnv.gif create mode 100755 desiredata/icons/hradio.gif create mode 100644 desiredata/icons/hsl.gif create mode 100755 desiredata/icons/mode_edit.gif create mode 100755 desiredata/icons/mode_run.gif create mode 100644 desiredata/icons/nbx.gif create mode 100644 desiredata/icons/pd.gif create mode 100644 desiredata/icons/tgl.gif create mode 100755 desiredata/icons/vradio.gif create mode 100644 desiredata/icons/vsl.gif create mode 100755 desiredata/icons/vu.gif create mode 100644 desiredata/man/pd.1 create mode 100644 desiredata/man/pdreceive.1 create mode 100644 desiredata/man/pdsend.1 create mode 100644 desiredata/portmidi_osx/Makefile create mode 100644 desiredata/portmidi_osx/README create mode 100644 desiredata/portmidi_osx/pmdarwin.c create mode 100644 desiredata/portmidi_osx/pminternal.h create mode 100644 desiredata/portmidi_osx/pmmacosx.c create mode 100644 desiredata/portmidi_osx/pmmacosx.h create mode 100644 desiredata/portmidi_osx/pmtest.c create mode 100644 desiredata/portmidi_osx/pmutil.c create mode 100644 desiredata/portmidi_osx/pmutil.h create mode 100644 desiredata/portmidi_osx/portmidi.c create mode 100644 desiredata/portmidi_osx/portmidi.h create mode 100644 desiredata/portmidi_osx/portmidi_osx_change_log.txt create mode 100644 desiredata/portmidi_osx/porttime.h create mode 100644 desiredata/portmidi_osx/ptdarwin.c create mode 100644 desiredata/src/ChangeLog create mode 100644 desiredata/src/TODO create mode 100644 desiredata/src/bgerror.tcl create mode 100644 desiredata/src/builtins.c create mode 100644 desiredata/src/builtins_dsp.c create mode 100644 desiredata/src/config.h.in create mode 100755 desiredata/src/configure create mode 100644 desiredata/src/configure.in create mode 100755 desiredata/src/cvs-switch-user create mode 100644 desiredata/src/d_fftroutine.c create mode 100644 desiredata/src/d_mayer_fft.c create mode 100644 desiredata/src/d_soundfile.c create mode 100644 desiredata/src/d_ugen.c create mode 100644 desiredata/src/defaults.ddrc create mode 100644 desiredata/src/desire.c create mode 100644 desiredata/src/desire.h create mode 100644 desiredata/src/desire.tk create mode 100644 desiredata/src/dzinc.tcl create mode 100644 desiredata/src/icons/array.gif create mode 100644 desiredata/src/icons/bang.gif create mode 100644 desiredata/src/icons/canvas.gif create mode 100644 desiredata/src/icons/comment.gif create mode 100644 desiredata/src/icons/graph.gif create mode 100644 desiredata/src/icons/hradio.gif create mode 100644 desiredata/src/icons/hslider.gif create mode 100644 desiredata/src/icons/message.gif create mode 100644 desiredata/src/icons/mode_edit.gif create mode 100644 desiredata/src/icons/mode_run.gif create mode 100644 desiredata/src/icons/number.gif create mode 100644 desiredata/src/icons/number2.gif create mode 100644 desiredata/src/icons/object.gif create mode 100644 desiredata/src/icons/symbol.gif create mode 100644 desiredata/src/icons/toggle.gif create mode 100644 desiredata/src/icons/vradio.gif create mode 100644 desiredata/src/icons/vslider.gif create mode 100644 desiredata/src/icons/vu.gif create mode 100644 desiredata/src/install-sh create mode 100644 desiredata/src/iostream.txt create mode 100644 desiredata/src/kb-mode.tcl create mode 100644 desiredata/src/kernel.c create mode 100644 desiredata/src/locale/bokmal.tcl create mode 100644 desiredata/src/locale/brasiliano.tcl create mode 100644 desiredata/src/locale/catala.tcl create mode 100644 desiredata/src/locale/chinese.tcl create mode 100644 desiredata/src/locale/dansk.tcl create mode 100644 desiredata/src/locale/deutsch.tcl create mode 100644 desiredata/src/locale/english.tcl create mode 100644 desiredata/src/locale/espanol.tcl create mode 100644 desiredata/src/locale/euskara.tcl create mode 100644 desiredata/src/locale/francais.tcl create mode 100644 desiredata/src/locale/index.tcl create mode 100644 desiredata/src/locale/italiano.tcl create mode 100755 desiredata/src/locale/localeutils.tcl create mode 100644 desiredata/src/locale/nederlands.tcl create mode 100644 desiredata/src/locale/nihongo.tcl create mode 100644 desiredata/src/locale/polski.tcl create mode 100644 desiredata/src/locale/portugues.tcl create mode 100644 desiredata/src/locale/russkij.tcl create mode 100644 desiredata/src/locale/turkce.tcl create mode 100644 desiredata/src/m_atomic.h create mode 100644 desiredata/src/m_fifo.c create mode 100644 desiredata/src/m_pd.h create mode 100644 desiredata/src/m_sched.c create mode 100644 desiredata/src/m_simd.c create mode 100644 desiredata/src/m_simd.h create mode 100644 desiredata/src/m_simd_sse_gcc.c create mode 100644 desiredata/src/m_simd_ve_gcc.c create mode 100644 desiredata/src/m_simd_ve_gcc.h create mode 100644 desiredata/src/main.c create mode 100644 desiredata/src/makefile.in create mode 100644 desiredata/src/notes.txt create mode 100644 desiredata/src/pkgIndex.tcl create mode 100755 desiredata/src/plusminus create mode 100644 desiredata/src/poe.tcl create mode 100644 desiredata/src/pre8.5.tcl create mode 100644 desiredata/src/profile_dd.tcl create mode 100644 desiredata/src/rules.txt create mode 100644 desiredata/src/s_audio.c create mode 100644 desiredata/src/s_audio_alsa.c create mode 100644 desiredata/src/s_audio_alsa.h create mode 100644 desiredata/src/s_audio_alsamm.c create mode 100644 desiredata/src/s_audio_asio.cpp create mode 100644 desiredata/src/s_audio_jack.c create mode 100644 desiredata/src/s_audio_mmio.c create mode 100644 desiredata/src/s_audio_oss.c create mode 100644 desiredata/src/s_audio_pa.c create mode 100644 desiredata/src/s_audio_pablio.c create mode 100644 desiredata/src/s_audio_pablio.h create mode 100644 desiredata/src/s_audio_paring.c create mode 100644 desiredata/src/s_audio_paring.h create mode 100755 desiredata/src/s_audio_portaudio.c create mode 100644 desiredata/src/s_audio_sgi.c create mode 100644 desiredata/src/s_inter.c create mode 100644 desiredata/src/s_loader.c create mode 100644 desiredata/src/s_main.c create mode 100644 desiredata/src/s_midi.c create mode 100644 desiredata/src/s_midi_alsa.c create mode 100644 desiredata/src/s_midi_mmio.c create mode 100644 desiredata/src/s_midi_none.c create mode 100644 desiredata/src/s_midi_oss.c create mode 100644 desiredata/src/s_midi_pm.c create mode 100644 desiredata/src/s_midi_sgi.c create mode 100644 desiredata/src/s_path.c create mode 100644 desiredata/src/s_stuff.h create mode 100644 desiredata/src/s_watchdog.c create mode 100644 desiredata/src/tests/abstr-test.pd create mode 100644 desiredata/src/tests/abstr.pd create mode 100644 desiredata/src/tests/abstr2.pd create mode 100644 desiredata/src/tests/all_guis_and_gop.pd create mode 100644 desiredata/src/tests/all_guis_and_gop.pd.gif create mode 100644 desiredata/src/tests/bof.pd create mode 100644 desiredata/src/tests/chun.pd create mode 100644 desiredata/src/tests/city.pd create mode 100644 desiredata/src/tests/desiredata-presentation-piksel06.pd create mode 100644 desiredata/src/tests/gop-one.pd create mode 100644 desiredata/src/tests/gop-three.pd create mode 100644 desiredata/src/tests/gop-two.pd create mode 100644 desiredata/src/tests/sub.pd create mode 100644 desiredata/src/tests/subgop-test.pd create mode 100644 desiredata/src/u_pdreceive.c create mode 100644 desiredata/src/u_pdsend.c create mode 100644 desiredata/src/valgrind3.supp (limited to 'desiredata') diff --git a/desiredata/COPYING b/desiredata/COPYING new file mode 100644 index 00000000..a56a51eb --- /dev/null +++ b/desiredata/COPYING @@ -0,0 +1,30 @@ +This software is copyrighted by Miller Puckette and others. The following +terms (the "Standard Improved BSD License") apply to all files associated with +the software unless explicitly disclaimed in individual files: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/desiredata/COPYING.desire-client.txt b/desiredata/COPYING.desire-client.txt new file mode 100644 index 00000000..eeb586b3 --- /dev/null +++ b/desiredata/COPYING.desire-client.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/desiredata/INSTALL.txt b/desiredata/INSTALL.txt new file mode 100644 index 00000000..d456fb77 --- /dev/null +++ b/desiredata/INSTALL.txt @@ -0,0 +1,73 @@ +to build this program, you need to have those packages: + + gcc (including the libc6 dev package and the g++ package) + tcl >= 8.4 (the dev package) + tk >= 8.4 (the dev package) + make + +then type commands like: + + cd src + ./configure + make + make install + +The ./configure program has some options that you can use if for some +reason you want to disable the use of certain libraries for some reason. +You may also use it to specify a different installation directory: for +example you install programs with --prefix=$HOME but then you need to have +something like this in my Bash configuration (.bashrc and/or .bash_profile): + + export PATH=$HOME/bin:$PATH + export LIBRARY_PATH=$HOME/lib + export LD_LIBRARY_PATH=$HOME/lib + export C_INCLUDE_PATH=$HOME/include + export CPLUS_INCLUDE_PATH=$HOME/include + +to start DesireData, type a command like: + + desire mystuff.pd + +You may also make a build without the "make install" step and then start +pd from the src directory like this: + + cd src + wish desire.tk mystuff.pd + +If you want to have both DesireData and another kind of PureData on the same +system, use a different --prefix or else just keep the compiled source +directories ready for a new "make install" phase each time you want to switch. + +Most externals are compatible; almost all exceptions are those that use +a component called "t_widgetbehavior": [popup], [widget], [playlist], +[sonogram], [grid], [display]. + +Most abstractions are compatible too; almost all exceptions are those that +use "click" messages to fake mouse actions. + +There are some options of DesireData that are available as commandline +arguments, for example selecting a language (Spanish, German, etc). You +can get a list of them by typing: + + desire -- -help + +Most other configuration can be done through the Preferences items in the +File menu of the main window, or by editing the corresponding configuration +files ".pdrc" and ".ddrc" in the home directory. + + +Options that are planned for future versions of DesireData and are currently +in available in devel_0_39 : + + lockfree = enables lockfree fifos for thread synchronization + newhash = provides a bigger hash table for symbols + atomic = use atomic operations for the internal stack counter + threadedsf = broken in 0.39; in 0.38, provides threaded soundfiler + daz = Build using DAZ flag on x86-SSE2 cpus (must be set to False for AMD cpus) + app_pkg = install builds application package structure for OSX + desire = enables building of experimental MVC gui + simd = build with simd extensions (x86 only?) + pdlib = build pd as a dynamic library + optimize = optimize for given cpu-type + prefix = install directory prefix + diff --git a/desiredata/LICENSE.txt b/desiredata/LICENSE.txt new file mode 100644 index 00000000..6223bb52 --- /dev/null +++ b/desiredata/LICENSE.txt @@ -0,0 +1,35 @@ +This software is DesireData, + Copyright 2004-2007 by Mathieu Bouchard, +derived from PureData, + Copyright 1997-2006 by Miller Puckette and others. + +The following terms (the "Standard Improved BSD License") apply to +all files associated with the software unless explicitly disclaimed in +individual files: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/desiredata/README.txt b/desiredata/README.txt new file mode 100644 index 00000000..1c7a564f --- /dev/null +++ b/desiredata/README.txt @@ -0,0 +1,37 @@ +This is DesireData 0.39.A.pre3 (2006.11.27) + +See INSTALL.txt for installation instructions. + +This is the README file for DesireData, a free (libre) real-time computer +programming language interpreter focused on realtime audio and video. +You can get DesireData from http://desiredata.goto10.org/ + +If you have qustions about Pd, or if you wish to be notified of releases, +check the Pd mailing list: http://iem.mhsg.ac.at/mailinglists/pd-list/ + +All files in the DesireData distribution are supposed to be labeled with +copyright/license notices. There is no copyright nor license that you may +assume for files for which you do not know who is the author. If you find + such files, please contact matju and/or chun. (This is different than +Miller's distribution, which supposes a general copyright on all files it +contains.) + +For information on usage and redistribution, and for a DISCLAIMER OF ALL +WARRANTIES, see the files "COPYING" and "COPYING.desire-client.txt", which +cover licensing of the two parts of DesireData. (Note that tcl/tk, expr, +and some other files are copyrighted separately). + +Mathieu and Chun thank: Thomas Grill, Tim Blechmann, all translators, ... + +Miller thanked: Harry Castle, Krzysztof Czaja, Mark Danks, +Christian Feldbauer, Guenter Geiger, Kerry Hagan, Trevor Johnson, Fernando +Lopez-Lezcano, Adam Lindsay, Karl MacMillan, Thomas Musil, Toshinori Ohkouchi, +Winfried Ritsch, Vibeke Sorensen, Rand Steiger, Hans-Christoph Steiner, +Shahrokh Yadegari, David Zicarelli, Iohannes Zmoelnig, and probably many others +for contributions of code, documentation, ideas, and expertise. This work has +received generous support from the Intel Research Council. + +Further Acknowledgements: + - devel_0_39 lockfree fifos adapted from midishare: Copyright © Grame 1999 + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France + grame@rd.grame.fr diff --git a/desiredata/doc/1.manual/1.introduction.txt b/desiredata/doc/1.manual/1.introduction.txt new file mode 100644 index 00000000..f9209702 --- /dev/null +++ b/desiredata/doc/1.manual/1.introduction.txt @@ -0,0 +1,23 @@ +PD_VERSION + +A real-time graphical programming environment for live interactive +computer music, Pd works on SGI machines, Microsoft Windows, +Linux, and Max OSX. + +Pd is copyrighted, but is free for you to use for any reasonable purpose. +See the file: + PD_BASEDIR/LICENSE.txt + +Reference documentation for Pd lives in: + file:PD_BASEDIR/doc/1.manual/index.htm +or: + http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm + +Much more documentation and other resources live on: + http://puredata.org + +The Pd mailing list archive lives in: + http://iem.kug.ac.at/mailinglists/pd-list/ + + +Many more useful links are listed in the HTML documentation, section 1.2. diff --git a/desiredata/doc/1.manual/fig1.1.png b/desiredata/doc/1.manual/fig1.1.png new file mode 100644 index 00000000..483a1e8c Binary files /dev/null and b/desiredata/doc/1.manual/fig1.1.png differ diff --git a/desiredata/doc/1.manual/fig1.2.jpg b/desiredata/doc/1.manual/fig1.2.jpg new file mode 100644 index 00000000..c33c755c Binary files /dev/null and b/desiredata/doc/1.manual/fig1.2.jpg differ diff --git a/desiredata/doc/1.manual/fig1.3.jpg b/desiredata/doc/1.manual/fig1.3.jpg new file mode 100644 index 00000000..caf29b2d Binary files /dev/null and b/desiredata/doc/1.manual/fig1.3.jpg differ diff --git a/desiredata/doc/1.manual/fig1.4.png b/desiredata/doc/1.manual/fig1.4.png new file mode 100644 index 00000000..1dc8e037 Binary files /dev/null and b/desiredata/doc/1.manual/fig1.4.png differ diff --git a/desiredata/doc/1.manual/fig1.5.jpg b/desiredata/doc/1.manual/fig1.5.jpg new file mode 100644 index 00000000..4b01c59f Binary files /dev/null and b/desiredata/doc/1.manual/fig1.5.jpg differ diff --git a/desiredata/doc/1.manual/fig11.1.png b/desiredata/doc/1.manual/fig11.1.png new file mode 100644 index 00000000..1a32fe4f Binary files /dev/null and b/desiredata/doc/1.manual/fig11.1.png differ diff --git a/desiredata/doc/1.manual/fig11.2.png b/desiredata/doc/1.manual/fig11.2.png new file mode 100644 index 00000000..38990aac Binary files /dev/null and b/desiredata/doc/1.manual/fig11.2.png differ diff --git a/desiredata/doc/1.manual/fig11.3.png b/desiredata/doc/1.manual/fig11.3.png new file mode 100644 index 00000000..daf6e7b0 Binary files /dev/null and b/desiredata/doc/1.manual/fig11.3.png differ diff --git a/desiredata/doc/1.manual/fig11.4.png b/desiredata/doc/1.manual/fig11.4.png new file mode 100644 index 00000000..d8d99682 Binary files /dev/null and b/desiredata/doc/1.manual/fig11.4.png differ diff --git a/desiredata/doc/1.manual/fig3.1.jpg b/desiredata/doc/1.manual/fig3.1.jpg new file mode 100644 index 00000000..f8348970 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.1.jpg differ diff --git a/desiredata/doc/1.manual/fig3.10.jpg b/desiredata/doc/1.manual/fig3.10.jpg new file mode 100644 index 00000000..4625ce0c Binary files /dev/null and b/desiredata/doc/1.manual/fig3.10.jpg differ diff --git a/desiredata/doc/1.manual/fig3.2.jpg b/desiredata/doc/1.manual/fig3.2.jpg new file mode 100644 index 00000000..994d41c7 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.2.jpg differ diff --git a/desiredata/doc/1.manual/fig3.3.jpg b/desiredata/doc/1.manual/fig3.3.jpg new file mode 100644 index 00000000..91cac54a Binary files /dev/null and b/desiredata/doc/1.manual/fig3.3.jpg differ diff --git a/desiredata/doc/1.manual/fig3.4.jpg b/desiredata/doc/1.manual/fig3.4.jpg new file mode 100644 index 00000000..e2f2fe53 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.4.jpg differ diff --git a/desiredata/doc/1.manual/fig3.5.jpg b/desiredata/doc/1.manual/fig3.5.jpg new file mode 100644 index 00000000..9a79a2b3 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.5.jpg differ diff --git a/desiredata/doc/1.manual/fig3.6.jpg b/desiredata/doc/1.manual/fig3.6.jpg new file mode 100644 index 00000000..fcbcf3da Binary files /dev/null and b/desiredata/doc/1.manual/fig3.6.jpg differ diff --git a/desiredata/doc/1.manual/fig3.7.jpg b/desiredata/doc/1.manual/fig3.7.jpg new file mode 100644 index 00000000..84dcd7f7 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.7.jpg differ diff --git a/desiredata/doc/1.manual/fig3.8.jpg b/desiredata/doc/1.manual/fig3.8.jpg new file mode 100644 index 00000000..ab03a207 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.8.jpg differ diff --git a/desiredata/doc/1.manual/fig3.9.jpg b/desiredata/doc/1.manual/fig3.9.jpg new file mode 100644 index 00000000..6e9655c7 Binary files /dev/null and b/desiredata/doc/1.manual/fig3.9.jpg differ diff --git a/desiredata/doc/1.manual/fig7.1.jpg b/desiredata/doc/1.manual/fig7.1.jpg new file mode 100644 index 00000000..b677f6bd Binary files /dev/null and b/desiredata/doc/1.manual/fig7.1.jpg differ diff --git a/desiredata/doc/1.manual/fig7.2.jpg b/desiredata/doc/1.manual/fig7.2.jpg new file mode 100644 index 00000000..54690d0e Binary files /dev/null and b/desiredata/doc/1.manual/fig7.2.jpg differ diff --git a/desiredata/doc/1.manual/fig7.3.jpg b/desiredata/doc/1.manual/fig7.3.jpg new file mode 100644 index 00000000..a3b70ed3 Binary files /dev/null and b/desiredata/doc/1.manual/fig7.3.jpg differ diff --git a/desiredata/doc/1.manual/fig7.4.jpg b/desiredata/doc/1.manual/fig7.4.jpg new file mode 100644 index 00000000..88ba5b40 Binary files /dev/null and b/desiredata/doc/1.manual/fig7.4.jpg differ diff --git a/desiredata/doc/1.manual/fig7.5.jpg b/desiredata/doc/1.manual/fig7.5.jpg new file mode 100644 index 00000000..f9de4b3b Binary files /dev/null and b/desiredata/doc/1.manual/fig7.5.jpg differ diff --git a/desiredata/doc/1.manual/fig7.6.jpg b/desiredata/doc/1.manual/fig7.6.jpg new file mode 100644 index 00000000..5f24af7a Binary files /dev/null and b/desiredata/doc/1.manual/fig7.6.jpg differ diff --git a/desiredata/doc/1.manual/fig8.1.jpg b/desiredata/doc/1.manual/fig8.1.jpg new file mode 100644 index 00000000..57e59313 Binary files /dev/null and b/desiredata/doc/1.manual/fig8.1.jpg differ diff --git a/desiredata/doc/1.manual/fig8.2.jpg b/desiredata/doc/1.manual/fig8.2.jpg new file mode 100644 index 00000000..1dd48cd9 Binary files /dev/null and b/desiredata/doc/1.manual/fig8.2.jpg differ diff --git a/desiredata/doc/1.manual/fig8.3.jpg b/desiredata/doc/1.manual/fig8.3.jpg new file mode 100644 index 00000000..165c1c88 Binary files /dev/null and b/desiredata/doc/1.manual/fig8.3.jpg differ diff --git a/desiredata/doc/1.manual/fig8.4.jpg b/desiredata/doc/1.manual/fig8.4.jpg new file mode 100644 index 00000000..afc89a73 Binary files /dev/null and b/desiredata/doc/1.manual/fig8.4.jpg differ diff --git a/desiredata/doc/1.manual/fig8.5.jpg b/desiredata/doc/1.manual/fig8.5.jpg new file mode 100644 index 00000000..6fa3d0d1 Binary files /dev/null and b/desiredata/doc/1.manual/fig8.5.jpg differ diff --git a/desiredata/doc/1.manual/fig8.6.jpg b/desiredata/doc/1.manual/fig8.6.jpg new file mode 100644 index 00000000..2823e032 Binary files /dev/null and b/desiredata/doc/1.manual/fig8.6.jpg differ diff --git a/desiredata/doc/1.manual/fig9.1.jpg b/desiredata/doc/1.manual/fig9.1.jpg new file mode 100644 index 00000000..bab4b689 Binary files /dev/null and b/desiredata/doc/1.manual/fig9.1.jpg differ diff --git a/desiredata/doc/1.manual/fig9.2.jpg b/desiredata/doc/1.manual/fig9.2.jpg new file mode 100644 index 00000000..88ef528c Binary files /dev/null and b/desiredata/doc/1.manual/fig9.2.jpg differ diff --git a/desiredata/doc/1.manual/fig9.3.jpg b/desiredata/doc/1.manual/fig9.3.jpg new file mode 100644 index 00000000..ecb66004 Binary files /dev/null and b/desiredata/doc/1.manual/fig9.3.jpg differ diff --git a/desiredata/doc/1.manual/index.htm b/desiredata/doc/1.manual/index.htm new file mode 100644 index 00000000..519a5102 --- /dev/null +++ b/desiredata/doc/1.manual/index.htm @@ -0,0 +1,165 @@ + + + + + Pd Documentation + + + + + + + +

Pd Documentation

+ +

+This is the HTML documentation for Pd, a patchable environment for audio +analysis, synthesis, and processing, +with a rich set of multimedia capabilities. The latest version of this page +can be found at: + + http://www.crca.ucsd.edu/~msp/software.html . +

    +
  1. introduction +
      +
    1. guide to the documentation +
    2. other resources +
    + +
  2. theory of operation +
      +
    1. overview +
        +
      1. main window, canvases, and printout +
      2. object boxes +
      3. message and GUI boxes +
      4. patches and files +
      +
    2. how to edit patches +
        +
      1. edit and run mode +
      2. creating boxes +
      3. the selection +
      4. deleting, cutting, and pasting +
      5. changing the text +
      6. connecting and disconnecting boxes +
      7. properties and help +
      +
    3. messages +
        +
      1. anatomy of a message +
      2. depth first message passing +
      3. + hot and cold inlets and right to left outlet order +
      4. message boxes +
      +
    4. audio signals +
        +
      1. sample rate and format +
      2. tilde objects and audio connections +
      3. converting to and from messages +
      4. switching and blocking +
      5. nonlocal signal connections +
      +
    5. scheduling +
        +
      1. audio and messages +
      2. computation load +
      3. determinism +
      +
    6. semantics +
        +
      1. creation of objects +
      2. persistence of data +
      3. message passing +
      4. inlets and lists +
      5. dollar signs +
      +
    7. subpatches +
        +
      1. abstractions +
      2. graph-on-parent subpatches +
      +
    8. numeric arrays +
    9. data structures +
        +
      1. traversal +
      2. accessing and changing data +
      3. editing +
      4. limitations +
      + +
    + +
  3. getting Pd to run +
      +
    1. audio and MIDI +
    2. installing Pd in Microsoft Windows +
    3. installing Pd in Linux +
    4. installing Pd in MacOS X +
    5. installing Pd in IRIX (SGI) +
    6. preferences and startup options +
    7. how Pd searches for files +
    +
  4. writing Pd objects in C + +
  5. current status +
      +
    1. release notes +
    2. known bugs +
    3. differences from Max/MSP +
    + +
+ + + + + + + + diff --git a/desiredata/doc/1.manual/pdmanual.css b/desiredata/doc/1.manual/pdmanual.css new file mode 100755 index 00000000..01d66ab2 --- /dev/null +++ b/desiredata/doc/1.manual/pdmanual.css @@ -0,0 +1,39 @@ + +HTML { + background: #ffffff; + color: #000000; + font-family: Times, Times New Roman, serif; + font-size: 10pt; +} +BODY { + width: 6.5in; + margin-left: 0.5in +} +H1 { + font-size: 36pt; + text-align: center; +} +H2 { + font-size: 10pt; + text-align: center; +} +H3 { + font-size: 12pt; + text-align: left; +} +H4 { + font-size: 10pt; + text-align: left; +} +H5 { + font-size: 8pt; + text-align: left; +} +H6 { + font-size: 8pt; + text-align: left; +} +PRE { + font-size: 8pt; + text-align: left; +} diff --git a/desiredata/doc/1.manual/x1.htm b/desiredata/doc/1.manual/x1.htm new file mode 100644 index 00000000..a9d8caaf --- /dev/null +++ b/desiredata/doc/1.manual/x1.htm @@ -0,0 +1,150 @@ + + + + + Pd Documentation 1 + + + + + + +

Pd Documentation chapter 1: introduction

+ +

+ back to table of contents +

+

+ + +

+This is the HTML documentation for the Pd computer program. +Pd is free and can be downloaded from the internet; +go to + + http://www.crca.ucsd.edu/~msp/software.html +to get it. +

1.1. guide to the documentation

+ +

Pd's documentation consists of: + +

    +
  • this HTML manual +
  • "reference" patches, one for each kind of object in Pd +
  • "example" patches showing how to do things +
  • sample C code +
+ +

+This manual has five sections: + +

    +
  1. this overview +
  2. + a theory of operations, explaining how Pd works +
  3. + instructions on installing Pd and getting it to run +
  4. how to write C extensions to Pd +
  5. release notes and known bugs +
+ +

In order to consult the reference and example patches, you'll first have +to get Pd started as explained in this manual. + +

+For a list of all the objects you can use in Pd, see the text file, +"0.INTRO.txt" in the directory, "../5.reference". To get help on any +Pd object you can right click on it; or you can browse the help patches +by choosing "Pure Documentation..." in the Pd help menu and looking in +5.reference. + +

+The example patches are also available from the "Pure Documentation..." item +in Pd's +"help" menu. The example patches appear in subdirectories named +"2.control.examples", "3.audio.examples" and "4.fft.examples." Some additional +patches in "7.stuff" might also be helpful. + +

+To get started writing your own C extensions, refer to chapter 4 of this manual. + +

1.2. other resources

+ +

There is a new Pd community web site, + pure-data.info, which aims to be the +central resource for Pd, from documentation and +downloads; to forums, member pages, a patch exchange. + +

There is a growing number of Pd-related projects hosted at +SourceForge. This is open to all Pd +developers, and all are encouraged to join; send an email to the pd-dev list +(see below). + +

+Most of the interesting resources related to Pd show up on the Pd mailing list, +maintained by Iohannes Zmoelnig. To subscribe or browse the archives +visit: + + http://iem.kug.ac.at/mailinglists/pd-list/. + +. This is the +best source of recent information regarding installation problems and bugs. It +is perfectly reasonable to post "newbie" questions on this list; alternatively +you can contact msp@ucsd.edu for help. + +

Many extensions to Pd are announced on the mailing list. In particular, +for people interested in graphics, there is a A 3D graphics rendering package, +named GEM, based on OpenGL, written by Mark Danks, adapted to Linux by +Guenter Geiger, and now maintained by Iohannes Zmoelnig. GEM runs on +Windows and Linux and probably will run with some coaxing on IRIX. You can get +it from: http://iem.kug.ac.at/GEM . + +

At least three video processing packages are available for Pd. The oldest +is Framestein, by Juha Vehvilainen. This runs on Windows only: http://framestein.org . + +

The newer href="http://zwizwa.fartit.com/pd/pdp/overview.html"> PDP + library, by Tom Schouten, and its extension PiDiP by Yves Degoyon, run well +in linux and has been ported to Windows and MacOS. Video is extremely fast in +PDP, but is currently limited to 240x320 resolution. + +

Mathieu Bouchard has written +Gridflow , which runs on linux and MacOSX. The mathematical operators are +more powerful than in PDP, and the design makes smarter use of cache behavior +in modern CPUs. + +All this and much more is described in detail at the + +first Pd Convention . + + +

+Here are some more Pd links (in the order I found them):
+ + Miller Puckette's home page
+ Guenter Geiger's home page
+ Mark Dank's home page
+Pd page on Wonk (Klaus)
+ + Johannes M Zmoelnig
+ Norbert Math's Pd page
+ +Nicolas Lhommet's WikiWikiWeb page for Pd
+ Norbert's searchable list of all known +Pd objects
+ +Krzysztof Czaja's MIDI file support
+ +David Sabine's Pd Documentation Project: +new, highly detailed help windows
+ +Fernando Pablo Lopez's augmented Pd RPMs from Planet CCRMA
+ +Cyclone - Krzysztof Czaja's Max compatibility library
+On-line book project: + Theory and Techniques of Electronic Music
+ + + diff --git a/desiredata/doc/1.manual/x2.htm b/desiredata/doc/1.manual/x2.htm new file mode 100644 index 00000000..dd33b149 --- /dev/null +++ b/desiredata/doc/1.manual/x2.htm @@ -0,0 +1,1276 @@ + + + + + Pd Documentation 2 + + + + + + + +

Pd Documentation chapter 2: theory of operation

+ +

+ back to table of contents +

+

+ +

+ +

The purpose of this chapter is to describe Pd's design and how it is +supposed to work. Practical details about how to obtain, install, and run Pd +are described in the next chapter. To learn digital audio processing basics +such as how to generate time-varying sounds that don't click or fold over, try +the on-line book, + Theory and Techniques of Electronic Music . + +

2.1 overview

+ +

Pd is a real-time graphical programming environment for audio and graphical +processing. It resembles the Max/MSP system but is much simpler and more +portable; also Pd has two features not (yet) showing up in Max/MSP: first, +via Mark Dank's GEM package, Pd can be used for simultaneous computer +animation and computer audio. Second, an experimental facility is provided +for defining and accessing data structures. + +

2.1.1. the main window, canvases, and printout

+ +

When Pd is running, you'll see a main "Pd" window, and possibly one or more +"canvases" or "patches". The main Pd window looks like this: + +

+ pd window +

+ +

There are peak level and clip indicators for audio input and output; these +report peak levels over all input and all output channels. Note that DC +shows up as an input level; many cards have DC levels which show up in the +50s. To see an RMS audio level, select "test audio and MIDI" from the Media +menu. The main window display is intended only to help you avoid clipping +on input and output. You can turn the peak meters on and off using the +control at lower left. + +

At lower right is a control to turn audio processing on and off +globally. Turning audio off stops the computation and relinquishes any audio +devices Pd is using. The "Media" menu is also provided, with accelerators +"Control-." to turn audio computation off and "Control-/" to turn it on. When +audio is on, Pd is computing audio samples in real time according to whatever +patches you have open (whether they are visible or not). + +

The DIO (Digital I/O) error indicator flashes if there is a synchronization +error for audio input or output. (But note that on some platforms Pd doesn't +find out about them. If you never see red, you're probably not seeing the +truth.) +Click the "DIO errors" button to see a list of recent errors. +This indicator should turn red whenever the +computation runs late (so that the DAC FIFOs fill and/or the ADC FIFOs empty) +or if audio input and output are not running at the same rate. See + audio and MIDI support . + +

The bottom part of the Pd window is an area for printout from objects in +patches, and/or for messages from Pd itself. + +

Pd documents are called "patches" or "canvases." +Each open document has one main window and any number of +sub-windows. The sub-windows can be opened and closed but are always running +whether you can see them or not. Here is a simple Pd patch: + +

+ hello world patch +

+ +

There are four text boxes in this patch: a number box (showing zero), +an object box showing "print," and two comments. The number box and the object +box are connected, the number box's output to the print box's input. Boxes may +have zero or more inputs and/or outputs, with the inputs on top and the outputs +on bottom. + +

+Pd's printout appears on the main ``Pd" window, +unless you redirect it elsewhere. + +

2.1.2. object boxes

+

Pd patches can have four types of boxes: object, message, GUI, +and comment . + +

You make objects by typing text into object boxes. The text is +divided into atoms separated by white space. The first atom specifies +what type of object Pd will make, and the other atoms, called creation +arguments , tell Pd how to initialize the object. If you type for example, + +

+ object +

+ +

the "+" specifies the class of the object. +In this case the object will be the kind that carries out addition, +and the "13" initializes the amount to add. + +

Atoms are either numbers or +symbols like "+". Anything that is not a valid number os considered a +symbol. Valid numbers may or may not have a decimal point (for instance, 12, +15.6, -.456), or may be +written in exponential notation (such as "4.5e6", which means "4.5 multiplied +by 10 six times, i.e., 4500000). Negative exponentials divide by 10 (so +that 1.23e-5 comes to 0.0000123). + +

Non-valid numbers which are read as symbols +include things like "+5" and "0..6" as well as words and names such as "Zack" +or "cat". The symbols "gore", "Gore", and "GORE" are all distinct. + +

The text you type into an object box determines how +many and what kinds of inlets and outlets the object will have. Some +classes (like "+" always have a fixed arrangement of inlets and outlets, +and in the case of other classes, the inlets and outlets will depend on the +creation arguments. + +

Here for example is a simple MIDI synthesizer: + +

+ simple MIDI synthesizer +

+ +

This patch mixes control objects (notein, stripnote, and ftom) with + tilde objects osc~, *~, and dac~. The control objects carry out their +function sporadically, as a result of one or more type of event . In +this case, incoming MIDI note messages set off the control computation. The +result of the computation is, when the note happens to be a "note on" (and not +a "note off", to compute the frequency in cycles per second and pass it on to +the oscillator ("osc~"). + +

The second half of the patch, the osc~, *~, and dac~ objects, compute audio +samples, in the same way as an analog synthesizer works. The osc~ object is +acting as the interface between the two regimes, in that it takes control +messages to set its frequency but talks to "*~" using an audio signal. Audio +signals aren't sporadic; they are continuous streams of numbers. As a result +tilde objects act under very different rules from control objects. The audio +portion of the patch is always running, whether MIDI messages arrive or not. On +the other hand, the function of control computations is to insert calculations +between the audio computation which may change audio computation parameters +such as the frequency of an oscillator. + +

The connections in the patch (the lines between the boxes) are also of two +types: control and signal. The type of connection depends on the outlet it +comes from. Signal connections are represented by thicker lines than control +connections; in the patch above, the two bottom conections are signal and the +others are control. In general, a control connection may be made to a signal +inlet; if numbers are sent over it they are automatially converted to +signals. Signal connections may not be made to control inlets; some sort +of explicit conversion must be specified. + +

2.1.3. message and GUI boxes

+ +

The border of a box tells you how its text is interpreted and how the box +functions. Object boxes (as in the previous example) use the text to create +objects when you load a patch or type text onto a new one. If you retype the +text in an object box, the old one is discarded and a new one is created, using +the new creation arguments. The contents of an object box describe a message +which is sent to Pd to create the object. + +

Message boxes interpret the text as a message to send whenever +the box is activated (by an incoming message or with the mouse.) The message +may be sent many times while the patch is running (as opposed to object boxes +whose message is used once to create the object). Instead of going straight +to Pd, the message box's message (or messages) go either to the box's outlet +or to other specified receiving objects. In the example +below, the message box, when clicked, sends the message "21" to an object +box which adds 13 to it. + +

+ [message( --> [object] -> [number] +

+ +

The third box shown is a GUI ("graphical user interface") box. GUI +boxes come in many forms including number boxes (as in this example), toggles, +sliders, and so on. Whereas the appearance of an object or message box is +static when a patch is running, a number box's contents (the text) changes to +reflect the current value held by the box. You can also use a number box as a +control by clicking and dragging up and down, or by typing values in it. +(There are also shift- and alt-click actions; see +getting help to find out how to look this up). + +

You can also create a "symbol" box which is like a number box but deals +in symbols like "cat." You can type your own strings in (followed by "enter") +or use it to display strings which arrive as messages to its inlet. + +

2.1.4. patches and files

+ +

When you save a patch to a file, Pd doesn't save the entire state of all the +objects in the patch, but only what you see: the objects' creation arguments +and their interconnections. Certain data-storage objects have functions for +reading and writing other files to save and restore their internal state. + +

Pd finds files using a path which can be specified as part of Pd's +startup arguments. The path specifies one or more directories, separated by +colons (semicolons if you're using windows.) Most objects which can read files +search for them along the search path, but when Pd writes files they go to +the directory where the patch was found. + +

2.2. editing Pd patches

+ +

2.2.1. edit and run mode

+ +

A patch can be in edit or run mode; this really only affects how mouse +clicks affect the patch. In edit mode, clicking and dragging selects and +moves boxes or makes and cuts connections; in run mode clicking on boxes sends +them messages which they react to in different ways. In run mode, number and +message boxes can be used as controls. Normally, when you are in a performance +you will stay in run mode; to change the patch you go to edit mode. + +

2.2.2. creating boxes

+ +

You can create boxes (objects, messages, GUIs, and comments) using the +"put" menu. Note the handy accelerators. Object and message boxes are empty +at first; drag them where you want them and type in the text. The GUI +objects (which come in several flavors) require no typing; just create and +place them. + +

You will often find it more convenient to select a box and "duplicate" it +(in the Edit menu) than to use the "Put" menu. If you select and duplicate +several items, any connections between them will be duplicated as well. + +

2.2.3. the selection

+ +

Boxes in a Pd window may be selected by clicking on them. To select more +than one object you may use shift-click or click on a blank portion of +the window and drag the cursor to select all objects within a rectangle. + +

Clicking on an unselected object, message, or comment box makes the text +active, i.e., ready to be text edited. (If you select using the rectangle +method, the text isn't activated.) Once you've activated a text box, you +may type into it (replacing the selected text) or use the mouse to change the +selection. + +

You may also select a single connection (patch cord) by clicking on it. +You can't have connections and boxes selected simultaneously. + +

2.2.4. deleting, cutting, and pasting

+ +

If you select a box, a connection, or several boxes, and if you haven't made +any text active, you can "delete" the selection by hitting the backspace or +delete key. You can also "cut" "copy" and "paste" using menu items. Notice +that pasting puts the new object(s) right down on top of the old ones. + +

The "duplicate" menu item performs a copy and paste with a small offset so you +can see the new boxes. You can drag them together to a new place on the screen. + +

You can cut and paste between windows within Pd but cut/paste isn't +integrated with the OS in any way. Cut/copy/paste for activated text in boxes +isn't implemented yet, although in Linux and Irix at least you can "X-paste" +into and out of "text" dialogs (created with the "edit text" menu item.) + +

2.2.5. changing the text

+ +

To change a text item, you can select it and then edit the text. If you +only click once, the entire text is selected and your typing will replace +everything. Click again and drag to select a portion of the text to retype. + +

If there's +more than a small amount of text (in a comment, for example) you might want to +select the text and choose "text editor" from the Edit menu, which opens a text +editing window with a copy of the text in it. Hitting "send" in that window is +exactly equivalent to retyping the text into Pd; you can send it to more than +one box in sequence if you want. + +

If you click a box and move the mouse without releasing the button this +displaces the entire box. If you wish to displace a box which is already +selected, first de-select the box by clicking outside it; otherwise you will be +selecting text instead of moving the box. + +

The updated text only becomes part of the patch when you de-select the +object. Changing the text in an "object" box deletes the old +object and creates a new one; the internal state of the old one is lost. + +

2.2.6. connecting and disconnecting boxes

+ +

To make a connection between two boxes, click on any outlet of the first +one, drag toward an inlet of the second one, and release. You can +release the mouse button anywhere within the target object and the connection +will be made to the nearest inlet. + +

Connections are broken by selecting them and using "cut" or the backspace +or delete key. + +

2.2.7. popup menu for properties, open, and help

+ +

All the "clicking" mentioned above is done with the left mouse button. +The right button, instead, gives a popup menu offering "properties," "open," +and "help". +(For Macintosh users who may only have one button on their mouse, +double-clicking is mapped to right-click.) + +

Selecting "help" on an object gets +a Pd patch that demonstrates how to use it. "Help" for the canvas as a whole +(right-clicking outside any object) gives a list of all built-in objects. + +

The "open" menu item is only enabled if you right-click on a subpatch +(see below) and causes Pd to open it. Ordinary subpatches may also be opened +by clicking on them, but for "graph-on-parent" ones, this is the only way to +do it. + +

The "properties" dialog allows you to change certain settings of GUI +objects, or of the patch itself (by clicking outside any box.) + +

2.2.8. miscellaneous

+ +

Control-q "quits" Pd, but asks you to comfirm the quit. To quit without +having to confirm, use command-shift-Q. + +

2.3. messages

+ +

In Pd, objects intercommunicate by sending messages and/or audio signals. +Pd messages are sporadic, like MIDI messages or music N "Note cards." + +

2.3.1. anatomy of a message

+ +

Messages contain a selector followed by +any number of arguments. The selector is a symbol, which appears in the patch +as a non-numeric string with no white space, semicolons, or commas. The +arguments may be symbols or numbers. Numbers in Pd are kept in 32-bit floating +point, so that they can represent integers exactly between -8388608 and +8388608. (In Max, there are separate data types for integers and floating +point numbers; Pd uses only float.) + +

When a message is passed to something (which is often an inlet of a box +but could be anything that can receive a message), the selector of the message +is checked against the receiver. If the receiver recognizes messages of that +selector, it carries out some corresponding action. For instance, here is a +"float" object: + +

+ float object +

+ +

The two rectangles at the top are usually both called "inlets" but +the one at the left directs incoming messages to the "float" object itself, +whereas the one at the right directs messages to an auxiliary "inlet" +object. The float object proper (represented by the left-hand inlet) accepts +messages with selector "float" and "bang". The right-hand inlet takes only +the message selector "float". These two selectors, along with "symbol" and +"list", are usually used to denote an object's main action, whatever it may be, +so that objects can be interconnected with maximum flexibility. + +

It is possible to type messages which start with a number, +which cannot be used as a selector. A single number is always given the +"float" selector automatically, and a message with a number followed by other +arguments is given the selector "list". + +

2.3.2. depth first message passing

+ +

In Pd whenever a message is initiated, the receiver may then send out +further messages in turn, and the receivers of those messages can send yet +others. So each message sets off a tree of consequent messages. This tree is +executed in depth first fashion. For instance in the patch below: + +

+ depth first message passing +

+ +

the order of arrival of messages is either A-B-C-D or A-C-D-B. The "C" +message is not done until the "D" one is also, and the "A" is not done until +all four are. It is indeterminate which of "B" or "C" is done first; this +depends on what order you made the connections in (in Max, it's automatically +sorted right to left). + +

Message-passing can give rise to infinite loops of the sort shown here: + +

+ infinite message passing loop +

+ +

Here the left-hand "+" can't finish processing until the right-hand one has +been sent the result "2", which can't finish processing that until the +left-hand one has been sent "3", and so on. Pd will print an error message +reporting a "stack overflow" if this happens. + +

However, it is legal to make a loop if there is a "delay" object somewhere +in it. When the "delay" receives a message it schedules a message for the +future (even if the time delay is 0) and is then "finished;" Pd's internal +scheduler will wake the delay back up later. + +

+2.3.3. hot and cold inlets and right to left outlet order

+ +

With few exceptions (notably "timer"), objects treat their leftmost +inlet as "hot" in the sense that messages to left inlets can result in output +messages. So the following is a legal (and reasonable) loop construct: + +

+ hot and cold inlets +

+ +

Here the "f" is an abbreviation for "float". Note that the "+ 1" output is +connected to the right-hand inlet of "f". This "cold" inlet merely stores the +value for the next time the "f" is sent the "bang" message. + +

It is frequently desirable to send messages to two or more inlets of an object +to specify its action. For instance, you can use "+" to add two numbers; but +to do it correctly you must make sure the right hand inlet gets its value +first. Otherwise, when the left hand side value comes in, "+" will carry out +the addition (since the left hand inlet is the "hot" one) and will add this +value to whatever was previously sitting in the right hand inlet. + +

Problems can arise when a single outlet is connected (either directly or +through arbitrarily long chains of message passing) to different inlets of a +single object. In this case it is indeterminate which order the two inlets will +receive their messages. Suppose for example you wish to use "+" to double a +number. The following is incorrect: + +

+ incorrect inlet connection +

+ +

Here, I connected the left inlet before connecting the right hand one (although +this is not evident in the appearance of the patch.) The "+" thus adds the +new input (at left) to the previous input (at right). + +

The "trigger" object, abbreviated "t", can be used to split out connections +from a single outlet in a determinate order. By convention, all objects in Pd, +when sending messages out more than one outlet, do so from right to left. If +you connect these to inlets of a second object without crossing wires, the +second object will get its leftmost inlet last, which is usually what you +want. Here is how to use "trigger" to disambiguate the previous example: + +

+ trigger to disambiguate +

+ +

"Cold" (non-leftmost) inlets are almost universally used to store single +values (either numbers or symbols.) With the exception of "line" and "line~", +these values are "sticky," i.e., once you set the value it is good until the +next time you set it. (The "line" exception is for sanity's sake.) + +

One more question sometimes comes up in execution order, which is +the order in which two messages are sent to a single "cold" inlet. In this +situation, since the messages are merged, the last value to be received is +the value that is used in the computation. + +

2.3.4. message boxes

+ +Message boxes are text boxes in which you type a message. When the message +box is activated, either by clicking on it or sending something to its inlet, +the message or messages are sent, either to the message box's outlet or +elsewhere as specified. + +

+ message boxes +

+ +

The first of the message boxes above contains the single number 1.5; this +message has an implicit selector of "float." The second is a list with three +numbers in it, and in the third, the selector is "my" and the two arguments are +the number 5 and the symbol "toes." + +

Multiple messages may be separated by commas as shown: + +

+ multiple messages in one box +

+ +

Here the three messages are the numbers 1, 2, and 3, and they are sent in +sequence (with no intervening time between them, as with the "trigger" object, +and having depth-first consequences so that whatever chain of actions depending +on "1" takes place before anything depending on "2" and so on.) + +

Semicolons may also separate messages. A message following a semicolon must +specify a symbol giving a destination (in other words, semicolons are like +commas except that they clear the "current destination" +so that the next message specifies a new one). The "current destination" is +at first the message box's own outlet. In the example below, the leading +semicolon immediately redirects messages from the outlet to an object named +"fred" (which is here a receive object), and likewise the next message is sent +to "sue." + + +

+ semicolons to send messages +

+ +

Certain other objects (Pd windows, for example, and arrays) have Pd names and +can be sent messages this way. Also, the special object "pd" is defined to +which you may send messages to start and stop DSP. + +

You can put variables in message boxes as shown below: + +

+ variables in message boxes +

+ +

Here, "$1", etc., refer to the arguments of the arriving message (and aren't +defined if you send a "bang" message or if you click on the message box to +activate it.) Dollar sign variables are either numbers or symbols depending +on the incoming message; if symbols, you may even use them to specify variable +message selectors or destinations. + +

2.4. audio signals

+ +

+Using Pd you can build audio patches which can synthesize musical sounds, +analyze incoming sounds, process incoming sounds to produce transformed +audio outputs, or integrate audio processing with other media. This section +describes how Pd treats audio signals. + +

2.4.1. sample rate and format

+ +

+Pd's audio signals are internally kept as 32-bit floating point numbers, so +you have all the dynamic range you could want. However, depending on your +hardware, audio I/O is usually limited to 16 or 24 bits. Inputs all appear +between the values of -1 and 1; and output values will be clipped to that range. +Pd assumes a sample rate of 44100 unless you override this ( +in Pd's command line or in the "audio setup" dialog). + +

+Pd can read or write samples to files either in 16-bit or 24-bit fixed point +or in 32-bit floating point, in WAV, AIFF, or AU format, via the soundfiler, +readsf, and writesf objects. + +

2.4.2. tilde objects and audio connections

+ +

Audio computations in Pd are carried out by "tilde objects" such as "osc~" +whose names conventionally end in a tilde character to warn you what they +are. Tilde objects can intercommunicate via audio connections. When audio +computation is turned on, or when you change the audio network while audio is +on, Pd sorts all the tilde objects into a linear order for running; then this +linear list is run down in blocks of 64 samples each; at 44100 Hz. this means +the audio network runs every 1.45 milliseconds. + +

Inlets or outlets are configured in Pd either for messages or audio; it's +an error to connect an audio outlet to a non-audio inlet or vice versa; usually +these errors are detected at "sort time" when audio is started or the network +changed with audio running. An object's leftmost inlet may accept both audio +and messages; any other inlet is either one or the other. + +

+The audio network, that is, the tilde objects and their interconnections, +must be acyclic. If there are loops, you will see the error message at "sort +time." When errors are reported at sort time there is no easy way to +find the source of the error. You can build algorithms with feedback using +nonlocal signal connections. + +

+Your subpatches can have audio inlets and outlets via the inlet~ and outlet~ +objects. + +

2.4.3. converting audio to and from messages

+ +

If you want to use a control value as a signal, you can use the sig~ object +to convert it. The +~, -~, *~, /~, osc~, and phasor~ objects can be configured +to take control or signal inputs. + +

The other direction, signal to control, requires that you specify at what +moments you want the signal sampled. This is handled by the snapshot~ object, +but you can also sample a signal with tabwrite~ and then get access it via +tabread or tabread4 (note the missing tildes!). There are also analysis +objects, the simplest of which is "env~", the envelope follower. + +

2.4.4. switching and blocking

+ +

You can use the switch~ or block~ objects to turn portions of your audio +computation on and off and to control the block size of computation. There +may be only one switch~ or block~ object in any window; it acts on the entire +window and all of its subwindows, which may still have their own nested +switch~/block~ objects. Switch~ and block~ take a block size and an overlap +factor as arguments; so for instance, "block~ 1024 4" specifies 1024 sample +blocks, overlapped by a factor of 4 relative to the parent window. Switch~ +carries a small computational overhead in addition to whatever overhead is +associated with changing the block size. + +

Larger block sizes than 64 should result in small increases in run-time +efficiency. Also, the fft~ and related objects operate on blocks so that +setting the block size also sets the number of FFT channels. You may wish +to use block sizes smaller than 64 to gain finer resolutions of message/audio +interaction, or to reduce "block delay" in feedback algorithms. At the +(untested) extreme, setting the block size to one allows you to write your +own recursive filters. + +

You can use switch~ to budget your DSP computations; for instance you might +want to be able to switch between two synthesis algorithms. To do this, put +each algorithm in its own subpatch (which can have sub-sub patches in turn, for +a voice bank for instance), and switch each one off as you switch the other one +on. Beware of clicks; if you have a line~ controlling output level, give it +time to ramp to zero before you switch it off or it will be stuck at a nonzero +value for the next time it comes back on. + +

When a subpatch is switched off its audio outputs generate zeros; this +costs a fairly small overhead; a cheaper way to get outputs is to use throw~ +inside the switched module and catch~ outside it. + +

2.4.5. nonlocal signal connections

+ +

You may wish to pass signals non-locally, either to get from one window to another, or +to feed a signal back to your algorithm's input. This can be done using +throw~/catch~, send~/receive~, or delwrite~/delread~ pairs. Throw~ and catch~ +implement a summing bus; throw~ adds into the bus and catch~ reads out the +accumulated signal and zeros the bus for the next time around. There can be +many throw~ objects associated with a single catch~, but a throw~ can't talk to +more than one catch~. You can reset the destination of a throw~ if you want to. + +

Send~ just saves a signal which may then be receive~d any number of times; but +a receive~ can only pick up one send~ at a time (but you can switch between +send~s if you want.) + +

Don't try to throw~ and catch~ or send~ and receive~ between windows with +different block sizes. The only re-blocking mechanisms which are well tested +are inlet~ and outlet~. + +

When you send a signal to a point that is earlier in the sorted list of tilde +objects, the signal doesn't get there until the next cycle of DSP computation, +one block later; so your signal will be delayed by one block (1.45 msec by +default.) Delread~ and delwrite~ have this same restriction, but here the 1.45 +msec figure gives the minimum attainable delay. For nonrecursive algorithms, a +simple flanger for example, you might wish to ensure that your delread~ is +sorted after your delwrite~. The only way to ensure this is to create the +delread~ after you created the delwrite~; if things get out of whack, just +delete and re-create the delread~. + +

2.5. scheduling

+ +

Pd uses 64-bit floating point numbers to represent time, providing sample +accuracy and essentially never overflowing. Time appears to the user +in milliseconds. + +

2.5.1. audio and messages

+ +

Audio and message processing are interleaved in Pd. Audio processing is +scheduled every 64 samples at Pd's sample rate; at 44100 Hz. this gives a +period of 1.45 milliseconds. You may turn DSP computation on and off by +sending the "pd" object the messages "dsp 1" and "dsp 0." + +

In the intervals between, delays might time out or external conditions +might arise (incoming MIDI, mouse clicks, or whatnot). These may cause a +cascade of depth-first message passing; each such message cascade is completely +run out before the next message or DSP tick is computed. Messages are never +passed to objects during a DSP tick; the ticks are atomic and parameter changes +sent to different objects in any given message cascade take effect +simultaneously. + +

In the middle of a message cascade you may schedule another one at a delay +of zero. This delayed cascade happens after the present cascade has finished, +but at the same logical time. + +

2.5.2. computation load

+ +

The Pd scheduler maintains a (user-specified) lead on its computations; +that is, it tries to keep ahead of real time by a small amount in order to be +able to absorb unpredictable, momentary increases in computation time. This +is specified using the "audiobuffer" or "frags" command line flags (see getting Pd to run ). + +

If Pd gets late with respect to real time, gaps (either occasional or +frequent) will appear in both the input and output audio streams. On the +other hand, disk streaming objects will work correctly, so that you may use +Pd as a batch program with soundfile input and/or output. The "-nogui" +and "-send" startup flags are provided to aid in doing this. + +

Pd's "realtime" computations compete for CPU time with its own GUI, which +runs as a separate process. A flow control mechanism will be provided someday +to prevent this from causing trouble, but it is in any case wise to avoid +having too much drawing going on while Pd is trying to make sound. If a +sub-window is closed, Pd suspends sending the GUI update messages for it; +but not so for miniaturized windows as of version 0.32. You should really +close them when you aren't using them. + +

2.5.3. determinism

+ +

All message cascades that are scheduled (via "delay" and +its relatives) to happen before a given audio tick will happen as scheduled +regardless of whether Pd as a whole is running on time; in other words, +calculation is never reordered for any real-time considerations. This is done +in order to make Pd's operation deterministic. + +

If a message cascade is started by an external event, a time tag is given +it. These time tags are guaranteed to be consistent with the times at which +timeouts are scheduled and DSP ticks are computed; i.e., time never decreases. +(However, either Pd or a hardware driver may lie about the physical time an +input arrives; this depends on the operating system.) "Timer" objects which +measure time intervals measure them in terms of the logical time stamps of the +message cascades, so that timing a "delay" object always gives exactly the +theoretical value. (There is, however, a "realtime" object that measures real +time, with nondeterministic results.) + +

If two message cascades are scheduled for the same logical time, they are +carried out in the order they were scheduled. + +

2.6. semantics

+ +This section describes how objects in Pd are created, how they store data and +how object and other boxes pass messages among themselves. + +

2.6.1. creation of objects

+ +The text in a box has a different function depending on whether it is a message, +atom (number/symbol), or object box. In message boxes the text specifies the +message or messages it will send as output. In atom boxes the text changes +at run time to show the state of the box, which is either a number or a symbol. + +

In an object box, as in a message box, the text specifies a message; but +here the message is to be passed to Pd itself, once, and the +message's effect is to create the object in question. When you open a file, +all the objects created are created using their text as "creation messages." +If you type a new message into an object box (or change it), the old object is +destroyed and the message is used to create the new one. + +

The selector of the message (the first word in the message) is a selector +which Pd interprets to mean which type of object to create. Any message +arguments (called "creation arguments") are used to parameterize the object +being created. Thus in "makenote 64 250" the selector "makenote" determines +the class of object to create and the creation arguments 64 and 250 become the +initial velocity and duration. + +

2.6.2. persistence of data

+ +Among the design principles of Pd is that patches should be printable, in the +sense that the appearance of a patch should fully determine its functionality. +For this reason, if messages received by an object change its action, since the +changes aren't reflected in the object's appearance, they are not saved as part +of the file which specifies the patch and will be forgotten when the patch is +reloaded. In the same way, if you delete and then recreate an object the +original object's state is not retained but is instead reinitialized (possibly +as specified by creation arguments.) + +

An exception is made for subpatches whose "state" is the configuration of +the subpatch; as a special case, this configuration is restored when the +patch is read from a file. Also, if you rename the subpatch, for instance +typing "pd jane" instead of "pd spot," the contents of the patch are preserved +and only the text in the object box and the window title of the subpatch are +changed. + +

It is probably bad style to specify creation arguments ala "makenote 64 250" +if you are going to override them later; this is confusing to anyone who tries +to understand the patch. + +

2.6.3. message passing

+ +Messages in Pd consist of a selector (a symbol) and zero or more arguments +(which may be symbols or numbers). To pass a message to an object, Pd first +checks the selector against the class of the object. Message boxes all are +of one class and they all take the same incoming messages and dispense them +according to their state, that is, the text typed into the box. The same +holds for atom boxes (number or symbol) except that their state may change +(it consists of the number or symbol showing). + +

Object boxes may have many different classes. The class is usually +determined by the selector of the creation message, i.e., the first atom of the +creation message which is usually a symbol. + +

Each class comes with a fixed collection of messages it may be sent. For +example, the "float" or "f" object takes "bang" and "float." These messages +are sent to "float" objects (objects whose class is float) via the leftmost, +hot inlet. (The right inlet is a separate, auxiliary object.) Objects of +class "float" respond to the message "bang" by outputting their current value, +that is, by sending a "float" message to their outlet. They respond to "float" +messages by setting their value and then outputting it. + +

Each other class (like "float") in Pd has its own protocol for responding +to messages it is sent, and may take "float" and "bang" messages, or others +in addition or instead of them. + +

2.6.4. inlets and lists

+ +The leftmost connection point at the top of most objects represents the object +itself. Any other dark rectangle is a separate object called an "inlet" +although in Pd there are 4 individual inlet classes. The class of the inlet +determines which messages it will take: symbol, float, or other; and the inlet +forwards the message either to the object proper or to some proxy, usually +one that the object creates for the occasion. + +

Unless they arrange otherwise by defining a "list" method, objects respond +to the "list" message by distributing the arguments of the message to their +inlets, except for the first argument which is passed as a "float" or +"symbol" message to the object proper. + +

2.6.5. dollar signs

+ +In message or object boxes, message arguments starting with a dollar sign +and a number (like "$1" or "$3-bazoo") are variables which are substituted +with values supplied as part of the environment the message is passed in. +In the case of message boxes, the environment consists of the arguments of +the "list" message (possibly extrapolated from "bang," "float," +or other) that the message box is responding to. Thus, if a message box gets +"23 skidoo" and if it contains the text, "$2 until $1," out comes the message, +"skidoo until 23." + +

Object boxes contain text which forms a message to be sent to Pd to create +and initialize the object. Here, $1, etc., are taken from the context in which +the patch was loaded. When the patch is a new document or opened from a file +the "$" variables are undefined. But if the patch is an abstraction (see the +next section) they are +taken from the abstractions' creation arguments. + +

Constructions such as "$1-x" are expanded by string concatenation. This +is the mechanism for making local variables. In particular, $0 in an abstraction +is a counter which is guaranteed to be unique to that abstraction, so sends and +receives with names like "$0-bear" can be used as local send/receive pairs. + +

Note that the expansion of variables such as $0 and $1 only works at the +beginning of the symbol; so, for instance, "rats-$1" will not be expanded. +Occasionally you may want to have double or triple substitutions; this can +be done one stage at a time by nesting abstractions (with each subpatch +adding its own $-variable to the beginning of a symbol and passing that on +as argument to a further abstraction.) + +

For example, if you want to get dog-food, dog-ears, and cat-food, for +example, have an abstraction "a1" that invokes an abstraction "a2" twice, as +"a2 $1-food" and "a2 $1-ears", and then in a third patch call a1 twice, as +"a1 cat" and "a1 dog". Inside the four "a2" copioes, $1 will evaluate to +"dog-food", "cat-food", "dog-ears", and "cat-ears". + +

2.7. subpatches

+ +Pd offers two mechanisms for making subpatches, called "one-off subpatches" +and "abstractions." In either case the subpatch appears as an object box +in a patch. If you type "pd" or "pd my-name" into an object box, this creates +a one-off subpatch. For instance, in this fragment: + +

subpatch

+ +the box in the middle, if clicked on, opens the sub-patch shown here: + +

open subpatch window

+ +

The contents of the subpatch are saved as part of the parent patch, in +one file. If you make several copies of a subpatch you may change them +individually. + +

The objects, "inlet,", "inlet~," "outlet," and "outlet~,", when put in a +subpatch, create inlets and outlets for the object box containing the subpatch. +This works equally for one-off subpatches and abstractions. The inlet~ and +outlet~ versions create inlets and outlets for audio signals. You can't mix +messages and audio in a subpatch inlet or outlet; they must be one or the other +exclusively. Inlets and outlets appear on the invoking box in the same left-to-right +order as they appear in the subpatch. + +

2.7.1. abstractions

+ +

To make an abstraction, save a patch with a name such as "abstraction1.pd" +and then invoke it as "abstraction1" in an object box: + +

abstraction

+ +

Here we're invoking a separate file, "abstraction1.pd", which holds the +patch shown here (the border is the same as for the subpatch above): + +

abstraction example

+ +You may create many instances of "abstraction1" or invoke it from several +different patches; and changing the contents of "abstraction1" will affect all +invocations of it as they are created. An analogy from the "c" programming +language is that one-off subpatches are like bracketed blocks of code and +abstractions are like subroutines. + +

Abstractions are instantiated by typing the name of a patch (minus the ".pd" +extension) into an object box. You may also type arguments; for instance if +you have a file "my-abstraction.pd" you may type "my-abstraction 5" to set the +variable $1 to 5. This is defined only for object boxes (not for messages) in +the abstraction. (For message boxes, "$1", etc, have a different meaning as +described above.) If you want to send a message with a $1 in the sense of a +creation argument of an abstraction, you must generate it with an object box +such as "float $1", "symbol $1", or perhaps "pack $1 $2", which may then be +sent to a message box. + +

The corresponding feature in Max (both Opcode and Ircam) was the "#1" +construct. In a Max abstraction, "#1", etc., are replaced by the creation +argument. This has the disadvantage that you can't edit the abstraction as +instantiated in the patch since the "#" variables are substituted. In Pd the +"$" variables in object boxes are spelled literally as "$" variables so that +it's meaningful to edit them from within their calling patch. On the Pd side, +however, there is the disadvantage that it's confusing to have "$" expanded at +a different time in an object box than in a message box. In an object box, the +"$" argument is expanded at creation time, and in a message box, at message +time. + +

2.7.2. Graph-on-parent subpatches

+ +If you open the "properties" dialog for a subpatch or an abstraction, you can +check the "graph on parent" box to have the controls of the subpatch/abstraction +appear on the parent. For instance, here is an invocation of "abstraction2": + +

graph-on-parent abstraction

+ +where the patch "abstraction2.pd" contains: + +

inside graph-on-parent abstraction

+ +Here, the number box in the abstraction shows up on the box that invoked +the abstraction. The "graph on parent" flag is set in the abstraction +(and is saved as part of the abstraction); to set it, open the "properties" +dialog for the "abstraction2" canvas by right-clicking on any white space +in the patch. + +

To open the subpatch, right click on the object and select "open". (On +Macintoshes without a 2-button mouse, you can double-click in edit mode +instead.) It doesn't work just to click on the object in run mode since clicks +are sent to visible controls and/or arrays. + +

When the sub-patch is closed, all controls in it appear on the object +instead; so the number box in the sub-patch in the example above is the same +one as you see in the box. Only controls are made visible in this way + +

2.8. numeric arrays

+ +Linear arrays of numbers recur throughout the computer musician's bag of tricks, +beginning with the wavetable oscillator. The wavetable oscillator later was +reinvented as the looping sampler. Also, table lookup is used for nonlinear +distortion of audio signals. In the domain of control, arrays of numbers +can specify control mappings, probability densities, voicing data, and much +more. + +

Arrays in Pd should be allocated (and possible read in from a file) before +beginning to make sound, since memory allocation and disk operations may take +long enough to cause audio buffer overruns or underruns. Pd provides two ways +to define new arrays, as "graphs" and "tables". In either case the array +has a pre-defined name and size (i.e., number of points). Elements of the +array are stored as floating-point numbers, 4 bytes apiece + +

If you use an array to store a one-second sound at 44.1 kHz you will need +176 kilobytes, or a one-minute sound, 10.6 megabytes. To store a sound with +two or more channels, use a separate array for each channel. + +

Arrays are also useful as transfer functions, for example for nonlinear +distortion of an audio signal, or to map a control onto a synthesis parameter. +In situations like this one typically uses much shorter arrays, of no more +than a few hundred elements. They are also useful for storing measured +spectra derived from the fft~ objects, and probably for many other uses. + +

Arrays usually appear within subpatches created to house them, whether +in "graph on parent" form (so that you see them within a rectangle drawn on +the containing patch), or as a regular subpatch (which you see as a text box.) +In the "graph on parent" form, an array appears as shown: + +

array

+ +

Arrays are indexed from 0 to N-1 where N is the number of points in the +array. You can read an array value using the tabread object: + +

array indexing

+ +Here we see that the third point of the array (index 2) has the value 0.4. +To write into the array you can use the tabwrite object: + +

setting an value in an array

+ +In this example, sending the message sets the third element to 0.5. (You +may also send the two numbers to the two inlets separately.) + +

The two previous examples showed control operations to read and write from +and to arrays. These may also be done using audio signals. For example, +the patch below creates a 440 Hz. tone with "array1" as a waveform: + +

setting an array with a waveform

+ +Here phasor~'s outputs a sawtooth wave, repeating 440 times per second, whose +output range is from 0 to 1. The multiplier and adder adjust the range from +1 to 11, and then the values are used as indices for tabread4~, which is a +4-point interpolating table lookup module. (Much more detail is available in +the audio example patches in the "pure documentation" series.) + +

To create a new array, select "array" from the "put" menu. Up will come +a dialog window to set initial properties of the array. By default, a +new graph is created to hold the array, but it may also be housed in the +most recently created graph instead. Other properties may be specified there +and/or changed later using the "properties" dialog. + +

If you select "properties" on an array in a graph, you two dialogs, one +for the array and one for the graph. The array dialog looks like this: + +

array properties window

+ +You may use this to change the name and size, in addition to another property, +"save contents". If "save contents" is selected, the array's values are stored +in the containing patch; otherwise they're initialized to zero each time the +patch is reloaded. If you intend to use arrays to store sounds, you will +probably not wish to store them in the patch but as separate soundfiles. This +will be more efficient, and you may also then use a sound editor to modify them +outside Pd. + +

If you check "delete me" and then "OK", the array will be deleted. This is +an odd interface for deleting an object, and is only provided because Pd +lacks a mechanism for selecting arrays (so that "cut" could serve). + +

The graph dialog (which also pops up) is shown here: + +

graph properties

+ +

The X bounds initially range from 0 to the number of points in the table +minus one (this is a good choice for arrays, although graphs holding other +kinds of objects might require other X bounds.) The Y bounds should be +chosen to reflect the natural range of the table, so that stored sounds +would naturally range from -1 to 1, but a sequence of frequency values might +range from 0 to 20,000. Finally, you choose the screen size of the graph, +width and height, in screen pixels. + +

Many other operations are defined for arrays; see the related patches +in the tutorial (starting at 2.control/15.array.pd) for more possibilities. + +

2.9. Data structures

+(Note: this section is adapted from an article submitted to ICMC 2002.) + +

The original idea in developing Pd was to make a real-time computer music +performance environment like Max, but somehow to include also a facility for +making computer music scores with user-specifiable graphical representations. +This idea has important precedents in Eric Lindemann's Animal and Bill Buxton's +SSSP. An even earlier class of precedents lies in the rich variety of paper +scores for electronic music before it became practical to offer a +computer-based score editor. In this context, scores by Stockhausen ( +Kontakte and Studie II) and Yuasa (Toward the Midnight Sun) +come most prominently to mind, but also Xenakis's Mycenae-alpha, which, +although it was realized using a computer, was scored on paper and only +afterward laboriously transcribed into the computer. + +

Pd is designed to to offer an extremely unstructured environment for +describing data structures and their graphical appearance. The underlying +idea is to allow the user to display any kind of data he or she wants to, +associating it in any way with the display. To accomplish this Pd introduces +a graphical data structure, somewhat like a data structure out of the C +programming language, but with a facility for attaching shapes and colors to +the data, so that the user can visualize and/or edit it. The data itself can +be edited from scratch or can be imported from files, generated +algorithmically, or derived from analyses of incoming sounds or other data +streams. + +Here is one simple +example of a very short musical sketch realized using Pd: + +

graphical score

+ +The example, which only lasts a few seconds, is a polyphonic collection of +time-varying noise bands. The graphical ``score" consists of six objects, each +having a small grab point at left, a black shape to show dynamic, and a colored +shape to show changing frequency and bandwidth. The horizontal axis represents +time and the vertical axis, frequency (although, as explained later, this +behavior isn't built into pd). The dynamic and frequency shapes aren't +constrained to be connected or even to be proximate, but since they pertain to +the same sound their horizontal positions line up. In this example the last +(furthest-right) object is percussive (as seen by the black shape) and has a +fixed frequency and bandwidth, whereas the large, articulated shape in the +center has a complicated trajectory in both frequency and dynamic. The color +of the frequency trace determines the voice number used to realize it. + +

Each object is thus composed of a combination of scalar values (color; +aggregate position in X and Y coordinates) and array values (time/value +pairs for the black traces and time/frequency/bandwidth triples for the +colored ones.) This is all specified by the user using Pd's ``template" +mechanism. + +

Here is the template associated with the graphical objects +shown above: + +

template for graphical score

+ +Templates consist of a data structure definition (the "struct" object) and +zero or more drawing instructions ("filledpolygon" and "plot"). The "struct" +object gives the template the name, "template-toplevel." The data structure +is defined to contain three floating point numbers named "x", "y", and +"voiceno," and two arrays, one named "pitch" whose elements belong to another +template named "template-pitch," and similarly for the array "amp." + +

In general, data structures are built from four data types: scalar floats +and symbols, arrays (whose elements share another, specified template) and +lists (whose elements may have a variety of templates). The contents of a Pd +window themselves form a list. Pd's correlate of Max's "table" object is +implemented as a top-level array whose elements are scalars containing a single +floating-point number. + +

Data structures in Pd may nest arbitrarily deeply using the array and list +types. For example, a collection of sinusoidal tracks from an analysis engine +could be implemented as an array of arrays of (pitch, amplitude) +pairs; this appears as example 12 in Pd's FFT object online tutorial. + +

After the "struct" object in the template shown above, the remaining +three objects are drawing instructions , first for a rectangle +("filledpolygon"), and then for two arrays. The various graphical +attributes that are specified for drawing instructions may be numerical +constants or data structure field names; in the latter case the value varies +depending on the data. For instance, the second creation argument to +"plot" is the color. The first "plot" plots the "amp" field and the +color is given as 0, or black. The second one plots "pitch" using the color +"voiceno". In this way the color of the second trace is attached to the +"voiceno" slot in the data structure, so that color will vary according to its +"voiceno" slot. + +

2.9.1. Traversal

+ +

Pd objects are provided to traverse lists and arrays, and to address +elements of data structures for getting and setting. Here is a patch showing +how these facilities could be used, for example, to sequence the graphical +score shown above: + +

traversal example patch

+ +

Pd has no built-in sequencer, nor even any notion that "x" values should be +used as a time axis. (However, a "sort" function is provided, which reorders +a list from left to right, on the assumption that users might often want to use Pd +data collections as x-ordered sequences.) Recording sequences of events into +lists, and/or playing the lists back as sequences, are functionalities that the +user is expected to supply on top of Pd's offerings, which, it is hoped, would +allow those functionalities within a much larger range of possibilities, to +include random re-orderings of events, score following, self-modifying scores, +reactive improvisation, and perhaps much more. + +

Traversal of data is made possible by adding a new type of atom, "pointer", +to the two previously defined types that make up messages, to wit, numbers and +symbols. Unlike numbers and symbols, pointers have no printed form and thus +can't be uttered in message boxes. Traversal objects such as "pointer" and +"get" (among several others) can generate or use pointers. The pointer data +type is also integrated into pipe-fitting objects such as "pack", +"unpack", +and "route". + +

In the patch shown above, the topmost "pointer" object holds a pointer to +the next object to "play" (by sending it to one of the "voice" +abstractions at bottom.) The pointer object takes a "traverse" message to +set it to the head of the list (named "pd-data"), and "next" messages to +move to (and output) the next datum in the list (i.e., the next in the list of +six objects in the score). Another "pointer" object is also used, further +down, as a storage cell for pointers just as "float" is for numbers. + +

The center of any sequencer is always the "delay" object, which must be +fed the time difference between each event (including the non-event of hitting +"start") and the next. As we extract each of the six objects in the score, we +must wait the delay for playing that object, and then send its pointer to one +of the "voice" abstractions to play it. However, we have to inspect the +object itself to know the delay before playing it. So, in the loop, we peel off +the first remaining object to play and inspect the time difference between it +and the previous one, using this value to set the delay, but also storing the +pointer in the lower "pointer" and "pack" objects. + +

The time difference needed to set the delay object is obtained using the +"get template-toplevel x" object. (This is converted to incremental time +("-"), corrected for tempo, and fed to the delay.) Pd provides +the "get" and "set" +objects for reading and writing values from data structures. +The two "get" objects shown here obtain the "x" and "voiceno" fields +of the current object. The template name (template-toplevel) is supplied +to the "get" objects so that they can look up the offset of the necessary +field(s) in advance, for greater run-time efficiency. + +

Once the delay has expired, the object's pointer is recalled (the lower +"pointer" object), and the voice number is recalled. This is packed with +the pointer itself and routed, so that the pointer goes to the appropriate +voice. The voice number is shown as the color of the frequency trace in +"999" units (first digit red, second green, third blue) and the "route" is +arbitrarily set up to select among the six primary and secondary colors plus +black. + +

The details of extracting the pitch and dynamic breakpoints from the arrays +defined in the template are managed in the "voice" abstraction. +The "voice" +abstraction receives a +pointer to a given object and manages the sequencing of the arrays; so it +contains two sequencers itself. The nesting of the overall structure of +the sequencer patch mirrors the nesting of the original data structures. +Finally, the voice abstraction puts its audio output on a summing bus. + +

More general patches can easily be constructed which access heterogeneous lists +of objects (having different templates). In this way, an arbitrarily rich +personal "score language" can be developed and sequenced. + +

2.9.2. Accessing and changing data

+ +

In general, accessing or changing data is done via "pointers" to +"scalars". Numbers and symbols within scalars are accessed using the +"get" object and changed, in the same way, using "set". Since lists +and arrays are composed of scalars, every actual number or symbol in a data +heap will be a number or symbol element of some scalar. To access them, it +suffices to have objects to chase down elements of lists and arrays (given +either a global name or a pointer to the containing scalar). + +

Lists are traversed in the way shown above; to get to a sublist of a scalar, +the "get" object will provide a pointer, in the same way as it provides +"float" or "symbol" elements of scalars. For arrays, an +"element" object is provided which, given a scalar, a field name and +a number, chases down the numbered, scalar, element of the named array field. + +

To alter "float" or "symbol" elements of scalars is straightforward +using the "set" object, but arrays and lists can't be set by assignment; +there is no suitable data type available within messages. Lists could +possibly be "settable" by passing pointers to other lists, but permitting this +would have required either automatically doing deep copies of data structures +to carry out the assignments, or else implementing a garbage collecting memory +management system, either of which would be difficult to realize within +real-time computation time constraints. Instead, all the data hanging from a +scalar is considered as belonging to that scalar, and is left in memory until +the scalar is deleted; the data may be changed atom by atom, but primitives +are not provided which would imply unpredictable execution times. + +

The "getsize" and "setsize" objects are provided to access or change +the number of elements in the array. For lists, an "append" object +appends a new scalar for a given template to a list, after the element pointed +to. (To insert a scalar at the beginning of a list, the pointer can be set to +the "head" of the list, a formal location before the first list item.) +Deletion is less flexible; the only operation is to delete an entire list. +(There's no reason not to provide finer-grain deletion mechanisms except that +it's not clear how to protect against stale pointers efficiently, except by +voiding the entire collection of pointers into a list.) + +

2.9.3. Editing

+ +

The graphical score shown above can be edited by dragging breakpoints, or +by adding and deleting them, using mouse clicks. Also, entire objects or +collections of them may be copied, pasted, and dragged around the screen. +Alternatively, there is an editable (or computer generate-able or parse-able) +text representation for the data, which may be seen or changed in a dialog +window or read and written to external text files. + +

Since the graphical presentation of data objects is determined by drawing +instructions, the drawing instructions are interpreted backwards to alter data +as a result of mouse operations. If a given graphical dimension is controlled +by a variable, that variable is then controlled by dragging along that +dimension; if the dimension is constant, it can't be altered by dragging. + +

Tricky situations can arise when the user changes the contents of templates. +A change in drawing instructions can be accommodated by simply tracking +down and redrawing all data objects using the template. However, changing +the "struct" object itself make for less straightforward situations. The +user might wish to reorder fields, delete them, add new ones, or rename them. +When a "struct" object changes, Pd automatically conforms the data from the old +structure to the new one. Fields with the same name as previously are maintained +(reordering them as necessary); and if a field disappears but another of the +same type appears, the new one(s) are taken to be renamings of the old one(s) +in order of appearance. New fields which cannot be matched in this way with +previously existing ones are assumed to be new and are initialized. + +

It can happen that two "struct" objects compete to define the same data +structure, or that the user reads in data from a file which expects a different +version of the structure, or alternatively, that the "struct" object for +existing data objects disappears. For this reason, Pd maintains a private +representation of the last active version of a "struct" until all +similarly named "structs," as well as all data using that "struct", have +disappeared. If the user introduces a new version of the "struct" and only +later deletes the "current" one, the data is only conformed to the new version +once the old one is deleted. In this way we avoid getting into situations +where data is left hanging without its structure definition, or where data ends +up belonging to two or more structures of the same name. The worst that can +happen is that data may lose their drawing instructions, in which case Pd +supplies a simple default shape. + +

2.9.4. Limitations

+ +

When examples get more complicated and/or dense than the one shown here, it +becomes difficult to see and select specific features of a data collection; +more work is needed to facilitate this. +There should be some facility for turning drawing instructions on and off, or +perhaps for switching between versions of a template, depending on the user's +desired view. There should also be a callback facility in the template for +when an object is edited with the mouse, so that the user can bind actions to +mouse clicks. + +

More generally, the collection of traversal objects that Pd provides is +adequate to support a variety of modes of data collection and use, such as +analysis and sequencing. But the patches required to traverse the data +collections are not always simple. It would be desirable to find a more +straightforward mechanism than that provided by the "pointer", "get" +and "set" objects. + +

The "data" facility, although part of the original plan for Pd, has only +recently been implemented in its current form, and as (hopefully) the user base +grows there will surely be occasions for many further extensions of the data +handling primitives and the graphical presentation and editing functions. + + + + diff --git a/desiredata/doc/1.manual/x3.htm b/desiredata/doc/1.manual/x3.htm new file mode 100644 index 00000000..9bc0f537 --- /dev/null +++ b/desiredata/doc/1.manual/x3.htm @@ -0,0 +1,790 @@ + + + + + Pd Documentation 3 + + + + + + + +

Pd Documentation chapter 3: Getting Pd to run

+ +

+ back to table of contents +

+

+ +

Pd runs under Irix, Microsoft Windows, Linux, and MacOS 10.2 (Jaguar). +How to get Pd up and running depends on your operating system, +but the overall strategy is the same. +You must first get and install it, and +then untangle whatever problems arise in handling audio and MIDI input +and output, and finally get Pd to meet its real-time obligations reliably. + +

Installation instructions are platform-specfic; the following four +sections +will describe what to do for various operating systems you might have. +In case of trouble also consult the Pd mailing list archive on + + http://iem.kug.ac.at/mailinglists/pd-list/ +, which often has late-breaking news about configuration problems and solutions. +The rest of this section describes how to get audio and MIDI to work. + +

3.1. Audio and MIDI

+ +

+To test audio and MIDI, start Pd and select "test Audio and MIDI" from the +"Media" menu. You should see a window like this: + +

+ test tone patch +

+ +

First, try to get Pd to play a sine wave over your speakers. The "TEST +TONE" control at top left turns this on and off. Normally, all the output +channels are turned on so that when you turn the tone on (to a soft -40 dB or a +louder -20 dB) you should get output on the first six of your output channels. +(If you have fewer than six output channnels open, the extra +channels aren't played; and if you have more, this particular patch won't +use them.) + +

If there's anything wrong, the most likely outcome is that you will hear +nothing at all. This could be for any of at least three reasons: Pd might +have failed to open the audio device; the audio card's output volume might +be set to zero; or your audio system might not be set to amplify the computer +output. + +

The number boxes labeled "AUDIO INPUT" show the levels of incoming +audio, in dB, with 100 being maximum. (Incoming signals may clip at +RMS levels below 100; for instance, a sinusoid clips at about 97 dB.) +Any DC present in the input (such as you get with cheap audio hardware) +will show up as level unless you turn on the "input hipass" toggle +at right; then the DC component is filtered out before metering. + +

To test the quality of audio input and output, turn on "monitor" +(also at right) which causes the inputs to be played to the outputs at +unit gain. You should hear a faithful, non-distored copy of whatever is +sent through the patch. + +

It is easy to get two copies of Pd running by accident; on most machines +only one at a time may be inputting and outputting sound. (Some copy of Pd +might have audio or MIDI devices open and prevent the copy you're trying to use +from getting access to them.) Having extra +copies of Pd around will also eat CPU cycles uselessly. + +

+You may be interested in getting only audio output or audio input, or +you may need both to run simultaneously. By default, Pd will try to run +both, but if you don't need either input or output, you may find that Pd +runs more reliably, or at least more efficiently, with the unused direction +turned off. This may be specified in Pd's command line flags or using the +"audio settings" dialog panel. + +

+Depending on your application you will have a more or less stringent latency +requirement. Ideally, when any input (audio, MIDI, keyboard, network) is +available, the outputs (in particular the audio output) should react instantly. +In real life, it is necessary to buffer the audio inputs and outputs, trying +always to keep some number of milliseconds ahead of real time to prepare for the +inevitable occasions where the CPU runs off to service some different task +from Pd. How small this latency can be chosen depends on your OS and your +audio driver. + +

TIP: If Pd starts up but you get distortion or glitches in the audio +output, this could be either because the "audio I/O buffer" isn't big enough, +or else because the CPU load of the patch you're running is too great for the +machine you have, or else because the ADC and DAC are out of sync or even at +different sample rates. To test for the first possibility, try increasing the +audio latency in the command line or the "audio settings" dialog (but see also +under your OS below.) For the second, start up your favorite performance +monitor program; and for the third, try starting Pd up with ADCs disabled. + +

In addition to the "test audio and MIDI" patch, the "Media" menu +contains items for controlling audio and MIDI settings. The first two +items, "Audio on" and "Audio off", open or close the audio devices and +start or stop Pd's audio computation. + +

If there is a choice of +audio API to make, the Media menu will display them. (On Linux, they are +OSS, ALSA, and Portaudio; on Windows, you get MMIO and ASIO). More information +about the APIs appears in the sections below. + +

Next is the "Audio settings..." menu item, which opens a dialog like this: + +

+ audio settings dialog +

+ +The exact choices you get depend on the operating system and API. The sample +rate controls both audio output and input. The audio throughput delay is +the nominal amount of time, in milliseconds, that a sound coming into the +audio input will be delayed if it is copied through Pd straight to the +output. Naturally you would like this to be as small as possible, but, +depending on OS, API, and even the specific choice of audio hardware, there +will be a limit to how small you can make this. You can typically get +10 msec on linux (and lower still if you use special tricks), 30 msec on Mac +OSX, and 60 msec on Windows (but note that there might be ways that a +patient Windows user can reduce this). + +

Next you get a choice of input and output device. If you want to open +more than one, hit "use multiple devices" and you'll be allowed up to 4 +in and 4 out. Each audio device is 2 channels by default, but you may +specify more if your hardware supports it. + +Other parameters may be tweaked using the command line; see under + preferences and startup options . + +

MIDI
+ + The "channel message" midi objects in Pd +such as notein or pgmout will take channels 1-16 to mean the first open MIDI +port, 17-32 the second one, and so on. The midiin, sysexin, midiout objects +give you a separate inlet to specify which of the open MIDI port numbers +you want. + +

System exclusive MIDI message input and output is theoretically supported +in version 0.37 but does not work correctly on windows, even in 0.38. + + +

3.2. Installing Pd in Microsoft Windows

+ +

Pd should work under any version of Windows since 95. You can download as +a self-extracting archive (a ".exe" file). Run this and select a destination +directory when prompted, such as "\pd" or "Program Files\pd". + +

If for example you put Pd in "C:Program Files\pd", the executable program +will be "C:Program Files\pd\bin\pd". You can simply adjust your path to +include C:\pd\bin and then invoke "pd" in a command prompt window. You can also +make a shortcut to the executable program (left-click on it and drag to the +desktop, for example.) + +

Pd requires "TCP/IP networking" to be turned on. This doesn't mean you +have to be on a real network, but simply that Pd actually consists of two +programs that make a "network link" (locally) to intercommunicate. + +

Audio in Microsoft Windows

+ +

+You can ask for a list of audio and MIDI devices by typing +"pd -listdev"; you can then specify which audio and MIDI device to use. +Type "pd -help" (or make any mistake) to get the syntax for specifying +which device to use. You can modify the Pd shortcut (or batch file) to +set these, or else use the "startup" dialog (file menu) to specify +startup arguments. + +

+Alternatively, (and especially when just starting out) you can experiment +with different audio configurations using the "audio settings" +item in the Media menu. + +

+You can list and +choose MIDI devices in the same way as audio; note that, by default, MIDI +input is disabled in Windows (because it's possible to hang up some MIDI +devices if Pd exits unexpectedly). + +

+MIDI timing is very poor if you are using simultaneous audio input and output; +if you suppress either audio input or output things will improve somewhat under +NT; you can apparently get the jitter down to ~40 msec. On W95 performance is +simply terrible. W98, with either audio input or output suppressed, offers +fairly good MIDI timing (~5 msec jitter). The "first edition" used to crash +occasionally; this might be fixed in the "second edition". + +

ASIO

+ +

As of version 0.35 Pd supports ASIO. Invoke Pd as "pd -asio" and, if +needed, specify "-sounddev" (etc.) flags to specify which device (see +"the Pd command line" below.) You can also specify a "-blocksize" different +from the default (256 samples) and "-audiobuf" in milliseconds. Pd will +round this down to a power of two buffers, each of "-blocksize" in sample +frames. + +

3.3. Installing Pd in Linux

+ +

What to do depends on which flavor of Linux you are running (e.g., Debian +or Red Hat). The instructions here should work for Pd 0.33 and up regardless of +your situation. (If not, you can read the Pd mailing list archives for +recent problems; if you have found a new problem you're welcome to post it +to the list.) + +

If you're running RedHat or Mandrake you might want to use RPM to install +Pd. For other linux distributions, download the "tar.gz" version and compile +Pd. + +

Getting Pd as an RPM

+ +

Download Pd, perhaps from + + http://www.crca.ucsd.edu/~msp/software.html , +to a file such as "pd-0.33-0.i386.rpm". +Open a "shell" window, cd to +the directory containing the file, and type the command, +

+    rpm -i pd-0.33-0.i386.rpm
+
+ +

(substituting the real file name.) Then you should be able to type "pd" +to a shell and watch the Pd main window appear. + +

Getting Pd as a .tar.gz

+ +

Before you start, you might want to check that you have the resources Pd +needs. The main things you need are the C compiler, X windows (including +the X development package for Pd to link against) and TK. If you're running +Redhat or Mandrake 7.x or up, I think these are all present by default. +The RedHat X client developer "RPM" package is called XFree86-devel. + +

+Download Pd, perhaps from + + http://www.crca.ucsd.edu/~msp/software.html , +to file such as "pd-linux-033.tar.gz". Open a "shell" +window, cd to +the directory containing the file, and type the command, +

+    tar xzf pd-linux-033.tar.gz
+
+

which creates a directory named "pd". I do this from my home directory. +Next, compile it. "CD" to pd and read the INSTALL.txt, or else just cd +to "pd/src" and type + +

+
./configure +
make depend +
make +

+ +

You can pass flags to "configure" to customize your compilation: + +

+    To enable debugging (and losing code optimization) add "--enable-debug".
+    To use Portaudio version 19 (experimental), add "--enable-portaudio".
+    To put Pd in /usr/bin instead of /usr/local/bin, add "--prefix=/bin".
+
+ +Alsa and Jack support should auto-configure, but "--enable-alsa" od +"--enable-jack" will force their inclusion. + +

After "make", just type "~/pd/bin/pd" to run pd. + +

Alternatively, as superuser, you can run "make install" after "make depend" +and then anyone on your system can just type "pd" to run it. + +

Testing audio and MIDI.

+ +

+Next try audio. We want to know whether audio output works, whether audio +input works, and whether they work simultaneously. First run "aumix" (or +any newer audio mixer app) to +check audio input and output gains and learn which input (mic; line; +etc.) is "recording". +Then test audio output by running +

+    pd -noadc
+
+

and selecting "test audio and MIDI" from the "Media" menu. You should see +a patch. Turn on the test tone and listen. Do the usual where's-the-signal +business. + +

+Then quit Pd and test audio input via +

+    pd -nodac
+
+

Re-open the test patch and hit "meter"; look at the levels. 100 dB is a +hard clip; arrange gains so that the input signal tops out around 80 or 90, +but no higher. + +

Now see if your audio driver can do full duplex by typing "pd" with no +flags. If you see error messages involving /dev/dsp or /dev/dsp2, you're +probably not able to run audio in and out at the same time. If on the other +hand there's no complaint, and if the audio test patch does what you want, you +might wish to experiment with the "-audiobuffer" flag to see what values of +audio latency your audio system can handle. + +

Audio hardware in Linux

+ +

+Be forewarned: installing and testing audio and MIDI drivers in Linux can take +days or weeks. There apears to be no single place where you can get detailed +information on Linux audio. One good source of information lives at: + +http://www.djcj.org/LAU/guide/index.php . + +

+There are two widely-used driver sets, called "OSS" and "ALSA". OSS is +included in the standard Linux kernels since version 2.2. However, for some +audio cards you can find newer versions than are included in the kernel +releases. You can get ALSA from + + + http://www.alsa-project.org/ . + +

ALSA is able to emulate OSS, so that you can usually run Pd using the +default "OSS" settings even if it's actually ALSA that's running. +ALSA is newer, hence less stable and harder to use, than OSS. +Installing ALSA can be tricky and/or confusing. + +

By default, Pd uses OSS. If you are running ALSA, Pd will use ALSA's OSS +emulation. To make Pd use ALSA "natively", i.e., the way ALSA is designed +to be used, include the "-alsa" flag in the command line or bang on the "media" +menu items. + +

You can add ALSA devices by name on the Pd command line: +

+    pd -alsaadd loupgarou
+
+instructs Pd to offer the 'loupgarou' audio device in the Audio Settings panel. + +

Experiences with particular soudcards

+ +

+Here are some of my own experiences with sound cards so far. See +also the Pd mailing list archives. + +

RME 9652 (Hammerfall)
+ +

This is the best sound card out there; it costs around $500 and has 3 ADAT +I/O ports and one SPDIF. There is a "baby hammerfall" also, which I think is +the "9632." DO NOT CONFUSE THE 9652/9632 WITH OTHER RME BOARDS WHICH MIGHT +NOT WORK WITH PD. + +

The easiest way to use +Hammerfall boards in Pd is via ALSA and jack; but you can use ALSA alone: +

+    pd -alsa -channels 26
+
+works for me. If you don't specify the number of channels correctly Pd crashes. + +
MIDIMAN
+ +

Midiman sells PCI devices (delta 44, 66, 1010, and 1010LT) +with between 4 and 10 channels in and out, for +which there are ALSA drivers. These are also very good, and they are a +bit cheaper than Hammerfalls. The driver name is "ice1712". + +

Alsa provides an "envy24control" program (in "utils". You should run +this and check that your ice1712's sync source is internal if you have no +SPDIF input, or "SPDIF" if you do. I think the default is now "internal" +but don't take it for granted... + +

warning about i810/i815 drivers...
+ +

As of RedHat 7.0, motherboards with native i810 audio systems didn't work in +full duplex (they crashed linux). Either run Pd -noadc or else (better) +install ALSA. This ought to be fixed by now... + +

3.4. Installing Pd in Macintosh OSX

+ +

Pd version 0.35 and up support Macintosh OSX. You need the OSX Jaguar +distribution (10.2) or later. + +

To install Pd you can always just download the sources and compile them +yourself, or (easier) just download the Mac binary from the download page: + + +http://crca.ucsd.edu/~msp/software.html. + +This is in the form of a compressed Tar archive; just click on it and the Max +will extract the Pd application. Open this and you should be running. + +

The package by Hans-Christoph Steiner, on + + +http://at.or.at/hans/pd/installers.html, + +has many updates and extensions +which are not included in the original Pd distribution. Download this and +follow the (simple) instructions found there. +

+ +

To install on OSX from source:

+ +

+Whether you've downloaded the source or the "package" you can +always compile Pd for yourself, whether to make your own improvements, or +possibly so that you can get the newest version before it shows up compiled for +Mac OS X. + +

To be able to compile Pd, you must have installed Tcl/Tk +specifically in +/Applications/Wish Shell.app +and /Library/Frameworks/Tk.framework and /Library/Frameworks/Tcl.framework. + +

First download and install TK for OSX. I get it from: + +http://tcltkaqua.sourceforge.net/. + + +

Then, just as for linux, just unload pd-whatever.tar.gz into a directory +such as ~/pd-0.36-0, cd to pd-0.36-0/src, type "./configure" +and "make". Then type ~/pd-0.36-0/bin/pd to a shell and enjoy! + +

If you wish you can put a line such as, + +

+    alias pd ~/pd/bin/pd
+
+ +

in the file, ~/.tcshrc, so that you can later just type "pd" to a shell. +(The +shell only reads the ~/.tcshrc file on startup, so this won't take effect in +any existing shells unless you specially type +

+    source ~/.tcshrc
+
+

to them.) + +

Follow the general directions above for testing audio and/or MIDI +as needed. + +

To get MIDI working, you have to do the Mac OSX magic to get a USB +MIDI interface installed. I've seen this done with Midisport devices and +I think you just download the OSX driver and follow directions. + +

3.5. Installing Pd in IRIX (SGI machines)

+ +

(NOTE: as of release 0.35 I haven't had an IRIX machine to compile +Pd on. Soeren Bovbjerg has kindly compiled 0.35 and 0.36 for IRIX; +you can find these at + http://www.cvmt.dk/~sb/ .) + +

Download Pd, which will be a "tar.Z" file. You can unpack this by +typing "zcat [name].tar.Z | tar xf -" to a shell. This creates a directory +named "pd". + +

+Starting with release 0.25, Pd should come in "n32" and "o32" versions. +"o32" is the default and will run on IRIX 5.x and up. "n32" runs faster, +but only on 6.x and up. Also, "externs" have to be updated for n32. The +"pd" executable (bin/pd in the distribution) is a symbolic link to either +"pd-o32" or "pd-n32." + +

NOTE: "externs" appear to be broken in the N32 version... I'm not sure +how long this has been true. If you want to use external objects, you have +to use the O32 version. + +

+If for example you put Pd in ~, the executable program +will be ~/pd/bin/pd. The program looks at its command line to +figure out where it is, so it's best to invoke Pd by its full pathname. +You should always invoke Pd from a Unix shell because many important +messages appear on the standard error. + +

+The simplest way to invoke Pd is to +make an alias in your ".cshrc" file (assuming you use the "c" shell) such as: +

+
+
+    alias pd ~/pd/bin/pd
+
+
+

(assuming your Pd distribution landed in ~, for example). + +

+Pd will open the "default" audio input and output devices, without regard +for whether they are in sync or not. This will be bad if they aren't; use +the "-noadc" or "-nodac" flag to disable either the input or output. Pd is +supposed to handle up to 8 channels of audio in and/or out. (But at least +one user had to recompile Pd on his Onyx to get 8 channels working.) + +

+As to MIDI, Pd simply attempts to open all available MIDI devices for input and +output, which is probably very bad on anything more recent than my Indy. If +any MIDI ports fail to open either for input or output, all MIDI is disabled. + +

Pd has not been fixed to request real-time priority from Irix; it will +compete with all other processes on your machine for CPU time. + +

Audio and MIDI in IRIX

+ +

+Pd takes command line arguments to set the number of input and output channels +and the sample rate. These don't affect the SGI's audio settings, which you +have to set separately using the "audio panel." Pd does detect the audio +sample rate if you don't specify one on the command line. + +

+On SGI machines, you have to work to get MIDI running. Before you start Pd, verify +that least one MIDI port is configured open. Pd opens the FIRST MIDI port +that's open. You might want to get rid of the "software" MIDI port if you're +running 6.x. On Indys, the usual practice is to open serial port number 2 +because some systems configure port 1 as "console" by default. You can use the +GUI if you want, or else just type +

+
+    startmidi -d /dev/ttyd2
+
+
+ +

to get port 2 speaking MIDI, and + +

+
+    stopmidi
+
+
+ +

to stop it. You can test whether MIDI is configured by typing, + +

+
+    ps -dafe | grep midi
+
+
+ +

and looking for "startmidi" processes. + +

+It's a good idea to connect your serial port to your MIDI interface before +typing the "startmidi" command, not afterward, at least in 5.x. We use the +Opcode Studio 3 interface but in principle any Mac-compatible one should work. + +

+The O2 apparently has RS232 ports, not RS422. I think SGI's web site says +something about how to deal with this. + +

3.6. Preferences and startup options

+ +

Pd's behavior may be customized to instruct it where to find files, which +audio devices to open, what font size to use, and so on. Most of +these may also be changed using the various dialogs you can open from Pd's +menus. Others take effect only when Pd starts up; some of these appear +on the ``startup" dialog and some of them, too cranky to put in a GUI, must +be typed as command line arguments . + +

In addition to the Audio and MIDI settings (see + Audio and MIDI ), you can customize font size (from the +``edit" menu), directories to search for files (see + How Pd searches for files ), and additional startup +parameters described below. + +

All of these settings may be saved automatically between Pd sessions. +It is also possible to specify settings directly via the command +line . (A third mechanism, using configuration files, is deprecated and +isn't described here.) The Pd command line is described in the next +section. Command line settings, if given, each override the corresponding +setting that was saved from Pd. + +

The startup settings (i.e., those that take effect only when Pd is started) +are controlled using the ``startup..." dialog from the File menu. The +dialog appears as follows: + +

+ startup dialog +

+ +The slots at top each specify a binary ``library" for Pd to load on startup. +These may be for Gem, pdp, zexy, iemlib, cyclone, and so on. Typically, a +single binary object (an ``extern") is left for Pd to load automatically; +startup library loading is appropriate for collections of many objects +specified by a single binary library. + +

The ``defeat real-time scheduling" contol, if enabled, makes Pd run without +its usual effort to become a real-time process (whatever this means in the +operating system you are using.) In Unix, Pd must usually be setuid to allow +real-time scheduling at all. + +

The ``startup flags" allow you to add to Pd's command line on startup. This +is specified as described below, except that the initial word, ``pd", is +understood. For example, putting ``-rt" in this field sets real-time +scheduling; ``-sleepgrain 1" sets the sleep grain to 1 (see under MIDI below), +and typing "-rt -sleepgrain 1" does both. + +

You may save the current settings for future Pd sessions with the +``save all settings" button; this saves not only the path but all other +settings as well. + +

Command line arguments
+ +

Pd may be run as a "command line" program from your "terminal emulator," +"shell," or "MSDOS prompt." In Windows, if Pd is started using a "shortcut" +it is also run from a command line which you can edit using the ``properties" +dialog for the shortcut. In any operating system, Pd can be called from a +script (called a batch file on Windows or a shell script +on OSX or unix). The command line is just a line of text, which should be +of the form: + +

+
+    pd [options] [patches to open]
+
+
+ +

although you may have to specify a path (such as "~/pd/bin/pd" or +"C:\program files\pd\bin\pd") so your command interpreter can find +Pd. Possible options include: + +

+
+audio configuration flags:
+-r <n>           -- specify sample rate
+-audioindev ...  -- sound in device list; e.g., "2,1" for second and first
+-audiooutdev ... -- sound out device list, same as above 
+-audiodev ...    -- specify both -audioindev and -audiooutdev together
+-inchannels ...  -- number of audio in channels (by device, like "2" or "16,8")
+-outchannels ... -- number of audio out channels (by device)
+-channels ...    -- specify both input and output channels
+-audiobuf <n>    -- specify size of audio I/O buffer in msec
+-blocksize <n>   -- specify audio I/O block size in sample frames
+-sleepgrain <n>  -- specify number of milliseconds to sleep when idle
+-nodac           -- suppress audio output
+-noadc           -- suppress audio input
+-noaudio         -- suppress audio input and output (-nosound is synonym) 
+-listdev         -- list audio and MIDI devices
+
+(linux specific audio:)
+-frags <n>       -- specify number of audio fragments (defeats audiobuf)
+-fragsize <n>    -- specify log of fragment size ('blocksize' is better...)
+-oss            -- use ALSA audio drivers
+-alsa           -- use ALSA audio drivers
+-pa             -- use portaudio (experimental version 19)
+-alsadev <n>     ----- obsolete: use -audiodev
+-32bit             ---- (probably obsolete) -- use 32 bit OSS extension
+
+(Windows specific audio:)
+-mmio           -- use MMIO drivers and API
+-asio           -- use ASIO drivers and API
+
+MIDI configuration flags:
+-midiindev ...   -- midi in device list; e.g., "1,3" for first and third
+-midioutdev ...  -- midi out device list, same format
+-mididev ...     -- specify -midioutdev and -midiindev together
+-nomidiin        -- suppress MIDI input
+-nomidiout       -- suppress MIDI output
+-nomidi          -- suppress MIDI input and output
+
+general flags:
+-path <path>     -- add to file search path
+-nostdpath       -- don't search standard ("extra") directory
+-stdpath         -- search standard directory (true by default)
+-helppath <path> -- add to help search path
+-open <file>     -- open file(s) on startup
+-lib <file>      -- load object library(s)
+-font <n>        -- specify default font size in points
+-verbose         -- extra printout on startup and when searching for files
+-version         -- don't run Pd; just print out which version it is
+-d <n>           -- specify debug level
+-noloadbang      -- suppress all loadbangs
+-stderr          -- send printout to standard error instead of GUI
+-nogui           -- suppress starting the GUI
+-guiport <n>     -- connect to pre-existing GUI over port 'n'
+-guicmd "cmd..." -- substitute another GUI program (e.g., rsh)
+-send "msg..."   -- send a message at startup (after patches are loaded)
+-rt or -realtime -- use real-time priority (needs root privilege)
+-nrt             -- don't use real-time priority
+
+
+ +

Here are some details on some of the audio, MIDI, and scheduler options (but +see also the next section on file management.) + +

multiple devices.

+ +

You can specify multiple MIDI input and output devices. For example, +"pd -midiindev 3 -midioutdev 4,2" asks for the third MIDI input device and the +fourth and second MIDI output device. + +

Audio device selection is similar, except that you can also specify +channels by device: "-audioindev 1,3 -inchannels 2,8" will try to open device 1 +(2 channels) and device 3 (8 channels.) + +

sample rate.

+ +

The sample rate controls Pd's logical sample rate which need not be that of +the audio input and output devices. If Pd's sample rate is wrong, time will +flow at the wrong rate and synthetic sounds will be transposed. If the output +and input devices are running at different rates, Pd will constantly drop frames +to re-sync them, which will sound bad. You can disable input or output if this +is a problem. + +

audio buffer size and block size

+ +

You can specify an audio buffer size in milliseconds, typically between 10 and +300, depending on how responsive your OS and drivers are. If this is set too +low there will be audio I/O errors ("data late"). The higher the value is, +on the other hand, the more throughput delay you will hear from the audio +and/or control inputs (MIDI, GUI) and the audio coming out. + +

You can also specify the audio block size in sample frames. This is 64 by +default (except for MMIO for which it's 256), and may be 64, 128, or 256. + +

MIDI and sleepgrain

+ +

In Linux, if you +ask for "pd -midioutdev 1" for instance, you get /dev/midi0 or /dev/midi00 +(or even /dev/midi). "-midioutdev 45" would be /dev/midi44. In NT, device +number 0 is the "MIDI mapper", which is the default MIDI device you selected +from the control panel; counting from one, the device numbers are card +numbers as listed by "pd -listdev." + +

The "sleepgrain" controls how long (in milliseconds) Pd sleeps between +periods of computation. This is normally the audio buffer divided by 4, but +no less than 0.1 and no more than 5. On most OSes, ingoing and outgoing MIDI +is quantized to this value, so if you care about MIDI timing, reduce this to 1 +or less. + +

3.7. How Pd searches for files

+ +

Pd has a search path feature; you specify the path on the command line +using the "-path" option. Paths may contain any number of files. If you +specify several files in a single "-path" option they're separated by colons +in unix or semicolons in NT. + +

You can see and edit the path while Pd is running using the "path..." +item in the "File" menu: + +

+ startup dialog +

+ +

The path must be correctly set before you load +a patch or it may fail to find abstractions, etc., that are needed to +construct the patch. When Pd searches for an abstraction or an +"extern" it uses the path to try to find the necessary file. The "read" +messages to qlists and arrays (aka tables) do this too. + +

If ``use standard extensions" is enabled, the usual ``extras" directory +is also searched. This contains standard external objects like ``expr" and +``fiddle", and perhaps much more depending on the distribution of Pd +you're using. + +

You may save the current settings for future Pd sessions with the +``save all settings" button; this saves not only the path but all other +settings as well. + +

Path entries may be relative to the patch directory; for instance, +if your path has an item, "../sound", and your patch is in "my stuff/all mine", +then Pd will look in "my stuff/sound". Spaces should be OK in the path to +the patch, but not in the path entry (../sound) itself. This is useful if +you have a patch and supporting files (even a supporting snapshot of pd) +that you want to distribute or carry around together. + +

Regardless of path, Pd should look first in the directory containing +the patch before searching down the path. Pd does not automatically look +in the current directory however; to enable that, include ``." in +the path. The ``extra" directory, if enabled, is searched last. + +

Filenames in Pd are always separated by (unix-style) forward slashes, even +if you're on Windows (which uses backslashes). This is so that patches can be +ported more easily between operating systems. On the other hand, if you +specify a filename on the command line (as in "pd -path c:\pdlib") the file +separator should agree with the operating system.
+ +

If a filename specified in a patch has any "/" characters in it, the "path" +is not used; thus, "../sounds/sample1.wav" causes Pd only to look relative to +the directory containing the patch. You may also invoke externs that way. + +

As of version 0.35, there may be spaces in the path to Pd itself; also, +the "openpanel" and "savepanel" objects can handle spaces. Spaces in the +path should work as of version 0.38. + + + + + diff --git a/desiredata/doc/1.manual/x4.htm b/desiredata/doc/1.manual/x4.htm new file mode 100644 index 00000000..faaf2f48 --- /dev/null +++ b/desiredata/doc/1.manual/x4.htm @@ -0,0 +1,61 @@ + + + + + Pd Documentation 4 + + + + + + + +

Pd Documentation chapter 4: writing Pd objects in C

+ +

+ back to table of contents +

+

+ +

You can write your own objects that you and others can use in their Pd +applications. You can write them in C or (if you're smart and brave) in C++ or +FORTRAN. + +

HOW EXTERNS ARE LOADED + +

Whenever you type the name of an object +(into an "object" text box) that Pd doesn't yet know about, Pd looks for a +relocatable object file, named, for instance, "profile.pd_irix5". Pd looks +first in the directory containing the patch, then in directories in its +"path." Pd will then add whatever object is defined there to its "class list," +which is the set of all Pd classes you can use. If all this works, Pd then +attempts again to create the object you asked for, this time perhaps +successfully. There is no difference between an object defined this way and an +object built into Pd. + +

Once you load a new object into Pd, it's there for the duration of your Pd +session. If you load another Pd document which supplies a different version of +some Pd object, the object won't be updated. IF you're working on a new object +and decide to change it, you have to exit and re-enter Pd to get the change to +take. + +

In the "externs" subdirectory of the documentation you +can find simple examples of "externs" with their source code and test patches; +there are many other on the web (see section 1.2 ). + +

Iohannes Zmoelnig has written an excellent guide to writing externs at + + http://iem.kug.ac.at/pd/externals-HOWTO/ . + +

A paper by Theo Stojanov on the subject is at: + +http://www.music.mcgill.ca/~theo/html/audio/pd_externs.pdf . + +

NT HINT: In NT, Pd is compiled using Visual C 6.0. If you have VC 5.x +your externs won't compile against Pd; you'll get an error about "disk full +or bad DLL." Simply recompile Pd under 5.x and the problem goes away. Externs +compiled under 5.x and 6.x are binary compatible; it's just the compilation +that's sensitive. + + + diff --git a/desiredata/doc/1.manual/x5.htm b/desiredata/doc/1.manual/x5.htm new file mode 100644 index 00000000..7aec1cf9 --- /dev/null +++ b/desiredata/doc/1.manual/x5.htm @@ -0,0 +1,1568 @@ + + + + + Pd Documentation 5 + + + + + + +

Pd Documentation chapter 5. current status

+ +

+ back to table of contents +

+

+ +

This section tracks changes in Pd's current implementation.

+ +

5.1. release notes

+ +

------------------ 0.39.2 -------------------------- + +

Bug fixes: memory leak in OSX version; problem printing numbers as symbols. + +

------------------ 0.39.1 -------------------------- + +

Bug fixes: compatibility problems with older version of TK + +

------------------ 0.39.0 -------------------------- + +

At the source level, "regular" arrays and arrays within data structures are +now the same thing. This will mean that, in the future, features introduced to +one array type will become available on the other one too. Array elements are +"scalars" (i.e., data structures) and if they have drawing instructions, each +point of the array is drawn according to them; they can be clicked on, etc., +just like any other scalars. "Regular" arrays have points which are of a +special, built-in template, "float". + +

Drawing instructions now can use variable ranges for screen coordinates; +for instance, specifying an offset of "a(0:10)(100:200)(0.2)" specifies that +the member "a", which shoudl range from 0 to 10, should be graphed at locations +ranging from 100 to 200 (relative to the scalar's base location) and should +have a "grain" of 0.2, i.e., steps of 2 pixels each. + +

Drawing instructions can be turned on and off, either globally +(for all data of the given structure) or by a data field. + +

The "struct" object has an outlet to notify you when a datum is selected or +deselected. + +

Graph-on-parent subpatches and abstractions no longer scale the GUI objects +to fit the parent rectangle; instead you get a sub-rectangle in the subpatch, +of the same size as the parent object, to place GUI objects in. GUI objects +that don't fit inside aren't shown on the parent, and the parent objects no +longer stretches itself to show things that wouldn't otherwise fit. Older +patches work as before until you try to edit them - at which point you have +no choice but to use the new functionality. + +

The font size of a Graph-on-parent abstraction is that of the abstraction +itself, not the calling patch. + +

Message boxes now take "addcomma" and similar messages. + +

A "list" object is provided for joining and splitting lists, and converting +between lists and non-list messages. + +

Pd extension is now added automatically to files on Macintish when you +do a "save as". The tcl/tk version is updated to 8.4.5. This should run on +OSX version 10.2 and later. Also on Mac, drag-and-drop startups read +"libraries" (specified in "startup" dialog) before opening the file. + +

The "pointer" object has a method to rewind to the beginning of a list. +A "sendwindow" message forwards any message to the window contining the +scalar currently pointed to. + +

Abstractions don't produce visible windows, even if subwindows of the +abstraction were visible when the abstraction was saved. + +

MIDI sysex messages should now work on all platforms. + +

Bug fixes: + +

sending lists to arrays now correctly interprets the first number of the +list as the starting index (following values are then stored seuentially in the +array.) + +

The rfft~ object's imaginary part had the wrong sign. Also, the Nyquist +bin is now supplied correctly. + +

Fixed problems writing aiff files using the writesf~ and soundfiler objects. +Writesf, if sent an "open" while a file was previously being written, closes the +previous file first. + +

Bug fix in number2 which sometimes crashed Pd. + +

Stale-pointer protection made more robust. + +

Some of Pd's tcl/tk error messages have been tracked down, but probably +not all of them yet. + +

"Find" crashed Pd when the found object was in a GOP. + +

Mouse motion over arrays no longer is quite so CPU-consuming (but is +still somewhat so.) + +

samplerate~ now reflects up/downsampling. + +

Tilde objects in blocked, overlapped subpatches no longer adjust their +internal sample rate to reflect the overlap. + +

Fixed a thread-safety problem in sys_microsleep(). + + +

------------------ 0.38.1 -------------------------- + +Fixed two bugs that crashed Pd when deleting number boxes in certain +situations. + +

------------------ 0.38.0 -------------------------- + +

The big change is queued graphics updates, which apply (so far) +to tables and number/symbol boxes. The IEM GUIS aren't enqueued yet. +This along with a better graphics update buffering scheme makes Pd's +graphics run much better. + +

Support for cutting/copying/pasting text between boxes and between Pd and +other applications. + +

Dialogs for setting and saving path, libs-to-load-on-startup, and some +other things. This and the audio settings can be saved automatically to +the appropriate repository (.pdsettings on linux; registry on MS windows; +"Preferences" on Mac.) + +

"Print" printout goes to the Pd window by default. You can revert to +the old (standard error) behavior with the "-stderr" startup flag. + +

The "gui" TK script can now start Pd up (previously Pd had to be +started first.) This is needed for Pd to work as an "App" on Mac. + +

new filter objects: cpole~, fpole~, etc... these will get used in the +upcoming Techniques chapter 8. + +

Objects whose creation failed get a distinctive outline; if they are +already inside a patch they sprout inlets and outlets as necessary to +preserve connections. + +

Filenames in the "search path", etc., now may contain spaces, commas, +and semicolons. + +

bug fix: click on minaturized subpatch failed to "vis" it + +

bug fix: font size change crash reported by CK + +

Key bindings like control-Q now work even from within most dialogs. + +

The audio settings dialog now permits turning audio input and/or output +off without forgetting how many channels it should be when on. + +

RME Hammerfall ALSA support from Winfried -- but specify the number of +channels correctly or else Pd crashes. + +

portaudio (e.g., Mac) audio support fixed for inchans != outchans, +so the emi emagic can now be used 2-in. 6-out, for example. + +

(linux) The configure script can set the setuid flag on "make install". +The "-enable" flags to ./configure should now work correctly too. + +

atan2 had its inlets switched to conform to standard usage + +

------------------ 0.37.3 -------------------------- + +

Oops- added __i386__ macro to windows makefile so it would test for +underflows correctly. This affects only Microsoft Windows; the other +two platformas are fine as 0.37.2. Thanks to Thomas Musil... + +

------------------ 0.37.2 -------------------------- + +

fixed a bug in soundfile reading (soundfiles now default to wav better.) + +

fixed gfx update problem in hradio and vradio + +

minor changes to built-in Max import feature (but you should +still use cyclone's instead.) + +

colors for scalars fixed (probably never worked before!) + +

added a "set" message to the line object + +

aliased spaces to underscores in GUI labels so that at least they won't +destroy the object. + +

------------------ 0.37.1 -------------------------- + +

fixed the apple key on OSX so it does key accelerators + +

fixed bug in -inchannels/-outchannels arg parsing + +

major editions to the IEM GUIs to fix bugs in how "$" variables are handled. +The code still isn't pretty but hopefully at least works now. + +

bug fix in vd~ for very small delays + +

fixed MSW version not to make windows grow by 2 pixels on save/restore + +

added an "nrt" flag for OSX to defeat real-time priritization +(useful when runnig Gem.) + +

on some platforms, audio open failures are handled more gracefully. + +

added a "changelog" file in the source directory to document source-level +changes. + +

------------------ 0.37 -------------------------- + +

Pd is finally fixed so that it can open and close audio and MIDI devices +on-the-fly (previously it opened them once at startup and hogged them until +Pd quit). Starting DSP causes audio devices to be opened, and +stopping it closes them. +There are dialog panels in the "Media" menu (which used to be called +"Audio") for choosing audio and MIDI settings. The "path" also can be changed +on the fly via a dialog in the "File" menu. + +

A "vline" object acts like "line" but to sub-sample accuracy. See +the audio example, C04.control.to.signal.pd (and/or chapter 3 of + Theory and Techniques of Electronic Music ). + +

The block~/switch~ object now takes a "set" message to dynamically change +block size, etc. + +

The makefilename object takes a "set" message to set the "pattern". You +can use this to kludge multiple substitutions (as shown in the help file). + +

The writesf~ object got an update and a better help window. It now should +be able to write 32bit floating-point WAV soundfiles. The file's sample rate +is now set "correctly". + +

Various improvements were made in audio I/O to improve stability and +reduce latency. + +

Jack support should work for Mac OSX (it appears as a separate API). +Linux is offering experimental portaudio V19 support (but Mac and Window/ASIO +are still based on PA V18.) + +

The fiddle~ object (in extra) has an "npoints" method to set the analysis +window size dynamically. + +

(windows) Pd is now distributed as a self-extracting archive. + +

(windows) url files in the help directories are opened correctly. + +

(Mac) the arrow keys should now be fixed. + +

(linux) The "configure" script should be better at finding TK in various +distributions (debian users previously had to use a special configure script.) + +

(developers) Pd now exits cleanly from its main loop instead of bailing +out. A mutex protects Pd's data so it can be accessed from other threads. +(Thomas Grill's improvements.) + +

(developers) The "savefunction" and "dialog" widget behaviors +were replaced by a better mechanism (class_setsavefn() and +class_setpropertiesfn()). THey're declared in m_pd.h so you don't have to +include the (unstable) g_canvas.h to get them. + +

(developers) Better flag handling in the IEM GUIs (g_toggle.c, etc) should +compile with fewer warnings and be more portable. + + +

------------------ 0.37-test 1 -------------------------- + +

The MacOSX version now prioritizes itself effectively (thanks to +gert@test.at (v93r)) via Adam Lindsay). Adam has made a proper MacOSX +"package" for Pd; see +http://homepage.mac.com/atl/sw. + +

A bug was fixed in readsf~/writesf~ (things were coming out in the wrong +number of channels.) + +

A problem compiling Pd with TK8.4 (the latest version) was fixed. + +

Large numbers of GUI improvements by Adam Lindsay, especially relevant +to Mac OSX. + +

For externs, the binary may now be included in a subdirectory of the +same name (e.g., "choice/choice.pd_linux" and "choice\choice.dll"). So +now you can pack multiple binaries for the same extern, along with the +source, in one convenient place. (Note that +"expr~" is an exception, since it goes by three different names, so this +trick fails for that example.) + +

"Help" files renamed "help-xxx.pd", so that help files are now possible +for abstractions. The "help path" feature from CVS (I forgot who contributed +that) is also included but should now not be needed: Pd remembers where it got +externs and abstractions and looks back in the same directory for a help file. +See the way "extras" is organized. + +

Pd refuses to connect signal outlets to non-signal inlets. + +

When you save any patch, Pd looks for all invocations of that patch +as an abstraction and reloads them. This unfortunately has the side effect of +making all the containing windows visible, but it's better than nothing. + +

------------------ 0.36-1 ------------------------------- + +

"print" now queries you for a file to save the postscript to. + +

"expr" brought up to date (0.4) -- a bug was fixed involving expresions +like "max($f1, 100)" which had erroneously output an integer. + +

a bug fix in the 4-point interpolation formula, which affects tabosc4~, +tabread4~, tabread4, and vd~. These should have significantly lower +distortion than before. + +

bug fix: vradio, hradio "send symbol" feature didn't work + +

------------------ 0.36 ------------------------------- + +

There's now an "undo" for most editing operations. Undoing is only +available in the window that was most recently edited. (One gotcha remains, +that "stretching" (in the font menu) affects all windows and you can't undo any +but the last one it touched.) Also, there's no "undo" for run-time operations, +only editing ones. That might be worth thinking about. + +

Some bugs were fixed that affected "flipped" canvases (ones whose +"properties show a positive "y" increment per pixel.) Also, the coordinates +are now saved and restored correctly. "text" objects (comments) now stick to +the bottom of the window for flipped canvases. + +

Signal lines now show up fatter than control lines. (Now I have to go +through the figures in the HTML doc again... drat) + +

"Classic" number boxes now can have labels and send/receive signals, which +work in the same way as the IEMGUI controls do. I think "$1" style +label/send/receive names work too. I fixed a related bug +in the IEM code (typing at boxes sometimes crashed Pd). + +

"vdial" and "hdial" were renamed "vradio" and "hradio", and fixed to +output numbers, not lists, like the other GUIs. The old ones are still around +for compatibility with old patches. + +

"Make install" should now actually make Pd before trying to install it. + +

"expr" is updated to Shahrokh's 0.4test3 version (which I modified somewhat +to get it to compile.) + +

The problem of CPU usage skyrocketing on underflows in P4s should +be fixed. + +

Compiled "pdsend" and "pdreceive" for Windows. + +

"PD_VERSION" macro added to m_pd.h + +

------------------ 0.35 ------------------------------- + +

An experimental new feature called graph-on-parent allows subpatches and abstractions to show +GUI features; so, for instance, you can make an oscillator with a number box to +control the frequency. This is described in section 2.7.2 of the HTML +documentation and an example is shown in 7.stuff/synth1/. + +

Spaces are allowed in pathnames to Pd and to patches; however, the "path" +variable still can't have spaces. (You can address path directories using +relative pathnames as in "../sound" (or ..\sound on Windows), even if there +are spaces further "up" the path to the patch. See 3.7, "dealing with files." + +

The soundfile reading routine (used in readsf~ and soundfiler) is much +better at opening wav files with different header sizes and odd chunks. +You can now read floating-point "wav" files -- although you can't write them +yet. + +

Templates and data structures are extensively reworked. A "struct" +object replaces "template", so that you specify the name of the structure as +the first argument to "struct" (previously it was derived from the +window name.) You can now have multiple "structs" of the same name; the +oldest one is the "real" one, but if you delete that, the structures are +all conformed to the next-oldest one, and so on. You can alter the contents of +a "struct" and all the associated data will be modified to fit the new +structure definition. Data are persistent, i.e., saved with the containing +patch. You can copy and paste data between patches. If you save data to a file +explicitly, you can read it into another patch and the data are conformed +automatically to the new data structures. + +

A new version of Thomas Musil's GUI objects was merged in. + +

The testtone patch works for up to 6 channels of audio input and output. + +

Lots of improvements got made to audio I/O in general. In NT you may +specify "-asio" to use ASIO drivers; see HTML documentation section 3.2. +You may specify lists of audio input and output devices. In Linux, Pd +will now attempt to open each /dev/dsp* only once, even if it's requested +for reading and writing. + +

The "extra" directory is now searched after the directories in the +search path, not before (so now you can override objects like "fiddle~"). + +

A bug in paf~ is fixed. + +

In Linux, the ".pdrc" is now read before the command line arguments, so +that command line arguments override the .pdrc (it was backwards before.) + +

In Linux, "help" now can invoke either mozilla or netscape to start +up the HTML documentation. This doesn't work in Windows or Mac land yet. + +

In Linux, the "-32bit" flag was added, which you must now use if +running Guenter's OSS RME Hammerfall driver. (This was necessary because +OSS went and used the same "bit" for a different purpose, so that Pd tried +to open some other cards in 32bit mode inappropriately.) + +

In Linux, MIDI is now opened "-NODELAY" ... this makes the OSS Creative +driver take MIDI input correctly which it didn't before. + +

In MS windows, you can now use "readsf~/writesf~" for spooling sounds to +and from disk. + +

MS Windows bug fixes: -nosound was ignored, and now works. Also, clicking +to open abstractions, when they were already open anyway, used to lose the +keyboard; this should be fixed now. Finally, "netreceive" didn't work when +running "-nogui". This is fixed, and moreover, you should definitely include +a netreceive object in any -nogui patch in MSW, otherwise it eats up all +available CPU time gratuitously. + +

The outlet is removed from the "table" object. + +

In MS Windows, Pd now has "-resync" and "-noresync" flags so that you +can specify how to deal with audio input and output blocksize nonsense in +MMIO. If "resync" is on, whenever the audio input and output seem out +of whack the audio driver resynchronizes all input and output devices; +otherwise the situation is simply ignored. "Noresync" is probably best for +consumer stereo cards (and is the default if you're running only 2 channels in +and out). If you're running more than 2 channels in either direction, the +default is "resync". + +

In soundfiler's read method, if you specify "-maxsize", that implies +"-resize" (as it ought to.) + +

You can use $1-style names for arrays and tables. + +

Pd will now refuse to make duplicate connections between objects. + +

Pd is (somewhat shakily) running on Macintosh OS/X. See section 3.4 of +the HTML doc. For Macs with one-button mice, you can double-click in edit +mode to simulate a right click. Unfortunately, the "alt" key doesn't work +yet. + +

In Linux, ALSA audio is now fixed to clip, not wrap around, on output +overflows. + +

Various problems were fixed with objects changing size. Number boxes never +wrap to two lines (as they used to), and lines are reconnected appropriately +when objects are resized. + +

A function call is added to retrieve a unique event-dependent number, +so that objects like "buddy" can be written. + +

All the "sound" command-line flags now have "audio" equivalents. + +

The "-listdev" flag now works on Mac and MSW/ASIO. + +

Help file updates for env~, route, and pointer + +

------------------ 0.34.3 ------------------------------- + +

fixed a bug in "udp" netreceive that crashed pd + +

fixed a bug in tabosc4~ that caused gritty sound + +

changed "specfile" for RPM releases (thanks Fernando) + +

adopted Krzysztof's glob_setfilename bug fix + +

bug fixes from "the joy of global variables" thread in Pd list + +

made a help window for "table". + +

------------------ 0.34.2 ------------------------------- + +

fixed ".pdrc" bug + +

added an experimental "pd restart-audio" feature for (new) Alsa + +

------------------ 0.34.1 ------------------------------- + +

Bug fixes: + +

1. Closing a window with objects selected crashed Pd. + +

2. "find" when it opened a window to show the found object crashed Pd. + +

3. (Linux only) Oversized .pdrc files crashed pd... + +

Also, I updated Thomas Musil's IEM GUI objects and their help files. + + +

------------------ 0.34 ------------------------------- + +

NEW FEATURES: + +

I incorporated Thomas Musil's GUI objects (slider, button, etc.) into +the Pd release so Thomas won't have to publish patches to Pd anymore. I +didn't take the graphical inlets and outlets for reasons explained elsewhere, +but Thomas might decide to continue supplying them on a patch basis. + +

Many new examples were added to the "2.control" and especially +"3.audio" example patches. A list of differences between Max/MSP and Pd +now appears at the end of this section. + +

Finally, I fixed Pd to notice window iconification and suspend graphical +updates for iconified windows. + +

Numbering of versions of Pd will now be as in "0.34.2" instead of +"0.34PATCH2" which was confusing. + +

BUGS FIXED: + +

I incorporated Krzysztof Czaja's menuclose bug fix in g_canvas.c. + +

(Linux) the configure script is more rational. + +

the qlist and pack objects were fixed to handle reentrancy correctly. + +

Pd now complains about running out of memory (before it dies.) I intend +to provide advance warning and automatically back out of loading patches that +would run out of memory, but that's not in place yet. + +

Typing into a message box sometimes left you with lines from the output +pointing to the wrong location. Fixed. + +

Reading of "wav" and nextstep soundfiles now handles the headers better. + +

------------------ 0.33 ------------------------------- + +

AUDIO AND MIDI: + +

MIDI time jitter is reduced. Theoretically, it could now be +as low as the audio blocksize (and so if you care about MIDI timing, keep your +audio blocksize low.) If you run Pd with audio in stream mode or without +audio at all, and perhaps in some cases in block more too (?), +the controlling parameter for MIDI jitter is "-sleepgrain", which specifies +the interval of time Pd sleeps when it believes it's idle. + +

You can now specify multiple MIDI input and output devices. For example, +"pd -midiindev 3 -midioutdev 4,2" asks for the third MIDI input device and the +fourth and second MIDI output device. The "channel message" midi objects in Pd +such as notein or pgmout will take channels 1-16 to mean the first open MIDI +port, 17-32 the second one, and so on. The midiin, sysexin, midiout objects +give you a separate inlet to specify which of the open MIDI port numbers +you want. + +

(Linux only) By default, Pd now reads and write audio in "block mode." +Previously you have to specify "-frags" and/or "-fragsize" to get this. +As of this version you have to specify "-streammode" to get the opposite, +streaming mode. This mode seems only to work with a small number of sound +cards, notably Ensoniq ens1370 and ens1371. + +

(Linux only) Also, "-fragsize" is replaced with a more convenient +"-blocksize" which you specify in sample frames. It defaults to 64 which is +Pd's audio computation block size but may be larger or smaller. Typically you +would specify "-audiobuf" and "-blocksize" and Pd will compute "-frags" for +you; but you can also specify "-frags" explicitly. + +

(Linux only) OSS and ALSA audio support are improved. You can now talk to +RME9652 using Guenter's OSS driver; this is different from the "-RME" support +which uses Winfried's older driver. Other multichannel OSS drivers might now +work as well. Pd also seems to work with ALSA 0.9 Beta 4; I've tested this +with Midiman Delta 66 and Soundblaster live. I plan to update the linux audio +setup documentation accordingly. + +

NEW FEATURES: + +

I've put in Shahrokh's new expr, expr~, and fexpr~ objects. The latter +allows you to make expressions referring to prior input and output samples in +case you're interested in writing your own recursive filters, oscillators, +or chaotic sound generators... + +

In support of expr, you can now use commas in "object" boxes; they just +become symbols. + +

sqrt~ is fixed so that it apparently has 24-bit accurate mantissas. +It turned out to be easier to just make it accurate than to confront the +question of how a reduced-accuracy version should be named. + +

The bizarre framp~ object which does phase vocoder analysis got a help +window. The phase vocoder example doesn't use framp~ and I had forgotten +what it did until Guenter dug it back up. + +

(Linux only) I finally got around to incorporating Guenter's autoconf +stuff, and learned about RPM. Major new Linux releases will probably be +in .tar.gz and .rpm formats; "test" releases will probably just be in .tar.gz. +I also fixed it so that the installation prefix is overridden if you invoke +pd by its full pathname, so that you can still use compilations with +installation prefixes before you actually install them. + +

(NT only) I added support for directX using the portaudio package +by Ross Bencina and Phil Burk. I couldn't discover any way this would ever +outperform the old "multimedia" API Pd uses. So the release contains the sources, +but you have to recompile Pd to use directX. Use "makefile.nt.portaudio". Only +1 or 2 channels of audio are supported. The interesting thing is that the same +code will run on Macintosh. There are a couple of other obstacles to a +MacOS port of Pd though; it's hard to predict when this will be feasible. + +

BUG FIXES: + +

"drawnumber" was broken in 0.32 -- fixed. + +

new arrays in 0.32p6 got ill-fitting graphs -- fixed. + +

------------------ 0.32 PATCH 6 ------------------- + +

Got array and graph dialogs to behave better when there are more +than one. + +

put in mtof~, etc. + +

made Pd search the "extra" directory without having to specify it in "path." + +

bug fix in exporting patches to Max + +

------------------ 0.32 PATCH 5 ------------------- + +

Reversed the order of these release notes so that the newest appear first. + +

Arrays can save their content with containing patch; the properties +dialog selects this. The dialog shows up when you create a new array from +the menu, and allows you to set the name and size. Only floating point arrays +can be created and edited this way. + +

Bug fix: the figures in the NT web doc were garbage. + +

Bug fix: large tables (> 800 pixels and points) no longer crash the GUI. +A related problem remains; large arrays are truncated to either 1000 points +or 1000 pixels. + +

Bug fix: doing "save as" on an instantiated abstraction no longer sets +the window title. + +

in linux, a couple of status messages on opening /dev/dsp only appear now +if Pd is run "-verbose". + + +

+

------------------ 0.32 PATCH 2, 3, 4 ------------------- + +

Hassled more with font size differences between NT and Linux, and updated +many help files. Minor bug fixes here and there. + +

the table object now takes a second argument to set size in points. + +

Improved underflow protection in some DSP objects. + +

pointer now has a "vnext" traversal method which goes forward to the +next SELECTED object. + +

improvements to throw~ (it now sums) and receive~ fixed to be settable. + +

bug fix in which RME driver always thought sample rate was 44100. + +

+

------------------ 0.32 PATCH 1 ------------------- + +

bug fixes (bugs flagged by mik): vcf~ help window crashed; writesf~ +only wrote 1 channel soundfiles; "table" object didn't open when clicked +on; + +

new object: tabosc4~ -- finally, a real wavetable oscillator for Pd. + +

much work on "data" editing; go to 7.stuff/data-structures, open patches +5 and 7, and try clicking on things. Alt clicks delete or add points; regular +clicks drag values around. The cursor changes to show you what will happen +if you click. + +

+------------------- 0.32 ----------------- + +

New objects: + +

midiin, sysexin, midiout. (I don't think MIDI sysex is working +in Windows yet though.) + +

threshold~ as in Jmax, triggers from audio level. + +

value as in Max and Jmax. + +

writesf as in Jmax. + +

New startup flags: + +

-sleepgrain: if you aren't using audio I/O, this can reduce time jitter in +MIDI I/O. Otherwise, MIDI I/O jitter is limited by the audio buffer size. + +

-noloadbang: cancels loadbangs. + +

-nogui: suppress starting the GUI. You can then still talk to Pd using, +perhaps among other possibilities, the new network connection programs now +included in the release. + +

-guicmd: lets you specify the command string Pd calls to start the GUI, +in case you've written your own GUI to replace the TK one Pd comes with. + +

-send: after loading all the patches specified in the command line, +you can specify "startup" messages to send. For example, if you want to use +Pd just to play 50-channel soundfiles from a shell, this is how you can specify +the soundfile name on the command line. + +

bug fixes. + +

A readsf~ problem got fixed. + +

hitting the tab key used to cause Pd windows to relinquish the keyboard. + +

The $0 feature apperas now to work. + +

Inlets and outlets of subpatches sometimes got out of left-to-right order. + +

Scrollbars are less out of whack than they were before. + +

Pd now knows to de-iconify windows if you "vis" them from the parent. + +

in general: + +

In Linux the treatment of MIDI input is now much more efficient. Also, +bugs were fixed in notein and (for SGI) bendin. + +

You can "select all" from the Edit menu. + +

standalone programs "pd-send" and "pd-receive" are provided that can send +mesages to Pd or receive messages from Pd via the netsend~ and netreceive~ +objects. This should allow you to interface a wide variety of other programs +with Pd either on the same machine or over the network. Also you should be +able to hack the code into your own programs to make them interoperate with +Pd and/or each other. The underlying protocol is called FUDI. + +

"Properties" for scalars, graphs, and number boxes: left click on them. +In particular, number boxes can have fixed widths and finite ranges; if you +make them one character wide they act as toggles. Later you'll be able to +configure them as sliders. + +

As to scalars, the properties dialog lets you edit the data in the raw. +Don't try to edit the template though; you can't. + +

You can now type into a "pd" object to change its name without losing the +contents. + +

An experimental "scalar" _text_ object now allows abstractions to draw +primitive control panels on their parents when you invoke them, as if they were +Moog or Buchla modules. See the "7.stuff/data" examples. + +

New help windows for the "data" classes (pointer, append, template, etc.) +and for send/receive which somehow I had neglected. + +

When you hit "copy" with nothing selected, the copy buffer used to be +cleared. This is fixed to do nothing. + +

+------------------- 0.31 ----------------- + +

ALSA support in Linux has been completely overhauled. It now works with +Midiman (up to 10 in/12 out!) and es1370. There are problems with SBLive under +ALSA but it works in OSS emulation with a "-frags" setting. See the "getting +started" documentation. + +

In NT, the default is now "noresync" if you're running stereo. You can +override this with the "-resync" flag. If you're running more than 2 channels +it's the opposite (as it was before.) + +

"symbol" boxes now display symbols and let you type them in. + +

There was a bug when you renamed a patch from outside Pd; the old filename +still showed in the title bar (and there were other bad side effects.) FIxed. + +

Protection was added against patches opening themselves as abstractions. + +

The "route" object's handling of leading symbols was improved. I'm not +sure whether it's Max compatible or not. + +

You can draw into arrays with the mouse, at least in the case where there's +at least one pixel per point. (I'm not sure if the other case even makes +sense.) + +

Abstractions display their "$1", etc., arguments in the window title bar. + +

A "sort" method was added for lists to make them easier to use as +sequencers. + +

The "save as" dialog makes a more reasonable choice of start-up directory. + +

"Trigger i" is now disallowed (it used to crash Pd.) + +

Getbytes and resizebytes now zero out new memory. + +

A memory leak reported by Hannes has been partly, hopefully mostly, fixed. + +

The "signal_free 2" bug reported by Fogar is fixed. + +

New graphs now reliably avoid using already-taken "graph%d" names. + +

The old bug which showed up as ".xxxxxxxxx: no such object" is fixed. + +

The FFT examples have been reworked and the "pique" and "shift" objects +are moved to "extra". + +

+------------------- 0.30 ----------------- +

in Linux, you can get Pd to promote itself to "real time" priority. +A "watchdog" process protects you from having Pd lock your machine up. You +must request real time by running "pd -rt" or "pd -realtime". You must either +be superuser or make Pd a root-owned SETUID program (chown root .../pd/bin/pd; +chmod 4755 .../pd/bin/pd). For security reasons, Pd relinquishes root +privelige immediately after setting its priority, before loading +any patches or externs. + +

Protection was added against message loops. + +

loadbang was fixed so that loadbangs in abstractions go off before loadbangs +in the owner patch. Within each patch, loadbangs go off forst in subpatches. + +

new object: tabplay~, a non-imterpolating sample reader. + +

new objects (in "extra" library): loop~; rev1~. + +

The "toys" library was renamed "extra" and incorporated in the Pd release. + +

In Linux, timeouts were added to the driver opening and closing code +(which used to hang under some conditions.) + +

the "field" object was replaced by "template"; see "data.structures" +examples in 7.stuff. Data lists can be read from and written to files now. + +

You can invoke an external object by pathname, as in "../../extra/loop~". + +

hip~, etc. should no longer get stuck when they get a NAN on input. + +

a bug was fixed in expanding symbols such as "$1-foo". + +

+------------------- 0.29 ----------------- + +

readsf~ - a MAX/FTS style soundfile player, which reads multichannel +soundfiles in wave, aiff, or next formats. The files must be 16 or 24 bit +fixed point or 32 bit floating point (only nextstep headers understand the +latter.) You can also override the header. A "skip" flag lets you read +starting anywhere in the file. (Sorry: linux only for now; I can't find +Posix threads packages for the other platforms.) + +

soundfiler - support for reading and writing soundfiles (wave, aiff, +nextstep) to and from arrays. Multichannel soundfiles can be read into or +written from several arrays at once. When reading you can ask that the tables +be automatically resized; in any event the object obligingly outputs the number +of samples actually read. When writing you can specify a sub-segment of the +arrays, and/or request that the soundfile's maximum amplitude be normalized to +one. + +

tabplay~ - a non-interpolating sample player + +

Garry Kling reports having compiled Pd for "yellowdog" linux on Macintosh +computers. One "fix" has been made to s_linux.c to facilitate this. I don't +have access to a Mac running linux at the moment so I can't verify whether +any particular repease of mine actually works there. + +

Signal objects now automatically convert scalars to vectors, so that you +can just run a number box into a signal input. One caveat is that the binops +"+~", "-~", "*~", "/~", "max~", "min~" run slightly faster if you give them +an argument to tell them that their right inlet will be scalar; so the +construction "+~ 0" is still meaningful. This will get fixed at some later +date... + +

Font sizes work in what I hope will be a more machine-portable way. On +any machine, the point sizes 8, 10, 12, 14, 16, 24 are DEFINED to be the +largest fonts Pd can find that don't exceed their size on my linux machine. +This way I can write patches that everyone else can read, and others will +at least have fewer portability problems than before. The downside is that +your old patches may appear with a different type size than you want; use the +"font" menu item to fix them. + +

The OSS support no longer asks the audio driver whether full duplex +is needed; it just tries to open it. Apparently some drivers (such as +ALSA's OSS emulation) might do full duplex but not implement the call Pd +used to query for it. + +

You can give "-nomidi" as a flag (previously you had to type "-nomidiin +-nomidiout".) + +

A GUI bug reported by Iain Mott was fixed. + +

You can now type symbols such as "$3-poodle" and the "$3" portion gets +expanded properly. Someone was also asking about the FTS-style #0 feature, +but I couldn't figure out how to reconcile it with Pd's usage of "$" for "#" +in abstractions. So I'm still searching for a good way to provide local +symbols. + +

the GUI now protects itself from "\", "{" and "}" characters by dropping +them. I wonder how many NT users have crashed Pd trying to type in filenames +with backslashes... + +

samphold_set and tabwrite_stop methods added. There turned out to be +no help window for samphold~ so one was supplied. + +

+------------------- 0.28 ----------------- + +

Version 0.28 has a primitive in-box text editor... about time! + +

the "front panel" now gives you information on audio levels and +sync errors. + +

Message boxes flash, sort of, when you click them. + +

+Support has been added for RME 9652 soundcards; see the Linux soundcard section of +the documentation. Support files for RME and PCI128 (Ensoniq es1370) cards +are released separately from Pd. + +

The delete and backspace keys clear the current selection. There is +unfortunately no "undo" though; I'm not sure this is a good thing to have +put in. + +

The "until" object has a "float" method which limits the number of bangs +it will output. + +

The audio setup is better documented for NT and Linux. + +

The externs in 4.fft and 6.externs got recompiled and tested. + +

BUG FIX: the "read16" message to tables was broken on NT and is now fixed. + +

BUG FIX: In Linux, starting Pd up sometimes changed the audio mixer +setting. + +

BUG FIX: sending "floats" to inlets expecting lists now works correctly. + +

BUG FIX: "route" on symbols now deals better with symbols, floats and lists. + +

+------------------- 0.27 ----------------- +

+The main new feature is the "find" menu stuff. You can search for boxes +containing specified atoms, including semicolons or commas. Most errors are +now trackable, allowing you to "find last error". Look in the "Find" menu. + +

+New objects written: change, max, max~, min, min~, and swap. + +

+I looked in 0.INTRO.txt in 5.reference, and found that the objects +bag, cputime, realtime, pipe, symbol, poly, and bang were missing. + +

+Five or six bug fixes. + +

+Some audio problems in 0.25 were addresses. In Linux, audio drivers that +don't support the GETISPACE/GETOSPACE ioctl calls can be called using the +(inferior) "-frags/-fragsize" mechanism. If you specify either a "-frags" +or a "-fragsize" option, the GETIOSPACE calls are cancelled. + +

+Under NT, for some audio drivers the 0.26 release gave a constant stream of +"resync" events. I don't know what causes this but I added a "-noresync" +option which simply never resyncs at all. + +

+------------------- 0.26 ----------------- +

+phasor~ and osc~ can be configured to take floating point messages to set +their frequencies, as an alternative to having an input signal to do the +same. Also, +~, etc, can take floating point arguments (and messages) to +add or multiply scalars. THe +~, etc, loops were unrolled to make them +run faster. + +

+A switch~ object is provided to let you switch sub-patches on and off. The +inlet~ and outlet~ objects were re-written to avoid adding any overhead when +moving signals in or out of sub patches. + +

+In Linux at least, the audio latency is much reduced. It's possible to poll +for audio I/O lateness errors by sending "pd audiostatus". + +

+When reading a sample using tabread4~, you can switch between sample tables +using the "set" message. + +

+A new "textfile" object is like qlist but more flexible. + +

+Many help windows got updated (but at least a dozen more need work urgently). + +

+A dsp_addv function was added to allow variable-length DSP calls (for writers +of tilde externs.) + +

+It's possible for a tilde extern to have a name ending in "tilde" now. Name +the setup routine "foo_tilde" for "foo~", etc. + +

+The dac~ object was fixed to clip its output when out of range (before it +wrapped around.) + +

+A first line of protection was added against getting numerical underflow +in delay feedback loops. Before, when a reverberator taled out there was +a sudden jump in CPU usage because the numerical underflows would trap to the +kernel. Now, if any delwrite~ is given a value less than 1e-20 or so, it +records a true zero to avoid this. + +

+Signal division checks for divide by zero. + +

+A "Font bomb" feature is provided for resizing fonts and stretching and +contracting patches to fit. + +

+Pds now bind themselves to the symbol pd-<window-name). + +

+IN Linux, if Pd is called as root it tries to promote its run-time +priority. You can make pd a setuid root owned program if you want this +behavior for non-root users who start pd. +(Don't make pd-gui setuid though. That would make a security +hole in your system.) + +

+The Pd commend line can take multiple "open" arguments. + +

+The file search path feature was fixed amd generalized. + +

+Alt-clicking a table gives you a dialog to set its x and y range and pixel +size. + +

+------------------- 0.25 ----------------- +

+Lots of minor, under-the-hood improvements and bug fixes... +

+The Netsend/netreceive objects were improved; you can now choose between UDP +and TCP and there's an outlet to tell you whether they're connected. +

+You can now alt click on an object to get its help window (and the help +windows got a fair amount of work.) +

+multichannel audio I/O -- you can get up to 8 audio cnahhelsin and out. +On SGI this is sdone correctly; on NT it's done using sequential "stereo" +devices. I'm not sure of the status of multichannel in linux... +

+The "text" window got new accelerators and a bigger font size +

+there are 3 "tool" patches in 7.stuff: filtering, pvoc, ring mod. +

+In NT, command-line backslashes are converted to forward slashes. +

+There's a load measurement tool in the "help" menu. +

+The SGI version contains an n32 binary (look at the "bin" directory). + +

+------------------- 0.24 --------------- +

+new objects: +
- bang - convert any message to a "bang" +
- qlist - message sequencer +
- textfile - file to message converter +
- makefilename - format a name with a variable field +
- openpanel - "Open" dialog +
- savepanel - "Save as" dialog +

+Bug fixes: +
- Fixed a bug in "const" message to arrays +
- "exp" was broken on NT, now fixed +
- phase vocoder example improved +
- "read" message to arrays now zero out unread samples +
- bug fix in "key" object +
- bug fix in ifft~ (thanks to Peter Lunden) +
- "print" object fixed to distinguish between lists starting with symbols and + other messages +
- polygon, curve, fpolygon, fcurve renamed to fix name clash with Gem +
- improved "new object" placement on screen +
- fixed help dialog to remember previous directory (thanks to Harry Castle) +
- heterogeneous lists +

+ +Arrays can be written to and read from text files or from 16-bit +binary files. See ../2.starter/2G for an overview. +

+ +Guenter Geiger has contributed a Max-style "table" object which +creates an "array" object in a subwindow. +

+ +Guenter has also put in a "search path" feature for externs, abstractions, +etc. +

+ +The Help menu got reworked. +

+ +Select and Route were extended to work Zack-style with symbols. +

+ +"random" takes seeds now (see the "help" window) +

+ +Some more work on graphical lists; you can see the current state in +../7.stuff/data-structures. It's still nascent. + +------------------- 0.23 ------------------- +

+A first cut at the "pure data" feature is now included. See section 6 +of the documentation for a quick introduction to it; see also patches 12 and +14 in the FFT examples. +

+The documentation has been reorganized. The most interesting new features are: +
- some new "tutorial" patches +
- 15 "fft" examples +
- improved help navigation +

+more bug fixes: +
- titles on abstractions no longer saved inside file +
- left-to-right sorting of inlets/outlets now seems to work +
- nt audio setup got confused when driver couldn't do full duplex +
- opening window with audio on is now fixed +
- deleting inlets/outlets deletes connections first (used to crash) +
- 1e20 parsed correctly now +
- osc1~ fixed and optimized +
- resizing arrays with DSP on used to crash; now fixed +
- pasting now adds to the end of the list (used to add to beginning) +
- clicking now selects the most recent object when two or more overlap +
- Pd's "open" and "help" dialogs now maintain separate paths +

+The phasor~ object's "float" method has been REMOVED -- use the right-hand +inlet to set the internal phase. This is so that I can later fix all tilde +objects to convert messages to signals automatically at all signal inputs. + +

+------------------- 0.22 ------------------- +
+bug fixes +
- parsing 1e+006 gave symbol (now float) +
- "." parsed as number, should be symbol +
- change GUI polling loop to TK event dispatch (unix only) +
- improved "tidy up" feature +
- size check added to text boxes (used to crash; still not correct.) +
- occasional bug sending text with CRs to tk +
- binop startup bug +
- key accelerators for creators wrong +
- ftom range to 1500 +
- bug in pack, unpack +
- windows restore bigger than saved +
+
+ +Nt-specific bug fixes: +
- getsockopt for netreceive fails. Just omitted it for NT. +
- put tcl dlls in tcl bin, not pd bin +
--- archive tcl subsystem for easier version updates +
--- fix README accordingly +
- deal with bell sound +
- turn on optimization +
- looked for audio timeout bug but couldn't find it. +

+ +------------------- 0.21 ------------------- + +

+bug fixes: + +

+table size change with DSP on: It used to crash Pd to resize an array +when DSP was turned on. This is now fixed. + +

+deselect all when locking. When you lock a patch the selection is cleared. + +

+unlock when pasting. .. and if you paste into a petch, it's unlocked. + +

+ +lost keyboard events. Version 0.20 lost keyboard events and +forgot window size changes. This should now be fixed. + +
subpatches came up in wrong font size +
dirty flag on window title bar fixed +
improvement to netreceive suggested by Mark Danks +
style notes fleshed out as suggested by Larry Troxler +
fixed Bill Kleinsasser's bug (short and long array in same graph) + +

+new features: + +
phase setting for phasor~ +
fft objects. Also, block~, for specifying block sizes and overlaps for FFTs. +
canvas_makefilename() (used, e.g., by array_read and write) +
"stuff" directory with examples of real Pd applications. + +

+------------------- 0.20 ------------------- + +

+In NT, the 0.19 release turned out not to contain all the files needed to make +TCL run. This problem should now be fixed. + +

+Also, the array_write routine was fixed. + +

+------------------- 0.19 ------------------- + +
+notable new objects: + +
+- vcf~, a bandpass filter with a signal input for center frequency. +
+- delread, delwrite, vd, as in ISPW Max. +
+- various math and midi stuff +
+- catch~, throw~, send~, receive~ for nonlocal signal connections +

+- an experimental facility for array of floats is included. You can make a new +array (from the "put" menu) which will be given a name such as "array1". You +can then send it "read <file>", "write <file>", "resize <N>", and "print" +messages. File reading and writing is in ascii. "resize" changes the size of +the array, and "print" prints its vital signs. You can then use "tabread4~" +to do a 4-point interpolating table lookup, and tabwrite~ to write audio +samples into the table. +

+Numbers now default to floating point, although certain objects like "spigot" +and "metro" still convert their boolean inputs to integers so that 0.5 is +"false." This behavior will probably change later. The "div" and "mod" +objects are introduced for explicit integer division and remainder. +

+Number boxes drag in integer increments, or in hundredths if you hold the +"shift" key down when you click. +

+Pd documents now save their font sizes. The font size is global to an entire +document. New documents come up in the font size Pd was started in (using +the "-font" flag.) If you want to change the font size of an existing +document, use a text editor; the font size is the last argument on the first +line. 8, 10, 12, 14, 16, 18, and 24 are supported. +

+The abbreviations "t," "f," and "i" stand for "trigger,", "float", and "int." +

+Inlets and outlets of subpatches are now sorted correctly; although there is +still a problem deleting inlets/outlets which have connections. +

+The size and screen location of Pd documents is saved correctly. +

+Tilde objects now work in "subpages" although there is no way to send +signals through their inlets and outlets; use throw~/catch~ or send~/receive~. +

+On NT, the default is to open both audio output and input (this used not +to work.) The situation is still shaky; audio seems to hang up sporadically +on my machine; but I seem to have installed my audio driver wrong anyway. +I had to set a huge output FIFO (1/3 sec or so!) to get it to work at all. +You can type "pd -dac", "pd -adc", or "pd -nosound" to get output only, +input only, or no audio at all. +NT's MIDI input and output are supported, but on my machine MIDI output is +flaky. I'm curious how all this will work on other machines... +

+The list of classes is now: +

+ +GENERAL: +field inlet outlet print int float send receive select route pack unpack +trigger spigot moses delay metro line timer makenote stripnote random loadbang +serial get netsend netreceive +

+ +MATH: ++ - * / == != > < >= <= & && | || % +mod div sin cos tan atan atan2 sqrt log exp abs +mtof ftom powtodb rmstodb dbtopow dbtorms +

+ +MIDI: +notein ctlin pgmin bendin touchin polytouchin noteout ctlout pgmout bendout +touchout polytouchout +

+ +SIGNAL: +dac~ adc~ sig~ line~ snapshot~ +~ -~ *~ /~ phasor~ cos~ vcf~ noise~ env~ hip~ +lop~ bp~ biquad~ samphold~ clip~ rsqrt~ sqrt~ wrap~ print~ scope~ tabwrite~ +tabread4~ send~ receive~ catch~ throw~ delwrite~ delread~ vd~ + +

+------------------- 0.18 ------------------- + +
+Release notes now descrie the three platforms Pd runs on: IRIX and +NT (maintained at UCSD) and LINUX, maintained by Guenter Geiger. + +

+menu "close" on a dirty document now checks if you really want to close +without saving (although "quit" will still exit Pd without verification.) + +

+Got rid of "dll" error printout when loading abstractions + +

+------------------- 0.12 - 0.17 ------------------- + +
+got Pd running under NT, although driver problems remain. Gem is also +distributed for both platforms. + +

+------------------- 0.11 ------------------- + +
+Here's a list of all the objects in this release: + +
+general: print int float send receive select pack unpack trigger spigot +
+time handling: delay metro line timer +
+arithmetic: + + - - * * / / == == != != > > < < >= >= <= <= & && | || % +
+midi: notein noteout makenote stripnote +
+other: random get +
+signals: dac~ adc~ sig~ line~ snapshot~ +~ *~ +
+signal oscillators: phasor~ cos~ +
+signal filters: env~ hip~ +
+signal debugging : print~ scope~ +
+
+ +"spigot" replaces "gate" but has the inputs reversed. + +

+------------------- 0.10 ------------------- +
+ +Many bug fixes. This was the first pre-release to be put on the FTP site. + +

+------------------- 0.09 ------------------- + +
set up the "Help" menu +
Bug in DSP sorting fixed +
"Notein" and "noteout" objects +
Comments from the Put menu say "comment" (they were invisible before) +
The scheduler deals better when sound I/O malfunctions + +

+------------------- 0.08 ------------------- + +
metro bug +
scrollbars +
scheduler bug +
text box wraparound at 80 chars. +
fixed boxes to reconnect on retype + +

+------------------- 0.07 ------------------- + +
+- made an adc~ object + +

+------------------- 0.06 ------------------- + +
+- fixed two bugs in DSP sorting +
+- added DSP on/off gui +
+- added lock/unlock and changed the cursor behavior +
+- fixed -font flag to set font pointsize + +

+------------------- 0.05 ------------------- +

+- added scope~, which is just a stopgap until real sound editing comes up. +
+- improved the open panel slightly. +
+- added atoms (int only). +
+- reworked text editing to reside in Pd, not Pd-gui. +
+- included a dbx-debuggable Pd in the distribution. I haven't yet figured + out how to get dbx to work with externs though. + +

+------------------- 0.04 ------------------- +

+fixed "cut" which crashed 0.03 if DSP was running. +added clip~, print~, line~, snapshot~. + + +

+------------------- 0.03 ------------------- +

+"pd dsp 1", "pd dsp 0" messages added. If you edit a patch with DSP on, +PD resorts the DSP network as needed. Unconnected and multiple signal inlets +are allowed. + +

+------------------- 0.02 ------------------- +

+A DSP network mechanism has been added. DSP objects are: +sig~, +~, *~, phasor~, cos~. +

+Loading of externs is provided (although there is no search path mechanism +so the extern has to be in the patch's current directory.) Look in +pd/externs for an example. + +

+ +------------------- 0.01. ------------------- +

+This first release serves mostly to test the "release" mechanism. A Pd +"canvas" object is provided which does both graphing and patch editing. +The editing features apply only to the Max-like part; the graphs have +to be edited into a Pd file via text editor. +

+Four menu items (in the "put" menu) create the four kinds of "patchable" +objects; they can be dragged and connected as in Max; to break a connection, +just click on it (the cursor becomes a turkey to indicate this.) Cut, +paste, and duplicate seem to work, and a "Pd" class offers subwindows. +

+The following max-like objects are included: + + print; + +, *, -, /, ==, !=, >, <, >=, <=, &, |, &&, ||, %; + int, float, pack, unpack, trigger; + delay, metro, timer; + send, receive. +

----------------------------------------- + +

5.2. known bugs

+ +

In the list below, starred items are still things needing attention... + +

*1. Timing of MIDI input/output is very shaky. Audio I/O is primitive, but +there's at least a way to detect errors now for linux and NT. + +

*2. There is no flow control for graphical updates yet; the +real-time process can easily block trying to write too fast to the GUI. + +

3. PD dies if your patch has an infinite loop [fixed in 0.30 release.] + +

*4. If you cut a box which is a "Pd" or abstraction whose subpatch has +items selected, Pd dies. + +

*5. Tables and other drawable items can draw far outside the window; there's +no sanity check, Huge tables (>1000 points) are only partially drawn +(the first 1000 points.) + +

6. There's no way to order force a delread~ to make it read after +a delwrite~ has written. [but see under 3.audio.examples how to do this now.] + +

7. Pd doesn't know to suspend graphics updates when you minimize objects. +Presumably minimization makes things better but it doesn't cut off graphics +computation entirely as it should. [fixed for 0.34] + +

8. If you load a nonexistent extern you get a spurious message, +"consistency check failed: canvas_setargs". [fixed for 0.27 release.] + +

9. Typing backslashes into objects upsets Tk [0.29 should suppress all +backslashes; a real fix might come later.] + +

10. Never type a dollar sign into a comment; you may have trouble +opening your patch afterward... [fixed somewhere around 0.32] + +

*11. You'd better Turn DSP off before you type into a box that currently +holds a "pd" object with tilde objects in the subpatch. + +

*12. In Linux, if you hit control C while Pd is opening MIDI, Pd hangs. + +

*13. In linux, Pd doesn't report audio data-late errors yet. + +

*14. Several objects, notably dac~, adc~, and env~, are incompatible with +uses of block~ or switch~ objects that change block size frmo the default of +64. Using switch~ without reblocking causes no problem. Don't try to +read/write delay lines or use send~/receive~, or throw~/catch~, between +windows with different block sizes. + +

5.3. differences from Max/MSP

+ +

It wasn't anyone's intention to make Pd a Max/MSP clone, but on the +other hand, if there's no reason for a feature to appear differently in +Pd than in Max/MSP, the choices in Pd tend to hew to those in Max/MSP. +Moreover, some effort has been undertaken (but more is needed) to make the +two interoperable. + +

You can use Pd to import and export patches to Max/MSP; just save as +text to a file with extension ".pat", and then open it in Pd. You'll at +least get something. If you stick to common or commonizable features +you can actually develop patches for both platforms. + +

When specific objects exist on one platform and not on the other, it's +often possible to make abstractions to imitate the missing objects, in a +kind of personalized compatibility library. + +

There are, however, differences in semantics you'll want to know about; +a partial list follows. + +

abstraction arguments. +In Pd you can edit instantiations of abstractions and save the result back +to the file of the abstraction. This isn't possible in Max, because the +instantiations are different from the abstraction itself in that "#1", etc., +are replaced by the instantiation arguments. In Pd, these arguments appear +as "$1", etc, and are translated at a slightly later stage of the instantiation +process so that you still see them as "$" variables in the instantiation. + (see Section 2.7. abstractions) + +

In Pd, to make current all instantiations of the +abstraction, either delete and recreate them or close and open the patch; +this is done automatically in Max/MSP. + +

In Pd, if you select "save" while in a subpatch, the parent is saved. In +Max/MSP, if you do this a dialogue box comes up asking if you want to save the +subpatch as a separate file. (if you want to save a subpatch to a file in Pd, +you have to copy and paste the contents to a new document. + +

In Pd, inlets and outlets are ordinary text objects; in Max/MSP they're +"gui" objects from the palette. + +

In Max/MSP, if an object's outlet is connected to several destinations, +corresponding messages are always sent in right-to-left screen order. In +Pd, the messages are sent in the order you made the connections in. In either +case, in situations where you care about the order it's appropriate to use +a "trigger" object to specify. + +

In Pd, there's no "gate"; instead it's "spigot" with the inlets in the +opposite, more natural order. + +

Switching subsets of the DSP patch on and off is done in completely +different ways in Pd and Max/MSP, and block sizes are handled differently as +well. + +

Max offers many "GUI" objects such as sliders, dials, VU meters, piano +keyboards, even "bpatchers." Until version 0.34, the only two in Pd were the +number box and graphical arrays. Starting in version 0.34, Pd incorporates +Thomas Musil's GUI objects: sliders, switches, and so on. (Thanks Thomas!) +Beyond this essential collection of GUI objects, it's unlikely you'll ever find +any commonality between the two. Also, as of 0.34, importing and exporting to +Max doesn't know about the Musil objects; I'll try to get that fixed for 0.35. + +

In Pd there's no "preset" object (I now think it's basically a bad idea) +and you have to use explicit sends and receives to restore values to number +boxes. Then just make a "message" box to re-send the values you want. + +

In Macintosh land, instead of getting tabosc4~ and arrays, you get cycle~ +and buffer~. The only gotcha is that you probably can't draw in buffer~ with +the mouse as you can with arrays, but at least it's possible to +make a patch that copies a "table" into a "buffer~". + +

The "bpatcher" feature in Max has a correlate, "graph on parent" subpatches, +in Pd; however, Pd's version is quite different from Max's. + + + diff --git a/desiredata/doc/2.control.examples/00.INTRO.txt b/desiredata/doc/2.control.examples/00.INTRO.txt new file mode 100644 index 00000000..c799044d --- /dev/null +++ b/desiredata/doc/2.control.examples/00.INTRO.txt @@ -0,0 +1,19 @@ +This series of patches serves as a tutorial for Pd's "control" structure, as +opposed to its audio functions (covered in the next series.) These tutorials +are inspired by Chris Dobrian's Max tutorial patches. + +It's probably best to look at the first section here before going on to the +audio portion, but afterward there's no reason not to browse back and forth +between the two, and even the third series on "fft" based techniques. + +The relationship between "control" and "audio" is described in Pd's HTML +documentation, which is more like a reference manual than an introduction. +Also, you probably will need to look there to get Pd up and running stably so +that you can enjoy the patches here. + +The patches are roughly divided as shown: + +1. objects and connections +2. subpatches, tables, and organization +3. specific techniques. + diff --git a/desiredata/doc/2.control.examples/01.PART1.hello.pd b/desiredata/doc/2.control.examples/01.PART1.hello.pd new file mode 100644 index 00000000..e0a4daf1 --- /dev/null +++ b/desiredata/doc/2.control.examples/01.PART1.hello.pd @@ -0,0 +1,16 @@ +#N canvas 9 21 600 496 12; +#X msg 204 32 hello world; +#X obj 204 105 print; +#X floatatom 321 32 0 0 0; +#X text 215 48 message; +#X text 319 49 atom; +#X text 201 123 object; +#X text 53 150 There are four types of text objects in Pd: message \, atom \, object \, and comment.; +#X text 54 187 Messages respond to mouse clicks by sending their contents to one or more destinations. The usual destination is the "outlet" at the lower left corner of the box.; +#X text 55 239 Click the message box and watch the terminal window Pd was started in. You should see the "hello world" message appear.; +#X text 55 278 Atoms respond to "Dragging" up and down with the mouse \, by changing their contents and sending the result out their outlets. You can also type at an atom after clicking on it \; hit "enter" to output the number or click anywhere else to cancel.; +#X text 52 359 Objects \, like "print" above \, may have all sorts of functions depending on what's typed into them. The "print" object simply prints out every message it receives.; +#X text 53 415 To get help on an object \, right-click it. You should see a "help window" for the object.; +#X text 354 470 updated for release 0.33; +#X connect 0 0 1 0; +#X connect 2 0 1 0; diff --git a/desiredata/doc/2.control.examples/02.editing.pd b/desiredata/doc/2.control.examples/02.editing.pd new file mode 100644 index 00000000..a2442ee8 --- /dev/null +++ b/desiredata/doc/2.control.examples/02.editing.pd @@ -0,0 +1,17 @@ +#N canvas 1 0 581 630 12; +#X msg 195 36 hello world; +#X obj 195 72 print; +#X floatatom 304 36 0 0 0; +#X text 194 15 message; +#X text 304 14 atom; +#X text 255 73 object; +#X text 34 102 When you first open a Pd document like this one \, your cursor will be an arrow. Select "edit mode" in the Edit menu and the cursor will change to the image of a hand. The patch is now in edit mode. You can move any object by dragging it.; +#X text 33 185 Select "Edit mode" again in the Edit menu and you're back to the arrow cursor which acts on objects without moving them.; +#X text 32 373 You can create new objects by duplicating existing ones using the "duplicate" menu item. You can also "cut" and "paste" them. If you duplicate several connected objects the connections will be replicated too.; +#X text 33 237 In Edit mode \, if you click on a message \, object \, or comment \, you can then retype the text. For objects this will create a new object and delete the old one. Pd will try to reconnect the newly created object in the same way as the old one.; +#X text 34 442 Edit mode also lets you make and break connections between objects. Put the "hand" cursor over a line connecting two objects: it turns into an X. Clicking will delete the connection. Hold the cursor over an outlet and it becomes a circle (a patch point). Drag to any box and release \; you will be connected to the nearest inlet.; +#X text 32 320 When you're done changing the contents of the box \, click outside the box to deselect it. This tells Pd to incorporate the new text.; +#X text 328 604 updated for Pd version 0.33; +#X text 35 544 The "put" menu creates new text items of any of the four types. You can also put a "symbol" box \, analogous to a number box but for showing and entering text strings.; +#X connect 0 0 1 0; +#X connect 2 0 1 0; diff --git a/desiredata/doc/2.control.examples/03.connections.pd b/desiredata/doc/2.control.examples/03.connections.pd new file mode 100644 index 00000000..97d32f82 --- /dev/null +++ b/desiredata/doc/2.control.examples/03.connections.pd @@ -0,0 +1,58 @@ +#N canvas 185 28 660 552 12; +#X floatatom 76 400 0 0 0 0 - - -; +#X floatatom 189 401 0 0 0 0 - - -; +#X floatatom 76 307 0 0 0 0 - - -; +#X floatatom 553 161 0 0 0 0 - - -; +#X floatatom 599 162 0 0 0 0 - - -; +#X obj 553 135 +; +#X floatatom 553 105 0 0 0 0 - - -; +#X obj 599 136 +; +#X floatatom 26 109 0 0 0 0 - - -; +#X floatatom 26 17 0 0 0 0 - - -; +#X floatatom 48 41 0 0 0 0 - - -; +#X obj 26 85 +; +#X text 3 64 hot; +#X text 53 66 cold; +#X text 232 105 Here's the downside: drag this--->; +#X text 551 180 good; +#X text 600 181 bad; +#X obj 76 376 *; +#X obj 189 377 -; +#X text 15 400 square; +#X text 229 402 first difference; +#X obj 76 330 trigger float float; +#X text 412 526 updated for Pd version 0.33; +#X text 19 433 Trigger takes any number of "bang" and "float" arguments +(among others) and copies its input to its outlets \, in the requested +forms \, in right-to-left order. Hook it to two inputs without crossing +the wires and you get the expected result. Cross the wires and you +get a memory effect.; +#X text 9 136 In Pd you must sometimes think about what order an object +is going to get its messages in. If an outlet is connected to more +than one inlet it's undefined which inlet will get the cookie first. +I've rigged this example so that the left-hand side box gets its inputs +in the good \, right-to-left order \, so that the hot inlet gets hit +when all the data are good. The "bad adder" happens to receive its +inputs in the wrong order and is perpetually doing its addition before +all the data are in. There's an object that exists solely to allow +you to control message order explicitly:; +#X text 114 16 In Pd \, most objects carry out their functions when +they get messages in their leftmost inlets \, and their other inlets +are for storing values that can modify the next action. Here \, the +"+" object does its thing only when the left-hand input changes.; +#X connect 2 0 21 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 6 0 7 1; +#X connect 6 0 5 1; +#X connect 6 0 5 0; +#X connect 7 0 4 0; +#X connect 9 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 8 0; +#X connect 17 0 0 0; +#X connect 18 0 1 0; +#X connect 21 0 17 0; +#X connect 21 0 18 1; +#X connect 21 1 17 1; +#X connect 21 1 18 0; diff --git a/desiredata/doc/2.control.examples/04.messages.pd b/desiredata/doc/2.control.examples/04.messages.pd new file mode 100644 index 00000000..a56dd92b --- /dev/null +++ b/desiredata/doc/2.control.examples/04.messages.pd @@ -0,0 +1,35 @@ +#N canvas 0 0 591 442 12; +#X floatatom 225 110 0 0 0; +#X floatatom 184 109 0 0 0; +#X msg 184 56 5 6; +#X floatatom 132 108 0 0 0; +#X floatatom 64 105 0 0 0; +#X text 30 21 Most Pd messages are just numbers or short lists of numbers:; +#X msg 64 55 5; +#X obj 64 80 + 9; +#X obj 132 83 +; +#X obj 184 84 unpack; +#X msg 288 55 5; +#X obj 288 107 print; +#X obj 288 81 pack 34 78; +#X msg 132 55 5 6; +#X floatatom 195 328 0 0 0; +#X obj 195 303 +; +#X msg 195 254 1.2 3.4; +#X msg 205 277 5 6; +#X text 36 206 Unlike Max \, in Pd all numbers are floating point. Numbers whose values happen to be integers are displayed without decimal points.; +#X text 31 363 For more on messages \, get help on any message box by right-clicking.; +#X text 329 409 updated for Pd release 0.33; +#X text 34 149 If you send a list to an object with more than one inlet \, the items in the list are spread out over the inlets \, as seen in the 5+6 example above.; +#X connect 2 0 9 0; +#X connect 6 0 7 0; +#X connect 7 0 4 0; +#X connect 8 0 3 0; +#X connect 9 0 1 0; +#X connect 9 1 0 0; +#X connect 10 0 12 0; +#X connect 12 0 11 0; +#X connect 13 0 8 0; +#X connect 15 0 14 0; +#X connect 16 0 15 0; +#X connect 17 0 15 0; diff --git a/desiredata/doc/2.control.examples/05.counter.pd b/desiredata/doc/2.control.examples/05.counter.pd new file mode 100644 index 00000000..14c48dea --- /dev/null +++ b/desiredata/doc/2.control.examples/05.counter.pd @@ -0,0 +1,45 @@ +#N canvas 0 0 685 496 12; +#X floatatom 107 424 0 0 0; +#X msg 53 344 bang; +#X obj 107 399 + 1; +#X obj 376 262 + 1; +#X floatatom 152 197 0 0 0; +#X floatatom 108 245 0 0 0; +#X msg 108 196 bang; +#X floatatom 169 107 0 0 0; +#X msg 112 58 bang; +#X obj 169 82 + 1; +#X text 31 21 Here's a simple counter. Click repeatedly on the "bang +message to see it:; +#X text 422 263 to its cold inlet.; +#X text 25 284 The incremented value is stored for the next "bang" +to spit out.; +#X text 28 322 Here's a timed counter. Hit the "bang" to start it... +; +#X obj 53 373 metro 500; +#X msg 99 344 stop; +#X obj 112 83 float; +#X text 28 132 The "float" box is a storage element holding one floating-point +number. The cold inlet (i.e. \, the one on the right) stores numbers. +Sending the message "bang" to the hot inlet gets the number back out: +; +#X obj 108 221 float; +#X obj 53 399 float; +#X text 25 263 Float's outlet above is connected via; +#X text 384 462 updated for Pd version 0.34; +#X text 142 373 <-- new object: metronome. The "500" means every 500 +milliseconds--i.e. \, twice a second.; +#X connect 1 0 14 0; +#X connect 2 0 0 0; +#X connect 2 0 19 1; +#X connect 4 0 18 1; +#X connect 6 0 18 0; +#X connect 8 0 16 0; +#X connect 9 0 7 0; +#X connect 9 0 16 1; +#X connect 14 0 19 0; +#X connect 15 0 14 0; +#X connect 15 0 14 0; +#X connect 16 0 9 0; +#X connect 18 0 5 0; +#X connect 19 0 2 0; diff --git a/desiredata/doc/2.control.examples/06.more.counters.pd b/desiredata/doc/2.control.examples/06.more.counters.pd new file mode 100644 index 00000000..e0ef3c40 --- /dev/null +++ b/desiredata/doc/2.control.examples/06.more.counters.pd @@ -0,0 +1,55 @@ +#N canvas 8 0 659 487 12; +#X floatatom 147 177 0 0 0; +#X obj 147 151 + 1; +#X msg 147 47 bang; +#X obj 147 99 metro 500; +#X msg 56 105 stop; +#X obj 147 125 float; +#X obj 147 73 trigger bang bang; +#X msg 261 105 0; +#X obj 56 79 select 10; +#X text 305 102 first set value to zero; +#X text 304 73 initialization is in two steps; +#X text 305 121 (before starting the metronome); +#X text 9 128 conditionally; +#X text 9 145 stop the; +#X text 10 159 metronome; +#X text 184 46 <--- click here to start; +#X floatatom 85 289 0 0 0; +#X obj 85 315 >= 0; +#X obj 85 341 select 0 1; +#X obj 85 393 float; +#X floatatom 139 420 0 0 0; +#X msg 119 367 bang; +#X obj 139 394 + 1; +#X msg 85 367 -1; +#X text 131 313 <-- are we nonnegative? (1 if true \, 0 if false); +#X text 180 340 <-- selectively bang the first or second outlet; +#X text 167 363 <-- as a result either clear or increment the counter +; +#X text 32 11 Here's a counter that counts from 1 to 10:; +#X text 392 452 updated for Pd version 0.34; +#X text 33 200 We're using one new object \, "select \, " which outputs +a bang when it gets a matching value (10). This is useful for doing +conditional computations \, such as this one which counts while its +input is 0 or positive but clears when negative:; +#X connect 1 0 0 0; +#X connect 1 0 5 1; +#X connect 1 0 8 0; +#X connect 2 0 6 0; +#X connect 3 0 5 0; +#X connect 4 0 3 0; +#X connect 5 0 1 0; +#X connect 6 0 3 0; +#X connect 6 1 7 0; +#X connect 7 0 5 1; +#X connect 8 0 4 0; +#X connect 16 0 17 0; +#X connect 17 0 18 0; +#X connect 18 0 23 0; +#X connect 18 1 21 0; +#X connect 19 0 22 0; +#X connect 21 0 19 0; +#X connect 22 0 19 1; +#X connect 22 0 20 0; +#X connect 23 0 19 0; diff --git a/desiredata/doc/2.control.examples/07.time.pd b/desiredata/doc/2.control.examples/07.time.pd new file mode 100644 index 00000000..69398bd9 --- /dev/null +++ b/desiredata/doc/2.control.examples/07.time.pd @@ -0,0 +1,39 @@ +#N canvas 0 0 724 474 12; +#X text 34 13 Besides the metronome \, there are three objects for +dealing with time:; +#X obj 64 117 print; +#X msg 64 59 bang; +#X msg 110 61 stop; +#X obj 64 89 delay 2000; +#X text 161 44 The delay objects sechedules an event for a future time +expressed in milliseconds. Unlike in Max \, time values need not be +integers. If a delay has been scheduled and you "bang" it again \, +it is rescheduled (the previously scheduled output is cancelled.); +#X msg 76 190 bang; +#X obj 76 237 timer; +#X text 160 117 The right inlet can be used to set the time value without +scheduling any output.; +#X text 35 156 The timer \, shown below \, measures the time elapsed +between its left and right inlets:; +#X obj 106 212 delay 123.45; +#X floatatom 76 262 0 0 0; +#X text 29 287 Note that all time calculations are idealized \; they +do not show the effects of computation time or OS latency. This way +you can write deterministic algorithms dealing with time passage.; +#X obj 74 385 pipe 2000; +#X floatatom 74 358 0 0 0; +#X floatatom 74 411 0 0 0; +#X text 165 359 The pipe object allocates memory dynamically in order +to schedule any number of delayed events. The events may hold any collection +of data (as usual \, for more details you can consult the help window.) +; +#X text 442 440 updated for Pd version 0.34; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 1 0; +#X connect 6 0 7 0; +#X connect 6 0 10 0; +#X connect 7 0 11 0; +#X connect 10 0 7 1; +#X connect 13 0 15 0; +#X connect 14 0 13 0; diff --git a/desiredata/doc/2.control.examples/08.depthfirst.pd b/desiredata/doc/2.control.examples/08.depthfirst.pd new file mode 100644 index 00000000..8820d226 --- /dev/null +++ b/desiredata/doc/2.control.examples/08.depthfirst.pd @@ -0,0 +1,48 @@ +#N canvas 144 162 632 551 12; +#X msg 64 51 1; +#X obj 89 150 + 1; +#X obj 209 187 print x1; +#X obj 64 209 print x3; +#X obj 114 122 print x2; +#X obj 209 100 + 1; +#X obj 209 129 + 1; +#X obj 209 158 + 1; +#X obj 64 80 t f f f f; +#X obj 89 179 print x2; +#X text 34 13 In Pd \, message passing is depth first \, so that in +this patch:; +#X text 104 51 <-- click here; +#X text 17 243 ... you get "x1" first \, notwidthstanding the fact +that "x2" and "x3" appear to be closer to the source. This means that +you shouldn't do this:; +#X msg 76 304 1; +#X text 116 304 <-- maybe you shouldn't click here; +#X obj 115 334 + 1; +#X obj 76 333 f; +#X floatatom 76 365 0 0 0; +#X text 377 520 updated for Pd version 0.34; +#X text 35 393 ... because the "depth" is infinite. The counters you've +seen always have the message chain terminated somewhere in a cold inlet: +; +#X msg 75 453 1; +#X obj 114 483 + 1; +#X obj 75 482 f; +#X floatatom 75 514 0 0 0; +#X text 115 453 <-- better; +#X connect 0 0 8 0; +#X connect 1 0 9 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 2 0; +#X connect 8 0 3 0; +#X connect 8 1 1 0; +#X connect 8 2 4 0; +#X connect 8 3 5 0; +#X connect 13 0 16 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 16 0 15 0; +#X connect 20 0 22 0; +#X connect 21 0 22 1; +#X connect 22 0 23 0; +#X connect 22 0 21 0; diff --git a/desiredata/doc/2.control.examples/09.send_receive.pd b/desiredata/doc/2.control.examples/09.send_receive.pd new file mode 100644 index 00000000..374a74b5 --- /dev/null +++ b/desiredata/doc/2.control.examples/09.send_receive.pd @@ -0,0 +1,35 @@ +#N canvas 136 31 738 479 12; +#X floatatom 88 199 0 0 0; +#X obj 88 172 receive crackers; +#X floatatom 248 204 0 0 0; +#X obj 248 177 receive pickles; +#X obj 88 145 send crackers; +#X obj 250 139 send pickles; +#X obj 389 138 send pickles; +#X floatatom 392 203 0 0 0; +#X obj 392 176 receive pickles; +#X msg 51 306 \; pickles 99 \; crackers 56; +#X floatatom 88 118 0 0 0; +#X floatatom 250 112 0 0 0; +#X floatatom 389 111 0 0 0; +#X obj 371 404 r crackers; +#X obj 371 377 s crackers; +#X text 39 392 send and receive can be abbreviated:; +#X text 48 245 You can use the semicolon feature of message boxes to +address receives \, too. This is useful if you want to do a whole list +of things:; +#X text 166 305 The transaction takes place in zero time---i.e. \, +if you tried to use "timer" to measure the time delay between the two +\, you would get zero.; +#X text 459 447 updated for Pd version 0.34; +#X text 51 6 The send and receive objects allow you to make non-local +connections. These work globally--you can use them to make two different +patches intercommunicate if you wish. Any message a "send" gets appears +at the output of every receive of the same name. There can be any number +of sends and receives sharing the same name:; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 8 0 7 0; +#X connect 10 0 4 0; +#X connect 11 0 5 0; +#X connect 12 0 6 0; diff --git a/desiredata/doc/2.control.examples/10.more.messages.pd b/desiredata/doc/2.control.examples/10.more.messages.pd new file mode 100644 index 00000000..7f0c8539 --- /dev/null +++ b/desiredata/doc/2.control.examples/10.more.messages.pd @@ -0,0 +1,56 @@ +#N canvas 91 95 675 539 12; +#X obj 211 341 print; +#X msg 52 89 3 \, 4 \, 5; +#X msg 44 62 3 4 5; +#X msg 57 313 3 \$1 5; +#X floatatom 57 286 4 0 0; +#X msg 211 315 \$2 \$1 5; +#X msg 211 290 45 67; +#X msg 289 290 45 67; +#X floatatom 28 425 4 0 0; +#X floatatom 76 425 4 0 0; +#X floatatom 332 179 4 0 0; +#X floatatom 186 182 4 0 0; +#X obj 186 155 receive number9; +#X obj 332 155 receive 9bis; +#X obj 44 178 print; +#X text 27 5 In addition to using semicolons to separate messages \, +you can use commas \, which continue a stream of messages to the same +destination. Thus:; +#X msg 65 116 3 \; number9 5 \; 9bis 45; +#X text 126 89 <-- three separate messages; +#X text 109 58 <-- one message: the list \, "3 4 5".; +#X text 167 114 <-- three separate messages \, with three destinations. +; +#X text 406 511 updated for Pd version 0.34; +#X msg 289 315 \; number9 \$1 \; 9bis \$2; +#X text 9 209 You can use "$1" \, etc. \, as variables in messages. +Send the message box a list whose elements supply the values. A number +is just a list with one element.; +#X obj 57 339 print; +#X text 51 265 one variable:; +#X text 216 263 two variables:; +#X text 1 367 But to really exploit the possibilities using multiple +variables \, you will need the "pack" object to get two or more values +into the same message:; +#X obj 28 507 print; +#X obj 28 455 pack 0 0 0; +#X floatatom 124 425 4 0 0; +#X msg 28 481 cis \$1 \, boom \$2 \, bah \$3; +#X text 124 455 <-- creation arguments to "pack" set the number of +inlets.; +#X connect 1 0 14 0; +#X connect 2 0 14 0; +#X connect 3 0 23 0; +#X connect 4 0 3 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 7 0 21 0; +#X connect 8 0 28 0; +#X connect 9 0 28 1; +#X connect 12 0 11 0; +#X connect 13 0 10 0; +#X connect 16 0 14 0; +#X connect 28 0 30 0; +#X connect 29 0 28 2; +#X connect 30 0 27 0; diff --git a/desiredata/doc/2.control.examples/11.review.pd b/desiredata/doc/2.control.examples/11.review.pd new file mode 100644 index 00000000..9e5b6c95 --- /dev/null +++ b/desiredata/doc/2.control.examples/11.review.pd @@ -0,0 +1,42 @@ +#N canvas 255 248 675 539 12; +#X text 406 511 updated for Pd version 0.34; +#X obj 39 232 receive; +#X obj 39 203 send; +#X obj 39 289 pack; +#X obj 111 233 r; +#X obj 82 203 s; +#X obj 40 348 timer; +#X obj 40 60 float; +#X obj 39 175 select; +#X obj 40 89 +; +#X obj 40 117 >=; +#X obj 39 146 print; +#X obj 39 260 trigger; +#X obj 95 61 f; +#X obj 100 176 sel; +#X obj 111 259 t; +#X obj 39 318 unpack; +#X obj 40 435 pipe; +#X obj 40 377 delay; +#X obj 40 406 metro; +#X text 20 8 So far we've seen the following objects \, some of which +have abbreviations. Right click on any one to get reference documentation: +; +#X text 150 205 wireless message send; +#X text 151 229 wireless message receive; +#X text 145 175 test for two equal numbers; +#X text 151 258 control message order and format; +#X text 148 293 combine atoms (e.g. \, numbers) into a list; +#X text 146 319 take a list apart into atoms; +#X text 146 146 printout; +#X text 147 90 arithmetic; +#X text 75 89 (etc.); +#X text 74 117 (etc.); +#X text 145 117 comparison; +#X text 145 60 store a number; +#X text 145 348 measure elapsed time; +#X text 145 379 pass a message after delay; +#X text 145 437 multiple delay; +#X text 143 409 repeated message; +#X text 38 473 There are many others... you can see a complete list +in INTRO.txt in the reference patches (../5.reference).; diff --git a/desiredata/doc/2.control.examples/12.PART2.subpatch.pd b/desiredata/doc/2.control.examples/12.PART2.subpatch.pd new file mode 100644 index 00000000..5bd40306 --- /dev/null +++ b/desiredata/doc/2.control.examples/12.PART2.subpatch.pd @@ -0,0 +1,72 @@ +#N canvas 84 47 648 623 12; +#X msg 29 318 bang; +#X floatatom 432 341 0 0 0; +#X text 32 14 You can nest entire windows inside Pd boxes (and so on +\, as deep as you wish.) There are two different ways to do it. First +\, if you just want to add a room to the house \, so to speak \, type +; +#N canvas 344 151 422 119 sample-subpatch 1; +#X text 39 43 this is a subpatch of the main patch.; +#X restore 29 85 pd sample-subpatch; +#X text 201 85 <-- you can give the window a name as an argument; +#N canvas 0 0 654 340 eager-adder 0; +#X obj 62 73 inlet; +#X obj 118 73 inlet; +#X obj 62 188 outlet; +#X obj 118 101 t b f; +#X obj 62 156 +; +#X text 197 23 this is a sample subpatch which maintains the sum of +two inputs \, doing the computation when either input changes. IF it's +the left input \, the "+" object takes care if it \; if the right \, +the "trigger" object first gives the "+" the new value \, then "bangs" +the right inlet to make "+" do the computation.; +#X text 55 232 Aside: this shows why \, in Pd and Max \, objects such +as "+" only trigger on their left inlets: it's easy to build up from +there \, but if more than one inlet were "hot" \, you wouldn't be able +to change both of them without firing the calculation twice.; +#X text 197 112 Because of the two inlets and the one outlet \, the +containing box (int eh parent patch) has two inlets and one outlet. +They respect the left-to-right order of the inlet and outlet objects +in the subpatch.; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 4 1; +#X connect 4 0 2 0; +#X restore 135 185 pd eager-adder; +#X floatatom 135 158 0 0 0; +#X floatatom 256 158 0 0 0; +#X floatatom 135 213 0 0 0; +#X text 26 235 There is also a facility for making many copies of a +patch which track any changes you make in the original. The subpatches +are called abstractions. For example \, here's a simple abstraction +that sends a number to a "receive" on command:; +#X obj 29 342 sendnumber 45 cookies; +#X msg 226 314 bang; +#X obj 226 341 sendnumber 67 pretzels; +#X floatatom 519 341 0 0 0; +#X text 27 553 note that "$1" \, etc \, has a different meaning in +object boxes (open one of the "sendnumber" abstractions for comments.) +; +#X text 26 470 If you change one copy of an abstraction the change +isn't automatically made on any other copies. You must keep track \, +save the changes \, and cause Pd to reload the other copies (for example +\, by closing and reopening the containing patch.); +#X obj 432 314 r cookies; +#X obj 519 314 r pretzels; +#X text 31 107 If you click on the box (in run mode) the subwindow +appears. Click on the one below to see how you give a subpatch inlets +and outlets.; +#X text 332 594 updated for Pd version 0.34; +#X text 27 372 There is a separate file in this directory named "sendnumber.pd" +which is loaded every time you type "sendnumber" in a box. Click on +a "sendnumber" box above to see it. You can make changes in the subpatch +and save them. The changes will be saved back to sendnumber.pd and +not as part of this (containing) patch.; +#X connect 0 0 10 0; +#X connect 5 0 8 0; +#X connect 6 0 5 0; +#X connect 7 0 5 1; +#X connect 11 0 12 0; +#X connect 16 0 1 0; +#X connect 17 0 13 0; diff --git a/desiredata/doc/2.control.examples/13.locality.pd b/desiredata/doc/2.control.examples/13.locality.pd new file mode 100644 index 00000000..6203ad98 --- /dev/null +++ b/desiredata/doc/2.control.examples/13.locality.pd @@ -0,0 +1,27 @@ +#N canvas 24 192 606 297 12; +#X floatatom 38 223 0 0 0; +#X floatatom 191 221 0 0 0; +#X text 356 264 updated for Pd version 0.34; +#X text 32 14 You can use dollarsigns in abstractions to get local +sends and receives as shown here.; +#X obj 29 85 dollarsign one; +#X obj 167 86 dollarsign two; +#X obj 38 196 r one-a; +#X obj 191 194 r two-a; +#X floatatom 110 225 0 0 0; +#X floatatom 264 220 0 0 0; +#X obj 110 197 r one-b; +#X obj 264 191 r two-b; +#X text 26 112 Open both copies to see what's happening...; +#X floatatom 29 59 0 0 0; +#X floatatom 124 58 0 0 0; +#X floatatom 167 60 0 0 0; +#X floatatom 264 58 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 1 0; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 13 0 4 0; +#X connect 14 0 4 1; +#X connect 15 0 5 0; +#X connect 16 0 5 1; diff --git a/desiredata/doc/2.control.examples/14.dollarsigns.pd b/desiredata/doc/2.control.examples/14.dollarsigns.pd new file mode 100644 index 00000000..c4b6eee3 --- /dev/null +++ b/desiredata/doc/2.control.examples/14.dollarsigns.pd @@ -0,0 +1,5 @@ +#N canvas 12 363 561 155 12; +#X text 303 114 updated for Pd version 0.34; +#X obj 34 68 dollarsign2 three 4; +#X text 32 14 An abstraction's creation arguments may be either numbers +or symbols. Gory details are inside:; diff --git a/desiredata/doc/2.control.examples/15.array.pd b/desiredata/doc/2.control.examples/15.array.pd new file mode 100644 index 00000000..da054b1e --- /dev/null +++ b/desiredata/doc/2.control.examples/15.array.pd @@ -0,0 +1,70 @@ +#N canvas 268 28 1030 744 12; +#X text 204 19 ARRAYS; +#N canvas 0 0 450 300 graph1 0; +#X array array99 100 float 0; +#X coords 0 1 99 -1 400 300 1; +#X restore 614 49 graph; +#X msg 179 325 \; array99 resize \$1; +#X floatatom 179 292 0 0 0; +#X floatatom 21 260 0 0 0; +#X obj 21 294 / 100; +#X msg 21 324 \; array99 const \$1; +#X text 22 233 You can send messages to an array object:; +#X msg 341 325 \; array99 print; +#X text 64 262 <-- set to a constant value; +#X text 221 291 resize; +#X text 342 286 print size; +#X text 22 487 read a text file; +#X text 23 558 write a text file; +#X text 271 559 write a WAV format soundfile; +#X obj 104 714 tabread; +#X obj 255 714 tabwrite; +#X text 20 665 Objects are provided for reading and writing the contents +of arrays via control messages:; +#X obj 602 654 tabread4~; +#X obj 602 679 tabwrite~; +#X obj 695 654 tabreceive~; +#X text 593 601 ...and audio signals:; +#X obj 695 630 tabsend~; +#X msg 381 400 \; array99 normalize; +#X msg 382 442 \; array99 normalize 0.5; +#X text 375 378 normalize to 1 or otherwise; +#X obj 266 537 soundfiler; +#X obj 812 631 tabosc4~; +#X msg 19 402 \; array99 sinesum 64 0.2 0.2 0.2 0.2; +#X msg 19 444 \; array99 cosinesum 64 0.2 0.2 0.2 0.2; +#X text 23 378 Fourier synthesis (resizes table); +#X text 257 484 read a soundfile; +#X text 735 698 last updated for release 0.34; +#X obj 175 715 tabread4; +#X obj 602 628 tabread~; +#X msg 267 511 read ../sound/voice2.wav array99; +#X text 19 47 Arrays in Pd provide a unified way to deal with lists +of numbers \, treating them as either audio samples or for "control" +uses. To make one \, select "array" on the "new" menu. Dialogs appear +to help you choose the name \, number of elements \, and various flags. +; +#X text 17 134 You can also change the array size using the "resize" +message shown below. Arrays live in graphs and graphs may hold more +than one array--however \, graphs containing more than one array won't +know how to readjust themselves automatically when the arrays are resized. +; +#X msg 15 507 \; array99 read 15.file.txt; +#X obj 26 581 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 26 600 savepanel; +#X msg 26 623 \; array99 write \$1; +#X obj 270 577 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 270 596 savepanel; +#X obj 270 642 soundfiler; +#X msg 270 619 write \$1 array99; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 35 0 26 0; +#X connect 39 0 40 0; +#X connect 40 0 41 0; +#X connect 42 0 43 0; +#X connect 43 0 45 0; +#X connect 45 0 44 0; diff --git a/desiredata/doc/2.control.examples/15.file.txt b/desiredata/doc/2.control.examples/15.file.txt new file mode 100644 index 00000000..6fc963dd --- /dev/null +++ b/desiredata/doc/2.control.examples/15.file.txt @@ -0,0 +1,2 @@ +0.3 +-0.6 -0.2 0.8 0 diff --git a/desiredata/doc/2.control.examples/16.more.arrays.pd b/desiredata/doc/2.control.examples/16.more.arrays.pd new file mode 100644 index 00000000..cf9eacc1 --- /dev/null +++ b/desiredata/doc/2.control.examples/16.more.arrays.pd @@ -0,0 +1,23 @@ +#N canvas 19 83 830 601 12; +#X graph graph1 0 -1 5 1 569 304 769 154; +#X array array99 5 float; +#X array array98 7 float; +#X pop; +#X text 135 18 MORE ON ARRAYS; +#X msg 17 229 \; array99 rename george; +#X msg 221 229 \; george rename array99; +#X msg 317 166 \; array99 3 -0.5 0.5; +#X text 17 207 renaming an array:; +#X text 16 276 setting the bounds rectangle:; +#X msg 18 296 \; array99 bounds 0 -2 10 2; +#X msg 245 294 \; array99 bounds 0 -1 5 1; +#X msg 19 395 \; array99 xticks 0 1 1; +#X msg 212 394 \; array99 yticks 0 0.1 5; +#X text 15 342 adding x and y labels: give a point to put a tick \, the interval between ticks \, and the number of ticks overall per large tick.; +#X msg 15 472 \; array99 xlabel -1.1 0 1 2 3 4 5; +#X text 12 436 adding labels. Give a y value and a bunch of x values or vice versa:; +#X msg 17 166 \; array98 0 -1 1 -1 1 -1 1 -1 1 -1; +#X msg 305 472 \; array99 ylabel 5.15 -1 0 1; +#X text 556 575 last updated for release 0.33; +#X text 10 39 Arrays have methods to set their values explicitly \; to set their "bounds" rectangles \, to rename them (but if you have two with the same name this won't necessarily do what you want) and to add markings. To set values by message \, send a list whise first element gives the index to start at. The second example sets two values starting at index three. Indices count up from zero.; +#X text 11 522 You can also change x and y range and size in the "properties" dialog. Note that information about size and ranges is saved \, but ticks \, labels \, and the actual data are lost between Pd sessions.; diff --git a/desiredata/doc/2.control.examples/17.PART3.midi.pd b/desiredata/doc/2.control.examples/17.PART3.midi.pd new file mode 100644 index 00000000..b2467cd9 --- /dev/null +++ b/desiredata/doc/2.control.examples/17.PART3.midi.pd @@ -0,0 +1,35 @@ +#N canvas 47 52 517 445 12; +#X floatatom 108 89 0 0 0; +#X floatatom 72 89 0 0 0; +#X obj 36 62 notein; +#X floatatom 36 88 0 0 0; +#X floatatom 228 91 0 0 0; +#X floatatom 192 91 0 0 0; +#X floatatom 156 90 0 0 0; +#X obj 156 64 ctlin; +#X floatatom 319 90 0 0 0; +#X floatatom 283 89 0 0 0; +#X obj 283 63 bendin; +#X floatatom 329 128 0 0 0; +#X floatatom 285 127 0 0 0; +#X obj 285 157 bendout; +#X text 23 18 Pd offers input and output objects for MIDI:; +#X text 358 154 ... ad nauseam.; +#X text 254 417 updated for Pd version 0.34; +#X obj 39 321 midiout; +#X obj 244 368 sysexin; +#X msg 39 291 240 \, 45 \, 93 \, 3 \, 65 \, 1 \, 2 \, 3 \, 4 \, 247 +; +#X text 32 252 You can format your own SYSEX messages as shown:; +#X text 28 366 and receive SYSEX via:; +#X connect 2 0 3 0; +#X connect 2 1 1 0; +#X connect 2 2 0 0; +#X connect 7 0 6 0; +#X connect 7 1 5 0; +#X connect 7 2 4 0; +#X connect 10 0 9 0; +#X connect 10 1 8 0; +#X connect 11 0 13 1; +#X connect 12 0 13 0; +#X connect 19 0 17 0; diff --git a/desiredata/doc/2.control.examples/18.conditional.pd b/desiredata/doc/2.control.examples/18.conditional.pd new file mode 100644 index 00000000..6bde3747 --- /dev/null +++ b/desiredata/doc/2.control.examples/18.conditional.pd @@ -0,0 +1,59 @@ +#N canvas 538 239 665 516 12; +#X text 395 489 updated for Pd version 0.26; +#X obj 87 148 select 1 2; +#X floatatom 87 120 0 0 0; +#X obj 87 214 print select-1; +#X obj 119 194 print select-2; +#X obj 152 171 print select-3; +#X floatatom 313 122 0 0 0; +#X obj 313 155 pack; +#X obj 313 182 route 1 2; +#X obj 353 131 t b f; +#X floatatom 353 107 0 0 0; +#X obj 371 210 unpack; +#X floatatom 313 210 0 0 0; +#X floatatom 342 210 0 0 0; +#X floatatom 371 233 0 0 0; +#X floatatom 409 234 0 0 0; +#X text 30 20 Pd provides at least four objects for doing conditioonal +computations. The "select" object tests its input against its argumt(s) +\, and outputs "bang" when they match. The "route" object works similarly +but also copies data. In other wors \, "route" takes a list \, tests +its first element \, and conditionally passes on the rest of the list. +; +#X text 56 262 You also get "spigot" which turns a flow of messages +on and off (like the Gate object in Max \, but with the inputs reversed): +; +#X floatatom 125 316 0 0 0; +#X obj 125 341 spigot; +#X floatatom 162 316 0 0 0; +#X floatatom 125 365 0 0 0; +#X text 192 317 <-- nonzero to open; +#X text 157 365 if open \, messages coming in at left are sent to output. +; +#X text 55 396 And finally \, "moses" sends numbers to the left if +they're less than the argument \, right otherwise:; +#X floatatom 125 427 0 0 0; +#X floatatom 125 476 0 0 0; +#X obj 125 452 moses 5; +#X floatatom 169 476 0 0 0; +#X connect 1 0 3 0; +#X connect 1 1 4 0; +#X connect 1 2 5 0; +#X connect 2 0 1 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 12 0; +#X connect 8 1 13 0; +#X connect 8 2 11 0; +#X connect 9 0 7 0; +#X connect 9 1 7 1; +#X connect 10 0 9 0; +#X connect 11 0 14 0; +#X connect 11 1 15 0; +#X connect 18 0 19 0; +#X connect 19 0 21 0; +#X connect 20 0 19 1; +#X connect 25 0 27 0; +#X connect 27 0 26 0; +#X connect 27 1 28 0; diff --git a/desiredata/doc/2.control.examples/19.random.pd b/desiredata/doc/2.control.examples/19.random.pd new file mode 100644 index 00000000..928be29f --- /dev/null +++ b/desiredata/doc/2.control.examples/19.random.pd @@ -0,0 +1,39 @@ +#N canvas 47 52 722 449 12; +#X text 460 422 updated for Pd version 0.26; +#X text 35 28 Use the "random" object to make pseudo-random integers. +To get continuously variable random numbers \, make a random number +in a large range and divide:; +#X obj 103 121 random 5; +#X msg 103 95 bang; +#X floatatom 103 147 0 0 0; +#X text 137 147 outputs from 0 to 4; +#X msg 337 87 bang; +#X floatatom 336 165 0 0 0; +#X obj 337 113 random 1000; +#X obj 336 141 / 1000; +#X text 402 166 from 0 to 0.999; +#X obj 71 324 random 5; +#X msg 162 255 bang; +#X floatatom 71 350 0 0 0; +#X obj 71 244 loadbang; +#X obj 71 274 timer; +#X text 204 255 <-- click to seed; +#X msg 71 299 seed \$1; +#X msg 163 299 bang; +#X text 204 300 <-- click to get random numbers; +#X text 24 382 If you give two randoms the same seed they give the +same sequence. If you never seed them \, you'll get different sequences +out of each one.; +#X text 34 197 If you don't want the same behavior every time you run +the patch \, use the time from load to first click as a seed:; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 6 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 11 0 13 0; +#X connect 12 0 15 1; +#X connect 14 0 15 0; +#X connect 15 0 17 0; +#X connect 17 0 11 0; +#X connect 18 0 11 0; diff --git a/desiredata/doc/2.control.examples/20.weighted-random.pd b/desiredata/doc/2.control.examples/20.weighted-random.pd new file mode 100644 index 00000000..ed964a06 --- /dev/null +++ b/desiredata/doc/2.control.examples/20.weighted-random.pd @@ -0,0 +1,44 @@ +#N canvas 161 46 660 441 12; +#X msg 103 95 bang; +#X text 389 414 updated for Pd version 0.35; +#X text 44 19 You can generate weighted random numbers from uniformly +distributed ones. If you just want two possible outcomes with a varying +probability for each one \, you can do as shown:; +#X obj 103 121 random 100; +#X obj 102 174 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 169 174 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 205 148 3 0 100; +#X text 250 148 <-- change probablilty; +#X obj 103 149 moses 80; +#X text 152 93 <-- click to test; +#X text 61 219 This outputs a number at left 80% of the time \, otherwise +at right \, unless you override the "80" using the number box. You +may extend this to more than two possible outcomes \, for instance +like this:; +#X msg 106 305 bang; +#X obj 106 331 random 100; +#X obj 105 384 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 195 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 155 303 <-- click to test; +#X obj 106 359 moses 10; +#X obj 196 360 moses 30; +#X obj 263 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 103 409 10%; +#X text 193 410 20%; +#X text 265 409 70%; +#X connect 0 0 3 0; +#X connect 3 0 8 0; +#X connect 6 0 8 1; +#X connect 8 0 4 0; +#X connect 8 1 5 0; +#X connect 11 0 12 0; +#X connect 12 0 16 0; +#X connect 16 0 13 0; +#X connect 16 1 17 0; +#X connect 17 0 14 0; +#X connect 17 1 18 0; diff --git a/desiredata/doc/2.control.examples/21.markov.chain.pd b/desiredata/doc/2.control.examples/21.markov.chain.pd new file mode 100644 index 00000000..36ca0db8 --- /dev/null +++ b/desiredata/doc/2.control.examples/21.markov.chain.pd @@ -0,0 +1,105 @@ +#N canvas 296 90 662 442 12; +#X obj 84 251 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 81 336 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 162 335 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 199 337 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X msg 81 358 1; +#X msg 162 360 2; +#X msg 199 361 3; +#X obj 81 386 s state; +#X obj 66 173 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 105 164 r state; +#X obj 83 225 sel 1 2 3; +#X obj 255 253 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 252 338 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 334 340 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 373 343 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X msg 252 361 1; +#X msg 329 366 2; +#X msg 373 367 3; +#X obj 252 394 s state; +#X obj 419 254 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 419 339 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 499 338 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X obj 538 341 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1 +-1; +#X msg 419 362 1; +#X msg 499 363 2; +#X msg 538 364 3; +#X obj 418 395 s state; +#X msg 236 186 \; state 1; +#X obj 83 199 f 1; +#X obj 84 279 random 100; +#X obj 83 308 moses 30; +#X obj 162 309 moses 60; +#X obj 255 280 random 100; +#X obj 255 310 moses 10; +#X obj 334 311 moses 60; +#X obj 419 281 random 100; +#X obj 419 310 moses 70; +#X obj 499 310 moses 80; +#X floatatom 134 188 3 0 0; +#X text 236 166 reset; +#X text 49 152 STEP; +#X text 34 20 Here is how to construct a simple \, three-valued Markov +chain using "random." Each time you click on "step" the previous output +("state") determines which of three random networks to invoke \, each +having a different probability distribution for the next value of "state." +For instance if the state was 3 \, the next state will be 1 70% of +the time \, state 2 10% \, and state 3 20%.; +#X text 408 422 updated for Pd version 0.35; +#X connect 0 0 29 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 6 0; +#X connect 4 0 7 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; +#X connect 8 0 28 0; +#X connect 9 0 28 1; +#X connect 9 0 38 0; +#X connect 10 0 0 0; +#X connect 10 1 11 0; +#X connect 10 2 19 0; +#X connect 11 0 32 0; +#X connect 12 0 15 0; +#X connect 13 0 16 0; +#X connect 14 0 17 0; +#X connect 15 0 18 0; +#X connect 16 0 18 0; +#X connect 17 0 18 0; +#X connect 19 0 35 0; +#X connect 20 0 23 0; +#X connect 21 0 24 0; +#X connect 22 0 25 0; +#X connect 23 0 26 0; +#X connect 24 0 26 0; +#X connect 25 0 26 0; +#X connect 28 0 10 0; +#X connect 29 0 30 0; +#X connect 30 0 1 0; +#X connect 30 1 31 0; +#X connect 31 0 2 0; +#X connect 31 1 3 0; +#X connect 32 0 33 0; +#X connect 33 0 12 0; +#X connect 33 1 34 0; +#X connect 34 0 13 0; +#X connect 34 1 14 0; +#X connect 35 0 36 0; +#X connect 36 0 20 0; +#X connect 36 1 37 0; +#X connect 37 0 21 0; +#X connect 37 1 22 0; diff --git a/desiredata/doc/2.control.examples/22.random-walk.pd b/desiredata/doc/2.control.examples/22.random-walk.pd new file mode 100644 index 00000000..21483bdb --- /dev/null +++ b/desiredata/doc/2.control.examples/22.random-walk.pd @@ -0,0 +1,64 @@ +#N canvas 0 0 604 511 12; +#X floatatom 113 218 5 0 0 0 - - -; +#X obj 123 113 f; +#X obj 104 198 random 4; +#X obj 26 197 random 2; +#X floatatom 35 219 5 0 0 0 - - -; +#X obj 123 138 t b b f; +#X obj 26 253 sel 0 1; +#X obj 159 328 +; +#X obj 123 87 metro 100; +#X obj 123 65 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 104 252 + 1; +#X floatatom 242 153 5 0 0 0 - - -; +#X obj 82 309 *; +#X msg 26 282 -1; +#X obj 242 83 moses 0; +#X obj 316 83 moses 100; +#X obj 242 107 * -1; +#X obj 407 86 * -1; +#X obj 407 111 + 200; +#X msg 60 282 1; +#X text 39 9 Random walk generator; +#X text 143 64 on/off; +#X text 298 152 output; +#X text 22 375 A random walk is a special case of a Markov chain \, +in which the states are integers and the transitions add or subtract +a small amount from the previous state to get a new one. Here the "f" +holds the state. When it gets a bang \, the previous state is added +to a random number (from 1 to 4) multiplied by a random sign (-1 or +1). The new value is then coerced into the range from 0 to 100; +#X text 35 235 sign; +#X text 113 234 magnitude; +#X text 203 313 add prev value; +#X text 200 330 to random increment; +#X text 256 30 coercion to range 0-100 \; if out of range \, reflect +; +#X text 255 60 us back in.; +#X text 323 492 updated for Pd version 0.37-1; +#X connect 1 0 5 0; +#X connect 2 0 0 0; +#X connect 2 0 10 0; +#X connect 3 0 4 0; +#X connect 3 0 6 0; +#X connect 5 0 3 0; +#X connect 5 1 2 0; +#X connect 5 2 7 1; +#X connect 6 0 13 0; +#X connect 6 1 19 0; +#X connect 7 0 14 0; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 12 1; +#X connect 11 0 1 1; +#X connect 12 0 7 0; +#X connect 13 0 12 0; +#X connect 14 0 16 0; +#X connect 14 1 15 0; +#X connect 15 0 11 0; +#X connect 15 1 17 0; +#X connect 16 0 11 0; +#X connect 17 0 18 0; +#X connect 18 0 11 0; +#X connect 19 0 12 0; diff --git a/desiredata/doc/2.control.examples/23.sequencing.pd b/desiredata/doc/2.control.examples/23.sequencing.pd new file mode 100644 index 00000000..1aa19942 --- /dev/null +++ b/desiredata/doc/2.control.examples/23.sequencing.pd @@ -0,0 +1,28 @@ +#N canvas 47 52 758 482 12; +#X text 465 442 updated for Pd version 0.26; +#X text 35 28 You can use "qlist" or "textfile" objects for sequencing. +Qlist is simpler to use than the (more versatile) textfile.; +#X obj 345 144 r receive1; +#X obj 441 146 r receive2; +#X msg 205 88 clear \, add receive1 1 \, add 1000 receive1 0 \, add +receive2 2 \, add 1000 receive2 0 \, add receive1 3 \, bang; +#X obj 205 129 qlist; +#X floatatom 345 170 0 0 0 0 - - -; +#X floatatom 441 171 0 0 0 0 - - -; +#X text 48 202 The "add" messages add lines to the qlist \, so that +it contains:; +#X text 155 238 receive1 1; +#X text 154 259 1000 receive1 0; +#X text 155 279 receive2 2; +#X text 153 299 1000 receive2 0; +#X text 155 317 receive1 3; +#X text 16 391 If you have more than 5 lines or so wou will probably +want to store them as a separate file and have qlist read it. You can +also write files \, set tempo \, and single step... see the help patch +for details.; +#X text 22 341 and the "bang" instructs qlist to play the sequence +by sending messages to "receive" objects. Messages starting with numbers +request that amount of delay.; +#X connect 2 0 6 0; +#X connect 3 0 7 0; +#X connect 4 0 5 0; diff --git a/desiredata/doc/2.control.examples/dollarsign.pd b/desiredata/doc/2.control.examples/dollarsign.pd new file mode 100644 index 00000000..0697a570 --- /dev/null +++ b/desiredata/doc/2.control.examples/dollarsign.pd @@ -0,0 +1,35 @@ +#N canvas 62 73 586 361 12; +#X obj 207 44 inlet; +#X obj 207 71 s \$1-a; +#X obj 302 72 s \$1-b; +#X text 331 337 updated for Pd version 0.34; +#X text 63 7 This is an abstraction used in example 12 \, "locality". +; +#X obj 302 47 inlet; +#X obj 62 249 s \$1-c; +#X obj 62 279 r \$1-c; +#X floatatom 62 218 5 0 0; +#X floatatom 62 307 5 0 0; +#X obj 164 250 s here's-what-happens-if-you-dont; +#X obj 163 280 r here's-what-happens-if-you-dont; +#X floatatom 163 308 5 0 0; +#X floatatom 164 220 5 0 0; +#X floatatom 487 224 5 0 0; +#X floatatom 488 307 5 0 0; +#X obj 487 251 s \$0-d; +#X obj 488 281 r \$0-d; +#X text 47 94 The sends above get named "one-a" \, etc. The window +title bar tells you the creation arguments for this particular instance. +You can use this to make internal local connections as shown below. +The "$1-c" boxes act locally whereas the middle boxes get crosstalk +between the windows. The boxes at right also get unique names but in +this case you don't have to secify "$0" \, it's just something unique. +; +#X connect 0 0 1 0; +#X connect 5 0 2 0; +#X connect 7 0 9 0; +#X connect 8 0 6 0; +#X connect 11 0 12 0; +#X connect 13 0 10 0; +#X connect 14 0 16 0; +#X connect 17 0 15 0; diff --git a/desiredata/doc/2.control.examples/dollarsign2.pd b/desiredata/doc/2.control.examples/dollarsign2.pd new file mode 100644 index 00000000..c3d149f6 --- /dev/null +++ b/desiredata/doc/2.control.examples/dollarsign2.pd @@ -0,0 +1,54 @@ +#N canvas 22 54 588 671 12; +#X text 324 642 updated for Pd version 0.34; +#X text 34 6 This is an abstraction used in example 13 \, "dollarsigns". +; +#X obj 88 107 send \$1; +#X obj 199 106 + \$2; +#X floatatom 303 88 0 0 0; +#X obj 303 139 print; +#X msg 303 113 blah \$1; +#X text 36 163 This may sound inconsistant \, but it's not--object +and message boxes are both actually messages \, but in the case of +the Object box the message is passed at creation time \, and for the +Message box \, at message time.; +#X msg 188 272 bang; +#X obj 188 300 symbol \$1; +#X msg 98 272 bang; +#X obj 98 300 float \$2; +#X floatatom 98 327 5 0 0; +#X symbolatom 188 329 10 0 0; +#X text 36 233 So how do you put creation arguments in messages? Use +"float" and "symbol" as shown:; +#X msg 97 383 bang; +#X obj 97 407 float \$2; +#X msg 97 434 five \$1; +#X text 41 357 Then if you wish \, connect to a message box as in: +; +#X obj 97 459 print; +#X msg 143 512 bang; +#X obj 143 564 symbol \$1; +#X obj 237 560 f \$2; +#X obj 143 540 t b b; +#X obj 142 587 pack symbol float; +#X msg 142 613 six \$1 \$2; +#X obj 142 640 print; +#X text 31 485 For messages combining more than one creation argument +try:; +#X text 37 50 In Object boxes \, dollar signs refer to the abstraction's +creation arguments. In Messages \, they change dynamically:; +#X connect 4 0 6 0; +#X connect 6 0 5 0; +#X connect 8 0 9 0; +#X connect 9 0 13 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 17 0 19 0; +#X connect 20 0 23 0; +#X connect 21 0 24 0; +#X connect 22 0 24 1; +#X connect 23 0 21 0; +#X connect 23 1 22 0; +#X connect 24 0 25 0; +#X connect 25 0 26 0; diff --git a/desiredata/doc/2.control.examples/sendnumber.pd b/desiredata/doc/2.control.examples/sendnumber.pd new file mode 100644 index 00000000..00f2eb04 --- /dev/null +++ b/desiredata/doc/2.control.examples/sendnumber.pd @@ -0,0 +1,20 @@ +#N canvas 171 73 718 283 12; +#X obj 34 60 inlet; +#X obj 34 88 float \$1; +#X obj 34 116 send \$2; +#X text 26 225 For obvious reasons you might not want to call a patch +as an abstraction from itself.; +#X text 151 183 In this case \$1 is a number you can specify and \$2 +is a "send" destination.; +#X text 461 260 updated for Pd version 0.26; +#X text 154 103 When you call an abstraction by typing \, say \, "sendnumber +1 x" in an object box. the subpatch can access the values of the creation +arguments (1 and x) as "$1" and "$2" innside object boxes. Typing \$1 +inside a message box has a different meaning (see the message box help +window.); +#X text 155 31 This window is used by 11.subpatch.pd to demonstrate +the abstraction mechanism in Pd. If you've opened this window directly +\, you might also want to open the other one to see how it's used. +; +#X connect 0 0 1 0; +#X connect 1 0 2 0; diff --git a/desiredata/doc/3.audio.examples/A00.intro.pd b/desiredata/doc/3.audio.examples/A00.intro.pd new file mode 100644 index 00000000..69087781 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A00.intro.pd @@ -0,0 +1,10 @@ +#N canvas 440 252 579 286 12; +#X text 87 6 INTRODUCTION TO THE PD AUDIO EXAMPLE PATCHES; +#X text 328 257 updated for Pd version 0.37; +#X text 34 45 This is the second of three tutorial series on Pd. This +one shows the time-domain audio processing features. (The first one +showed how to use Pd to do "control" computations \, and the third +is about frequency-domain techniques.); +#X text 33 125 These patches are accompanied by an ONLINE BOOK:; +#X text 100 158 http://www.crca.ucsd.edu/~msp/techniques.htm; +#X text 37 189 which develops the underlying theory.; diff --git a/desiredata/doc/3.audio.examples/A00.intro.txt b/desiredata/doc/3.audio.examples/A00.intro.txt new file mode 100644 index 00000000..d982eedd --- /dev/null +++ b/desiredata/doc/3.audio.examples/A00.intro.txt @@ -0,0 +1,9 @@ +This is the second of three tutorial series on Pd. This one shows the +time-domain audio processing features. (The first one showed how to use Pd to +do "control" computations, and the third is about frequency-domain techniques.) + +These patches are accompanied by an ONLINE BOOK: + + http://www.crca.ucsd.edu/~msp/techniques.htm + +which develops the underlying theory. diff --git a/desiredata/doc/3.audio.examples/A01.sinewave.pd b/desiredata/doc/3.audio.examples/A01.sinewave.pd new file mode 100644 index 00000000..42b8aed0 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A01.sinewave.pd @@ -0,0 +1,32 @@ +#N canvas 6 2 588 513 12; +#X obj 108 109 osc~ 440; +#X obj 108 168 dac~; +#X text 187 111 <-- 440 Hz. sine wave at full blast; +#X obj 108 138 *~ 0.05; +#X text 202 3 MAKING A SINE WAVE; +#X text 32 195 Audio computation can be turned on and off by sending +messages to the global "pd" object as follows:; +#X msg 98 239 \; pd dsp 1; +#X msg 202 239 \; pd dsp 0; +#X text 113 276 ON; +#X text 222 276 OFF; +#X text 29 297 You should see the Pd window change to reflect whether +audio is on or off. You can also turn audio on and off using the "audio" +menu \, but the buttons are provided as a shortcut.; +#X text 30 368 When DSP is on \, you should hear a tone whose pitch +is A 440 and whose amplitude is 0.05. If instead you are greeted with +silence \, you might want to read the HTML documentation on setting +up audio.; +#X text 28 434 In general when you start a work session with Pd \, +you will want to choose "test audio and MIDI" from the help window +\, which opens a more comprehensive test patch than this one.; +#X text 296 247 <-- click these; +#X text 187 139 <-- reduce amplitude to 0.05; +#X text 160 168 <----- send to the audio output device; +#X text 32 23 Audio computation in Pd is done using "tilde objects" +such as the three below. They use continuous audio streams to intercommunicate +\, as well as communicating with other ("control") Pd objects using +messages.; +#X text 342 490 updated for Pd version 0.36; +#X connect 0 0 3 0; +#X connect 3 0 1 0; diff --git a/desiredata/doc/3.audio.examples/A02.amplitude.pd b/desiredata/doc/3.audio.examples/A02.amplitude.pd new file mode 100644 index 00000000..d24be18d --- /dev/null +++ b/desiredata/doc/3.audio.examples/A02.amplitude.pd @@ -0,0 +1,37 @@ +#N canvas 73 190 702 512 12; +#X obj 64 65 osc~ 440; +#X obj 64 283 dac~; +#X text 145 66 <-- 440 Hz. sine wave at full blast; +#X msg 431 7 \; pd dsp 1; +#X msg 514 7 \; pd dsp 0; +#X text 456 45 ON; +#X text 534 43 OFF; +#X text 164 18 CONTROLLING AMPLITUDE; +#X text 35 327 Amplitudes of audio signals can have any reasonable +range \, but when you output a signal via the dac~ object \, the samples +should range between -1 and +1. Values out of that range will be "clipped." +; +#X obj 64 202 *~ 0; +#X floatatom 107 165 0 0 0 0 - - -; +#X obj 95 132 dbtorms; +#X floatatom 95 100 0 0 80 0 - - -; +#X text 141 100 <-- set amplitude here in dB; +#X text 211 133 <-- this converts dB to linear units; +#X text 210 164 <-- this shows the linear gain; +#X text 116 204 <-- multiply the sine wave by the gain \, reducing +its amplitude. You can also use the "*~" object to multiply two signals. +The "0" argument here instructs it that we'll just send it messages +to set the multiplier.; +#X text 35 396 Here we calculate a gain for the multiplier (*~) using +a "dbtorms" object (acronym for "dB to RMS"). 100 dB is normalized +to one \, and zero dB artificially outputs a true 0; +#X text 34 452 Pd assumes you have a two channel audio system unless +you tell it otherwise.; +#X text 440 486 updated for Pd version 0.33; +#X text 114 282 <-- and out. We're sending to both channels now.; +#X connect 0 0 9 0; +#X connect 9 0 1 0; +#X connect 9 0 1 1; +#X connect 11 0 9 1; +#X connect 11 0 10 0; +#X connect 12 0 11 0; diff --git a/desiredata/doc/3.audio.examples/A03.line.pd b/desiredata/doc/3.audio.examples/A03.line.pd new file mode 100644 index 00000000..392df533 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A03.line.pd @@ -0,0 +1,55 @@ +#N canvas 369 106 647 598 12; +#X obj 56 79 osc~ 440; +#X obj 56 309 dac~; +#X msg 446 79 \; pd dsp 1; +#X msg 538 79 \; pd dsp 0; +#X text 467 112 ON; +#X text 555 112 OFF; +#X obj 56 269 *~; +#X obj 72 243 line~; +#X text 129 243 <--- ramp generator; +#X text 132 78 <-- sine wave; +#X msg 72 103 0.1 2000; +#X msg 72 177 0 2000; +#X msg 72 125 0.1 50; +#X msg 72 199 0 50; +#X msg 72 147 0.1; +#X msg 72 221 0; +#X text 274 124 ON; +#X text 154 105 <-- slow; +#X text 144 126 <-- fast; +#X text 111 146 <-- instantly; +#X text 271 197 OFF; +#X text 136 178 <-- slow; +#X text 129 199 <-- fast; +#X text 109 219 <-- instantly; +#X text 112 161 ----------------------; +#X text 97 308 <-- out; +#X text 103 7 CONTROLLING AMPLITUDE USING LINE~; +#X text 38 342 Line~'s left inlet is a target value \; it reaches that +target in the time specified (in milliseconds) to its right inlet. +; +#X text 34 495 The line~ object (and its control brother \, line) treat +their right inlet specially. The inlets don't retain values the way +other inlets do but revert to zero whenever a target is received.; +#X text 14 27 In this patch \, the multiplier is configured to multiply +two signals. The amplitude is now a signal computed by the line~ object. +; +#X text 37 395 (In this example \, message boxes with two numbers each +are connected to line~'s left inlet. Except in some special cases \, +Pd objects with more than one inlet will automatically distribute lists +of numbers across their inlets. In this case \, "0 50" becomes \, "50 +at right and 0 at left."); +#X text 386 557 updated for Pd version 0.36; +#X text 93 268 <-- multiply the sine wave by the ramp. There's no longer +a "0" argument-- this tells Pd to expect a signal here.; +#X connect 0 0 6 0; +#X connect 6 0 1 0; +#X connect 6 0 1 1; +#X connect 7 0 6 1; +#X connect 10 0 7 0; +#X connect 11 0 7 0; +#X connect 12 0 7 0; +#X connect 13 0 7 0; +#X connect 14 0 7 0; +#X connect 15 0 7 0; diff --git a/desiredata/doc/3.audio.examples/A04.line2.pd b/desiredata/doc/3.audio.examples/A04.line2.pd new file mode 100644 index 00000000..c6dd1679 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A04.line2.pd @@ -0,0 +1,59 @@ +#N canvas 30 68 949 754 12; +#X obj 67 77 osc~ 440; +#X obj 67 329 dac~; +#X obj 67 242 *~; +#X obj 86 180 line~; +#X text 116 330 <-- out; +#X text 124 9 LINES GRAPHED; +#X text 24 33 Here again is a line~ controlling the amplitude of an +osc~ \, but with the outputs graphed:; +#X obj 149 89 r graphit; +#X obj 151 179 r graphit; +#X obj 151 246 r graphit; +#X obj 86 149 r to-line; +#X graph graph1 0 -1.02 44100 1.02 631 480 831 350; +#X array product 44100 float 0; +#X pop; +#X graph graph1 0 -1.02 44100 1.02 631 150 831 20; +#X array osc-output 44100 float 0; +#X pop; +#X graph graph1 0 -1.02 44100 1.02 631 315 831 185; +#X array line-output 44100 float 0; +#X pop; +#X obj 149 119 tabwrite~ osc-output; +#X obj 67 299 *~ 0.1; +#X msg 38 401 \; pd dsp 1 \; to-line 0 \, 1 500 \; graphit bang; +#X msg 210 401 \; pd dsp 1 \; to-line 1 \, 0 500 \; graphit bang; +#X obj 151 209 tabwrite~ line-output; +#X obj 151 276 tabwrite~ product; +#X text 70 379 ramp up; +#X text 235 378 ramp down; +#X text 406 376 to 1/2; +#X msg 375 400 \; pd dsp 1 \; to-line 0.5 1000 \; graphit bang; +#X text 634 491 ------ 1 second ------; +#X text 38 485 Click the message boxes above to try it. Note that in +the first two boxes \, the line~ objects get two messages. The first +one \, with no time value \, causes the line~ to jump immediately to +the value. The third box takes line~'s previous value as a point of +departure. What you see will depend on which box you last clicked and +how long you waited between the two.; +#X text 662 727 updated for Pd version 0.33; +#X text 41 600 On most machines \, you will hear an interruption in +the sound one second after you click on the first or third box. This +is because the graphical updates are likely to eat more CPU time than +your audio buffer has pre-buffered for. You can avoid this if you keep +your graphs in sub-windows and open them only when you need them. In +some future version of Pd this behavior will be improved. Until then +\, you'll have to avoid having arrays getting re-drawn during music +performances.; +#X connect 0 0 2 0; +#X connect 0 0 14 0; +#X connect 2 0 15 0; +#X connect 2 0 19 0; +#X connect 3 0 2 1; +#X connect 3 0 18 0; +#X connect 7 0 14 0; +#X connect 8 0 18 0; +#X connect 9 0 19 0; +#X connect 10 0 3 0; +#X connect 15 0 1 0; diff --git a/desiredata/doc/3.audio.examples/A05.output.subpatch.pd b/desiredata/doc/3.audio.examples/A05.output.subpatch.pd new file mode 100644 index 00000000..d24fdba2 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A05.output.subpatch.pd @@ -0,0 +1,30 @@ +#N canvas 300 159 635 486 12; +#X text 261 20 CONTROLLING OUTPUT AMPLITUDE; +#X obj 32 27 osc~ 440; +#X obj 54 55 osc~ 550; +#X obj 54 116 osc~ 660; +#X obj 32 88 +~; +#X obj 32 142 +~; +#X text 108 177 <-- this is a subwindow--right click on it; +#X text 149 197 and select "open" to see inside.; +#X text 30 401 The output control automatically starts DSP whenever +you touch the level control. Hitting "mute" toggles between the current +level and zero.; +#X obj 32 173 output~; +#X text 383 463 updated for Pd version 0.36; +#X text 143 115 <-- Here we make an A major triad as a test signal. +; +#X text 31 250 In this and subsequent patches \, we'll use a subwindow +\, "output" \, to control overall amplitude. The amplitudes are in +decibels \, with 100 being full blast. In this example \, you can't +actually push the output amplitude past 90 or so without clipping. +You'll know you're clipping if \, instead of an A major chord \, you +hear a single \, distorted tone two octaves down. The clipping happens +at Pd's last stage of audio output. Audio signals internal to Pd have +essentially no level limit.; +#X connect 1 0 4 0; +#X connect 2 0 4 1; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 5 0 9 0; +#X connect 5 0 9 1; diff --git a/desiredata/doc/3.audio.examples/A06.frequency.pd b/desiredata/doc/3.audio.examples/A06.frequency.pd new file mode 100644 index 00000000..50cff7c0 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A06.frequency.pd @@ -0,0 +1,60 @@ +#N canvas 8 17 693 642 12; +#N canvas 0 0 450 300 graph1 0; +#X array osc-output 4410 float 0; +#X coords 0 1.02 4410 -1.02 200 130 1; +#X restore 473 167 graph; +#X obj 98 261 tabwrite~ osc-output; +#X msg 98 232 bang; +#X floatatom 280 66 0 0 0 0 - - -; +#X text 147 231 <-- click to graph; +#X obj 15 206 r frequency; +#X msg 280 37 set \$1; +#X floatatom 6 66 0 0 0 0 - - -; +#X obj 6 8 r frequency; +#X msg 6 37 set \$1; +#X obj 19 90 s frequency; +#X obj 280 8 r pitch; +#X obj 289 90 s pitch; +#X obj 280 116 mtof; +#X obj 280 145 s frequency; +#X obj 6 145 s pitch; +#X obj 6 116 ftom; +#X text 105 66 <-- set frequency; +#X text 372 65 <-- set MIDI pitch; +#X text 15 429 Frequency and pitch are converted using the "ftom" and +"mtof" objects. Frequency refers to the number of cycles per second. +Pitch is "60" for Middle C \, 61 for C sharp \, 72 for the next C up +\, and so on.; +#X text 476 308 ---- 0.1 seconds ----; +#X text 447 6 FREQUENCY AND PITCH; +#X text 16 363 The osc~ object \, if you give it an argument \, expects +floating-point messages to set its frequency. Without arguments \, +its frequency is controlled by connecting an audio signal to its input. +; +#X text 14 496 Mtof and ftom work fine for microtones (non-integral +"MIDI pitch" ) and don't have MIDI's range restriction-- for example +\, MIDI -36 is about 1 Hz.; +#X text 15 553 Note also the "set" messages going to the number boxes +so that they can each update the other without bringing on an infinite +loop. (get help on number boxes for details.); +#X text 87 291 <-- output level; +#X text 51 116 <-- convert frequency; +#X text 106 134 to "MIDI" pitch; +#X text 327 117 <-- convert "MIDI" pitch to frequency; +#X obj 15 273 output~; +#X text 437 619 updated for Pd version 0.36; +#X obj 15 232 osc~; +#X connect 2 0 1 0; +#X connect 3 0 12 0; +#X connect 3 0 13 0; +#X connect 5 0 31 0; +#X connect 6 0 3 0; +#X connect 7 0 10 0; +#X connect 7 0 16 0; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 11 0 6 0; +#X connect 13 0 14 0; +#X connect 16 0 15 0; +#X connect 31 0 1 0; +#X connect 31 0 29 0; diff --git a/desiredata/doc/3.audio.examples/A07.frequency.mod.pd b/desiredata/doc/3.audio.examples/A07.frequency.mod.pd new file mode 100644 index 00000000..aedb1cc1 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A07.frequency.mod.pd @@ -0,0 +1,54 @@ +#N canvas 92 96 760 640 12; +#X obj 259 168 *~; +#X floatatom 259 83 0 0 0 0 - - -; +#X floatatom 169 118 0 0 0 0 - - -; +#X obj 169 188 +~; +#N canvas 0 0 450 300 graph1 0; +#X array fm-output 441 float 0; +#X coords 0 1.02 440 -1.02 200 130 1; +#X restore 527 40 graph; +#X msg 244 228 bang; +#X text 286 228 <-- click to graph; +#X obj 244 252 tabwrite~ fm-output; +#X floatatom 281 138 0 0 0 0 - - -; +#X text 166 75 carrier; +#X text 165 93 frequency; +#X text 244 59 frequency; +#X text 245 42 modulation; +#X text 33 8 FREQUENCY MODULATION ("FM") USING TWO OSCILLATORS; +#X obj 168 232 osc~; +#X text 52 214 "carrier"; +#X text 34 232 oscillator -->; +#X text 47 149 add modulator; +#X text 46 167 to carrier; +#X text 44 186 frequency -->; +#X text 320 150 index; +#X text 322 131 modulation; +#X obj 259 108 osc~; +#X text 531 172 --- 0.01 seconds ----; +#X text 53 443 To get the FM sound \, set all three of carrier frequency +\, modulation frequency \, and modulation index in the hundreds. Note +that you get a timbral change as you sweep modulation index \, because +this changes the amplitudes of the components of the output sound but +not their frequencies.; +#X obj 167 270 output~; +#X text 489 613 updated for Pd version 0.37; +#X text 54 332 This patch shows the classical FM synthesis technique +developed by John Chowning. It's nothing but an oscillator with vibrato +controlled by another "modulation" oscillator. First \, to understand +the patch \, set carrier frequency to 400 or so \, modulation frequency +between 5 and 10 \, and try modulation index values between 0 and 400 +\, say. You'll hear a sine wave with vibrato.; +#X text 55 526 The component frequencies are equal to the carrier frequency +\, plus or minus multiples of the modulator frequency. A more complete +discussion of FM occurs in part 5 of this series.; +#X connect 0 0 3 1; +#X connect 1 0 22 0; +#X connect 2 0 3 0; +#X connect 3 0 14 0; +#X connect 5 0 7 0; +#X connect 8 0 0 1; +#X connect 14 0 7 0; +#X connect 14 0 25 0; +#X connect 14 0 25 1; +#X connect 22 0 0 0; diff --git a/desiredata/doc/3.audio.examples/A08.review.pd b/desiredata/doc/3.audio.examples/A08.review.pd new file mode 100644 index 00000000..9b190a19 --- /dev/null +++ b/desiredata/doc/3.audio.examples/A08.review.pd @@ -0,0 +1,41 @@ +#N canvas 36 68 701 588 12; +#X text 444 542 updated for Pd version 0.34; +#X text 39 14 PART 1 REVIEW; +#X obj 66 131 tabwrite~; +#X obj 66 105 line~; +#X obj 54 298 +; +#X obj 66 79 +~; +#X obj 66 209 cos~; +#X obj 66 157 osc~; +#X obj 66 183 phasor~; +#X obj 54 324 pack; +#X obj 52 511 r; +#X obj 53 487 s; +#X obj 54 408 inlet; +#X obj 53 462 f; +#X obj 53 436 t; +#X obj 54 378 dbtorms; +#X obj 97 351 mtof; +#X obj 54 350 ftom; +#X obj 105 408 outlet; +#X obj 66 235 dac~; +#X text 26 52 So far we've seen these audio ("tilde") objects:; +#X text 123 104 -- ramp generator; +#X text 157 131 -- sampler (which we've only used for graphing so far) +; +#X text 111 157 -- a cosine wave oscillator; +#X text 139 183 -- phase generator for making your own oscillator; +#X text 112 209 -- cosine waveshape lookup; +#X text 112 236 -- audio output ("digital/analog converter" -- a misnomer) +; +#X text 31 266 ... and these "control" objects:; +#X text 145 349 -- frequency to pitch conversion; +#X text 126 378 -- decibel to amplitude conversion; +#X text 167 409 -- input and output to a subpatch; +#X text 90 437 ("trigger") -- message ordering and conversion; +#X text 93 462 ("float") -- store a (floating point) number; +#X text 90 488 ("send") -- wireless message sending; +#X text 91 513 ("receive") ... and receiving; +#X text 106 78 (etc.) -- arithmetic on audio signals; +#X text 92 296 (etc.) -- arithmetic; +#X text 99 323 -- combine two or more values in a single message; diff --git a/desiredata/doc/3.audio.examples/B01.wavetables.pd b/desiredata/doc/3.audio.examples/B01.wavetables.pd new file mode 100644 index 00000000..66549d3e --- /dev/null +++ b/desiredata/doc/3.audio.examples/B01.wavetables.pd @@ -0,0 +1,50 @@ +#N canvas 19 22 722 608 12; +#X floatatom 164 43 0 0 0 0 - - -; +#N canvas 0 0 450 300 graph1 0; +#X array table10 259 float 1; +#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0.612 0.612 0.612 0.612 0.612 0.627692 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 -0.470769 -0.470769 -0.470769 -0.470769 -0.470769 +-0.470769 -0.470769 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0.627692 0.627692 0.627692 0.643385 0.643385 0.643385 +0.659077 0 -0.502154 -0.502154 -0.502154 -0.486462 -0.486462 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0.580615 0.596308 0.596308 0.596308 0.596308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1.02 258 -1.02 258 130 1; +#X restore 445 47 graph; +#X text 30 123 oscillator -->; +#X text 456 587 updated for Pd version 0.34; +#X text 33 8 WAVETABLE OSCILLATORS; +#X text 36 106 wavetable; +#X obj 164 70 mtof; +#X floatatom 164 97 0 0 0 0 - - -; +#X obj 164 123 tabosc4~ table10; +#X text 94 42 pitch->; +#X text 35 309 Note that I selected "save contents" in the properties +dialog for table10 (right click on the table to see.) If this isn't +set \, the waveform won't be remembered as part of the patch but will +be reinitialized to zero when the patch is reopened.; +#X msg 35 549 \; table10 cosinesum 256 0.2 -0.2 0.2 -0.2 0.2 -0.2 0.2 +; +#X msg 578 240 \; table10 const 0; +#X text 597 217 CLEAR TABLE; +#X text 35 395 For efficiency's sake tabosc4~ requires that the table +have a power of two plus three points (64+3=67 \, 128+3=131 \, 256+3=259 +\, etc.) If you want wraparound to work smoothly \, you should make +the last three points copies of the first three. This is done because +tabread4~ does 4-point interpolation.; +#X text 38 494 If you want a specific sinusoidal composition \, you +can send table10 a message \, as below (see 11.arrays in the control +examples):; +#X text 36 240 Here \, in place of the "osc~" cosine wave oscillator +\, we introduce the tabosc4~ oscillator which produces an arbitrary +waveform. You can draw in the waveform with the mouse.; +#X obj 164 151 output~; +#X connect 0 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 17 0; +#X connect 8 0 17 1; diff --git a/desiredata/doc/3.audio.examples/B02.two-wavetables.pd b/desiredata/doc/3.audio.examples/B02.two-wavetables.pd new file mode 100644 index 00000000..c4cc6d60 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B02.two-wavetables.pd @@ -0,0 +1,147 @@ +#N canvas 74 98 749 466 12; +#X graph graph1 0 -1.02 258 1.02 475 298 733 168; +#X array waveform11 259 float 1; +#A 0 -0.0896033 0 0.0896033 0.178356 0.265425 0.350007 0.431348 0.508756 +0.58161 0.649372 0.711597 0.767935 0.818137 0.862053 0.89963 0.930912 +0.956028 0.975187 0.988669 0.996811 1 0.998655 0.993223 0.984158 0.971919 +0.956953 0.939691 0.920538 0.899867 0.878018 0.85529 0.831945 0.808204 +0.784252 0.760239 0.736284 0.712477 0.688888 0.665568 0.642553 0.619872 +0.59755 0.575607 0.554066 0.532953 0.512296 0.49213 0.472491 0.453419 +0.434957 0.417147 0.400027 0.383632 0.367992 0.353126 0.339046 0.32575 +0.313227 0.301453 0.290394 0.280002 0.270224 0.260995 0.252248 0.24391 +0.235908 0.22817 0.220628 0.213219 0.205888 0.198586 0.191278 0.183936 +0.176545 0.169098 0.1616 0.154063 0.146505 0.138954 0.131437 0.123987 +0.116636 0.109415 0.102354 0.0954784 0.0888083 0.08236 0.0761442 0.0701659 +0.0644253 0.0589178 0.0536354 0.0485669 0.0436994 0.0390194 0.0345135 +0.0301695 0.0259776 0.0219306 0.0180245 0.0142591 0.0106377 0.00716724 +0.00385775 0.000722025 -0.00222511 -0.0049675 -0.00748845 -0.00977153 +-0.0118014 -0.0135644 -0.0150493 -0.0162479 -0.0171551 -0.0177693 -0.0180928 +-0.0181312 -0.0178936 -0.017392 -0.0166417 -0.0156601 -0.0144666 -0.0130822 +-0.0115294 -0.00983114 -0.0080113 -0.00609396 -0.0041034 -0.00206402 +-2.23572e-07 0.00206358 0.00410297 0.00609353 0.00801089 0.00983075 +0.011529 0.0130819 0.0144663 0.0156599 0.0166416 0.0173919 0.0178935 +0.0181312 0.0180929 0.0177695 0.0171552 0.0162481 0.0150496 0.0135647 +0.0118018 0.009772 0.00748897 0.00496807 0.00222573 -0.000721367 -0.00385706 +-0.00716651 -0.010637 -0.0142583 -0.0180237 -0.0219297 -0.0259767 -0.0301686 +-0.0345125 -0.0390184 -0.0436984 -0.0485658 -0.0536343 -0.0589167 -0.0644241 +-0.0701647 -0.0761429 -0.0823587 -0.0888069 -0.0954769 -0.102353 -0.109414 +-0.116634 -0.123985 -0.131435 -0.138952 -0.146504 -0.154061 -0.161598 +-0.169097 -0.176543 -0.183935 -0.191276 -0.198584 -0.205886 -0.213218 +-0.220627 -0.228169 -0.235906 -0.243908 -0.252246 -0.260993 -0.270222 +-0.28 -0.290392 -0.301451 -0.313224 -0.325747 -0.339043 -0.353123 -0.367989 +-0.383629 -0.400023 -0.417143 -0.434954 -0.453415 -0.472486 -0.492125 +-0.512292 -0.532948 -0.554062 -0.575602 -0.597545 -0.619868 -0.642548 +-0.665563 -0.688883 -0.712472 -0.736279 -0.760234 -0.784247 -0.808199 +-0.83194 -0.855285 -0.878013 -0.899863 -0.920533 -0.939687 -0.956949 +-0.971916 -0.984156 -0.993221 -0.998655 -1 -0.996813 -0.988671 -0.975191 +-0.956033 -0.930918 -0.899638 -0.862061 -0.818147 -0.767947 -0.71161 +-0.649386 -0.581625 -0.508772 -0.431366 -0.350025 -0.265443 -0.178375 +-0.0896226 -1.94061e-05 0.089584; +#X pop; +#X floatatom 202 171 0 0 100; +#N canvas 159 26 532 285 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 426 180 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 397 110 moses 1; +#X obj 83 148 dbtorms; +#X obj 397 85 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 20 155 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 105 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 90 outlet; +#X msg 214 65 \; pd dsp 1; +#X obj 83 198 line~; +#X obj 20 207 *~; +#X obj 20 232 dac~; +#X obj 83 173 pack 0 50; +#X text 20 132 audio; +#X text 96 114 show level; +#X obj 426 155 t b; +#X obj 20 181 hip~ 1; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 12 0; +#X connect 5 0 12 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 26 0; +#X connect 8 1 4 1; +#X connect 9 0 23 0; +#X connect 10 0 1 1; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 11 0 17 0; +#X connect 13 0 27 0; +#X connect 14 0 16 0; +#X connect 14 0 19 0; +#X connect 17 0 18 0; +#X connect 20 0 21 1; +#X connect 21 0 22 0; +#X connect 21 0 22 1; +#X connect 23 0 20 0; +#X connect 26 0 5 0; +#X connect 27 0 21 0; +#X restore 164 199 pd output; +#X msg 240 172 MUTE; +#X text 30 123 oscillator -->; +#X text 485 445 updated for Pd version 0.34; +#X text 33 8 WAVETABLE OSCILLATORS; +#X text 36 106 wavetable; +#X text 88 54 pitch->; +#X graph graph2 0 0 258 1000 475 155 734 15; +#X array pitch11 259 float 1; +#A 0 757.143 757.143 735.714 700 671.429 650 621.429 600 571.429 550 +521.429 507.143 485.714 464.286 442.857 428.571 414.286 400 378.571 +364.286 342.857 328.571 928.571 921.429 921.429 914.286 907.143 892.857 +885.714 878.571 864.286 850 828.571 807.143 792.857 785.714 775 764.286 +753.571 742.857 735.714 728.571 721.429 714.286 703.571 692.857 682.143 +671.429 650 628.571 617.857 607.143 596.429 585.714 575 564.286 553.571 +542.857 532.143 521.429 510.714 500 485.714 478.571 464.286 450 435.714 +428.571 400 392.857 385.714 378.571 357.143 350 342.857 335.714 328.571 +314.286 292.857 285.714 271.429 264.286 571.429 571.429 571.429 571.429 +571.429 564.286 564.286 278.571 271.429 271.429 278.571 278.571 278.571 +278.571 571.429 571.429 571.429 575 578.571 578.571 278.571 278.571 +285.714 285.714 278.571 278.571 278.571 878.571 878.571 878.571 878.571 +878.571 321.429 325 328.571 328.571 328.571 328.571 885.714 885.714 +885.714 885.714 207.143 207.143 207.143 200 207.143 207.143 207.143 +214.286 214.286 221.429 228.571 228.571 242.857 250 257.143 264.286 +278.571 292.857 307.143 321.429 335.714 350 371.429 392.857 421.429 +435.714 471.429 500 542.857 571.429 628.571 664.286 700 728.571 757.143 +792.857 828.571 885.714 928.571 978.571 1000 1007.14 1007.14 1000 1000 +992.857 985.714 885.714 914.286 671.429 671.429 671.429 671.429 671.429 +671.429 671.429 671.429 671.429 671.429 678.571 635.714 635.714 678.571 +714.286 714.286 678.571 635.714 635.714 635.714 742.857 742.857 685.714 +685.714 635.714 621.429 685.714 792.857 792.857 678.571 521.429 521.429 +521.429 864.286 857.143 857.143 471.429 471.429 471.429 471.429 921.429 +921.429 385.714 385.714 385.714 964.286 964.286 964.286 328.571 328.571 +328.571 328.571 885.714 885.714 885.714 685.714 214.286 214.286 207.143 +207.143 921.429 921.429 921.429 921.429 207.143 207.143 200 200 957.143 +957.143 950 214.286 214.286 207.143 207.143 957.143 957.143 950 200 +207.143 207.143 942.857 942.857 942.857 950 950; +#X pop; +#X obj 164 87 tabosc4~ pitch11; +#X obj 164 123 tabosc4~ waveform11; +#X obj 164 55 sig~ 0.5; +#X text 13 319 Here's a tabosc4~ controlling the frequency of another +one. If you get properties on the two arrays \, you'll see that the +top graph has a vertical scale from 0 to 1000 \; we're looping through +that at a frequency of 0.5 Hz. and the output is used as the frequency +input of the second tabosc4~. I've detected Klingons \, Captain Kirk... +; +#X connect 1 0 2 1; +#X connect 2 0 1 0; +#X connect 3 0 2 2; +#X connect 10 0 11 0; +#X connect 11 0 2 0; +#X connect 12 0 10 0; diff --git a/desiredata/doc/3.audio.examples/B03.tabread4.pd b/desiredata/doc/3.audio.examples/B03.tabread4.pd new file mode 100644 index 00000000..15fa6652 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B03.tabread4.pd @@ -0,0 +1,130 @@ +#N canvas 55 137 820 651 12; +#N canvas 0 0 450 300 graph1 0; +#X array waveform12 131 float 1; +#A 0 -0.172615 -0.172615 -0.172615 -0.172615 -0.172615 -0.141231 -0.109846 +-0.0941538 -0.0627692 -0.0470769 0.0156923 0.0784615 0.125538 0.188308 +0.235385 0.298154 0.360923 0.392308 0.470769 0.533538 0.596308 0.643385 +0.674769 0.721846 0.753231 0.784615 0.816 0.831692 0.847385 0.878769 +0.894462 0.910154 0.910154 0.910154 0.910154 0.910154 0.894462 0.894462 +0.894462 0.894462 0.878769 0.863077 0.816 0.800308 0.768923 0.737538 +0.706154 0.674769 0.643385 0.596308 0.564923 0.533538 0.470769 0.423692 +0.376615 0.313846 0.266769 0.204 0.172615 0.109846 0.0627692 0.0156923 +0 -0.0313846 -0.0627692 -0.0784615 -0.0941538 -0.109846 -0.141231 -0.156923 +-0.172615 -0.204 -0.219692 -0.219692 -0.235385 -0.235385 -0.235385 +-0.219692 -0.219692 -0.219692 -0.204 -0.156923 -0.125538 -0.0784615 +0 0.172615 0.313846 0.470769 0.564923 0.627692 0.690462 0.721846 0.737538 +0.753231 0.768923 0.768923 0.753231 0.737538 0.706154 0.674769 0.612 +0.580615 0.549231 0.517846 0.486462 0.423692 0.392308 0.360923 0.282462 +0.219692 0.109846 -0.0156923 -0.0941538 -0.109846 -0.141231 -0.156923 +-0.172615 -0.188308 -0.204 -0.204 -0.219692 -0.204 -0.204 -0.219692 +-0.219692 -0.204 -0.204 -0.204 -0.204 -0.204 -0.188308; +#X coords 0 1.02 130 -1.02 258 130 1; +#X restore 462 30 graph; +#X floatatom 194 299 0 0 100 0 - - -; +#N canvas 159 26 532 285 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 426 180 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 397 110 moses 1; +#X obj 83 148 dbtorms; +#X obj 397 85 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 20 155 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 105 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 90 outlet; +#X msg 214 65 \; pd dsp 1; +#X obj 83 198 line~; +#X obj 20 207 *~; +#X obj 20 232 dac~; +#X obj 83 173 pack 0 50; +#X text 20 132 audio; +#X text 96 114 show level; +#X obj 426 155 t b; +#X obj 20 181 hip~ 1; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 12 0; +#X connect 5 0 12 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 26 0; +#X connect 8 1 4 1; +#X connect 9 0 23 0; +#X connect 10 0 1 1; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 11 0 17 0; +#X connect 13 0 27 0; +#X connect 14 0 16 0; +#X connect 14 0 19 0; +#X connect 17 0 18 0; +#X connect 20 0 21 1; +#X connect 21 0 22 0; +#X connect 21 0 22 1; +#X connect 23 0 20 0; +#X connect 26 0 5 0; +#X connect 27 0 21 0; +#X restore 156 327 pd output; +#X msg 232 300 MUTE; +#X text 33 8 WAVETABLE OSCILLATORS; +#X obj 156 95 phasor~; +#X obj 156 184 tabread4~ waveform12; +#X obj 156 157 +~ 1; +#X floatatom 156 66 4 0 0 0 - - -; +#X floatatom 250 59 4 0 1000 0 - - -; +#X obj 250 80 pack 0 50; +#X obj 250 104 line~; +#X obj 156 131 *~; +#X text 21 81 phase; +#X text 20 96 generation -->; +#X text 25 117 range; +#X text 24 132 adjustment -->; +#X text 250 38 squeeze; +#X text 133 40 frequency; +#N canvas 0 0 450 300 graph3 0; +#X array wave-out12 441 float 0; +#X coords 0 1 440 -1 300 140 1; +#X restore 481 190 graph; +#X obj 177 247 tabwrite~ wave-out12; +#X msg 177 216 bang; +#X text 223 217 <--click to graph; +#X text 25 360 The tabread4~ module is available for situations requiring +more control than tabosc4~ offers. The relationship between the two +is the same as between cos~ and osc~ \, although the units are different +between cos~ and tabread4~. Cos~ assumes input is normalized from 0 +to 1 (and will wrap around as needed.) Tabread4~ takes values from +1 to n-2 where n is the number of points in the table-- for a 259-point +table such as we have here \, it's 1 to 129 (so the "good" segment +is 128 samples long.); +#X text 30 508 You would use tabread4~ (as opposed to tabosc4~) if +you need direct control of the phase \, for instance if you to advance +nonlinearly through the table. In the case shown here \, the "squeeze" +factor makes the phase grow to a value at least \, and possibly much +graeater than \, 129 (to which tabread4~ then limits it). So the resulting +waveform is compressed in time.; +#X obj 250 128 +~ 128; +#X text 554 624 updated for Pd version 0.37; +#X connect 1 0 2 1; +#X connect 2 0 1 0; +#X connect 3 0 2 2; +#X connect 5 0 12 0; +#X connect 6 0 2 0; +#X connect 6 0 20 0; +#X connect 7 0 6 0; +#X connect 8 0 5 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 25 0; +#X connect 12 0 7 0; +#X connect 21 0 20 0; +#X connect 25 0 12 1; diff --git a/desiredata/doc/3.audio.examples/B04.tabread4.interpolation.pd b/desiredata/doc/3.audio.examples/B04.tabread4.interpolation.pd new file mode 100644 index 00000000..18aef089 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B04.tabread4.interpolation.pd @@ -0,0 +1,44 @@ +#N canvas 137 102 781 520 12; +#X graph graph1 0 -1.02 10 1.02 468 159 648 29; +#X array waveform13 11 float 1; +#A 0 1 1 1 1 1 1 1 -1 -1 -1 -1; +#X pop; +#X text 533 502 updated for Pd version 0.34; +#X obj 156 157 +~ 1; +#X text 21 81 phase; +#X text 20 96 generation -->; +#X text 25 117 range; +#X text 24 132 adjustment -->; +#X graph graph3 0 -1.02 440 1.02 469 362 769 222; +#X array wave-out13 441 float 0; +#X pop; +#X msg 177 216 bang; +#X text 223 217 <--click to graph; +#N canvas 11 418 523 216 other-stuff 0; +#X obj 41 49 loadbang; +#X msg 39 81 \; waveform13 0 1 1 1 1 1 1 1 -1 -1 -1 -1 \; waveform13 +xlabel -1.2 0 1 2 3 4 5 6 7 8 9 10 \; pd dsp 1; +#X connect 0 0 1 0; +#X restore 626 426 pd other-stuff; +#X obj 156 247 tabwrite~ wave-out13; +#X obj 156 184 tabread4~ waveform13; +#X obj 156 131 *~ 8; +#X obj 156 95 phasor~ 220; +#X text 36 22 4-POINT INTERPOLATION IN DETAIL; +#X obj 216 316 sig~ 220; +#X obj 216 346 tabosc4~ waveform13; +#X text 35 293 (this would be; +#X text 36 313 equivalent to the; +#X text 110 333 above) -->; +#X text 18 409 This patch demonstrates 4-point interpolation in tabread4~. +The 11-point table \, waveform13 \, contains a transition from from +1 to -1 \, which is "smoothed" as seen in wave-out13. There's no such +transition at the wraparoind point--the interpolation always happens +between 4 consccutive samples of the table \, disregarding wraparound. +; +#X connect 2 0 12 0; +#X connect 8 0 11 0; +#X connect 12 0 11 0; +#X connect 13 0 2 0; +#X connect 14 0 13 0; +#X connect 16 0 17 0; diff --git a/desiredata/doc/3.audio.examples/B05.tabread.FM.pd b/desiredata/doc/3.audio.examples/B05.tabread.FM.pd new file mode 100644 index 00000000..0dff773e --- /dev/null +++ b/desiredata/doc/3.audio.examples/B05.tabread.FM.pd @@ -0,0 +1,107 @@ +#N canvas 55 137 777 467 12; +#N canvas 0 0 450 300 graph1 0; +#X array pitchmod14 131 float 1; +#A 0 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077 +0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 +0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 +0.863077 0.863077 0.863077 0.863077 0.863077 0.831692 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +0.847385 0.863077 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +-0.800308 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308 +-0.800308 -0.800308 -0.800308 -0.800308 -0.800308; +#X coords 0 1.02 130 -1.02 258 130 1; +#X restore 462 30 graph; +#X floatatom 191 277 0 0 100 0 - - -; +#N canvas 159 26 532 285 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 426 180 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 397 110 moses 1; +#X obj 83 148 dbtorms; +#X obj 397 85 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 20 155 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 105 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 90 outlet; +#X msg 214 65 \; pd dsp 1; +#X obj 83 198 line~; +#X obj 20 207 *~; +#X obj 20 232 dac~; +#X obj 83 173 pack 0 50; +#X text 20 132 audio; +#X text 96 114 show level; +#X obj 426 155 t b; +#X obj 20 181 hip~ 1; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 12 0; +#X connect 5 0 12 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 26 0; +#X connect 8 1 4 1; +#X connect 9 0 23 0; +#X connect 10 0 1 1; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 11 0 17 0; +#X connect 13 0 27 0; +#X connect 14 0 16 0; +#X connect 14 0 19 0; +#X connect 17 0 18 0; +#X connect 20 0 21 1; +#X connect 21 0 22 0; +#X connect 21 0 22 1; +#X connect 23 0 20 0; +#X connect 26 0 5 0; +#X connect 27 0 21 0; +#X restore 153 305 pd output; +#X msg 229 278 MUTE; +#X floatatom 153 95 4 0 0 0 - - -; +#X text 153 69 frequency; +#X floatatom 195 206 4 0 0 0 - - -; +#X text 155 50 modulation; +#X obj 152 157 *~; +#X text 255 150 modulation; +#X text 253 169 depth; +#X floatatom 201 157 4 0 0 0 - - -; +#X obj 152 205 +~; +#X text 250 212 frequency; +#X obj 152 237 osc~; +#X obj 153 122 tabosc4~ pitchmod14; +#X text 254 194 carrier; +#X text 33 8 FREQUENCY MODULATION BY WAVETABLE; +#X text 47 356 This tabosc4~ controls the pitch of a sinusoidal oscillator +(osc~). Try changing the waveform as well as the three familiar parameters. +; +#X text 520 438 updated for Pd version 0.37; +#X connect 1 0 2 1; +#X connect 2 0 1 0; +#X connect 3 0 2 2; +#X connect 4 0 15 0; +#X connect 6 0 12 1; +#X connect 8 0 12 0; +#X connect 11 0 8 1; +#X connect 12 0 14 0; +#X connect 14 0 2 0; +#X connect 15 0 8 0; diff --git a/desiredata/doc/3.audio.examples/B06.table.switching.pd b/desiredata/doc/3.audio.examples/B06.table.switching.pd new file mode 100644 index 00000000..558f91c4 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B06.table.switching.pd @@ -0,0 +1,127 @@ +#N canvas 55 137 835 504 12; +#X graph graph1 0 -1.02 130 1.02 565 153 823 23; +#X array waveshape15a 131 float 1; +#A 0 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077 +0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 +0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 +0.863077 0.863077 0.863077 0.863077 0.863077 0.831692 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +0.847385 0.863077 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 +-0.800308 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308 +-0.800308 -0.800308 -0.800308 -0.800308 -0.800308; +#X pop; +#X floatatom 194 299 0 0 100; +#N canvas 159 26 532 285 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 426 180 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 397 110 moses 1; +#X obj 83 148 dbtorms; +#X obj 397 85 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 20 155 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 105 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 90 outlet; +#X msg 214 65 \; pd dsp 1; +#X obj 83 198 line~; +#X obj 20 207 *~; +#X obj 20 232 dac~; +#X obj 83 173 pack 0 50; +#X text 20 132 audio; +#X text 96 114 show level; +#X obj 426 155 t b; +#X obj 20 181 hip~ 1; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 12 0; +#X connect 5 0 12 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 26 0; +#X connect 8 1 4 1; +#X connect 9 0 23 0; +#X connect 10 0 1 1; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 11 0 17 0; +#X connect 13 0 27 0; +#X connect 14 0 16 0; +#X connect 14 0 19 0; +#X connect 17 0 18 0; +#X connect 20 0 21 1; +#X connect 21 0 22 0; +#X connect 21 0 22 1; +#X connect 23 0 20 0; +#X connect 26 0 5 0; +#X connect 27 0 21 0; +#X restore 156 327 pd output; +#X msg 232 300 MUTE; +#X text 581 481 updated for Pd version 0.34; +#X text 33 8 SWITCHING BETWEEN TABLES; +#X graph graph1 0 -1.02 130 1.02 565 308 823 178; +#X array waveshape15b 131 float 1; +#A 0 -0.659077 -0.643385 -0.643385 -0.627692 -0.612 -0.612 -0.596308 +-0.596308 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615 +-0.580615 -0.596308 -0.596308 -0.596308 -0.596308 -0.596308 -0.596308 +-0.596308 -0.596308 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615 +-0.580615 -0.580615 -0.580615 -0.564923 -0.549231 -0.549231 -0.533538 +-0.517846 -0.517846 -0.517846 -0.517846 -0.517846 -0.517846 -0.517846 +-0.517846 -0.533538 -0.549231 -0.580615 -0.580615 0.847385 0.847385 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077 +0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 -0.800308 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.768923 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.768923 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 +-0.784615 -0.784615 -0.784615 -0.800308 -0.800308 -0.800308 -0.800308 +-0.800308 -0.800308 -0.800308; +#X pop; +#X obj 156 274 tabosc4~ waveshape15a; +#X obj 156 186 sig~ 110; +#X msg 181 215 set waveshape15a; +#X msg 182 244 set waveshape15b; +#X text 20 51 During a performance you're unlikely to want to draw +or recalculate wavetables on the fly \, because you don't want to give +Pd computationally intensive atomic tasks that could make Pd miss a +DAC deadline. Instead \, use "set" mesages to switch tabosc~ or tabread4~ +between pre-prepared tables. Indeed \, you will eventually want to +save screen space by throwing all your wavetables in a subpatch somewhere. +; +#X obj 161 401 table waveshape15c 131; +#X text 41 362 There's also a "text object" hook so that you can have +arrays with parametrizable names and sizes:; +#X text 31 431 You would use this if you want to include one or more +arrays in an abstraction. In this invocation you can't save the state +of the array--instead \, juts read it in from a file or calculate it +at startup.; +#X connect 1 0 2 1; +#X connect 2 0 1 0; +#X connect 3 0 2 2; +#X connect 7 0 2 0; +#X connect 8 0 7 0; +#X connect 9 0 7 0; +#X connect 10 0 7 0; diff --git a/desiredata/doc/3.audio.examples/B07.sampler.pd b/desiredata/doc/3.audio.examples/B07.sampler.pd new file mode 100644 index 00000000..632c1d03 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B07.sampler.pd @@ -0,0 +1,52 @@ +#N canvas 11 3 915 618 12; +#X obj 37 217 hip~ 5; +#X text 96 219 high pass filter to cut DC; +#N canvas 0 0 450 300 graph1 0; +#X array sample-table 44104 float 0; +#X coords 0 1.02 44103 -1.02 200 130 1; +#X restore 585 20 graph; +#X obj 37 185 tabread4~ sample-table; +#X obj 37 150 line~; +#X obj 37 101 * 441; +#X floatatom 37 47 0 0 100 0 - - -; +#X obj 37 125 pack 0 100; +#X text 102 13 SCRATCH MACHINE; +#X text 72 48 <-- read point in 100ths of a second; +#X text 94 101 convert to SAMPLES (441 samples in 0.01 sec); +#X obj 405 235 loadbang; +#X text 246 174 read from the table; +#X text 237 192 (the input is the index in samples); +#X text 16 482 For more on reading and writing soundfiles to tables +\, setting their lengths \, etc \, see "arrays" in the "control examples" +series.; +#X text 14 355 This patch introduces the "tabread4~" object \, which +reads audio samples out of a floating-point array \, often called a +"sample table." The input is the index of the sample to read \, counting +from zero. The output is calculated using 4-point cubic interpolation +\, which is adequate for most purposes. Because of the interpolation +scheme \, tabread4~'s input cannot be less than one or greater than +the table length minus two.; +#X text 17 539 Fanatics take note: if you want really high-fidelity +sampling \, use a high-quality resampling program to up-sample your +soundfile to 88200 to drastically reduce interpolation error.; +#X text 591 173 (one second plus three extra; +#X text 593 192 for 4-point interpolation); +#X text 385 304 message to read a soundfile into the table (automatically +sent when you load this patch by the "loadbang" object.); +#X text 84 150 convert smoothly to audio signal; +#X text 84 62 (range is 0-100.) YOU ONLY HEAR OUTPUT; +#X text 85 78 WHEN THIS IS 0-100 AND ACTIVELY CHANGING.; +#X text 596 589 updated for Pd version 0.33; +#X text 584 151 --- 44103 samples ---; +#X msg 405 259 read ../sound/voice.wav sample-table; +#X obj 405 284 soundfiler; +#X obj 36 249 output~; +#X connect 0 0 27 0; +#X connect 0 0 27 1; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 7 0 4 0; +#X connect 11 0 25 0; +#X connect 25 0 26 0; diff --git a/desiredata/doc/3.audio.examples/B08.sampler.loop.pd b/desiredata/doc/3.audio.examples/B08.sampler.loop.pd new file mode 100644 index 00000000..db2362e8 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B08.sampler.loop.pd @@ -0,0 +1,64 @@ +#N canvas 143 17 992 621 12; +#N canvas 0 0 450 300 graph1 0; +#X array tabread4-out 44100 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 632 200 graph; +#N canvas 0 0 450 300 graph1 0; +#X array table17 44103 float 0; +#X coords 0 1.02 44103 -1.02 200 130 1; +#X restore 631 14 graph; +#X obj 568 496 loadbang; +#X obj 65 277 tabwrite~ tabread4-out; +#X obj 34 308 hip~ 5; +#X floatatom 34 54 0 0 0 0 - - -; +#X text 241 215 read from the table; +#X text 49 11 LOOPING SAMPLER; +#X text 83 54 <-- frequency (Hz.); +#X floatatom 65 107 0 0 0 0 - - -; +#X obj 65 133 * 441; +#X obj 34 160 *~ 0; +#X obj 34 187 +~ 1; +#X text 110 248 <-- click to display output; +#X obj 34 80 phasor~ 0; +#X msg 65 245 bang; +#X text 110 108 <-- chunk size (100ths of a second); +#X obj 561 395 adc~ 1; +#X msg 575 422 bang; +#X text 615 423 <-- click here to record your own sample; +#X text 678 501 v-- re-read the original sample; +#X text 14 540 In this patch you will frequently hear discontinuities +at the looping point. If you're working in a studio \, you can sometimes +find "good" loop points for samples. Another approach \, better for +live situations \, is shown in the next patch.; +#X text 80 159 <-- readjust phase for range 0 - (chunk size); +#X text 79 187 <-- add one to avoid beginning of table; +#X obj 568 549 soundfiler; +#X text 629 153 ---- 44103 samples ----; +#X text 643 336 ---- 1 second ------; +#X obj 34 335 output~; +#X text 742 591 updated for Pd version 0.37; +#X obj 34 216 tabread4~ table17; +#X obj 562 455 tabwrite~ table17; +#X msg 568 524 read ../sound/voice.wav table17; +#X text 16 409 This is a looping sampler in which you specify the number +of loops per second (the frequency) and the size of the chunk to loop. +If the frequency is less than about 20 \, you will hear repetition +and the chunk size will sound like transposition. For frequencies above +50 or so \, you hear a tone whose timbre is controlled by the chunk +size (best kept below 10 or so.) Remember you can use the "shift" key +on number boxes to make fine adjustments.; +#X connect 2 0 31 0; +#X connect 4 0 27 0; +#X connect 4 0 27 1; +#X connect 5 0 14 0; +#X connect 9 0 10 0; +#X connect 10 0 11 1; +#X connect 11 0 12 0; +#X connect 12 0 29 0; +#X connect 14 0 11 0; +#X connect 15 0 3 0; +#X connect 17 0 30 0; +#X connect 18 0 30 0; +#X connect 29 0 4 0; +#X connect 29 0 3 0; +#X connect 31 0 24 0; diff --git a/desiredata/doc/3.audio.examples/B09.sampler.loop.smooth.pd b/desiredata/doc/3.audio.examples/B09.sampler.loop.smooth.pd new file mode 100644 index 00000000..818d9206 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B09.sampler.loop.smooth.pd @@ -0,0 +1,72 @@ +#N canvas 75 15 973 599 12; +#N canvas 0 0 450 300 graph1 0; +#X array cos-output 44100 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 724 191 graph; +#N canvas 0 0 450 300 graph1 0; +#X array table18 44103 float 0; +#X coords 0 1.02 44103 -1.02 200 130 1; +#X restore 721 16 graph; +#X obj 584 491 loadbang; +#X obj 45 249 hip~ 5; +#X floatatom 46 50 0 0 0 0 - - -; +#X text 85 49 <-- frequency (Hz.); +#X floatatom 132 87 0 0 0 0 - - -; +#X obj 132 114 * 441; +#X obj 110 163 +~ 1; +#X text 171 86 <-- chunk size (100ths of a second); +#X obj 584 404 adc~ 1; +#X msg 599 429 bang; +#X text 40 9 ENVELOPING YOUR LOOPING SAMPLER; +#X obj 45 139 -~ 0.5; +#X obj 45 189 cos~; +#X obj 45 222 *~; +#X obj 584 545 soundfiler; +#X text 736 148 -- 44103 samples ---; +#X text 727 322 ----- 1 second ------; +#X obj 46 77 phasor~; +#X obj 45 164 *~ 0.5; +#X obj 44 281 output~; +#X obj 110 138 *~; +#X text 28 362 Here we apply an amplitude envelope to protect against +discontinuities at the loop point. The envelope is just a cosine wave +from -90 degrees to +90 degrees \, (-pi/2 to pi/2 radians) \, i.e. +\, the part that is zero or positive in sign. The "cos~" object's input +is in cycles (units of 2pi radians) so -1/4 to +1/4 addresses the desired +part of the waveform.; +#X obj 167 247 tabwrite~ cos-output; +#X obj 167 223 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 188 220 <-- click to graph envelope; +#X text 28 476 To see the envelope \, put the phasor on 2 Hz or so +\, click the "graph" button \, and look at "cos-output." This is multiplied +by the tabread4~ output so that it doesn't click when the phase wraps +around.; +#X text 26 545 It is possible to get much more control over the shape +of the envelope \, but this will be taken up later.; +#X obj 110 189 tabread4~ table18; +#X obj 584 456 tabwrite~ table18; +#X msg 584 520 read ../sound/voice.wav table18; +#X text 641 430 <-- click here to record to table; +#X text 675 499 v-- re-read the original sound; +#X text 708 565 updated for Pd version 0.37; +#X connect 2 0 31 0; +#X connect 3 0 21 0; +#X connect 3 0 21 1; +#X connect 4 0 19 0; +#X connect 6 0 7 0; +#X connect 7 0 22 1; +#X connect 8 0 29 0; +#X connect 10 0 30 0; +#X connect 11 0 30 0; +#X connect 13 0 20 0; +#X connect 14 0 15 0; +#X connect 14 0 24 0; +#X connect 15 0 3 0; +#X connect 19 0 13 0; +#X connect 19 0 22 0; +#X connect 20 0 14 0; +#X connect 22 0 8 0; +#X connect 25 0 24 0; +#X connect 29 0 15 1; +#X connect 31 0 16 0; diff --git a/desiredata/doc/3.audio.examples/B10.sampler.scratch.pd b/desiredata/doc/3.audio.examples/B10.sampler.scratch.pd new file mode 100644 index 00000000..38c67b76 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B10.sampler.scratch.pd @@ -0,0 +1,83 @@ +#N canvas 53 232 936 654 12; +#N canvas 0 0 450 300 graph1 0; +#X array table19 44103 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 680 8 graph; +#X obj 40 382 hip~ 5; +#X floatatom 99 51 0 0 0 0 - - -; +#X text 146 50 <-- frequency (Hz.); +#X floatatom 129 106 0 0 0 0 - - -; +#X obj 129 135 * 441; +#X obj 100 158 *~ 0; +#X obj 100 181 +~ 1; +#X msg 194 281 bang; +#X text 164 106 <-- chunk size (100ths of a second); +#X obj 591 369 adc~ 1; +#X obj 591 395 hip~ 5; +#X msg 609 423 bang; +#N canvas 0 0 450 300 graph2 0; +#X array graph19 44100 float 0; +#X coords 0 44100 44100 0 200 130 1; +#X restore 681 196 graph; +#X obj 40 356 *~; +#X obj 123 276 line~; +#X obj 123 228 * 441; +#X floatatom 123 205 0 0 0 0 - - -; +#X obj 123 252 pack 0 100; +#X obj 101 310 +~; +#X text 34 474 In this patch we can loop in any "window" of the input +sample. The "read point" (0-100) gives the starting point of the window +and "chunk" is its size (both in 100ths of a second.) Try \, for example +\, frequency 4 \, sharpness 10 \, chunk size 25 \, and vary the read +point from -25 to 100 \, listening to the result.; +#X text 242 281 <-- graph table index; +#X text 684 337 ----- 1 second ------; +#X obj 595 490 loadbang; +#X text 631 514 v-- re-read the original sample; +#X obj 605 559 soundfiler; +#X text 678 147 ---- 44103 samples ---; +#X obj 591 455 tabwrite~ table19; +#X msg 605 535 read ../sound/voice.wav table19; +#X text 688 628 updated for Pd version 0.37; +#X msg 595 585 \; graph19 ylabel 48000 0 44100; +#X obj 39 103 -~ 0.5; +#X obj 99 76 phasor~; +#X obj 39 127 *~ 0.5; +#X obj 39 150 cos~; +#X text 157 206 <-- read point (100ths of a second); +#X obj 41 406 output~; +#X text 651 422 <-- record; +#X text 36 13 ENVELOPING THE LOOPING SAMPLER; +#X text 37 574 You should hear some doppler shift as you change the +read point. To see why \, click on "graph table index" and quickly +start changing the read point--- you should see entertaining pictures +in "table-index". The next patch shows how to prevent this if you wish +to.; +#X obj 100 336 tabread4~ table19; +#X obj 194 307 tabwrite~ graph19; +#X connect 1 0 36 0; +#X connect 2 0 32 0; +#X connect 4 0 5 0; +#X connect 5 0 6 1; +#X connect 6 0 7 0; +#X connect 7 0 19 0; +#X connect 8 0 41 0; +#X connect 10 0 11 0; +#X connect 11 0 27 0; +#X connect 12 0 27 0; +#X connect 14 0 1 0; +#X connect 15 0 19 1; +#X connect 16 0 18 0; +#X connect 17 0 16 0; +#X connect 18 0 15 0; +#X connect 19 0 40 0; +#X connect 19 0 41 0; +#X connect 23 0 30 0; +#X connect 23 0 28 0; +#X connect 28 0 25 0; +#X connect 31 0 33 0; +#X connect 32 0 6 0; +#X connect 32 0 31 0; +#X connect 33 0 34 0; +#X connect 34 0 14 0; +#X connect 40 0 14 1; diff --git a/desiredata/doc/3.audio.examples/B11.sampler.nodoppler.pd b/desiredata/doc/3.audio.examples/B11.sampler.nodoppler.pd new file mode 100644 index 00000000..1ec362ac --- /dev/null +++ b/desiredata/doc/3.audio.examples/B11.sampler.nodoppler.pd @@ -0,0 +1,85 @@ +#N canvas 177 116 924 622 12; +#N canvas 0 0 450 300 graph1 0; +#X array table20 44103 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 631 10 graph; +#X obj 582 447 loadbang; +#X obj 13 425 hip~ 5; +#X floatatom 87 49 0 0 0 0 - - -; +#X text 126 48 <-- frequency (Hz.); +#X floatatom 150 108 0 0 0 0 - - -; +#X obj 150 133 * 441; +#X obj 50 220 +~ 1; +#X obj 87 73 phasor~ 0; +#X msg 175 273 bang; +#X text 189 107 <-- chunk size (100ths of a second); +#X obj 576 343 adc~ 1; +#X obj 576 367 hip~ 5; +#X msg 591 390 bang; +#X text 630 464 v-- re-read the original sample; +#N canvas 0 0 450 300 graph2 0; +#X array graph20 44100 float 0; +#X coords 0 44100 44100 0 200 130 1; +#X restore 633 179 graph; +#X obj 13 401 *~; +#X obj 72 308 line~; +#X obj 149 242 * 441; +#X floatatom 149 218 0 0 0 0 - - -; +#X obj 72 284 pack 0 100; +#X text 184 217 <-- read point in 100ths of a second; +#X obj 51 356 +~; +#X text 218 272 <-- graph table index; +#X obj 72 332 samphold~; +#X obj 74 170 samphold~; +#X obj 51 196 *~; +#X text 643 315 ----- 1 second ------; +#X text 631 144 ---- 44103 samples ---; +#X obj 591 508 soundfiler; +#X text 21 8 SLIDING STABLE LOOPS WITHOUT DOPPLER SHIFT; +#X msg 582 534 \; graph20 ylabel 48000 0 44100; +#X text 631 390 <-- record; +#X obj 13 451 output~; +#X obj 12 103 -~ 0.5; +#X obj 12 127 *~ 0.5; +#X obj 12 150 cos~; +#X obj 175 353 tabwrite~ graph20; +#X obj 51 381 tabread4~ table20; +#X obj 576 417 tabwrite~ table20; +#X msg 591 484 read ../sound/voice.wav table20; +#X text 11 518 This example differs from the previous one in having +samphold~ objects which allow the chunk size and especially the read +point to change only at points where the phase wraps around. This removes +signal discontinuities (when the chunk size changes) and doppler shift +when the read point is changing.; +#X text 652 592 updated for Pd version 0.37; +#X connect 1 0 31 0; +#X connect 1 0 40 0; +#X connect 2 0 33 0; +#X connect 2 0 33 1; +#X connect 3 0 8 0; +#X connect 5 0 6 0; +#X connect 6 0 25 0; +#X connect 7 0 22 0; +#X connect 8 0 24 1; +#X connect 8 0 25 1; +#X connect 8 0 26 0; +#X connect 8 0 34 0; +#X connect 9 0 37 0; +#X connect 11 0 12 0; +#X connect 12 0 39 0; +#X connect 13 0 39 0; +#X connect 16 0 2 0; +#X connect 17 0 24 0; +#X connect 18 0 20 0; +#X connect 19 0 18 0; +#X connect 20 0 17 0; +#X connect 22 0 37 0; +#X connect 22 0 38 0; +#X connect 24 0 22 1; +#X connect 25 0 26 1; +#X connect 26 0 7 0; +#X connect 34 0 35 0; +#X connect 35 0 36 0; +#X connect 36 0 16 0; +#X connect 38 0 16 1; +#X connect 40 0 29 0; diff --git a/desiredata/doc/3.audio.examples/B12.sampler.transpose.pd b/desiredata/doc/3.audio.examples/B12.sampler.transpose.pd new file mode 100644 index 00000000..fc7a7d14 --- /dev/null +++ b/desiredata/doc/3.audio.examples/B12.sampler.transpose.pd @@ -0,0 +1,109 @@ +#N canvas 107 88 930 596 12; +#N canvas 0 0 450 300 graph1 0; +#X array table21 44103 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 645 291 graph; +#X obj 467 506 loadbang; +#X obj 19 508 hip~ 5; +#X floatatom 10 254 0 0 0 0 - - -; +#X obj 10 279 * 441; +#X obj 10 401 +~ 1; +#X text 47 253 <-- chunk size (100ths of a second); +#X obj 471 402 adc~ 1; +#X obj 471 427 hip~ 5; +#X msg 486 449 bang; +#X obj 44 482 *~; +#X obj 106 404 line~; +#X obj 106 354 * 441; +#X floatatom 106 329 0 0 0 0 - - -; +#X obj 106 379 pack 0 100; +#X text 152 331 <-- read point in 100ths of a second; +#X obj 44 433 +~; +#X obj 106 429 samphold~; +#X obj 10 329 samphold~; +#X obj 10 304 sig~; +#X obj 10 376 *~; +#X text 18 5 CALCULATING LOOP FREQUENCY AS FUNCTION OF TRANSPOSITION +; +#X obj 124 485 r~ phase; +#X obj 10 204 s~ phase; +#X obj 68 304 r~ phase; +#X obj 26 351 r~ phase; +#X obj 164 405 r~ phase; +#X obj 151 299 s chunk-size; +#X floatatom 10 50 0 0 0 0 - - -; +#X text 48 51 <-- transposition (10ths of a halftone); +#X obj 151 274 * 0.01; +#X text 264 287 chunk size; +#X text 264 309 in seconds; +#X obj 21 105 r chunk-size; +#X obj 21 130 t b f; +#X obj 10 154 /; +#X text 80 131 divide speed change by chunk; +#X text 78 152 size to get loop frequency; +#X text 382 75 The transposition is frequency in Hz. divided by chunk +size in seconds. This patch calculates the loop frequency as a function +of desired transposition; +#X text 384 126 Notice now that we get Doppler effects when the chunk +size changes. You can suppress that if you don't want it \, by converting +the chunk size to an audio signal \, sampling and holding it. But then +there would be more work to deal with very low frequencies never triggering +the sample and hold...; +#X obj 467 560 soundfiler; +#X obj 10 27 loadbang; +#X obj 124 509 -~ 0.5; +#X obj 124 533 *~ 0.5; +#X obj 124 556 cos~; +#X obj 19 533 output~; +#X obj 44 458 tabread4~ table21; +#X text 527 449 <-- record; +#X text 560 513 v-- re-read original table; +#X text 682 572 updated for Pd version 0.37; +#X text 647 425 --- 44103 samples ---; +#X obj 10 75 expr pow(2 \, $f1/120); +#X text 199 75 speed change; +#X text 387 208 You might also want to have a way to retrigger the +loop to sync it with some other process. By the time we had all this +built the patch would be fairly involved. For now \, we'll move on +to the next topic...; +#X obj 10 178 phasor~; +#X obj 471 476 tabwrite~ table21; +#X msg 467 533 read ../sound/voice.wav table21; +#X connect 1 0 56 0; +#X connect 2 0 45 0; +#X connect 2 0 45 1; +#X connect 3 0 4 0; +#X connect 3 0 30 0; +#X connect 4 0 19 0; +#X connect 5 0 16 0; +#X connect 7 0 8 0; +#X connect 8 0 55 0; +#X connect 9 0 55 0; +#X connect 10 0 2 0; +#X connect 11 0 17 0; +#X connect 12 0 14 0; +#X connect 13 0 12 0; +#X connect 14 0 11 0; +#X connect 16 0 46 0; +#X connect 17 0 16 1; +#X connect 18 0 20 0; +#X connect 19 0 18 0; +#X connect 20 0 5 0; +#X connect 22 0 42 0; +#X connect 24 0 18 1; +#X connect 25 0 20 1; +#X connect 26 0 17 1; +#X connect 28 0 51 0; +#X connect 30 0 27 0; +#X connect 33 0 34 0; +#X connect 34 0 35 0; +#X connect 34 1 35 1; +#X connect 35 0 54 0; +#X connect 41 0 28 0; +#X connect 42 0 43 0; +#X connect 43 0 44 0; +#X connect 44 0 10 1; +#X connect 46 0 10 0; +#X connect 51 0 35 0; +#X connect 54 0 23 0; +#X connect 56 0 40 0; diff --git a/desiredata/doc/3.audio.examples/B13.sampler.overlap.pd b/desiredata/doc/3.audio.examples/B13.sampler.overlap.pd new file mode 100644 index 00000000..35acc48b --- /dev/null +++ b/desiredata/doc/3.audio.examples/B13.sampler.overlap.pd @@ -0,0 +1,158 @@ +#N canvas 28 47 748 713 12; +#X obj 19 511 hip~ 5; +#X floatatom 25 38 0 0 100 0 - - -; +#X obj 25 63 * 441; +#X obj 20 380 +~ 1; +#X text 69 35 <-- chunk size (100ths of a second); +#X obj 20 458 *~; +#X obj 26 211 line~; +#X obj 26 161 * 441; +#X floatatom 26 136 0 0 100 0 - - -; +#X obj 26 186 pack 0 100; +#X text 60 137 <-- read point in 100ths of a second; +#X obj 20 409 +~; +#X obj 76 408 samphold~; +#X obj 20 308 samphold~; +#X obj 20 355 *~; +#X obj 185 369 r~ phase; +#X obj 418 210 s~ phase; +#X obj 108 308 r~ phase; +#X obj 42 332 r~ phase; +#X obj 96 383 r~ phase; +#X obj 77 82 s chunk-size; +#X floatatom 418 56 0 0 0 0 - - -; +#X obj 77 57 * 0.01; +#X text 189 58 chunk size; +#X text 189 80 in seconds; +#X obj 429 111 r chunk-size; +#X obj 429 136 t b f; +#X obj 418 160 /; +#X obj 418 33 loadbang; +#X obj 185 393 -~ 0.5; +#X obj 185 417 *~ 0.5; +#X obj 185 440 cos~; +#X obj 19 536 output~; +#X text 486 684 updated for Pd version 0.37; +#X obj 418 81 expr pow(2 \, $f1/120); +#X text 607 81 speed change; +#X obj 418 184 phasor~; +#X text 18 5 TWO OVERLAPPING SAMPLE READ ELEMENTS; +#N canvas 30 567 660 275 table 0; +#N canvas 0 0 450 300 graph1 0; +#X array table22 44103 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 442 61 graph; +#X text 444 195 --- 44103 samples ---; +#X obj 41 148 loadbang; +#X obj 45 44 adc~ 1; +#X obj 45 69 hip~ 5; +#X msg 60 91 bang; +#X obj 41 202 soundfiler; +#X text 101 91 <-- record; +#X text 134 155 v-- re-read original table; +#X obj 45 118 tabwrite~ table22; +#X msg 41 175 read ../sound/voice.wav table22; +#X connect 2 0 10 0; +#X connect 3 0 4 0; +#X connect 4 0 9 0; +#X connect 5 0 9 0; +#X connect 10 0 6 0; +#X restore 567 327 pd table; +#X obj 25 110 s chunk-size-samples; +#X text 211 112 ... and in samples; +#X obj 26 234 s~ read-pt; +#X obj 77 360 r~ read-pt; +#X obj 505 203 +~ 0.5; +#X obj 506 229 wrap~; +#X obj 506 254 s~ phase2; +#X obj 20 283 r chunk-size-samples; +#X obj 274 391 +~ 1; +#X obj 274 469 *~; +#X obj 274 420 +~; +#X obj 329 419 samphold~; +#X obj 274 319 samphold~; +#X obj 274 366 *~; +#X obj 439 404 -~ 0.5; +#X obj 439 428 *~ 0.5; +#X obj 439 451 cos~; +#X obj 330 371 r~ read-pt; +#X obj 274 294 r chunk-size-samples; +#X obj 363 320 r~ phase2; +#X obj 296 343 r~ phase2; +#X obj 439 380 r~ phase2; +#X obj 339 394 r~ phase2; +#X obj 19 487 +~; +#X text 453 56 <-- transposition \, halftones/10; +#X text 456 159 loop frequency; +#X text 566 190 second phase signal; +#X text 566 210 out of phase from; +#X text 565 231 first one; +#X text 70 265 copy 1; +#X text 327 274 copy 2; +#X text 118 503 Here is the previous patch modified to use two copies +of the sample reader \, 180 degrees out of phase. The second sawtooth +signal is derived from the first one by adding a constant (0.5) and +wrapping the result to fit again between zero and one. The result is +the "phase2" signal.; +#X text 119 584 The computation of "chunk-size-samples" (as a message) +and "read-pt" (an audio signal) is the same for both copies and is +separated out at top left. At top right is the same loop frequency +calculation as before.; +#X text 120 654 Finally \, the two copies' outputs are added and the +result sent to the audio output.; +#X obj 20 434 tabread4~ table22; +#X obj 274 445 tabread4~ table22; +#X connect 0 0 32 0; +#X connect 0 0 32 1; +#X connect 1 0 2 0; +#X connect 1 0 22 0; +#X connect 2 0 39 0; +#X connect 3 0 11 0; +#X connect 5 0 62 0; +#X connect 6 0 41 0; +#X connect 7 0 9 0; +#X connect 8 0 7 0; +#X connect 9 0 6 0; +#X connect 11 0 73 0; +#X connect 12 0 11 1; +#X connect 13 0 14 0; +#X connect 14 0 3 0; +#X connect 15 0 29 0; +#X connect 17 0 13 1; +#X connect 18 0 14 1; +#X connect 19 0 12 1; +#X connect 21 0 34 0; +#X connect 22 0 20 0; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X connect 26 1 27 1; +#X connect 27 0 36 0; +#X connect 28 0 21 0; +#X connect 29 0 30 0; +#X connect 30 0 31 0; +#X connect 31 0 5 1; +#X connect 34 0 27 0; +#X connect 36 0 16 0; +#X connect 36 0 43 0; +#X connect 42 0 12 0; +#X connect 43 0 44 0; +#X connect 44 0 45 0; +#X connect 46 0 13 0; +#X connect 47 0 49 0; +#X connect 48 0 62 1; +#X connect 49 0 74 0; +#X connect 50 0 49 1; +#X connect 51 0 52 0; +#X connect 52 0 47 0; +#X connect 53 0 54 0; +#X connect 54 0 55 0; +#X connect 55 0 48 1; +#X connect 56 0 50 0; +#X connect 57 0 51 0; +#X connect 58 0 51 1; +#X connect 59 0 52 1; +#X connect 60 0 53 0; +#X connect 61 0 50 1; +#X connect 62 0 0 0; +#X connect 73 0 5 0; +#X connect 74 0 48 0; diff --git a/desiredata/doc/3.audio.examples/B14.sampler.rockafella.pd b/desiredata/doc/3.audio.examples/B14.sampler.rockafella.pd new file mode 100644 index 00000000..20416b6b --- /dev/null +++ b/desiredata/doc/3.audio.examples/B14.sampler.rockafella.pd @@ -0,0 +1,166 @@ +#N canvas 123 36 683 718 12; +#X obj 6 529 hip~ 5; +#X floatatom 8 47 4 0 100 0 - - -; +#X obj 7 476 *~; +#X floatatom 7 123 0 0 200 0 - - -; +#X obj 7 378 +~; +#X obj 6 330 samphold~; +#X obj 7 354 *~; +#X obj 172 385 r~ phase; +#X obj 357 210 s~ phase; +#X obj 94 331 r~ phase; +#X obj 42 355 r~ phase; +#X obj 8 90 s chunk-size; +#X floatatom 357 42 0 0 0 0 - - -; +#X text 124 82 chunk size; +#X text 121 96 in seconds; +#X obj 369 79 r chunk-size; +#X obj 369 104 t b f; +#X obj 172 409 -~ 0.5; +#X obj 172 433 *~ 0.5; +#X obj 172 456 cos~; +#X obj 7 560 output~; +#X text 417 698 updated for Pd version 0.37; +#X obj 357 184 phasor~; +#N canvas 30 567 660 275 table 0; +#N canvas 0 0 450 300 graph1 0; +#X array table23 44103 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 442 61 graph; +#X text 444 195 --- 44103 samples ---; +#X obj 41 148 loadbang; +#X obj 45 44 adc~ 1; +#X obj 45 69 hip~ 5; +#X msg 60 91 bang; +#X obj 41 202 soundfiler; +#X text 101 91 <-- record; +#X text 134 155 v-- re-read original table; +#X obj 45 118 tabwrite~ table23; +#X msg 41 175 read ../sound/voice.wav table23; +#X connect 2 0 10 0; +#X connect 3 0 4 0; +#X connect 4 0 9 0; +#X connect 5 0 9 0; +#X connect 10 0 6 0; +#X restore 558 460 pd table; +#X obj 7 263 s~ read-pt; +#X obj 45 378 r~ read-pt; +#X obj 444 203 +~ 0.5; +#X obj 445 229 wrap~; +#X obj 445 254 s~ phase2; +#X obj 6 505 +~; +#X text 391 43 <-- transposition \, halftones/10; +#X obj 8 67 * 0.001; +#X obj 7 215 phasor~; +#X obj 7 402 *~ 44100; +#X obj 7 452 tabread4~ table23; +#X obj 6 305 r chunk-size; +#X obj 6 428 +~ 1; +#X floatatom 365 161 5 0 0 0 - - -; +#X obj 15 169 s precession; +#X obj 482 103 t b f; +#X obj 482 78 r precession; +#X obj 7 146 * 0.01; +#X obj 258 485 *~; +#X obj 258 387 +~; +#X obj 257 339 samphold~; +#X obj 258 363 *~; +#X obj 423 418 -~ 0.5; +#X obj 423 442 *~ 0.5; +#X obj 423 465 cos~; +#X obj 296 387 r~ read-pt; +#X obj 258 411 *~ 44100; +#X obj 258 461 tabread4~ table23; +#X obj 257 314 r chunk-size; +#X obj 257 437 +~ 1; +#X obj 345 340 r~ phase2; +#X obj 293 364 r~ phase2; +#X obj 423 394 r~ phase2; +#X text 37 123 <-- precession \, percent; +#X obj 8 3 loadbang; +#X text 158 3 TIME COMPRESSION/EXPANSION BY LOOPED SAMPLING; +#X text 111 529 Here \, rather than ask you to push the read pointer +back and forth in the sample \, we use a phasor~. This makes it possible +to avoid the samphold~ on the read pointer (r~ read-pt) \, since \, +knowing the precession \, we can correct for it in computing the frequency +of the original phasor~ at right.; +#X text 111 626 We've changed the control for "chunk size" to milliseconds +for added convenience \, and delayed multiplying sample location by +the sample rate (44100) until the last moment \, so that calculations +using "read-pt" and "chunk size" can be in the same units (seconds.) +; +#X msg 8 25 25; +#X floatatom 139 192 4 0 900 0 - - -; +#X obj 139 212 * 0.001; +#X msg 139 170 900; +#X text 48 47 <-- chunk size (msec); +#X obj 357 136 expr (pow(2 \, $f1/120)-$f3)/$f2; +#X obj 139 237 t b f; +#X obj 139 146 loadbang; +#X text 182 188 <-- loop length; +#X text 223 203 (msec); +#X obj 7 239 *~; +#X obj 7 191 /; +#X connect 0 0 20 0; +#X connect 0 0 20 1; +#X connect 1 0 31 0; +#X connect 2 0 29 0; +#X connect 3 0 41 0; +#X connect 4 0 33 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 7 0 17 0; +#X connect 9 0 5 1; +#X connect 10 0 6 1; +#X connect 12 0 67 0; +#X connect 15 0 16 0; +#X connect 16 0 67 0; +#X connect 16 1 67 1; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 2 1; +#X connect 22 0 8 0; +#X connect 22 0 26 0; +#X connect 25 0 4 1; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 29 0 0 0; +#X connect 31 0 11 0; +#X connect 32 0 72 0; +#X connect 33 0 36 0; +#X connect 34 0 2 0; +#X connect 35 0 5 0; +#X connect 36 0 34 0; +#X connect 39 0 67 0; +#X connect 39 1 67 2; +#X connect 40 0 39 0; +#X connect 41 0 38 0; +#X connect 41 0 73 0; +#X connect 42 0 29 1; +#X connect 43 0 50 0; +#X connect 44 0 45 0; +#X connect 45 0 43 0; +#X connect 46 0 47 0; +#X connect 47 0 48 0; +#X connect 48 0 42 1; +#X connect 49 0 43 1; +#X connect 50 0 53 0; +#X connect 51 0 42 0; +#X connect 52 0 44 0; +#X connect 53 0 51 0; +#X connect 54 0 44 1; +#X connect 55 0 45 1; +#X connect 56 0 46 0; +#X connect 58 0 62 0; +#X connect 62 0 1 0; +#X connect 63 0 64 0; +#X connect 64 0 68 0; +#X connect 64 0 72 1; +#X connect 65 0 63 0; +#X connect 67 0 22 0; +#X connect 67 0 37 0; +#X connect 68 0 73 0; +#X connect 68 1 73 1; +#X connect 69 0 65 0; +#X connect 72 0 24 0; +#X connect 73 0 32 0; diff --git a/desiredata/doc/3.audio.examples/C01.nyquist.pd b/desiredata/doc/3.audio.examples/C01.nyquist.pd new file mode 100644 index 00000000..256da0e3 --- /dev/null +++ b/desiredata/doc/3.audio.examples/C01.nyquist.pd @@ -0,0 +1,102 @@ +#N canvas 601 188 580 659 12; +#N canvas 0 0 450 300 graph1 0; +#X array table24 259 float 1; +#A 0 -0.294693 0 0.294693 0.4 0.28948 0.10749 0.022875 0.0789655 0.181673 +0.218249 0.171348 0.115564 0.119192 0.169863 0.201356 0.178657 0.137857 +0.138353 0.188891 0.23571 0.22487 0.164534 0.115848 0.125265 0.176634 +0.214361 0.205655 0.169043 0.14204 0.134157 0.124033 0.0997798 0.0859507 +0.118173 0.195202 0.270956 0.301868 0.293569 0.285908 0.289835 0.256276 +0.128881 -0.0684912 -0.215994 -0.195335 -0.0145421 0.174701 0.203986 +0.0451069 -0.159794 -0.231026 -0.119011 0.0575033 0.135323 0.0628509 +-0.0665307 -0.124779 -0.0776696 0.000279083 0.0247376 -0.00546273 -0.0222151 +0.017933 0.0755681 0.0749102 4.97367e-06 -0.0729564 -0.0490464 0.0834901 +0.232853 0.286943 0.213202 0.0759584 -0.0357248 -0.0863297 -0.101697 +-0.115455 -0.125625 -0.107127 -0.0530433 0.012152 0.0608637 0.0902219 +0.111597 0.119683 0.0910146 0.0236817 -0.0326555 -0.0100379 0.100844 +0.216022 0.223032 0.094995 -0.0649958 -0.110291 0.00678482 0.180334 +0.247439 0.144699 -0.0319975 -0.124321 -0.0648335 0.0680811 0.141409 +0.100343 0.00354248 -0.0636733 -0.0891566 -0.131987 -0.227286 -0.316392 +-0.293048 -0.12222 0.100475 0.222686 0.173879 0.0281889 -0.0714016 +-0.0482686 0.0482418 0.108884 0.0773858 -0.00559103 -0.0590099 -0.0454391 +0.00509731 0.0411467 0.0421476 0.0225557 2.40108e-06 -0.0225508 -0.0421448 +-0.0411506 -0.00510821 0.0454302 0.0590142 0.0056084 -0.0773706 -0.108887 +-0.0482625 0.048252 0.0714103 -0.0281575 -0.173853 -0.222693 -0.100517 +0.122172 0.293026 0.316402 0.22731 0.132002 0.0891614 0.063682 -0.00352253 +-0.100324 -0.141412 -0.0681076 0.0648079 0.124324 0.0320316 -0.144663 +-0.247435 -0.180365 -0.00682225 0.110282 0.0650224 -0.0949583 -0.223017 +-0.216038 -0.100873 0.010022 0.0326611 -0.0236657 -0.0910033 -0.119682 +-0.111601 -0.0902271 -0.0608718 -0.0121649 0.0530291 0.107119 0.125625 +0.115458 0.101699 0.0863353 0.0357423 -0.0759289 -0.213176 -0.28694 +-0.232878 -0.0835252 0.0490278 0.0729642 1.4921e-05 -0.0749008 -0.0755765 +-0.0179463 0.0222127 0.00547055 -0.0247352 -0.000292052 0.0776522 0.12478 +0.0665546 -0.062824 -0.135322 -0.0575355 0.118973 0.23102 0.159828 +-0.0450604 -0.203969 -0.174729 0.014495 0.195309 0.21601 0.0685338 +-0.128843 -0.25626 -0.289835 -0.285909 -0.293565 -0.30187 -0.270969 +-0.195221 -0.118186 -0.0859518 -0.0997742 -0.124029 -0.134156 -0.142036 +-0.169035 -0.205649 -0.214364 -0.176646 -0.125273 -0.115843 -0.16452 +-0.22486 -0.235715 -0.188904 -0.13836 -0.137851 -0.178647 -0.201357 +-0.169874 -0.1192 -0.115557 -0.171333 -0.218246 -0.181691 -0.0789875 +-0.0228734 -0.107456 -0.289441 -0.399997 -0.294741 -7.20325e-05 0.294645 +; +#X coords 0 1.02 258 -1.02 258 130 1; +#X restore 93 408 graph; +#X obj 33 288 line~; +#X msg 33 237 500 \, 1423 4000; +#X floatatom 41 262 5 0 0 0 - - -; +#X text 24 556 Synthesis techniques vary in their tendency to make +foldover. For higher pitched sounds you'll want to try out relatively +folvover-resistant ones.; +#X obj 33 342 output~; +#X obj 201 281 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#N canvas 0 0 618 384 make-tab 0; +#X obj 13 28 inlet; +#X obj 99 28 inlet; +#X obj 183 28 inlet; +#X obj 255 29 inlet; +#X msg 38 176 \; table24 sinesum 256 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 +1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 \, normalize +0.4; +#X msg 14 277 \; table24 sinesum 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 \, normalize +0.2; +#X msg 183 101 \; table24 const 0 \, 0 1 1 1 1 1; +#X msg 255 58 \; table24 const 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 2 0 6 0; +#X connect 3 0 7 0; +#X restore 201 355 pd make-tab; +#X obj 232 300 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 263 317 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 295 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 222 276 sine; +#X text 252 297 complex; +#X text 284 314 rectangle; +#X text 313 332 clear; +#X obj 33 315 tabosc4~ table24; +#X text 56 2 THE NYQUIST THEOREM AND FOLDOVER; +#X text 30 33 WARNING: PLAY THIS QUIETLY TO AVOID UNPLEASANTNESS AND +POSSIBLE EAR DAMAGE.; +#X text 29 77 Foldover occurs when you synthesize frequencies greater +than the Nyquist frequency (half the sample rate). In this example +\, the fundamental only reaches 1423 \, but the tables contain high +partials. As the partials sweep upward you hear them reflect off the +Nyquist frequency. Also \, partials can come into contact with each +other causing beating. The value of 1423 was chosen to make the beating +effect especially strong if you're running at a sample rate of 44100 +(the usual one.); +#X text 330 616 updated for Pd version 0.37; +#X text 219 245 waveforms:; +#X connect 1 0 15 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 6 0 7 0; +#X connect 8 0 7 1; +#X connect 9 0 7 2; +#X connect 10 0 7 3; +#X connect 15 0 5 0; +#X connect 15 0 5 1; diff --git a/desiredata/doc/3.audio.examples/C02.sawtooth-foldover.pd b/desiredata/doc/3.audio.examples/C02.sawtooth-foldover.pd new file mode 100644 index 00000000..f52fc548 --- /dev/null +++ b/desiredata/doc/3.audio.examples/C02.sawtooth-foldover.pd @@ -0,0 +1,39 @@ +#N canvas 180 71 562 473 12; +#X obj 155 348 output~; +#X text 310 443 updated for Pd version 0.37; +#X text 56 2 FOLDOVER IN SAWTOOTH WAVES; +#X obj 154 320 clip~ 0 1; +#X obj 155 153 mtof; +#X floatatom 155 131 3 0 0 0 - - -; +#X obj 155 269 *~ 20; +#X obj 155 295 -~ 19; +#X obj 155 177 phasor~; +#N canvas 0 0 560 183 /SUBPATCH/ 0; +#X obj 25 74 loadbang; +#X msg 25 99 61; +#X obj 25 124 outlet; +#X text 7 6 This sets the pitch initially to 61 when the patch is first +opened.; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 155 105 pd; +#X text 190 130 <--pitch; +#X obj 164 206 output~; +#X text 237 205 <--sawtooth amplitude; +#X text 233 373 <--pulse train amplitude; +#X text 28 406 We'll explain more about making pulses later on... this +example is mostly intended as ear training.; +#X text 19 23 In more ordinary kinds of waveforms \, foldover comes +across as a "cheap synth" sound. You can hear the foldover clearly +in the pulse train here \, and less clearly (but still audibly) in +the straight sawtooth \, especially at high pitches.; +#X connect 3 0 0 0; +#X connect 3 0 0 1; +#X connect 4 0 8 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 3 0; +#X connect 8 0 6 0; +#X connect 8 0 11 0; +#X connect 8 0 11 1; +#X connect 9 0 5 0; diff --git a/desiredata/doc/3.audio.examples/C03.zipper.noise.pd b/desiredata/doc/3.audio.examples/C03.zipper.noise.pd new file mode 100644 index 00000000..a49f51ad --- /dev/null +++ b/desiredata/doc/3.audio.examples/C03.zipper.noise.pd @@ -0,0 +1,55 @@ +#N canvas 298 115 555 414 12; +#X obj 42 349 output~; +#X text 302 376 updated for Pd version 0.37; +#X text 56 2 ZIPPER NOISE; +#X obj 43 321 *~; +#X obj 125 350 output~; +#X obj 126 322 *~; +#X obj 65 262 line; +#X obj 149 262 line~; +#N canvas 0 0 450 300 metro 0; +#X obj 88 39 loadbang; +#X msg 87 65 1; +#X obj 87 96 metro 500; +#X obj 87 131 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 87 153 sel 0 1; +#X obj 87 190 outlet; +#X obj 151 192 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 4 1 6 0; +#X restore 65 170 pd metro; +#X obj 65 198 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 132 199 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 65 219 1 300; +#X msg 132 221 0 300; +#X obj 72 290 osc~ 880; +#X text 30 28 Here is a related issue: if we use a (control) line object +to change an amplitude \, it sends ramping control messages \, once +every 20 msec by default. At left we use this to control the amplitude +of a sinusoid. In effect we're multiplying the sinusoid by a staircase +signal (50 increments per second.) Using the signal version \, line~ +\, fixes the problem. Line~ outputs a ramp that is incremented every +sample.; +#X connect 3 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 4 0; +#X connect 5 0 4 1; +#X connect 6 0 3 1; +#X connect 7 0 5 1; +#X connect 8 0 9 0; +#X connect 8 1 10 0; +#X connect 9 0 11 0; +#X connect 10 0 12 0; +#X connect 11 0 6 0; +#X connect 11 0 7 0; +#X connect 12 0 6 0; +#X connect 12 0 7 0; +#X connect 13 0 3 0; +#X connect 13 0 5 0; diff --git a/desiredata/doc/3.audio.examples/C04.control.to.signal.pd b/desiredata/doc/3.audio.examples/C04.control.to.signal.pd new file mode 100644 index 00000000..eed326dd --- /dev/null +++ b/desiredata/doc/3.audio.examples/C04.control.to.signal.pd @@ -0,0 +1,48 @@ +#N canvas 215 77 561 455 12; +#X text 14 7 CONVERTING CONTROL TO SIGNALS; +#X obj 29 350 output~; +#X obj 107 352 output~; +#N canvas 0 0 450 300 metro 0; +#X obj 88 39 loadbang; +#X msg 87 65 1; +#X obj 87 131 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 87 153 sel 0 1; +#X obj 87 190 outlet; +#X obj 151 192 outlet; +#X obj 87 96 metro 2; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 5 0; +#X connect 6 0 2 0; +#X restore 30 242 pd metro; +#X msg 30 268 1 2; +#X msg 97 270 0 2; +#X obj 30 305 line~; +#X obj 108 306 vline~; +#X text 13 107 Here we try out line~ and vline~ as triangle wave generators. +The subpatch is still sending alternating bangs as in the last patch +\, but now at an audible frequency \, every 2 msec.; +#X text 17 172 The effect of line~ rounding breakpoints to the nearest +block (on the order of a millisecond) is that each 4-millisecond-long +cycle has a different shape. Using vline~ resolves the problem.; +#X text 385 437 Updated for Pd 0.37; +#X text 16 411 Sometimes you will want to use vline~ in place of sig~ +for the same reason.; +#X text 15 27 For controlling amplitudes \, line~ \, with its block-aligned +breakpoints \, is accurate enough for most purposes. But certain usages +\, such as this patch \, demand more accuracy. The vline~ object \, +somewhat more expensive than line~ \, can handle breakpoints to sub-sample +accuracy.; +#X connect 3 0 4 0; +#X connect 3 1 5 0; +#X connect 4 0 6 0; +#X connect 4 0 7 0; +#X connect 5 0 6 0; +#X connect 5 0 7 0; +#X connect 6 0 1 0; +#X connect 6 0 1 1; +#X connect 7 0 2 0; +#X connect 7 0 2 1; diff --git a/desiredata/doc/3.audio.examples/C05.sampler.oneshot.pd b/desiredata/doc/3.audio.examples/C05.sampler.oneshot.pd new file mode 100644 index 00000000..f75d5517 --- /dev/null +++ b/desiredata/doc/3.audio.examples/C05.sampler.oneshot.pd @@ -0,0 +1,84 @@ +#N canvas 34 0 985 746 12; +#N canvas 0 0 450 300 graph1 0; +#X array tab28 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 740 126 graph; +#X obj 577 486 loadbang; +#X obj 31 340 hip~ 5; +#X obj 587 345 adc~ 1; +#X obj 587 375 hip~ 5; +#X msg 558 306 bang; +#X text 681 492 v-- re-read the original sample; +#X text 20 6 ONE-SHOT SAMPLER USING LINE~ AS PHASE; +#X obj 31 306 *~; +#X obj 71 279 r cutoff; +#X obj 31 194 r phase; +#X msg 24 37 bang; +#X obj 124 92 delay 5; +#X text 77 37 <-- play the sample; +#X msg 24 128 \; cutoff 0 5; +#X text 34 85 cut the; +#X text 34 104 sound off; +#X text 204 77 Wait for the; +#X text 202 97 cutoff to finish; +#X text 349 121 set the upper line~ to start; +#X text 349 140 at the first sample and go; +#X text 348 161 forever (until the next trigger); +#X text 18 486 To start a note \, first we have to mute the output +in case ther's already something playing---otherwise we'll get a click. +The "cutoff" line~ then takes 5 msec to get to zero. After that amount +of delay \, we reset the phase to sample number 1 and set it in motion. +We want the line~ output to increase by 1 each sample of output \, +so we ask for it to do 4.41e+08 samples in 1e+07 milliseconds.; +#X text 18 602 The cutoff mechanism is still safe if we happen to ask +for two notes in under 5 msec. The second request would reset the delay +\, so that there's no way the delay can possibly fire without the cutoff +line~ at zero.; +#X text 596 305 <-- record; +#X obj 622 405 line~; +#X obj 587 410 *~; +#X text 738 267 ------ 4 seconds ------; +#X obj 655 342 del 3990; +#X msg 655 370 0 10; +#X text 706 371 <--stop recording; +#X text 19 672 We avoid clicking at the end of the table by getting +the table's own contents to go smoothly to zero. To do this we added +a level control to the recording patch that cuts off just before the +recording reaches the end of the table.; +#X text 576 599 this is.; +#X text 578 575 My apologies to Jonathan Harvey whose bell; +#X obj 577 545 soundfiler; +#X text 19 443 Here's how to make a sampler with a line~ object \, +instead of a phasor~ \, to generate the read location signal.; +#X obj 71 306 vline~; +#X obj 30 369 output~; +#X obj 31 224 vline~; +#X obj 558 439 tabwrite~ tab28; +#X msg 577 516 read ../sound/bell.aiff tab28; +#X obj 31 254 tabread4~ tab28; +#X msg 124 127 \; phase 1 \, 4.41e+08 1e+07 \; cutoff 1; +#X msg 497 386 0 \, 1 5; +#X text 719 717 updated for Pd version 0.37; +#X connect 1 0 40 0; +#X connect 2 0 37 0; +#X connect 2 0 37 1; +#X connect 3 0 4 0; +#X connect 4 0 26 0; +#X connect 5 0 28 0; +#X connect 5 0 43 0; +#X connect 5 0 39 0; +#X connect 8 0 2 0; +#X connect 9 0 36 0; +#X connect 10 0 38 0; +#X connect 11 0 14 0; +#X connect 11 0 12 0; +#X connect 12 0 42 0; +#X connect 25 0 26 1; +#X connect 26 0 39 0; +#X connect 28 0 29 0; +#X connect 29 0 25 0; +#X connect 36 0 8 1; +#X connect 38 0 41 0; +#X connect 40 0 34 0; +#X connect 41 0 8 0; +#X connect 43 0 25 0; diff --git a/desiredata/doc/3.audio.examples/C06.signal.to.control.pd b/desiredata/doc/3.audio.examples/C06.signal.to.control.pd new file mode 100644 index 00000000..1c3e4bf0 --- /dev/null +++ b/desiredata/doc/3.audio.examples/C06.signal.to.control.pd @@ -0,0 +1,25 @@ +#N canvas 215 77 561 455 12; +#N canvas 0 0 269 179 metro 0; +#X obj 88 39 loadbang; +#X msg 87 65 1; +#X obj 87 128 outlet; +#X obj 87 96 metro 100; +#X msg 178 70 \; pd dsp 1; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 3 0 2 0; +#X restore 41 247 pd metro; +#X text 374 425 Updated for Pd 0.37; +#X obj 41 316 snapshot~; +#X obj 66 286 phasor~ 1; +#X floatatom 41 347 5 0 0 0 - - -; +#X text 14 7 CONVERTING SIGNALS TO CONTROLS; +#X text 15 35 The snapshot~ object allows you to convert from signals +back to control streams (float messages) -- an opposite of signal~. +The value output is always the end of the most recently computed audio +block \, so that even if you bang it metronomically (as here) it need +not give you samples that are exactly evenly spaced.; +#X connect 0 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 2 0; diff --git a/desiredata/doc/3.audio.examples/C07.envelope.follower.pd b/desiredata/doc/3.audio.examples/C07.envelope.follower.pd new file mode 100644 index 00000000..51f8f56b --- /dev/null +++ b/desiredata/doc/3.audio.examples/C07.envelope.follower.pd @@ -0,0 +1,113 @@ +#N canvas 66 7 617 909 12; +#X text 164 5 ENVELOPE FOLLOWERS; +#X text 10 25 The env~ object reports ths RMS signal level over the +last 256 samples (by default) or any other power of 2 that's at least +twice the block size. The analysis is done in an overlapped fashion +so that results appear every N/2 points if N is the analysis window +size. So the larger the window \, the stabler the result and the less +frequently it appears. Computation time doesn't depend heavily on N. +; +#X text 11 135 Envelope followers are frequently used to detect attacks +and periods of silence. (There are fancier attack detectors out there +\, though.) Here is a simple threshold-based attack and rest detector. +; +#X obj 102 297 dbtorms; +#X obj 23 293 osc~ 440; +#X obj 23 339 env~; +#X floatatom 78 329 0 0 0 0 - - -; +#X floatatom 102 274 0 0 0 0 - - -; +#X msg 451 320 \; pd dsp 1; +#X obj 119 380 t b f; +#X floatatom 119 403 0 0 0 0 - - -; +#X obj 126 458 pack; +#X obj 126 481 route 0 1; +#X obj 126 504 > 55; +#X obj 176 504 < 45; +#X obj 126 527 sel 1; +#X obj 176 527 sel 1; +#X msg 90 538 1; +#X msg 90 516 0; +#X obj 126 564 print attack; +#X obj 119 435 != 0; +#X obj 24 612 t b f; +#X floatatom 15 638 0 0 0 0 - - -; +#X obj 27 688 pack; +#X obj 27 711 route 0 1; +#X obj 27 749 sel 1; +#X msg 6 856 1; +#X msg 7 879 0; +#X obj 20 666 != 0; +#X obj 58 639 < 45; +#X obj 31 783 timer; +#X obj 113 712 sel 0; +#X obj 95 832 sel 0; +#X obj 45 832 sel 1; +#X obj 45 873 print rest; +#X obj 31 806 > 1000; +#X text 162 403 state -- 1 if waiting for low threshold \,; +#X text 199 418 0 if we've attained it and now want the; +#X text 202 434 high one.; +#X text 209 480 route the RMS value according to state; +#X text 239 506 if off \, 55 dB means attack. If on \, 45; +#X text 240 527 dB or less means state changes to off.; +#X text 132 359 ATTACK DETECTION; +#X text 40 594 REST DETECTION; +#X text 100 637 Here we always will test RMS against a low value; +#X text 125 654 but as before we route the result according to; +#X text 147 671 our state \, 1 if "resting" \, 0 if not.; +#X text 163 709 regardless of state \, when RMS isn't low; +#X text 185 724 reset the timer; +#X text 202 846 RMS isn't low enough.; +#X text 120 744 If we're not in rest \, and the RMS is low \,; +#X text 143 761 check elapsed time sinse RMS last wasn't low.; +#X text 122 802 If more than 1 second \, report a rest.; +#X text 170 828 If we're at rest \, pop out of it when; +#X text 11 201 Both detectors are state machines with two states \, +on and off. If on \, a test is run to determine whether to turn off +\, and vice versa. The tests are run at each output of the rms~ object. +; +#X text 355 884 updated for Pd version 0.37; +#X text 109 320 note 3.01 dB difference between; +#X text 113 336 peak and RMS amplitudes.; +#X obj 451 297 loadbang; +#X obj 23 316 *~; +#X connect 3 0 59 1; +#X connect 4 0 59 0; +#X connect 5 0 6 0; +#X connect 5 0 9 0; +#X connect 5 0 21 0; +#X connect 7 0 3 0; +#X connect 9 0 10 0; +#X connect 9 1 11 1; +#X connect 10 0 20 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 14 0; +#X connect 13 0 15 0; +#X connect 14 0 16 0; +#X connect 15 0 17 0; +#X connect 15 0 19 0; +#X connect 16 0 18 0; +#X connect 17 0 10 0; +#X connect 18 0 10 0; +#X connect 20 0 11 0; +#X connect 21 0 22 0; +#X connect 21 1 29 0; +#X connect 22 0 28 0; +#X connect 23 0 24 0; +#X connect 24 0 25 0; +#X connect 24 1 32 0; +#X connect 25 0 30 1; +#X connect 26 0 22 0; +#X connect 27 0 22 0; +#X connect 28 0 23 0; +#X connect 29 0 23 1; +#X connect 29 0 31 0; +#X connect 30 0 35 0; +#X connect 31 0 30 0; +#X connect 32 0 27 0; +#X connect 33 0 26 0; +#X connect 33 0 34 0; +#X connect 35 0 33 0; +#X connect 58 0 8 0; +#X connect 59 0 5 0; diff --git a/desiredata/doc/3.audio.examples/C08.analog.sequencer.pd b/desiredata/doc/3.audio.examples/C08.analog.sequencer.pd new file mode 100644 index 00000000..9ee9e6de --- /dev/null +++ b/desiredata/doc/3.audio.examples/C08.analog.sequencer.pd @@ -0,0 +1,156 @@ +#N canvas 46 22 825 554 12; +#N canvas 0 0 450 300 graph1 0; +#X array 29-sequence 9 float 1; +#A 0 55 550 385 495 165 385 495 275 615; +#X coords 0 500 8 0 200 100 1; +#X restore 621 42 graph; +#X obj 27 426 *~; +#X obj 27 454 hip~ 5; +#N canvas 0 0 450 300 graph1 0; +#X array 29-envelope 103 float 1; +#A 0 -0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.01111 1 0.988889 0.977778 +0.966667 0.955556 0.944444 0.933333 0.922222 0.911111 0.9 0.888889 +0.797778 0.737777 0.677777 0.647777 0.617777 0.557777 0.487777 0.467777 +0.447776 0.417776 0.397776 0.387776 0.377776 0.367776 0.347776 0.327776 +0.317776 0.297776 0.277776 0.267776 0.257776 0.257776 0.277776 0.297776 +0.327776 0.357776 0.377776 0.397776 0.407776 0.427776 0.437776 0.387776 +0.367776 0.347776 0.337776 0.287776 0.277776 0.277776 0.277776 0.267776 +0.267776 0.267776 0.297776 0.317776 0.347776 0.367776 0.367776 0.357776 +0.347776 0.337776 0.307776 0.287776 0.257776 0.227776 0.197776 0.167776 +0.167776 0.167776 0.167776 0.167776 0.157776 0.157776 0.157776 0.157776 +0.147776 0.147776 0.147776 0.137776 0.137776 0.111111 0.1 0.0888889 +0.0777778 0.0666667 0.0555556 0.0444444 0.0333333 0.0222222 0.0111111 +0 -0.0111111; +#X coords 0 1 102 0 200 100 1; +#X restore 622 146 graph; +#N canvas 0 0 450 300 graph1 0; +#X array 29-sample 259 float 1; +#A 0 0.989177 1 0.989177 0.95694 0.903989 0.83147 0.740952 0.634394 +0.514103 0.382684 0.242981 0.0980184 -0.0490663 -0.195089 -0.336888 +-0.471395 -0.595698 -0.707105 -0.803206 -0.88192 -0.941543 -0.980785 +-0.998795 -0.995185 -0.970032 -0.923881 -0.85773 -0.773013 -0.671561 +-0.555573 -0.427558 -0.290288 -0.146734 -3.98038e-06 0.146726 0.290281 +0.427551 0.555566 0.671556 0.773007 0.857726 0.923878 0.97003 0.995184 +0.998796 0.980786 0.941546 0.881924 0.803211 0.707111 0.595704 0.471402 +0.336896 0.195097 0.0490743 -0.0980105 -0.242974 -0.382677 -0.514097 +-0.634388 -0.740946 -0.831465 -0.903986 -0.956938 -0.989175 -1 -0.989178 +-0.956943 -0.903993 -0.831474 -0.740957 -0.6344 -0.51411 -0.382692 +-0.242989 -0.0980263 0.0490584 0.195081 0.336881 0.471388 0.595691 +0.7071 0.803202 0.881916 0.941541 0.980783 0.998795 0.995186 0.970034 +0.923884 0.857734 0.773018 0.671567 0.55558 0.427566 0.290296 0.146742 +1.19412e-05 -0.146719 -0.290273 -0.427544 -0.55556 -0.67155 -0.773002 +-0.857722 -0.923875 -0.970028 -0.995183 -0.998796 -0.980788 -0.941549 +-0.881928 -0.803216 -0.707117 -0.595711 -0.471409 -0.336903 -0.195104 +-0.0490822 0.0980025 0.242966 0.38267 0.51409 0.634382 0.740941 0.831461 +0.903983 0.956936 0.989174 1 0.989179 0.956945 0.903996 0.831479 0.740962 +0.634406 0.514117 0.382699 0.242997 0.0980342 -0.0490504 -0.195073 +-0.336873 -0.471381 -0.595685 -0.707094 -0.803197 -0.881913 -0.941538 +-0.980782 -0.998795 -0.995187 -0.970036 -0.923887 -0.857738 -0.773023 +-0.671573 -0.555586 -0.427573 -0.290303 -0.14675 -1.99019e-05 0.146711 +0.290265 0.427537 0.555553 0.671544 0.772997 0.857718 0.923872 0.970026 +0.995183 0.998797 0.980789 0.941551 0.881931 0.803221 0.707122 0.595717 +0.471416 0.336911 0.195112 0.0490902 -0.0979946 -0.242958 -0.382662 +-0.514083 -0.634375 -0.740936 -0.831457 -0.903979 -0.956933 -0.989173 +-1 -0.98918 -0.956947 -0.904 -0.831483 -0.740968 -0.634412 -0.514124 +-0.382706 -0.243004 -0.0980421 0.0490425 0.195065 0.336866 0.471374 +0.595679 0.707088 0.803192 0.881909 0.941535 0.98078 0.998794 0.995187 +0.970038 0.92389 0.857742 0.773028 0.671579 0.555593 0.42758 0.290311 +0.146758 2.78627e-05 -0.146703 -0.290258 -0.42753 -0.555547 -0.671538 +-0.772992 -0.857714 -0.923868 -0.970024 -0.995182 -0.998797 -0.980791 +-0.941554 -0.881935 -0.803225 -0.707128 -0.595723 -0.471423 -0.336918 +-0.19512 -0.0490981 0.0979867 0.24295 0.382655 0.514076 0.634369 0.74093 +0.831452 0.903976 0.956931 0.989172 1 0.989181; +#X coords 0 1 258 -1 200 100 1; +#X restore 619 281 graph; +#X text 566 533 updated for Pd version 0.37; +#X obj 26 218 tabread~ 29-sequence; +#X obj 106 241 wrap~; +#X obj 106 265 *~ 100; +#X obj 106 289 +~ 1; +#X obj 26 242 phasor~; +#X obj 26 266 -~ 0.5; +#X obj 27 377 cos~; +#X obj 84 336 *~; +#X obj 28 488 output~; +#X obj 84 408 tabread4~ 29-sample; +#X obj 106 313 tabread4~ 29-envelope; +#X obj 84 360 *~ 128; +#X obj 84 384 +~ 129; +#X obj 27 401 +~ 1; +#X obj 26 194 *~ 9; +#N canvas 328 85 609 424 make-tables 0; +#X msg 109 52 bang; +#X obj 109 77 t b b; +#X obj 152 134 f; +#X obj 190 134 + 1; +#X msg 174 106 0; +#X obj 109 103 until; +#X obj 152 162 t f f; +#X obj 27 190 moses 10; +#X obj 18 272 tabwrite 29-envelope; +#X obj 75 159 sel 102; +#X obj 23 218 expr ($f1-1)/10; +#X obj 35 243 expr (101-$f1)/90; +#X msg 120 380 \; 29-sample cosinesum 256 0 0 0 0 0 0 1; +#X msg 120 338 \; 29-sequence 0 55 550 385 495 165 385 495 275 615 +; +#X text 30 8 bang to recalculate the envelope table (I did this but +then went in and changed it with the mouse afterward.); +#X text 84 299 The sequence is just a list of specified frequencies +\; the wavetable is a cosine.; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 1 1 4 0; +#X connect 2 0 3 0; +#X connect 2 0 6 0; +#X connect 2 0 9 0; +#X connect 3 0 2 1; +#X connect 4 0 2 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 6 1 8 1; +#X connect 7 0 10 0; +#X connect 7 1 11 0; +#X connect 9 0 5 1; +#X connect 10 0 8 0; +#X connect 11 0 8 0; +#X restore 689 401 pd make-tables; +#X text 46 1 ANALOG-SYNTH-STYLE SEQUENCER; +#X obj 26 170 phasor~ 0.6; +#X text 27 27 Some control operations can be carried out entirely by +tilde objects passing audio signals around. Here is an imitation of +an analog sequencer and envelope generator. A phasor~ loops through +the "sequence" table at 0.6 Hz \, generating 9 frequencies. Simultaneously +\, by multiplying by 9 and wrapping \, we create a sawtooth at 9*0.6=5.4 +Hz \, which reads a second table for an envelope shape. This becomes +the grain size for a samplerbased on the 18.sampler.looped example +earlier.; +#X text 97 194 main loop: sawtooth of amplitude 9; +#X text 218 219 read frequency sequence; +#X text 162 241 9x original frequency sawtooth; +#X text 173 266 adjust for reading; +#X text 346 266 envelope sample; +#X text 123 336 multiply envelope by audio-frequency sawtooth; +#X text 147 361 adjust amplitude and center for wavetable; +#X text 62 428 multiply by raised-cosine smoothing function; +#X text 478 401 how to make the tables:; +#X connect 1 0 2 0; +#X connect 2 0 14 0; +#X connect 2 0 14 1; +#X connect 6 0 10 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 16 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 11 0 12 0; +#X connect 12 0 19 0; +#X connect 13 0 17 0; +#X connect 15 0 1 1; +#X connect 16 0 13 1; +#X connect 17 0 18 0; +#X connect 18 0 15 0; +#X connect 19 0 1 0; +#X connect 20 0 6 0; +#X connect 20 0 7 0; +#X connect 23 0 20 0; diff --git a/desiredata/doc/3.audio.examples/C09.sample.hold.pd b/desiredata/doc/3.audio.examples/C09.sample.hold.pd new file mode 100644 index 00000000..dc41aacd --- /dev/null +++ b/desiredata/doc/3.audio.examples/C09.sample.hold.pd @@ -0,0 +1,104 @@ +#N canvas 120 85 930 452 12; +#N canvas 0 0 450 300 graph1 0; +#X array samphold 44100 float 0; +#X coords 0 1 44100 0 300 200 1; +#X restore 606 36 graph; +#N canvas 0 0 439 429 tables 0; +#N canvas 0 0 450 300 graph1 0; +#X array dbtorms 123 float 1; +#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05 +2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05 +4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05 +8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828 +0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813 +0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946 +0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489 +0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813 +0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328 +0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526 +0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684 +0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202 +0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838 +0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946 +0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526 +2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341 +6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893; +#X coords 0 10 123 0 200 100 1; +#X restore 78 55 graph; +#X text 280 148 0; +#X text 282 48 10; +#X text 97 158 ------ 123 samples ------; +#N canvas 0 0 450 300 graph2 0; +#X array mtof 130 float 1; +#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499 +12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017 +21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478 +36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705 +61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989 +103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814 +174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183 +293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164 +493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991 +830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51 +1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32 +2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07 +4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88 +7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3 +11839.8 12543.9 13289.8 14080; +#X coords 0 12000 130 0 200 100 1; +#X restore 85 232 graph; +#X text 95 340 ------ 130 samples ------; +#X text 294 325 0; +#X text 296 225 12000; +#X restore 648 280 pd tables; +#X text 67 8 SAMPLE AND HOLD; +#X obj 141 266 phasor~ 5; +#X obj 44 241 phasor~ 7; +#X obj 44 266 samphold~; +#X floatatom 44 216 0 0 0 0 - - -; +#X floatatom 141 211 0 0 0 0 - - -; +#X obj 216 319 tabwrite~ samphold; +#X msg 216 294 bang; +#X obj 44 341 tabread4~ mtof; +#X obj 44 291 *~ 48; +#X obj 44 316 +~ 36; +#X obj 44 366 osc~; +#X msg 216 236 0; +#X text 259 293 <--graph output; +#X obj 44 191 unpack; +#X text 254 233 <-- reset phase; +#X msg 311 131 32 96.33; +#X msg 124 131 5 7; +#X msg 44 131 1 5; +#X msg 78 131 2 11; +#X msg 161 131 3.7 8.8; +#X msg 235 131 3.4 8.9; +#X text 16 31 Another analog favorite \, the sample and hold unit freezes +an audio signal on command. In the Pd version \, the second input of +samphold~ triggers it \, and the first input becomes the output's new +value whenever the trigger decreases from one sample to the next. This +is ideal for updating values when a phasor wraps around.; +#X text 679 428 updated for Pd version 0.37; +#X obj 44 392 output~; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 5 0 11 0; +#X connect 5 0 8 0; +#X connect 6 0 4 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 10 0 13 0; +#X connect 11 0 12 0; +#X connect 12 0 10 0; +#X connect 13 0 26 0; +#X connect 13 0 26 1; +#X connect 14 0 3 1; +#X connect 14 0 4 1; +#X connect 16 0 6 0; +#X connect 16 1 7 0; +#X connect 18 0 16 0; +#X connect 19 0 16 0; +#X connect 20 0 16 0; +#X connect 21 0 16 0; +#X connect 22 0 16 0; +#X connect 23 0 16 0; diff --git a/desiredata/doc/3.audio.examples/C10.monophonic.synth.pd b/desiredata/doc/3.audio.examples/C10.monophonic.synth.pd new file mode 100644 index 00000000..66b14564 --- /dev/null +++ b/desiredata/doc/3.audio.examples/C10.monophonic.synth.pd @@ -0,0 +1,107 @@ +#N canvas 57 27 578 769 12; +#X obj 13 514 mtof; +#X obj 13 463 stripnote; +#X obj 164 519 select; +#X obj 155 413 float; +#X obj 164 381 t b f; +#X obj 164 487 float; +#X text 217 367 f - store pitch below; +#X text 209 415 velocity stored here; +#X text 128 459 off; +#X text 216 486 recall pitch; +#X text 132 2 MONOPHONIC MIDI SYNTH; +#X obj 13 340 unpack; +#X obj 13 273 notein; +#X obj 13 300 pack; +#X obj 94 570 line~; +#X msg 94 544 \$1 100; +#X msg 164 545 0 1000; +#X text 15 75 First \, at top \, incoming MIDI notes are parsed and +used to set pitch and trigger an ADSR envelope. Second \, the envelope +generator itself has been extended to offer controls over the time +and target values via number boxes.; +#X text 17 21 This patch shows how to make a monophonic synthesizer +that could be controlled from a MIDI or voltage-control keyboard--in +this example we assume MIDI.; +#X msg 152 290 55 64; +#X msg 152 316 55 0; +#X msg 95 291 48 64; +#X msg 95 317 48 0; +#X text 14 142 The note-off testing is complicated by the fact that +we have to test both that the velocity is zero \, and further that +the note-off pitch matches the pitch that is now playing (the most +recent note-on pitch.); +#X text 218 387 b - bang to recall velocity; +#X obj 155 442 sel 0; +#X text 177 463 on; +#X obj 16 712 output~; +#X obj 15 688 hip~ 5; +#X obj 14 642 *~; +#X obj 13 541 phasor~; +#X obj 13 565 -~ 0.5; +#X obj 14 593 cos~; +#X obj 102 617 *~; +#X obj 14 617 +~ 1; +#X text 332 741 updated for Pd version 0.37; +#X obj 102 665 cos~; +#X msg 95 268 48 128; +#X text 18 491 pitch; +#X text 19 443 messages; +#X text 210 441 test for note on or off; +#X text 227 520 test against latest; +#X text 270 535 note-on pitch; +#X text 18 407 filter; +#X text 19 425 note-on; +#X obj 15 664 *~; +#X obj 94 517 / 127; +#X text 14 208 The synthesis technique is the same as in the previous +patch \, done in a simpler (but less general) way with a cos~ object +replacing the wavetable lookup.; +#X text 148 571 envelope generator now controls amplitude; +#X text 317 589 as well as grain size; +#X obj 102 641 *~ 2; +#X obj 123 594 +~ 0.5; +#X text 148 687 The +~ 0.5 and *~ 2 are fudge factors.; +#X text 148 648 This replaces the tabread4~; +#X text 146 668 in the previous patch.; +#X text 211 290 These buttons simulate MIDI input.; +#X connect 0 0 30 0; +#X connect 1 0 2 1; +#X connect 1 0 0 0; +#X connect 2 0 16 0; +#X connect 3 0 25 0; +#X connect 4 0 3 0; +#X connect 4 1 5 1; +#X connect 5 0 2 0; +#X connect 11 0 1 0; +#X connect 11 0 4 0; +#X connect 11 1 1 1; +#X connect 11 1 3 1; +#X connect 12 0 13 0; +#X connect 12 1 13 1; +#X connect 13 0 11 0; +#X connect 14 0 45 1; +#X connect 14 0 51 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 19 0 11 0; +#X connect 20 0 11 0; +#X connect 21 0 11 0; +#X connect 22 0 11 0; +#X connect 25 0 5 0; +#X connect 25 1 46 0; +#X connect 28 0 27 0; +#X connect 28 0 27 1; +#X connect 29 0 45 0; +#X connect 30 0 31 0; +#X connect 31 0 33 0; +#X connect 31 0 32 0; +#X connect 32 0 34 0; +#X connect 33 0 50 0; +#X connect 34 0 29 0; +#X connect 36 0 29 1; +#X connect 37 0 11 0; +#X connect 45 0 28 0; +#X connect 46 0 15 0; +#X connect 50 0 36 0; +#X connect 51 0 33 1; diff --git a/desiredata/doc/3.audio.examples/D01.envelope.gen.pd b/desiredata/doc/3.audio.examples/D01.envelope.gen.pd new file mode 100644 index 00000000..cd58d50c --- /dev/null +++ b/desiredata/doc/3.audio.examples/D01.envelope.gen.pd @@ -0,0 +1,50 @@ +#N canvas 173 105 567 576 12; +#X text 246 260 attack; +#X text 317 261 release; +#X obj 248 397 line~; +#X msg 318 355 0 500; +#X text 126 7 ENVELOPE GENERATORS; +#X obj 65 369 phasor~ 50; +#X obj 65 417 *~; +#X obj 65 465 wrap~; +#X msg 247 355 1 2500; +#X obj 65 393 -~ 0.5; +#X msg 182 331 10 200; +#X obj 247 331 del 200; +#X text 26 22 This patch uses an envelope generator to control a sound. +When you hit "attack" two things happen. First \, the line~ object +rises to 10 in 200 milliseconds. Then after a "delay" of the same 200 +msec \, the second message sends the line~ back down to 1 over another +2500 msec. The "release" just ramps us down to zero at the end.; +#X obj 65 513 output~; +#X text 311 550 updated for Pd version 0.37; +#X obj 65 441 +~ 0.5; +#X obj 65 489 hip~ 5; +#X obj 247 280 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 318 281 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 257 308 stop; +#X text 28 121 You can hit the "attack" and/or "release" while something +is still going on from a previous attack or release \, and the envelope +generator does the ``right thing". In particular \, the release button +sends a "stop" to the "del" object \, in case it is still scheduled +to go off from a previous attack.; +#X text 27 218 The synthesis method is a form of waveshaping \, which +is the subject of a later chapter.; +#X connect 2 0 6 1; +#X connect 3 0 2 0; +#X connect 5 0 9 0; +#X connect 6 0 15 0; +#X connect 7 0 16 0; +#X connect 8 0 2 0; +#X connect 9 0 6 0; +#X connect 10 0 2 0; +#X connect 11 0 8 0; +#X connect 15 0 7 0; +#X connect 16 0 13 0; +#X connect 17 0 11 0; +#X connect 17 0 10 0; +#X connect 18 0 3 0; +#X connect 18 0 19 0; +#X connect 19 0 11 0; diff --git a/desiredata/doc/3.audio.examples/D02.adsr.pd b/desiredata/doc/3.audio.examples/D02.adsr.pd new file mode 100644 index 00000000..c2a6a940 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D02.adsr.pd @@ -0,0 +1,42 @@ +#N canvas 40 23 609 630 12; +#N canvas 0 0 450 300 graph1 0; +#X array adsr-output 44100 float 0; +#X coords 0 1.02 44100 -1.02 200 130 1; +#X restore 121 332 graph; +#X text 121 464 ------ 1 second ------; +#X obj 18 92 r trigger; +#X obj 34 168 tabwrite~ adsr-output; +#X obj 56 143 r graphit; +#X msg 261 89 bang; +#X text 305 90 <-- attack and delayed release; +#X obj 272 113 del 500; +#X text 376 196 <-- attack only; +#X msg 261 177 \; pd dsp 1 \; trigger 1 \; graphit bang; +#X text 377 273 <-- release only; +#X msg 260 247 \; pd dsp 1 \; trigger 0 \; graphit bang; +#X msg 272 138 \; trigger 0; +#X text 324 452 -1; +#X text 326 327 1; +#X text 12 27 This patch introduces a simple "adsr" abstraction we'll +use frequently. You can click on the "adsr" object to see what's inside. +; +#X text 16 516 The active ingredient of the ADSR envelope generator +is a single line~ which gets passed messages to make the attack and +release behavior. You can retrigger the ADSR envelope generator all +you wish without having to wait for attacks or releases to finish; +#X text 104 5 ENVELOPE GENERATOR ABSTRACTION; +#X obj 18 118 adsr 1 100 200 50 300; +#X text 356 601 updated for Pd version 0.37; +#X obj 36 195 osc~ 440; +#X obj 17 220 *~; +#X obj 16 249 output~; +#X connect 2 0 18 0; +#X connect 4 0 3 0; +#X connect 5 0 9 0; +#X connect 5 0 7 0; +#X connect 7 0 12 0; +#X connect 18 0 3 0; +#X connect 18 0 21 0; +#X connect 20 0 21 1; +#X connect 21 0 22 0; +#X connect 21 0 22 1; diff --git a/desiredata/doc/3.audio.examples/D03.envelope.dB.pd b/desiredata/doc/3.audio.examples/D03.envelope.dB.pd new file mode 100644 index 00000000..70711f8a --- /dev/null +++ b/desiredata/doc/3.audio.examples/D03.envelope.dB.pd @@ -0,0 +1,100 @@ +#N canvas 158 69 674 673 12; +#X obj 32 80 r trigger; +#X text 85 8 USING ADSR'S OUTPUT AS dB; +#X obj 32 131 tabread4~ dbtorms; +#N canvas 0 0 450 300 graph1 0; +#X array dbtorms 123 float 1; +#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05 +2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05 +4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05 +8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828 +0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813 +0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946 +0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489 +0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813 +0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328 +0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526 +0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684 +0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202 +0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838 +0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946 +0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526 +2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341 +6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893; +#X coords 0 10 123 0 200 100 1; +#X restore 387 83 graph; +#N canvas 461 495 663 358 make-table 0; +#X obj 97 195 moses 2; +#X msg 81 44 bang; +#X obj 81 73 t b b; +#X obj 152 134 f; +#X obj 190 134 + 1; +#X msg 174 106 0; +#X obj 81 102 until; +#X obj 73 162 sel 122; +#X msg 97 226 0; +#X obj 141 227 dbtorms; +#X obj 152 162 t f f; +#X obj 97 259 tabwrite dbtorms; +#X floatatom 435 103 0 0 0 0 - - -; +#X floatatom 435 186 0 0 0 0 - - -; +#X obj 435 157 tabread4 dbtorms; +#X floatatom 331 183 0 0 0 0 - - -; +#X obj 331 154 dbtorms; +#X text 35 12 bang to recalculate the table; +#X text 268 62 check accuracy of reading table against; +#X text 268 81 the "real" dbtorms object.; +#X connect 0 0 8 0; +#X connect 0 1 9 0; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 2 1 5 0; +#X connect 3 0 4 0; +#X connect 3 0 7 0; +#X connect 3 0 10 0; +#X connect 4 0 3 1; +#X connect 5 0 3 1; +#X connect 6 0 3 0; +#X connect 7 0 6 1; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 0 0; +#X connect 10 1 11 1; +#X connect 12 0 14 0; +#X connect 12 0 16 0; +#X connect 14 0 13 0; +#X connect 16 0 15 0; +#X restore 266 351 pd make-table; +#X text 257 327 here's the patch I used to make the table:; +#X obj 53 157 osc~ 440; +#X text 589 176 0; +#X text 590 77 10; +#X text 406 186 ------ 123 samples ------; +#X text 117 306 <-- attack; +#X text 116 362 <-- release; +#X msg 31 347 \; pd dsp 1 \; trigger 0; +#X obj 32 182 *~; +#X msg 30 292 \; pd dsp 1 \; trigger 1; +#X obj 32 106 adsr 100 100 200 70 300; +#X text 28 409 The table is indexed from 1 to 120 so that 1 gives a +true zero out and 120 gives 10 (a 20 dB boost.) The extra 20 dB are +for headroom.; +#X text 25 459 (There's also a "real" dbtorms~ object... but it's almost +certainly much more compute-intensive than tabread4~ \, since it has +to call a library "exp" function.); +#X text 26 518 Notice how the attack sounds different when you retrigger +than when you start from zero. This is because if you go from the steady +state you only rise 30 dB instead of 100 \, so it sounds slower... +a slur effect. If you don't want this \, you might try increasing the +amplitude of retriggered notes in comparison to isolated ones.; +#X text 34 28 For more natural sounding amplitude control \, you can +use the ADSR's output as log amplitude. In practice this is best done +using a lookup table:; +#X obj 31 211 output~; +#X text 406 631 updated for Pd version 0.37; +#X connect 0 0 15 0; +#X connect 2 0 13 0; +#X connect 6 0 13 1; +#X connect 13 0 20 0; +#X connect 13 0 20 1; +#X connect 15 0 2 0; diff --git a/desiredata/doc/3.audio.examples/D04.envelope.quartic.pd b/desiredata/doc/3.audio.examples/D04.envelope.quartic.pd new file mode 100644 index 00000000..5b440ebe --- /dev/null +++ b/desiredata/doc/3.audio.examples/D04.envelope.quartic.pd @@ -0,0 +1,81 @@ +#N canvas 130 66 646 584 12; +#X obj 21 345 osc~; +#X obj 21 370 *~; +#X obj 81 350 line~; +#X obj 21 320 line~; +#X obj 163 455 osc~; +#X obj 212 483 *~; +#X obj 234 366 line~; +#X obj 163 366 line~; +#X obj 163 313 sqrt; +#X obj 163 339 sqrt; +#X obj 234 313 sqrt; +#X obj 234 339 sqrt; +#X obj 163 398 *~; +#X obj 163 428 *~; +#X obj 234 398 *~; +#X obj 234 427 *~; +#X obj 163 288 unpack; +#X obj 234 288 unpack; +#X obj 21 295 r freq; +#X obj 81 326 r amp; +#X obj 163 263 r freq; +#X obj 234 263 r amp; +#X msg 340 277 \; amp 0 5000 \;; +#X msg 340 232 \; amp 1 5000 \;; +#X msg 492 278 \; amp 0 1000 \;; +#X msg 494 232 \; amp 1 1000 \;; +#X msg 337 357 \; freq 1760 5000 \;; +#X msg 338 404 \; freq 55 5000 \;; +#X msg 493 357 \; freq 1760 1000 \;; +#X msg 496 405 \; freq 55 1000 \;; +#X text 90 15 QUARTIC AND LINEAR ENVELOPES COMPARED; +#X obj 341 464 loadbang; +#X msg 341 492 \; amp 1 \; freq 1760; +#X text 22 265 LINEAR; +#X text 168 236 QUARTIC; +#X obj 21 397 output~; +#X obj 212 509 output~; +#X text 14 123 In the quartic example \, for both the amplitude and +the frequency \, we have to take the fourth root of the target value +(which we get by taking square root twice.) Then we raise the line~ +output to the fourth power by squaring twice (the *~ objects \, whose +left and right inlets are the same.) The cost is mostly that of the +four additional *~ objects.; +#X text 350 553 updated for Pd version 0.37; +#X text 19 39 This patch has two sine wave oscillators \, one with +linear envelopes \, the other with quartic ones which sound more uniform. +The message boxes sweep the amplitude and frequency up and down. You +can compare the two to see that quartic-shaped changes sound more uniform +than linear ones.; +#X connect 0 0 1 0; +#X connect 1 0 35 0; +#X connect 1 0 35 1; +#X connect 2 0 1 1; +#X connect 3 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 36 0; +#X connect 5 0 36 1; +#X connect 6 0 14 0; +#X connect 6 0 14 1; +#X connect 7 0 12 0; +#X connect 7 0 12 1; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 11 0 6 0; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 13 0 4 0; +#X connect 14 0 15 0; +#X connect 14 0 15 1; +#X connect 15 0 5 1; +#X connect 16 0 8 0; +#X connect 16 1 7 1; +#X connect 17 0 10 0; +#X connect 17 1 6 1; +#X connect 18 0 3 0; +#X connect 19 0 2 0; +#X connect 20 0 16 0; +#X connect 21 0 17 0; +#X connect 31 0 32 0; diff --git a/desiredata/doc/3.audio.examples/D05.envelope.pitch.pd b/desiredata/doc/3.audio.examples/D05.envelope.pitch.pd new file mode 100644 index 00000000..b91477aa --- /dev/null +++ b/desiredata/doc/3.audio.examples/D05.envelope.pitch.pd @@ -0,0 +1,153 @@ +#N canvas 222 84 686 544 12; +#X obj 48 106 r trigger; +#X obj 48 154 tabread4~ dbtorms; +#X text 144 313 <-- attack; +#X text 568 305 <-- release; +#X obj 48 208 *~; +#N canvas 151 343 812 522 make-table 0; +#X msg 82 49 bang; +#X obj 82 78 t b b; +#X obj 141 142 f; +#X obj 179 142 + 1; +#X msg 150 112 0; +#X obj 82 107 until; +#X obj 141 176 t f f; +#X floatatom 369 67 0 0 0 0 - - -; +#X floatatom 369 127 0 0 0 0 - - -; +#N canvas 0 0 450 300 graph1 0; +#X array dbtorms 123 float 1; +#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05 +2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05 +4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05 +8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828 +0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813 +0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946 +0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489 +0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813 +0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328 +0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526 +0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684 +0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202 +0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838 +0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946 +0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526 +2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341 +6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893; +#X coords 0 10 123 0 200 100 1; +#X restore 538 298 graph; +#X text 740 391 0; +#X text 742 291 10; +#X text 544 403 ------ 123 samples ------; +#N canvas 0 0 450 300 graph2 0; +#X array mtof 130 float 1; +#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499 +12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017 +21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478 +36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705 +61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989 +103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814 +174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183 +293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164 +493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991 +830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51 +1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32 +2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07 +4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88 +7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3 +11839.8 12543.9 13289.8 14080; +#X coords 0 12000 130 0 200 100 1; +#X restore 537 130 graph; +#X obj 283 102 mtof; +#X floatatom 282 127 0 0 0 0 - - -; +#X text 541 237 ------ 130 samples ------; +#X text 746 223 0; +#X text 748 123 12000; +#X obj 81 203 mtof; +#X obj 72 167 sel 129; +#X obj 80 229 tabwrite mtof; +#X obj 369 99 tabread4 mtof; +#X obj 71 418 moses 2; +#X msg 55 267 bang; +#X obj 55 296 t b b; +#X obj 126 357 f; +#X obj 164 357 + 1; +#X msg 148 329 0; +#X obj 55 325 until; +#X obj 47 385 sel 122; +#X msg 71 449 0; +#X obj 115 450 dbtorms; +#X obj 126 385 t f f; +#X obj 71 482 tabwrite dbtorms; +#X text 312 40 ... and test accuracy; +#X text 23 15 patch to recalculate the mtof table; +#X text 107 267 bang to recalculate dbtorms table; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 1 1 4 0; +#X connect 2 0 3 0; +#X connect 2 0 6 0; +#X connect 2 0 20 0; +#X connect 3 0 2 1; +#X connect 4 0 2 1; +#X connect 5 0 2 0; +#X connect 6 0 19 0; +#X connect 6 1 21 1; +#X connect 7 0 14 0; +#X connect 7 0 22 0; +#X connect 14 0 15 0; +#X connect 19 0 21 0; +#X connect 20 0 5 1; +#X connect 22 0 8 0; +#X connect 23 0 31 0; +#X connect 23 1 32 0; +#X connect 24 0 25 0; +#X connect 25 0 29 0; +#X connect 25 1 28 0; +#X connect 26 0 27 0; +#X connect 26 0 30 0; +#X connect 26 0 33 0; +#X connect 27 0 26 1; +#X connect 28 0 26 1; +#X connect 29 0 26 0; +#X connect 30 0 29 1; +#X connect 31 0 34 0; +#X connect 32 0 34 0; +#X connect 33 0 23 0; +#X connect 33 1 34 1; +#X restore 451 222 pd make-table; +#X text 35 6 PITCH ENVELOPES; +#X text 125 24 For pitch envelopes \, unlike amplitude envelopes \, +discontinuities are allowed and sometimes you would rather the envelope +generator actually jump to zero when it's triggered. The "adsr" object +does this for you if you send a negative trigger instead of a positive +one:; +#X obj 280 106 r trigger2; +#X obj 280 178 tabread4~ mtof; +#X obj 280 202 osc~; +#X msg 46 299 \; pd dsp 1 \; trigger 1 \; trigger2 1; +#X text 358 297 <-- attack; +#X msg 249 293 \; pd dsp 1 \; trigger 1 \; trigger2 -1; +#X msg 472 293 \; pd dsp 1 \; trigger 0 \; trigger2 0; +#X obj 280 154 +~ 69; +#X text 358 314 restarting; +#X text 363 331 pitch env; +#X text 37 377 We have added a new table \, mtof \, for converting +audio signals from pitch to frequency. Its range is 1-127 \, so you +want to add a base pitch in before you start reading from it.; +#X text 37 443 This is an extreme use of pitch enveloping. In a real +situation you might want an envelope controlling vibrato depth or the +like instead of straight pitch.; +#X obj 48 130 adsr 100 50 200 90 1000; +#X obj 280 130 adsr 20 200 100 100 1000; +#X text 413 497 updated for Pd version 0.37; +#X obj 48 233 output~; +#X connect 0 0 20 0; +#X connect 1 0 4 0; +#X connect 4 0 23 0; +#X connect 4 0 23 1; +#X connect 8 0 21 0; +#X connect 9 0 10 0; +#X connect 10 0 4 1; +#X connect 15 0 9 0; +#X connect 20 0 1 0; +#X connect 21 0 15 0; diff --git a/desiredata/doc/3.audio.examples/D06.envelope.portamento.pd b/desiredata/doc/3.audio.examples/D06.envelope.portamento.pd new file mode 100644 index 00000000..6542e8b5 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D06.envelope.portamento.pd @@ -0,0 +1,148 @@ +#N canvas 222 84 642 346 12; +#X floatatom 75 227 0 0 0; +#N canvas 159 26 495 266 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 425 178 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 425 153 t b f; +#X obj 397 117 moses 1; +#X obj 83 148 dbtorms; +#X obj 397 92 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 22 181 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 100 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 89 outlet; +#X msg 214 64 \; pd dsp 1; +#X obj 83 194 line~; +#X obj 22 212 *~; +#X obj 22 241 dac~; +#X obj 83 171 pack 0 50; +#X text 20 158 audio; +#X text 93 110 show level; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 13 0; +#X connect 5 0 13 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 8 0; +#X connect 8 0 5 0; +#X connect 9 1 4 1; +#X connect 10 0 24 0; +#X connect 11 0 1 1; +#X connect 11 0 9 0; +#X connect 12 0 10 0; +#X connect 12 0 18 0; +#X connect 14 0 22 0; +#X connect 15 0 17 0; +#X connect 15 0 20 0; +#X connect 18 0 19 0; +#X connect 21 0 22 1; +#X connect 22 0 23 0; +#X connect 22 0 23 1; +#X connect 24 0 21 0; +#X restore 46 255 pd output; +#X msg 123 227 MUTE; +#X text 166 225 <-- output amplitude; +#X obj 46 173 tabread4~ mtof; +#X obj 46 197 osc~; +#N canvas 247 30 505 439 tables 0; +#N canvas 0 0 450 300 graph1 0; +#X array dbtorms 123 float 1; +#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05 +2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05 +4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05 +8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828 +0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813 +0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946 +0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489 +0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813 +0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328 +0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526 +0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684 +0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202 +0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838 +0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946 +0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526 +2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341 +6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893; +#X coords 0 10 123 0 200 100 1; +#X restore 129 49 graph; +#X text 331 142 0; +#X text 333 42 10; +#X text 127 157 ------ 123 samples ------; +#N canvas 0 0 450 300 graph2 0; +#X array mtof 130 float 1; +#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499 +12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017 +21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478 +36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705 +61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989 +103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814 +174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183 +293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164 +493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991 +830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51 +1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32 +2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07 +4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88 +7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3 +11839.8 12543.9 13289.8 14080; +#X coords 0 12000 130 0 200 100 1; +#X restore 136 226 graph; +#X text 128 336 ------ 130 samples ------; +#X text 340 318 0; +#X text 342 218 12000; +#X restore 490 225 pd tables; +#X text 35 6 PORTAMENTO; +#X obj 46 149 line~; +#X obj 46 101 r pitch; +#X msg 316 101 36; +#X msg 345 101 48; +#X msg 372 101 60; +#X msg 429 101 72; +#X msg 401 101 67; +#X msg 483 101 76; +#X msg 457 101 74; +#X obj 451 165 s pitch; +#X msg 514 101 84; +#X msg 544 101 96; +#X floatatom 143 125 0 0 0; +#X text 173 126 <-- change speed; +#X floatatom 451 139 0 0 0; +#X obj 46 125 pack 0 100; +#X obj 388 192 loadbang; +#X msg 387 214 \; pitch 72; +#X text 40 37 Portamento can be done using just line~ \, but you still +might want to sweep in pitch \, not frequency:; +#X text 363 293 updated for Pd version 0.35; +#X connect 0 0 1 1; +#X connect 1 0 0 0; +#X connect 2 0 1 2; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 8 0 4 0; +#X connect 9 0 23 0; +#X connect 10 0 22 0; +#X connect 11 0 22 0; +#X connect 12 0 22 0; +#X connect 13 0 22 0; +#X connect 14 0 22 0; +#X connect 15 0 22 0; +#X connect 16 0 22 0; +#X connect 18 0 22 0; +#X connect 19 0 22 0; +#X connect 20 0 23 1; +#X connect 22 0 17 0; +#X connect 23 0 8 0; +#X connect 24 0 25 0; diff --git a/desiredata/doc/3.audio.examples/D07.additive.pd b/desiredata/doc/3.audio.examples/D07.additive.pd new file mode 100644 index 00000000..c35a47fe --- /dev/null +++ b/desiredata/doc/3.audio.examples/D07.additive.pd @@ -0,0 +1,50 @@ +#N canvas 9 13 684 547 12; +#X obj 37 449 catch~ sum; +#X obj 349 274 s frequency; +#X obj 463 274 s duration; +#X floatatom 463 224 0 0 0 0 - - -; +#X obj 463 249 * 100; +#X obj 349 249 mtof; +#X floatatom 349 224 0 0 0 0 - - -; +#X text 82 7 ADDITIVE SYNTHESIS; +#X text 501 214 duration in tenths; +#X text 503 230 of a second; +#X text 387 223 pitch; +#X text 433 518 updated for Pd version 0.37; +#X obj 37 488 output~; +#X text 26 83 Partial takes as arguments an amplitude \, a relative +frequency \, a detuning frequency \, and a relative duration. You set +absolute duration and pitch using the controls below. Hit the trigger +to make sound.; +#X obj 36 164 partial 1 1 0.56 0; +#X text 27 31 This patch demonstrates using an abstraction \, "partial" +\, to make a simple additive synthesis instrument originally from Jean-Claude +Risset.; +#X obj 349 169 loadbang; +#X msg 349 192 72; +#X msg 463 194 40; +#X obj 352 322 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 385 324 <-- click to play a note; +#X obj 352 358 s trigger; +#X obj 36 189 partial 0.67 0.9 0.56 1; +#X obj 36 214 partial 1 0.65 0.92 0; +#X obj 36 239 partial 1.8 0.55 0.92 1.7; +#X obj 36 264 partial 2.67 0.325 1.19 0; +#X obj 36 289 partial 1.67 0.35 1.7 0; +#X obj 36 314 partial 1.46 0.25 2 0; +#X obj 36 339 partial 1.33 0.2 2.74 0; +#X obj 36 364 partial 1.33 0.15 3 0; +#X obj 36 389 partial 1 0.1 3.76 0; +#X obj 36 414 partial 1.33 0.075 4.07 0; +#X connect 0 0 12 0; +#X connect 0 0 12 1; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 6 0 5 0; +#X connect 16 0 17 0; +#X connect 16 0 18 0; +#X connect 17 0 6 0; +#X connect 18 0 3 0; +#X connect 19 0 21 0; diff --git a/desiredata/doc/3.audio.examples/D08.table.spectrum.pd b/desiredata/doc/3.audio.examples/D08.table.spectrum.pd new file mode 100644 index 00000000..d9257e6c --- /dev/null +++ b/desiredata/doc/3.audio.examples/D08.table.spectrum.pd @@ -0,0 +1,91 @@ +#N canvas 251 127 807 425 12; +#N canvas 0 0 450 300 graph3 0; +#X array spectrum-tab 127 float 1; +#A 0 48.5713 48.5713 48.5713 48.2142 48.2142 48.2142 48.2142 48.2142 +48.2142 48.2142 48.2142 48.2142 48.2142 48.5713 48.5713 48.9284 48.9284 +48.9284 48.9284 48.9284 48.9284 48.9284 48.5713 48.5713 48.5713 48.2142 +48.2142 47.4999 47.1427 46.4285 46.4285 46.0713 46.0713 46.0713 45.7142 +44.9999 44.6428 43.5713 43.2142 42.8571 42.4999 41.7856 38.2143 36.7857 +34.6429 31.7857 30.3572 29.6429 28.5715 27.8572 26.7858 25.3572 25.7144 +23.9287 23.9287 23.5715 23.5715 23.5715 23.5715 23.2144 23.2144 23.2144 +22.8573 22.8573 23.5715 23.9287 23.5715 26.0715 26.0715 48.5713 48.5713 +48.5713 48.2142 47.4999 46.7856 46.7856 17.143 16.4287 16.0716 16.4287 +14.643 13.5716 13.5716 40.7142 40.7142 40.7142 14.643 13.2145 12.8573 +12.5002 12.5002 24.2858 29.6429 30.7143 16.4287 10.7145 11.7859 10.7145 +24.2858 23.5715 17.143 13.9288 9.64309 6.78597 5.71455 5.71455 4.28599 +3.92885 3.92885 3.92885 1.42887 1.42887 1.42887 1.07174 1.07174 1.07174 +0.714596 0.714596 0.714596 0.714596 0.714596 1.07174 1.07174 1.07174 +1.07174 0.714286 0.357143; +#X coords 0 50 126 0 300 140 1; +#X restore 496 136 graph; +#N canvas 98 16 694 474 oscbank 0; +#X obj 36 53 spectrum-partial 1; +#X obj 36 79 spectrum-partial 2; +#X obj 36 105 spectrum-partial 3; +#X obj 36 131 spectrum-partial 4; +#X obj 36 157 spectrum-partial 5; +#X obj 36 183 spectrum-partial 6; +#X obj 36 209 spectrum-partial 7; +#X obj 36 235 spectrum-partial 8; +#X obj 36 261 spectrum-partial 9; +#X obj 36 287 spectrum-partial 10; +#X obj 216 53 spectrum-partial 11; +#X obj 122 382 loadbang; +#X obj 122 407 metro 30; +#X obj 122 433 s poll-table; +#X text 107 21 This is the bank of oscillators--open one to see:; +#X text 72 345 And here we send bangs to "poll-table" needed by the +abstraction.; +#X obj 216 79 spectrum-partial 12; +#X obj 216 105 spectrum-partial 13; +#X obj 216 131 spectrum-partial 14; +#X obj 216 157 spectrum-partial 15; +#X obj 216 183 spectrum-partial 16; +#X obj 216 209 spectrum-partial 17; +#X obj 216 235 spectrum-partial 18; +#X obj 215 261 spectrum-partial 19; +#X obj 215 287 spectrum-partial 20; +#X obj 395 53 spectrum-partial 21; +#X obj 395 78 spectrum-partial 22; +#X obj 395 104 spectrum-partial 23; +#X obj 395 130 spectrum-partial 24; +#X obj 395 156 spectrum-partial 25; +#X obj 395 182 spectrum-partial 26; +#X obj 395 207 spectrum-partial 27; +#X obj 396 234 spectrum-partial 28; +#X obj 395 260 spectrum-partial 29; +#X obj 395 287 spectrum-partial 30; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X restore 17 251 pd oscbank; +#X obj 19 321 catch~ sum-bus; +#X obj 16 153 s pitch; +#X floatatom 16 125 4 0 0 0 - - -; +#X text 43 18 DRAWABLE SPECTRA; +#X floatatom 14 183 4 0 0 0 - - -; +#X obj 14 211 s whammybar; +#N canvas 0 0 650 341 table-setup 0; +#X obj 39 227 loadbang; +#X msg 39 261 \; spectrum-tab xlabel -5 0 12 24 36 48 60 72 84 96 108 +120; +#X text 82 60 comment; +#X connect 0 0 1 0; +#X restore 17 283 pd table-setup; +#X msg 596 65 \; spectrum-tab const 0; +#X text 26 42 In this array \, you can draw a spectral envelope that +will be synthesized by an oscillator bank. Each oscillator in the bank +computes its own frequency and uses it to look up amplitude from the +array.; +#X text 113 254 <-- the oscillator bank; +#X text 71 128 <-- pitch; +#X text 61 185 <-- left or right shift (normally 0); +#X text 157 318 <-- here we just collect the sum of all the partials +which are computed in "oscbank".; +#X text 662 44 CLEAR; +#X text 148 283 <-- make the number labels; +#X obj 19 358 output~; +#X text 556 389 Updated for Pd version 0.37; +#X connect 2 0 17 0; +#X connect 2 0 17 1; +#X connect 4 0 3 0; +#X connect 6 0 7 0; diff --git a/desiredata/doc/3.audio.examples/D09.shepard.tone.pd b/desiredata/doc/3.audio.examples/D09.shepard.tone.pd new file mode 100644 index 00000000..8cb66603 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D09.shepard.tone.pd @@ -0,0 +1,108 @@ +#N canvas 124 20 599 828 12; +#X floatatom 169 520 0 0 0 0 - - -; +#X floatatom 169 446 0 0 0 0 - - -; +#X text 462 208 START; +#X floatatom 190 303 0 0 0 0 - - -; +#X obj 190 280 r incr; +#X obj 168 255 metro 50; +#X floatatom 168 373 5 0 0 0 - - -; +#X obj 168 394 s phase; +#X obj 168 350 +; +#X obj 169 469 s dropoff+; +#X obj 169 622 s interval+; +#X floatatom 169 599 0 0 0 0 - - -; +#X obj 169 543 s pitch+; +#X obj 169 423 r dropoff; +#X obj 169 497 r pitch; +#X obj 169 576 r interval; +#X obj 168 212 r metro; +#X obj 228 345 f; +#X obj 12 212 shepvoice 0; +#X floatatom 83 708 0 0 0 0 - - -; +#X obj 83 685 r rev; +#X obj 138 685 r revtime; +#X floatatom 138 708 0 0 0 0 - - -; +#X obj 228 368 mod 10000; +#X obj 168 327 f; +#X obj 73 742 rev2~; +#X obj 12 769 output~; +#X obj 168 235 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X msg 446 225 \; dropoff 10 \; pitch 60 \; interval 120 \; metro 1 +\; rev 84 \; revtime 87 \; incr -2 \; pd dsp 1; +#X text 27 7 SHEPARD TONE; +#X text 339 804 updated for Pd version 0.37; +#X obj 12 235 shepvoice 500; +#X obj 12 258 shepvoice 1000; +#X obj 12 281 shepvoice 1500; +#X obj 12 304 shepvoice 2000; +#X obj 12 327 shepvoice 2500; +#X obj 12 350 shepvoice 3000; +#X obj 12 373 shepvoice 3500; +#X obj 12 396 shepvoice 4000; +#X obj 12 419 shepvoice 4500; +#X obj 12 442 shepvoice 5000; +#X obj 12 465 shepvoice 5500; +#X obj 12 488 shepvoice 6000; +#X obj 12 511 shepvoice 6500; +#X obj 12 534 shepvoice 7000; +#X obj 12 557 shepvoice 7500; +#X obj 12 580 shepvoice 8000; +#X obj 12 603 shepvoice 8500; +#X obj 12 626 shepvoice 9000; +#X obj 12 649 shepvoice 9500; +#X text 25 31 This patch is a bank of 20 sinusoids \, arranged so that +their frequencies sweep upward or downward in parallel \, and their +amplitudes fade in and out so that each one is quiet when it wraps +around from one end to the other. The overall "phase" computed here +is added to each voice's relative phase (its creation argument). The +"incr" parameter controlls how fast the phase changes \, "dropoff" +the slope at which the amplitudes fall off at the ends \, "pitch" the +center pitch of the cluster \, "interval" the number of (tenths of +halftones) between successive voices \, and "rev" and "revtime" the +reverberator at bottom.; +#X connect 0 0 12 0; +#X connect 1 0 9 0; +#X connect 3 0 24 1; +#X connect 4 0 3 0; +#X connect 5 0 24 0; +#X connect 6 0 7 0; +#X connect 8 0 17 0; +#X connect 8 0 6 0; +#X connect 11 0 10 0; +#X connect 13 0 1 0; +#X connect 14 0 0 0; +#X connect 15 0 11 0; +#X connect 16 0 27 0; +#X connect 17 0 23 0; +#X connect 18 0 31 0; +#X connect 19 0 25 1; +#X connect 20 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 25 2; +#X connect 23 0 8 1; +#X connect 24 0 8 0; +#X connect 25 0 26 0; +#X connect 25 1 26 1; +#X connect 27 0 5 0; +#X connect 31 0 32 0; +#X connect 32 0 33 0; +#X connect 33 0 34 0; +#X connect 34 0 35 0; +#X connect 35 0 36 0; +#X connect 36 0 37 0; +#X connect 37 0 38 0; +#X connect 38 0 39 0; +#X connect 39 0 40 0; +#X connect 40 0 41 0; +#X connect 41 0 42 0; +#X connect 42 0 43 0; +#X connect 43 0 44 0; +#X connect 44 0 45 0; +#X connect 45 0 46 0; +#X connect 46 0 47 0; +#X connect 47 0 48 0; +#X connect 48 0 49 0; +#X connect 49 0 25 0; +#X connect 49 0 26 0; +#X connect 49 0 26 1; diff --git a/desiredata/doc/3.audio.examples/D10.sampler.notes.pd b/desiredata/doc/3.audio.examples/D10.sampler.notes.pd new file mode 100644 index 00000000..6bfd1402 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D10.sampler.notes.pd @@ -0,0 +1,263 @@ +#N canvas 12 0 1074 786 12; +#X msg 257 7 bang; +#X obj 257 35 delay 5; +#X text 497 269 end of note; +#X obj 363 35 r note; +#N canvas 459 46 678 451 samples 0; +#N canvas 0 0 450 300 graph1 0; +#X array sample1 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 262 41 graph; +#X text 264 376 ------ 4 seconds ------; +#N canvas 0 0 450 300 graph1 0; +#X array sample2 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 262 226 graph; +#X restore 33 277 pd samples; +#N canvas 21 287 947 410 recorder 0; +#X obj 318 43 inlet; +#X obj 272 196 adc~ 1; +#X obj 272 224 hip~ 5; +#X obj 341 254 line~; +#X obj 272 253 *~; +#X msg 341 226 1; +#X obj 400 191 del 3990; +#X msg 377 226 0 10; +#X obj 272 304 tabwrite~ sample1; +#X obj 124 110 makefilename sample%1; +#X msg 124 139 set \$1 \, bang; +#X msg 446 162 stop; +#X msg 400 162 bang; +#X obj 557 182 loadbang; +#X obj 660 137 openpanel; +#X msg 660 109 bang; +#X text 702 108 <-- browse for samples; +#X text 628 233 v-- re-read original samples; +#X obj 318 72 route record stop reload browse; +#X obj 557 319 soundfiler; +#X msg 557 261 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav +sample2; +#X msg 660 164 read \$1 sample1; +#X obj 660 191 soundfiler; +#X connect 0 0 18 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 8 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 7 0 3 0; +#X connect 9 0 10 0; +#X connect 10 0 8 0; +#X connect 11 0 6 0; +#X connect 12 0 6 0; +#X connect 13 0 20 0; +#X connect 14 0 21 0; +#X connect 15 0 14 0; +#X connect 18 0 9 0; +#X connect 18 0 12 0; +#X connect 18 0 5 0; +#X connect 18 1 7 0; +#X connect 18 1 11 0; +#X connect 18 2 20 0; +#X connect 18 3 15 0; +#X connect 20 0 19 0; +#X connect 21 0 22 0; +#X restore 33 443 pd recorder; +#X msg 33 305 record 1; +#X msg 33 360 stop; +#N canvas 359 226 666 626 playback 0; +#X obj 20 45 line~; +#X obj 39 237 line~; +#X obj 20 268 *~; +#X obj 39 208 r cutoff; +#X obj 20 16 r phase; +#X obj 20 592 outlet~; +#X obj 20 564 hip~ 5; +#X obj 32 79 r sample-number; +#X obj 32 108 makefilename sample%d; +#X msg 32 136 set \$1; +#X obj 20 177 tabread4~ sample1; +#X obj 38 304 r envelope; +#X obj 38 362 dbtorms; +#X obj 38 333 unpack; +#X obj 38 391 sqrt; +#X obj 38 420 sqrt; +#X obj 38 448 line~; +#X obj 20 535 *~; +#X obj 38 477 *~; +#X obj 38 506 *~; +#X text 90 17 messages to the phase generating line~; +#X text 171 80 setting the sample number.; +#X text 221 109 compute the name; +#X text 93 137 and send a "set" message to the tabread4~.; +#X text 99 236 line~ for de-clicking; +#X text 139 307 The envelope generator. Rather than sending our message +straight to the line~ we unpack it in order to fool with the amplitude +field.; +#X text 109 363 convert amplitude to linear units.; +#X text 104 392 take the fourth root. This because we want to raies +the line~'s output to the 4th power afterward. This is an inexpensive +way to give the rise and decay a more natural sounding evolution than +just a straight line.; +#X text 77 480 square the output twice to get the fourth power.; +#X connect 0 0 10 0; +#X connect 1 0 2 1; +#X connect 2 0 17 0; +#X connect 3 0 1 0; +#X connect 4 0 0 0; +#X connect 6 0 5 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 2 0; +#X connect 11 0 13 0; +#X connect 12 0 14 0; +#X connect 13 0 12 0; +#X connect 13 1 16 1; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 18 0; +#X connect 16 0 18 1; +#X connect 17 0 6 0; +#X connect 18 0 19 0; +#X connect 18 0 19 1; +#X connect 19 0 17 1; +#X restore 33 480 pd playback; +#X msg 33 332 record 2; +#X text 645 25 ARGUMENTS FOR NOTES:; +#X text 666 53 pitch in halftones; +#X text 666 77 amplitude (dB); +#X text 666 125 sample number; +#X text 666 101 duration (msec); +#X text 666 149 start location (msec); +#X text 666 173 rise time (msec); +#X text 666 197 decay time (msec); +#X obj 363 62 unpack 0 0 0 0 0 0 0; +#X text 50 6 CHOCOLATE SAMPLER; +#X obj 521 168 f; +#X obj 456 142 f; +#X obj 387 142 f; +#X obj 350 142 f; +#X obj 318 142 f; +#X obj 224 142 f; +#X obj 224 169 mtof; +#X obj 224 197 / 261.62; +#X obj 224 224 * 4.41e+08; +#X obj 224 252 +; +#X obj 489 142 delay; +#X obj 318 312 pack 0 0 0 0 0; +#X obj 257 62 t b b b; +#X text 498 346 This starts the note \, sending to "receives" in the +playback subptach. The new receive "envelope" is an amplitude control +in parallel with the cutoff control. The "sample-number" switches the +tabread4~ between tables.; +#X msg 156 44 \; pd dsp 1 \; cutoff 0 5; +#X obj 387 197 + 1; +#X msg 556 467 60 100 10000 1 0 0 0; +#X obj 556 737 s note; +#X msg 521 196 \; envelope 0 \$1; +#X msg 675 691 62; +#X msg 710 691 64; +#X msg 641 691 60; +#X msg 612 691 55; +#X msg 743 691 72; +#X msg 580 691 48; +#X msg 642 734 60.5; +#X msg 556 494 60 90 10000 1 0 0 0; +#X msg 556 522 60 100 10000 2 0 0 0; +#X msg 556 550 60 100 10000 1 3000 0 0; +#X obj 387 169 * 44.1; +#X msg 556 605 60 100 100 1 0 0 0; +#X msg 556 632 60 100 100 1 0 0 1000; +#X msg 556 577 60 100 10000 1 0 1000 0; +#X msg 318 340 \; envelope 0 \, \$1 \$2 \; phase \$3 \, \$4 1e+07 \; +sample-number \$5 \; cutoff 1 5 \;; +#X text 117 305 <-- record; +#X msg 33 388 reload; +#X msg 33 415 browse; +#X text 7 109 transposition works; +#X text 7 133 by altering the phase; +#X text 7 181 The mtof and / 261; +#X text 7 205 calculate speed change; +#X text 7 229 considering 60 as unity.; +#X text 24 43 as before we; +#X text 15 64 mute and wait; +#X text 7 157 target ($4 below right.); +#X text 450 303 combine amplitude \, rise time \, start phase \, end +phase \, and sample number in one message; +#X text 764 467 straight playback; +#X text 764 493 change amplitude; +#X text 767 521 change sample number; +#X text 769 550 change start location; +#X text 768 576 change rise time; +#X text 768 609 change duration; +#X text 769 633 ... and decay time; +#X text 692 736 microtones OK too.; +#X text 580 667 If you omit values they stay unchanged; +#X text 552 426 Here are buttons to demonstrate the effect of varying +the parameters one by one.; +#X obj 34 511 output~; +#X text 13 596 This patch take the same principle as the earlier "one-shot +sampler" \, but allows you to parametrize sample playback. Since we +must wait 5 msec before starting the playback \, we store all the parameters +in "f" objects \, and recall them to construct the new note. Transposition +is done by altering the amount to play back in the (artificial) ten +thousand seconds (1e+07). The playback segment can be altered to start +in the middle of the sample instead of the beginning \, and you can +change the duration and rise and decay times.; +#X text 823 763 updated for Pd version 0.37; +#X connect 0 0 1 0; +#X connect 0 0 34 0; +#X connect 1 0 32 0; +#X connect 3 0 18 0; +#X connect 6 0 5 0; +#X connect 7 0 5 0; +#X connect 8 0 76 0; +#X connect 8 0 76 1; +#X connect 9 0 5 0; +#X connect 18 0 25 1; +#X connect 18 0 0 0; +#X connect 18 1 24 1; +#X connect 18 2 30 1; +#X connect 18 3 23 1; +#X connect 18 4 22 1; +#X connect 18 5 21 1; +#X connect 18 6 20 1; +#X connect 20 0 38 0; +#X connect 21 0 31 1; +#X connect 22 0 49 0; +#X connect 23 0 31 4; +#X connect 24 0 31 0; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 28 0 29 0; +#X connect 29 0 31 3; +#X connect 30 0 20 0; +#X connect 31 0 53 0; +#X connect 32 0 24 0; +#X connect 32 1 25 0; +#X connect 32 2 21 0; +#X connect 32 2 22 0; +#X connect 32 2 23 0; +#X connect 32 2 30 0; +#X connect 35 0 31 2; +#X connect 35 0 29 1; +#X connect 36 0 37 0; +#X connect 39 0 37 0; +#X connect 40 0 37 0; +#X connect 41 0 37 0; +#X connect 42 0 37 0; +#X connect 43 0 37 0; +#X connect 44 0 37 0; +#X connect 45 0 37 0; +#X connect 46 0 37 0; +#X connect 47 0 37 0; +#X connect 48 0 37 0; +#X connect 49 0 35 0; +#X connect 50 0 37 0; +#X connect 51 0 37 0; +#X connect 52 0 37 0; +#X connect 55 0 5 0; +#X connect 56 0 5 0; diff --git a/desiredata/doc/3.audio.examples/D11.sampler.poly.pd b/desiredata/doc/3.audio.examples/D11.sampler.poly.pd new file mode 100644 index 00000000..a0863964 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D11.sampler.poly.pd @@ -0,0 +1,175 @@ +#N canvas 91 72 1119 674 12; +#N canvas 0 0 600 392 samples 0; +#N canvas 0 0 450 300 graph1 0; +#X array sample1 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 262 41 graph; +#X text 282 385 ------ 4 seconds ------; +#N canvas 0 0 450 300 graph1 0; +#X array sample2 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 262 226 graph; +#X restore 931 97 pd samples; +#N canvas 52 219 967 340 recorder 0; +#X obj 220 21 inlet; +#X obj 174 174 adc~ 1; +#X obj 174 202 hip~ 5; +#X obj 243 232 line~; +#X obj 174 231 *~; +#X msg 243 204 1; +#X obj 302 169 del 3990; +#X msg 279 204 0 10; +#X obj 174 282 tabwrite~ sample1; +#X msg 26 117 set \$1 \, bang; +#X msg 348 140 stop; +#X msg 302 140 bang; +#X obj 220 50 route record stop reload browse; +#X obj 411 158 loadbang; +#X obj 514 113 openpanel; +#X msg 514 85 bang; +#X text 556 84 <-- browse for samples; +#X text 482 209 v-- re-read original samples; +#X obj 411 295 soundfiler; +#X msg 411 237 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav +sample2; +#X msg 514 140 read \$1 sample1; +#X obj 514 167 soundfiler; +#X obj 26 88 makefilename sample%d; +#X connect 0 0 12 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 8 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 10 0 6 0; +#X connect 11 0 6 0; +#X connect 12 0 11 0; +#X connect 12 0 5 0; +#X connect 12 0 22 0; +#X connect 12 1 7 0; +#X connect 12 1 10 0; +#X connect 12 2 19 0; +#X connect 12 3 15 0; +#X connect 13 0 19 0; +#X connect 14 0 20 0; +#X connect 15 0 14 0; +#X connect 19 0 18 0; +#X connect 20 0 21 0; +#X connect 22 0 9 0; +#X restore 931 284 pd recorder; +#X msg 931 146 record 1; +#X msg 931 202 stop; +#X msg 931 174 record 2; +#X text 19 49 ARGUMENTS FOR NOTES:; +#X text 19 71 pitch in halftones; +#X text 19 95 amplitude (dB); +#X text 19 143 sample number; +#X text 19 119 duration (msec); +#X text 19 167 start location (msec); +#X text 19 191 rise time (msec); +#X text 19 215 decay time (msec); +#X msg 931 229 reload; +#X msg 931 257 browse; +#X text 47 10 POLYPHONIC SAMPLER; +#X obj 547 329 sampvoice; +#X obj 631 17 r note; +#X obj 631 44 unpack 0 0 0 0 0 0 0; +#X obj 604 76 t b f; +#X obj 544 109 f; +#X obj 580 109 + 1; +#X obj 552 146 mod 1e+06; +#X obj 544 175 makenote 64; +#X obj 544 203 poly 8 1; +#X obj 544 230 stripnote; +#X obj 617 272 pack 0 0 0 0 0 0 0 0; +#X obj 617 300 route 1 2 3 4 5 6 7 8; +#X text 929 124 record \, etc.; +#X text 335 203 allocate sampler voice; +#X text 361 228 drop note off again; +#X obj 704 516 qlist; +#X obj 870 520 r comment; +#X text 732 445 sailors to untie him...; +#X text 735 395 Lashed to the mast of his boat \, Ulysses; +#X text 735 420 hears beautiful singing. He begs his; +#X text 7 263 Here we take the previous patch and make it polyphonic +\, with 8 voices. The single voice which we had before has been made +into an abstraction \, "sampvoice.pd" \, which we instantiate in 8 +copies. Earlier we used sends and receives to pass messages to "cutoff" +\, etc \, but here if we did that the copies of sampvoice would be +sending messages to each other \, so we combine the control and the +audio computation in the sampvoice abstraction without using send and +receive. Click on one to see how.; +#X text 8 413 The "poly" object essentially repeats pitch and velocity +pairs to its output \, but also sending a voice number from its left +outlet. To use it \, we unpack the 7 parameters \, calculate the voice +number \, repack the message as 8 parameters with voice number first +\, and use "route" to send it to one of the 8 voices.; +#X text 8 515 There's some bother because poly expects to track note +on and note off messages separately as they would come from a MIDI +keyboard. So we assign each note a unique fake "pitch" \, use makenote +to generate the note-off messages \, and run poly on the resulting +stream. We then discard both pitch and velocity (using the velocity +only to strip note-offs) and rebuild the original message adding the +voice number we just scored.; +#X text 854 639 updated for Pd version 0.33; +#X msg 704 486 read qlist-sampler.txt \, rewind \, tempo 1 \, bang +; +#X obj 548 551 output~; +#X text 249 108 increment mod 1e+06 to make tag; +#X text 276 127 (acts like a MIDI pitch to; +#X text 277 146 identify the note to "poly"); +#X text 258 175 supply delayed note-off message; +#X obj 547 522 sampvoice; +#X obj 547 494 sampvoice; +#X obj 547 467 sampvoice; +#X obj 547 439 sampvoice; +#X obj 547 412 sampvoice; +#X obj 547 384 sampvoice; +#X obj 547 356 sampvoice; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 13 0 1 0; +#X connect 14 0 1 0; +#X connect 16 0 52 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 18 1 26 2; +#X connect 18 2 23 2; +#X connect 18 2 26 3; +#X connect 18 3 26 4; +#X connect 18 4 26 5; +#X connect 18 5 26 6; +#X connect 18 6 26 7; +#X connect 19 0 20 0; +#X connect 19 1 26 1; +#X connect 20 0 21 0; +#X connect 20 0 23 0; +#X connect 21 0 22 0; +#X connect 22 0 20 1; +#X connect 23 0 24 0; +#X connect 23 1 24 1; +#X connect 24 0 25 0; +#X connect 24 2 25 1; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X connect 27 0 16 1; +#X connect 27 1 52 1; +#X connect 27 2 51 1; +#X connect 27 3 50 1; +#X connect 27 4 49 1; +#X connect 27 5 48 1; +#X connect 27 6 47 1; +#X connect 27 7 46 1; +#X connect 40 0 31 0; +#X connect 46 0 41 0; +#X connect 46 0 41 1; +#X connect 47 0 46 0; +#X connect 48 0 47 0; +#X connect 49 0 48 0; +#X connect 50 0 49 0; +#X connect 51 0 50 0; +#X connect 52 0 51 0; diff --git a/desiredata/doc/3.audio.examples/D12.sampler.bis.pd b/desiredata/doc/3.audio.examples/D12.sampler.bis.pd new file mode 100644 index 00000000..f0fa13fd --- /dev/null +++ b/desiredata/doc/3.audio.examples/D12.sampler.bis.pd @@ -0,0 +1,203 @@ +#N canvas 104 78 1119 674 12; +#N canvas 0 0 600 392 samples 0; +#N canvas 0 0 450 300 graph1 0; +#X array sample1 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 262 41 graph; +#X text 282 385 ------ 4 seconds ------; +#N canvas 0 0 450 300 graph1 0; +#X array sample2 176403 float 0; +#X coords 0 1.02 176403 -1.02 200 130 1; +#X restore 262 226 graph; +#X restore 785 563 pd samples; +#N canvas 52 219 971 512 recorder 0; +#X obj 174 304 adc~ 1; +#X obj 174 332 hip~ 5; +#X obj 243 362 line~; +#X obj 174 361 *~; +#X msg 243 334 1; +#X obj 302 299 del 3990; +#X msg 279 334 0 10; +#X obj 174 412 tabwrite~ sample1; +#X msg 26 247 set \$1 \, bang; +#X msg 348 270 stop; +#X msg 302 270 bang; +#X obj 220 180 route record stop reload browse; +#X obj 411 288 loadbang; +#X obj 514 243 openpanel; +#X msg 514 215 bang; +#X text 556 214 <-- browse for samples; +#X text 482 339 v-- re-read original samples; +#X obj 411 425 soundfiler; +#X msg 411 367 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav +sample2; +#X msg 514 270 read \$1 sample1; +#X obj 514 297 soundfiler; +#X msg 220 41 record 1; +#X msg 220 97 stop; +#X msg 220 69 record 2; +#X msg 220 124 reload; +#X msg 220 152 browse; +#X text 218 19 record \, etc.; +#X obj 26 218 makefilename sample%d; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 3 1; +#X connect 3 0 7 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 8 0 7 0; +#X connect 9 0 5 0; +#X connect 10 0 5 0; +#X connect 11 0 10 0; +#X connect 11 0 4 0; +#X connect 11 0 27 0; +#X connect 11 1 6 0; +#X connect 11 1 9 0; +#X connect 11 2 18 0; +#X connect 11 3 14 0; +#X connect 12 0 18 0; +#X connect 13 0 19 0; +#X connect 14 0 13 0; +#X connect 18 0 17 0; +#X connect 19 0 20 0; +#X connect 21 0 11 0; +#X connect 22 0 11 0; +#X connect 23 0 11 0; +#X connect 24 0 11 0; +#X connect 25 0 11 0; +#X connect 27 0 8 0; +#X restore 785 586 pd recorder; +#X text 782 458 sample number; +#X obj 619 96 unpack 0 0 0 0 0 0 0; +#X obj 563 124 poly 8 1; +#X obj 654 270 route 1 2 3 4 5 6 7 8; +#X obj 558 487 output~; +#X obj 563 149 swap; +#X obj 563 196 route 0; +#X obj 563 173 pack; +#X obj 605 221 unpack; +#X obj 557 289 sampvoice2; +#X obj 563 221 pack; +#X text 933 411 amplitude; +#X text 932 435 pitch; +#X text 851 344 ARGUMENTS FOR:; +#X text 784 386 pitch; +#X text 784 410 amplitude; +#X text 784 434 duration; +#X text 13 4 POLY SAMPLER \, VERSION 2 FOR SEPARATE NOTE-ON/OFF MESSAGES +; +#X obj 619 71 r onoff; +#X text 932 368 ON/OFF TRANSITIONS:; +#X text 785 367 ENTIRE NOTES:; +#X text 932 390 tag; +#X text 782 485 sample onset; +#X text 782 511 rise time; +#X text 783 535 decay time; +#X text 929 460 (same other 4); +#X obj 836 159 f; +#X obj 872 159 + 1; +#X obj 836 185 mod 1e+06; +#X obj 654 245 pack 0 0 0 0 0 0 0; +#X obj 918 74 r note; +#X obj 918 100 unpack 0 0 0 0 0 0 0; +#X text 860 641 updated for Pd version 0.37; +#X obj 895 127 t b f; +#X obj 936 237 pack 0 0 0 0 0 0 0; +#X obj 889 285 s onoff; +#X obj 870 230 pipe; +#X obj 870 253 pack; +#X msg 103 528 \; onoff 1 90 60 1 0 0 100; +#X msg 323 528 \; onoff 1 0; +#X msg 104 570 \; onoff 2 90 48 1 0 0 100; +#X msg 324 570 \; onoff 2 0; +#X msg 104 627 \; note 51 90 1000 1 0 0 100; +#X obj 557 312 sampvoice2; +#X obj 557 336 sampvoice2; +#X obj 557 360 sampvoice2; +#X obj 557 383 sampvoice2; +#X obj 557 407 sampvoice2; +#X obj 557 430 sampvoice2; +#X obj 557 454 sampvoice2; +#X text 14 35 Here is a variation on the polyphonic sampler \, which +can take separate messages to start and stop notes (so that you can +attach it to a MIDI keyboard \, for example.) "Note" messages act as +before \, but in an intermediate step they are split onto note-on and +note-off messages \, sent to "onoff". You can alternatively send messages +straight to onoff if you don't know the duration in advance.; +#X text 12 150 Messages to "onoff" require a tag \, which is a number +shared between the note-on and note-off message so that we can track +down the voice to turn it off. If you're using MIDI input \, you can +just re-use the pitch as a tag.; +#X text 102 508 separate messages for not on and off:; +#X text 101 608 single messages to do both as before:; +#X text 10 221 Messages to "onoff" whose amplitude is zero are note-off +messages (the other parameters of note-off messages are ignored). The +"sampvoice2" abstraction is a modification of "sampvoice" which looks +at the amplitude field to decide whether to begin or end a note.; +#X text 10 301 To convert "note" messages to pairs of "onoff" messages +\, first a counter generates a tag. The the "pipe" object delays a +copy of the tag \, which the following "pack" object converts into +a note-off message (a pair of numbers \, the tag and a zero.); +#X text 9 382 Under "r onoff" \, the poly object allocates a voice +number \, putting it out paired with velocity. After swapping the two +and packing them into a single message \, the amplitude is checked +against zero by the "route 0" object \; if zero \, the "pack" confects +a 2-argument message (voice number and zero). Otherwise \, the "unpack" +retrieves the nonzero amplitude for a note-on message \, to which we +add all the other parameters and route to the appropriate voice.; +#X connect 3 0 4 0; +#X connect 3 1 31 1; +#X connect 3 1 4 1; +#X connect 3 2 31 2; +#X connect 3 3 31 3; +#X connect 3 4 31 4; +#X connect 3 5 31 5; +#X connect 3 6 31 6; +#X connect 4 0 7 0; +#X connect 4 2 7 1; +#X connect 5 0 11 1; +#X connect 5 1 45 1; +#X connect 5 2 46 1; +#X connect 5 3 47 1; +#X connect 5 4 48 1; +#X connect 5 5 49 1; +#X connect 5 6 50 1; +#X connect 5 7 51 1; +#X connect 7 0 9 0; +#X connect 7 1 9 1; +#X connect 8 0 12 0; +#X connect 8 1 10 0; +#X connect 9 0 8 0; +#X connect 10 1 31 0; +#X connect 11 0 45 0; +#X connect 12 0 5 0; +#X connect 20 0 3 0; +#X connect 28 0 29 0; +#X connect 29 0 30 0; +#X connect 30 0 28 1; +#X connect 30 0 38 0; +#X connect 30 0 36 0; +#X connect 31 0 5 0; +#X connect 32 0 33 0; +#X connect 33 0 35 0; +#X connect 33 1 36 1; +#X connect 33 2 38 1; +#X connect 33 3 36 3; +#X connect 33 4 36 4; +#X connect 33 5 36 5; +#X connect 33 6 36 6; +#X connect 35 0 28 0; +#X connect 35 1 36 2; +#X connect 36 0 37 0; +#X connect 38 0 39 0; +#X connect 39 0 37 0; +#X connect 45 0 46 0; +#X connect 46 0 47 0; +#X connect 47 0 48 0; +#X connect 48 0 49 0; +#X connect 49 0 50 0; +#X connect 50 0 51 0; +#X connect 51 0 6 0; +#X connect 51 0 6 1; diff --git a/desiredata/doc/3.audio.examples/D13.additive.qlist.pd b/desiredata/doc/3.audio.examples/D13.additive.qlist.pd new file mode 100644 index 00000000..2c9b3cb7 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D13.additive.qlist.pd @@ -0,0 +1,47 @@ +#N canvas 233 179 667 449 12; +#X obj 16 182 osc-voice amp1 pit1; +#X obj 16 206 osc-voice amp2 pit2; +#X obj 16 230 osc-voice amp3 pit3; +#X obj 16 254 osc-voice amp4 pit4; +#X obj 16 278 osc-voice amp5 pit5; +#X obj 16 302 osc-voice amp6 pit6; +#X obj 16 326 osc-voice amp7 pit7; +#X obj 16 350 osc-voice amp8 pit8; +#X obj 464 343 qlist; +#X msg 394 185 stop; +#X msg 524 300 read qlist.txt; +#X obj 524 255 loadbang; +#X text 258 164 start; +#X text 395 161 stop; +#X text 534 279 reread file; +#X msg 467 199 rewind; +#X msg 535 199 next; +#X msg 251 212 tempo 100 \, bang; +#X msg 250 188 tempo 1 \, bang; +#X text 82 11 USING QLIST TO SEQUENCE AN OSCILLATOR BANK; +#X text 479 178 single step; +#X obj 532 392 r #; +#X text 28 49 Here is an eight voice additive synthesis patch controlled +by a qlist. Open a text editor on the file \, "qlist.txt" \, to see +how the oscillators' amplitudes and frequencies are specified. The +abstraction \, "osc-voice" \, shows an effective way to make patches +react to qlists but also to mousing.; +#X text 234 391 this is where qlist comments go:; +#X obj 16 380 output~; +#X text 394 423 updatged for Pd version 0.39; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 24 0; +#X connect 7 0 24 1; +#X connect 9 0 8 0; +#X connect 10 0 8 0; +#X connect 11 0 10 0; +#X connect 15 0 8 0; +#X connect 16 0 8 0; +#X connect 17 0 8 0; +#X connect 18 0 8 0; diff --git a/desiredata/doc/3.audio.examples/D14.vibrato.pd b/desiredata/doc/3.audio.examples/D14.vibrato.pd new file mode 100644 index 00000000..3f4d6ea2 --- /dev/null +++ b/desiredata/doc/3.audio.examples/D14.vibrato.pd @@ -0,0 +1,104 @@ +#N canvas 80 10 709 653 12; +#X obj 28 258 r trigger; +#X obj 28 454 *~; +#X obj 28 482 *~; +#X floatatom 63 304 3 0 100 0 - - -; +#X msg 460 493 \; trigger 0; +#X obj 28 281 unpack; +#X floatatom 28 304 1 0 100 0 - - -; +#X obj 27 533 +~ 0.3; +#X obj 27 559 cos~; +#X obj 27 507 osc~; +#X obj 63 323 mtof; +#X obj 63 345 sqrt; +#X obj 63 367 sqrt; +#X text 572 461 <-- octave up; +#X msg 460 416 \; trigger 1 60; +#X msg 460 453 \; trigger 1 72; +#X text 550 494 <-- release; +#X text 556 512 is optional; +#X obj 28 424 *~; +#X obj 237 404 +~ 1; +#N canvas 0 0 450 300 graph1 0; +#X array array62 131 float 1; +#A 0 0.970031 1 0.970031 0.881921 0.740952 0.555571 0.336891 0.0980184 +-0.146729 -0.382682 -0.595698 -0.773009 -0.88 -0.9 -0.92 -0.92 -0.85773 +-0.707109 -0.514106 -0.290288 -0.0490716 0.195086 0.427551 0.63439 +0.803205 0.86 0.88 0.88 0.88 0.84 0.82 0.471402 0.242986 6.63397e-06 +-0.242974 -0.471391 -0.671554 -0.831465 -0.941541 -0.995184 -0.989178 +-0.923883 -0.803213 -0.68 -0.42 -0.24 0.1 0.4 0.6 0.7071 0.857723 0.956937 +0.998795 0.980787 0.903994 0.773018 0.595708 0.382694 0.146742 -0.0980052 +-0.336878 -0.55556 -0.7 -0.8 -0.88 -0.88 -0.88 -0.84 -0.82 -0.555582 +-0.336903 -0.0980316 0.146716 0.38267 0.595687 0.773001 0.903983 0.980782 +0.998796 0.956945 0.857737 0.707119 0.514117 0.290301 0.0490849 -0.195073 +-0.427539 -0.63438 -0.803197 -0.923873 -0.989174 -0.995187 -0.94155 +-0.83148 -0.671573 -0.471414 -0.242999 -1.99019e-05 0.242961 0.471379 +0.671544 0.831458 0.88 0.9 0.9 0.88 0.803221 0.63441 0.08 -0.14 -0.28 +-0.48 -0.64 -0.72 -0.857717 -0.956933 -0.998794 -0.98079 -0.904 -0.773026 +-0.595719 -0.382706 -0.146755 0.097992 0.336866 0.555549 0.740934 0.881909 +0.970025 1 0.970038; +#X coords 0 1 130 -1 200 100 1; +#X restore 246 508 graph; +#X obj 237 356 tabosc4~ array62; +#X floatatom 237 312 3 0 0 0 - - -; +#X obj 237 333 / 6; +#X obj 237 380 *~; +#X floatatom 391 333 3 0 0 0 - - -; +#X text 236 438 since we'll multiply \,; +#X text 235 453 vibrato output should; +#X text 235 470 be centered at 1 \, not 0; +#X text 273 384 multiply by vib depth; +#X obj 391 361 / 6923; +#X text 62 425 apply vibrato; +#X text 66 453 fourth; +#X text 69 469 power; +#X text 97 537 waveform; +#X text 96 517 simple; +#X text 457 354 4/(exp(log(2)/1200)-1); +#X text 461 335 conversion factor is; +#X text 384 295 vibrato depth; +#X text 383 312 in cents; +#X text 228 274 vibrato speed; +#X text 227 291 in Hertz; +#X obj 28 392 adsr 0 100 200 100 300; +#X obj 26 587 output~; +#X text 88 9 USING ADSRS FOR PORTAMENTO AND ADDING VIBRATO TOO; +#X text 43 30 Portamento can be treated as a special case of an ADSR +envelope \, with 100 percent sustain. Vibrato is properly computed +in units of pitch \, but it's also possible to do the job without having +to convert from pitch to frequency units at the audio rate. To do this +we just raise the "pitch" to the fourth power \, so that it acts pseudo-exponentially. +Rather than add vibrato to the ADSR output \, we multiply a signal +which controls relative frequency. The relative frequency change is +one plus an oscillator.; +#X text 439 626 updated for Pd version 0.39; +#X text 45 185 The table below holds 6 cycles of vibrato with small +variations to get a not-exactly-repeating vibrato. We thus have to +divide vibrato frequency by six. You can just use a sine or triangle +wave if you prefer.; +#X text 573 426 <-- middle C; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 9 0; +#X connect 3 0 10 0; +#X connect 5 0 6 0; +#X connect 5 1 3 0; +#X connect 6 0 42 0; +#X connect 7 0 8 0; +#X connect 8 0 43 0; +#X connect 8 0 43 1; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 12 0 42 1; +#X connect 18 0 1 0; +#X connect 18 0 1 1; +#X connect 19 0 18 1; +#X connect 21 0 24 0; +#X connect 22 0 23 0; +#X connect 23 0 21 0; +#X connect 24 0 19 0; +#X connect 25 0 30 0; +#X connect 30 0 24 1; +#X connect 42 0 18 0; diff --git a/desiredata/doc/3.audio.examples/E01.spectrum.pd b/desiredata/doc/3.audio.examples/E01.spectrum.pd new file mode 100644 index 00000000..6754bda1 --- /dev/null +++ b/desiredata/doc/3.audio.examples/E01.spectrum.pd @@ -0,0 +1,179 @@ +#N canvas 190 29 773 821 12; +#N canvas 0 0 450 300 graph1 0; +#X array E01-signal 882 float 0; +#X coords 0 5 882 -5 200 130 1; +#X restore 531 41 graph; +#X obj 40 304 hip~ 5; +#N canvas 0 0 450 300 graph1 0; +#X array E01-spectrum 128 float 0; +#X coords 0 4300 127 -40 257 130 1; +#X restore 485 226 graph; +#X text 134 243 <-- click to graph; +#N canvas 45 83 558 569 fft 0; +#X obj 19 62 inlet~; +#X obj 85 214 inlet; +#X obj 19 92 rfft~; +#X obj 19 125 *~; +#X obj 50 125 *~; +#X obj 19 155 sqrt~; +#X obj 85 248 tabwrite~ E01-spectrum; +#X obj 332 109 block~ 4096 1; +#X obj 19 181 biquad~ 0 0 0 0 1; +#X text 83 93 Fourier series; +#X text 88 146 magnitude; +#X text 86 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 62 signal to analyze; +#X text 182 166 delay two samples; +#X text 181 182 for better graphing; +#X obj 90 425 samplerate~; +#X obj 90 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 90 472 5 0 0 0 - - -; +#X obj 90 448 / 256; +#X obj 90 378 loadbang; +#X floatatom 90 541 5 0 0 0 - - -; +#X obj 98 494 s fundamental; +#X obj 90 517 ftom; +#X text 146 540 <-just out of curiosity \, here's the pitch; +#X text 14 319 At load time \, calculate a good choice of fundamental +frequency for showing spectra: the 16th bin in a 4096-point spectrum +\, so SR*16/4096 or SR/256.; +#X text 135 216 "bang" into this inlet to graph it; +#X connect 0 0 2 0; +#X connect 1 0 6 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 8 0; +#X connect 8 0 6 0; +#X connect 16 0 19 0; +#X connect 17 0 16 0; +#X connect 18 0 22 0; +#X connect 18 0 23 0; +#X connect 19 0 18 0; +#X connect 20 0 17 0; +#X connect 23 0 21 0; +#X restore 51 279 pd fft; +#X text 531 173 ---- 0.02 seconds ----; +#X obj 111 244 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 40 332 output~; +#X obj 111 279 tabwrite~ E01-signal; +#X text 523 800 updated for Pd version 0.37; +#X text 516 359 1; +#X text 550 359 2; +#X text 582 359 3; +#X text 614 359 4; +#X text 647 359 5; +#X text 677 359 6; +#X text 708 359 7; +#X text 484 359 0; +#X text 520 378 -- partial number --; +#X text 733 97 0; +#X obj 42 42 r fundamental; +#X obj 42 111 osc~; +#X obj 63 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 41 161 *~; +#X obj 85 111 osc~; +#X obj 106 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 84 161 *~; +#X obj 128 111 osc~; +#X obj 149 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 127 161 *~; +#X obj 128 88 * 2; +#X obj 171 111 osc~; +#X obj 192 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 170 161 *~; +#X obj 214 111 osc~; +#X obj 235 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 213 161 *~; +#X obj 257 111 osc~; +#X obj 278 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 256 161 *~; +#X obj 42 88 * 0; +#X obj 85 88 * 1; +#X obj 171 88 * 3; +#X obj 214 88 * 4; +#X obj 257 88 * 5; +#X text 303 136 <-- On/Off; +#X text 337 152 for each; +#X text 339 168 partial; +#X text 595 11 WAVEFORM; +#X text 578 204 SPECTRUM; +#X text 25 415 The next series of patches demonstrates various kinds +of modulation: AM \, waveshaping \, and FM. We will need a tool for +graphing spectra which is introduced here. In this patch the signal +to be analyzed is a simple sum of up to six partials of a fundamental +frequency (which is 172 Hz \, close to F below middle C \, if your +sample rate happens to be 44100 Hz. The fundamental is chosen to agree +with the analysis patch ("pd FFT") and is computed within it).; +#X text 25 546 The partials are numbered 0 through 5 \, where 0 means +DC \, or zero frequency \, 1 is the fundamental \, and so on. The toggle +switches allow you to turn them on and off separately. You have to +press the "click to graph" button to update the two graphs.; +#X text 745 344 0; +#X text 743 223 1; +#X text 744 282 0.5; +#X text 26 631 The upper graph is just the (time domain) waveform \, +about four periods long. The lower graph is the magnitude spectrum. +Its peaks are the magnitudes of the partials. Note that a DC signal +of amplitude one is considered a partial of magnitude 1 \, but the +other partials \, which have peak amplitudes of 1 (and RMS 0.707) \, +have peak magnitudes of only 0.5 in the spectrum.; +#X obj 41 222 *~ 1; +#X text 733 37 5; +#X text 734 157 -5; +#X text 81 221 sum; +#X text 96 5 GRAPHING SPECTRA OF AUDIO SIGNALS; +#X text 24 742 Here we're introducing a new feature: multiple signals +connected to a signal inlet (as in the "*~ 1") are added. This is the +most convenient way to sum the six partials.; +#X connect 1 0 7 0; +#X connect 1 0 7 1; +#X connect 6 0 4 1; +#X connect 6 0 8 0; +#X connect 20 0 40 0; +#X connect 20 0 41 0; +#X connect 20 0 30 0; +#X connect 20 0 42 0; +#X connect 20 0 43 0; +#X connect 20 0 44 0; +#X connect 21 0 23 0; +#X connect 22 0 23 1; +#X connect 23 0 56 0; +#X connect 24 0 26 0; +#X connect 25 0 26 1; +#X connect 26 0 56 0; +#X connect 27 0 29 0; +#X connect 28 0 29 1; +#X connect 29 0 56 0; +#X connect 30 0 27 0; +#X connect 31 0 33 0; +#X connect 32 0 33 1; +#X connect 33 0 56 0; +#X connect 34 0 36 0; +#X connect 35 0 36 1; +#X connect 36 0 56 0; +#X connect 37 0 39 0; +#X connect 38 0 39 1; +#X connect 39 0 56 0; +#X connect 40 0 21 0; +#X connect 41 0 24 0; +#X connect 42 0 31 0; +#X connect 43 0 34 0; +#X connect 44 0 37 0; +#X connect 56 0 4 0; +#X connect 56 0 1 0; +#X connect 56 0 8 0; diff --git a/desiredata/doc/3.audio.examples/E02.ring.modulation.pd b/desiredata/doc/3.audio.examples/E02.ring.modulation.pd new file mode 100644 index 00000000..81004cf2 --- /dev/null +++ b/desiredata/doc/3.audio.examples/E02.ring.modulation.pd @@ -0,0 +1,197 @@ +#N canvas 269 43 755 746 12; +#N canvas 0 0 450 300 graph1 0; +#X array E02-signal 882 float 0; +#X coords 0 5 882 -5 200 130 1; +#X restore 501 66 graph; +#X obj 15 370 hip~ 5; +#N canvas 0 0 450 300 graph1 0; +#X array E02-spectrum 128 float 0; +#X coords 0 4300 127 -40 257 130 1; +#X restore 455 251 graph; +#N canvas 45 83 558 569 fft 0; +#X obj 19 61 inlet~; +#X obj 95 214 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 192 166 delay two samples; +#X text 191 182 for better graphing; +#X obj 16 425 samplerate~; +#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 16 472 5 0 0 0 - - -; +#X obj 16 448 / 256; +#X obj 16 378 loadbang; +#X floatatom 16 541 5 0 0 0 - - -; +#X obj 24 494 s fundamental; +#X obj 16 517 ftom; +#X text 14 319 At load time \, calculate a good choice of fundamental +frequency for showing spectra: the 16th bin in a 4096-point spectrum +\, so SR*16/4096 or SR/256.; +#X text 145 216 "bang" into this inlet to graph it; +#X floatatom 191 480 5 0 0 0 - - -; +#X obj 191 456 / 4096; +#X text 187 425 One bin is SR/4096:; +#X text 72 540 <-just out of curiosity \, here's the fundamental pitch +; +#X obj 191 502 s freq-step; +#X obj 95 248 tabwrite~ E02-spectrum; +#X obj 20 281 tabwrite~ E02-signal; +#X connect 0 0 2 0; +#X connect 0 0 31 0; +#X connect 1 0 30 0; +#X connect 1 0 31 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 30 0; +#X connect 15 0 18 0; +#X connect 15 0 26 0; +#X connect 16 0 15 0; +#X connect 17 0 21 0; +#X connect 17 0 22 0; +#X connect 18 0 17 0; +#X connect 19 0 16 0; +#X connect 22 0 20 0; +#X connect 25 0 29 0; +#X connect 26 0 25 0; +#X restore 23 343 pd fft; +#X text 501 198 ---- 0.02 seconds ----; +#X obj 84 344 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 15 398 output~; +#X text 501 720 updated for Pd version 0.37; +#X text 486 384 1; +#X text 520 384 2; +#X text 552 384 3; +#X text 584 384 4; +#X text 617 384 5; +#X text 647 384 6; +#X text 678 384 7; +#X text 454 384 0; +#X text 490 403 -- partial number --; +#X text 703 120 0; +#X obj 18 32 r fundamental; +#X obj 18 94 osc~; +#X obj 39 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 17 144 *~; +#X obj 61 94 osc~; +#X obj 82 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 60 144 *~; +#X obj 104 94 osc~; +#X obj 125 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 103 144 *~; +#X obj 104 71 * 2; +#X obj 147 94 osc~; +#X obj 168 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 146 144 *~; +#X obj 190 94 osc~; +#X obj 211 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 189 144 *~; +#X obj 233 94 osc~; +#X obj 254 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 232 144 *~; +#X obj 18 71 * 0; +#X obj 61 71 * 1; +#X obj 147 71 * 3; +#X obj 190 71 * 4; +#X obj 233 71 * 5; +#X text 282 118 <-- On/Off; +#X text 565 46 WAVEFORM; +#X text 548 229 SPECTRUM; +#X text 715 367 0; +#X text 713 246 1; +#X text 714 305 0.5; +#X text 703 60 5; +#X text 704 180 -5; +#X obj 16 239 *~; +#X text 300 102 partials; +#X obj 154 270 osc~; +#X floatatom 154 210 3 0 200 0 - - -; +#X obj 154 239 *; +#X obj 187 239 r freq-step; +#X text 226 177 modulation; +#X text 222 192 frequency in; +#X text 185 209 <-- "steps" of f/16; +#X text 97 -1 RING MODULATION: multiplying a complex tone by a sinusoid +; +#X obj 84 299 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X text 107 343 <-- graph once; +#X obj 84 321 metro 500; +#X text 107 298 <-- graph repeatedly; +#X text 35 463 Now we ring modulate the signal by multiplying it by +another sinusoid. The modulation frequency is controlled in steps of +f/16 where "f" is the fundamental frequency \, giving roughly 11 Hz. +per step. Note that if the modulation frequency is set to zero we can't +predict the overall amplitude because it depends on what phase the +modulation oscillator happened to have at that moment.; +#X text 32 579 If you choose a multiple of the fundamental as a modulation +frequency (16 \, 32 \, 48 \, 64 \, ... "steps") the result is again +periodic at the original frequency. If you select a half-integer times +the fundamental (8 \, 24 \, 40 \, ... steps) the pitch drops by an +octave and you get only odd partials. For most other settings you'll +get an inharmonic complex of tones. These are sometimes heard as separate +pitches and other times they seem to fuse into a single timbre with +indeterminate pitch.; +#X connect 1 0 6 0; +#X connect 1 0 6 1; +#X connect 5 0 3 1; +#X connect 18 0 38 0; +#X connect 18 0 39 0; +#X connect 18 0 28 0; +#X connect 18 0 40 0; +#X connect 18 0 41 0; +#X connect 18 0 42 0; +#X connect 19 0 21 0; +#X connect 20 0 21 1; +#X connect 21 0 51 0; +#X connect 22 0 24 0; +#X connect 23 0 24 1; +#X connect 24 0 51 0; +#X connect 25 0 27 0; +#X connect 26 0 27 1; +#X connect 27 0 51 0; +#X connect 28 0 25 0; +#X connect 29 0 31 0; +#X connect 30 0 31 1; +#X connect 31 0 51 0; +#X connect 32 0 34 0; +#X connect 33 0 34 1; +#X connect 34 0 51 0; +#X connect 35 0 37 0; +#X connect 36 0 37 1; +#X connect 37 0 51 0; +#X connect 38 0 19 0; +#X connect 39 0 22 0; +#X connect 40 0 29 0; +#X connect 41 0 32 0; +#X connect 42 0 35 0; +#X connect 51 0 3 0; +#X connect 51 0 1 0; +#X connect 53 0 51 1; +#X connect 54 0 55 0; +#X connect 55 0 53 0; +#X connect 56 0 55 1; +#X connect 61 0 63 0; +#X connect 63 0 5 0; diff --git a/desiredata/doc/3.audio.examples/E03.octave.divider.pd b/desiredata/doc/3.audio.examples/E03.octave.divider.pd new file mode 100644 index 00000000..251e4561 --- /dev/null +++ b/desiredata/doc/3.audio.examples/E03.octave.divider.pd @@ -0,0 +1,141 @@ +#N canvas 159 17 793 665 12; +#X obj 477 135 loadbang; +#X obj 31 289 hip~ 5; +#X obj 477 53 adc~ 1; +#X obj 477 190 soundfiler; +#X obj 32 322 output~; +#X text 544 646 updated for Pd version 0.37; +#X obj 478 100 tabwrite~ E03-table; +#X msg 477 162 read ../sound/voice.wav E03-table; +#X obj 117 64 fiddle~ 2048; +#X obj 118 95 unpack; +#X obj 111 199 osc~; +#X obj 118 119 moses 1; +#X obj 77 199 *~; +#X obj 145 147 mtof; +#X obj 145 170 *; +#X msg 194 125 0.5; +#X floatatom 194 154 3 0 0 0 - - -; +#X msg 232 125 15; +#N canvas 0 0 446 202 /SUBPATCH/ 0; +#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 100 20 inlet~; +#X obj 99 87 *~; +#X obj 98 159 outlet~; +#X text 381 181 corner; +#X connect 0 0 2 1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X coords 0 0 100 100 40 18 1; +#X restore 78 248 pd; +#N canvas 0 0 446 202 /SUBPATCH/ 0; +#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 100 20 inlet~; +#X obj 99 87 *~; +#X obj 98 159 outlet~; +#X text 381 181 corner; +#X connect 0 0 2 1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X coords 0 0 100 100 40 18 1; +#X restore 32 248 pd; +#X obj 78 222 *~ 2; +#X obj 194 100 loadbang; +#N canvas 414 195 613 302 looper 0; +#N canvas 0 0 450 300 graph1 0; +#X array E03-table 44103 float 0; +#X coords 0 1.02 44103 -1.02 200 130 1; +#X restore 349 22 graph; +#X text 347 161 ---- 44103 samples ----; +#X obj 35 77 +~ 1; +#X obj 35 25 phasor~ 1; +#X obj 35 50 *~ 44100; +#X obj 35 106 tabread4~ E03-table; +#X obj 35 132 outlet~; +#X text 46 238 one-second sample reader loop. You can replace this +with an adc~ if you want to go live.; +#X connect 2 0 5 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X restore 118 18 pd looper; +#X text 561 141 re-read original sample; +#X obj 489 77 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#N canvas 300 203 758 306 delay 0; +#X obj 15 222 outlet~; +#X obj 14 21 inlet~; +#X obj 15 102 loadbang; +#X obj 14 49 delwrite~ E03-del 40; +#X obj 15 195 delread~ E03-del; +#X obj 15 152 expr 1000*1024/$f1; +#X obj 15 128 samplerate~; +#X text 208 47 write to delay line which has enough memory to hold +40 msec; +#X text 125 128 get sample rate at load time; +#X text 185 152 divide 1024 by sample rate to give time in seconds +\; multiply by 1000 to convert to milliseconds.; +#X text 168 197 read from the delay line at the calculater delay; +#X text 317 268 1024-sample delay; +#X connect 1 0 3 0; +#X connect 2 0 6 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X restore 31 71 pd delay; +#X text 242 4 OCTAVE DIVIDING VIA RING MODULATION; +#X text 508 75 <-- record a sample; +#X text 265 125 <-- choose an effect; +#X text 157 231 on/off for original; +#X text 128 247 <--and processed sounds; +#X text 196 274 This patch demonstrates using ring modulation to alias +a sound down one octave. The ring modulation itself ("osc~" and multiplier) +is easy. (We step it up by a factor of 2 to balance the original better.) +; +#X text 198 340 Harder is getting the fundamental frequency of the +original sound. We do this with the complicated "fiddle~" object \, +which puts out a stream of analysis data for an incoming signal. The +"2048" argument specifies the analysis window size. The analysis is +most closely aligned with what the sound was doing at the middle of +the window \, i.e. \, 1024 samples ago. The "pd delay" window delays +the signal itself 1024 samples so it will be as tightly synchronized +with the analysis data as possible. (If you're doing this on a real-time +input \, you might drop the delay and settle for less perfect synchronization.) +; +#X text 198 512 About fiddle~ \, suffice it to say that the third outlet +contains (pitch \, amplitude) pairs. We unpack the pitch and strip +out any zeros (when fiddle~ fails to find a pitch it outputs zero but +we'd rather stick with the most recent good one). This is converted +from MIDI to Hertz \, and multiplied by 1/2 to control the modulation +oscillator. (You can also try large-ish integers which leave the pitch +intact but introduce funny formants.); +#X msg 406 237 read ../../saucisse.wav E03-table; +#X obj 25 16 adc~ 1; +#X connect 0 0 7 0; +#X connect 1 0 4 0; +#X connect 1 0 4 1; +#X connect 2 0 6 0; +#X connect 7 0 3 0; +#X connect 8 2 9 0; +#X connect 9 0 11 0; +#X connect 10 0 12 1; +#X connect 11 1 13 0; +#X connect 12 0 20 0; +#X connect 13 0 14 0; +#X connect 14 0 10 0; +#X connect 15 0 16 0; +#X connect 16 0 14 1; +#X connect 17 0 16 0; +#X connect 18 0 1 0; +#X connect 19 0 1 0; +#X connect 20 0 18 0; +#X connect 21 0 15 0; +#X connect 22 0 8 0; +#X connect 22 0 25 0; +#X connect 24 0 6 0; +#X connect 25 0 19 0; +#X connect 25 0 12 0; +#X connect 34 0 3 0; +#X connect 35 0 25 0; diff --git a/desiredata/doc/3.audio.examples/E04.difference.tone.pd b/desiredata/doc/3.audio.examples/E04.difference.tone.pd new file mode 100644 index 00000000..7272222b --- /dev/null +++ b/desiredata/doc/3.audio.examples/E04.difference.tone.pd @@ -0,0 +1,45 @@ +#N canvas 266 135 637 523 12; +#X obj 19 128 +~; +#X obj 18 209 output~; +#X text 141 3 NONLINEAR DISTORTION AND DIFFERENCE TONES; +#X obj 154 171 / 100; +#X floatatom 154 151 5 0 500 0 - - -; +#X obj 18 181 clip~ -1 1; +#X floatatom 42 81 5 0 0 0 - - -; +#X obj 42 103 osc~ 200; +#X obj 18 155 *~; +#X obj 42 35 loadbang; +#X msg 154 127 50; +#X obj 154 103 loadbang; +#X text 385 494 updated for Pd version 0.37; +#X text 94 80 <-- frequency of second tone; +#X text 209 151 <-- before clipping; +#X text 234 134 amplitude of sum; +#X obj 18 9 osc~ 300; +#X msg 42 58 225; +#X text 99 226 This patch demonstrates how nonlinear distortion (also +known as "waveshaping") can create difference tones from a pair of +sinusoids. The sinusoids are initially tuned to 225 and 300 Hz \, a +musical fourth \, and have amplitude of 50 percent (0.5) so that the +sum is always less than 1 in absolute value. At these settings the +"clip~" object passes its input through unchanged.; +#X text 100 344 If the amplitude rises above 50 percent \, the clip~ +object starts altering the signal nonlinearly \, and the result is +no longer as if the two sinusoids had been processed separately. Instead +\, they "intermodulate" \, finding a common subharmonic if one exists. +At 300 and 225 Hz \, the subharmonic is at 75 \, two octaves below +the upper tone and a twelveth below the lower one. Change the frequency +of the second tone and you will hear a variety of effects.; +#X connect 0 0 8 0; +#X connect 3 0 8 1; +#X connect 4 0 3 0; +#X connect 5 0 1 0; +#X connect 5 0 1 1; +#X connect 6 0 7 0; +#X connect 7 0 0 1; +#X connect 8 0 5 0; +#X connect 9 0 17 0; +#X connect 10 0 4 0; +#X connect 11 0 10 0; +#X connect 16 0 0 0; +#X connect 17 0 6 0; diff --git a/desiredata/doc/3.audio.examples/E05.chebychev.pd b/desiredata/doc/3.audio.examples/E05.chebychev.pd new file mode 100644 index 00000000..90c628db --- /dev/null +++ b/desiredata/doc/3.audio.examples/E05.chebychev.pd @@ -0,0 +1,257 @@ +#N canvas 224 60 657 571 12; +#X obj 23 269 output~; +#X obj 45 74 / 100; +#X floatatom 45 54 5 0 100 0 - - -; +#X obj 23 144 *~; +#X text 403 539 updated for Pd version 0.37; +#X obj 22 29 osc~ 220; +#X obj 45 97 pack 0 50; +#X obj 45 121 line~; +#X text 97 54 <-- index in; +#X text 117 68 hundredths; +#X obj 23 169 *~ 128; +#X obj 23 217 tabread4~ E05-tab; +#N canvas 0 0 450 300 graph1 0; +#X array E05-tab 259 float 1; +#A 0 -1.20148 -1 -0.810724 -0.63326 -0.467216 -0.31221 -0.167866 -0.0338144 +0.0903053 0.204849 0.310166 0.406597 0.494477 0.574137 0.645895 0.71007 +0.766969 0.816895 0.860145 0.897008 0.927771 0.952708 0.972093 0.98619 +0.995261 0.999557 0.999329 0.994816 0.986257 0.97388 0.957912 0.938572 +0.916074 0.890625 0.86243 0.831684 0.798582 0.76331 0.726049 0.686977 +0.646266 0.60408 0.560583 0.515931 0.470276 0.423765 0.37654 0.328738 +0.280493 0.231934 0.183183 0.13436 0.0855808 0.0369554 -0.01141 -0.0594134 +-0.106956 -0.153946 -0.200292 -0.245909 -0.290715 -0.334633 -0.377589 +-0.419512 -0.460337 -0.5 -0.538443 -0.57561 -0.611449 -0.645912 -0.678953 +-0.710532 -0.740609 -0.76915 -0.796122 -0.821497 -0.845248 -0.867354 +-0.887794 -0.906551 -0.923612 -0.938965 -0.952601 -0.964516 -0.974704 +-0.983167 -0.989906 -0.994925 -0.99823 -0.999832 -0.999741 -0.997972 +-0.994539 -0.98946 -0.982757 -0.97445 -0.964564 -0.953125 -0.94016 +-0.925699 -0.909772 -0.892414 -0.873658 -0.85354 -0.832098 -0.809372 +-0.785401 -0.760228 -0.733895 -0.706446 -0.677928 -0.648387 -0.61787 +-0.586426 -0.554105 -0.520957 -0.487033 -0.452386 -0.417069 -0.381135 +-0.344638 -0.307632 -0.270174 -0.232319 -0.194122 -0.15564 -0.11693 +-0.0780487 -0.039053 0 0.039053 0.0780487 0.11693 0.15564 0.194122 +0.232319 0.270174 0.307632 0.344638 0.381135 0.417069 0.452386 0.487033 +0.520957 0.554105 0.586426 0.61787 0.648387 0.677928 0.706446 0.733895 +0.760228 0.785401 0.809372 0.832098 0.85354 0.873658 0.892414 0.909772 +0.925699 0.94016 0.953125 0.964564 0.97445 0.982757 0.98946 0.994539 +0.997972 0.999741 0.999832 0.99823 0.994925 0.989906 0.983167 0.974704 +0.964516 0.952601 0.938965 0.923612 0.906551 0.887794 0.867354 0.845248 +0.821497 0.796122 0.76915 0.740609 0.710532 0.678953 0.645912 0.611449 +0.57561 0.538443 0.5 0.460337 0.419512 0.377589 0.334633 0.290715 0.245909 +0.200292 0.153946 0.106956 0.0594134 0.01141 -0.0369554 -0.0855808 +-0.13436 -0.183183 -0.231934 -0.280493 -0.328738 -0.37654 -0.423765 +-0.470276 -0.515931 -0.560583 -0.60408 -0.646266 -0.686977 -0.726049 +-0.76331 -0.798582 -0.831684 -0.86243 -0.890625 -0.916074 -0.938572 +-0.957912 -0.97388 -0.986257 -0.994816 -0.999329 -0.999557 -0.995261 +-0.98619 -0.972093 -0.952708 -0.927771 -0.897008 -0.860145 -0.816895 +-0.766969 -0.71007 -0.645895 -0.574137 -0.494477 -0.406597 -0.310166 +-0.204849 -0.0903053 0.0338144 0.167866 0.31221 0.467216 0.63326 0.810724 +1 1.20148; +#X coords 0 1 258 -1 200 140 1; +#X restore 262 46 graph; +#X text 497 28 subpatch to; +#N canvas 113 0 849 700 make-table 0; +#X obj 141 304 t b b; +#X obj 213 329 f; +#X obj 251 329 + 1; +#X msg 235 306 0; +#X obj 141 327 until; +#X obj 213 359 t f f; +#X obj 114 436 tabwrite E05-tab; +#X obj 140 355 sel 258; +#X text 203 172 normalize from -1 to 1; +#X obj 141 285 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 88 386 expr ($f1-129)/128; +#X obj 141 262 inlet; +#X obj 171 534 t b b; +#X obj 243 559 f; +#X obj 281 559 + 1; +#X msg 265 536 0; +#X obj 171 557 until; +#X obj 243 589 t f f; +#X obj 144 666 tabwrite E05-tab; +#X obj 170 585 sel 258; +#X obj 171 515 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 118 616 expr ($f1-129)/128; +#X obj 171 492 inlet; +#X obj 444 228 t b b; +#X obj 516 253 f; +#X obj 554 253 + 1; +#X msg 538 230 0; +#X obj 444 251 until; +#X obj 516 283 t f f; +#X obj 417 360 tabwrite E05-tab; +#X obj 443 279 sel 258; +#X obj 391 334 expr 16*$f1*$f1*$f1*$f1*$f1-20*$f1*$f1*$f1+5*$f1; +#X obj 444 209 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 391 310 expr ($f1-129)/128; +#X obj 444 186 inlet; +#X obj 504 476 t b b; +#X obj 576 501 f; +#X obj 614 501 + 1; +#X msg 598 478 0; +#X obj 504 499 until; +#X obj 576 531 t f f; +#X obj 477 624 tabwrite E05-tab; +#X obj 503 527 sel 258; +#X obj 504 457 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 448 558 expr ($f1-129)/128; +#X obj 504 434 inlet; +#X obj 88 410 expr 4*$f1*$f1*$f1-3*$f1; +#X obj 118 640 expr 8*$f1*$f1*$f1*$f1-8*$f1*$f1+1; +#X obj 448 582 expr 32*$f1*$f1*$f1*$f1*$f1*$f1 -48*$f1*$f1*$f1*$f1+18*$f1*$f1-1 +; +#X text 641 622 6th C.P. and basta.; +#X obj 83 92 t b b; +#X obj 155 117 f; +#X obj 193 117 + 1; +#X msg 177 94 0; +#X obj 83 115 until; +#X obj 155 147 t f f; +#X obj 56 224 tabwrite E05-tab; +#X obj 82 143 sel 258; +#X obj 83 73 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 30 174 expr ($f1-129)/128; +#X obj 83 50 inlet; +#X obj 30 198 expr 2*$f1*$f1-1; +#X text 203 198 2nd C.P.; +#X text 309 410 3rd C.P.; +#X text 331 660 4th C.P.; +#X text 613 357 5th C.P.; +#X text 259 51 This patch computes Chebychev polynomials and stores +them in a wavetable for use later.; +#X connect 0 0 4 0; +#X connect 0 1 3 0; +#X connect 1 0 2 0; +#X connect 1 0 5 0; +#X connect 1 0 7 0; +#X connect 2 0 1 1; +#X connect 3 0 1 1; +#X connect 4 0 1 0; +#X connect 5 0 10 0; +#X connect 5 1 6 1; +#X connect 7 0 4 1; +#X connect 9 0 0 0; +#X connect 10 0 46 0; +#X connect 11 0 9 0; +#X connect 12 0 16 0; +#X connect 12 1 15 0; +#X connect 13 0 14 0; +#X connect 13 0 17 0; +#X connect 13 0 19 0; +#X connect 14 0 13 1; +#X connect 15 0 13 1; +#X connect 16 0 13 0; +#X connect 17 0 21 0; +#X connect 17 1 18 1; +#X connect 19 0 16 1; +#X connect 20 0 12 0; +#X connect 21 0 47 0; +#X connect 22 0 20 0; +#X connect 23 0 27 0; +#X connect 23 1 26 0; +#X connect 24 0 25 0; +#X connect 24 0 28 0; +#X connect 24 0 30 0; +#X connect 25 0 24 1; +#X connect 26 0 24 1; +#X connect 27 0 24 0; +#X connect 28 0 33 0; +#X connect 28 1 29 1; +#X connect 30 0 27 1; +#X connect 31 0 29 0; +#X connect 32 0 23 0; +#X connect 33 0 31 0; +#X connect 34 0 32 0; +#X connect 35 0 39 0; +#X connect 35 1 38 0; +#X connect 36 0 37 0; +#X connect 36 0 40 0; +#X connect 36 0 42 0; +#X connect 37 0 36 1; +#X connect 38 0 36 1; +#X connect 39 0 36 0; +#X connect 40 0 44 0; +#X connect 40 1 41 1; +#X connect 42 0 39 1; +#X connect 43 0 35 0; +#X connect 44 0 48 0; +#X connect 45 0 43 0; +#X connect 46 0 6 0; +#X connect 47 0 18 0; +#X connect 48 0 41 0; +#X connect 50 0 54 0; +#X connect 50 1 53 0; +#X connect 51 0 52 0; +#X connect 51 0 55 0; +#X connect 51 0 57 0; +#X connect 52 0 51 1; +#X connect 53 0 51 1; +#X connect 54 0 51 0; +#X connect 55 0 59 0; +#X connect 55 1 56 1; +#X connect 57 0 54 1; +#X connect 58 0 50 0; +#X connect 59 0 61 0; +#X connect 60 0 58 0; +#X connect 61 0 56 0; +#X restore 489 146 pd make-table; +#X obj 489 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 517 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 545 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 573 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 600 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 497 45 calculate; +#X text 495 64 Chebychev; +#X text 496 83 polynomials; +#X text 490 107 2; +#X text 517 107 3; +#X text 546 107 4; +#X text 572 108 5; +#X text 601 107 6; +#X text 134 2 waveshaping with Chebychev polynomials; +#X obj 23 193 +~ 129; +#X obj 23 242 hip~ 5; +#X text 107 256 This patch demonstrates using Chebychev polynomials +(of the first kind) to generate pure harmonics using waveshaping. The +pure harmonic only comes out when the index is one (top of the scale). +Smaller indices will give various mixes of harmonics. The table initially +holds the fifth Chebychev polynomial \, so you can get the fifth harmonic. +; +#X text 106 355 There is an audible "rolling" sound as the index changes +for the higher degree polynomials \, because the amplitudes of the +lower partials can rise and fall several times apiece as the index +rises from zero to one.; +#X text 105 422 Indices greater than one will try to read values outside +the table (which would be clipped appropriately). Anyway \, the polynomials +increase rapidly in value outside the interval from -1 to 1 that we +are using here.; +#X text 106 491 When you get tired of Chebychef polynomials you can +draw your own functions by hand and/or try other formulas.; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 10 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 7 0 3 1; +#X connect 10 0 29 0; +#X connect 11 0 30 0; +#X connect 15 0 14 0; +#X connect 16 0 14 1; +#X connect 17 0 14 2; +#X connect 18 0 14 3; +#X connect 19 0 14 4; +#X connect 29 0 11 0; +#X connect 30 0 0 0; +#X connect 30 0 0 1; diff --git a/desiredata/doc/3.audio.examples/E06.exponential.pd b/desiredata/doc/3.audio.examples/E06.exponential.pd new file mode 100644 index 00000000..02fe058b --- /dev/null +++ b/desiredata/doc/3.audio.examples/E06.exponential.pd @@ -0,0 +1,335 @@ +#N canvas 88 112 754 729 12; +#N canvas 0 0 450 300 graph1 0; +#X array E06-signal 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 509 46 graph; +#X obj 14 265 hip~ 5; +#N canvas 0 0 450 300 graph1 0; +#X array E06-spectrum 128 float 0; +#X coords 0 4300 127 -40 257 130 1; +#X restore 463 222 graph; +#N canvas 45 83 558 569 fft 0; +#X obj 19 61 inlet~; +#X obj 208 212 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 193 164 delay two samples; +#X text 191 182 for better graphing; +#X obj 16 425 samplerate~; +#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 16 472 5 0 0 0 - - -; +#X obj 16 448 / 256; +#X obj 16 378 loadbang; +#X floatatom 16 541 5 0 0 0 - - -; +#X obj 24 494 s fundamental; +#X obj 16 517 ftom; +#X text 14 319 At load time \, calculate a good choice of fundamental +frequency for showing spectra: the 16th bin in a 4096-point spectrum +\, so SR*16/4096 or SR/256.; +#X floatatom 191 480 5 0 0 0 - - -; +#X obj 191 456 / 4096; +#X text 187 425 One bin is SR/4096:; +#X obj 191 502 s freq-step; +#X obj 208 295 tabwrite~ E06-spectrum; +#X obj 19 295 tabwrite~ E06-signal; +#X text 71 540 <-fundamental pitch; +#X obj 220 257 metro 500; +#X obj 220 234 inlet; +#X text 273 232 toggle to graph repeatedly; +#X text 262 212 bang to graph once; +#X connect 0 0 2 0; +#X connect 0 0 29 0; +#X connect 1 0 28 0; +#X connect 1 0 29 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 28 0; +#X connect 15 0 18 0; +#X connect 15 0 25 0; +#X connect 16 0 15 0; +#X connect 17 0 21 0; +#X connect 17 0 22 0; +#X connect 18 0 17 0; +#X connect 19 0 16 0; +#X connect 22 0 20 0; +#X connect 24 0 27 0; +#X connect 25 0 24 0; +#X connect 31 0 28 0; +#X connect 31 0 29 0; +#X connect 32 0 31 0; +#X restore 22 238 pd fft; +#X text 509 178 ---- 0.02 seconds ----; +#X obj 82 217 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 14 293 output~; +#X text 499 708 updated for Pd version 0.37; +#X text 494 355 1; +#X text 528 355 2; +#X text 560 355 3; +#X text 592 355 4; +#X text 625 355 5; +#X text 655 355 6; +#X text 686 355 7; +#X text 462 355 0; +#X text 496 372 -- partial number --; +#X text 711 100 0; +#X obj 12 30 r fundamental; +#X obj 12 57 osc~; +#X text 573 26 WAVEFORM; +#X text 557 204 SPECTRUM; +#X text 723 338 0; +#X text 721 217 1; +#X text 722 276 0.5; +#X obj 82 238 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#N canvas 0 0 450 300 graph1 0; +#X array E06-tab 1003 float 1; +#A 0 1.01005 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765 +0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095 0.869358 +0.860708 0.852144 0.843665 0.83527 0.826959 0.818731 0.810584 0.802519 +0.794534 0.786628 0.778801 0.771052 0.76338 0.755784 0.748264 0.740818 +0.733447 0.726149 0.718924 0.71177 0.704688 0.697676 0.690734 0.683861 +0.677057 0.67032 0.66365 0.657047 0.650509 0.644036 0.637628 0.631284 +0.625002 0.618783 0.612626 0.606531 0.600496 0.594521 0.588605 0.582748 +0.57695 0.571209 0.565525 0.559898 0.554327 0.548812 0.543351 0.537944 +0.532592 0.527292 0.522046 0.516851 0.511709 0.506617 0.501576 0.496585 +0.491644 0.486752 0.481909 0.477114 0.472367 0.467666 0.463013 0.458406 +0.453845 0.449329 0.444858 0.440432 0.436049 0.431711 0.427415 0.423162 +0.418952 0.414783 0.410656 0.40657 0.402524 0.398519 0.394554 0.390628 +0.386741 0.382893 0.379083 0.375311 0.371577 0.367879 0.364219 0.360595 +0.357007 0.353455 0.349938 0.346456 0.343008 0.339595 0.336216 0.332871 +0.329559 0.32628 0.323033 0.319819 0.316637 0.313486 0.310367 0.307279 +0.304221 0.301194 0.298197 0.29523 0.292293 0.289384 0.286505 0.283654 +0.280832 0.278037 0.275271 0.272532 0.26982 0.267135 0.264477 0.261846 +0.25924 0.256661 0.254107 0.251579 0.249075 0.246597 0.244143 0.241714 +0.239309 0.236928 0.23457 0.232236 0.229925 0.227638 0.225373 0.22313 +0.22091 0.218712 0.216536 0.214381 0.212248 0.210136 0.208045 0.205975 +0.203926 0.201897 0.199888 0.197899 0.19593 0.19398 0.19205 0.190139 +0.188247 0.186374 0.18452 0.182684 0.180866 0.179066 0.177284 0.17552 +0.173774 0.172045 0.170333 0.168638 0.16696 0.165299 0.163654 0.162026 +0.160414 0.158817 0.157237 0.155673 0.154124 0.15259 0.151072 0.149569 +0.14808 0.146607 0.145148 0.143704 0.142274 0.140858 0.139457 0.138069 +0.136695 0.135335 0.133989 0.132655 0.131336 0.130029 0.128735 0.127454 +0.126186 0.12493 0.123687 0.122456 0.121238 0.120032 0.118837 0.117655 +0.116484 0.115325 0.114178 0.113042 0.111917 0.110803 0.109701 0.108609 +0.107528 0.106459 0.105399 0.10435 0.103312 0.102284 0.101266 0.100259 +0.0992613 0.0982736 0.0972958 0.0963276 0.0953692 0.0944202 0.0934807 +0.0925506 0.0916297 0.0907179 0.0898153 0.0889216 0.0880368 0.0871608 +0.0862936 0.085435 0.0845849 0.0837432 0.08291 0.082085 0.0812682 0.0804596 +0.079659 0.0788664 0.0780817 0.0773047 0.0765356 0.075774 0.07502 0.0742736 +0.0735345 0.0728029 0.0720785 0.0713613 0.0706512 0.0699482 0.0692522 +0.0685631 0.0678809 0.0672055 0.0665368 0.0658748 0.0652193 0.0645703 +0.0639279 0.0632918 0.062662 0.0620385 0.0614212 0.0608101 0.060205 +0.0596059 0.0590129 0.0584257 0.0578443 0.0572688 0.0566989 0.0561348 +0.0555762 0.0550232 0.0544757 0.0539337 0.053397 0.0528657 0.0523397 +0.0518189 0.0513033 0.0507928 0.0502874 0.0497871 0.0492917 0.0488012 +0.0483156 0.0478349 0.0473589 0.0468877 0.0464212 0.0459593 0.045502 +0.0450492 0.044601 0.0441572 0.0437178 0.0432828 0.0428521 0.0424257 +0.0420036 0.0415857 0.0411719 0.0407622 0.0403566 0.0399551 0.0395575 +0.0391639 0.0387742 0.0383884 0.0380064 0.0376283 0.0372538 0.0368832 +0.0365162 0.0361528 0.0357931 0.035437 0.0350844 0.0347353 0.0343896 +0.0340475 0.0337087 0.0333733 0.0330412 0.0327124 0.0323869 0.0320647 +0.0317456 0.0314298 0.031117 0.0308074 0.0305009 0.0301974 0.0298969 +0.0295994 0.0293049 0.0290133 0.0287246 0.0284388 0.0281559 0.0278757 +0.0275983 0.0273237 0.0270518 0.0267827 0.0265162 0.0262523 0.0259911 +0.0257325 0.0254765 0.025223 0.024972 0.0247235 0.0244775 0.024234 +0.0239928 0.0237541 0.0235177 0.0232837 0.0230521 0.0228227 0.0225956 +0.0223708 0.0221482 0.0219278 0.0217096 0.0214936 0.0212797 0.021068 +0.0208584 0.0206508 0.0204453 0.0202419 0.0200405 0.0198411 0.0196437 +0.0194482 0.0192547 0.0190631 0.0188734 0.0186856 0.0184997 0.0183156 +0.0181334 0.017953 0.0177743 0.0175975 0.0174224 0.017249 0.0170774 +0.0169075 0.0167392 0.0165727 0.0164078 0.0162445 0.0160829 0.0159229 +0.0157644 0.0156076 0.0154523 0.0152985 0.0151463 0.0149956 0.0148464 +0.0146986 0.0145524 0.0144076 0.0142642 0.0141223 0.0139818 0.0138427 +0.0137049 0.0135686 0.0134336 0.0132999 0.0131675 0.0130365 0.0129068 +0.0127784 0.0126512 0.0125254 0.0124007 0.0122773 0.0121552 0.0120342 +0.0119145 0.0117959 0.0116786 0.0115624 0.0114473 0.0113334 0.0112206 +0.011109 0.0109985 0.010889 0.0107807 0.0106734 0.0105672 0.0104621 +0.010358 0.0102549 0.0101529 0.0100518 0.00995182 0.0098528 0.00975476 +0.0096577 0.0095616 0.00946646 0.00937227 0.00927902 0.00918669 0.00909528 +0.00900478 0.00891518 0.00882647 0.00873865 0.0086517 0.00856561 0.00848038 +0.008396 0.00831246 0.00822975 0.00814786 0.00806679 0.00798652 0.00790705 +0.00782838 0.00775048 0.00767337 0.00759701 0.00752142 0.00744658 0.00737249 +0.00729913 0.0072265 0.0071546 0.00708341 0.00701293 0.00694315 0.00687406 +0.00680567 0.00673795 0.0066709 0.00660453 0.00653881 0.00647375 0.00640933 +0.00634556 0.00628242 0.00621991 0.00615802 0.00609675 0.00603608 0.00597602 +0.00591656 0.00585769 0.0057994 0.0057417 0.00568457 0.00562801 0.00557201 +0.00551657 0.00546167 0.00540733 0.00535353 0.00530026 0.00524752 0.0051953 +0.00514361 0.00509243 0.00504176 0.00499159 0.00494193 0.00489275 0.00484407 +0.00479587 0.00474815 0.00470091 0.00465413 0.00460782 0.00456197 0.00451658 +0.00447164 0.00442715 0.0043831 0.00433948 0.00429631 0.00425356 0.00421123 +0.00416933 0.00412785 0.00408677 0.00404611 0.00400585 0.00396599 0.00392653 +0.00388746 0.00384878 0.00381048 0.00377257 0.00373503 0.00369786 0.00366107 +0.00362464 0.00358857 0.00355287 0.00351752 0.00348252 0.00344786 0.00341356 +0.00337959 0.00334597 0.00331267 0.00327971 0.00324708 0.00321477 0.00318278 +0.00315111 0.00311976 0.00308871 0.00305798 0.00302755 0.00299743 0.0029676 +0.00293808 0.00290884 0.0028799 0.00285124 0.00282287 0.00279478 0.00276698 +0.00273944 0.00271219 0.0026852 0.00265848 0.00263203 0.00260584 0.00257991 +0.00255424 0.00252883 0.00250366 0.00247875 0.00245409 0.00242967 0.00240549 +0.00238156 0.00235786 0.0023344 0.00231117 0.00228818 0.00226541 0.00224287 +0.00222055 0.00219846 0.00217658 0.00215492 0.00213348 0.00211225 0.00209124 +0.00207043 0.00204983 0.00202943 0.00200924 0.00198925 0.00196945 0.00194986 +0.00193045 0.00191125 0.00189223 0.0018734 0.00185476 0.0018363 0.00181803 +0.00179994 0.00178203 0.0017643 0.00174675 0.00172937 0.00171216 0.00169512 +0.00167826 0.00166156 0.00164502 0.00162866 0.00161245 0.00159641 0.00158052 +0.0015648 0.00154923 0.00153381 0.00151855 0.00150344 0.00148848 0.00147367 +0.00145901 0.00144449 0.00143012 0.00141589 0.0014018 0.00138785 0.00137404 +0.00136037 0.00134683 0.00133343 0.00132016 0.00130703 0.00129402 0.00128115 +0.0012684 0.00125578 0.00124328 0.00123091 0.00121866 0.00120654 0.00119453 +0.00118265 0.00117088 0.00115923 0.00114769 0.00113627 0.00112497 0.00111377 +0.00110269 0.00109172 0.00108086 0.0010701 0.00105946 0.00104891 0.00103848 +0.00102814 0.00101791 0.00100779 0.000997758 0.00098783 0.000978001 +0.00096827 0.000958635 0.000949097 0.000939653 0.000930303 0.000921047 +0.000911882 0.000902808 0.000893825 0.000884932 0.000876127 0.000867409 +0.000858778 0.000850233 0.000841773 0.000833397 0.000825105 0.000816895 +0.000808767 0.000800719 0.000792752 0.000784864 0.000777055 0.000769323 +0.000761668 0.000754089 0.000746586 0.000739157 0.000731803 0.000724521 +0.000717312 0.000710174 0.000703108 0.000696112 0.000689185 0.000682328 +0.000675539 0.000668817 0.000662162 0.000655574 0.00064905 0.000642592 +0.000636198 0.000629868 0.000623601 0.000617396 0.000611253 0.000605171 +0.000599149 0.000593188 0.000587285 0.000581442 0.000575656 0.000569928 +0.000564257 0.000558643 0.000553084 0.000547581 0.000542133 0.000536738 +0.000531398 0.00052611 0.000520875 0.000515692 0.000510561 0.000505481 +0.000500451 0.000495472 0.000490542 0.000485661 0.000480829 0.000476044 +0.000471307 0.000466618 0.000461975 0.000457378 0.000452827 0.000448321 +0.000443861 0.000439444 0.000435072 0.000430743 0.000426456 0.000422213 +0.000418012 0.000413853 0.000409735 0.000405658 0.000401622 0.000397626 +0.000393669 0.000389752 0.000385874 0.000382034 0.000378233 0.00037447 +0.000370744 0.000367055 0.000363402 0.000359786 0.000356206 0.000352662 +0.000349153 0.000345679 0.000342239 0.000338834 0.000335463 0.000332125 +0.00032882 0.000325548 0.000322309 0.000319102 0.000315927 0.000312783 +0.000309671 0.00030659 0.000303539 0.000300519 0.000297529 0.000294568 +0.000291637 0.000288735 0.000285862 0.000283018 0.000280202 0.000277414 +0.000274654 0.000271921 0.000269215 0.000266536 0.000263884 0.000261259 +0.000258659 0.000256085 0.000253537 0.000251014 0.000248517 0.000246044 +0.000243596 0.000241172 0.000238772 0.000236396 0.000234044 0.000231716 +0.00022941 0.000227127 0.000224867 0.00022263 0.000220415 0.000218221 +0.00021605 0.0002139 0.000211772 0.000209665 0.000207579 0.000205513 +0.000203468 0.000201444 0.000199439 0.000197455 0.00019549 0.000193545 +0.000191619 0.000189713 0.000187825 0.000185956 0.000184106 0.000182274 +0.00018046 0.000178665 0.000176887 0.000175127 0.000173384 0.000171659 +0.000169951 0.00016826 0.000166586 0.000164928 0.000163287 0.000161663 +0.000160054 0.000158461 0.000156885 0.000155324 0.000153778 0.000152248 +0.000150733 0.000149233 0.000147748 0.000146278 0.000144823 0.000143382 +0.000141955 0.000140543 0.000139144 0.00013776 0.000136389 0.000135032 +0.000133688 0.000132358 0.000131041 0.000129737 0.000128446 0.000127168 +0.000125903 0.00012465 0.00012341 0.000122182 0.000120966 0.000119763 +0.000118571 0.000117391 0.000116223 0.000115067 0.000113922 0.000112788 +0.000111666 0.000110555 0.000109455 0.000108366 0.000107287 0.00010622 +0.000105163 0.000104117 0.00010308 0.000102055 0.000101039 0.000100034 +9.90387e-05 9.80533e-05 9.70776e-05 9.61117e-05 9.51553e-05 9.42085e-05 +9.32711e-05 9.23431e-05 9.14242e-05 9.05145e-05 8.96139e-05 8.87222e-05 +8.78394e-05 8.69654e-05 8.61001e-05 8.52434e-05 8.43952e-05 8.35554e-05 +8.27241e-05 8.1901e-05 8.1086e-05 8.02792e-05 7.94804e-05 7.86896e-05 +7.79066e-05 7.71314e-05 7.6364e-05 7.56041e-05 7.48518e-05 7.4107e-05 +7.33696e-05 7.26396e-05 7.19169e-05 7.12012e-05 7.04928e-05 6.97914e-05 +6.9097e-05 6.84094e-05 6.77287e-05 6.70548e-05 6.63876e-05 6.5727e-05 +6.5073e-05 6.44256e-05 6.37845e-05 6.31498e-05 6.25215e-05 6.18994e-05 +6.12835e-05 6.06737e-05 6.007e-05 5.94723e-05 5.88805e-05 5.82947e-05 +5.77146e-05 5.71403e-05 5.65718e-05 5.60089e-05 5.54516e-05 5.48998e-05 +5.43536e-05 5.38128e-05 5.32773e-05 5.27472e-05 5.22224e-05 5.17027e-05 +5.11883e-05 5.06789e-05 5.01747e-05 4.96754e-05 4.91812e-05 4.86918e-05 +4.82073e-05 4.77276e-05 4.72527e-05 4.67826e-05 4.63171e-05; +#A 1000 0 0 0; +#X coords 0 1 1002 0 180 100 1; +#X restore 254 118 graph; +#N canvas 140 79 589 249 make-table 0; +#X obj 164 81 t b b; +#X obj 236 106 f; +#X obj 274 106 + 1; +#X msg 258 83 0; +#X obj 164 104 until; +#X obj 236 136 t f f; +#X obj 164 62 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 104 164 expr exp(-($f1-1)/100); +#X obj 163 132 sel 999; +#X text 35 10 This patch computes a decaying exponential function \, +100 points per unit.; +#X obj 137 196 tabwrite E06-tab; +#X connect 0 0 4 0; +#X connect 0 1 3 0; +#X connect 1 0 2 0; +#X connect 1 0 5 0; +#X connect 1 0 8 0; +#X connect 2 0 1 1; +#X connect 3 0 1 1; +#X connect 4 0 1 0; +#X connect 5 0 7 0; +#X connect 5 1 10 1; +#X connect 6 0 0 0; +#X connect 7 0 10 0; +#X connect 8 0 4 1; +#X restore 302 258 pd make-table; +#X text 251 95 waveshaping function; +#X text 438 210 0; +#X text 437 114 1; +#X obj 12 168 +~ 1; +#X obj 12 146 *~ 100; +#X obj 12 83 +~ 1; +#X floatatom 68 53 5 0 200 0 - - -; +#X obj 68 96 pack 0 50; +#X obj 68 120 line~; +#X text 157 69 tenths; +#X obj 68 73 / 10; +#X obj 12 124 *~; +#X obj 13 190 tabread4~ E06-tab; +#X text 711 40 1; +#X text 712 160 -1; +#X text 103 237 <-- repeatedly; +#X text 104 217 <-- graph once; +#X text 121 0 Waveshaping using an exponential function; +#X text 120 53 <--index in; +#X text 250 218 0; +#X text 417 220 10; +#X text 14 652 When the index of modulation exceeds 5 we scan past +the right hand border of the table (the thousandth point \, corresponding +to exp(-10). This isn't a problem because the values are all close +to zero there.; +#X text 14 555 Table lookup is prepared as follows. First add one to +the sinusoid and adjust its amplitude according to index \; it ranges +from 0 to 2*index. Then adjust for the table's input scale (100 points +per unit \, so multiply by 100) and add one to skip the interpolation +point at the beginning of the table.; +#X text 13 398 Here we use an exponential function as a waveshaping +transfer function. The theory is shown in detail in the accompanying +book \, but in short \, we adjust the sinusoid so that \, as the index +increases \, we scan starting from the left of the transfer function +(previously the reading location grew from the center). The table contains +exp(-x) with x varying from 0 to 10 When the index is zero \, the output +is the constant 1 and the spectrum holds only DC. As the index grows +\, the output is a sequence of steadily narrower pulses \, whose spectrum +gets progressively fatter.; +#X connect 1 0 6 0; +#X connect 1 0 6 1; +#X connect 5 0 3 1; +#X connect 18 0 19 0; +#X connect 19 0 33 0; +#X connect 25 0 3 2; +#X connect 31 0 40 0; +#X connect 32 0 31 0; +#X connect 33 0 39 0; +#X connect 34 0 38 0; +#X connect 35 0 36 0; +#X connect 36 0 39 1; +#X connect 38 0 35 0; +#X connect 39 0 32 0; +#X connect 40 0 3 0; +#X connect 40 0 1 0; diff --git a/desiredata/doc/3.audio.examples/E07.evenodd.pd b/desiredata/doc/3.audio.examples/E07.evenodd.pd new file mode 100644 index 00000000..9715e1ea --- /dev/null +++ b/desiredata/doc/3.audio.examples/E07.evenodd.pd @@ -0,0 +1,109 @@ +#N canvas 187 149 784 591 12; +#X obj 230 101 f; +#X obj 264 77 + 1; +#X obj 264 101 mod 11; +#N canvas 0 0 450 300 graph1 0; +#X array E07 11 float 0; +#X coords 0 96 11 36 100 160 1; +#X restore 528 15 graph; +#X floatatom 320 53 0 10 999 0 - - -; +#X obj 230 173 mtof; +#X msg 26 92 1; +#X obj 27 217 *~; +#X obj 27 267 cos~; +#X obj 27 292 hip~ 5; +#X obj 27 244 +~ 0.1; +#X floatatom 61 144 0 0 0 0 - - -; +#X floatatom 166 145 0 0 200 0 - - -; +#X floatatom 96 144 0 0 999 0 - - -; +#X floatatom 131 144 0 0 999 0 - - -; +#X msg 112 267 0; +#X msg 112 245 0.1; +#X msg 112 289 0.25; +#X text 68 108 ADSR controls; +#X text 106 125 A; +#X text 141 125 D; +#X text 176 125 S; +#X floatatom 320 77 0 1 11 0 - - -; +#X text 354 79 <--increment; +#X text 355 56 <--msec; +#X obj 26 193 *~ 0.01; +#X obj 230 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 27 321 output~; +#X text 527 562 updated for Pd version 0.37; +#X obj 26 170 adsr 70 10 90 50 500; +#X obj 230 150 +; +#X floatatom 265 150 0 -48 120 0 - - -; +#X text 299 152 <--transpose; +#N canvas 0 0 538 208 make-table 0; +#X obj 38 71 loadbang; +#X text 16 11 This patch loads a sequence of pitches into array1. The +values are floating-point \, so we could use microtones (60.5 \, for +example) if we wish.; +#X msg 38 99 \; array1 0 55 56 57 55 57 61 55 61 63 57 63 \; array1 +yticks 36 12 1 \; array1 ylabel 12 36 48 60 72 84 96; +#X connect 0 0 2 0; +#X restore 527 195 pd make-table; +#X obj 176 50 sel 0; +#X msg 26 69 0; +#X text 48 125 level; +#X obj 230 53 metro 130; +#X obj 60 217 osc~; +#X text 111 225 symmetry; +#X text 157 265 even; +#X text 165 288 odd; +#X text 147 244 mixed; +#X obj 230 126 tabread E07; +#X text 253 26 <--ON/OFF; +#X text 238 232 This patch uses a stepping sequencer to control a waveshaping +instrument. A metronome (metro 130) drives a counter (f \, +1 \, and +mod 11) which counts repeatedly through 11 values which are read from +the stored table (tabread E07). The values may be read in sequence +\, by twos or threes \, etc. \, according to the "increment" parameter. +; +#X text 239 328 The metronome also triggers an ADSR envelope \, whose +parameters may also be changed using the "level" \, "A" \, "D" \, and +"S" controls.; +#X text 142 5 SEQUENCED WAVESHAPING SYNTHESIZER; +#X text 240 380 The synthesis (osc~ \, *~ \, +~ 0.1 \, cos~) is a very +simple application of the waveshaping technique. The oscillator (whose +amplitude depends on the ADSR generator) is used as an index into the +"cos~" wavetable. An additional offset ("symmetry") controls how the +oscillator's waveform is centered on the wavetable. If the offset is +zero \, the oscillator reads into the (even) cosine function (producing +only even harmonics). If the offset is 0.25 \, we read 1/4 wave into +the cosine function: the result is an odd function and we get odd harmonics. +Between the two we get mixtures of even and odd.; +#X connect 0 0 1 0; +#X connect 0 0 43 0; +#X connect 1 0 2 0; +#X connect 2 0 0 1; +#X connect 4 0 37 1; +#X connect 5 0 38 0; +#X connect 6 0 29 0; +#X connect 7 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 27 0; +#X connect 9 0 27 1; +#X connect 10 0 8 0; +#X connect 11 0 29 1; +#X connect 12 0 29 4; +#X connect 13 0 29 2; +#X connect 14 0 29 3; +#X connect 15 0 10 1; +#X connect 16 0 10 1; +#X connect 17 0 10 1; +#X connect 22 0 1 1; +#X connect 25 0 7 0; +#X connect 26 0 34 0; +#X connect 26 0 37 0; +#X connect 29 0 25 0; +#X connect 30 0 5 0; +#X connect 31 0 30 1; +#X connect 34 0 35 0; +#X connect 35 0 29 0; +#X connect 37 0 0 0; +#X connect 37 0 6 0; +#X connect 38 0 7 1; +#X connect 43 0 30 0; diff --git a/desiredata/doc/3.audio.examples/E08.phase.mod.pd b/desiredata/doc/3.audio.examples/E08.phase.mod.pd new file mode 100644 index 00000000..53a6e052 --- /dev/null +++ b/desiredata/doc/3.audio.examples/E08.phase.mod.pd @@ -0,0 +1,196 @@ +#N canvas 36 68 722 738 12; +#X obj 224 164 *~; +#X floatatom 224 107 0 0 0 0 - - -; +#X obj 312 144 line~; +#X floatatom 128 121 0 0 0 0 - - -; +#X obj 128 235 cos~; +#X obj 128 191 +~; +#X obj 224 132 osc~ 0; +#X obj 312 118 pack 0 50; +#X floatatom 312 65 0 0 0 0 - - -; +#X obj 312 92 / 100; +#X text 286 27 modulation index; +#X text 286 42 in hundredths; +#X text 125 78 carrier; +#X text 124 96 frequency; +#X text 209 83 frequency; +#X text 210 66 modulation; +#X text 33 132 carrier; +#X text 33 147 phase -->; +#X text 6 175 phase; +#X text 5 190 modulation-->; +#X text 12 217 output; +#X text 11 234 waveform -->; +#X text 129 1 PHASE MODULATION; +#X text 16 378 Most implementations of "FM" actually use phase \, not +frequency \, modulation \, because it extends in a more natural way +to "multi-operator FM" with three or more oscillators.; +#X text 16 434 To do phase modulation \, we split the "carrier oscillator" +into its phase calculation (phasor~) and its waveform lookup (cos~). +These together would be equivalent to an osc~ object \, but the "+~" +between them adds the modulating oscillator's output to the phase. +; +#X text 20 652 We also have to use a line~ to smooth changes in the +modulation index \, which wasn't necessary in the previous patch.; +#X obj 128 148 phasor~; +#X obj 117 557 cos~; +#X obj 117 529 phasor~; +#X text 60 539 this:; +#X text 219 532 is the same; +#X text 220 551 as this:; +#X obj 335 544 osc~; +#N canvas 0 0 450 300 graph2 0; +#X array phase-out 441 float 1; +#A 0 0.43245 0.433463 0.434452 0.435418 0.43636 0.43728 0.438178 0.439056 +0.439912 0.440749 0.441567 0.442366 0.443148 0.443912 0.444659 0.445391 +0.446107 0.446809 0.447497 0.448172 0.448834 0.449484 0.450122 0.450751 +0.451369 0.451978 0.452579 0.453172 0.453758 0.454338 0.454911 0.45548 +0.456045 0.456606 0.457164 0.457719 0.458274 0.458827 0.45938 0.459934 +0.460489 0.461046 0.461605 0.462168 0.462735 0.463306 0.463883 0.464466 +0.465056 0.465654 0.466259 0.466873 0.467497 0.468131 0.468776 0.469433 +0.470102 0.470783 0.471479 0.472188 0.472913 0.473653 0.474409 0.475182 +0.475973 0.476782 0.477611 0.478459 0.479327 0.480216 0.481127 0.48206 +0.483015 0.483994 0.484997 0.486024 0.487077 0.488156 0.48926 0.490392 +0.491552 0.49274 0.493957 0.495203 0.496479 0.497785 0.499123 0.500493 +0.501896 0.503332 0.504801 0.506304 0.507842 0.509415 0.511023 0.512667 +0.514348 0.516066 0.517821 0.519615 0.521447 0.523318 0.525228 0.527179 +0.52917 0.531202 0.533275 0.53539 0.537547 0.539747 0.541992 0.54428 +0.546613 0.548989 0.551411 0.553877 0.556389 0.558947 0.561551 0.564202 +0.5669 0.569645 0.572437 0.575278 0.578166 0.581104 0.58409 0.587125 +0.59021 0.593345 0.596529 0.599764 0.603051 0.606389 0.609778 0.613219 +0.61671 0.620254 0.62385 0.627497 0.631197 0.634949 0.638754 0.642612 +0.646522 0.650486 0.654503 0.658573 0.662696 0.666873 0.671104 -0.324611 +-0.320273 -0.315881 -0.311434 -0.306931 -0.302375 -0.297764 -0.2931 +-0.288381 -0.283608 -0.278781 -0.2739 -0.268964 -0.263975 -0.258931 +-0.253833 -0.248682 -0.243476 -0.238217 -0.232904 -0.227537 -0.222116 +-0.216642 -0.211115 -0.205534 -0.1999 -0.194211 -0.18847 -0.182675 +-0.176829 -0.170929 -0.164978 -0.158975 -0.152919 -0.146813 -0.140655 +-0.134446 -0.128186 -0.121875 -0.115514 -0.109103 -0.102642 -0.0961313 +-0.0895714 -0.0829625 -0.0763049 -0.0695988 -0.0628447 -0.056041 -0.0491896 +-0.0422913 -0.0353461 -0.0283546 -0.0213171 -0.0142339 -0.00710538 +6.80089e-05 0.00728586 0.0145478 0.0218535 0.0292025 0.0365944 0.0440286 +0.0515049 0.0590228 0.0665818 0.0741815 0.0818213 0.0895009 0.0972198 +0.104978 0.112776 0.120611 0.128484 0.136393 0.144339 0.15232 0.160337 +0.168388 0.176473 0.184592 0.192744 0.200929 0.209146 0.217393 0.225672 +0.233981 0.24232 0.250688 0.259084 0.267509 0.27596 0.284439 0.292944 +0.301475 0.310031 0.318611 0.327215 0.335842 0.344491 0.353162 0.361854 +0.370566 0.379298 0.38805 0.39682 0.405608 0.414413 0.423234 0.432072 +0.440924 0.449792 0.458673 0.467567 0.476474 0.485394 0.494324 0.503265 +0.512216 0.521176 0.530145 0.539121 0.548104 0.557094 0.566089 0.575089 +0.584094 0.593102 0.602113 0.611126 0.620141 0.629157 0.638173 0.647189 +0.656203 0.665215 0.674225 0.683232 0.692234 0.701231 0.710224 0.71921 +0.728189 0.737161 0.746124 0.755079 0.764024 0.772959 0.781884 0.790796 +0.799697 0.808584 0.817458 0.826318 0.835162 0.843992 0.852804 0.861601 +0.870379 0.879139 0.887879 0.8966 0.905301 0.913981 0.92264 0.931276 +0.93989 0.94848 0.957046 0.965588 0.974105 0.982595 0.99106 0.999497 +1.00791 1.01629 1.02464 1.03296 1.04126 1.04952 1.05775 1.06595 1.07412 +1.08225 1.09035 1.09841 1.10645 1.11444 1.1224 1.13033 1.13822 1.14607 +1.15388 1.16166 1.1694 1.17709 1.18475 1.19237 1.19995 1.20749 1.21498 +1.22244 1.22985 1.23722 1.24454 1.25182 1.25906 1.26625 1.2734 0.280502 +0.287559 0.29457 0.301536 0.308454 0.315325 0.32215 0.328926 0.335655 +0.342335 0.348967 0.35555 0.362084 0.368568 0.375003 0.381388 0.387722 +0.394004 0.400235 0.406415 0.412544 0.418621 0.424647 0.430621 0.436542 +0.442412 0.448228 0.453993 0.459704 0.465363 0.470969 0.476521 0.48202 +0.487466 0.492858 0.498196 0.503481 0.508712 0.513889 0.519011 0.524077 +0.52909 0.534049 0.538953 0.543804 0.5486 0.553342 0.55803 0.562664 +0.567243 0.571769 0.57624 0.580658 0.585021 0.589331 0.593587 0.597789 +0.601938 0.606033 0.610075 0.614064 0.617999 0.621879 0.625706 0.629481 +0.633203 0.636873 0.640491 0.644057 0.647571 0.651033 0.654445 0.657805 +0.661114 0.664372 0.66758 0.670739 0.673847 0.676905 0.679914 0.682875 +; +#X array cos-out 441 float 1; +#A 0 -0.911256 -0.913872 -0.916365 -0.918789 -0.921097 -0.923342 -0.925486 +-0.927564 -0.92956 -0.931483 -0.93335 -0.935129 -0.936867 -0.938528 +-0.940137 -0.941707 -0.943197 -0.944657 -0.946072 -0.947426 -0.948755 +-0.95004 -0.951276 -0.952491 -0.953672 -0.954806 -0.955924 -0.957024 +-0.958071 -0.959106 -0.960132 -0.961119 -0.962086 -0.963047 -0.963993 +-0.964903 -0.965811 -0.966718 -0.967595 -0.968461 -0.969329 -0.970192 +-0.971025 -0.971863 -0.972707 -0.973527 -0.974343 -0.975168 -0.975986 +-0.976786 -0.977597 -0.978414 -0.979202 -0.980003 -0.980816 -0.981596 +-0.982391 -0.983194 -0.983968 -0.984757 -0.985543 -0.98631 -0.987093 +-0.987851 -0.98861 -0.98937 -0.990102 -0.990852 -0.991557 -0.992275 +-0.99296 -0.993642 -0.994295 -0.994935 -0.995544 -0.996137 -0.996687 +-0.997227 -0.997705 -0.998173 -0.998575 -0.998944 -0.999273 -0.999527 +-0.999743 -0.999894 -0.999966 -0.999981 -0.999927 -0.999765 -0.999526 +-0.999202 -0.998785 -0.99824 -0.997586 -0.996816 -0.995923 -0.994897 +-0.99373 -0.992413 -0.990934 -0.989283 -0.987458 -0.985449 -0.983247 +-0.980843 -0.978222 -0.975372 -0.972288 -0.968961 -0.965377 -0.96153 +-0.95741 -0.952995 -0.948265 -0.943231 -0.937881 -0.932182 -0.926128 +-0.919728 -0.912938 -0.905762 -0.898197 -0.890198 -0.881799 -0.87293 +-0.863637 -0.853855 -0.843612 -0.832873 -0.821629 -0.809886 -0.797593 +-0.784764 -0.771394 -0.757466 -0.742953 -0.727864 -0.712189 -0.695918 +-0.679041 -0.661549 -0.643437 -0.624697 -0.605324 -0.585314 -0.564664 +-0.543374 -0.521441 -0.498869 -0.475658 -0.451811 -0.427334 -0.402219 +-0.376482 -0.350131 -0.323174 -0.295626 -0.267508 -0.238824 -0.2096 +-0.179853 -0.149603 -0.118875 -0.0876953 -0.0560885 -0.0240874 0.00827867 +0.040974 0.0739643 0.107208 0.140666 0.174297 0.208056 0.241893 0.275757 +0.309603 0.343385 0.377036 0.410498 0.443712 0.476616 0.509148 0.541242 +0.572835 0.603858 0.634244 0.66391 0.692797 0.720837 0.747961 0.774084 +0.799131 0.823051 0.845758 0.867169 0.887248 0.90588 0.923037 0.938628 +0.952605 0.964885 0.975433 0.984153 0.991037 0.995988 0.998986 0.999997 +0.998938 0.995807 0.990576 0.983211 0.973668 0.961961 0.948075 0.932007 +0.913757 0.893328 0.87073 0.845995 0.81915 0.790227 0.759268 0.726324 +0.691452 0.654714 0.616181 0.57593 0.534037 0.490599 0.445716 0.399491 +0.352033 0.303459 0.253886 0.203441 0.152259 0.100478 0.0482368 -0.00432081 +-0.057045 -0.109786 -0.162386 -0.214696 -0.266564 -0.317814 -0.368301 +-0.417864 -0.466337 -0.513584 -0.559424 -0.603732 -0.646344 -0.687125 +-0.725934 -0.762631 -0.797101 -0.829205 -0.858847 -0.8859 -0.91028 +-0.931885 -0.950636 -0.966466 -0.97929 -0.989092 -0.995773 -0.999358 +-0.999773 -0.997042 -0.991152 -0.982099 -0.969941 -0.954655 -0.936332 +-0.915008 -0.890737 -0.863625 -0.833713 -0.801132 -0.765979 -0.728348 +-0.688394 -0.646219 -0.601975 -0.555817 -0.507869 -0.45832 -0.407319 +-0.355036 -0.301652 -0.247328 -0.192258 -0.136617 -0.0805873 -0.0243537 +0.0319027 0.0879985 0.143752 0.198986 0.253526 0.307194 0.359834 0.411262 +0.461345 0.509907 0.556823 0.601935 0.645131 0.686266 0.725245 0.761935 +0.796272 0.828125 0.857461 0.884158 0.9082 0.929508 0.948044 0.9638 +0.976698 0.986778 0.99402 0.998404 0.999981 0.998763 0.994751 0.988022 +0.978621 0.966582 0.95197 0.93487 0.915357 0.893512 0.869405 0.843139 +0.814817 0.784538 0.752408 0.718535 0.68303 0.646007 0.607581 0.567872 +0.526996 0.485074 0.442227 0.398573 0.354231 0.30932 0.263957 0.218256 +0.172326 0.126282 0.0802317 0.0342922 -0.0114471 -0.0568861 -0.101931 +-0.146492 -0.190474 -0.233802 -0.276394 -0.318171 -0.359072 -0.399015 +-0.437958 -0.475821 -0.512573 -0.548149 -0.582512 -0.615632 -0.647446 +-0.677951 -0.707119 -0.734897 -0.761296 -0.786293 -0.80988 -0.83204 +-0.852773 -0.872085 -0.88998 -0.906462 -0.921542 -0.935229 -0.94754 +-0.95849 -0.968102 -0.976397 -0.9834 -0.989136 -0.993613 -0.996882 +-0.998976 -0.99993 -0.999748 -0.998484 -0.996188 -0.99286 -0.988563 +-0.983336 -0.977186 -0.970195 -0.962347 -0.953732 -0.944344 -0.934249 +-0.923482 -0.912051 -0.900028 -0.887441 -0.874296 -0.860659 -0.846562 +-0.832035 -0.817101 -0.801792 -0.786149 -0.770201 -0.753977 -0.737507 +-0.720826 -0.703952 -0.686912 -0.669731 -0.652436 -0.635043 -0.617572 +-0.600055 -0.582513 -0.564966 -0.547418 -0.529898 -0.512429 -0.495016 +-0.477676 -0.460438 -0.443287 -0.426265 -0.409364; +#X coords 0 1 440 -1 200 140 1; +#X restore 509 190 graph; +#X obj 213 246 tabwrite~ phase-out; +#X obj 213 273 tabwrite~ cos-out; +#X msg 213 221 bang; +#X text 260 220 <-- graph them; +#X obj 126 296 output~; +#X obj 127 270 hip~; +#X text 408 98 ramped to avoid; +#X text 407 114 clicks.); +#X text 407 82 (the index is; +#X text 435 704 updated for Pd version 0.37; +#X text 21 588 The "modulation" index \, which in true FM is in units +of Hertz \, is dimensionless for phase moduation. "Good" values tend +to be between 0 and 1... in this patch the index is in hundredths. +; +#X connect 0 0 5 1; +#X connect 1 0 6 0; +#X connect 2 0 0 1; +#X connect 3 0 26 0; +#X connect 4 0 35 0; +#X connect 4 0 39 0; +#X connect 5 0 4 0; +#X connect 5 0 34 0; +#X connect 6 0 0 0; +#X connect 7 0 2 0; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 26 0 5 0; +#X connect 28 0 27 0; +#X connect 36 0 34 0; +#X connect 36 0 35 0; +#X connect 39 0 38 0; +#X connect 39 0 38 1; diff --git a/desiredata/doc/3.audio.examples/E09.FM.spectrum.pd b/desiredata/doc/3.audio.examples/E09.FM.spectrum.pd new file mode 100644 index 00000000..21094b41 --- /dev/null +++ b/desiredata/doc/3.audio.examples/E09.FM.spectrum.pd @@ -0,0 +1,139 @@ +#N canvas 127 136 697 536 12; +#X obj 94 188 *~; +#X obj 136 188 line~; +#X obj 18 179 cos~; +#X obj 18 154 +~; +#X obj 136 165 pack 0 50; +#X floatatom 136 117 0 0 0 0 - - -; +#X obj 136 141 / 100; +#X obj 18 129 phasor~; +#X obj 18 284 output~; +#X obj 17 253 hip~; +#X text 442 513 updated for Pd version 0.37; +#N canvas 122 211 558 609 fft 1; +#X obj 19 61 inlet~; +#X obj 208 212 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 193 164 delay two samples; +#X text 191 182 for better graphing; +#X obj 19 459 samplerate~; +#X obj 19 436 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 19 506 5 0 0 0 - - -; +#X obj 19 482 / 256; +#X obj 19 412 loadbang; +#X obj 75 528 s fundamental; +#X text 17 359 At load time \, calculate a good choice of fundamental +frequency for showing spectra: the 16th bin in a 4096-point spectrum +\, so SR*16/4096 or SR/256.; +#X obj 231 259 metro 500; +#X obj 231 236 inlet; +#X text 284 234 toggle to graph repeatedly; +#X text 262 212 bang to graph once; +#X obj 19 295 tabwrite~ E09-signal; +#X obj 231 298 tabwrite~ E09-spectrum; +#X obj 19 528 t b f; +#X msg 19 551 \; cm 6; +#X text 25 585 set carrier multiplier after fundamental; +#X obj 29 205 /~ 4096; +#X msg 209 322 \; pd dsp 1; +#X connect 0 0 2 0; +#X connect 0 0 26 0; +#X connect 1 0 26 0; +#X connect 1 0 27 0; +#X connect 1 0 32 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 31 0; +#X connect 15 0 18 0; +#X connect 16 0 15 0; +#X connect 17 0 28 0; +#X connect 18 0 17 0; +#X connect 19 0 16 0; +#X connect 22 0 26 0; +#X connect 22 0 27 0; +#X connect 23 0 22 0; +#X connect 23 0 32 0; +#X connect 28 0 29 0; +#X connect 28 1 20 0; +#X connect 31 0 27 0; +#X restore 62 243 pd fft; +#X obj 122 222 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 122 243 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 143 242 <-- repeatedly; +#X text 144 222 <-- graph once; +#N canvas 0 0 450 300 graph1 0; +#X array E09-signal 882 float 0; +#X coords 0 1.02 882 -1.02 200 80 1; +#X restore 433 28 graph; +#N canvas 0 0 450 300 graph1 0; +#X array E09-spectrum 259 float 0; +#X coords 0 0.51 258 -0.008 259 130 1; +#X restore 403 175 graph; +#X text 442 114 ---- 0.02 seconds ----; +#X text 433 306 2; +#X text 464 306 4; +#X text 403 306 0; +#X text 441 321 -- partial number --; +#X text 497 8 WAVEFORM; +#X text 497 157 SPECTRUM; +#X text 663 291 0; +#X text 664 173 0.5; +#X obj 93 117 osc~; +#X obj 93 86 r fundamental; +#X text 171 117 index (x100); +#X text 496 306 6; +#X text 529 306 8; +#X text 557 306 10; +#X text 589 306 12; +#X text 621 306 14; +#X text 43 3 SPECTRUM OF TWO-OPERATOR PHASE MODULATION; +#X floatatom 18 58 3 0 15 0 - - -; +#X obj 18 105 *; +#X obj 18 33 r cm; +#X text 52 57 carrier harmonic #; +#X text 71 367 This patch measures the spectrum of two-operator phase +modulation. The carrier frequency is initially six times the modulation +frequency \, but you can change it with the "carrier harmonic #" control. +Changing the index changes the relative strengths of the harmonics. +Past a certain index (which depends on the carrier frequency) the lower +sidebands begin to reflect about the left edge of the spectrum \, causing +complicated interference effects.; +#X connect 0 0 3 1; +#X connect 1 0 0 1; +#X connect 2 0 9 0; +#X connect 2 0 11 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 9 0 8 1; +#X connect 12 0 11 1; +#X connect 13 0 11 2; +#X connect 27 0 0 0; +#X connect 28 0 27 0; +#X connect 28 0 37 1; +#X connect 36 0 37 0; +#X connect 37 0 7 0; +#X connect 38 0 36 0; diff --git a/desiredata/doc/3.audio.examples/E10.complex.FM.pd b/desiredata/doc/3.audio.examples/E10.complex.FM.pd new file mode 100644 index 00000000..094d68ed --- /dev/null +++ b/desiredata/doc/3.audio.examples/E10.complex.FM.pd @@ -0,0 +1,156 @@ +#N canvas 165 123 695 505 12; +#X obj 94 247 *~; +#X obj 109 223 line~; +#X obj 18 179 cos~; +#X obj 18 154 +~; +#X obj 109 200 pack 0 50; +#X floatatom 109 152 0 0 300 0 - - -; +#X obj 109 176 / 100; +#X obj 18 129 phasor~; +#X obj 20 340 output~; +#X obj 19 309 hip~; +#X text 437 472 updated for Pd version 0.37; +#N canvas 62 299 558 609 fft 0; +#X obj 19 61 inlet~; +#X obj 208 212 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 193 164 delay two samples; +#X text 191 182 for better graphing; +#X obj 16 425 samplerate~; +#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 16 472 5 0 0 0 - - -; +#X obj 16 448 / 256; +#X obj 16 378 loadbang; +#X obj 72 494 s fundamental; +#X text 14 319 At load time \, calculate a good choice of fundamental +frequency for showing spectra: the 16th bin in a 4096-point spectrum +\, so SR*16/4096 or SR/256.; +#X obj 220 257 metro 500; +#X obj 220 234 inlet; +#X text 273 232 toggle to graph repeatedly; +#X text 262 212 bang to graph once; +#X obj 16 494 t b f; +#X obj 19 295 tabwrite~ E10-signal; +#X obj 208 295 tabwrite~ E10-spectrum; +#X text 72 536 set carrier multiplier and modulation multipliers after +fundamental; +#X msg 16 516 \; cm 8 \; m1 2 \; m2 3; +#X connect 0 0 2 0; +#X connect 0 0 27 0; +#X connect 1 0 27 0; +#X connect 1 0 28 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 28 0; +#X connect 15 0 18 0; +#X connect 16 0 15 0; +#X connect 17 0 26 0; +#X connect 18 0 17 0; +#X connect 19 0 16 0; +#X connect 22 0 27 0; +#X connect 22 0 28 0; +#X connect 23 0 22 0; +#X connect 26 0 30 0; +#X connect 26 1 20 0; +#X restore 65 311 pd fft; +#X obj 125 290 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 125 311 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X text 146 310 <-- repeatedly; +#X text 147 290 <-- graph once; +#N canvas 0 0 450 300 graph1 0; +#X array E10-spectrum 259 float 0; +#X coords 0 2100 258 -20 259 130 1; +#X restore 396 122 graph; +#X text 426 253 2; +#X text 457 253 4; +#X text 396 253 0; +#X text 434 268 -- partial number --; +#X text 490 104 SPECTRUM; +#X text 656 238 0; +#X text 657 120 0.5; +#X obj 93 128 osc~; +#X obj 267 79 r fundamental; +#X text 489 253 6; +#X text 522 253 8; +#X text 550 253 10; +#X text 582 253 12; +#X text 614 253 14; +#X floatatom 18 58 3 0 15 0 - - -; +#X obj 18 105 *; +#X obj 18 33 r cm; +#X text 43 3 SPECTRUM OF COMPLEX PHASE MODULATION; +#X text 23 73 carrier; +#X obj 93 107 *; +#X floatatom 93 60 3 0 15 0 - - -; +#X text 99 74 mod 1; +#X obj 93 35 r m1; +#X text 138 154 index1; +#X obj 197 249 *~; +#X obj 212 225 line~; +#X obj 212 202 pack 0 50; +#X floatatom 212 154 0 0 300 0 - - -; +#X obj 212 178 / 100; +#X obj 196 130 osc~; +#X obj 196 109 *; +#X floatatom 196 62 3 0 15 0 - - -; +#X text 202 76 mod 2; +#X text 246 154 index2; +#X obj 196 37 r m2; +#X text 126 349 Now we introduce a second modulator oscillator. The +carrier is on the 8th harmonic and the two modulators are at 2 and +3 times the fundamental. When either index of modulation is zero \, +changing the other index gives the familiar 2-operator FM result. But +if index2 is nonzero (try around 10 \, for example) then sliding index1 +upward from 0 introduces sidebands around each of the sidebands.; +#X connect 0 0 3 1; +#X connect 1 0 0 1; +#X connect 2 0 9 0; +#X connect 2 0 11 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 9 0 8 1; +#X connect 12 0 11 1; +#X connect 13 0 11 2; +#X connect 24 0 0 0; +#X connect 25 0 32 1; +#X connect 25 0 36 1; +#X connect 25 0 47 1; +#X connect 31 0 32 0; +#X connect 32 0 7 0; +#X connect 33 0 31 0; +#X connect 36 0 24 0; +#X connect 37 0 36 0; +#X connect 39 0 37 0; +#X connect 41 0 3 1; +#X connect 42 0 41 1; +#X connect 43 0 42 0; +#X connect 44 0 45 0; +#X connect 45 0 43 0; +#X connect 46 0 41 0; +#X connect 47 0 46 0; +#X connect 48 0 47 0; +#X connect 51 0 48 0; diff --git a/desiredata/doc/3.audio.examples/F01.pulse.pd b/desiredata/doc/3.audio.examples/F01.pulse.pd new file mode 100644 index 00000000..5ef7e862 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F01.pulse.pd @@ -0,0 +1,82 @@ +#N canvas 15 126 835 625 12; +#X obj 272 163 line~; +#X floatatom 53 64 0 0 0 0 - - -; +#X obj 30 315 cos~; +#N canvas 0 0 450 300 graph1 0; +#X array pulse-output 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 583 409 graph; +#X obj 53 91 phasor~ 0; +#X obj 272 139 pack 0 50; +#X floatatom 272 90 0 0 100 0 - - -; +#X text 50 43 frequency; +#X obj 53 115 -~ 0.5; +#X obj 53 207 *~; +#X obj 272 114 / 10; +#X obj 30 265 clip~ -0.5 0.5; +#X obj 30 418 hip~ 5; +#N canvas 0 0 450 300 graph1 0; +#X array phase-output 882 float 0; +#X coords 0 1.02 882 -1.02 200 60 1; +#X restore 583 150 graph; +#N canvas 0 0 450 300 graph1 0; +#X array clip-output 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 583 272 graph; +#X text 113 114 phase -1/2 to 1/2; +#X text 139 91 phase 0 to 1; +#X text 119 5 PULSE GENERATOR; +#X obj 19 234 tabwrite~ phase-output; +#X obj 19 393 tabwrite~ pulse-output; +#X text 103 419 high pass filter to cut DC; +#X text 319 115 fix range; +#X text 326 164 smooth it; +#X text 314 187 add 1; +#X text 41 148 <-- click to graph; +#X text 83 209 increase amplitude; +#X text 164 264 clip back to range -1/2 to 1/2; +#X text 90 316 cosine wave lookup (-1/2 and 1/2 give -1); +#X obj 272 188 +~ 1; +#X obj 19 292 tabwrite~ clip-output; +#X text 585 539 ---- 0.02 seconds ----; +#X obj 19 148 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 30 446 output~; +#X obj 30 338 +~ 1; +#X obj 30 361 *~ 0.5; +#X text 574 589 updated for Pd version 0.37; +#X text 88 337 add one (range now from 0 to 2); +#X text 96 360 ...and now from 0 to 1; +#X text 20 531 This patch computes a pulse train \, with an "index" +control that essentually squeezes the pulses. If "bandwidth" is zero +you get a pure cosine wave \, and for larger values of the bandwidth +\, the cosine wave is squeezed to fill smaller portions of the waveform. +; +#X text 269 71 index; +#X text 790 142 0.5; +#X text 787 198 -0.5; +#X text 785 264 1; +#X text 787 390 -1; +#X text 785 405 1; +#X text 786 528 -1; +#X connect 0 0 28 0; +#X connect 1 0 4 0; +#X connect 2 0 33 0; +#X connect 4 0 8 0; +#X connect 5 0 0 0; +#X connect 6 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 9 0 18 0; +#X connect 10 0 5 0; +#X connect 11 0 2 0; +#X connect 11 0 29 0; +#X connect 12 0 32 0; +#X connect 12 0 32 1; +#X connect 28 0 9 1; +#X connect 31 0 18 0; +#X connect 31 0 29 0; +#X connect 31 0 19 0; +#X connect 33 0 34 0; +#X connect 34 0 19 0; +#X connect 34 0 12 0; diff --git a/desiredata/doc/3.audio.examples/F02.just.say.pd b/desiredata/doc/3.audio.examples/F02.just.say.pd new file mode 100644 index 00000000..b82b4953 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F02.just.say.pd @@ -0,0 +1,152 @@ +#N canvas 32 67 900 421 12; +#X obj 39 247 cos~; +#X graph graph1 0 -1.02 44100 1.02 452 206 652 76; +#X array env-output 44100 float 0; +#X pop; +#X floatatom 71 305 0 0 0; +#N canvas 159 26 495 266 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 425 178 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 425 153 t b f; +#X obj 397 117 moses 1; +#X obj 83 148 dbtorms; +#X obj 397 92 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 22 181 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 100 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 89 outlet; +#X msg 214 64 \; pd dsp 1; +#X obj 83 194 line~; +#X obj 22 212 *~; +#X obj 22 241 dac~; +#X obj 83 171 pack 0 50; +#X text 20 158 audio; +#X text 93 110 show level; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 13 0; +#X connect 5 0 13 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 8 0; +#X connect 8 0 5 0; +#X connect 9 1 4 1; +#X connect 10 0 24 0; +#X connect 11 0 1 1; +#X connect 11 0 9 0; +#X connect 12 0 10 0; +#X connect 12 0 18 0; +#X connect 14 0 22 0; +#X connect 15 0 17 0; +#X connect 15 0 20 0; +#X connect 18 0 19 0; +#X connect 21 0 22 1; +#X connect 22 0 23 0; +#X connect 22 0 23 1; +#X connect 24 0 21 0; +#X restore 39 333 pd output; +#X msg 115 306 MUTE; +#X msg 162 93 bang; +#X text 203 93 <-- click to graph; +#X obj 39 168 -~ 0.5; +#X obj 39 192 *~; +#X obj 39 219 clip~ -0.5 0.5; +#X obj 39 274 hip~ 5; +#X obj 126 60 *~; +#X floatatom 205 142 0 0 0; +#X floatatom 205 168 0 0 0; +#X obj 126 27 phasor~ -4; +#X obj 126 191 +~ 0.5; +#X obj 162 117 tabwrite~ env-output; +#X text 451 211 --------- 1 second ---------; +#X floatatom 205 194 0 0 0; +#X obj 126 142 lop~ 130; +#N canvas 168 232 351 420 freq 0; +#X obj 180 176 t f f; +#X obj 181 202 *; +#X obj 60 320 line 0 30; +#X obj 90 132 t b b; +#X obj 90 107 metro 100; +#X obj 61 287 pack; +#X obj 60 376 outlet; +#X floatatom 89 82 0 0 0; +#X floatatom 54 243 0 0 0; +#X floatatom 94 248 0 0 0; +#X obj 60 348 pack 0 30; +#X obj 55 202 + 150; +#X obj 88 34 loadbang; +#X msg 89 58 1; +#X obj 56 175 random 300; +#X obj 181 226 + 100; +#X obj 179 152 random 35; +#X connect 0 0 1 0; +#X connect 0 1 1 1; +#X connect 1 0 15 0; +#X connect 2 0 10 0; +#X connect 3 0 14 0; +#X connect 3 1 16 0; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X connect 7 0 4 0; +#X connect 8 0 5 0; +#X connect 9 0 5 1; +#X connect 10 0 6 0; +#X connect 11 0 8 0; +#X connect 12 0 13 0; +#X connect 13 0 7 0; +#X connect 14 0 11 0; +#X connect 15 0 4 1; +#X connect 15 0 9 0; +#X connect 16 0 0 0; +#X restore 38 94 pd freq; +#X obj 39 119 line~; +#X obj 39 144 phasor~; +#X text 225 19 negative frequency; +#X text 226 35 makes falling sawtooth; +#X text 155 59 square it to make a curve; +#X text 245 152 you can; +#X text 243 170 adjust these; +#X text 247 189 values; +#X text 334 250 We interrupt this series of patches to bring you an +important message from Nancy Reagan. If \, anywhere \, at any time +\, someone offers you an illicit drug \, just say one word in reply... +; +#X text 334 313 Now that I'm sure you've heard this important message +\, we can return to the essentially frivolous occupation of making +turn-of-the-millenium western art music.; +#X obj 126 165 *~ 6; +#X text 561 384 updated for Pd version 0.34; +#X text 156 305 <-- output; +#X connect 0 0 10 0; +#X connect 2 0 3 1; +#X connect 3 0 2 0; +#X connect 4 0 3 2; +#X connect 5 0 16 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 0 0; +#X connect 10 0 3 0; +#X connect 11 0 16 0; +#X connect 11 0 19 0; +#X connect 12 0 19 1; +#X connect 13 0 31 1; +#X connect 14 0 11 0; +#X connect 14 0 11 1; +#X connect 15 0 8 1; +#X connect 18 0 15 1; +#X connect 19 0 31 0; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 22 0 7 0; +#X connect 31 0 15 0; diff --git a/desiredata/doc/3.audio.examples/F03.pulse.spectrum.pd b/desiredata/doc/3.audio.examples/F03.pulse.spectrum.pd new file mode 100644 index 00000000..1d04bf85 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F03.pulse.spectrum.pd @@ -0,0 +1,126 @@ +#N canvas 227 143 860 515 12; +#X obj 189 166 line~; +#X obj 42 187 cos~; +#X obj 189 142 pack 0 50; +#X floatatom 189 41 0 0 100 0 - - -; +#X obj 43 114 -~ 0.5; +#X obj 43 140 *~; +#X obj 189 67 / 10; +#X obj 189 91 moses 0; +#X msg 189 115 0; +#X obj 42 163 clip~ -0.5 0.5; +#X text 184 23 bandwidth; +#X obj 189 191 +~ 1; +#X obj 42 211 +~ 1; +#X text 63 1 PULSE SPECTRUM MEASUREMENT; +#X text 14 357 Here is a measured amplitude spectrum for the pulse +train. Nutice that \, other than a smallish spillover \, the energy +sits in one "lobe" whose changing width justifies our calling the squeeze +factor the "bandwidth."; +#X text 16 428 The spectrum is in units of amplitude. THe sidelobes +\, although they look small \, are actually only about 34 dB down. +You can design more complicated pulse trains \, little Blackman window +functions \, which control the sidelobes much better.; +#X obj 42 293 output~; +#X obj 41 262 hip~; +#N canvas 122 211 558 609 fft 0; +#X obj 19 61 inlet~; +#X obj 208 212 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 193 164 delay two samples; +#X text 191 182 for better graphing; +#X obj 264 434 samplerate~; +#X obj 264 457 / 256; +#X obj 238 261 metro 500; +#X obj 238 238 inlet; +#X text 291 236 toggle to graph repeatedly; +#X text 262 212 bang to graph once; +#X obj 29 205 /~ 4096; +#X obj 19 295 tabwrite~ F03-signal; +#X obj 235 299 tabwrite~ F03-spectrum; +#X obj 264 409 bang~; +#X msg 209 322 \; pd dsp 1; +#X obj 264 482 s freq; +#X connect 0 0 2 0; +#X connect 0 0 22 0; +#X connect 1 0 22 0; +#X connect 1 0 23 0; +#X connect 1 0 25 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 21 0; +#X connect 15 0 16 0; +#X connect 16 0 26 0; +#X connect 17 0 22 0; +#X connect 17 0 23 0; +#X connect 18 0 17 0; +#X connect 18 0 25 0; +#X connect 21 0 23 0; +#X connect 24 0 15 0; +#X restore 95 264 pd fft; +#X obj 155 243 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 155 264 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 176 263 <-- repeatedly; +#X text 177 243 <-- graph once; +#X obj 42 235 *~ 0.5; +#X obj 43 90 phasor~; +#N canvas 0 0 450 300 graph1 0; +#X array F03-signal 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 640 321 graph; +#N canvas 0 0 450 300 graph1 0; +#X array F03-spectrum 259 float 0; +#X coords 0 0.51 258 -0.008 256 130 1; +#X restore 579 99 graph; +#X text 640 454 ---- 0.02 seconds ----; +#X text 608 230 2; +#X text 639 230 4; +#X text 578 230 0; +#X text 616 245 -- partial number --; +#X text 671 230 6; +#X text 704 230 8; +#X text 732 230 10; +#X text 764 230 12; +#X text 796 230 14; +#X text 605 488 updated for Pd version 0.37; +#X obj 43 63 r freq; +#X connect 0 0 11 0; +#X connect 1 0 12 0; +#X connect 2 0 0 0; +#X connect 3 0 6 0; +#X connect 4 0 5 0; +#X connect 5 0 9 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 1 2 0; +#X connect 8 0 2 0; +#X connect 9 0 1 0; +#X connect 11 0 5 1; +#X connect 12 0 23 0; +#X connect 17 0 16 0; +#X connect 17 0 16 1; +#X connect 19 0 18 1; +#X connect 20 0 18 2; +#X connect 23 0 17 0; +#X connect 23 0 18 0; +#X connect 24 0 4 0; +#X connect 38 0 24 0; diff --git a/desiredata/doc/3.audio.examples/F04.waveshaping.pulse.pd b/desiredata/doc/3.audio.examples/F04.waveshaping.pulse.pd new file mode 100644 index 00000000..5724aeba --- /dev/null +++ b/desiredata/doc/3.audio.examples/F04.waveshaping.pulse.pd @@ -0,0 +1,133 @@ +#N canvas 240 229 900 586 12; +#X obj 220 171 line~; +#X obj 220 147 pack 0 50; +#X floatatom 220 46 0 0 0 0 - - -; +#X obj 70 108 *~; +#X obj 220 72 / 10; +#X obj 220 96 moses 0; +#X msg 220 120 0; +#X text 215 28 bandwidth; +#X obj 78 141 *~; +#X obj 18 141 sig~ 1; +#X obj 39 194 /~; +#X obj 54 168 +~; +#X text 111 141 X^2; +#X text 84 171 1+X^2; +#X text 71 196 1/(1+X^2); +#X text 28 4 ANOTHER PULSE WIDTH MOD ALGORITHM; +#N canvas 0 0 450 300 graph1 0; +#X array F04-signal 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 646 328 graph; +#N canvas 0 0 450 300 graph1 0; +#X array F04-spectrum 259 float 0; +#X coords 0 1.01 258 -0.008 256 200 1; +#X restore 587 38 graph; +#X text 646 461 ---- 0.02 seconds ----; +#X text 614 237 2; +#X text 645 237 4; +#X text 584 237 0; +#X text 622 252 -- partial number --; +#X text 677 237 6; +#X text 710 237 8; +#X text 738 237 10; +#X text 770 237 12; +#X text 802 237 14; +#X obj 40 277 output~; +#X obj 39 246 hip~; +#N canvas 122 211 558 609 fft 0; +#X obj 19 61 inlet~; +#X obj 224 210 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 193 164 delay two samples; +#X text 191 182 for better graphing; +#X obj 264 434 samplerate~; +#X obj 251 255 metro 500; +#X obj 251 232 inlet; +#X text 301 232 toggle to graph repeatedly; +#X text 278 210 bang to graph once; +#X obj 29 205 /~ 4096; +#X obj 264 409 bang~; +#X obj 264 457 / 512; +#X obj 19 295 tabwrite~ F04-signal; +#X obj 250 291 tabwrite~ F04-spectrum; +#X obj 264 483 s freq/2; +#X msg 224 321 \; pd dsp 1; +#X connect 0 0 2 0; +#X connect 0 0 23 0; +#X connect 1 0 23 0; +#X connect 1 0 24 0; +#X connect 1 0 26 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 20 0; +#X connect 15 0 22 0; +#X connect 16 0 23 0; +#X connect 16 0 24 0; +#X connect 17 0 16 0; +#X connect 17 0 26 0; +#X connect 20 0 24 0; +#X connect 21 0 15 0; +#X connect 22 0 25 0; +#X restore 93 248 pd fft; +#X obj 153 227 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 153 248 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 174 247 <-- repeatedly; +#X text 175 227 <-- graph once; +#X obj 69 81 osc~; +#X text 632 540 updated for Pd version 0.37; +#X text 23 515 NOTE: The PAF algorithm is protected by patents belonging +to IRCAM. Noncommercial use seems to be fine with them but contact +them first if you want to sell something using this.; +#X text 24 473 This is the form of pulse train used in the original +Phase Aligned Formant (PAF) algorithm.; +#X text 23 342 Here we use waveshaping to make another form of pulse +train. This one has a neat spectrum: the partials drop off exponentially +(with the "bandwidth" controlling the rate of dropoff.) In later patches +we'll use a wavetable to do the waveshaping but for simplicity \, it's +done algebraically here. The oscillator runs at half the fundamental +frequency. The symmetry of the waveshaping doubles the frequency of +the output.; +#X text 849 222 0; +#X text 846 35 1; +#X obj 69 56 r freq/2; +#X connect 0 0 3 1; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 3 0 8 0; +#X connect 3 0 8 1; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 5 1 1 0; +#X connect 6 0 1 0; +#X connect 8 0 11 1; +#X connect 9 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 29 0; +#X connect 10 0 30 0; +#X connect 11 0 10 1; +#X connect 29 0 28 0; +#X connect 29 0 28 1; +#X connect 31 0 30 1; +#X connect 32 0 30 2; +#X connect 35 0 3 0; +#X connect 42 0 35 0; diff --git a/desiredata/doc/3.audio.examples/F05.ring.modulation.pd b/desiredata/doc/3.audio.examples/F05.ring.modulation.pd new file mode 100644 index 00000000..937b579e --- /dev/null +++ b/desiredata/doc/3.audio.examples/F05.ring.modulation.pd @@ -0,0 +1,160 @@ +#N canvas 83 89 793 595 12; +#N canvas 0 0 450 300 graph1 0; +#X array F05-signal 882 float 0; +#X coords 0 1 882 -1 200 130 1; +#X restore 554 218 graph; +#N canvas 0 0 450 300 graph1 0; +#X array F05-spectrum 256 float 0; +#X coords 0 0.51 255 -0.008 256 130 1; +#X restore 499 22 graph; +#X text 552 349 ---- 0.02 seconds ----; +#X text 507 563 updated for Pd version 0.37; +#X text 495 155 0; +#X text 534 174 -- partial number --; +#X text 761 142 0; +#X text 758 19 0.5; +#X floatatom 51 61 0 0 100 0 - - -; +#N canvas 329 22 680 421 pulse-train 0; +#X obj 184 348 line~; +#X obj 39 317 cos~; +#X obj 184 324 pack 0 50; +#X obj 39 245 -~ 0.5; +#X obj 39 269 *~; +#X obj 184 252 / 10; +#X obj 184 276 moses 0; +#X msg 184 300 0; +#X obj 39 293 clip~ -0.5 0.5; +#X obj 184 372 +~ 1; +#X obj 39 341 +~ 1; +#X obj 184 228 inlet; +#X obj 39 389 outlet~; +#X obj 39 365 *~ 0.5; +#X text 53 5 This is a modified version of the pulse train generator +from two examples back.; +#X text 107 140 We have to add 1/2 and wrap so that the center of the +pulse comes at phase zero (previously it was 1/2 cycle out of phase). +This wasn't a problem before but now we have to be in phase with the +oscillator we're multpplying with.; +#X text 276 262 otherwise it's the same as before.; +#X obj 40 85 phasor~; +#X obj 40 58 r freq; +#X connect 0 0 9 0; +#X connect 1 0 10 0; +#X connect 2 0 0 0; +#X connect 3 0 4 0; +#X connect 4 0 8 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 6 1 2 0; +#X connect 7 0 2 0; +#X connect 8 0 1 0; +#X connect 9 0 4 1; +#X connect 10 0 13 0; +#X connect 11 0 5 0; +#X connect 13 0 12 0; +#X connect 17 0 3 0; +#X connect 18 0 17 0; +#X restore 51 86 pd pulse-train; +#X text 83 61 <-- bandwidth; +#X obj 51 219 *~; +#X text 113 123 <-- modulation frequency as; +#X text 152 137 multiple of fundamental; +#X obj 51 277 output~; +#X obj 50 246 hip~; +#N canvas 122 211 563 534 fft 0; +#X obj 19 61 inlet~; +#X obj 208 212 inlet; +#X obj 29 92 rfft~; +#X obj 29 125 *~; +#X obj 60 125 *~; +#X obj 29 155 sqrt~; +#X obj 332 109 block~ 4096 1; +#X obj 29 181 biquad~ 0 0 0 0 1; +#X text 93 93 Fourier series; +#X text 98 146 magnitude; +#X text 96 131 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 193 164 delay two samples; +#X text 191 182 for better graphing; +#X obj 264 434 samplerate~; +#X obj 245 262 metro 500; +#X obj 245 233 inlet; +#X text 298 231 toggle to graph repeatedly; +#X text 262 212 bang to graph once; +#X obj 29 205 /~ 4096; +#X obj 264 409 bang~; +#X obj 264 483 s freq; +#X obj 264 457 / 256; +#X obj 19 295 tabwrite~ F05-signal; +#X obj 245 294 tabwrite~ F05-spectrum; +#X msg 224 321 \; pd dsp 1; +#X connect 0 0 2 0; +#X connect 0 0 24 0; +#X connect 1 0 24 0; +#X connect 1 0 25 0; +#X connect 1 0 26 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 20 0; +#X connect 15 0 23 0; +#X connect 16 0 24 0; +#X connect 16 0 25 0; +#X connect 17 0 16 0; +#X connect 17 0 26 0; +#X connect 20 0 25 0; +#X connect 21 0 15 0; +#X connect 23 0 22 0; +#X restore 98 245 pd fft; +#X obj 158 224 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 158 245 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X text 179 244 <-- repeatedly; +#X text 180 224 <-- graph once; +#X text 527 155 2; +#X text 559 155 4; +#X text 591 155 6; +#X text 623 155 8; +#X text 656 155 10; +#X text 688 155 12; +#X text 719 155 14; +#X text 759 213 1; +#X text 759 337 -1; +#X text 122 185 modulating oscillator; +#X text 153 6 RING MODULATED PULSE TRAINS; +#X text 23 357 Now we take a pulse train and ring modulate it \, which +effectively aliases the spectrum so that it is centered at any desired +partial number. The "bandwidth" control still affects the shape of +the peak \, independently of where it is centered. This generates a +formant centered at the given partial.; +#X floatatom 73 123 0 0 100 0 - - -; +#X obj 73 182 osc~; +#X obj 73 157 *; +#X obj 107 157 r freq; +#X text 23 457 This patch is limited to making formants centered on +harmonics. The center frequency thus can't be moved smoothly up and +down at will (try shift-clicking on modulation frequency to make fractions). +Next we'll look at two techniques for sliding a formant frequency without +losing harmonicity.; +#X text 184 85 <-- pulse train; +#X text 220 101 generator from before; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 11 0 15 0; +#X connect 11 0 16 0; +#X connect 15 0 14 0; +#X connect 15 0 14 1; +#X connect 17 0 16 1; +#X connect 18 0 16 2; +#X connect 33 0 35 0; +#X connect 34 0 11 1; +#X connect 35 0 34 0; +#X connect 36 0 35 1; diff --git a/desiredata/doc/3.audio.examples/F06.packets.pd b/desiredata/doc/3.audio.examples/F06.packets.pd new file mode 100644 index 00000000..ef098bba --- /dev/null +++ b/desiredata/doc/3.audio.examples/F06.packets.pd @@ -0,0 +1,117 @@ +#N canvas 207 159 864 663 12; +#X obj 327 413 line~; +#X obj 55 456 cos~; +#N canvas 0 0 450 300 graph1 0; +#X array pulse-output 882 float 0; +#X coords 0 1 882 -1 200 130 1; +#X restore 627 339 graph; +#X obj 327 390 pack 0 50; +#X floatatom 327 344 0 0 0 0 - - -; +#X obj 55 355 -~ 0.5; +#X obj 55 410 *~; +#X obj 327 367 / 10; +#X obj 55 433 clip~ -0.5 0.5; +#X text 327 322 bandwidth; +#X obj 327 436 +~ 1; +#X obj 55 479 +~ 1; +#X obj 206 491 cos~; +#X obj 56 547 *~; +#X floatatom 228 346 4 0 0 0 - - -; +#X obj 228 366 / 10; +#X text 627 472 --- 0.02 seconds ---; +#X obj 206 465 *~; +#N canvas 129 316 777 218 graph 1; +#X obj 70 76 inlet~; +#X obj 662 76 inlet; +#X obj 67 143 tabwrite~ pulse-output; +#X obj 298 81 inlet~; +#X obj 472 74 inlet~; +#X obj 295 148 tabwrite~ window; +#X obj 477 149 tabwrite~ carrier; +#X msg 654 140 \; pd dsp 1; +#X connect 0 0 2 0; +#X connect 1 0 2 0; +#X connect 1 0 5 0; +#X connect 1 0 6 0; +#X connect 1 0 7 0; +#X connect 3 0 5 0; +#X connect 4 0 6 0; +#X restore 100 572 pd graph; +#X obj 228 412 line~; +#X obj 228 389 pack 0 50; +#N canvas 0 0 450 300 graph3 0; +#X array carrier 882 float 0; +#X coords 0 1 881 -1 200 140 1; +#X restore 627 188 graph; +#N canvas 0 0 450 300 graph4 0; +#X array window 882 float 0; +#X coords 0 1 881 -1 200 140 1; +#X restore 628 35 graph; +#X text 204 573 <-- graph; +#X floatatom 55 310 4 0 0 0 - - -; +#X obj 55 331 phasor~ 100; +#X text 31 2 WINDOWED PACKETS; +#X text 51 266 fundamental; +#X text 206 260 center; +#X text 204 279 freq. (in; +#X text 203 298 tenths of; +#X text 202 318 fundamental); +#X text 119 493 window; +#X text 241 469 magnified phase; +#X text 283 509 desired center frequency; +#X text 255 492 <--this cosine goes at the; +#X text 284 528 but its phase is reset each; +#X text 282 547 fundamental period.; +#X text 28 32 The simpler of two techniques for making slidable center +frequencies is to synthesize enveloped sinusoidal wave packets. The +packets should repeat at the fundamental frequency \, but the frequency +of the packet itself controls the center frequency of the formant. +The length of the packet varies inversely with bandwidth.; +#X obj 55 604 output~; +#X obj 55 580 hip~; +#X obj 182 573 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 601 635 updated for Pd version 0.37; +#X obj 55 502 *~ 0.5; +#X text 831 161 -1; +#X text 833 31 1; +#X text 831 314 -1; +#X text 835 184 1; +#X text 832 458 -1; +#X text 835 333 1; +#X text 26 132 In the patch below \, the "clip~" followed by "cos~" +and "+~ 1" is the enveloping ("windowing") function \, which appears +in the top graph. The carrier \, on the other hand \, is a broken sinusoid +made by amplifying the phasor~ (the "*~" controlled by "center freq.") +and taking the cos~ of the result. The "breaks" in the sinusoid only +occur when the enveloping signal is zero.; +#X text 105 464 raised; +#X text 113 479 cosine; +#X text 51 285 frequency; +#X connect 0 0 10 0; +#X connect 1 0 11 0; +#X connect 3 0 0 0; +#X connect 4 0 7 0; +#X connect 5 0 6 0; +#X connect 5 0 17 0; +#X connect 6 0 8 0; +#X connect 7 0 3 0; +#X connect 8 0 1 0; +#X connect 10 0 6 1; +#X connect 11 0 43 0; +#X connect 12 0 13 1; +#X connect 12 0 18 2; +#X connect 13 0 18 0; +#X connect 13 0 40 0; +#X connect 14 0 15 0; +#X connect 15 0 20 0; +#X connect 17 0 12 0; +#X connect 19 0 17 1; +#X connect 20 0 19 0; +#X connect 24 0 25 0; +#X connect 25 0 5 0; +#X connect 40 0 39 0; +#X connect 40 0 39 1; +#X connect 41 0 18 3; +#X connect 43 0 13 0; +#X connect 43 0 18 1; diff --git a/desiredata/doc/3.audio.examples/F07.packet.spectrum.pd b/desiredata/doc/3.audio.examples/F07.packet.spectrum.pd new file mode 100644 index 00000000..bef1483b --- /dev/null +++ b/desiredata/doc/3.audio.examples/F07.packet.spectrum.pd @@ -0,0 +1,147 @@ +#N canvas 83 221 774 628 12; +#X obj 302 351 line~; +#X obj 34 444 cos~; +#X floatatom 71 560 0 0 0; +#N canvas 176 241 532 273 output 0; +#X obj 338 160 t b; +#X obj 338 110 f; +#X obj 338 60 inlet; +#X text 344 29 mute; +#X obj 338 185 f; +#X msg 425 178 0; +#X msg 338 85 bang; +#X obj 338 135 moses 1; +#X obj 398 111 moses 1; +#X obj 83 148 dbtorms; +#X obj 398 86 r master-lvl; +#X obj 83 42 r master-lvl; +#X obj 338 210 s master-lvl; +#X obj 17 148 inlet~; +#X obj 199 41 inlet; +#X text 199 18 level; +#X obj 199 100 s master-lvl; +#X msg 96 65 set \$1; +#X obj 96 89 outlet; +#X msg 214 64 \; pd dsp 1; +#X obj 83 194 line~; +#X obj 22 212 *~; +#X obj 22 241 dac~; +#X obj 83 171 pack 0 50; +#X text 15 125 audio; +#X text 93 110 show level; +#X obj 17 177 hip~ 1; +#X connect 0 0 4 0; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 4 0 12 0; +#X connect 5 0 12 0; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 1 5 0; +#X connect 8 1 4 1; +#X connect 9 0 23 0; +#X connect 10 0 1 1; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 11 0 17 0; +#X connect 13 0 26 0; +#X connect 14 0 16 0; +#X connect 14 0 19 0; +#X connect 17 0 18 0; +#X connect 20 0 21 1; +#X connect 21 0 22 0; +#X connect 21 0 22 1; +#X connect 23 0 20 0; +#X connect 26 0 21 0; +#X restore 35 587 pd output; +#X msg 111 560 MUTE; +#X obj 302 327 pack 0 50; +#X floatatom 302 255 0 0 0; +#X obj 34 356 -~ 0.5; +#X obj 34 395 *~; +#X obj 302 279 / 10; +#X obj 34 420 clip~ -0.5 0.5; +#X text 302 233 bandwidth; +#X obj 302 375 +~ 1; +#X obj 35 467 +~ 1; +#X obj 184 440 cos~; +#X obj 35 496 *~; +#X floatatom 206 269 4 0 0; +#X obj 206 293 / 10; +#X obj 184 414 *~; +#X text 204 224 center; +#X text 204 243 freq.; +#X obj 302 303 max 0; +#X obj 206 365 line~; +#X obj 206 341 pack 0 50; +#X obj 206 317 max 0; +#X floatatom 34 308 4 0 0; +#X obj 34 332 phasor~ 100; +#X text 156 559 <-- output; +#X text 30 283 freq.; +#X text 30 264 fundamental; +#X graph graph1 0 0 128 500 440 492 696 362; +#X array spectrum 128 float 0; +#X pop; +#X msg 108 498 bang; +#N canvas 204 17 358 238 fft 0; +#X obj 46 48 inlet~; +#X obj 159 181 tabwrite~ spectrum; +#X obj 159 145 inlet; +#X obj 46 78 rfft~; +#X obj 46 111 *~; +#X obj 77 111 *~; +#X obj 46 141 sqrt~; +#X obj 191 45 block~ 1024 1; +#X connect 0 0 3 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 3 1 5 0; +#X connect 3 1 5 1; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 1 0; +#X restore 59 524 pd fft; +#X text 439 502 0; +#X text 687 499 5512; +#X text 149 498 <-- graph; +#X text 31 2 WINDOWED PACKET SPECTRUM; +#X text 19 34 Here's the spectrum you get. Note that even if you put +the center frequency right on a partial \, there is significant energy +in neighboring partials (try fundamental 440 \, "center freq" 30 \, +bandwidth 0.); +#X text 18 104 The center frequency is in units of ten per partial +\, or in other words a value of "30" means "centered on the third partial". +; +#X text 505 596 updated for Pd version 0.34; +#X text 22 155 This technique only works if you're doing Hanning-window +shaped PWM--you can't combine this naturally with FM or with the waveshaping +technique we'll see later.; +#X connect 0 0 12 0; +#X connect 1 0 13 0; +#X connect 2 0 3 1; +#X connect 3 0 2 0; +#X connect 4 0 3 2; +#X connect 5 0 0 0; +#X connect 6 0 9 0; +#X connect 7 0 8 0; +#X connect 7 0 18 0; +#X connect 8 0 10 0; +#X connect 9 0 21 0; +#X connect 10 0 1 0; +#X connect 12 0 8 1; +#X connect 13 0 15 0; +#X connect 14 0 15 1; +#X connect 15 0 3 0; +#X connect 15 0 32 0; +#X connect 16 0 17 0; +#X connect 17 0 24 0; +#X connect 18 0 14 0; +#X connect 21 0 5 0; +#X connect 22 0 18 1; +#X connect 23 0 22 0; +#X connect 24 0 23 0; +#X connect 25 0 26 0; +#X connect 26 0 7 0; +#X connect 31 0 32 1; diff --git a/desiredata/doc/3.audio.examples/F08.two.cosines.pd b/desiredata/doc/3.audio.examples/F08.two.cosines.pd new file mode 100644 index 00000000..ae4788f6 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F08.two.cosines.pd @@ -0,0 +1,70 @@ +#N canvas 534 115 698 613 12; +#X obj 157 408 cos~; +#X floatatom 204 198 4 0 100 0 - - -; +#X obj 204 222 / 10; +#X text 461 275 --- 0.02 seconds ---; +#X obj 157 378 *~; +#X obj 204 294 line~; +#X obj 204 246 max 0; +#N canvas 0 0 450 300 graph3 0; +#X array F08-carrier 882 float 0; +#X coords 0 2 881 -2 200 140 1; +#X restore 447 123 graph; +#X floatatom 57 295 4 0 0 0 - - -; +#X text 53 251 fundamental; +#X text 53 270 frequency; +#X obj 199 408 cos~; +#X obj 240 321 wrap~; +#X obj 204 348 -~; +#X obj 199 378 +~; +#X obj 204 445 -~; +#X obj 219 475 *~; +#X obj 197 500 +~; +#X obj 204 270 pack 0 50; +#X text 254 408 synthesize the two partials; +#X text 447 590 updated for Pd version 0.37; +#X obj 198 526 hip~; +#X obj 199 552 output~; +#X text 26 29 The other \, spiffier way is to make a sum of cosines +to interpolate between adjacent harmonics. Suppose for example we want +a center frequency of 5.3 (in units of the fundamental.) We just take +partial 5 with amplitude 0.7 and partial 6 with amplitude 0.3:; +#X obj 286 552 tabwrite~ F08-carrier; +#X text 316 528 <-graph; +#X obj 284 527 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 57 319 phasor~ 100; +#X text 83 149 center frequency (in; +#X text 82 169 tenths of fundamental); +#X text 125 3 MOVABLE CENTER FREQUENCY BY ADDING TWO COSINES; +#X text 295 320 the fractional part "q"; +#X text 253 347 subtract to get the integer part "k"; +#X text 249 380 multiply phase by k and k+1; +#X text 252 444 c2 - c1; +#X text 267 473 q * (c2 - c1); +#X text 236 500 q * c2 + (1-q) * c1; +#X connect 0 0 15 1; +#X connect 0 0 17 0; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 4 0 0 0; +#X connect 4 0 14 0; +#X connect 5 0 13 0; +#X connect 5 0 12 0; +#X connect 6 0 18 0; +#X connect 8 0 27 0; +#X connect 11 0 15 0; +#X connect 12 0 13 1; +#X connect 12 0 16 1; +#X connect 13 0 4 1; +#X connect 14 0 11 0; +#X connect 15 0 16 0; +#X connect 16 0 17 1; +#X connect 17 0 21 0; +#X connect 17 0 24 0; +#X connect 18 0 5 0; +#X connect 21 0 22 0; +#X connect 21 0 22 1; +#X connect 26 0 24 0; +#X connect 27 0 4 0; +#X connect 27 0 14 1; diff --git a/desiredata/doc/3.audio.examples/F09.declickit.pd b/desiredata/doc/3.audio.examples/F09.declickit.pd new file mode 100644 index 00000000..f35f5da8 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F09.declickit.pd @@ -0,0 +1,94 @@ +#N canvas 10 49 579 665 12; +#X obj 130 481 cos~; +#X obj 130 451 *~; +#X obj 172 481 cos~; +#X obj 214 397 wrap~; +#X obj 177 402 -~; +#X obj 172 451 +~; +#X obj 172 516 -~; +#X obj 192 548 *~; +#X obj 170 573 +~; +#X obj 204 159 loadbang; +#X obj 204 185 metro 400; +#X obj 216 209 del 200; +#X obj 252 326 samphold~; +#N canvas 0 0 405 406 switch 0; +#X obj 15 383 outlet~; +#X obj 8 193 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 329 195 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 18 99 loadbang; +#X obj 18 131 1; +#X obj 53 261 sel 1; +#X obj 53 287 0; +#X obj 339 259 sel 1; +#X obj 339 288 0; +#X obj 47 316 inlet~; +#X obj 15 344 *~; +#X obj 340 312 inlet~; +#X obj 308 340 *~; +#X connect 1 0 5 0; +#X connect 1 0 10 1; +#X connect 2 0 7 0; +#X connect 2 0 12 1; +#X connect 3 0 4 0; +#X connect 4 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 7 0 8 0; +#X connect 8 0 1 0; +#X connect 9 0 10 0; +#X connect 10 0 0 0; +#X connect 11 0 12 0; +#X connect 12 0 0 0; +#X coords 0 0 1 1 80 35 1; +#X restore 177 351 pd switch; +#X text 31 2 CHANGING THE CENTER FREQUENCY QUICKLY; +#X text 34 27 Since in the previous patch the amplitudes of the two +cosines depend on "center frequency" we can't change that discontinuously +without clicking \, as you hear in this patch. The fix is to use a +samphold~ object to keep the center frequency frozen except at phase +crossings. At the phase crossings the two weighted cosines add to one +\, so we can discontinuously change the frequencies and weights there. +; +#X text 266 365 <--toggles to select which one; +#X text 369 384 is actually used; +#X obj 171 602 output~; +#X floatatom 225 264 3 0 50 0 - - -; +#X obj 178 263 pack; +#X text 258 263 <--gliss time; +#X text 324 647 updated for Pd version 0.37; +#X obj 178 287 line~; +#X msg 216 239 13.5; +#X msg 178 239 4; +#X obj 70 287 phasor~ 80; +#X connect 0 0 6 1; +#X connect 0 0 8 0; +#X connect 1 0 0 0; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 4 1; +#X connect 3 0 7 1; +#X connect 4 0 1 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 7 0 8 1; +#X connect 8 0 18 0; +#X connect 8 0 18 1; +#X connect 9 0 10 0; +#X connect 10 0 25 0; +#X connect 10 0 11 0; +#X connect 11 0 24 0; +#X connect 12 0 13 1; +#X connect 13 0 4 0; +#X connect 13 0 3 0; +#X connect 19 0 20 1; +#X connect 20 0 23 0; +#X connect 23 0 13 0; +#X connect 23 0 12 0; +#X connect 24 0 20 0; +#X connect 25 0 20 0; +#X connect 26 0 1 0; +#X connect 26 0 5 1; +#X connect 26 0 12 1; diff --git a/desiredata/doc/3.audio.examples/F10.sweepable.FM.pd b/desiredata/doc/3.audio.examples/F10.sweepable.FM.pd new file mode 100644 index 00000000..17fc920b --- /dev/null +++ b/desiredata/doc/3.audio.examples/F10.sweepable.FM.pd @@ -0,0 +1,152 @@ +#N canvas 60 64 834 697 12; +#X obj 168 476 cos~; +#X obj 168 430 *~; +#X obj 211 478 cos~; +#X obj 252 379 wrap~; +#X obj 215 378 -~; +#X obj 211 455 +~; +#X obj 209 513 -~; +#X obj 230 539 *~; +#X obj 215 348 samphold~; +#X text 167 6 APPLYING TWO-COSINE CARRIER TO FM; +#X floatatom 232 228 4 0 200 0 - - -; +#X obj 232 251 / 10; +#X text 232 147 center; +#X obj 232 300 line~; +#X text 232 167 freq. (in; +#X text 232 187 tenths of; +#X text 232 207 fundamental); +#X obj 232 277 pack 0 50; +#X obj 121 283 phasor~; +#X floatatom 121 260 4 0 0 0 - - -; +#X text 106 207 fundamental; +#X text 106 227 (= mod freq); +#X text 435 254 index; +#X text 435 274 (percent); +#X floatatom 435 295 4 0 500 0 - - -; +#X obj 385 361 cos~; +#X obj 435 364 line~; +#X obj 385 384 *~; +#X obj 435 318 / 100; +#X obj 435 341 pack 0 50; +#X obj 168 453 +~; +#X text 388 410 modulating; +#X text 388 430 oscillator; +#X text 40 452 both phases-->; +#X text 9 435 add modulator to; +#X obj 233 632 output~; +#X obj 232 601 hip~; +#N canvas 122 211 558 609 fft 0; +#X obj 23 55 inlet~; +#X obj 210 303 inlet; +#X obj 27 215 rfft~; +#X obj 27 248 *~; +#X obj 58 248 *~; +#X obj 27 278 sqrt~; +#X obj 334 200 block~ 4096 1; +#X obj 27 304 biquad~ 0 0 0 0 1; +#X text 91 216 Fourier series; +#X text 96 269 magnitude; +#X text 94 254 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 195 255 delay two samples; +#X text 193 273 for better graphing; +#X obj 292 79 samplerate~; +#X obj 240 352 metro 500; +#X obj 240 329 inlet; +#X text 293 327 toggle to graph repeatedly; +#X text 264 303 bang to graph once; +#X obj 27 328 /~ 4096; +#X obj 292 54 bang~; +#X msg 211 413 \; pd dsp 1; +#X obj 237 390 tabwrite~ F10-spectrum; +#X obj 292 102 / 4096; +#X obj 58 135 osc~; +#X obj 58 163 +~ 1; +#X obj 28 188 *~; +#X text 113 138 hanning window; +#X obj 254 79 0.5; +#X connect 0 0 27 0; +#X connect 1 0 22 0; +#X connect 1 0 23 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 20 0; +#X connect 15 0 24 0; +#X connect 16 0 23 0; +#X connect 17 0 16 0; +#X connect 17 0 22 0; +#X connect 20 0 23 0; +#X connect 21 0 15 0; +#X connect 21 0 29 0; +#X connect 24 0 25 0; +#X connect 25 0 26 0; +#X connect 26 0 27 1; +#X connect 27 0 2 0; +#X connect 29 0 25 1; +#X restore 286 601 pd fft; +#X obj 346 580 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 346 601 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X text 367 600 <-- repeatedly; +#X text 368 580 <-- graph once; +#X text 580 663 updated for Pd version 0.37; +#N canvas 0 0 450 300 graph1 0; +#X array F10-spectrum 259 float 0; +#X coords 0 0.51 258 -0.008 256 130 1; +#X restore 560 386 graph; +#X text 552 517 0; +#X obj 207 565 +~; +#X text 31 30 We can apply the two-cosine method to FM synthesis to +get FM spectra which slide up and down: we just treat the cosines like +carrier signals in an FM instrument. This doesn't work as well as you'd +wish \, because the phases of the partials of the two FM instruments +don't line up \, so that \, for indices of modulation above about 20% +\, you get beating effects as the center frequency goes up and down. +; +#X text 614 527 -- frequency --; +#X text 792 518 2700; +#X connect 0 0 6 1; +#X connect 0 0 45 0; +#X connect 1 0 30 0; +#X connect 2 0 6 0; +#X connect 3 0 4 1; +#X connect 3 0 7 1; +#X connect 4 0 1 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 7 0 45 1; +#X connect 8 0 4 0; +#X connect 8 0 3 0; +#X connect 10 0 11 0; +#X connect 11 0 17 0; +#X connect 13 0 8 0; +#X connect 17 0 13 0; +#X connect 18 0 8 1; +#X connect 18 0 25 0; +#X connect 18 0 1 0; +#X connect 18 0 5 1; +#X connect 19 0 18 0; +#X connect 24 0 28 0; +#X connect 25 0 27 0; +#X connect 26 0 27 1; +#X connect 27 0 30 1; +#X connect 28 0 29 0; +#X connect 29 0 26 0; +#X connect 30 0 5 0; +#X connect 30 0 0 0; +#X connect 36 0 35 0; +#X connect 36 0 35 1; +#X connect 38 0 37 1; +#X connect 39 0 37 2; +#X connect 45 0 36 0; +#X connect 45 0 37 0; diff --git a/desiredata/doc/3.audio.examples/F11.anharmonic.FM.pd b/desiredata/doc/3.audio.examples/F11.anharmonic.FM.pd new file mode 100644 index 00000000..333a6e44 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F11.anharmonic.FM.pd @@ -0,0 +1,126 @@ +#N canvas 60 64 790 527 12; +#X obj 122 381 cos~; +#X floatatom 173 184 4 0 200 0 - - -; +#X obj 173 207 / 10; +#X text 173 103 center; +#X text 173 123 freq. (in; +#X text 173 143 tenths of; +#X text 173 163 fundamental); +#X floatatom 70 192 4 0 0 0 - - -; +#X text 46 145 fundamental; +#X text 46 165 (= mod freq); +#X text 251 208 index; +#X text 251 228 (percent); +#X floatatom 251 249 4 0 500 0 - - -; +#X obj 251 318 line~; +#X obj 201 338 *~; +#X obj 251 272 / 100; +#X obj 251 295 pack 0 50; +#X obj 122 358 +~; +#X text 204 364 modulating; +#X text 209 381 oscillator; +#X obj 123 459 output~; +#X obj 122 428 hip~; +#N canvas 122 211 558 609 fft 0; +#X obj 23 55 inlet~; +#X obj 210 303 inlet; +#X obj 27 215 rfft~; +#X obj 27 248 *~; +#X obj 58 248 *~; +#X obj 27 278 sqrt~; +#X obj 334 200 block~ 4096 1; +#X obj 27 304 biquad~ 0 0 0 0 1; +#X text 91 216 Fourier series; +#X text 96 269 magnitude; +#X text 94 254 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 195 255 delay two samples; +#X text 193 273 for better graphing; +#X obj 292 79 samplerate~; +#X obj 240 352 metro 500; +#X obj 240 329 inlet; +#X text 293 327 toggle to graph repeatedly; +#X text 264 303 bang to graph once; +#X obj 27 328 /~ 4096; +#X obj 292 54 bang~; +#X msg 211 413 \; pd dsp 1; +#X obj 292 102 / 4096; +#X obj 58 135 osc~; +#X obj 58 163 +~ 1; +#X obj 28 188 *~; +#X text 113 138 hanning window; +#X obj 254 79 0.5; +#X obj 240 390 tabwrite~ F11-spectrum; +#X connect 0 0 26 0; +#X connect 1 0 22 0; +#X connect 1 0 29 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 20 0; +#X connect 15 0 23 0; +#X connect 16 0 29 0; +#X connect 17 0 16 0; +#X connect 17 0 22 0; +#X connect 20 0 29 0; +#X connect 21 0 15 0; +#X connect 21 0 28 0; +#X connect 23 0 24 0; +#X connect 24 0 25 0; +#X connect 25 0 26 1; +#X connect 26 0 2 0; +#X connect 28 0 24 1; +#X restore 176 428 pd fft; +#X obj 236 407 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 236 428 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 257 427 <-- repeatedly; +#X text 258 407 <-- graph once; +#X text 530 479 updated for Pd version 0.37; +#N canvas 0 0 450 300 graph1 0; +#X array F11-spectrum 259 float 0; +#X coords 0 0.51 258 -0.008 256 130 1; +#X restore 514 291 graph; +#X text 506 422 0; +#X text 568 432 -- frequency --; +#X text 743 427 2700; +#X obj 173 256 *; +#X obj 173 233 t b f; +#X obj 201 315 osc~; +#X obj 122 322 phasor~; +#X text 31 30 Here's what happens if you just slide the carrier frequency +around. The spectrum moves up and down all right \, but is only periodic +at the original period when the center frequency roosts on a harmonic. +; +#X text 50 308 carrier; +#X text 24 325 oscillator; +#X text 167 6 HOW NOT TO APPLY TWO-COSINE CARRIER TO FM; +#X connect 0 0 21 0; +#X connect 0 0 22 0; +#X connect 1 0 2 0; +#X connect 2 0 33 0; +#X connect 7 0 32 0; +#X connect 7 0 34 0; +#X connect 12 0 15 0; +#X connect 13 0 14 1; +#X connect 14 0 17 1; +#X connect 15 0 16 0; +#X connect 16 0 13 0; +#X connect 17 0 0 0; +#X connect 21 0 20 0; +#X connect 21 0 20 1; +#X connect 23 0 22 1; +#X connect 24 0 22 2; +#X connect 32 0 35 0; +#X connect 33 0 32 0; +#X connect 33 1 32 1; +#X connect 34 0 14 0; +#X connect 35 0 17 0; diff --git a/desiredata/doc/3.audio.examples/F12.paf.pd b/desiredata/doc/3.audio.examples/F12.paf.pd new file mode 100644 index 00000000..f220bd45 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F12.paf.pd @@ -0,0 +1,226 @@ +#N canvas 262 0 692 819 12; +#X obj 38 593 cos~; +#X obj 38 570 *~; +#X obj 81 593 cos~; +#X obj 137 527 wrap~; +#X obj 101 527 -~; +#X obj 81 570 +~; +#X obj 74 623 -~; +#X obj 94 655 *~; +#X obj 56 655 +~; +#X obj 100 500 samphold~; +#X floatatom 159 378 4 0 500 0 - - -; +#X obj 159 401 / 10; +#X text 157 311 center; +#X obj 159 449 line~; +#X text 157 359 fundamental); +#X obj 159 426 pack 0 50; +#X obj 39 446 phasor~; +#X floatatom 39 425 4 0 0 0 - - -; +#X text 19 398 fundamental; +#X text 303 460 index; +#X text 303 477 (percent); +#X floatatom 303 498 4 0 500 0 - - -; +#X obj 303 544 line~; +#X obj 224 564 *~; +#X obj 303 521 pack 0 50; +#N canvas 0 0 450 300 graph4 0; +#X array bell-curve 200 float 1; +#A 0 1.12535e-07 1.54727e-07 2.12059e-07 2.89706e-07 3.94519e-07 5.35535e-07 +7.24633e-07 9.77371e-07 1.31404e-06 1.76105e-06 2.35258e-06 3.13275e-06 +4.15832e-06 5.50199e-06 7.25659e-06 9.54016e-06 1.25023e-05 1.63317e-05 +2.1266e-05 2.76026e-05 3.57128e-05 4.60584e-05 5.92113e-05 7.58768e-05 +9.69224e-05 0.00012341 0.000156634 0.000198167 0.000249912 0.000314163 +0.000393669 0.000491721 0.000612231 0.000759842 0.000940028 0.00115923 +0.00142498 0.00174605 0.00213263 0.00259648 0.00315111 0.00381201 0.00459678 +0.0055254 0.0066204 0.00790705 0.0094136 0.0111714 0.013215 0.0155826 +0.0183156 0.0214592 0.0250621 0.0291763 0.0338573 0.0391639 0.0451575 +0.0519019 0.0594631 0.0679081 0.0773047 0.0877205 0.0992216 0.111872 +0.125732 0.140858 0.1573 0.1751 0.194291 0.214896 0.236928 0.260383 +0.285247 0.311486 0.339053 0.367879 0.397882 0.428956 0.46098 0.493812 +0.527292 0.561244 0.595473 0.62977 0.663916 0.697676 0.730811 0.763074 +0.794216 0.823987 0.852144 0.878447 0.902668 0.924595 0.944027 0.960789 +0.974725 0.985703 0.99362 0.998401 1 0.998401 0.99362 0.985703 0.974725 +0.960789 0.944027 0.924595 0.902668 0.878447 0.852144 0.823987 0.794216 +0.763074 0.730811 0.697676 0.663916 0.62977 0.595473 0.561244 0.527292 +0.493812 0.46098 0.428956 0.397882 0.367879 0.339053 0.311486 0.285247 +0.260383 0.236928 0.214896 0.194291 0.1751 0.1573 0.140858 0.125732 +0.111872 0.0992216 0.0877205 0.0773047 0.0679081 0.0594631 0.0519019 +0.0451575 0.0391639 0.0338573 0.0291763 0.0250621 0.0214592 0.0183156 +0.0155826 0.013215 0.0111714 0.0094136 0.00790705 0.0066204 0.0055254 +0.00459678 0.00381201 0.00315111 0.00259648 0.00213263 0.00174605 0.00142498 +0.00115923 0.000940028 0.000759842 0.000612231 0.000491721 0.000393669 +0.000314163 0.000249912 0.000198167 0.000156634 0.00012341 9.69224e-05 +7.58768e-05 5.92113e-05 4.60584e-05 3.57128e-05 2.76026e-05 2.1266e-05 +1.63317e-05 1.25023e-05 9.54016e-06 7.25659e-06 5.50199e-06 4.15832e-06 +3.13275e-06 2.35258e-06 1.76105e-06 1.31404e-06 9.77371e-07 7.24633e-07 +5.35535e-07 3.94519e-07 2.89706e-07 2.12059e-07 1.54727e-07; +#X coords 0 1 199 0 200 140 1; +#X restore 443 555 graph; +#N canvas 94 264 600 388 make-table 0; +#X msg 81 44 bang; +#X obj 81 73 t b b; +#X obj 159 142 f; +#X obj 197 142 + 1; +#X msg 175 112 0; +#X obj 81 102 until; +#X obj 161 177 t f f; +#X obj 76 306 tabwrite bell-curve; +#X obj 52 270 expr exp(-$f1*$f1); +#X obj 63 168 sel 199; +#X obj 51 241 expr ($f1-100)/25; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 1 1 4 0; +#X connect 2 0 3 0; +#X connect 2 0 6 0; +#X connect 2 0 9 0; +#X connect 3 0 2 1; +#X connect 4 0 2 1; +#X connect 5 0 2 0; +#X connect 6 0 10 0; +#X connect 6 1 7 1; +#X connect 8 0 7 0; +#X connect 9 0 5 1; +#X connect 10 0 8 0; +#X restore 507 515 pd make-table; +#X obj 224 541 cos~; +#X obj 224 518 -~ 0.25; +#X obj 224 587 +~ 100; +#X obj 224 610 tabread4~ bell-curve; +#X obj 95 684 *~; +#X text 131 682 <--ring mod step; +#X text 256 635 waveshaper; +#X text 425 791 updated for Pd version 0.37; +#X text 157 326 frequency; +#X text 157 342 (tenths of; +#X text 441 698 0; +#X text 632 697 200; +#N canvas 0 0 450 300 graph1 0; +#X array F12-spectrum 259 float 0; +#X coords 0 0.51 258 -0.008 256 130 1; +#X restore 421 308 graph; +#X text 418 440 0; +#X text 475 444 -- frequency --; +#X text 644 441 2700; +#X obj 95 756 output~; +#X obj 94 725 hip~; +#N canvas 122 211 558 609 fft 0; +#X obj 23 55 inlet~; +#X obj 210 303 inlet; +#X obj 27 215 rfft~; +#X obj 27 248 *~; +#X obj 58 248 *~; +#X obj 27 278 sqrt~; +#X obj 334 200 block~ 4096 1; +#X obj 27 304 biquad~ 0 0 0 0 1; +#X text 91 216 Fourier series; +#X text 96 269 magnitude; +#X text 94 254 calculate; +#X text 21 3 This subpatch computes the spectrum of the incoming signal +with a (rectangular windowed) FFT. FFTs aren't properly introduced +until much later.; +#X text 83 61 signal to analyze; +#X text 195 255 delay two samples; +#X text 193 273 for better graphing; +#X obj 292 79 samplerate~; +#X obj 240 352 metro 500; +#X obj 240 329 inlet; +#X text 293 327 toggle to graph repeatedly; +#X text 264 303 bang to graph once; +#X obj 27 328 /~ 4096; +#X obj 292 54 bang~; +#X msg 211 413 \; pd dsp 1; +#X obj 292 102 / 4096; +#X obj 58 135 osc~; +#X obj 58 163 +~ 1; +#X obj 28 188 *~; +#X text 113 138 hanning window; +#X obj 254 79 0.5; +#X obj 240 390 tabwrite~ F12-spectrum; +#X connect 0 0 26 0; +#X connect 1 0 22 0; +#X connect 1 0 29 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 2 1 4 0; +#X connect 2 1 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 20 0; +#X connect 15 0 23 0; +#X connect 16 0 29 0; +#X connect 17 0 16 0; +#X connect 17 0 22 0; +#X connect 20 0 29 0; +#X connect 21 0 15 0; +#X connect 21 0 28 0; +#X connect 23 0 24 0; +#X connect 24 0 25 0; +#X connect 25 0 26 1; +#X connect 26 0 2 0; +#X connect 28 0 24 1; +#X restore 148 725 pd fft; +#X obj 208 704 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 208 725 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X text 229 724 <-- repeatedly; +#X text 230 704 <-- graph once; +#X text 17 21 Instead of using the two cosines as FM carrier oscillators +\, we can use them as ring modulators for a natural or synthetic tone. +Here we use waveshaping - to wit \, a sinusoid looking up a Gaussian +bell curve. This has the nice properties that the partials are always +positive cosines in phase \, and the spectrum spreads out smoothly +as the index changes.; +#X text 98 1 PAF: TWO-COSINE RING MODULATOR FOR WAVESHAPER; +#X text 17 253 Then with ~* we do the ring modulation and we're done. +This is the PAF (phase-aligned formant) synthesis algorithm (patented +1993 by IRCAM).; +#X obj 224 492 *~ 0.5; +#X text 17 129 For phase coherency \, the waveshaper and the cosine +pair are driven from the same phasor~ object. Since the waveshaping +is done using a symmetric curve \, its output is at double the frequency +of the input. So for each cycle of the phasor we compute a half-cycle +of the sine function (by multiplying by 0.5 and subtracting 0.25 before +the cosine lookup). We center the cosine output for lookup in a 200-point +table containing a bell curve.; +#X connect 0 0 6 1; +#X connect 0 0 8 0; +#X connect 1 0 5 0; +#X connect 1 0 0 0; +#X connect 2 0 6 0; +#X connect 3 0 4 1; +#X connect 3 0 7 1; +#X connect 4 0 1 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 7 0 8 1; +#X connect 8 0 31 0; +#X connect 9 0 4 0; +#X connect 9 0 3 0; +#X connect 10 0 11 0; +#X connect 11 0 15 0; +#X connect 13 0 9 0; +#X connect 15 0 13 0; +#X connect 16 0 9 1; +#X connect 16 0 5 1; +#X connect 16 0 1 0; +#X connect 16 0 53 0; +#X connect 17 0 16 0; +#X connect 21 0 24 0; +#X connect 22 0 23 1; +#X connect 23 0 29 0; +#X connect 24 0 22 0; +#X connect 27 0 23 0; +#X connect 28 0 27 0; +#X connect 29 0 30 0; +#X connect 30 0 31 1; +#X connect 31 0 44 0; +#X connect 31 0 45 0; +#X connect 44 0 43 0; +#X connect 44 0 43 1; +#X connect 46 0 45 1; +#X connect 47 0 45 2; +#X connect 53 0 28 0; diff --git a/desiredata/doc/3.audio.examples/F13.paf.control.pd b/desiredata/doc/3.audio.examples/F13.paf.control.pd new file mode 100644 index 00000000..59ebd334 --- /dev/null +++ b/desiredata/doc/3.audio.examples/F13.paf.control.pd @@ -0,0 +1,164 @@ +#N canvas 89 36 756 792 12; +#X obj 127 608 cos~; +#X obj 127 585 *~; +#X obj 170 608 cos~; +#X obj 225 553 wrap~; +#X obj 189 553 -~; +#X obj 170 585 +~; +#X obj 163 638 -~; +#X obj 183 670 *~; +#X obj 145 670 +~; +#X obj 189 521 samphold~; +#X floatatom 189 321 4 0 127 0 - - -; +#X text 185 283 center; +#X obj 189 388 line~; +#X obj 189 365 pack 0 50; +#X obj 80 464 phasor~; +#X floatatom 80 370 4 0 127 0 - - -; +#X text 71 331 fundamental; +#X floatatom 387 384 4 0 127 0 - - -; +#X obj 387 455 line~; +#X obj 298 584 *~; +#X obj 387 432 pack 0 50; +#N canvas 94 264 600 388 make-table 0; +#X msg 81 44 bang; +#X obj 81 73 t b b; +#X obj 159 142 f; +#X obj 197 142 + 1; +#X msg 175 112 0; +#X obj 81 102 until; +#X obj 161 177 t f f; +#X obj 76 306 tabwrite bell-curve; +#X obj 52 270 expr exp(-$f1*$f1); +#X obj 63 168 sel 199; +#X obj 51 241 expr ($f1-100)/25; +#N canvas 0 0 450 300 graph4 0; +#X array bell-curve 200 float 1; +#A 0 1.12535e-07 1.54727e-07 2.12059e-07 2.89706e-07 3.94519e-07 5.35535e-07 +7.24633e-07 9.77371e-07 1.31404e-06 1.76105e-06 2.35258e-06 3.13275e-06 +4.15832e-06 5.50199e-06 7.25659e-06 9.54016e-06 1.25023e-05 1.63317e-05 +2.1266e-05 2.76026e-05 3.57128e-05 4.60584e-05 5.92113e-05 7.58768e-05 +9.69224e-05 0.00012341 0.000156634 0.000198167 0.000249912 0.000314163 +0.000393669 0.000491721 0.000612231 0.000759842 0.000940028 0.00115923 +0.00142498 0.00174605 0.00213263 0.00259648 0.00315111 0.00381201 0.00459678 +0.0055254 0.0066204 0.00790705 0.0094136 0.0111714 0.013215 0.0155826 +0.0183156 0.0214592 0.0250621 0.0291763 0.0338573 0.0391639 0.0451575 +0.0519019 0.0594631 0.0679081 0.0773047 0.0877205 0.0992216 0.111872 +0.125732 0.140858 0.1573 0.1751 0.194291 0.214896 0.236928 0.260383 +0.285247 0.311486 0.339053 0.367879 0.397882 0.428956 0.46098 0.493812 +0.527292 0.561244 0.595473 0.62977 0.663916 0.697676 0.730811 0.763074 +0.794216 0.823987 0.852144 0.878447 0.902668 0.924595 0.944027 0.960789 +0.974725 0.985703 0.99362 0.998401 1 0.998401 0.99362 0.985703 0.974725 +0.960789 0.944027 0.924595 0.902668 0.878447 0.852144 0.823987 0.794216 +0.763074 0.730811 0.697676 0.663916 0.62977 0.595473 0.561244 0.527292 +0.493812 0.46098 0.428956 0.397882 0.367879 0.339053 0.311486 0.285247 +0.260383 0.236928 0.214896 0.194291 0.1751 0.1573 0.140858 0.125732 +0.111872 0.0992216 0.0877205 0.0773047 0.0679081 0.0594631 0.0519019 +0.0451575 0.0391639 0.0338573 0.0291763 0.0250621 0.0214592 0.0183156 +0.0155826 0.013215 0.0111714 0.0094136 0.00790705 0.0066204 0.0055254 +0.00459678 0.00381201 0.00315111 0.00259648 0.00213263 0.00174605 0.00142498 +0.00115923 0.000940028 0.000759842 0.000612231 0.000491721 0.000393669 +0.000314163 0.000249912 0.000198167 0.000156634 0.00012341 9.69224e-05 +7.58768e-05 5.92113e-05 4.60584e-05 3.57128e-05 2.76026e-05 2.1266e-05 +1.63317e-05 1.25023e-05 9.54016e-06 7.25659e-06 5.50199e-06 4.15832e-06 +3.13275e-06 2.35258e-06 1.76105e-06 1.31404e-06 9.77371e-07 7.24633e-07 +5.35535e-07 3.94519e-07 2.89706e-07 2.12059e-07 1.54727e-07; +#X coords 0 1 199 0 200 140 1; +#X restore 342 85 graph; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 1 1 4 0; +#X connect 2 0 3 0; +#X connect 2 0 6 0; +#X connect 2 0 9 0; +#X connect 3 0 2 1; +#X connect 4 0 2 1; +#X connect 5 0 2 0; +#X connect 6 0 10 0; +#X connect 6 1 7 1; +#X connect 8 0 7 0; +#X connect 9 0 5 1; +#X connect 10 0 8 0; +#X restore 536 647 pd make-table; +#X obj 298 558 cos~; +#X obj 298 533 -~ 0.25; +#X obj 298 610 +~ 100; +#X obj 298 633 tabread4~ bell-curve; +#X obj 184 699 *~; +#X text 330 658 waveshaper; +#X text 31 2 CHANGING PAF CONTROLS TO NATURAL UNITS; +#X obj 80 394 mtof; +#X obj 211 413 expr 1/$f1; +#X obj 189 341 mtof; +#X text 184 298 freq.; +#X obj 189 437 *~; +#X text 385 357 bandwidth; +#X obj 387 406 mtof; +#X obj 387 491 *~; +#X obj 387 515 *~ 25; +#X text 18 23 The more "natural" units for describing a formant might +be center frequency and bandwidth \, so that you can change the fundamental +without having the formant shift up and down in parallel. Here all +three frequencies are expressed in MIDI units. The bandwidth and center +frequency have to be divided by the fundamental (the expr 1/$f1 takes +its reciprocal and two *~ objects finish the division.); +#X text 427 490 divide by fundamental; +#X text 445 514 range for table; +#X text 364 609 offset to middle of table; +#X text 196 459 C.F. relative; +#X text 197 475 to fundamental; +#X text 69 346 (MIDI units); +#X text 220 697 ring mod; +#X obj 184 726 output~; +#X text 483 762 updated for Pd version 0.37; +#X text 19 137 Here we take a somewhat lax approach to sampholding +the center frequency control. The frequency itself changes instantly +\, but the center/fundamental frequency ratio waits for the next period. +This gives a slight "chirp" if the fundamental is abruptly raised a +couple of octaves. There's no easy way using Pd's built-in primitives +to avoid this. Note however that there's a "paf~" extern available +which solves this problem better and \, moreover \, runs much faster. +; +#X obj 298 508 *~ 0.5; +#X connect 0 0 6 1; +#X connect 0 0 8 0; +#X connect 1 0 5 0; +#X connect 1 0 0 0; +#X connect 2 0 6 0; +#X connect 3 0 4 1; +#X connect 3 0 7 1; +#X connect 4 0 1 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 7 0 8 1; +#X connect 8 0 26 0; +#X connect 9 0 4 0; +#X connect 9 0 3 0; +#X connect 10 0 31 0; +#X connect 12 0 33 0; +#X connect 13 0 12 0; +#X connect 14 0 9 1; +#X connect 14 0 1 0; +#X connect 14 0 5 1; +#X connect 14 0 49 0; +#X connect 15 0 29 0; +#X connect 17 0 35 0; +#X connect 18 0 36 0; +#X connect 19 0 24 0; +#X connect 20 0 18 0; +#X connect 22 0 19 0; +#X connect 23 0 22 0; +#X connect 24 0 25 0; +#X connect 25 0 26 1; +#X connect 26 0 46 0; +#X connect 26 0 46 1; +#X connect 29 0 30 0; +#X connect 29 0 14 0; +#X connect 30 0 33 1; +#X connect 30 0 36 1; +#X connect 31 0 13 0; +#X connect 33 0 9 0; +#X connect 35 0 20 0; +#X connect 36 0 37 0; +#X connect 37 0 19 1; +#X connect 49 0 23 0; diff --git a/desiredata/doc/3.audio.examples/G01.delay.pd b/desiredata/doc/3.audio.examples/G01.delay.pd new file mode 100644 index 00000000..6b03ed12 --- /dev/null +++ b/desiredata/doc/3.audio.examples/G01.delay.pd @@ -0,0 +1,48 @@ +#N canvas 19 35 777 377 12; +#X text 103 7 DELAYS; +#X text 248 79 The delwrite~ object creates the delay line \; you give +it a name and a size in milliseconds. Each delwrite~ should have a +different name.; +#N canvas 0 0 548 248 sample 0; +#N canvas 0 0 450 300 graph1 0; +#X array G01-tab 61079 float 0; +#X coords 0 1 61078 -1 200 140 1; +#X restore 100 20 graph; +#X obj 61 176 loadbang; +#X obj 60 221 soundfiler; +#X msg 61 199 read -resize ../sound/voice.wav G01-tab; +#X connect 1 0 3 0; +#X connect 3 0 2 0; +#X restore 253 337 pd sample; +#X floatatom 38 196 4 0 999 0 - - -; +#X text 81 195 <-- delay time; +#X text 46 230 read from delay line; +#X obj 38 249 delread~ delay1; +#X obj 14 87 tabplay~ G01-tab; +#X obj 14 63 metro 1000; +#X obj 14 39 loadbang; +#X text 40 146 write to delay line; +#X obj 16 303 output~; +#X obj 15 275 +~; +#X obj 24 165 delwrite~ delay1 1000; +#X text 499 348 updated for Pd version 0.37-1; +#X text 248 24 You can delay a signal using the delwrite~ and delread~ +objects. In this example \, a sample loops continuously and is added +to a delayed copy of itself.; +#X text 247 215 The delread~ object always delays the signal an integer +number of samples and does no interpolation.; +#X text 28 107 test signal to delay; +#X text 248 130 Delread~'s arguments are the name of a delwrite (of +which there should be exactly one) and an optional delay time in milliseconds +between 0 and the length of the delay line. Each delwrite~ may have +as many delread~s as you wish \, which can then function as multiple +delay taps.; +#X text 114 209 (msec); +#X connect 3 0 6 0; +#X connect 6 0 12 1; +#X connect 7 0 12 0; +#X connect 7 0 13 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 12 0 11 0; +#X connect 12 0 11 1; diff --git a/desiredata/doc/3.audio.examples/G02.delay.loop.pd b/desiredata/doc/3.audio.examples/G02.delay.loop.pd new file mode 100644 index 00000000..ba355b7c --- /dev/null +++ b/desiredata/doc/3.audio.examples/G02.delay.loop.pd @@ -0,0 +1,44 @@ +#N canvas 130 225 601 527 12; +#X floatatom 36 197 5 -30 130 0 - - -; +#X floatatom 58 322 0 0 0 0 - - -; +#X text 88 196 <-- pitch; +#X text 88 321 <-- delay time; +#X text 287 420 write to delay line; +#X text 246 346 read from delay line; +#X text 72 393 add the original and the delayed signal; +#X obj 36 233 mtof; +#X msg 111 233 1; +#X obj 37 282 *~; +#X obj 37 394 +~; +#X obj 58 370 *~ 0.7; +#X text 116 370 feedback gain; +#X text 57 9 DELAYS WITH FEEDBACK; +#X text 33 39 You can feed the result of a delread~ module back into +its own delwrite~ \, as long as you're careful about stability. For +delays below 30 msec \, you can frequently hear the resonant pitch. +For longer delay times you get the famous old delay loop effect.; +#X obj 111 281 *~; +#X obj 111 257 adsr 1 100 1000 0 1000; +#X obj 37 463 output~; +#X text 32 118 We've added an amplitude control here so that the test +oscillator only speaks while you're dragging the pitch up and down. +Be sure to try shift-dragging on the pitch control.; +#X text 330 495 updated for Pd version 0.37-1; +#X obj 36 257 phasor~; +#X obj 58 346 delread~ G02-del 160; +#X obj 77 419 delwrite~ G02-del 2000; +#X connect 0 0 7 0; +#X connect 0 0 8 0; +#X connect 1 0 21 0; +#X connect 7 0 20 0; +#X connect 8 0 16 0; +#X connect 9 0 10 0; +#X connect 10 0 17 0; +#X connect 10 0 17 1; +#X connect 10 0 22 0; +#X connect 11 0 10 1; +#X connect 15 0 9 1; +#X connect 16 0 15 0; +#X connect 16 0 15 1; +#X connect 20 0 9 0; +#X connect 21 0 11 0; diff --git a/desiredata/doc/3.audio.examples/G03.delay.variable.pd b/desiredata/doc/3.audio.examples/G03.delay.variable.pd new file mode 100644 index 00000000..c2ece553 --- /dev/null +++ b/desiredata/doc/3.audio.examples/G03.delay.variable.pd @@ -0,0 +1,77 @@ +#N canvas 100 17 660 504 12; +#X obj 33 305 hip~ 10; +#X floatatom 301 221 0 0 0 0 - - -; +#X obj 301 269 line~; +#X obj 301 245 pack 0 100; +#X floatatom 226 191 0 0 0 0 - - -; +#X floatatom 382 297 0 0 0 0 - - -; +#X obj 382 369 line~; +#X obj 382 345 pack 0 100; +#X obj 382 321 * 0.01; +#X floatatom 113 166 0 0 0 0 - - -; +#X obj 113 237 line~; +#X obj 113 213 pack 0 100; +#X obj 33 257 *~; +#X obj 33 281 cos~; +#X floatatom 33 134 0 0 0 0 - - -; +#X obj 33 158 mtof; +#X obj 33 182 * 0.5; +#X obj 33 329 clip~ -0.2 0.2; +#X obj 113 189 * 0.01; +#X obj 33 353 +~; +#X obj 361 395 *~; +#X obj 226 287 *~; +#X obj 226 215 / 100; +#X obj 33 377 hip~ 5; +#X obj 226 263 +~ 1; +#X obj 226 239 osc~ 0; +#X obj 226 311 +~ 1.46; +#X text 154 164 <-- timbre; +#X text 66 135 <-- pitch; +#X text 279 191 <-- cycle frequency (hundredths); +#X text 354 222 <-- cycle depth (msec); +#X text 431 298 <-- feedback (hundredths); +#X text 89 6 VARIABLE DELAYS; +#X obj 33 206 osc~ 0; +#X text 46 32 This is a fuzzed FM generator going into a delay loop +\, this time using a variable delay object (vd~). You can get several +interesting effects this way. We have taken the precaution of clipping +inside the loop to avoid instabilities. You can push the loop gain +past 1 if you want \, it will just oscillate.; +#X obj 32 409 output~; +#X obj 226 335 vd~ G03-del; +#X obj 361 443 delwrite~ G03-del 1000; +#X obj 361 419 clip~ -1 1; +#X text 387 481 updated for Pd version 0.37-1; +#X connect 0 0 17 0; +#X connect 1 0 3 0; +#X connect 2 0 21 1; +#X connect 3 0 2 0; +#X connect 4 0 22 0; +#X connect 5 0 8 0; +#X connect 6 0 20 1; +#X connect 7 0 6 0; +#X connect 8 0 7 0; +#X connect 9 0 18 0; +#X connect 10 0 12 1; +#X connect 11 0 10 0; +#X connect 12 0 13 0; +#X connect 13 0 0 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 33 0; +#X connect 17 0 19 0; +#X connect 18 0 11 0; +#X connect 19 0 23 0; +#X connect 20 0 38 0; +#X connect 21 0 26 0; +#X connect 22 0 25 0; +#X connect 23 0 20 0; +#X connect 23 0 35 0; +#X connect 23 0 35 1; +#X connect 24 0 21 0; +#X connect 25 0 24 0; +#X connect 26 0 36 0; +#X connect 33 0 12 0; +#X connect 36 0 19 1; +#X connect 38 0 37 0; diff --git a/desiredata/doc/3.audio.examples/G04.control.blocksize.pd b/desiredata/doc/3.audio.examples/G04.control.blocksize.pd new file mode 100644 index 00000000..efae501a --- /dev/null +++ b/desiredata/doc/3.audio.examples/G04.control.blocksize.pd @@ -0,0 +1,79 @@ +#N canvas 100 17 637 513 12; +#N canvas 195 311 647 354 delay-writer 0; +#X obj 86 220 inlet~; +#X obj 86 326 outlet~; +#X obj 392 197 block~ 1; +#X obj 164 267 *~ 0.99; +#X obj 87 272 +~; +#X obj 165 221 inlet; +#X text 80 7 Because of the feedback \, the delwrite~ has to be computed +after the delread~. So we set the blocksize to 1 to minimize the resulting +delay.; +#X text 390 219 this object sets the; +#X text 389 236 block size for audio; +#X text 388 255 computations in this; +#X obj 165 244 delread~ G04-del; +#X obj 98 302 delwrite~ G04-del 1000; +#X text 79 183 incoming; +#X text 81 198 pulses; +#X text 165 182 delay; +#X text 166 197 time; +#X text 388 273 window. Must be a; +#X text 388 292 power of two.; +#X text 77 60 The smaller the blocksize the more expensive the computations +are \, so don't reduce it lower than you have to. Also \, it's a good +idea to isolate the portion of the patch that requires the smaller +block size \, and only run that portion that way. Here \, the pulses +that excite the delay line are computed outside this window \, and +the output level control as well.; +#X connect 0 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 4 0 11 0; +#X connect 5 0 10 0; +#X connect 10 0 3 0; +#X restore 153 420 pd delay-writer; +#X obj 283 384 expr 1000/$f1; +#X obj 283 358 mtof; +#X msg 153 355 1; +#X msg 192 355 0; +#X obj 153 254 metro 500; +#X obj 283 304 random 60; +#X obj 153 228 loadbang; +#X obj 283 330 + 30; +#X text 86 9 CONTROLLING DELAY WITH BLOCK~; +#X text 299 420 <-- here is the delay loop; +#X text 63 43 In situations where a delay read feeds back to a delay +write \, the minimum possible delay you can achieve is one block \, +which by default is 64 samples \, or 1.45 msec at 44100 Hz. You can +shorten the minimum delay by changing the block size. Do this in a +subpatch (open it to see how).; +#X obj 153 449 output~; +#X obj 153 387 vline~; +#X text 371 487 updated for Pd version 0.37-1; +#X text 61 124 Here we use this principle to make a harpisichord-like +sound by sending pulses into a recirculating delay line (which imitates +the travel of the wave up and down the harpsichord string.) This is +related to Karplus-Strong synthesis \, but the idea is probably much +older than their paper.; +#X text 33 328 this makes; +#X text 32 346 a rectangular; +#X text 31 384 long.; +#X text 409 366 length of delay line is; +#X text 410 384 1000/(frequency); +#X obj 192 329 del 1; +#X text 32 364 pulse 1 msec; +#X connect 0 0 12 0; +#X connect 0 0 12 1; +#X connect 1 0 0 1; +#X connect 2 0 1 0; +#X connect 3 0 13 0; +#X connect 4 0 13 0; +#X connect 5 0 3 0; +#X connect 5 0 6 0; +#X connect 5 0 21 0; +#X connect 6 0 8 0; +#X connect 7 0 5 0; +#X connect 8 0 2 0; +#X connect 13 0 0 0; +#X connect 21 0 4 0; diff --git a/desiredata/doc/3.audio.examples/G05.execution.order.pd b/desiredata/doc/3.audio.examples/G05.execution.order.pd new file mode 100644 index 00000000..d50c97a9 --- /dev/null +++ b/desiredata/doc/3.audio.examples/G05.execution.order.pd @@ -0,0 +1,79 @@ +#N canvas 100 17 683 605 12; +#X floatatom 424 290 0 0 100 0 - - -; +#X obj 59 404 +~; +#X text 86 9 ORDER OF EXECUTION OF DELWRITE~ AND DELREAD~/VD~; +#X text 42 29 If you're writing to and reading from a delay line \, +you have to get the write sorted before the read or else you'll never +get less than a block's delay. This patch compares a "wrong" flanger +with a "right" one:; +#X text 471 284 <-- delay in samples; +#X obj 94 490 *~; +#X obj 94 466 -~; +#N canvas 0 0 600 400 delay-writer 0; +#X obj 96 107 inlet~; +#X obj 96 180 outlet~; +#X obj 116 144 delwrite~ G05-d2 1000; +#X connect 0 0 1 0; +#X connect 0 0 2 0; +#X restore 283 403 pd delay-writer; +#N canvas 0 0 280 330 delay-reader 0; +#X obj 96 107 inlet~; +#X obj 89 267 outlet~; +#X obj 112 163 inlet~; +#X obj 89 237 +~; +#X obj 112 198 vd~ G05-d2; +#X connect 0 0 3 0; +#X connect 2 0 4 0; +#X connect 3 0 1 0; +#X connect 4 0 3 1; +#X restore 282 431 pd delay-reader; +#X obj 59 490 +~; +#X obj 424 313 / 44.1; +#X obj 59 534 output~; +#X obj 135 490 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X text 159 490 <-- off to hear left-hand side \; on to hear right +hand side.; +#X text 393 575 updated for Pd version 0.37-1; +#X obj 424 337 pack 0 30; +#N canvas 0 0 450 300 pulse 0; +#X obj 64 197 outlet~; +#X obj 63 93 phasor~ 50; +#X obj 63 119 *~ 100; +#X obj 63 144 clip~ 0.75 1.25; +#X obj 64 170 cos~; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X restore 60 302 pd pulse; +#X obj 81 354 delwrite~ G05-d1 1000; +#X obj 82 381 vd~ G05-d1; +#X obj 424 362 line~; +#X text 44 96 To get them to go off in the correct order \, put the +delread~ and vd~ objects in subpatches. The audio connections between +the subpatches force the "reader" to be sorted after the "writer". +DSP sorting in Pd follows the hierarchy of subpatches.; +#X text 43 175 To hear the difference scroll the delay time between +0 and 100 samples. The patch at left doesn't let you get below 64 samples +\, but the patch at right can go all the way down to one sample.; +#X text 45 241 You can use the same strategy to avoid picking up unwanted +64-sample delays in send~/receive~ and throw~/catch~ pairs.; +#X connect 0 0 10 0; +#X connect 1 0 6 1; +#X connect 1 0 9 0; +#X connect 5 0 9 1; +#X connect 6 0 5 0; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 9 0 11 0; +#X connect 9 0 11 1; +#X connect 10 0 15 0; +#X connect 12 0 5 1; +#X connect 15 0 19 0; +#X connect 16 0 1 0; +#X connect 16 0 7 0; +#X connect 16 0 17 0; +#X connect 18 0 1 1; +#X connect 19 0 8 1; +#X connect 19 0 18 0; diff --git a/desiredata/doc/3.audio.examples/G06.octave.doubler.pd b/desiredata/doc/3.audio.examples/G06.octave.doubler.pd new file mode 100644 index 00000000..a95fe24e --- /dev/null +++ b/desiredata/doc/3.audio.examples/G06.octave.doubler.pd @@ -0,0 +1,114 @@ +#N canvas 110 17 775 614 12; +#X obj 463 303 loadbang; +#X obj 553 222 adc~ 1; +#X obj 463 358 soundfiler; +#X obj 31 394 output~; +#X obj 554 269 tabwrite~ E03-table; +#X msg 463 330 read ../sound/voice.wav E03-table; +#X obj 58 83 fiddle~ 2048; +#X obj 126 106 unpack; +#X obj 126 130 moses 1; +#X obj 199 108 mtof; +#N canvas 0 0 446 202 /SUBPATCH/ 0; +#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 100 20 inlet~; +#X obj 99 87 *~; +#X obj 98 159 outlet~; +#X text 381 181 corner; +#X connect 0 0 2 1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X coords 0 0 100 100 40 18 1; +#X restore 77 329 pd; +#N canvas 0 0 446 202 /SUBPATCH/ 0; +#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 100 20 inlet~; +#X obj 99 87 *~; +#X obj 98 159 outlet~; +#X text 381 181 corner; +#X connect 0 0 2 1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X coords 0 0 100 100 40 18 1; +#X restore 31 329 pd; +#N canvas 414 195 613 302 looper 0; +#N canvas 0 0 450 300 graph1 0; +#X array E03-table 44103 float 0; +#X coords 0 1.02 44103 -1.02 200 130 1; +#X restore 349 22 graph; +#X text 347 161 ---- 44103 samples ----; +#X obj 35 77 +~ 1; +#X obj 35 25 phasor~ 1; +#X obj 35 50 *~ 44100; +#X obj 35 106 tabread4~ E03-table; +#X obj 35 132 outlet~; +#X text 46 238 one-second sample reader loop. You can replace this +with an adc~ if you want to go live.; +#X connect 2 0 5 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X restore 31 30 pd looper; +#X text 547 309 re-read original sample; +#X obj 565 246 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 584 244 <-- record a sample; +#X text 152 314 on/off for original; +#X text 123 330 <--and processed sounds; +#X text 240 3 OCTAVE DOUBLING VIA VARIABLE COMB FILTER; +#X obj 31 367 +~; +#X obj 252 157 samplerate~; +#X obj 199 156 t f b; +#X obj 59 58 delwrite~ G06-del 100; +#X obj 79 234 delread~ G06-del; +#X obj 101 282 vd~ G06-del; +#X obj 78 306 +~; +#X obj 230 210 +; +#X obj 199 131 expr 500/$f1; +#X obj 230 262 line~; +#X obj 230 239 pack 0 20; +#X text 243 108 fundamental frequency; +#X text 311 131 1/2 period \, in msec; +#X text 286 201 estimate fiddle~ delay; +#X text 491 592 updated for Pd version 0.37-1; +#X text 159 401 We already saw how to use ring modulation to alias +a pitched sound down one octave. Here we do the reverse: filter out +all odd harmonics using a variable-delay comb filter tuned one octave +above the incoming sound. We use two taps into the delay line. The +fixed one (delread~) adjusts for the delayed output of fiddle~. The +variable one (vd~) adds to this an additional delay equal to 1/2 the +measured period of the incoming sound. THese two are added. Odd harmonics +are 180 degrees out of phase at the two taps and cancel. Even harmonics +get through - so the sound goes up an octave \, without denaturing +the timbre as a speed-up would.; +#X obj 252 183 expr 2048000/$f1; +#X text 288 216 as one window (in msec); +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 5 0 2 0; +#X connect 6 2 7 0; +#X connect 7 0 8 0; +#X connect 8 1 9 0; +#X connect 9 0 27 0; +#X connect 10 0 19 1; +#X connect 11 0 19 0; +#X connect 12 0 6 0; +#X connect 12 0 11 0; +#X connect 12 0 22 0; +#X connect 14 0 4 0; +#X connect 19 0 3 0; +#X connect 19 0 3 1; +#X connect 20 0 35 0; +#X connect 21 0 26 0; +#X connect 21 1 20 0; +#X connect 23 0 25 0; +#X connect 24 0 25 1; +#X connect 25 0 10 0; +#X connect 26 0 29 0; +#X connect 27 0 21 0; +#X connect 28 0 24 0; +#X connect 29 0 28 0; +#X connect 35 0 26 1; +#X connect 35 0 23 0; diff --git a/desiredata/doc/3.audio.examples/G07.shaker.pd b/desiredata/doc/3.audio.examples/G07.shaker.pd new file mode 100644 index 00000000..1da97e8e --- /dev/null +++ b/desiredata/doc/3.audio.examples/G07.shaker.pd @@ -0,0 +1,80 @@ +#N canvas 159 89 808 531 12; +#X obj 21 438 output~; +#X obj 21 411 +~; +#X obj 33 192 delwrite~ G07-del 30; +#X obj 99 391 line~; +#X obj 63 391 *~; +#X obj 93 335 line~; +#X obj 57 335 *~; +#X obj 80 281 line~; +#X obj 44 281 *~; +#X obj 58 221 line~; +#X obj 22 221 *~; +#X text 51 8 THE "SHAKER"; +#X obj 279 86 + 1; +#X obj 279 109 mod 4; +#X obj 244 83 f; +#X obj 284 160 random 1000; +#X obj 244 135 t f b; +#X obj 244 37 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X floatatom 347 34 5 10 1000 0 - - -; +#X obj 244 242 route 0 1 2 3; +#X obj 44 255 delread~ G07-del 30; +#X obj 23 165 phasor~ 80; +#X obj 57 309 delread~ G07-del 17; +#X obj 63 365 delread~ G07-del 11; +#X obj 347 59 * 4; +#X obj 284 187 expr 2 * $f1/1000 - 0.7; +#X floatatom 23 142 5 30 1000 0 - - -; +#X obj 244 58 metro 50; +#X obj 244 218 pack 0 0 200; +#X text 23 118 frequency; +#X text 225 17 on/off; +#X text 344 13 time constant (msec); +#X text 536 511 updated for Pd version 0.37-1; +#X text 266 306 This is a time-varying comb filter \, combining four +delayed copies of the input signal. The amplitude of each delayed copy +varies randomly between -0.7 and +1.3. Each time the metronome goes +off \, one of the four delay's gains is changed in sequence. The change +occurs over the next four ticks of the metronome (so \, if the metronome +ticks every 50 msec \, each message to a line~ has a second argument +of 200.); +#X text 268 424 Any collection of four gains for the four delayed copies +of the signal (including the original) defines some sort of irregular +comb filter. The peaks and valleys of the comb filter shift constantly +as the gains change to new \, random values.; +#X connect 1 0 0 0; +#X connect 1 0 0 1; +#X connect 3 0 4 1; +#X connect 4 0 1 1; +#X connect 5 0 6 1; +#X connect 6 0 1 1; +#X connect 7 0 8 1; +#X connect 8 0 1 1; +#X connect 9 0 10 1; +#X connect 10 0 1 0; +#X connect 12 0 13 0; +#X connect 13 0 14 1; +#X connect 14 0 12 0; +#X connect 14 0 16 0; +#X connect 15 0 25 0; +#X connect 16 0 28 0; +#X connect 16 1 15 0; +#X connect 17 0 27 0; +#X connect 18 0 24 0; +#X connect 18 0 27 1; +#X connect 19 0 9 0; +#X connect 19 1 7 0; +#X connect 19 2 5 0; +#X connect 19 3 3 0; +#X connect 20 0 8 0; +#X connect 21 0 2 0; +#X connect 21 0 10 0; +#X connect 22 0 6 0; +#X connect 23 0 4 0; +#X connect 24 0 28 2; +#X connect 25 0 28 1; +#X connect 26 0 21 0; +#X connect 27 0 14 0; +#X connect 28 0 19 0; diff --git a/desiredata/doc/3.audio.examples/G08.reverb.pd b/desiredata/doc/3.audio.examples/G08.reverb.pd new file mode 100644 index 00000000..09941436 --- /dev/null +++ b/desiredata/doc/3.audio.examples/G08.reverb.pd @@ -0,0 +1,253 @@ +#N canvas 390 121 616 352 12; +#N canvas 0 0 499 321 test-input 0; +#X obj 75 253 outlet~; +#X obj 74 201 -~; +#X obj 74 177 *~ 3; +#X obj 111 183 *~ 2; +#X floatatom 74 81 0 0 0 0 - - -; +#X obj 74 153 clip~ 0 0.667; +#X text 124 80 <-- pitch; +#X obj 74 105 mtof; +#X msg 195 142 1; +#X obj 74 225 *~; +#X obj 74 129 phasor~ 0; +#X obj 195 190 tabread4~ dbtorms; +#X obj 195 166 adsr 100 100 2000 0 2000; +#X obj 73 54 inlet; +#N canvas 0 0 600 392 conversion-tables 0; +#N canvas 0 0 450 300 graph1 0; +#X array dbtorms 123 float 1; +#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05 +2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05 +4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05 +8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828 +0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813 +0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946 +0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489 +0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813 +0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328 +0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526 +0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684 +0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202 +0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838 +0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946 +0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526 +2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341 +6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893; +#X coords 0 10 123 0 200 100 1; +#X restore 70 45 graph; +#X text 272 138 0; +#X text 274 38 10; +#X text 89 148 ------ 123 samples ------; +#N canvas 0 0 450 300 graph2 0; +#X array mtof 130 float 1; +#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499 +12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017 +21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478 +36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705 +61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989 +103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814 +174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183 +293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164 +493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991 +830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51 +1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32 +2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07 +4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88 +7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3 +11839.8 12543.9 13289.8 14080; +#X coords 0 12000 130 0 200 100 1; +#X restore 77 222 graph; +#X text 87 330 ------ 130 samples ------; +#X text 286 315 0; +#X text 288 215 12000; +#N canvas 244 212 672 338 regenerate-tables 0; +#X msg 415 84 bang; +#X obj 415 113 t b b; +#X obj 474 177 f; +#X obj 512 177 + 1; +#X msg 483 147 0; +#X obj 415 142 until; +#X obj 474 211 t f f; +#X obj 414 238 mtof; +#X obj 405 202 sel 129; +#X obj 413 264 tabwrite mtof; +#X obj 35 227 moses 2; +#X msg 19 76 bang; +#X obj 19 105 t b b; +#X obj 90 166 f; +#X obj 128 166 + 1; +#X msg 112 138 0; +#X obj 19 134 until; +#X obj 11 194 sel 122; +#X msg 35 258 0; +#X obj 79 259 dbtorms; +#X obj 90 194 t f f; +#X obj 35 291 tabwrite dbtorms; +#X text 18 49 bang to recalculate dbtorms table; +#X text 356 50 bang to recalculate the mtof table; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 1 1 4 0; +#X connect 2 0 3 0; +#X connect 2 0 6 0; +#X connect 2 0 8 0; +#X connect 3 0 2 1; +#X connect 4 0 2 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 6 1 9 1; +#X connect 7 0 9 0; +#X connect 8 0 5 1; +#X connect 10 0 18 0; +#X connect 10 1 19 0; +#X connect 11 0 12 0; +#X connect 12 0 16 0; +#X connect 12 1 15 0; +#X connect 13 0 14 0; +#X connect 13 0 17 0; +#X connect 13 0 20 0; +#X connect 14 0 13 1; +#X connect 15 0 13 1; +#X connect 16 0 13 0; +#X connect 17 0 16 1; +#X connect 18 0 21 0; +#X connect 19 0 21 0; +#X connect 20 0 10 0; +#X connect 20 1 21 1; +#X restore 375 76 pd regenerate-tables; +#X restore 260 101 pd conversion-tables; +#X connect 1 0 9 0; +#X connect 2 0 1 0; +#X connect 3 0 1 1; +#X connect 4 0 7 0; +#X connect 4 0 8 0; +#X connect 5 0 2 0; +#X connect 7 0 10 0; +#X connect 8 0 12 0; +#X connect 9 0 0 0; +#X connect 10 0 3 0; +#X connect 10 0 5 0; +#X connect 11 0 9 1; +#X connect 12 0 11 0; +#X connect 13 0 4 0; +#X restore 39 114 pd test-input; +#X text 135 6 REVERBERATOR; +#X floatatom 39 87 0 10 130 0 - - -; +#X text 76 87 <-- pitch; +#N canvas 96 169 958 610 reverb 0; +#X obj 13 19 inlet~; +#X obj 13 43 reverb-echo echo-del1 5.43216; +#X obj 277 215 +~; +#X obj 319 215 +~; +#X obj 67 276 outlet~; +#X obj 137 276 outlet~; +#X obj 238 334 +~; +#X obj 347 335 +~; +#X obj 280 334 -~; +#X obj 387 334 -~; +#X obj 237 390 +~; +#X obj 281 391 +~; +#X obj 325 392 -~; +#X obj 364 392 -~; +#X obj 324 474 *~ 0; +#X obj 282 473 *~ 0; +#X obj 237 472 *~ 0; +#X obj 365 475 *~ 0; +#X obj 632 365 inlet; +#X obj 632 437 / 200; +#X obj 632 389 min 100; +#X obj 632 412 max 0; +#X obj 238 583 delwrite~ loop-del1 60; +#X obj 283 561 delwrite~ loop-del2 71.9345; +#X obj 364 515 delwrite~ loop-del4 95.945; +#X obj 298 154 delread~ loop-del1 60; +#X obj 340 179 delread~ loop-del2 71.9345; +#X obj 408 233 delread~ loop-del4 95.945; +#X obj 386 208 delread~ loop-del3 86.7545; +#X obj 325 538 delwrite~ loop-del3 86.7545; +#X obj 13 67 reverb-echo echo-del2 8.45346; +#X obj 13 91 reverb-echo echo-del3 13.4367; +#X obj 13 115 reverb-echo echo-del4 21.5463; +#X obj 13 139 reverb-echo echo-del5 34.3876; +#X obj 13 163 reverb-echo echo-del6 55.5437; +#X text 286 42 "early echo" generators \, which also increase echo +density. Open one to see what they do.; +#X text 300 115 Get the outputs of the recirculating delays. Add the +inputs to two of them.; +#X text 420 313 Do a power-conserving mix of them in pairs. First combine +(1 \, 2) and (3 \, 4)...; +#X text 402 385 ...then (1 \, 3) and (2 \, 4); +#X text 446 469 The two mixing stages have a combined gain of 2 \, +so the recirculation gain is limited to 0.5.; +#X text 586 542 Put the signals back into the; +#X text 584 557 recirculating delays.; +#X text 29 296 Tap outputs from here.; +#X text 708 381 0 to 100 to control reverb; +#X text 719 396 time.; +#X text 691 364 feedback gain on a scale of; +#X connect 0 0 1 0; +#X connect 1 0 30 0; +#X connect 1 1 30 1; +#X connect 2 0 4 0; +#X connect 2 0 6 0; +#X connect 2 0 8 0; +#X connect 3 0 5 0; +#X connect 3 0 6 1; +#X connect 3 0 8 1; +#X connect 6 0 10 0; +#X connect 6 0 12 0; +#X connect 7 0 12 1; +#X connect 7 0 10 1; +#X connect 8 0 11 0; +#X connect 8 0 13 0; +#X connect 9 0 11 1; +#X connect 9 0 13 1; +#X connect 10 0 16 0; +#X connect 11 0 15 0; +#X connect 12 0 14 0; +#X connect 13 0 17 0; +#X connect 14 0 29 0; +#X connect 15 0 23 0; +#X connect 16 0 22 0; +#X connect 17 0 24 0; +#X connect 18 0 20 0; +#X connect 19 0 17 1; +#X connect 19 0 16 1; +#X connect 19 0 15 1; +#X connect 19 0 14 1; +#X connect 20 0 21 0; +#X connect 21 0 19 0; +#X connect 25 0 2 1; +#X connect 26 0 3 1; +#X connect 27 0 7 1; +#X connect 27 0 9 1; +#X connect 28 0 7 0; +#X connect 28 0 9 0; +#X connect 30 0 31 0; +#X connect 30 1 31 1; +#X connect 31 0 32 0; +#X connect 31 1 32 1; +#X connect 32 0 33 0; +#X connect 32 1 33 1; +#X connect 33 0 34 0; +#X connect 33 1 34 1; +#X connect 34 0 2 0; +#X connect 34 1 3 0; +#X restore 58 179 pd reverb; +#X floatatom 134 155 0 0 100 0 - - -; +#X text 169 155 <-- feedback (100 maximum); +#X obj 38 206 output~; +#X text 342 317 updated for Pd version 0.37-1; +#X text 149 180 <-- open to see how it works; +#X text 34 269 Many improvements are possible. Much better reverberators +can be found in the "extras" library.; +#X text 29 30 Here is a simple recirculating reverberator. "Feedback" +should be between 0 and 100 - if 100 \, the reverberation lasts forever. +; +#X connect 0 0 4 0; +#X connect 0 0 7 0; +#X connect 2 0 0 0; +#X connect 4 0 7 0; +#X connect 4 1 7 1; +#X connect 5 0 4 1; diff --git a/desiredata/doc/3.audio.examples/G09.pitchshift.pd b/desiredata/doc/3.audio.examples/G09.pitchshift.pd new file mode 100644 index 00000000..7687dc66 --- /dev/null +++ b/desiredata/doc/3.audio.examples/G09.pitchshift.pd @@ -0,0 +1,162 @@ +#N canvas 93 36 964 554 12; +#X floatatom 19 87 0 0 0 0 - - -; +#X obj 82 358 *~; +#X obj 205 295 line~; +#X floatatom 237 112 0 0 0 0 - - -; +#X text 68 9 PITCH SHIFTER; +#X obj 205 269 pack 0 200; +#X obj 237 86 r window; +#X obj 19 61 r transpose; +#X obj 19 143 exp; +#X floatatom 19 169 6 0 0 0 - - -; +#X obj 19 259 /; +#X obj 146 189 * 0.001; +#X obj 314 365 line~; +#X obj 314 340 pack 0 200; +#X floatatom 314 289 0 0 0 0 - - -; +#X obj 314 263 r delay; +#X obj 82 384 +~; +#X obj 19 410 cos~; +#X obj 19 437 *~; +#X obj 19 466 +~; +#X obj 106 317 wrap~; +#X obj 251 360 *~; +#X obj 251 393 +~; +#X obj 188 420 cos~; +#X obj 188 447 *~; +#X msg 492 56 \; transpose 0 \; window 100 \; delay 0; +#X obj 492 30 loadbang; +#X obj 146 216 t b f; +#X floatatom 19 285 6 0 0 0 - - -; +#X obj 106 290 +~ 0.5; +#X obj 19 358 -~ 0.5; +#X obj 19 384 *~ 0.5; +#X obj 188 359 -~ 0.5; +#X obj 188 392 *~ 0.5; +#X obj 19 196 - 1; +#X obj 19 117 * 0.05776; +#X obj 19 222 * -1; +#X text 53 86 <-- transposition; +#X text 96 99 (halftones); +#X text 82 163 speed; +#X text 81 177 change; +#X text 281 111 <--window (msec); +#X text 54 252 tape head; +#N canvas 0 0 612 637 test-input 0; +#N canvas 0 0 450 300 graph1 0; +#X array array1 155948 float 0; +#X coords 0 1 155947 -1 200 150 1; +#X restore 150 141 graph; +#X obj 139 518 tabread4~ array1; +#X obj 139 333 r totsamps; +#X obj 139 413 /; +#X obj 139 465 *~ 0; +#X obj 139 439 phasor~ 0; +#X obj 139 492 +~ 1; +#X msg 139 386 44100; +#X obj 139 360 t b f; +#X obj 182 469 r totsamps; +#X text 153 538 sample loop for; +#X text 153 555 test signal; +#X obj 162 30 loadbang; +#X obj 139 590 outlet~; +#X obj 393 169 r readfile; +#X obj 393 199 symbol; +#X msg 392 228 read -resize \$1 array1; +#X obj 392 256 soundfiler; +#X obj 392 284 s totsamps; +#X msg 161 64 \; readfile ../sound/bell.aiff; +#X connect 1 0 13 0; +#X connect 2 0 8 0; +#X connect 3 0 5 0; +#X connect 4 0 6 0; +#X connect 5 0 4 0; +#X connect 6 0 1 0; +#X connect 7 0 3 0; +#X connect 8 0 7 0; +#X connect 8 1 3 1; +#X connect 9 0 4 1; +#X connect 12 0 19 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 17 0 18 0; +#X restore 264 11 pd test-input; +#X text 425 153 This is a classic rotating-tape-head style pitch shifter +using the vd~ variable delay object. Ther are two moving tape heads +\, each of which is loudest at the middle of its trajectory \, and +enveloped out at the moment it has to jump back (or forward) to start +another scratch. Most of the brain work is in computing how fast the +tape heads have to move to get the desired transposition.; +#X text 425 272 The "window size" is the total trajectory of the read +points in the delay line \, in milliseconds. The delay times are controlled +by a phasor~ object. The second delay time \, 180 degrees out of phase +from the first one \, is computed using the "wrap" object.; +#X text 423 362 The "window size" is the total trajectory of the read +points in the delay line \, in milliseconds. The delay times are controlled +by a phasor~ object. The second delay time \, 180 degrees out of phase +from the first one \, is computed using the "wrap" object.; +#X text 422 454 The cos~ objects compute the fadein and fadeout of +the two delay line outputs. They each traverse the positive half of +the cosine waveform (phase -0.25 to +0.25) over the time the phase +goes from one end to the other.; +#X obj 19 493 output~; +#X obj 19 316 phasor~; +#X text 689 534 updated for Pd version 0.37-1; +#X obj 314 316 max 1.5; +#X text 317 222 delay; +#X text 314 240 (msec); +#X obj 237 139 max 1; +#X text 55 265 rotation freq; +#X obj 82 410 vd~ G09-del; +#X obj 251 422 vd~ G09-del; +#X obj 264 42 delwrite~ G09-del 5000; +#X connect 0 0 35 0; +#X connect 1 0 16 0; +#X connect 2 0 1 1; +#X connect 2 0 21 1; +#X connect 3 0 54 0; +#X connect 5 0 2 0; +#X connect 6 0 3 0; +#X connect 7 0 0 0; +#X connect 8 0 9 0; +#X connect 9 0 34 0; +#X connect 10 0 28 0; +#X connect 11 0 27 0; +#X connect 12 0 16 1; +#X connect 12 0 22 1; +#X connect 13 0 12 0; +#X connect 14 0 51 0; +#X connect 15 0 14 0; +#X connect 16 0 56 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 48 0; +#X connect 19 0 48 1; +#X connect 20 0 21 0; +#X connect 20 0 32 0; +#X connect 21 0 22 0; +#X connect 22 0 57 0; +#X connect 23 0 24 0; +#X connect 24 0 19 1; +#X connect 26 0 25 0; +#X connect 27 0 10 0; +#X connect 27 1 10 1; +#X connect 28 0 49 0; +#X connect 29 0 20 0; +#X connect 30 0 31 0; +#X connect 31 0 17 0; +#X connect 32 0 33 0; +#X connect 33 0 23 0; +#X connect 34 0 36 0; +#X connect 35 0 8 0; +#X connect 36 0 10 0; +#X connect 43 0 58 0; +#X connect 49 0 1 0; +#X connect 49 0 30 0; +#X connect 49 0 29 0; +#X connect 51 0 13 0; +#X connect 54 0 11 0; +#X connect 54 0 5 0; +#X connect 56 0 18 1; +#X connect 57 0 24 1; diff --git a/desiredata/doc/3.audio.examples/H01.low-pass.pd b/desiredata/doc/3.audio.examples/H01.low-pass.pd new file mode 100644 index 00000000..81a713b8 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H01.low-pass.pd @@ -0,0 +1,185 @@ +#N canvas 97 42 601 612 12; +#X obj 72 411 mtof; +#X floatatom 72 388 5 0 0 0 - #0-pit -; +#X obj 41 542 output~; +#X obj 41 457 lop~; +#X obj 42 354 noise~; +#X text 124 387 <-- cutoff (pitch units); +#X text 135 434 <-- cutoff (Hertz); +#X floatatom 72 436 5 0 0 0 - - -; +#X text 348 582 updated for Pd version 0.39; +#X text 88 459 low-pass filter; +#X obj 130 535 tabwrite~ H01-graph; +#X obj 130 510 metro 250; +#X obj 130 490 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 148 487 graphing on/off; +#N canvas 0 0 450 300 graph2 0; +#X array H01-graph 882 float 3; +#A 0 -0.107788 -0.0695636 -0.0991016 -0.104581 -0.0683972 -0.0547128 +-0.0857414 -0.0731684 -0.0892636 -0.115914 -0.0935128 -0.0572466 -0.0387586 +-0.0429956 -0.03826 -0.0628797 -0.0383263 -0.0720175 -0.0923909 -0.0707558 +-0.0792164 -0.102187 -0.0888189 -0.119908 -0.083863 -0.0677126 -0.0554309 +-0.044719 -0.0248649 -0.0482707 -0.0692472 -0.103905 -0.101273 -0.117807 +-0.100956 -0.0905779 -0.0676211 -0.0299763 -0.0190183 0.00623894 -0.000664497 +0.0291359 0.0310484 0.0412564 0.0375735 0.0676889 0.0348717 0.00747152 +0.0416666 0.0529021 0.0418099 0.0405759 0.0303367 -0.00428127 0.0140712 +-0.0111072 0.0243947 -0.0104408 -0.0142505 -0.0287291 -0.0119835 0.00876151 +-0.0281321 -0.0325635 -0.0618363 -0.0379124 -0.0447592 -0.0507954 -0.0403398 +-0.0277581 -0.00226383 0.000989536 -0.0323217 -0.0164512 -0.0156964 +-0.0436928 -0.045223 -0.0706908 -0.0382667 -0.00177098 0.0290649 0.0149072 +0.0483574 0.0453535 0.0100187 -0.00270613 0.0298578 0.0470317 0.0301263 +0.0478455 0.0134859 0.0488288 0.0766369 0.0916206 0.11869 0.0944563 +0.102745 0.086215 0.0845207 0.0662227 0.0609466 0.0952278 0.0771313 +0.103073 0.101067 0.0915918 0.100309 0.0651311 0.0553397 0.0623315 +0.050316 0.0844677 0.0996978 0.0715106 0.084598 0.0947672 0.115172 +0.134093 0.118854 0.106047 0.120693 0.0961966 0.0571329 0.0854602 0.084371 +0.0538877 0.0744577 0.0563968 0.0753962 0.0748331 0.0605493 0.0795627 +0.0600295 0.0432455 0.0582205 0.0920203 0.0640656 0.0253824 -0.008527 +-0.0243436 -0.0588714 -0.0239946 0.00784105 0.0119875 0.0161209 0.00780566 +0.00216991 -0.0288565 -0.0521791 -0.0658445 -0.0868191 -0.0673713 -0.0889776 +-0.0546807 -0.0256506 -0.0375237 -0.0118962 -0.0477717 -0.0384217 -0.0385089 +-0.0696784 -0.098759 -0.121121 -0.127174 -0.157189 -0.121443 -0.0989412 +-0.0615983 -0.0711882 -0.0760313 -0.0566161 -0.056104 -0.0875121 -0.0734271 +-0.037525 -0.0681574 -0.0689616 -0.0900591 -0.0574559 -0.04051 -0.0333117 +-0.0260634 -0.0202531 -0.0302473 -0.0346772 -0.052936 -0.0798849 -0.0780231 +-0.111591 -0.112165 -0.129226 -0.11253 -0.138539 -0.122338 -0.138645 +-0.132606 -0.112523 -0.139122 -0.169654 -0.132431 -0.136376 -0.130106 +-0.110972 -0.113595 -0.131592 -0.141568 -0.108734 -0.075847 -0.0711363 +-0.0525791 -0.0216604 -0.0196736 -0.0186081 -0.0186695 -0.00602199 +0.0257979 0.0132076 0.0225488 0.00748564 0.0165994 0.00166184 -0.00116405 +0.0028765 0.01807 0.0157059 0.0473739 0.0708991 0.0862786 0.0650413 +0.038138 0.015989 0.0521245 0.0605891 0.0431341 0.00429233 0.028138 +0.00477928 0.00181729 -0.028107 -0.0360127 -0.00712468 -0.0312668 -0.0523252 +-0.0479352 -0.0513783 -0.0250772 -0.0142933 -0.047864 -0.0252179 -0.0219197 +0.0153334 0.0518051 0.082624 0.0535017 0.0535462 0.0506847 0.0717359 +0.0774448 0.0591473 0.0602611 0.0708395 0.0654832 0.0261038 0.0107588 +0.00770543 0.0203729 0.033363 0.029335 0.0483838 0.0607855 0.0245724 +0.0550305 0.0593506 0.0753188 0.081294 0.096557 0.117197 0.105438 0.111979 +0.0953627 0.0978146 0.084516 0.0952146 0.117297 0.0851524 0.0863281 +0.049295 0.0757788 0.0866482 0.0738062 0.0984422 0.0885168 0.116305 +0.0949217 0.0562471 0.0898681 0.0643755 0.0681146 0.0863296 0.0516047 +0.0595782 0.0605373 0.0295923 0.0568693 0.0749412 0.0804035 0.108818 +0.0786603 0.0506026 0.0129134 0.0381891 0.0305477 0.0364073 0.0411764 +0.0721042 0.0629199 0.03039 0.0474877 0.0100055 0.0283331 0.0424028 +0.0700528 0.0932837 0.116089 0.146493 0.171112 0.198628 0.1636 0.135356 +0.164266 0.144544 0.132615 0.128501 0.129495 0.141165 0.145633 0.141941 +0.170706 0.193988 0.204823 0.228202 0.219125 0.204054 0.227319 0.231326 +0.230171 0.204664 0.230591 0.189557 0.202459 0.184563 0.212896 0.202201 +0.221436 0.214395 0.195221 0.209657 0.214416 0.202139 0.222888 0.237836 +0.245874 0.22457 0.194835 0.159835 0.142986 0.120742 0.119331 0.147719 +0.17693 0.157802 0.153323 0.151851 0.155677 0.148854 0.139333 0.145233 +0.166518 0.140436 0.150237 0.126701 0.135908 0.166416 0.15391 0.152768 +0.181048 0.149057 0.136385 0.1213 0.144767 0.113465 0.0980506 0.0852771 +0.106682 0.130461 0.10524 0.0793894 0.07123 0.0447812 0.0792345 0.0479509 +0.0700904 0.0308896 0.0279068 0.0312166 0.010152 -0.00943106 0.0010242 +-0.00752998 0.0143407 0.0027725 0.033508 0.0621824 0.0643498 0.0827609 +0.113321 0.11629 0.139206 0.101752 0.0988734 0.107286 0.128068 0.14154 +0.148363 0.124029 0.0968996 0.127442 0.100244 0.0940884 0.0805303 0.103963 +0.0874826 0.0588413 0.0720198 0.0853478 0.0902383 0.0788942 0.0475014 +0.0707652 0.0384297 0.0538394 0.0763012 0.0483987 0.0713554 0.0473328 +0.0415702 0.0532321 0.0475937 0.0208587 0.0030926 0.00438177 -0.0204396 +-0.00825569 0.0180096 0.0456204 0.0765333 0.0938012 0.110089 0.115665 +0.13934 0.144259 0.155082 0.164549 0.192087 0.159342 0.176142 0.149727 +0.174968 0.170935 0.134127 0.123663 0.11653 0.113447 0.102327 0.0764594 +0.0887578 0.079355 0.0692447 0.0727442 0.0913222 0.115159 0.137636 +0.154978 0.176904 0.156243 0.13039 0.104399 0.0853428 0.0666318 0.0615526 +0.0907602 0.0502914 0.0434091 0.00788628 -0.0191843 -0.0395026 -0.0596938 +-0.0723036 -0.0806951 -0.0861116 -0.0864571 -0.0488058 -0.0711986 -0.0797166 +-0.0688114 -0.0318625 -0.0673463 -0.0444878 -0.0250519 -0.024727 -0.0310858 +-0.00561093 -0.0207001 -0.0340927 -0.0551734 -0.0817888 -0.0705976 +-0.0835859 -0.0866976 -0.0565736 -0.0797509 -0.0968247 -0.0655236 -0.0760219 +-0.0670947 -0.0342146 -0.0274503 -0.0263804 -0.0317333 -0.039663 -0.0119034 +-0.046866 -0.0359958 -0.0318836 -0.0499625 -0.0574402 -0.029796 0.0028338 +-0.0262898 -0.041154 -0.0473188 -0.0255545 -0.058172 -0.0601881 -0.0914168 +-0.102286 -0.135733 -0.13837 -0.13175 -0.139201 -0.160906 -0.136196 +-0.11435 -0.073056 -0.0694626 -0.0599314 -0.0349573 -0.00661064 -0.0128436 +-0.0368892 -0.00783622 -0.0285016 -0.0257515 -0.000656539 0.000578916 +0.00997914 0.0309158 0.00448781 -0.0276183 -0.00975017 -0.0431335 -0.0420573 +-0.0318631 -0.0461821 -0.0493957 -0.0468264 -0.0278063 -0.0239267 -0.0240269 +-0.0446192 -0.0791041 -0.0634024 -0.0949552 -0.122094 -0.130089 -0.110653 +-0.07832 -0.0717672 -0.0448359 -0.0454325 -0.075843 -0.0655465 -0.0499949 +-0.0848139 -0.107986 -0.0831531 -0.0721088 -0.103859 -0.0650817 -0.0753315 +-0.0991717 -0.072808 -0.0810555 -0.0679525 -0.0566175 -0.0827188 -0.0822597 +-0.0497494 -0.0154982 -0.00131288 0.0318942 -0.00235687 -0.0344436 +-0.0249813 -0.00212817 0.0348011 0.0207401 0.00218581 -0.0346692 -0.000621661 +-0.0106329 -0.0261485 0.00856931 -0.0171581 0.0152674 0.0466481 0.0456615 +0.0728295 0.0601254 0.0639082 0.0949887 0.09166 0.118261 0.120631 0.120818 +0.150657 0.154468 0.134964 0.0965974 0.0907992 0.069314 0.0611587 0.0707784 +0.0627047 0.0717109 0.0659585 0.0296832 0.0352495 0.00141861 0.010894 +0.0426848 0.0419218 0.0141017 0.0413311 0.037778 0.0154291 0.0312945 +0.00510286 -0.00271059 -0.0291284 -0.045397 -0.0762688 -0.0445058 -0.057707 +-0.0779557 -0.0735523 -0.0922772 -0.0727918 -0.0429784 -0.00911861 +-0.0379944 -0.0658339 -0.0784915 -0.0792981 -0.0453014 -0.0197867 -0.00123178 +0.000799734 -0.00204599 0.0349492 0.0623098 0.0770006 0.0882193 0.0484045 +0.0760622 0.0945022 0.0567368 0.0286078 0.00189384 0.0315546 0.0374527 +0.0395075 0.0591211 0.0415475 0.0732162 0.0588977 0.0850963 0.0465228 +0.0698241 0.0407602 0.0431113 0.0065717 0.00936337 0.0222241 0.0327647 +0.0270807 -0.0111891 0.0063837 -0.0086459 -0.0364951 -0.0200965 -0.0318325 +-0.0576028 -0.0557316 -0.0675803 -0.0887475 -0.0980934 -0.0881446 -0.117229 +-0.125822 -0.13378 -0.142539 -0.108397 -0.13497 -0.138471 -0.164523 +-0.174647 -0.18636 -0.157472 -0.148646 -0.108121 -0.104372 -0.0695942 +-0.0542974 -0.0701001 -0.100999 -0.0658883 -0.0947834 -0.113894 -0.0981114 +-0.108426 -0.100378 -0.102227 -0.0818266 -0.103135 -0.0720306 -0.0440222 +-0.0219618 -0.0453231 -0.019184 0.0157131 -0.013545 -0.0248696 -0.0166098 +-0.0489199 -0.0269982 -0.0224125 -0.0413912 -0.0728588 -0.0586017 -0.0349842 +-0.0338855 -0.0588961 -0.0928709 -0.11376 -0.0790886 -0.100094 -0.126293 +-0.10676 -0.136216 -0.109541 -0.136053 -0.112742 -0.136117 -0.146529 +-0.156998 -0.163319 -0.137112 -0.146644 -0.138866 -0.159482 -0.185248 +-0.206002 -0.16925 -0.178855 -0.140085 -0.105426 -0.095303 -0.0736452 +-0.066341 -0.0689736 -0.0914969 -0.0725721 -0.0824288 -0.049098 -0.0139474 +-0.00957104 0.0134051 -0.0091349 0.00555033 0.0117049 -0.0230348 -0.0545547 +-0.050228 -0.0431037 -0.0668625 -0.029803 -0.0551605 -0.0175891 -0.0435808 +-0.0240586 -0.0455508 -0.00746894 0.0213663 0.0569028 0.0190693 0.000740271 +0.000412262 -0.0233437 -0.0205415 -0.0240432 0.00448952 0.00916993 +0.00155166 -0.00567939 -0.00725616 0.0138388 0.0162082 -0.00138934 +-0.0077004 -0.0261998 -0.0100701 -0.0337348 -0.0154704 -0.0291058 -0.0299364 +-0.00924212 0.0247502 -0.0060416 -0.0118114 -0.0158459 0.0158545 -0.00827235 +-0.00602365 -0.0132283 0.0105079 0.0432025 0.0698796 0.0576105 0.0538253 +0.066991 0.0715161 0.0405482 0.0741857 0.0802094 0.113967 0.126283 +0.111464 0.0926309 0.0545991 0.0568134 0.0770984 0.0533353 0.0142316 +-0.0181225 0.00490977 0.0275315 0.0202685 0.00414232 0.0273551 0.0158572 +-0.00476758 -0.0362654 -0.0701252 -0.0547324 -0.0708724 -0.0970369 +-0.099428 -0.102544 -0.0736354 -0.0556618 -0.0863601; +#X coords 0 1 882 -1 200 140 1; +#X restore 384 386 graph; +#X text 408 528 --- 0.02 sec ---; +#X text 28 30 This and the following patches show how to use filters +in Pd \, starting with the simplest one: the one-pole low-pass filter. +Here we test it with an input of white noise. The lop~ object does +the filtering. Its left inlet takes an audio signal to be filtered +\, and its right inlet takes messages to set its cutoff frequency in +Hertz.; +#X text 26 129 The lop~ object is normalized to pass DC (the lowest +frequency) with a gain of one. Higher frequencies are progressively +more and more attenuated. The lower the cutoff frequency \, the lower +the total power of the filtered noise. If you graph the output you'll +see that the waveform gets smoother (and smaller overall) as the cutoff +frequency is lowered.; +#X text 28 243 At the cutoff frequency the gain is about -3 dB \, and +above that the gain drops a further 6 dB per octave. (Sometimes one +uses the word "rolloff" instead of "cutoff" to emphasize the gradual +way the gain drops off with frequency.); +#X text 108 353 white noise \, test signal; +#X text 185 6 ONE-POLE LOW-PASS FILTER; +#N canvas 0 0 450 300 loadbang 0; +#X obj 85 16 loadbang; +#X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 85 59 f \$0; +#X text 18 179 boxes.; +#X text 16 161 This subpatch loads initial values in number; +#X msg 84 83 \; \$1-pit 60; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 129 582 pd loadbang; +#X connect 0 0 7 0; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 3 0 2 1; +#X connect 3 0 10 0; +#X connect 4 0 3 0; +#X connect 7 0 3 1; +#X connect 11 0 10 0; +#X connect 12 0 11 0; diff --git a/desiredata/doc/3.audio.examples/H02.high-pass.pd b/desiredata/doc/3.audio.examples/H02.high-pass.pd new file mode 100644 index 00000000..3342c64e --- /dev/null +++ b/desiredata/doc/3.audio.examples/H02.high-pass.pd @@ -0,0 +1,173 @@ +#N canvas 29 10 607 643 12; +#X obj 38 563 output~; +#X text 336 611 updated for Pd version 0.39; +#X obj 126 544 metro 250; +#X obj 126 524 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 144 521 graphing on/off; +#N canvas 0 0 450 300 graph2 0; +#X array H02-graph 882 float 3; +#A 0 0.86084 0.876465 0.891113 0.904785 0.917725 0.929688 0.940918 +0.950928 0.960205 0.968506 0.97583 0.982178 0.987793 0.992188 0.995605 +0.998047 0.999512 1 0.999756 0.998291 0.99585 0.992432 0.988037 0.982666 +0.976318 0.968994 0.960938 0.95166 0.94165 0.930664 0.918701 0.905762 +0.89209 0.877441 0.862061 0.845703 0.828613 0.810547 0.791748 0.772217 +0.751953 0.730957 0.709229 0.686768 0.663574 0.639893 0.615479 0.590576 +0.564941 0.538818 0.511963 0.484863 0.457275 0.429199 0.400635 0.371826 +0.342529 0.312744 0.282959 0.252686 0.222168 0.19165 0.160645 0.129639 +0.0986328 0.0673828 0.0358887 0.00463867 -0.0266113 -0.0581055 -0.0893555 +-0.120361 -0.151611 -0.182373 -0.213135 -0.243652 -0.273926 -0.303955 +-0.33374 -0.363037 -0.39209 -0.420654 -0.448975 -0.476807 -0.50415 +-0.530762 -0.557129 -0.583008 -0.608154 -0.632568 -0.656738 -0.679932 +-0.702637 -0.724609 -0.74585 -0.766357 -0.786133 -0.805176 -0.823242 +-0.840576 -0.857178 -0.873047 -0.887939 -0.901855 -0.915039 -0.927246 +-0.938477 -0.94873 -0.958252 -0.966797 -0.974365 -0.980957 -0.986572 +-0.991211 -0.994873 -0.997559 -0.999268 -1 -0.999756 -0.998535 -0.996338 +-0.993164 -0.989014 -0.983887 -0.977783 -0.970947 -0.962891 -0.953857 +-0.944092 -0.933105 -0.921387 -0.908936 -0.895264 -0.880859 -0.865479 +-0.849365 -0.83252 -0.814697 -0.796143 -0.776855 -0.756592 -0.73584 +-0.714111 -0.691895 -0.668945 -0.645264 -0.621094 -0.596191 -0.570801 +-0.544678 -0.518066 -0.491211 -0.463623 -0.435547 -0.407227 -0.378418 +-0.349121 -0.31958 -0.289795 -0.259521 -0.229248 -0.198486 -0.167725 +-0.136719 -0.105713 -0.0744629 -0.0432129 -0.0117188 0.0195312 0.0507812 +0.0822754 0.113281 0.144531 0.175293 0.206055 0.236816 0.26709 0.297119 +0.326904 0.356445 0.385498 0.414307 0.442627 0.470459 0.497803 0.524902 +0.55127 0.577148 0.602539 0.627197 0.651367 0.674805 0.69751 0.719727 +0.740967 0.761719 0.781738 0.800781 0.819336 0.836914 0.853516 0.869385 +0.884521 0.898682 0.912109 0.924561 0.936035 0.946533 0.956299 0.964844 +0.972656 0.979492 0.985352 0.990234 0.994141 0.99707 0.999023 1 1 0.999023 +0.99707 0.994141 0.990234 0.985352 0.979248 0.972412 0.964844 0.956055 +0.946289 0.935791 0.924316 0.911865 0.898438 0.884277 0.869141 0.853271 +0.836426 0.818848 0.800537 0.78125 0.76123 0.740723 0.719238 0.697021 +0.674316 0.650879 0.626709 0.601807 0.57666 0.550781 0.52417 0.497314 +0.469971 0.441895 0.413574 0.38501 0.355713 0.326416 0.296631 0.266357 +0.236084 0.205566 0.174805 0.143799 0.112793 0.081543 0.050293 0.0187988 +-0.0124512 -0.0437012 -0.0749512 -0.106201 -0.137451 -0.168457 -0.199219 +-0.229736 -0.260254 -0.290283 -0.320068 -0.349609 -0.378906 -0.407715 +-0.436035 -0.464111 -0.491699 -0.518799 -0.545166 -0.571289 -0.59668 +-0.621582 -0.645752 -0.669434 -0.692383 -0.7146 -0.736328 -0.75708 +-0.7771 -0.796631 -0.815186 -0.832764 -0.849854 -0.865967 -0.881104 +-0.895508 -0.90918 -0.921631 -0.93335 -0.944092 -0.954102 -0.962891 +-0.970947 -0.978027 -0.984131 -0.989258 -0.993408 -0.996582 -0.998779 +-0.999756 -1 -0.999268 -0.997559 -0.994873 -0.991211 -0.986328 -0.980713 +-0.974121 -0.966553 -0.958008 -0.94873 -0.938232 -0.927002 -0.914551 +-0.901611 -0.887451 -0.872559 -0.856934 -0.840332 -0.822998 -0.804688 +-0.785645 -0.765869 -0.745361 -0.724121 -0.702148 -0.679443 -0.65625 +-0.63208 -0.607666 -0.582275 -0.556641 -0.530273 -0.503418 -0.476074 +-0.448242 -0.420166 -0.391357 -0.362305 -0.333008 -0.303223 -0.273193 +-0.24292 -0.212402 -0.181885 -0.150879 -0.119873 -0.088623 -0.057373 +-0.026123 0.00537109 0.0366211 0.0678711 0.0991211 0.130371 0.161377 +0.192139 0.2229 0.253418 0.283447 0.313477 0.343018 0.372314 0.401123 +0.429688 0.457764 0.485352 0.512695 0.539307 0.56543 0.591064 0.615967 +0.640381 0.664062 0.687256 0.709717 0.731445 0.752441 0.772705 0.792236 +0.811035 0.828857 0.845947 0.862305 0.877686 0.892334 0.906006 0.918945 +0.930908 0.941895 0.951904 0.961182 0.969238 0.976562 0.98291 0.988037 +0.992432 0.99585 0.998291 0.999756 1 0.999512 0.998047 0.995605 0.991943 +0.987549 0.982178 0.97583 0.968506 0.960205 0.950928 0.940674 0.929443 +0.91748 0.904541 0.890869 0.876221 0.860596 0.844238 0.826904 0.808838 +0.790039 0.770508 0.75 0.729004 0.707275 0.684814 0.661621 0.637695 +0.613281 0.588135 0.5625 0.536377 0.509521 0.482422 0.45459 0.426514 +0.397949 0.369141 0.339844 0.310059 0.280029 0.25 0.219482 0.188721 +0.157959 0.126953 0.0957031 0.0644531 0.0332031 0.00170898 -0.029541 +-0.060791 -0.092041 -0.123291 -0.154297 -0.185303 -0.21582 -0.246338 +-0.276611 -0.306641 -0.336426 -0.365723 -0.394775 -0.42334 -0.451416 +-0.479248 -0.506592 -0.533203 -0.55957 -0.585205 -0.610352 -0.63501 +-0.658691 -0.682129 -0.70459 -0.726562 -0.747803 -0.768066 -0.787842 +-0.806885 -0.824951 -0.842285 -0.858643 -0.874268 -0.88916 -0.903076 +-0.916016 -0.928223 -0.939453 -0.949707 -0.958984 -0.967529 -0.974854 +-0.981445 -0.987061 -0.991455 -0.995117 -0.997803 -0.999512 -1 -0.999756 +-0.998535 -0.996094 -0.99292 -0.98877 -0.983398 -0.977295 -0.970215 +-0.962158 -0.953125 -0.943115 -0.932129 -0.92041 -0.907715 -0.894043 +-0.879639 -0.864258 -0.8479 -0.831055 -0.812988 -0.794434 -0.774902 +-0.754883 -0.733887 -0.712158 -0.689941 -0.666748 -0.643066 -0.618896 +-0.593994 -0.568359 -0.542236 -0.515625 -0.488525 -0.460938 -0.433105 +-0.404541 -0.375732 -0.346436 -0.316895 -0.286865 -0.256836 -0.226318 +-0.195801 -0.165039 -0.134033 -0.102783 -0.0715332 -0.0402832 -0.0090332 +0.0224609 0.0537109 0.0849609 0.116211 0.147217 0.178223 0.208984 0.239502 +0.269775 0.299805 0.32959 0.359131 0.388184 0.416748 0.445068 0.4729 +0.500244 0.527344 0.553711 0.579346 0.604736 0.629395 0.65332 0.676758 +0.699463 0.72168 0.74292 0.763672 0.783447 0.80249 0.820801 0.838379 +0.85498 0.87085 0.885742 0.899902 0.913086 0.925537 0.937012 0.94751 +0.957031 0.965576 0.973389 0.97998 0.98584 0.990723 0.994385 0.997314 +0.999023 1 1 0.998779 0.996826 0.993652 0.989746 0.984619 0.97876 0.971924 +0.963867 0.955078 0.945312 0.934814 0.923096 0.910645 0.897217 0.882812 +0.867676 0.851807 0.834961 0.817139 0.798828 0.779541 0.759521 0.73877 +0.717285 0.695068 0.672119 0.648682 0.624512 0.599609 0.574219 0.54834 +0.521729 0.494873 0.467285 0.439453 0.411133 0.382324 0.353027 0.32373 +0.293701 0.263672 0.233398 0.202637 0.171875 0.140869 0.109863 0.0786133 +0.0473633 0.0161133 -0.0153809 -0.0466309 -0.0778809 -0.109131 -0.140137 +-0.171143 -0.201904 -0.232666 -0.262939 -0.292969 -0.322754 -0.352295 +-0.381592 -0.4104 -0.438721 -0.466553 -0.494141 -0.52124 -0.547607 +-0.57373 -0.599121 -0.623779 -0.647949 -0.671631 -0.694336 -0.716797 +-0.738281 -0.759033 -0.779053 -0.79834 -0.81665 -0.834473 -0.851318 +-0.867432 -0.882568 -0.896729 -0.910156 -0.922852 -0.934326 -0.945068 +-0.954834 -0.963867 -0.97168 -0.978516 -0.984619 -0.989502 -0.993652 +-0.996826 -0.998779 -1 -1 -0.999268 -0.997314 -0.994629 -0.990723 -0.98584 +-0.980225 -0.973633 -0.96582 -0.957275 -0.947754 -0.937256 -0.925781 +-0.913574 -0.900391 -0.88623 -0.871338 -0.855469 -0.838867 -0.821289 +-0.802979 -0.783936 -0.76416 -0.743408 -0.722168 -0.700195 -0.67749 +-0.654053 -0.629883 -0.605225 -0.580078 -0.554199 -0.527832 -0.500977 +-0.473633 -0.445801 -0.41748 -0.388916 -0.359863 -0.330322 -0.300537 +-0.270508 -0.240234 -0.209717 -0.178955 -0.147949 -0.116943 -0.0856934 +-0.0544434 -0.0231934 0.00805664 0.0395508 0.0708008 0.102051 0.133057 +0.164062 0.195068 0.225586 0.256104 0.286133 0.316162 0.345703 0.375 +0.403809 0.432373 0.460449 0.488037 0.515137 0.541748 0.567871 0.593262 +0.618164 0.642578 0.66626 0.689209 0.71167 0.733398 0.754395 0.774414 +0.793945 0.812744 0.830566 0.847656 0.86377 0.87915 0.893555 0.907227 +0.919922 0.931885 0.942871 0.952881 0.961914 0.969971 0.977051 0.983398 +0.988525 0.99292 0.996094 0.998535 0.999756 1 0.999512 0.997803 0.995361 +0.991699 0.987061 0.981689 0.975098 0.967773 0.959229 0.949951 0.939697 +0.928467 0.916504 0.90332 0.889404 0.874756 0.859131 0.842529 0.825439 +0.807129 0.78833 0.768555 0.748291 0.727051 0.705078 0.682617 0.659424 +0.635498 0.611084 0.585938 0.560059 0.533936 0.50708 0.47998 0.452148 +0.424072 0.395508 0.366455 0.337158 0.307373 0.277344 0.24707 0.216553 +0.186035 0.155029 0.124023 0.0927734 0.0615234 0.0302734 -0.000976562 +-0.0324707 -0.0637207 -0.0949707 -0.125977 -0.157227 -0.187988 -0.21875 +-0.249268 -0.279297 -0.309326 -0.339111 -0.368408; +#X coords 0 1 882 -1 200 140 1; +#X restore 381 407 graph; +#X text 405 549 --- 0.02 sec ---; +#X text 24 31 Many synthesis algorithms and transformations can have +outputs with a zero-freqency component (commonly called DC for "direct +current"). These are inaudible and sometimes cause distortion in audio +output devices \, or when converting to fixed-point soundfile formats. +It is often desirable to filter an audio signal to remove its DC component. +; +#X text 23 147 The simplest way to do this is to use a one-pole low-pass +filter \, tuned to a low frequency such as 3 Hertz \, and to subtract +its output from the original. This difference is called a one-pole +\, one-zero high-pass filter \, and it is used so often that Pd provides +one in the "hip~" object.; +#X obj 38 354 +~ 1; +#X obj 37 491 hip~ 5; +#X text 100 491 high-pass filter; +#X floatatom 86 450 5 0 0 0 - - -; +#X msg 86 380 0; +#X text 122 329 sinusoidal test signal; +#X text 83 354 add "DC"; +#X text 124 380 zero for no filtering; +#X msg 86 403 3; +#X text 121 404 3 (or so) to remove DC; +#X text 126 427 higher freqencies affect; +#X text 166 443 the audible part of; +#X text 166 459 the signal as well.; +#X obj 38 329 osc~ 220; +#X msg 86 426 220; +#X text 23 229 The simplest way to do this is to use a one-pole low-pass +filter \, tuned to a low frequency such as 3 Hertz \, and to subtract +its output from the original. This difference is computed by a one-pole +\, one-zero high-pass filter. These are used so often that Pd provides +one in the "hip~" object.; +#X text 131 4 ONE-POLE \, ONE-ZERO HIGH-PASS FILTER; +#X obj 126 569 tabwrite~ H02-graph; +#X connect 2 0 26 0; +#X connect 3 0 2 0; +#X connect 9 0 10 0; +#X connect 10 0 0 0; +#X connect 10 0 0 1; +#X connect 10 0 26 0; +#X connect 12 0 10 1; +#X connect 13 0 12 0; +#X connect 17 0 12 0; +#X connect 22 0 9 0; +#X connect 23 0 12 0; diff --git a/desiredata/doc/3.audio.examples/H03.band-pass.pd b/desiredata/doc/3.audio.examples/H03.band-pass.pd new file mode 100644 index 00000000..976fee54 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H03.band-pass.pd @@ -0,0 +1,57 @@ +#N canvas 44 0 604 533 12; +#X obj 43 278 mtof; +#X floatatom 43 255 5 0 150 0 - #0-pit -; +#X obj 32 446 output~; +#X obj 32 225 noise~; +#X text 95 254 <-- cutoff (pitch units); +#X text 106 301 <-- cutoff (Hertz); +#X floatatom 43 303 5 0 0 0 - - -; +#X text 330 494 updated for Pd version 0.39; +#X obj 121 414 metro 250; +#X obj 121 394 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 139 391 graphing on/off; +#N canvas 0 0 450 300 graph2 0; +#X array H03-graph 882 float 2; +#X coords 0 1 882 -1 200 140 1; +#X restore 375 290 graph; +#X text 399 432 --- 0.02 sec ---; +#X text 98 224 white noise \, test signal; +#X obj 32 361 bp~; +#X text 73 363 band-pass filter; +#X obj 121 439 tabwrite~ H03-graph; +#X floatatom 54 331 5 0 1000 0 - #0-q -; +#X text 106 329 <-- q; +#N canvas 0 0 450 300 loadbang 0; +#X obj 85 16 loadbang; +#X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 85 59 f \$0; +#X text 18 179 boxes.; +#X text 16 161 This subpatch loads initial values in number; +#X msg 85 83 \; \$1-pit 72 \; \$1-q 1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 139 482 pd loadbang; +#X text 154 8 RESONANT (BAND-PASS) FILTER; +#X text 26 129 The two controls specify \, first \, the center frequency +\, and second \, the sharpness of the filter \, commonly called "q". +If you increase q to 10 or 20 \, you will see a drop in total signal +power \, and moreover \, you'll see and hear the resonant frequency +more clearly in the result.; +#X text 28 30 A simple resonant band-pass filter is provided in the +bp~ object. Resonant filters can be tuned to a specific "center frequency" +and then will pass that frequency while attenuating other frequencies +(the further from the center frequency \, the more attenuation). This +patch uses a white noise source to demonstrate bp~.; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 3 0 14 0; +#X connect 6 0 14 1; +#X connect 8 0 16 0; +#X connect 9 0 8 0; +#X connect 14 0 2 0; +#X connect 14 0 2 1; +#X connect 14 0 16 0; +#X connect 17 0 14 2; diff --git a/desiredata/doc/3.audio.examples/H04.filter.sweep.pd b/desiredata/doc/3.audio.examples/H04.filter.sweep.pd new file mode 100644 index 00000000..e4f3cf09 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H04.filter.sweep.pd @@ -0,0 +1,58 @@ +#N canvas 360 15 553 524 12; +#X floatatom 44 146 5 0 150 0 - #0-pitch -; +#X text 126 9 SWEEPING FILTERS; +#X obj 44 193 phasor~; +#X obj 59 351 +~; +#X floatatom 81 326 5 0 100 0 - #0-offset -; +#X floatatom 60 222 5 0 0 0 - #0-speed -; +#X floatatom 82 273 5 0 100 0 - #0-depth -; +#X floatatom 75 404 5 0 1000 0 - #0-q -; +#X obj 44 426 vcf~; +#X obj 59 375 tabread4~ mtof; +#X text 127 403 <-- Q (selectivity); +#X text 115 182 sawtooth; +#X text 116 198 oscillator; +#X text 112 221 <-- sweep speed; +#X text 137 245 LFO for sweep; +#X text 134 274 <-- sweep depth; +#X text 131 326 <-- base center frequency; +#X text 103 350 add base to sweep; +#X text 192 375 convert to Hz.; +#X text 97 144 <-- pitch; +#X obj 43 457 output~; +#X obj 44 169 mtof; +#X obj 60 244 phasor~; +#X obj 60 298 *~; +#X text 294 496 updated for Pd version 0.39; +#N canvas 706 247 450 300 startup 0; +#X obj 85 16 loadbang; +#X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 85 59 f \$0; +#X text 9 257 boxes.; +#X text 18 209 This subpatch loads initial values in number; +#X msg 85 83 \; \$1-pitch 48 \; \$1-speed -2 \; \$1-depth 27 \; \$1-offset +56 \; \$1-q 2; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 168 491 pd startup; +#X text 14 109 Note the different effects of negative and positive +sweep speeds.; +#X text 13 32 If you want actively changing center frequencies \, use +"vcf~" instead of "bp~". The vcf~ module takes an audio signal to set +center frequency. (Q is still set by messages though.) Vcf is computationally +somewhat more expensive than bp~.; +#X connect 0 0 21 0; +#X connect 2 0 8 0; +#X connect 3 0 9 0; +#X connect 4 0 3 1; +#X connect 5 0 22 0; +#X connect 6 0 23 1; +#X connect 7 0 8 2; +#X connect 8 0 20 0; +#X connect 8 0 20 1; +#X connect 9 0 8 1; +#X connect 21 0 2 0; +#X connect 22 0 23 0; +#X connect 23 0 3 0; diff --git a/desiredata/doc/3.audio.examples/H05.filter.floyd.pd b/desiredata/doc/3.audio.examples/H05.filter.floyd.pd new file mode 100644 index 00000000..2187f05d --- /dev/null +++ b/desiredata/doc/3.audio.examples/H05.filter.floyd.pd @@ -0,0 +1,132 @@ +#N canvas 708 41 555 646 12; +#N canvas 0 0 600 392 conversion-tables 0; +#N canvas 0 0 450 300 graph1 0; +#X array dbtorms 123 float 1; +#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05 +2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05 +4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05 +8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828 +0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813 +0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946 +0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489 +0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813 +0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328 +0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526 +0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684 +0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202 +0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838 +0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946 +0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526 +2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341 +6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893; +#X coords 0 10 123 0 200 100 1; +#X restore 302 48 graph; +#X text 504 141 0; +#X text 506 41 10; +#X text 321 151 ------ 123 samples ------; +#N canvas 0 0 450 300 graph2 0; +#X array mtof 130 float 1; +#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499 +12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017 +21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478 +36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705 +61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989 +103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814 +174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183 +293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164 +493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991 +830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51 +1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32 +2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07 +4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88 +7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3 +11839.8 12543.9 13289.8 14080; +#X coords 0 12000 130 0 200 100 1; +#X restore 309 225 graph; +#X text 319 333 ------ 130 samples ------; +#X text 518 318 0; +#X text 520 218 12000; +#X restore 121 588 pd conversion-tables; +#X obj 31 411 line~; +#X obj 31 387 pack 0 100; +#X floatatom 31 339 3 0 150 0 - #0-cf -; +#X floatatom 47 461 3 0 999 0 - #0-q -; +#X obj 16 512 vcf~; +#X obj 31 436 tabread4~ mtof; +#X text 81 461 <-- Q (selectivity); +#X text 88 5 ANOTHER SWEEPING FILTER EXAMPLE; +#X obj 15 267 clip~ 0 0.5; +#X obj 15 291 *~ 2; +#X obj 15 315 -~; +#X text 119 268 trick to; +#X text 120 285 make symmetric; +#X text 118 302 triangle wave; +#X obj 22 147 f; +#X obj 55 145 + 1; +#X obj 22 217 mtof; +#X obj 55 169 mod 8; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-array1 8 float 2; +#X coords 0 96 8 36 200 100 1; +#X restore 340 144 graph; +#X text 73 336 <-- center frequency; +#X obj 22 123 metro 85; +#X text 107 147 sequencer for; +#X text 122 164 8 note loop; +#X obj 16 576 output~; +#X obj 22 104 tgl 15 0 empty \$1-metro empty 0 -6 0 8 -262144 -1 -1 +1 1; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-cf 61 \; \$1-q 10 \; \$1-metro 1 \; \$1-array1 +0 45 48 50 48 55 53 55 57; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 121 611 pd startup; +#X text 96 364 at least 61; +#X obj 22 241 phasor~; +#X text 294 616 updated for Pd version 0.39; +#X obj 22 193 tabread \$0-array1; +#X obj 16 540 vcf~; +#X obj 31 362 max 61; +#X text 82 409 smooth & convert to Hz.; +#X obj 47 482 max 3; +#X text 105 483 at least 3; +#X text 11 28 Here's an approximate reconstruction of an old riff by +Pink Floyd. Because we're filtering a waveform with odd partials \, +it's easier to pick out the partials in the filtered sound than if +we had had both even and odd ones.; +#X text 78 527 rejection of the stop bands without having; +#X text 79 509 Put two vcf objects in series for better; +#X text 77 545 to make the passband excessively narrow.; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 32 0; +#X connect 4 0 34 0; +#X connect 5 0 31 0; +#X connect 6 0 5 1; +#X connect 6 0 31 1; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 5 0; +#X connect 15 0 16 0; +#X connect 15 0 30 0; +#X connect 16 0 18 0; +#X connect 17 0 28 0; +#X connect 18 0 15 1; +#X connect 21 0 15 0; +#X connect 25 0 21 0; +#X connect 28 0 9 0; +#X connect 28 0 11 1; +#X connect 30 0 17 0; +#X connect 31 0 24 0; +#X connect 31 0 24 1; +#X connect 32 0 2 0; +#X connect 34 0 5 2; +#X connect 34 0 31 2; diff --git a/desiredata/doc/3.audio.examples/H06.envelope.follower.pd b/desiredata/doc/3.audio.examples/H06.envelope.follower.pd new file mode 100644 index 00000000..8f536fba --- /dev/null +++ b/desiredata/doc/3.audio.examples/H06.envelope.follower.pd @@ -0,0 +1,86 @@ +#N canvas 87 74 585 621 12; +#X floatatom 354 464 4 0 0 0 - - -; +#X floatatom 150 316 3 0 999 0 - #0-osc2 -; +#X obj 150 336 osc~; +#X text 162 12 ENVELOPE FOLLOWER; +#X text 22 33 An envelope follower measures the mean square power of +an signal as it changes over time. (You can convert mean square power +to RMS ampitude or to decibels if you wish.) The term "mean square" +means simply that the signal should be squared \, and then averaged. +The averageing is done using a low-pass filter such as lop~.; +#X obj 62 466 lop~; +#X floatatom 93 444 3 0 100 0 - #0-lop -; +#X obj 61 356 +~; +#X text 187 317 <-- frequency of second oscillator; +#X obj 62 330 osc~ 500; +#X obj 62 413 *~; +#X obj 62 522 snapshot~; +#X floatatom 62 573 5 0 999 0 - - -; +#X obj 62 545 sqrt; +#X text 335 361 built-in envelope; +#X obj 354 491 dbtorms; +#X floatatom 354 518 5 0 999 0 - - -; +#N canvas 536 459 382 265 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-osc2 400 \; \$1-lop 10 \; \$1-metro 1 \; pd dsp +1; +#X obj 223 132 metro 250; +#X obj 223 107 r \$0-metro; +#X obj 223 156 s \$0-tick; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X connect 6 0 8 0; +#X connect 7 0 6 0; +#X restore 217 598 pd startup; +#X text 115 414 square the signal; +#X text 124 440 <-- responsiveness; +#X text 159 501 take snapshot; +#X text 108 548 convert to RMS; +#X text 327 599 updated for Pd version 0.39; +#X text 334 381 follower for comparison; +#X text 107 466 low-pass filter; +#X text 114 573 output; +#X obj 70 497 r \$0-tick; +#X text 159 517 every 1/4 second; +#X obj 389 439 r \$0-tick; +#X obj 354 439 f; +#X obj 376 414 env~; +#X text 20 242 The env~ object at right \, which is a built-in envelope +follower using a higher-quality low-pass filter than lop~ \, is shown +for comparison. Its output is artificially slowed down to match the +homemade one at left.; +#X obj 150 359 *~; +#X obj 185 360 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 204 358 <-- on/off; +#X text 20 128 Here we're adding two oscillators so the result should +be an RMS of one if the second oscillator is on \, 0.707 otherwise. +Note two effects: first \, the more responsive the envelope follower +\, the less accurate the result (but the faster it responds). Second +\, if the two oscillators are tuned close to each other their beating +affects the nombers coming out.; +#X connect 0 0 15 0; +#X connect 1 0 2 0; +#X connect 2 0 32 0; +#X connect 5 0 11 0; +#X connect 6 0 5 1; +#X connect 7 0 10 0; +#X connect 7 0 10 1; +#X connect 7 0 30 0; +#X connect 9 0 7 0; +#X connect 10 0 5 0; +#X connect 11 0 13 0; +#X connect 13 0 12 0; +#X connect 15 0 16 0; +#X connect 26 0 11 0; +#X connect 28 0 29 0; +#X connect 29 0 0 0; +#X connect 30 0 29 1; +#X connect 32 0 7 1; +#X connect 33 0 32 1; diff --git a/desiredata/doc/3.audio.examples/H07.measure.spectrum.pd b/desiredata/doc/3.audio.examples/H07.measure.spectrum.pd new file mode 100644 index 00000000..f290ca4a --- /dev/null +++ b/desiredata/doc/3.audio.examples/H07.measure.spectrum.pd @@ -0,0 +1,88 @@ +#N canvas 407 54 626 729 12; +#X floatatom 145 654 5 0 0 0 - - -; +#X obj 44 565 bp~; +#X obj 44 536 bp~; +#X obj 55 467 mtof; +#X floatatom 55 490 7 0 0 0 - - -; +#X floatatom 98 520 3 0 999 0 - #0-q -; +#X floatatom 55 447 7 0 150 0 - #0-pitch -; +#X obj 145 586 env~ 4096; +#X obj 45 370 *~ 0; +#X obj 44 395 +~ 1; +#X obj 145 608 + 0.5; +#X obj 145 631 int; +#X text 12 41 In this example we use two cascaded bandpass filters +to troll for partials in Jonathan Harvey's famous bell sample.; +#X text 16 233 You can hear partials around 48 \, 51.3 \, 55 (faint!) +\, 57 (fainter!) \, 60 \, two beating partials around 65 \, 67 \, 69 +\, 70.9 \, 71.75 \, 72.6 \, 74 \, 74.65 \, 75.6 \, 77 \, 81.2 \, 84.6 +\, 86.5 \, and probably many more. There's also one down at 36 \, but +it's easier to see it on the meter than hear it.; +#X text 124 447 <-- center pitch; +#X text 120 463 (shift-drag to fine tune); +#X text 131 491 <-- center frequency; +#X text 138 520 <-- Q (filter selectivity); +#X obj 44 614 output~; +#X text 341 680 updated for Pd version 0.39; +#X text 14 82 Note that filters can give unexpected level changes. +The bp~ object is designed to have roughly unit gain at the pass band +\, so the higher you set "Q" the more amplitude is lost. You can correct +for this by pushing the output amplitude \, but be sure to remember +to reset the output amplitude before you reduce Q again. I set the +Q to 100 and the output amplitude to 110 or 120 (with the room gain +way down.) Then holding the shift key \, slowly drag the center pitch +upward listening for modes.; +#N canvas 316 21 483 471 startup 0; +#X obj 53 335 r readfile; +#X obj 53 388 soundfiler; +#X obj 59 23 loadbang; +#X obj 59 49 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 59 70 f \$0; +#X obj 60 271 /; +#X msg 60 248 44100; +#X obj 60 223 t b f; +#X obj 60 199 r \$0-totsamps; +#X obj 60 294 s \$0-loopf; +#X msg 59 102 \; readfile symbol \$1-array \; \$1-totsamps 143718 \; +\$1-pitch 69 \; \$1-q 0; +#X msg 53 361 read -resize ../sound/bell.aiff \$1; +#X connect 0 0 11 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 10 0; +#X connect 5 0 9 0; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 7 1 5 1; +#X connect 8 0 7 0; +#X connect 11 0 1 0; +#X restore 456 625 pd startup; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-array 155948 float 0; +#X coords 0 1 155947 -1 200 150 1; +#X restore 396 322 graph; +#X obj 45 322 r \$0-loopf; +#X obj 45 346 phasor~; +#X obj 44 419 tabread4~ \$0-array; +#X obj 89 370 r \$0-totsamps; +#X text 109 12 MEASURING SPECTRA USING BANDPASS FILTERS; +#X connect 1 0 7 0; +#X connect 1 0 18 0; +#X connect 1 0 18 1; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 2 1; +#X connect 4 0 1 1; +#X connect 5 0 2 2; +#X connect 5 0 1 2; +#X connect 6 0 3 0; +#X connect 7 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 25 0; +#X connect 10 0 11 0; +#X connect 11 0 0 0; +#X connect 23 0 24 0; +#X connect 24 0 8 0; +#X connect 25 0 2 0; +#X connect 26 0 8 1; diff --git a/desiredata/doc/3.audio.examples/H08.heterodyning.pd b/desiredata/doc/3.audio.examples/H08.heterodyning.pd new file mode 100644 index 00000000..5bdf28e3 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H08.heterodyning.pd @@ -0,0 +1,85 @@ +#N canvas 280 49 607 705 12; +#X text 336 665 updated for Pd version 0.39; +#X text 109 12 MORE ON MEASURING SPECTRA: HETERODYNING; +#X obj 46 289 phasor~ 100; +#X obj 99 343 phasor~; +#X floatatom 99 320 5 0 999 0 - #0-freq -; +#X obj 99 395 cos~; +#X obj 148 395 cos~; +#X obj 148 370 +~ 0.25; +#X obj 47 547 snapshot~; +#N canvas 536 459 382 265 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X obj 223 132 metro 250; +#X obj 223 107 r \$0-metro; +#X obj 223 156 s \$0-tick; +#X msg 22 91 \; \$1-freq 100 \; \$1-lop 2 \; \$1-metro 1 \; pd dsp +1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 8 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X restore 382 573 pd startup; +#X obj 47 446 *~; +#X obj 91 446 *~; +#X obj 48 471 lop~; +#X obj 92 471 lop~; +#X floatatom 153 435 3 0 100 0 - #0-lop -; +#X text 186 435 <-- responsiveness; +#X obj 136 547 snapshot~; +#X floatatom 47 575 5 0 0 0 - - -; +#X floatatom 136 575 5 0 0 0 - - -; +#X obj 161 496 r \$0-tick; +#X obj 161 517 t b b; +#X obj 47 643 expr sqrt($f1*$f1+$f2*$f2); +#X floatatom 47 669 5 0 0 0 - - -; +#X text 56 248 signal to; +#X text 58 268 analyze; +#X text 51 44 Another method for picking out the strengths of partials +in a sound is heterodyning. We guess the frequency of a partial (as +in the previous patch) but this time we multiply by a complex exponential +to frequency-shift the partial down to zero (DC).; +#X text 47 126 Then a low-pass filter (applied separately on the real +and imaginary parts) removes all but the DC component thus obtained. +The result is two audio signals (which we take snapshots of) holding +the real and imaginary parts of the complex amplitude of the partial +we want. Compared to the previous method \, this had the advantage +of reporting the phase of the partial as well as its frequency.; +#X text 240 358 modulate; +#X text 237 394 to DC; +#X text 154 321 <-- test frequency; +#X text 236 376 test frequency; +#X text 132 471 low-pass filter; +#X text 55 596 real; +#X text 59 611 part; +#X text 207 589 part; +#X text 198 574 imaginary; +#X text 105 670 magnitude; +#X connect 2 0 10 0; +#X connect 2 0 11 0; +#X connect 3 0 5 0; +#X connect 3 0 7 0; +#X connect 4 0 3 0; +#X connect 5 0 10 1; +#X connect 6 0 11 1; +#X connect 7 0 6 0; +#X connect 8 0 17 0; +#X connect 10 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 8 0; +#X connect 13 0 16 0; +#X connect 14 0 13 1; +#X connect 14 0 12 1; +#X connect 16 0 18 0; +#X connect 17 0 21 0; +#X connect 18 0 21 1; +#X connect 19 0 20 0; +#X connect 20 0 8 0; +#X connect 20 1 16 0; +#X connect 21 0 22 0; diff --git a/desiredata/doc/3.audio.examples/H09.ssb.modulation.pd b/desiredata/doc/3.audio.examples/H09.ssb.modulation.pd new file mode 100644 index 00000000..c0fbf2df --- /dev/null +++ b/desiredata/doc/3.audio.examples/H09.ssb.modulation.pd @@ -0,0 +1,103 @@ +#N canvas 7 6 605 578 12; +#X obj 188 393 cos~; +#X obj 231 371 +~ -0.25; +#X obj 231 394 cos~; +#X obj 23 438 *~; +#X obj 89 438 *~; +#X obj 22 462 -~; +#X floatatom 188 322 5 0 0 0 - - -; +#X text 30 242 sample loop for; +#X text 30 260 test signal; +#X text 35 321 pair of allpass; +#X text 34 338 filters to make; +#X text 34 356 90 degree phase; +#X text 32 373 shifted versions; +#X text 238 323 <-- shift frequency; +#X text 310 356 cosine and sine waves; +#X text 55 7 SINGLE SIDEBAND MODULATION; +#X text 300 7 (AKA FREQUENCY SHIFTING); +#N canvas 555 154 448 326 bell-loop 0; +#X obj 23 142 /; +#X obj 23 214 +~ 1; +#X msg 23 117 44100; +#X obj 23 91 t b f; +#X obj 24 264 outlet~; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-array 155948 float 0; +#X coords 0 1 155947 -1 200 150 1; +#X restore 234 88 graph; +#X obj 23 67 r \$0-totsamps; +#X obj 65 190 r \$0-totsamps; +#X obj 23 190 *~; +#X obj 23 166 phasor~; +#X obj 23 238 tabread4~ \$0-array; +#X connect 0 0 9 0; +#X connect 1 0 10 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 3 1 0 1; +#X connect 6 0 3 0; +#X connect 7 0 8 1; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 4 0; +#X restore 24 279 pd bell-loop; +#N canvas 711 110 483 471 startup 0; +#X obj 53 335 r readfile; +#X obj 53 388 soundfiler; +#X obj 59 23 loadbang; +#X obj 59 49 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 59 70 f \$0; +#X obj 60 271 /; +#X msg 60 248 44100; +#X obj 60 223 t b f; +#X obj 60 199 r \$0-totsamps; +#X obj 60 294 s \$0-loopf; +#X msg 53 361 read -resize ../sound/bell.aiff \$1; +#X msg 59 102 \; readfile symbol \$1-array \; \$1-totsamps 143718; +#X connect 0 0 10 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 11 0; +#X connect 5 0 9 0; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 7 1 5 1; +#X connect 8 0 7 0; +#X connect 10 0 1 0; +#X restore 157 530 pd startup; +#X obj 21 495 output~; +#X text 352 547 updated for Pd version 0.39; +#X obj 188 347 phasor~; +#X text 123 438 <-- complex multipier; +#X text 122 455 (calculates real part); +#X text 309 371 to form the real and; +#X text 309 387 imaginary part of a; +#X text 309 404 complex sinusoid; +#X text 43 37 The signal sideband modulator gives you only one sideband +for each frequency in the input signal (whereas ring modulation gave +both a positive and negative sideband). You can set the shift frequency +positive to shift all frequencies upward \, or negative to shift them +downwards.; +#X text 42 117 The technique is to filter the input into two versions +\, 90 degrees out of phase \, which can be interpreted as the real +and imaginary part of a complex signal with positive frequencies only. +You can then form the (complex) product of this with a (complex) sinusoid +to modulate upward or downward in frequency.; +#X obj 23 400 hilbert~; +#X text 42 213 The "Hilbert~" object is an abstraction in pd/extra. +; +#X connect 0 0 3 1; +#X connect 1 0 2 0; +#X connect 2 0 4 1; +#X connect 3 0 5 0; +#X connect 4 0 5 1; +#X connect 5 0 19 0; +#X connect 5 0 19 1; +#X connect 6 0 21 0; +#X connect 17 0 29 0; +#X connect 21 0 1 0; +#X connect 21 0 0 0; +#X connect 29 0 3 0; +#X connect 29 1 4 0; diff --git a/desiredata/doc/3.audio.examples/H10.measurement.pd b/desiredata/doc/3.audio.examples/H10.measurement.pd new file mode 100644 index 00000000..d0a04774 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H10.measurement.pd @@ -0,0 +1,90 @@ +#N canvas 25 22 868 421 12; +#X obj 25 338 filter-graph2 tab1 tab2; +#N canvas 0 0 450 300 graph2 0; +#X array tab1 100 float 1; +#A 0 0.830737 0.844715 0.882793 0.953057 1.0592 1.19383 1.30927 1.28362 +1.08532 0.848171 0.656605 0.517756 0.418204 0.345252 0.291106 0.249389 +0.216703 0.190566 0.169369 0.1519 0.137418 0.12526 0.114871 0.105957 +0.0982917 0.0916027 0.0857987 0.0806894 0.076187 0.0722001 0.0686727 +0.0655318 0.0627325 0.060178 0.0580025 0.056008 0.0542273 0.0526222 +0.0511875 0.0499289 0.0488555 0.0478795 0.0470241 0.0462859 0.0456642 +0.0451251 0.0447277 0.0444219 0.0442324 0.0443406 0.0449216 0.0393798 +0.0442362 0.0444218 0.0447274 0.0451473 0.0456706 0.0462777 0.0470196 +0.0478395 0.0488555 0.0499664 0.0512245 0.0526221 0.05419 0.0559661 +0.0580025 0.0602342 0.0627325 0.0655169 0.0686727 0.0722052 0.076187 +0.0806893 0.085799 0.0916177 0.0982915 0.10592 0.11479 0.12526 0.137483 +0.151997 0.169411 0.190532 0.216594 0.24918 0.291106 0.345511 0.418206 +0.517664 0.656606 0.848216 1.08532 1.28264 1.30927 1.19534 1.05919 +0.951738 0.882758 0.851605; +#X coords 0 2 99 0 200 140 1; +#X restore 634 -1 graph; +#N canvas 0 0 450 300 graph2 0; +#X array tab2 100 float 3; +#A 0 8.59501e-06 0.0327982 0.0790568 0.143062 0.250239 0.425263 0.697661 +1.04745 1.37257 1.59826 1.73194 1.8042 1.83798 1.84726 1.84029 1.8221 +1.79589 1.76375 1.72711 1.68696 1.64405 1.5989 1.55192 1.50343 1.45366 +1.40283 1.35108 1.29854 1.24532 1.19151 1.13718 1.0824 1.02722 0.971679 +0.915831 0.859703 0.803332 0.746743 0.689957 0.633001 0.57589 0.518653 +0.461293 0.403871 0.346275 0.288763 0.230985 0.173676 0.11652 0.0674726 +-0.000119478 6.21552 6.16648 6.10932 6.05201 5.99424 5.93673 5.87913 +5.82171 5.76435 5.70711 5.65 5.59304 5.53626 5.47967 5.4233 5.36717 +5.31132 5.25578 5.2006 5.14582 5.09149 5.03768 4.98446 4.93192 4.88017 +4.82934 4.77958 4.73108 4.6841 4.63895 4.59604 4.55589 4.51925 4.48711 +4.4609 4.44271 4.43574 4.44501 4.4788 4.55106 4.68474 4.91043 5.23555 +5.58534 5.85774 6.03276 6.13994 6.20394 6.24278; +#X coords 0 6.283 99 0 200 140 1; +#X restore 639 200 graph; +#X text 621 56 1; +#X text 633 342 0; +#X text 615 265 pi; +#X text 608 195 2pi; +#X obj 25 203 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 33 249 5 0 0 0 - - -; +#X text 621 -8 2; +#X text 104 -6 MEASURING FILTER FREQUENCY AND PHASE RESPONSE; +#X text 610 382 updated for Pd version 0.39; +#X text 691 145 frequency; +#X text 631 141 0; +#X text 814 144 44100; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-freq 3000 \; \$1-q 3; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 285 350 pd startup; +#X floatatom 238 257 5 0 10000 0 - #0-freq -; +#X floatatom 249 280 3 0 999 0 - #0-q -; +#X text 12 18 You can use the "filter-graph1" and "filter-graph2" abstractions +as shown to test filters. Connect them as shown with a filter between +them. Try varying the parameters and/or substituting other filters. +; +#X text 575 127 gain=0; +#X text 574 327 phase=0; +#X obj 25 226 filter-graph1 100 44100; +#X obj 227 310 bp~; +#X text 44 202 <-- compute; +#X text 34 266 index; +#X text 290 254 <-- center frequency; +#X text 288 279 <-- "Q"; +#X text 9 86 "filter-graph1" takes as arguments the number of points +to graph and the frequency range. "filter-graph2 takes as arguments +the name of a table to hold the (frequency dependent) gain \, and another +\, if specified \, for the phase.; +#X text 8 153 You can edit this patch to replace "bp" with any other +filter you're curious about.; +#X connect 7 0 21 0; +#X connect 16 0 22 1; +#X connect 17 0 22 2; +#X connect 21 0 0 0; +#X connect 21 0 8 0; +#X connect 21 1 0 1; +#X connect 21 1 22 0; +#X connect 21 2 0 2; +#X connect 22 0 0 3; diff --git a/desiredata/doc/3.audio.examples/H11.shelving.pd b/desiredata/doc/3.audio.examples/H11.shelving.pd new file mode 100644 index 00000000..8eee1178 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H11.shelving.pd @@ -0,0 +1,74 @@ +#N canvas 25 22 868 421 12; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-tab1 100 float 1; +#A 0 1.39998 1.39868 1.3942 1.39349 1.38496 1.3772 1.36745 1.35633 +1.34208 1.32931 1.31817 1.30372 1.28879 1.27458 1.25944 1.24351 1.22874 +1.21386 1.19924 1.18487 1.17063 1.15653 1.14284 1.13144 1.11914 1.10722 +1.09603 1.08515 1.07479 1.06474 1.05519 1.04606 1.03715 1.02899 1.02092 +1.0128 1.00624 0.999291 0.992705 0.986255 0.980081 0.974014 0.969307 +0.964106 0.959111 0.954207 0.949901 0.945593 0.941227 0.937556 0.933778 +0.930231 0.926681 0.923353 0.920059 0.917466 0.914627 0.911849 0.9092 +0.906745 0.904264 0.901469 0.900065 0.898006 0.896023 0.893895 0.892373 +0.890666 0.889038 0.887483 0.885924 0.884597 0.883215 0.881537 0.880075 +0.879619 0.878522 0.877414 0.876234 0.87571 0.874819 0.873886 0.873124 +0.87241 0.871807 0.870763 0.870512 0.869952 0.869465 0.868958 0.868403 +0.86826 0.867939 0.866731 0.867094 0.867762 0.867796 0.864339 0.872811 +0.920535; +#X coords 0 5 99 0 200 300 1; +#X restore 621 28 graph; +#X obj 29 245 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 37 289 3 0 0 0 - - -; +#X text 676 334 frequency; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-pole 60 \; \$1-zero 20; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 289 390 pd startup; +#X floatatom 281 265 3 -99 99 0 - #0-pole -; +#X text 559 316 gain=0; +#X text 108 34 SHELVING FILTER; +#X obj 29 378 filter-graph2 \$0-tab1; +#X obj 29 266 filter-graph1 100 22050; +#X text 796 330 22050; +#X obj 232 314 rpole~; +#X obj 281 288 / 100; +#X floatatom 335 264 4 -100 100 0 - #0-zero -; +#X obj 335 287 / 100; +#X obj 231 346 rzero~; +#X text 608 21 5; +#X text 616 327 0; +#X text 604 258 1; +#X text 16 58 This patch demonstrates using the raw filters \, rpole~ +and rzero~ (raw \, real-valued one-pole and one-zero filters) \, to +make a shelving filter.; +#X text 14 109 If the pole is at p and the zero is at q \, the gain +at DC is (1-q)/(1-p) and the gain at Nyquist is (1+q)/(1+p). If the +pole location is close to plus or minus one \, this can give large +gains unless q is in the same vicinity. (try \, for example \, p=90% +\, q=70%).; +#X text 11 191 The crossover region varies from DC to Nyquist as p +and q decrease from 100% to -100%.; +#X text 278 241 pole; +#X text 334 241 zero; +#X text 383 263 (in hundredths); +#X text 610 387 updated for Pd version 0.39; +#X connect 1 0 9 0; +#X connect 5 0 12 0; +#X connect 9 0 2 0; +#X connect 9 0 8 0; +#X connect 9 1 8 1; +#X connect 9 1 11 0; +#X connect 9 2 8 2; +#X connect 11 0 15 0; +#X connect 12 0 11 1; +#X connect 13 0 14 0; +#X connect 14 0 15 1; +#X connect 15 0 8 3; diff --git a/desiredata/doc/3.audio.examples/H12.peaking.pd b/desiredata/doc/3.audio.examples/H12.peaking.pd new file mode 100644 index 00000000..e005e01a --- /dev/null +++ b/desiredata/doc/3.audio.examples/H12.peaking.pd @@ -0,0 +1,112 @@ +#N canvas 41 39 854 640 12; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-tab1 100 float 1; +#A 0 0.960563 0.960996 0.962862 0.970269 0.977017 0.985214 1.00122 +1.02249 1.05453 1.10332 1.18193 1.31034 1.5315 1.91468 2.37977 2.37001 +1.92679 1.57244 1.36114 1.23298 1.15262 1.09943 1.06243 1.03636 1.0162 +1.00108 0.990295 0.981066 0.973613 0.967183 0.962328 0.958092 0.95445 +0.951329 0.948619 0.946121 0.943931 0.941728 0.940557 0.93934 0.938046 +0.936816 0.935569 0.934901 0.933719 0.933252 0.932534 0.931875 0.93121 +0.930347 0.929637 0.929717 0.929279 0.928865 0.928444 0.927868 0.92761 +0.926893 0.927202 0.926932 0.926666 0.926305 0.925926 0.926007 0.925702 +0.925624 0.92545 0.925285 0.924954 0.924532 0.924071 0.924718 0.924596 +0.924454 0.924247 0.923846 0.924172 0.923627 0.924005 0.92393 0.923866 +0.923769 0.923157 0.923666 0.923974 0.923561 0.923498 0.923437 0.922882 +0.922781 0.92203 0.923331 0.923265 0.922948 0.922413 0.922799 0.925651 +0.921397 0.931729 0.976084; +#X coords 0 5 99 0 200 300 1; +#X restore 616 193 graph; +#X obj 41 404 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 49 448 3 0 0 0 - - -; +#X text 671 499 frequency; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-pole 60 \; \$1-zero 20; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 328 602 pd startup; +#X floatatom 276 368 3 0 99 0 - #0-pole -; +#X text 554 481 gain=0; +#X obj 41 600 filter-graph2 \$0-tab1; +#X obj 41 425 filter-graph1 100 22050; +#X text 791 495 22050; +#X obj 276 391 / 100; +#X floatatom 330 367 4 0 100 0 - #0-zero -; +#X obj 330 390 / 100; +#X text 594 182 5; +#X text 611 492 0; +#X text 599 423 1; +#X text 596 596 updated for Pd version 0.39; +#X text 183 10 PEAKING FILTER; +#X floatatom 406 366 3 0 180 0 - #0-pole -; +#X text 415 328 angle; +#X text 399 344 (degrees); +#X obj 460 435 sin; +#X obj 405 436 cos; +#X obj 405 387 * 3.14159; +#X obj 405 411 / 180; +#X obj 241 515 *; +#X obj 405 460 t b f; +#X obj 460 460 t b f; +#X obj 209 543 cpole~; +#X obj 226 574 czero~; +#X text 266 332 pole and zero; +#X text 284 347 radii (%); +#X obj 277 516 *; +#X obj 314 542 *; +#X obj 349 542 *; +#X text 21 34 To get a peaking filter \, start with a shelving filter +but rotate the pole and zero to the point on the unit circle you want +to amplify or attenuate. The rpole~ and rzero~ filters are replaced +with their complex-valued siblings \, cpole~ and czero~. These filters +take a (real \, imaginary) pair to filter and another (real-imaginary) +pair to specify the pole or zero. As for rpole~ and rzero~ \, the coefficients +may change at audio rate.; +#X text 22 162 The outputs of cpole~ and czero~ are also in the form +of a (real-imaginary) pair. Both outlets of cpole~ are connected to +czero~ in this example \, but then since we want a real-valued filter +\, we only take the real part of the (complex) output of czero~.; +#X text 23 246 Here the pole and zero radii (p and q) control the center-frequency +gain by the formula (1-q)/(1-p). The closer to 1 the radii \, the narrower +the band affected. The non-peak gain \, (1+q)/(1+p) \, is close to +1 as long as p and q are at least 50% or so.; +#X connect 1 0 8 0; +#X connect 5 0 10 0; +#X connect 8 0 2 0; +#X connect 8 0 7 0; +#X connect 8 1 7 1; +#X connect 8 1 28 0; +#X connect 8 2 7 2; +#X connect 10 0 25 0; +#X connect 10 0 32 0; +#X connect 11 0 12 0; +#X connect 12 0 33 0; +#X connect 12 0 34 0; +#X connect 18 0 23 0; +#X connect 21 0 27 0; +#X connect 22 0 26 0; +#X connect 23 0 24 0; +#X connect 24 0 22 0; +#X connect 24 0 21 0; +#X connect 25 0 28 2; +#X connect 26 0 25 0; +#X connect 26 0 33 0; +#X connect 26 1 25 1; +#X connect 26 1 33 1; +#X connect 27 0 32 0; +#X connect 27 0 34 0; +#X connect 27 1 34 1; +#X connect 27 1 32 1; +#X connect 28 0 29 0; +#X connect 28 1 29 1; +#X connect 29 0 7 3; +#X connect 32 0 28 3; +#X connect 33 0 29 2; +#X connect 34 0 29 3; diff --git a/desiredata/doc/3.audio.examples/H13.butterworth.pd b/desiredata/doc/3.audio.examples/H13.butterworth.pd new file mode 100644 index 00000000..4cdcb628 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H13.butterworth.pd @@ -0,0 +1,74 @@ +#N canvas 49 22 840 502 12; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-tab1 100 float 1; +#A 0 0.999974 0.998121 0.998981 1.00106 1.00019 1.00133 1.00017 0.997406 +0.995891 0.986251 0.976591 0.959539 0.93749 0.903172 0.859824 0.805118 +0.744756 0.682757 0.617726 0.555802 0.496807 0.443599 0.395099 0.351557 +0.313317 0.279982 0.250867 0.225225 0.202565 0.182842 0.165875 0.150662 +0.13708 0.125107 0.11452 0.105018 0.0965065 0.0887956 0.0819179 0.0757449 +0.0701302 0.0650313 0.0604129 0.056344 0.0525467 0.0490616 0.04589 +0.0429836 0.0403206 0.0378735 0.0355742 0.0334788 0.0315483 0.0297412 +0.0280809 0.0265134 0.0251207 0.0237881 0.0225431 0.0213794 0.0203074 +0.0192861 0.0183551 0.0174563 0.0166231 0.0158432 0.0151 0.0144158 +0.0137608 0.0131513 0.0125729 0.0120266 0.0115073 0.0110253 0.0105541 +0.0101301 0.00971218 0.0093198 0.00894806 0.00859575 0.00825236 0.00794149 +0.00763651 0.00734779 0.00707258 0.0068092 0.00656191 0.0063171 0.00609739 +0.00587868 0.0056713 0.00547262 0.00528366 0.00509866 0.00493017 0.00476291 +0.00460384 0.00445121 0.00430475 0.00416536; +#X coords 0 5 99 0 200 300 1; +#X restore 615 71 graph; +#X obj 32 250 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 40 294 3 0 0 0 - - -; +#X text 670 377 frequency; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-lf 80 \; \$1-hf 150 \;; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 324 431 pd startup; +#X text 553 359 gain=0; +#X obj 32 446 filter-graph2 \$0-tab1; +#X text 593 60 5; +#X text 610 370 0; +#X text 598 301 1; +#X text 575 435 updated for Pd version 0.39; +#X text 186 -4 BUTTERWORTH FILTER; +#X obj 216 398 butterworth3~; +#X floatatom 244 340 3 0 100 0 - #0-lf -; +#X floatatom 291 339 3 85 150 0 - #0-hf -; +#X obj 244 366 mtof; +#X obj 291 366 mtof; +#X text 790 373 5000; +#X obj 32 271 filter-graph1 100 5000; +#X text 232 318 poles; +#X text 288 318 zeros; +#X text 24 20 The butterworth filter can be configured for low-pass +\, high-pass \, and shelving \, depending on the placement of the poles +and zeros. For low-pass \, the poles are placed to set the cutoff frequency +and the zeros are at -1 (the Nyquist). Leaving the poles fixed and +moving the zeros then gives shelving filters. In this example \, the +actual filtering is relegated to an abstraction (butterworth3~) which +takes frequencies corresponding to the pole and zero placement.; +#X text 24 147 The butterworth3~ abstraction computes filter coeffients +using control messages \, and so it is not suitable for continuously +time-varying Butterworth filters. For that \, it is often appropriate +to use time-saving approximations \, but precisely which approximations +to use will depend on the way the filter is to be used.; +#X connect 1 0 18 0; +#X connect 12 0 6 3; +#X connect 13 0 15 0; +#X connect 14 0 16 0; +#X connect 15 0 12 1; +#X connect 16 0 12 2; +#X connect 18 0 2 0; +#X connect 18 0 6 0; +#X connect 18 1 6 1; +#X connect 18 1 12 0; +#X connect 18 2 6 2; diff --git a/desiredata/doc/3.audio.examples/H14.all.pass.pd b/desiredata/doc/3.audio.examples/H14.all.pass.pd new file mode 100644 index 00000000..d493df7b --- /dev/null +++ b/desiredata/doc/3.audio.examples/H14.all.pass.pd @@ -0,0 +1,85 @@ +#N canvas 25 22 868 421 12; +#X obj 25 338 filter-graph2 tab1 tab2; +#N canvas 0 0 450 300 graph2 0; +#X array tab1 100 float 1; +#A 0 0.999994 1.0015 1.00454 0.999907 0.99994 0.999773 1.00002 1.0004 +0.999993 0.998703 1 0.999993 1 0.999699 0.999312 0.99924 0.999999 1 +0.999937 0.999782 0.999733 0.999322 0.9998 1 0.999998 0.999945 0.999998 +0.999779 0.999998 1 0.999991 0.999998 0.999999 0.99949 1 0.999165 1 +0.999991 0.999833 0.999694 1.00014 0.999247 1.00001 0.999976 1.00001 +0.99974 0.999947 0.998428 1.00052 1.00383 1.00011 0.991395 1.0006 1.00077 +0.999952 0.999955 1.00003 0.999937 0.999955 0.999616 0.999266 0.99916 +1 0.999989 0.999831 0.999696 1 0.999239 0.999998 0.999998 0.999993 +0.999998 0.999998 0.999426 0.999998 0.999999 0.999998 0.999916 0.999714 +0.99951 0.999825 0.999998 0.999999 0.999962 0.999837 0.999605 1 0.999164 +0.999996 0.99999 1 0.99999 0.999991 0.998888 1.00002 0.999955 0.999942 +0.999432 1.00007 1.00956; +#X coords 0 2 99 0 200 140 1; +#X restore 634 -1 graph; +#N canvas 0 0 450 300 graph2 0; +#X array tab2 100 float 3; +#A 0 8.595e-06 0.0615936 0.127096 0.18809 0.251487 0.314087 0.376949 +0.439804 0.502669 0.565481 0.628309 0.691149 0.753982 0.816816 0.879645 +0.942477 1.00531 1.06814 1.13097 1.1938 1.25663 1.31947 1.3823 1.44513 +1.50796 1.5708 1.63363 1.69646 1.75929 1.82212 1.88496 1.94779 2.01062 +2.07345 2.13628 2.19912 2.26195 2.32478 2.38761 2.45045 2.51327 2.5761 +2.63893 2.70178 2.76457 2.82751 2.89011 2.9535 3.01727 3.08969 3.14147 +3.19331 3.26573 3.3295 3.39289 3.45549 3.51843 3.58122 3.64407 3.7069 +3.76973 3.83255 3.89539 3.95822 4.02105 4.08388 4.14672 4.20955 4.27238 +4.33521 4.39804 4.46088 4.52371 4.58654 4.64937 4.7122 4.77504 4.83787 +4.9007 4.96353 5.02637 5.0892 5.15203 5.21486 5.27769 5.34052 5.40335 +5.46619 5.52902 5.59185 5.65469 5.71752 5.78033 5.8432 5.90605 5.96891 +6.03151 6.09491 6.1559 6.21446; +#X coords 0 6.283 99 0 200 140 1; +#X restore 639 200 graph; +#X text 621 56 1; +#X text 633 342 0; +#X text 615 265 pi; +#X text 608 195 2pi; +#X obj 25 203 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 33 249 5 0 0 0 - - -; +#X text 621 -8 2; +#X text 610 382 updated for Pd version 0.39; +#X text 691 145 frequency; +#X text 631 141 0; +#X text 814 144 44100; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-pole 80; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 398 370 pd startup; +#X text 575 127 gain=0; +#X text 574 327 phase=0; +#X obj 25 226 filter-graph1 100 44100; +#X text 44 202 <-- compute; +#X text 34 266 index; +#X text 104 -6 ALL-PASS FILTERS; +#X floatatom 346 264 3 -99 99 0 - #0-pole -; +#X obj 239 306 rpole~; +#X obj 346 287 / 100; +#X obj 239 281 rzero_rev~; +#X text 341 240 pole (%); +#X text 14 20 The all-pass filter has a phase response that depends +on its coefficient \, and a flat frequency response. The coefficient +(p) gives the location of the pole. There is a zero at 1/p \, unless +p=0. If p=0 the filter is effectively a one-sample delay. Negative +values of $p$ are allowed \, as long as p is between -1 and 1; +#X connect 7 0 17 0; +#X connect 17 0 0 0; +#X connect 17 0 8 0; +#X connect 17 1 0 1; +#X connect 17 1 24 0; +#X connect 17 2 0 2; +#X connect 21 0 23 0; +#X connect 22 0 0 3; +#X connect 23 0 24 1; +#X connect 23 0 22 1; +#X connect 24 0 22 0; diff --git a/desiredata/doc/3.audio.examples/H15.phaser.pd b/desiredata/doc/3.audio.examples/H15.phaser.pd new file mode 100644 index 00000000..4de372c1 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H15.phaser.pd @@ -0,0 +1,109 @@ +#N canvas 25 22 703 596 12; +#X text 448 562 updated for Pd version 0.39; +#X text 167 -1 PHASER; +#N canvas 876 177 375 255 startup 0; +#X obj 22 24 loadbang; +#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 22 67 f \$0; +#X text 35 195 This subpatch loads initial; +#X text 31 219 values in number boxes.; +#X msg 22 91 \; \$1-pole 80; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X restore 323 561 pd startup; +#N canvas 0 0 660 424 chord 0; +#X obj 87 97 -~ 0.5; +#X obj 87 146 clip~ -0.5 0.5; +#X obj 87 169 cos~; +#X obj 91 252 hip~ 5; +#X obj 91 315 outlet~; +#X obj 87 122 *~ 3; +#X obj 87 74 phasor~ 220; +#X obj 221 97 -~ 0.5; +#X obj 221 146 clip~ -0.5 0.5; +#X obj 221 169 cos~; +#X obj 221 122 *~ 3; +#X obj 356 100 -~ 0.5; +#X obj 356 149 clip~ -0.5 0.5; +#X obj 356 172 cos~; +#X obj 356 125 *~ 3; +#X obj 491 100 -~ 0.5; +#X obj 491 149 clip~ -0.5 0.5; +#X obj 491 172 cos~; +#X obj 491 125 *~ 3; +#X obj 221 74 phasor~ 251; +#X obj 356 77 phasor~ 281; +#X obj 491 77 phasor~ 311; +#X text 147 32 test sound for phaser; +#X obj 91 285 *~ 0.2; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 23 0; +#X connect 5 0 1 0; +#X connect 6 0 0 0; +#X connect 7 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 3 0; +#X connect 10 0 8 0; +#X connect 11 0 14 0; +#X connect 12 0 13 0; +#X connect 13 0 3 0; +#X connect 14 0 12 0; +#X connect 15 0 18 0; +#X connect 16 0 17 0; +#X connect 17 0 3 0; +#X connect 18 0 16 0; +#X connect 19 0 7 0; +#X connect 20 0 11 0; +#X connect 21 0 15 0; +#X connect 23 0 4 0; +#X restore 73 271 pd chord; +#X obj 72 533 output~; +#X obj 95 325 rpole~; +#X obj 95 300 rzero_rev~; +#X obj 95 374 rpole~; +#X obj 95 349 rzero_rev~; +#X obj 95 422 rpole~; +#X obj 95 397 rzero_rev~; +#X obj 95 471 rpole~; +#X obj 95 446 rzero_rev~; +#X obj 72 501 +~; +#X text 23 17 The phaser ranks \, along with fuzz and wah-wah \, as +one of the great guitar pedals. A phaser simply adds an all-passed +copy of the signal to the original \, making phase reinforcement and +cancellation at frequencies that depend on the all-pass coefficients. +In this example the coefficients range from 0.88 to 0.98 \, controlled +by a phasor~ object (no relation). The phasor~ is converted to a symmetrical +triangle wave (abs($v1-0.5)) and then ranged appropriately.; +#X obj 250 417 phasor~ 0.3; +#X text 22 158 Many variations of this have been invented. A deeper +effect can be obtained by using 12 all-pass filters and adding the +outputs of the 4th \, 8th. and 12th one to the original. Various stereo +configurations are possible. Some people use 6 instead of the 4 stages +used here. Controls can be added to change the frequency of sweeping +and the range of the all-pass coeefficients.; +#X obj 250 449 expr~ 1 - 0.03 - 0.6*abs($v1-0.5)*abs($v1-0.5); +#X connect 3 0 6 0; +#X connect 3 0 13 0; +#X connect 5 0 8 0; +#X connect 6 0 5 0; +#X connect 7 0 10 0; +#X connect 8 0 7 0; +#X connect 9 0 12 0; +#X connect 10 0 9 0; +#X connect 11 0 13 1; +#X connect 12 0 11 0; +#X connect 13 0 4 0; +#X connect 13 0 4 1; +#X connect 15 0 17 0; +#X connect 17 0 6 1; +#X connect 17 0 5 1; +#X connect 17 0 8 1; +#X connect 17 0 7 1; +#X connect 17 0 10 1; +#X connect 17 0 9 1; +#X connect 17 0 12 1; +#X connect 17 0 11 1; diff --git a/desiredata/doc/3.audio.examples/H16.adsr.filter.qlist.pd b/desiredata/doc/3.audio.examples/H16.adsr.filter.qlist.pd new file mode 100644 index 00000000..f112d2b6 --- /dev/null +++ b/desiredata/doc/3.audio.examples/H16.adsr.filter.qlist.pd @@ -0,0 +1,167 @@ +#N canvas 131 52 921 585 12; +#X obj 12 219 r trigger; +#X obj 12 437 *~; +#X obj 12 330 *~ 0.01; +#X obj 12 365 *~; +#X obj 12 395 *~; +#X obj 59 359 r pitch; +#X obj 59 409 mtof; +#X floatatom 59 384 4 0 0 0 - - -; +#X floatatom 36 271 4 0 0 0 - - -; +#X obj 36 246 r level; +#X floatatom 110 271 4 0 0 0 - - -; +#X obj 110 246 r attack; +#X floatatom 195 271 4 0 0 0 - - -; +#X obj 195 246 r decay; +#X floatatom 270 271 4 0 0 0 - - -; +#X floatatom 364 271 4 0 0 0 - - -; +#X obj 270 246 r sustain; +#X obj 364 246 r release; +#X obj 499 158 r note; +#X msg 500 236 \; trigger 1; +#X obj 602 225 del; +#X msg 602 247 \; trigger 0; +#X obj 14 166 qlist; +#X obj 14 7 r qlist; +#X msg 35 34 bang; +#X msg 35 59 rewind; +#X obj 42 88 r tempo; +#X floatatom 42 113 4 0 0 0 - - -; +#X msg 42 138 tempo \$1; +#X obj 499 201 t b f; +#X obj 550 198 s pitch; +#X obj 624 176 r duration; +#X floatatom 624 201 4 0 0 0 - - -; +#X floatatom 499 181 4 0 0 0 - - -; +#X obj 268 319 r trigger; +#X floatatom 294 375 4 0 0 0 - - -; +#X floatatom 366 405 4 0 0 0 - - -; +#X floatatom 456 405 4 0 0 0 - - -; +#X floatatom 542 405 4 0 0 0 - - -; +#X floatatom 638 405 4 0 0 0 - - -; +#X obj 294 350 r level2; +#X obj 366 380 r attack2; +#X obj 456 380 r decay2; +#X obj 542 380 r sustain2; +#X obj 638 380 r release2; +#X obj 59 434 tabosc4~ array1; +#X floatatom 218 365 4 0 0 0 - - -; +#X obj 12 481 vcf~; +#X floatatom 119 487 4 0 0 0 - - -; +#X obj 119 462 r q; +#X obj 12 305 adsr 0 0 0 0 0; +#X obj 268 443 adsr 0 0 0 0 0; +#X obj 294 400 / 69.23; +#X obj 218 390 mtof; +#X obj 218 415 sqrt; +#X obj 218 440 sqrt; +#X obj 176 335 r filter; +#X obj 219 493 *~; +#X obj 219 518 *~; +#X obj 268 468 +~ 1; +#X obj 218 465 *~; +#X text 118 214 ADSR for amplitude:; +#N canvas 0 258 703 380 otherstuff 0; +#X obj 289 86 loadbang; +#X obj 418 85 loadbang; +#N canvas 0 0 450 300 graph2 0; +#X array array1 67 float 1; +#A 0 0 0 0 0 0.714286 0.742857 0.757143 0.771429 0.778571 0.785714 +0.785714 0.785714 0.785714 0.790476 0.795238 0.614286 0.585714 0.442857 +0.271429 -0.128571 -0.142857 -0.157143 -0.171429 -0.642857 -0.528571 +-0.614286 -0.685714 -0.828571 -0.828571 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0.557143 0.571429 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1 66 -1 200 140 1; +#X restore 62 81 graph; +#X msg 418 115 \; qlist read qlist2.txt; +#X msg 289 111 \; level 100 \; attack 20 \; decay 300 \; sustain 70 +\; release 300 \; duration 300 \; pitch 72 \; filter 38 \; level2 49 +\; attack2 19 \; decay2 300 \; sustain2 17 \; release2 700 \; q 3 \; +tempo 4; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X restore 134 560 pd otherstuff; +#X text 87 33 <--start loop; +#X text 104 61 <--stop loop; +#X text 90 113 <--set tempo; +#X text 257 562 <--loadbangs and table; +#X msg 447 517 \; qlist read qlist2.txt; +#X text 441 493 click to reload qlist2.txt; +#X obj 12 509 output~; +#X text 229 19 This is an analog-synth sound made using a wavetable +oscillator and a "vcf~' object. Unkike the "floyd" example earlier +\, we use a qlist object to do the sequencing. This can also be adapted +to make a keyboard synth.; +#X text 227 85 The qlist reads the file \, "qlist2.txt" \, which contains +four "note" messages and a message at the end that restarts the qlist +at the beginning. The "note" messages are translated into a pitch change +and triggers for the ADSRs.; +#X text 667 551 updated for Pd version 0.39; +#X text 379 305 ADSR for filter. Here \, it works better to make the +envelope modify a constant "filter pitch"--so the "filter" receive +gets the "mtof" treatment and the ADSR is an offset in halftones.; +#X text 231 1 ANALOG_STYLE SYNTH USING QLIST; +#X connect 0 0 50 0; +#X connect 1 0 47 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 5 0 7 0; +#X connect 6 0 45 0; +#X connect 7 0 6 0; +#X connect 8 0 50 1; +#X connect 9 0 8 0; +#X connect 10 0 50 2; +#X connect 11 0 10 0; +#X connect 12 0 50 3; +#X connect 13 0 12 0; +#X connect 14 0 50 4; +#X connect 15 0 50 5; +#X connect 16 0 14 0; +#X connect 17 0 15 0; +#X connect 18 0 33 0; +#X connect 20 0 21 0; +#X connect 23 0 22 0; +#X connect 24 0 22 0; +#X connect 25 0 22 0; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 28 0 22 0; +#X connect 29 0 20 0; +#X connect 29 0 19 0; +#X connect 29 1 30 0; +#X connect 31 0 32 0; +#X connect 32 0 20 1; +#X connect 33 0 29 0; +#X connect 34 0 51 0; +#X connect 35 0 52 0; +#X connect 36 0 51 2; +#X connect 37 0 51 3; +#X connect 38 0 51 4; +#X connect 39 0 51 5; +#X connect 40 0 35 0; +#X connect 41 0 36 0; +#X connect 42 0 37 0; +#X connect 43 0 38 0; +#X connect 44 0 39 0; +#X connect 45 0 1 1; +#X connect 46 0 53 0; +#X connect 47 0 69 0; +#X connect 47 0 69 1; +#X connect 48 0 47 2; +#X connect 49 0 48 0; +#X connect 50 0 2 0; +#X connect 51 0 59 0; +#X connect 52 0 51 1; +#X connect 53 0 54 0; +#X connect 54 0 55 0; +#X connect 55 0 60 0; +#X connect 56 0 46 0; +#X connect 57 0 58 0; +#X connect 57 0 58 1; +#X connect 58 0 47 1; +#X connect 59 0 60 1; +#X connect 60 0 57 0; +#X connect 60 0 57 1; diff --git a/desiredata/doc/3.audio.examples/I01.Fourier.analysis.pd b/desiredata/doc/3.audio.examples/I01.Fourier.analysis.pd new file mode 100644 index 00000000..31bcce63 --- /dev/null +++ b/desiredata/doc/3.audio.examples/I01.Fourier.analysis.pd @@ -0,0 +1,90 @@ +#N canvas 25 8 688 708 12; +#X floatatom 38 264 7 0 0 0 - - -; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-real 64 float 2; +#X coords 0 64 64 -64 256 200 1; +#X restore 423 184 graph; +#X floatatom 38 168 5 0 32 0 - - -; +#X obj 78 240 samplerate~; +#X obj 38 215 t f b; +#X obj 38 240 *; +#X obj 80 568 metro 250; +#X obj 38 637 tabwrite~ \$0-real; +#X obj 67 614 tabwrite~ \$0-imaginary; +#X obj 38 384 osc~; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-imaginary 64 float 2; +#X coords 0 64 64 -64 256 200 1; +#X restore 423 417 graph; +#X obj 69 360 f; +#X floatatom 91 316 3 0 100 0 - - -; +#X obj 91 337 / 100; +#X obj 38 191 / 64; +#X text 504 163 real part; +#X text 489 398 imaginary part; +#X obj 80 545 loadbang; +#X text 94 166 <- frequency; +#X text 133 182 (as multiple; +#X text 135 198 of SR/64 \, the; +#X text 133 215 fundamental); +#X text 170 345 of a cycle; +#X text 431 638 updated for PD version 0.39; +#X obj 89 590 s \$0-snap; +#X obj 69 286 r \$0-snap; +#X text 127 315 <- phase in; +#X text 161 331 hundredths; +#X text 113 264 <- frequency \, Hz.; +#X text 87 415 given the real and imaginary part; +#X text 88 431 of a complex-valued signal. Here; +#X text 87 447 the imaginary part is zero (the; +#X text 86 400 fft~ computes the Fourier transform \,; +#X text 186 541 real and imaginary; +#X text 186 557 outputs are graphed; +#X text 185 574 separately.; +#X text 86 464 input is real-valued). The output; +#X text 85 482 is a (real \, imaginary) pair for each; +#X text 86 500 frequency from 0 to 63 (in units of; +#X text 87 520 SR/64).; +#X text 145 -36 The "fft~" object has separate inlets for the real +and imaginary parts of a complex-valued signal and outputs its Fourier +transform \, again using separate outlets for the real and imaginary +part. The transform is done on one block of samples (here the block +size is 64 \, Pd's default.) The outputs give the complex amplitudes +of the harmonics of the input signal \, from DC up. The harmonics are +tuned to the fundamental frequency of the analysis \, 1/64th of the +sample rate. If the frequency (in harmonics) is an integer \, the result +is two harmonics symmetric about the Nyquist frequency. Fractional +frequencies spill across harmonics. Changing the initial phase rotates +energy from real to imaginary and back.; +#X text 26 -24 ANALYSIS; +#X text 27 -42 FOURIER; +#X msg 38 79 0; +#X msg 38 100 10; +#X msg 38 121 10.5; +#X text 159 283 bang-on-snapshot; +#X text 157 297 from below; +#X text 100 363 sync phase with snapshots; +#X obj 37 423 fft~; +#X msg 274 614 \; pd dsp 1; +#X connect 0 0 9 0; +#X connect 2 0 14 0; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 4 1 3 0; +#X connect 5 0 0 0; +#X connect 6 0 7 0; +#X connect 6 0 8 0; +#X connect 6 0 24 0; +#X connect 9 0 49 0; +#X connect 11 0 9 1; +#X connect 12 0 13 0; +#X connect 13 0 11 1; +#X connect 14 0 4 0; +#X connect 17 0 6 0; +#X connect 17 0 50 0; +#X connect 25 0 11 0; +#X connect 43 0 2 0; +#X connect 44 0 2 0; +#X connect 45 0 2 0; +#X connect 49 0 7 0; +#X connect 49 1 8 0; diff --git a/desiredata/doc/3.audio.examples/I02.Hann.window.pd b/desiredata/doc/3.audio.examples/I02.Hann.window.pd new file mode 100644 index 00000000..1cf8b46a --- /dev/null +++ b/desiredata/doc/3.audio.examples/I02.Hann.window.pd @@ -0,0 +1,181 @@ +#N canvas 281 223 567 589 12; +#N canvas 228 148 651 544 fft-analysis 0; +#X obj 15 164 *~; +#X obj 14 99 inlet~; +#X obj 15 218 rfft~; +#X obj 36 140 tabreceive~ \$0-hann; +#X obj 14 306 *~; +#X obj 56 306 *~; +#X obj 15 356 sqrt~; +#X obj 14 498 tabwrite~ \$0-magnitude; +#X obj 23 386 loadbang; +#X obj 23 470 metro 250; +#X obj 23 449 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X msg 31 411 \; pd dsp 1; +#X obj 15 8 block~ 512; +#X text 225 131 tabreceive~ outputs array contents \,; +#X text 225 149 constantly \, every block. Here it's; +#X text 223 169 used to get the Hann window to; +#X text 225 187 multiply by the input.; +#X text 120 7 block~ object does no computation but declares this; +#X text 120 24 window to be operating at a different block size from +; +#X text 122 58 Fourier transform.; +#X text 121 40 the parent window. This determines the size of the; +#X text 76 99 The inlet~ automatically re-blocks to the new block size. +; +#X obj 15 332 +~; +#X text 94 308 Take the magnitude by squaring real and imaginary part +\, adding and taking square root.; +#X text 110 424 periodically graph the output. It appears every 512 +samples (about 12 milliseconds) but we only update the graph 4 times +per second. The graph is back on the main (parent) window.; +#X text 82 215 forward real FFT. Like "fft~" \, but only one inlet +(for the real part) and only the first half of the output signals are +used. (The others are determined by symmetry: they're complex conjugates +of the first half \, in reverse order.) This takes 1/2 the CPU time +of "fft".; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 2 0 4 1; +#X connect 2 1 5 0; +#X connect 2 1 5 1; +#X connect 3 0 0 1; +#X connect 4 0 22 0; +#X connect 5 0 22 1; +#X connect 6 0 7 0; +#X connect 8 0 10 0; +#X connect 8 0 11 0; +#X connect 9 0 7 0; +#X connect 10 0 9 0; +#X connect 22 0 6 0; +#X restore 26 289 pd fft-analysis; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-magnitude 256 float 0; +#X coords 0 256 255 0 256 100 1; +#X restore 287 208 graph; +#X text 110 6 WINDOWING AND BLOCKING FOURIER TRANSFORMS; +#X obj 25 264 osc~; +#X floatatom 25 218 5 0 0 0 - - -; +#X obj 25 240 * 10; +#X text 305 559 updated for Pd version 0.39; +#X text 349 183 magnitude; +#X text 284 311 0; +#X text 522 311 255; +#X text 273 297 0; +#X text 255 253 128; +#X text 254 203 256; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 512 float 1; +#A 0 0 3.76403e-05 0.000150591 0.000338793 0.000602275 0.000940949 +0.00135478 0.00184369 0.00240764 0.00304651 0.00376022 0.00454867 0.00541174 +0.0063493 0.00736117 0.00844723 0.00960734 0.0108413 0.0121489 0.01353 +0.0149843 0.0165117 0.0181119 0.0197847 0.0215298 0.0233469 0.0252359 +0.0271963 0.0292279 0.0313304 0.0335035 0.0357469 0.0380601 0.040443 +0.042895 0.0454159 0.0480052 0.0506626 0.0533877 0.05618 0.0590392 +0.0619648 0.0649563 0.0680134 0.0711355 0.0743222 0.077573 0.0808874 +0.0842649 0.0877051 0.0912073 0.0947711 0.0983959 0.102081 0.105826 +0.109631 0.113494 0.117416 0.121395 0.125431 0.129524 0.133672 0.137876 +0.142134 0.146446 0.150811 0.155229 0.159699 0.16422 0.168792 0.173413 +0.178084 0.182803 0.18757 0.192384 0.197244 0.20215 0.2071 0.212095 +0.217133 0.222214 0.227337 0.2325 0.237704 0.242948 0.24823 0.25355 +0.258907 0.264301 0.26973 0.275194 0.280691 0.286222 0.291785 0.297379 +0.303003 0.308658 0.314341 0.320052 0.32579 0.331555 0.337344 0.343159 +0.348997 0.354857 0.36074 0.366643 0.372567 0.37851 0.384471 0.390449 +0.396444 0.402454 0.40848 0.414519 0.420571 0.426634 0.432709 0.438794 +0.444889 0.450991 0.457101 0.463218 0.469339 0.475466 0.481596 0.487729 +0.493864 0.5 0.506136 0.512271 0.518404 0.524534 0.53066 0.536782 0.542899 +0.549009 0.555111 0.561205 0.56729 0.573365 0.579429 0.585481 0.59152 +0.597545 0.603556 0.609551 0.615529 0.62149 0.627433 0.633357 0.63926 +0.645143 0.651003 0.656841 0.662656 0.668445 0.67421 0.679948 0.685659 +0.691342 0.696997 0.702621 0.708215 0.713778 0.719309 0.724806 0.73027 +0.735699 0.741092 0.74645 0.75177 0.757052 0.762295 0.767499 0.772663 +0.777786 0.782867 0.787905 0.7929 0.79785 0.802756 0.807616 0.81243 +0.817197 0.821916 0.826587 0.831209 0.83578 0.840301 0.844771 0.849189 +0.853554 0.857866 0.862124 0.866328 0.870476 0.874569 0.878605 0.882584 +0.886506 0.890369 0.894174 0.897919 0.901605 0.905229 0.908793 0.912295 +0.915736 0.919113 0.922428 0.925678 0.928865 0.931987 0.935044 0.938036 +0.940961 0.94382 0.946613 0.949338 0.951995 0.954585 0.957106 0.959558 +0.96194 0.964254 0.966497 0.96867 0.970773 0.972804 0.974765 0.976654 +0.978471 0.980216 0.981889 0.983489 0.985016 0.98647 0.987852 0.989159 +0.990393 0.991553 0.992639 0.993651 0.994589 0.995452 0.99624 0.996954 +0.997593 0.998156 0.998645 0.999059 0.999398 0.999661 0.999849 0.999962 +1 0.999962 0.999849 0.999661 0.999398 0.999059 0.998645 0.998156 0.997592 +0.996953 0.996239 0.995451 0.994588 0.99365 0.992638 0.991552 0.990392 +0.989158 0.987851 0.986469 0.985015 0.983488 0.981887 0.980215 0.978469 +0.976652 0.974763 0.972803 0.970771 0.968669 0.966495 0.964252 0.961939 +0.959556 0.957104 0.954583 0.951993 0.949336 0.946611 0.943819 0.940959 +0.938034 0.935042 0.931985 0.928863 0.925676 0.922425 0.919111 0.915733 +0.912293 0.908791 0.905227 0.901602 0.897917 0.894171 0.890367 0.886503 +0.882582 0.878602 0.874566 0.870473 0.866325 0.862121 0.857863 0.853551 +0.849186 0.844768 0.840298 0.835777 0.831205 0.826584 0.821913 0.817194 +0.812427 0.807613 0.802753 0.797847 0.792896 0.787901 0.782863 0.777782 +0.77266 0.767496 0.762292 0.757048 0.751766 0.746446 0.741089 0.735695 +0.730266 0.724802 0.719305 0.713774 0.708211 0.702617 0.696993 0.691338 +0.685655 0.679944 0.674206 0.668441 0.662652 0.656837 0.650999 0.645139 +0.639256 0.633353 0.627429 0.621486 0.615525 0.609547 0.603552 0.597541 +0.591516 0.585477 0.579425 0.573361 0.567286 0.561201 0.555107 0.549004 +0.542895 0.536778 0.530656 0.52453 0.518399 0.512266 0.506132 0.499996 +0.49386 0.487725 0.481592 0.475462 0.469335 0.463213 0.457097 0.450987 +0.444885 0.43879 0.432705 0.42663 0.420566 0.414515 0.408476 0.40245 +0.39644 0.390445 0.384466 0.378505 0.372563 0.366639 0.360736 0.354853 +0.348993 0.343155 0.33734 0.331551 0.325786 0.320048 0.314337 0.308654 +0.303 0.297375 0.291781 0.286218 0.280687 0.27519 0.269726 0.264297 +0.258904 0.253547 0.248226 0.242944 0.237701 0.232497 0.227333 0.222211 +0.21713 0.212092 0.207097 0.202146 0.19724 0.19238 0.187566 0.182799 +0.17808 0.17341 0.168788 0.164217 0.159696 0.155226 0.150808 0.146443 +0.142131 0.137873 0.133669 0.129521 0.125428 0.121392 0.117413 0.113491 +0.109628 0.105823 0.102078 0.0983929 0.0947681 0.0912044 0.0877022 +0.0842621 0.0808846 0.0775702 0.0743194 0.0711327 0.0680107 0.0649537 +0.0619622 0.0590366 0.0561775 0.0533853 0.0506602 0.0480029 0.0454136 +0.0428928 0.0404408 0.038058 0.0357448 0.0335015 0.0313284 0.029226 +0.0271944 0.025234 0.0233452 0.0215281 0.019783 0.0181104 0.0165102 +0.0149829 0.0135286 0.0121476 0.01084 0.00960615 0.0084461 0.0073601 +0.00634828 0.00541082 0.00454783 0.00375944 0.00304583 0.00240701 0.00184315 +0.00135431 0.000940561 0.000601947 0.000338584 0.000150442 3.75807e-05 +; +#X coords 0 1 511 0 200 120 1; +#X restore 278 401 graph; +#X msg 156 415 0; +#X obj 50 464 osc~; +#X obj 50 416 samplerate~; +#X obj 50 487 *~ -0.5; +#X obj 50 510 +~ 0.5; +#X obj 42 535 tabwrite~ \$0-hann; +#X text 264 393 1; +#X text 257 511 0; +#X text 273 524 0; +#X obj 50 440 / 512; +#X obj 42 393 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 321 373 Hann window; +#X text 98 462 period 512; +#X text 40 368 recalculate Hann; +#X text 75 383 window table; +#X text 100 233 tens of Hz.; +#X text 80 215 <- frequency \,; +#X text 98 270 click here and; +#X text 170 286 <- see; +#X text 21 32 In this example we use a sub-patch ("pd fft-analysis") +to re-block the Fourier transform to 512 points. The signal is multiplied +by the Hann window function (which is just a raised cosine.) The magnitude +\, which is computed in the sub-patch \, is graphed below in this window. +The point at 255 corresponds to just below the Nyquist frequency. Phase +isn't shown \, and unlike the previous patch we don't control the initial +phase of the oscillator. (For fun \, try drawing other window functions +with the mouse...); +#X text 459 527 511; +#X connect 3 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X connect 14 0 15 1; +#X connect 15 0 17 0; +#X connect 16 0 23 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 23 0 15 0; +#X connect 24 0 16 0; +#X connect 24 0 14 0; +#X connect 24 0 19 0; diff --git a/desiredata/doc/3.audio.examples/I03.resynthesis.pd b/desiredata/doc/3.audio.examples/I03.resynthesis.pd new file mode 100644 index 00000000..f709d29f --- /dev/null +++ b/desiredata/doc/3.audio.examples/I03.resynthesis.pd @@ -0,0 +1,132 @@ +#N canvas 73 310 580 406 12; +#N canvas 265 48 643 640 fft-analysis 0; +#X obj 15 164 *~; +#X obj 14 99 inlet~; +#X obj 15 218 rfft~; +#X obj 36 140 tabreceive~ \$0-hann; +#X obj 14 353 *~; +#X obj 56 353 *~; +#X obj 15 8 block~ 512 4; +#X text 85 88 The inlet~ now re-uses 3/4 of the previous block \, along +with the 128 new samples.; +#X text 221 141 window function as before.; +#X obj 76 196 tabreceive~ \$0-gain; +#X obj 77 225 *~; +#X obj 16 506 *~; +#X obj 37 481 tabreceive~ \$0-hann; +#X obj 77 283 /~ 768; +#X text 98 301 divide by 3N/2 (factor of N because rfft and rifft aren't +normalized \, and 3/2 is the gain of overlap-4 reconstruction when +Hann window function is applied twice.); +#X text 120 216 Just to show we're doing something \, we multiply each +channel by a gain controlled by an array in the main window. The control +is quartic-scaled for easy editing.; +#X obj 78 251 *~; +#X text 92 357 Multiply the (complex-valued) spectrum amplitudes by +the (real-valued) gain-and-normalization-factor; +#X obj 15 399 rifft~; +#X text 89 396 Real-valued inverse Fourier transform. This uses only +the first N/@ points of its inputs \, supplying the rest by symmerty +(so it's OK that rfft~ obly puts out those N/2 points.) There's only +one outlet because the output is real-valued.; +#X obj 16 566 outlet~; +#X text 88 499 Multiply by the Hann window function again \, necessary +because the operation we performed might result in a signal that doesn't +go smoothly to zero at both ends.; +#X text 89 566 This repackages the output into 64-sample chunks for +the parent window. Since we're operating with an overlap \, the outlet~ +object performs an overlapped sum of the blocks computed in this window. +; +#X text 129 8 block~ object specifies vector size of 512 and overlap +four. This window now computes blocks of 512 samples at intervals of +128 samples computed on the parent patch.; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 2 1 5 0; +#X connect 3 0 0 1; +#X connect 4 0 18 0; +#X connect 5 0 18 1; +#X connect 9 0 10 0; +#X connect 9 0 10 1; +#X connect 10 0 16 0; +#X connect 10 0 16 1; +#X connect 11 0 20 0; +#X connect 12 0 11 1; +#X connect 13 0 4 1; +#X connect 13 0 5 1; +#X connect 16 0 13 0; +#X connect 18 0 11 0; +#X restore 26 289 pd fft-analysis; +#X text 290 362 updated for Pd version 0.39; +#N canvas 35 66 592 433 Hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 512 float 0; +#X coords 0 1 511 0 200 120 1; +#X restore 293 249 graph; +#X msg 171 263 0; +#X obj 65 312 osc~; +#X obj 65 264 samplerate~; +#X obj 65 335 *~ -0.5; +#X obj 65 358 +~ 0.5; +#X obj 57 383 tabwrite~ \$0-hann; +#X text 279 241 1; +#X text 272 359 0; +#X text 288 372 0; +#X obj 65 288 / 512; +#X obj 57 241 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 336 221 Hann window; +#X text 113 310 period 512; +#X text 90 215 recalculate Hann; +#X text 125 230 window table; +#X obj 57 146 loadbang; +#X msg 79 179 \; pd dsp 1; +#X text 40 27 The Hann window is now recomputed on 'loadbang' to make +the file smaller (it doesn't have to be saved with the array.); +#X text 474 375 511; +#X connect 1 0 2 1; +#X connect 2 0 4 0; +#X connect 3 0 10 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 10 0 2 0; +#X connect 11 0 3 0; +#X connect 11 0 1 0; +#X connect 11 0 6 0; +#X connect 16 0 11 0; +#X connect 16 0 17 0; +#X restore 192 318 pd Hann-window; +#X obj 27 323 output~; +#X obj 25 264 noise~; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-gain 256 float 3; +#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1 256 -0.01 512 60 1; +#X restore 22 168 graph; +#X msg 192 264 const 0; +#X obj 192 293 s \$0-gain; +#X text 138 0 FOURIER RESYNTHESIS; +#X text 6 218 0; +#X text 6 159 1; +#X text 19 228 0; +#X text 516 231 22K; +#X text 270 261 <- reset gain; +#X text 224 148 GAIN; +#X text 21 24 Using Fourier resynthesis you can take an incoming sound +\, operate on its spectrum \, and hear the result. Here we start with +white noise and apply a frequency-dependent gain \, which works as +a graphic equalizer. There are N/2 = 256 points \, each spaced SR/512 +Hz. apart (although their frequency ranges overlap). Open the "fft-analysis" +patch to see the workings.; +#X connect 0 0 3 0; +#X connect 0 0 3 1; +#X connect 4 0 0 0; +#X connect 6 0 7 0; diff --git a/desiredata/doc/3.audio.examples/I04.noisegate.pd b/desiredata/doc/3.audio.examples/I04.noisegate.pd new file mode 100644 index 00000000..0a8bd12a --- /dev/null +++ b/desiredata/doc/3.audio.examples/I04.noisegate.pd @@ -0,0 +1,330 @@ +#N canvas 42 28 657 564 12; +#X floatatom 316 376 0 0 0 0 - - -; +#X floatatom 81 384 0 0 100 0 - - -; +#N canvas 98 0 648 669 fft-analysis 0; +#X obj 35 589 *~; +#X obj 143 305 *~; +#X obj 158 150 *~; +#X obj 35 72 *~; +#X obj 76 527 *~; +#X obj 35 44 inlet~; +#X obj 35 528 *~; +#X obj 34 101 rfft~; +#X obj 35 558 rifft~; +#X obj 36 616 outlet~; +#X obj 119 149 *~; +#X obj 119 176 +~; +#X obj 165 278 r mask-level; +#X obj 100 422 /~; +#X obj 355 23 block~ 1024 4; +#X text 176 446 is signal power and "m" is mask.; +#X obj 131 332 -~; +#X obj 131 355 max~ 0; +#X obj 99 448 q8_sqrt~; +#X text 175 464 (zero if s < m).; +#X obj 144 256 tabreceive~ \$0-mask; +#X obj 76 72 tabreceive~ \$0-hann; +#X obj 69 590 tabreceive~ \$0-hann; +#N canvas 91 250 910 495 calculate-mask 0; +#X obj 125 379 inlet~; +#X msg 371 283 0; +#X msg 371 166 0; +#X obj 240 196 float; +#X obj 294 200 + 1; +#X obj 240 144 bang~; +#X obj 240 169 spigot; +#X floatatom 411 218 0 0 0 0 - - -; +#X obj 315 408 -~; +#X obj 371 258 sel 0; +#X obj 327 443 *~; +#X obj 293 443 +~; +#X floatatom 351 313 0 0 0 0 - - -; +#X obj 240 219 t f f; +#X obj 370 113 r make-mask; +#X obj 371 141 t b f; +#X obj 411 165 /; +#X text 483 212 number of; +#X text 491 227 frames; +#X floatatom 481 166 0 0 0 0 - - -; +#X obj 480 113 r window-msec; +#X obj 481 136 / 4; +#X text 521 133 hop size (analysis; +#X text 546 149 period) in msec; +#X obj 359 408 tabreceive~ \$0-mask; +#X obj 292 468 tabsend~ \$0-mask; +#X obj 371 218 <; +#X obj 235 258 expr 1/($f1+1); +#X text 134 17 calculate a mask using N msec of background noise; +#X text 43 354 current power (for each channel); +#X text 367 430 average the current power into the last mask to get +the new mask. The new value is weighted 1/n on the nth iteration.; +#X text 390 312 weight to average in new power to mask; +#X text 11 203 loop counting to desired; +#X text 78 219 number of frames; +#X text 72 39 This loops for "make-mask" milliseconds \, averaging +power in each channel over that amount of time. This is done by a moving +average whose weight is adjusted to average each new value equally +with each of the accumulating ones.; +#X connect 0 0 8 0; +#X connect 1 0 12 0; +#X connect 2 0 3 1; +#X connect 2 0 26 0; +#X connect 3 0 13 0; +#X connect 3 0 4 0; +#X connect 4 0 3 1; +#X connect 5 0 6 0; +#X connect 6 0 3 0; +#X connect 7 0 26 1; +#X connect 8 0 10 0; +#X connect 9 0 1 0; +#X connect 10 0 11 1; +#X connect 11 0 25 0; +#X connect 12 0 10 1; +#X connect 13 0 26 0; +#X connect 13 1 27 0; +#X connect 14 0 15 0; +#X connect 15 0 2 0; +#X connect 15 1 16 0; +#X connect 16 0 7 0; +#X connect 20 0 21 0; +#X connect 21 0 16 1; +#X connect 21 0 19 0; +#X connect 24 0 8 1; +#X connect 24 0 11 0; +#X connect 26 0 6 1; +#X connect 26 0 9 0; +#X connect 27 0 12 0; +#X restore 132 203 pd calculate-mask; +#X text 91 98 real Fourier transform; +#X obj 357 57 loadbang; +#X msg 357 80 \; pd dsp 1 \; window-size 1024; +#X text 193 355 ... but not less than zero; +#X text 101 561 real inverse Fourier transform; +#X text 196 498 normalize by 2/(3N) where N is window size; +#X text 168 332 current power ("s") minus level-adjusted mask ("m") +; +#X text 156 175 compute power (call it "s") in each channel; +#X obj 123 395 +~ 1e-20; +#X text 203 395 protect against division by zero; +#X text 179 426 compute sqrt((s-m)/s) where "s"; +#X text 296 204 <- subwindow calculates noise mask; +#X obj 98 499 /~ 1536; +#X connect 0 0 9 0; +#X connect 1 0 16 1; +#X connect 2 0 11 1; +#X connect 3 0 7 0; +#X connect 4 0 8 1; +#X connect 5 0 3 0; +#X connect 6 0 8 0; +#X connect 7 0 6 0; +#X connect 7 0 10 0; +#X connect 7 0 10 1; +#X connect 7 1 4 0; +#X connect 7 1 2 0; +#X connect 7 1 2 1; +#X connect 8 0 0 0; +#X connect 10 0 11 0; +#X connect 11 0 16 0; +#X connect 11 0 23 0; +#X connect 11 0 32 0; +#X connect 12 0 1 1; +#X connect 13 0 18 0; +#X connect 16 0 17 0; +#X connect 17 0 13 0; +#X connect 18 0 36 0; +#X connect 20 0 1 0; +#X connect 21 0 3 1; +#X connect 22 0 0 1; +#X connect 25 0 26 0; +#X connect 32 0 13 1; +#X connect 36 0 6 1; +#X connect 36 0 4 1; +#X restore 80 441 pd fft-analysis; +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 1024 float 0; +#X coords 0 1 1023 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 331 478 pd hann-window; +#X text 197 355 noise; +#N canvas 132 255 660 373 insample 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample 155948 float 0; +#X coords 0 1 155947 -1 400 150 1; +#X restore 236 25 graph; +#X obj 19 23 r read-sample; +#X obj 19 74 unpack s f; +#X obj 116 74 s insamprate; +#X obj 19 184 soundfiler; +#X obj 19 208 s insamplength; +#X text 113 252 read a sample; +#X obj 33 251 loadbang; +#X obj 19 100 t s b; +#X obj 75 99 symbol \$0-sample; +#X obj 19 135 pack s s; +#X msg 19 160 read -resize \$1 \$2; +#X obj 74 46 44100; +#X msg 33 275 \; read-sample ../sound/bell.aiff; +#X msg 31 322 \; read-sample ../sound/voice.wav; +#X obj 19 47 t a b; +#X connect 1 0 15 0; +#X connect 2 0 8 0; +#X connect 2 1 3 0; +#X connect 4 0 5 0; +#X connect 7 0 13 0; +#X connect 8 0 10 0; +#X connect 8 1 9 0; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 11 0 4 0; +#X connect 12 0 3 0; +#X connect 15 0 2 0; +#X connect 15 1 12 0; +#X restore 331 456 pd insample; +#X obj 316 401 s mask-level; +#X floatatom 202 379 0 0 100 0 - - -; +#X text 317 325 on; +#X text 362 326 off; +#X text 317 309 masking; +#X text 290 5 DENOISER; +#X msg 361 349 0; +#N canvas 190 43 812 571 test-signal 0; +#X obj 75 328 line~; +#X obj 75 250 f; +#X obj 251 164 r insamprate; +#X obj 583 219 *~; +#X obj 76 442 *~; +#X obj 583 110 noise~; +#X obj 370 493 +~; +#X obj 98 415 dbtorms; +#X obj 605 193 dbtorms; +#X obj 98 390 inlet; +#X obj 605 169 inlet; +#X obj 371 541 outlet~; +#X obj 236 139 r insamplength; +#X msg 75 304 0 \, \$1 \$2; +#X obj 75 276 pack 0 0; +#X obj 236 248 /; +#X obj 251 190 * 0.001; +#X obj 251 219 t b f; +#X obj 370 516 hip~ 5; +#X obj 75 136 loadbang; +#X obj 75 182 metro 1000; +#X obj 583 135 bp~ 10000 3; +#X obj 75 161 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X text 270 247 sample duration \, msec; +#X text 126 84 looped sample playback; +#X obj 75 356 tabread4~ \$0-sample; +#X text 580 83 filtered noise; +#X text 105 15 TEST SIGNAL: looped sample plus noise. The inlets control +amplitude of each in dB.; +#X connect 0 0 25 0; +#X connect 1 0 14 0; +#X connect 2 0 16 0; +#X connect 3 0 6 1; +#X connect 4 0 6 0; +#X connect 5 0 21 0; +#X connect 6 0 18 0; +#X connect 7 0 4 1; +#X connect 8 0 3 1; +#X connect 9 0 7 0; +#X connect 10 0 8 0; +#X connect 12 0 1 1; +#X connect 12 0 15 0; +#X connect 13 0 0 0; +#X connect 14 0 13 0; +#X connect 15 0 14 1; +#X connect 15 0 20 1; +#X connect 16 0 17 0; +#X connect 17 0 15 0; +#X connect 17 1 15 1; +#X connect 18 0 11 0; +#X connect 19 0 22 0; +#X connect 20 0 1 0; +#X connect 21 0 3 0; +#X connect 22 0 20 0; +#X connect 25 0 4 0; +#X restore 81 409 pd test-signal; +#X text 69 357 sampler; +#X text 443 311 calculate noise mask; +#X obj 80 488 output~; +#X msg 462 338 \; make-mask 2000; +#X msg 316 348 15; +#N canvas 0 0 592 442 mask-table 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-mask 512 float 0; +#X coords 0 500 511 0 400 300 1; +#X restore 110 76 graph; +#X text 25 14 This table ($0-mask) is the average power measured in +each channel of the spectrum \, presumed to represent the noise floor. +; +#X restore 331 500 pd mask-table; +#X text 80 322 amplitudes (dB); +#X text 68 26 This patch attempts to scrub the noise floor from a sample +in two steps. First using the "make-mask" message (which is caught +in the "fft-analysis" window) \, you estimate the background spectrum. +You would normally do this at a moment when only the background noise +is audible. Then \, turn on "masking" (to 15 by default \, but try +other values) and the patch will try to clean the background noise +out of a signal.; +#X text 67 149 For this demonstration \, you control the amplitudes +of a looping sample and a filtered noise source. Normally you'd hit +"calculate noise mask" with only hte noise turned on \, then turn both +the noise and the sampler on \, and also "masking" \, to see if the +patch can clean the noise out of the signal. Open the "fft-analysis" +window to see the algorithm \, or the "insample" window to change samples +\, or "mask-table" to see the current mask (the average signal power +of the noise to clean out of the signal).; +#X connect 0 0 6 0; +#X connect 1 0 13 0; +#X connect 2 0 16 0; +#X connect 2 0 16 1; +#X connect 7 0 13 1; +#X connect 12 0 0 0; +#X connect 13 0 2 0; +#X connect 18 0 0 0; diff --git a/desiredata/doc/3.audio.examples/I05.compressor.pd b/desiredata/doc/3.audio.examples/I05.compressor.pd new file mode 100644 index 00000000..10fe3375 --- /dev/null +++ b/desiredata/doc/3.audio.examples/I05.compressor.pd @@ -0,0 +1,237 @@ +#N canvas 557 371 620 428 12; +#N canvas 297 254 646 523 fft-analysis 0; +#X obj 115 409 *~; +#X obj 75 409 *~; +#X obj 76 114 *~; +#X obj 77 88 inlet~; +#X obj 76 137 rfft~; +#X obj 75 466 *~; +#X obj 171 177 *~; +#X obj 75 432 rifft~; +#X obj 75 489 outlet~; +#X obj 137 177 *~; +#X obj 137 200 +~; +#X obj 461 85 block~ 1024 4; +#X obj 137 351 clip~; +#X obj 178 306 r squelch; +#X obj 110 114 tabreceive~ \$0-hann; +#X obj 177 329 expr 0.01*$f1*$f1; +#X obj 461 116 loadbang; +#X obj 137 381 *~ 0.00065; +#X obj 137 225 +~ 1e-20; +#X obj 136 262 q8_rsqrt~; +#X obj 109 466 tabreceive~ \$0-hann; +#X text 31 5 As in the previous patch \, this works by multiplying +each channel of the Fourier analysis by a real number computed from +the magnitude. If the magnutude is "m" \, the correction factor is +1/m \, but only to an upper limit controlled by the "squelch" parameter. +; +#X text 211 174 squared magnitude; +#X text 219 225 protect against divide-by-zero; +#X text 223 261 quick 8-bit-accurate reciprocal square root; +#X text 222 277 (done by table lookup - about 0.25% accurate); +#X text 193 351 limit the gain to squelch*squelch/100; +#X text 238 381 normalize for 1024-point \, overlap-4 Hann; +#X text 151 409 multiply gain by real and complex part; +#X text 152 429 of the amplitude; +#X text 130 137 outputs complex amplitudes; +#X msg 461 139 \; pd dsp 1 \; window-size 1024 \; squelch 10 \; squelch-set +set 10; +#X connect 0 0 7 1; +#X connect 1 0 7 0; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 4 0 9 0; +#X connect 4 0 9 1; +#X connect 4 0 1 0; +#X connect 4 1 6 0; +#X connect 4 1 6 1; +#X connect 4 1 0 0; +#X connect 5 0 8 0; +#X connect 6 0 10 1; +#X connect 7 0 5 0; +#X connect 9 0 10 0; +#X connect 10 0 18 0; +#X connect 12 0 17 0; +#X connect 13 0 15 0; +#X connect 14 0 2 1; +#X connect 15 0 12 2; +#X connect 16 0 31 0; +#X connect 17 0 0 1; +#X connect 17 0 1 1; +#X connect 18 0 19 0; +#X connect 19 0 12 0; +#X connect 20 0 5 1; +#X restore 42 330 pd fft-analysis; +#X floatatom 57 196 0 0 500 0 - squelch-set -; +#X obj 57 220 s squelch; +#N canvas 190 43 427 657 test-signal 0; +#X obj 90 444 line~; +#X obj 90 369 f; +#X obj 90 524 outlet~; +#X msg 90 423 0 \, \$1 \$2; +#X obj 90 397 pack 0 0; +#X obj 190 344 /; +#X obj 317 295 * 0.001; +#X obj 90 497 hip~ 5; +#X obj 35 246 loadbang; +#X msg 90 322 1; +#X obj 90 344 metro 1000; +#X obj 259 272 t b b f; +#X obj 117 270 t b f; +#X obj 90 469 tabread4~ \$0-sample; +#X text 21 28 test signal: looped sample playback; +#X obj 67 131 hip~ 5; +#X obj 67 107 adc~ 1; +#X obj 129 131 s insamprate; +#X obj 67 70 inlet; +#X obj 129 107 samplerate~; +#X obj 116 246 r \$0-samplength; +#X obj 259 246 r \$0-insamprate; +#X obj 67 154 tabwrite~ \$0-sample; +#X connect 0 0 13 0; +#X connect 1 0 4 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 1; +#X connect 5 0 10 1; +#X connect 6 0 5 1; +#X connect 7 0 2 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 1 0; +#X connect 11 0 9 0; +#X connect 11 1 5 0; +#X connect 11 2 6 0; +#X connect 12 0 9 0; +#X connect 12 1 5 0; +#X connect 12 1 1 1; +#X connect 13 0 7 0; +#X connect 15 0 22 0; +#X connect 16 0 15 0; +#X connect 18 0 19 0; +#X connect 18 0 16 0; +#X connect 19 0 17 0; +#X connect 20 0 12 0; +#X connect 21 0 11 0; +#X restore 43 303 pd test-signal; +#X obj 43 359 output~; +#N canvas 388 86 722 350 insample 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample 155948 float 0; +#X coords 0 1 155947 -1 400 150 1; +#X restore 259 24 graph; +#X obj 19 23 r read-sample; +#X obj 19 74 unpack s f; +#X obj 19 184 soundfiler; +#X text 356 250 read a sample; +#X obj 276 249 loadbang; +#X obj 19 100 t s b; +#X obj 75 99 symbol \$0-sample; +#X obj 19 135 pack s s; +#X msg 19 160 read -resize \$1 \$2; +#X obj 74 46 44100; +#X obj 19 47 t a b; +#X msg 276 273 \; read-sample ../sound/bell.aiff; +#X obj 29 208 s \$0-samplength; +#X obj 116 74 s \$0-insamprate; +#X obj 19 247 /; +#X obj 19 271 * 1000; +#X obj 19 294 s \$0-samp-msec; +#X obj 57 247 r \$0-insamprate; +#X connect 1 0 11 0; +#X connect 2 0 6 0; +#X connect 2 1 14 0; +#X connect 3 0 13 0; +#X connect 3 0 15 0; +#X connect 5 0 12 0; +#X connect 6 0 8 0; +#X connect 6 1 7 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; +#X connect 9 0 3 0; +#X connect 10 0 14 0; +#X connect 11 0 2 0; +#X connect 11 1 10 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 18 0 15 1; +#X restore 223 313 pd insample; +#X text 362 406 updated for Pd version 0.39; +#X text 56 43 Here we divide each complex channel in the Fourier analysis +by its own magnitude to "flatten" the spectrum. The "squelch" control +limits the amplitude boost the algorithm will apply. If infinite \, +you'll get a white spectrum. If less \, the louder parts of the spectrum +will be flattened but the quieter ones will only be boosted by the +squelch value.; +#X text 73 6 DYNAMIC RANGE COMPRESSION BY FOURIER ANALYSIS CHANNEL +; +#X floatatom 223 366 5 0 0 0 - #0-samp-msec -; +#X obj 43 282 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 62 281 <- record; +#X text 276 365 sample length \, msec; +#X msg 292 183 ../sound/bell.aiff; +#X msg 292 208 ../sound/voice.wav; +#X msg 292 233 ../sound/voice2.wav; +#X text 91 197 <- squelch; +#X text 295 161 change input sound; +#X obj 292 259 s read-sample; +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 1024 float 0; +#X coords 0 1 1023 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 223 335 pd hann-window; +#X connect 0 0 4 0; +#X connect 0 0 4 1; +#X connect 1 0 2 0; +#X connect 3 0 0 0; +#X connect 10 0 3 0; +#X connect 13 0 18 0; +#X connect 14 0 18 0; +#X connect 15 0 18 0; diff --git a/desiredata/doc/3.audio.examples/I06.timbre.stamp.pd b/desiredata/doc/3.audio.examples/I06.timbre.stamp.pd new file mode 100644 index 00000000..0fd540cd --- /dev/null +++ b/desiredata/doc/3.audio.examples/I06.timbre.stamp.pd @@ -0,0 +1,370 @@ +#N canvas 72 0 668 530 12; +#N canvas 147 0 795 617 fft-analysis 0; +#X obj 94 511 *~; +#X obj 55 511 *~; +#X obj 413 356 *~; +#X obj 372 356 *~; +#X obj 372 379 +~; +#X obj 54 183 *~; +#X obj 54 158 inlet~; +#X obj 54 206 rfft~; +#X obj 54 560 *~; +#X obj 141 245 *~; +#X obj 372 333 rfft~; +#X obj 54 535 rifft~; +#X obj 54 583 outlet~; +#X obj 107 245 *~; +#X obj 107 268 +~; +#X text 458 408 modulus; +#X obj 107 420 *~; +#X obj 600 13 block~ 1024 4; +#X obj 107 398 clip~; +#X obj 87 184 tabreceive~ \$0-hann; +#X obj 599 53 loadbang; +#X obj 148 346 r squelch; +#X obj 147 369 expr 0.01*$f1*$f1; +#X obj 107 294 +~ 1e-20; +#X obj 108 480 *~ 0.00065; +#X obj 87 560 tabreceive~ \$0-hann; +#X obj 373 307 *~; +#X obj 373 282 inlet~; +#X obj 406 308 tabreceive~ \$0-hann; +#X obj 107 321 q8_rsqrt~; +#X obj 372 402 q8_sqrt~; +#X text 458 425 of control; +#X text 456 442 amplitude; +#X text 196 248 reciprocal; +#X text 199 267 modulus of; +#X text 195 287 filter input; +#X text 196 306 amplitude; +#X msg 599 76 \; pd dsp 1 \; window-size 1024 \; squelch 30 \; squelch-set +set 30; +#X text 115 159 filter input; +#X text 438 282 control source; +#X text 434 332 Fourier transform; +#X text 28 17 Internal workings of the timbre stamping algorithm. First +the "filter input" is treated as in the compressor patch \, multiplying +each channel amplitude by one over its modulus (but limited by the +"squelch" parameter.) It is then multiplied by the modulus of the channel +amplitude for the control source (which is Fourier analyzed in parallel +with the filter input.); +#X text 145 422 multiply the two amplitude; +#X text 143 439 factors (for compression; +#X text 145 455 and to apply new timbre); +#X connect 0 0 11 1; +#X connect 1 0 11 0; +#X connect 2 0 4 1; +#X connect 3 0 4 0; +#X connect 4 0 30 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 7 0 13 0; +#X connect 7 0 13 1; +#X connect 7 0 1 0; +#X connect 7 1 9 0; +#X connect 7 1 9 1; +#X connect 7 1 0 0; +#X connect 8 0 12 0; +#X connect 9 0 14 1; +#X connect 10 0 3 0; +#X connect 10 0 3 1; +#X connect 10 1 2 0; +#X connect 10 1 2 1; +#X connect 11 0 8 0; +#X connect 13 0 14 0; +#X connect 14 0 23 0; +#X connect 16 0 24 0; +#X connect 18 0 16 0; +#X connect 19 0 5 1; +#X connect 20 0 37 0; +#X connect 21 0 22 0; +#X connect 22 0 18 2; +#X connect 23 0 29 0; +#X connect 24 0 0 1; +#X connect 24 0 1 1; +#X connect 25 0 8 1; +#X connect 26 0 10 0; +#X connect 27 0 26 0; +#X connect 28 0 26 1; +#X connect 29 0 18 0; +#X connect 30 0 16 1; +#X restore 86 444 pd fft-analysis; +#X text 137 12 CORT&ZACK's SECRET; +#X text 27 422 filter; +#X text 29 437 input; +#X text 232 441 source; +#X text 233 422 control; +#X floatatom 53 300 0 0 500 0 - squelch-set -; +#X obj 53 324 s squelch; +#X obj 86 468 output~; +#X msg 157 278 ../sound/bell.aiff; +#X msg 157 303 ../sound/voice.wav; +#X msg 157 328 ../sound/voice2.wav; +#X obj 157 354 s read-sound1; +#X msg 373 280 ../sound/bell.aiff; +#X msg 373 305 ../sound/voice.wav; +#X msg 373 330 ../sound/voice2.wav; +#X obj 373 355 s read-sound2; +#X text 386 256 control source; +#X text 169 255 filter input; +#X text 255 231 change input sounds; +#X floatatom 454 409 5 0 0 0 - #0-samp-msec -; +#X obj 87 394 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 215 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#N canvas 190 43 661 593 test-signals 0; +#X obj 90 444 line~; +#X obj 90 369 f; +#X obj 90 524 outlet~; +#X msg 90 423 0 \, \$1 \$2; +#X obj 90 397 pack 0 0; +#X obj 190 344 /; +#X obj 249 325 * 0.001; +#X obj 90 497 hip~ 5; +#X obj 35 246 loadbang; +#X msg 90 322 1; +#X obj 90 344 metro 1000; +#X obj 191 302 t b b f; +#X obj 117 270 t b f; +#X obj 90 469 tabread4~ \$0-sample; +#X text 21 28 test signal: looped sample playback; +#X obj 40 159 hip~ 5; +#X obj 40 135 adc~ 1; +#X obj 102 159 s insamprate; +#X obj 40 98 inlet; +#X obj 102 135 samplerate~; +#X obj 116 246 r \$0-samplength; +#X obj 191 276 r \$0-insamprate; +#X obj 40 182 tabwrite~ \$0-sample; +#X obj 398 437 line~; +#X obj 398 362 f; +#X obj 398 517 outlet~; +#X msg 398 416 0 \, \$1 \$2; +#X obj 398 390 pack 0 0; +#X obj 498 337 /; +#X obj 557 318 * 0.001; +#X obj 398 490 hip~ 5; +#X obj 343 239 loadbang; +#X msg 398 315 1; +#X obj 398 337 metro 1000; +#X obj 499 295 t b b f; +#X obj 425 263 t b f; +#X obj 348 152 hip~ 5; +#X obj 348 128 adc~ 1; +#X obj 348 91 inlet; +#X obj 410 128 samplerate~; +#X obj 410 152 s insamprate2; +#X obj 348 175 tabwrite~ \$0-sample2; +#X obj 424 239 r \$0-samplength2; +#X obj 499 269 r \$0-insamprate2; +#X obj 398 462 tabread4~ \$0-sample2; +#X connect 0 0 13 0; +#X connect 1 0 4 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 1; +#X connect 5 0 10 1; +#X connect 6 0 5 1; +#X connect 7 0 2 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 1 0; +#X connect 11 0 9 0; +#X connect 11 1 5 0; +#X connect 11 2 6 0; +#X connect 12 0 9 0; +#X connect 12 1 5 0; +#X connect 12 1 1 1; +#X connect 13 0 7 0; +#X connect 15 0 22 0; +#X connect 16 0 15 0; +#X connect 18 0 19 0; +#X connect 18 0 16 0; +#X connect 19 0 17 0; +#X connect 20 0 12 0; +#X connect 21 0 11 0; +#X connect 23 0 44 0; +#X connect 24 0 27 0; +#X connect 26 0 23 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 28 0 33 1; +#X connect 29 0 28 1; +#X connect 30 0 25 0; +#X connect 31 0 32 0; +#X connect 32 0 33 0; +#X connect 33 0 24 0; +#X connect 34 0 32 0; +#X connect 34 1 28 0; +#X connect 34 2 29 0; +#X connect 35 0 32 0; +#X connect 35 1 28 0; +#X connect 35 1 24 1; +#X connect 36 0 41 0; +#X connect 37 0 36 0; +#X connect 38 0 39 0; +#X connect 38 0 37 0; +#X connect 39 0 40 0; +#X connect 42 0 35 0; +#X connect 43 0 34 0; +#X connect 44 0 30 0; +#X restore 87 415 pd test-signals; +#X text 104 393 <- record ->; +#N canvas 388 86 722 350 insample2 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample2 62079 float 0; +#X coords 0 1 62078 -1 400 150 1; +#X restore 298 24 graph; +#X obj 19 74 unpack s f; +#X obj 19 184 soundfiler; +#X text 356 250 read a sample; +#X obj 276 249 loadbang; +#X obj 19 100 t s b; +#X obj 19 135 pack s s; +#X msg 19 160 read -resize \$1 \$2; +#X obj 74 46 44100; +#X obj 19 47 t a b; +#X obj 19 247 /; +#X obj 19 271 * 1000; +#X obj 19 23 r read-sound2; +#X obj 116 74 s \$0-insamprate2; +#X obj 75 99 symbol \$0-sample2; +#X obj 29 208 s \$0-samplength2; +#X obj 57 247 r \$0-insamprate2; +#X obj 19 294 s \$0-samp2-msec; +#X msg 276 273 \; read-sound2 ../sound/voice.wav; +#X connect 1 0 5 0; +#X connect 1 1 13 0; +#X connect 2 0 10 0; +#X connect 2 0 15 0; +#X connect 4 0 18 0; +#X connect 5 0 6 0; +#X connect 5 1 14 0; +#X connect 6 0 7 0; +#X connect 7 0 2 0; +#X connect 8 0 13 0; +#X connect 9 0 1 0; +#X connect 9 1 8 0; +#X connect 10 0 11 0; +#X connect 11 0 17 0; +#X connect 12 0 9 0; +#X connect 14 0 6 1; +#X connect 16 0 10 1; +#X restore 334 430 pd insample2; +#N canvas 388 86 722 350 insample1 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample 155948 float 0; +#X coords 0 1 155947 -1 400 150 1; +#X restore 259 24 graph; +#X obj 19 74 unpack s f; +#X obj 19 184 soundfiler; +#X text 356 250 read a sample; +#X obj 276 249 loadbang; +#X obj 19 100 t s b; +#X obj 75 99 symbol \$0-sample; +#X obj 19 135 pack s s; +#X msg 19 160 read -resize \$1 \$2; +#X obj 74 46 44100; +#X obj 19 47 t a b; +#X obj 29 208 s \$0-samplength; +#X obj 116 74 s \$0-insamprate; +#X obj 19 247 /; +#X obj 19 271 * 1000; +#X obj 19 294 s \$0-samp-msec; +#X obj 57 247 r \$0-insamprate; +#X obj 19 23 r read-sound1; +#X msg 276 273 \; read-sound1 ../sound/bell.aiff; +#X connect 1 0 5 0; +#X connect 1 1 12 0; +#X connect 2 0 11 0; +#X connect 2 0 13 0; +#X connect 4 0 18 0; +#X connect 5 0 7 0; +#X connect 5 1 6 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 2 0; +#X connect 9 0 12 0; +#X connect 10 0 1 0; +#X connect 10 1 9 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 16 0 13 1; +#X connect 17 0 10 0; +#X restore 334 408 pd insample1; +#X floatatom 453 432 5 0 0 0 - #0-samp2-msec -; +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 1024 float 0; +#X coords 0 1 1023 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 334 455 pd hann-window; +#X text 509 412 sample lengths \,; +#X text 510 427 msec; +#X text 27 35 This is a Fourier-based "vocoder" (perhaps better called +a "timbre stamp") like the one the Convolution brothers use. The "control +source" is analyzed to get its spectral envelope \, which is then stamped +onto the "filter input" by adjusting the amplitudes of its Fourier +transform. The "filter input" is first whitened by the compression +algorithm from the previous patch in this series. The best value of +"squelch" to use depends critically on what kind of sounds are used +for the filter input and the control source.; +#X text 402 498 updated for Pd version 0.39; +#X connect 0 0 8 0; +#X connect 0 0 8 1; +#X connect 6 0 7 0; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 13 0 16 0; +#X connect 14 0 16 0; +#X connect 15 0 16 0; +#X connect 21 0 23 0; +#X connect 22 0 23 1; +#X connect 23 0 0 0; +#X connect 23 1 0 1; diff --git a/desiredata/doc/3.audio.examples/I07.phase.vocoder.pd b/desiredata/doc/3.audio.examples/I07.phase.vocoder.pd new file mode 100644 index 00000000..735b8cd2 --- /dev/null +++ b/desiredata/doc/3.audio.examples/I07.phase.vocoder.pd @@ -0,0 +1,548 @@ +#N canvas 425 33 744 599 12; +#X floatatom 494 315 5 0 0 0 - transpo-set -; +#X floatatom 167 383 3 0 0 0 - speed-set -; +#X floatatom 55 385 7 0 0 0 - location-set -; +#N canvas 90 42 821 693 fft-analysis 0; +#X obj 51 477 *~; +#X obj 18 477 *~; +#X obj 18 499 -~; +#X obj 167 475 *~; +#X obj 136 475 *~; +#X obj 136 497 +~; +#X obj 109 193 *~; +#X obj 78 193 *~; +#X obj 50 193 *~; +#X obj 19 193 *~; +#X obj 19 218 +~; +#X obj 127 379 *~; +#X obj 20 622 *~; +#X obj 238 430 rfft~; +#X obj 108 161 rfft~; +#X obj 19 564 rifft~; +#X obj 21 646 outlet~; +#X obj 97 379 *~; +#X obj 97 401 +~; +#X obj 124 218 -~; +#X obj 18 431 *~; +#X obj 51 432 *~; +#X obj 127 622 r window-size; +#X obj 426 595 r window-size; +#X obj 426 644 block~; +#X obj 19 349 +~ 1e-15; +#X obj 19 598 *~; +#X obj 52 598 tabreceive~ \$0-hann; +#X obj 127 643 expr 2/(3*$f1); +#X obj 591 563 loadbang; +#X msg 591 589 \; pd dsp 1 \; window-size 2048 \; transpo 0 \; rewind +bang; +#X msg 426 619 set \$1 4; +#X obj 97 425 q8_rsqrt~; +#N canvas 139 105 1006 799 read-windows 0; +#X obj 18 693 *~; +#X obj 340 448 r window-size; +#X obj 156 300 f; +#X obj 102 91 r window-size; +#X obj 102 139 /; +#X obj 195 695 *~; +#X obj 156 255 bang~; +#X obj 17 551 line~; +#X obj 102 164 * 1000; +#X obj 288 224 r speed; +#X obj 178 276 r location; +#X obj 198 302 +; +#X obj 288 272 *; +#X obj 183 470 +; +#X obj 143 446 t f f; +#X msg 17 523 \$1 \, \$2 \$3; +#X obj 17 496 pack 0 0 0; +#X obj 178 371 / 1000; +#X obj 156 394 *; +#X text 188 394 reading location (samples); +#X obj 51 597 / 4; +#X obj 288 245 * 0.01; +#X floatatom 340 498 7 0 0 0 - - -; +#X obj 340 474 *; +#X obj 499 365 r transpo; +#X obj 499 387 * 0.01; +#X obj 501 408 + 69; +#X obj 502 429 mtof; +#X obj 502 451 / 440; +#X obj 375 474 t b f; +#X obj 19 719 outlet~; +#X obj 195 720 outlet~; +#X obj 218 664 tabreceive~ \$0-hann; +#X obj 803 386 r location; +#X msg 803 409 0; +#X obj 803 432 s speed; +#X obj 768 508 r speed; +#X msg 768 532 set \$1; +#X obj 768 557 s speed-set; +#X text 411 498 stretched window size (samples); +#X obj 877 507 r transpo; +#X msg 877 533 set \$1; +#X obj 877 558 s transpo-set; +#X obj 808 94 r location; +#X msg 826 278 set \$1; +#X obj 808 140 t b f; +#X obj 826 257 f; +#X obj 754 171 int; +#X obj 754 203 sel 0; +#X msg 813 174 1; +#X msg 813 197 0; +#X obj 754 228 del 300; +#X obj 826 302 s location-set; +#X obj 17 637 tabread4~ \$0-sample; +#X obj 194 637 tabread4~ \$0-sample; +#X obj 178 347 r \$0-insamprate; +#X obj 528 586 r rewind; +#X msg 528 744 \; location \$1; +#X floatatom 111 187 5 0 0 0 - - -; +#X obj 102 115 t f b; +#X obj 142 139 samplerate~; +#X obj 102 208 / 4; +#X obj 233 306 s see-loc; +#X obj 817 116 r see-loc; +#X obj 193 420 / 2; +#X obj 156 420 -; +#X text 229 417 back up 1/2 window; +#X obj 16 597 -~; +#X text 43 6 Read two windows out of the recorded sample \, one 1/4 +ahead of the other. The mid point of the front window is specified +by "location". If "speed" is nonzero \, "location" automatically precesses. +; +#X obj 528 720 * -0.5; +#X text 91 587 "back" window 1/4 cycle behind "front" one; +#X text 137 205 computation period (msec) for overlap of 4; +#X text 164 186 msec in a window; +#X obj 528 666 /; +#X obj 528 691 * 1000; +#X obj 528 642 t f b; +#X obj 568 666 samplerate~; +#X obj 528 619 f; +#X msg 845 711 \; rewind bang \; speed \$1; +#X obj 845 684 r auto; +#X obj 730 685 r no-detune; +#X msg 730 707 \; detune 0; +#X text 326 275 loop to precess the location according; +#X text 325 291 to the "speed" parameter.; +#X text 611 31 if location changes \, update number box; +#X text 610 50 in main window via "location-set" \, but; +#X text 613 69 taking care to limit frequency of updates.; +#X text 756 462 reflect control changes; +#X text 756 479 in main window.; +#X text 754 344 setting location by hand; +#X text 752 362 sets speed to zero.; +#X text 760 653 misc controls; +#X text 496 527 "rewind" control takes us; +#X text 499 545 to a location depending on; +#X text 499 564 stretched window size.; +#X connect 0 0 30 0; +#X connect 1 0 23 0; +#X connect 2 0 11 0; +#X connect 2 0 18 0; +#X connect 3 0 59 0; +#X connect 4 0 8 0; +#X connect 5 0 31 0; +#X connect 6 0 2 0; +#X connect 7 0 67 0; +#X connect 7 0 54 0; +#X connect 8 0 58 0; +#X connect 8 0 61 0; +#X connect 9 0 21 0; +#X connect 10 0 2 1; +#X connect 11 0 2 1; +#X connect 11 0 62 0; +#X connect 12 0 11 1; +#X connect 13 0 16 1; +#X connect 14 0 16 0; +#X connect 14 1 13 0; +#X connect 15 0 7 0; +#X connect 16 0 15 0; +#X connect 17 0 18 1; +#X connect 18 0 65 0; +#X connect 20 0 67 1; +#X connect 21 0 12 0; +#X connect 22 0 20 0; +#X connect 22 0 13 1; +#X connect 22 0 64 0; +#X connect 22 0 77 1; +#X connect 23 0 22 0; +#X connect 24 0 25 0; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 28 0 29 0; +#X connect 29 0 23 0; +#X connect 29 1 23 1; +#X connect 32 0 5 1; +#X connect 32 0 0 1; +#X connect 33 0 34 0; +#X connect 34 0 35 0; +#X connect 36 0 37 0; +#X connect 37 0 38 0; +#X connect 40 0 41 0; +#X connect 41 0 42 0; +#X connect 43 0 45 0; +#X connect 44 0 52 0; +#X connect 45 0 47 0; +#X connect 45 1 46 1; +#X connect 46 0 44 0; +#X connect 47 0 48 0; +#X connect 48 0 49 0; +#X connect 48 0 51 0; +#X connect 49 0 47 1; +#X connect 50 0 47 1; +#X connect 51 0 50 0; +#X connect 51 0 46 0; +#X connect 53 0 0 0; +#X connect 54 0 5 0; +#X connect 55 0 17 0; +#X connect 56 0 77 0; +#X connect 59 0 4 0; +#X connect 59 1 60 0; +#X connect 60 0 4 1; +#X connect 61 0 16 2; +#X connect 61 0 12 1; +#X connect 63 0 45 0; +#X connect 64 0 65 1; +#X connect 65 0 14 0; +#X connect 67 0 53 0; +#X connect 69 0 57 0; +#X connect 73 0 74 0; +#X connect 74 0 69 0; +#X connect 75 0 73 0; +#X connect 75 1 76 0; +#X connect 76 0 73 1; +#X connect 77 0 75 0; +#X connect 79 0 78 0; +#X connect 80 0 81 0; +#X restore 109 133 pd read-windows; +#X obj 137 543 tabsend~ prev-imag; +#X obj 136 567 tabsend~ prev-real; +#X obj 20 8 tabreceive~ prev-real; +#X obj 73 29 tabreceive~ prev-imag; +#X text 272 5 recall previous output amplitude. Its phase will be added +to the phase difference we measure from two windows in the the recorded +sound.; +#X obj 121 69 *~; +#X obj 89 69 *~; +#X obj 89 91 +~; +#X obj 159 94 q8_rsqrt~; +#X obj 159 71 +~ 1e-20; +#X obj 73 119 *~; +#X obj 19 118 *~; +#X obj 181 290 r lock; +#X obj 29 245 lrshift~ 1; +#X obj 24 269 lrshift~ -1; +#X obj 141 245 lrshift~ 1; +#X obj 133 269 lrshift~ -1; +#X obj 35 300 *~; +#X obj 159 312 *~; +#X obj 19 325 +~; +#X obj 125 331 +~; +#X text 247 66 divide by the magnitude to make a unit-magnitude complex +amplitude (phase only). The 1e-20 is to prevent overflows. q8_rsqrt~ +is reciprocal square root.; +#X text 247 165 Take FT of the window in back. Multiply its conjugate +by the normalized previous output. The result has the magnitude of +the input sound and phase (previous output phase) minus (back window +phase).; +#X text 249 370 Normalize again \, this time taking care to salt each +channel with 1e-15 so that we get a unit complex number even if everything +was zero heretofore.; +#X text 288 427 Now take the FT of the forward window and multiply +it by the unit complex number from above. The magnitude will be that +of the forward window and the phase will be the previous output phase +plus the phase difference between the two analysis windows -- except +that if "lock" is on \, they will be modified to agree progressively +better with the inter-channel phase relationships of the input.; +#X text 249 242 If "lock" is on \, encourage neighboring channels to +stay in phase by adding the two neighboring complex amplitudes. The +result will tend toward the channel with the strongest amplitude. If +the phase relationships between channels in the output and those in +the input are in parallel \, then neighboring channels of the quotient +will all have the same phase and this will not change any phases. (lrshift +shifts the signal to the left or right depending on its argument.) +; +#X text 387 560 'set' message to block; +#X text 390 577 allows variable size; +#X text 259 126 Read two windows \, one 1/4 length behind the other +\, of the input sound \, with Hann window function (see inside).; +#X connect 0 0 2 1; +#X connect 1 0 2 0; +#X connect 2 0 35 0; +#X connect 2 0 15 0; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 5 0 34 0; +#X connect 5 0 15 1; +#X connect 6 0 19 1; +#X connect 7 0 19 0; +#X connect 8 0 10 1; +#X connect 9 0 10 0; +#X connect 10 0 48 0; +#X connect 10 0 47 0; +#X connect 10 0 53 0; +#X connect 11 0 18 1; +#X connect 12 0 16 0; +#X connect 13 0 1 1; +#X connect 13 0 3 1; +#X connect 13 1 0 1; +#X connect 13 1 4 1; +#X connect 14 0 9 1; +#X connect 14 0 7 1; +#X connect 14 1 6 1; +#X connect 14 1 8 1; +#X connect 15 0 26 0; +#X connect 17 0 18 0; +#X connect 18 0 32 0; +#X connect 19 0 49 0; +#X connect 19 0 50 0; +#X connect 19 0 54 0; +#X connect 20 0 1 0; +#X connect 20 0 4 0; +#X connect 21 0 0 0; +#X connect 21 0 3 0; +#X connect 22 0 28 0; +#X connect 23 0 31 0; +#X connect 25 0 17 1; +#X connect 25 0 17 0; +#X connect 25 0 20 0; +#X connect 26 0 12 0; +#X connect 27 0 26 1; +#X connect 28 0 12 1; +#X connect 29 0 30 0; +#X connect 31 0 24 0; +#X connect 32 0 20 1; +#X connect 32 0 21 1; +#X connect 33 0 14 0; +#X connect 33 1 13 0; +#X connect 36 0 40 1; +#X connect 36 0 40 0; +#X connect 36 0 45 0; +#X connect 37 0 39 1; +#X connect 37 0 39 0; +#X connect 37 0 44 0; +#X connect 39 0 41 1; +#X connect 40 0 41 0; +#X connect 41 0 43 0; +#X connect 42 0 44 1; +#X connect 42 0 45 1; +#X connect 43 0 42 0; +#X connect 44 0 8 0; +#X connect 44 0 7 0; +#X connect 45 0 9 0; +#X connect 45 0 6 0; +#X connect 46 0 51 1; +#X connect 46 0 52 1; +#X connect 47 0 51 0; +#X connect 48 0 51 0; +#X connect 49 0 52 0; +#X connect 50 0 52 0; +#X connect 51 0 53 1; +#X connect 52 0 54 1; +#X connect 53 0 25 0; +#X connect 54 0 11 0; +#X connect 54 0 11 1; +#X connect 54 0 21 0; +#X restore 55 480 pd fft-analysis; +#N canvas 260 23 647 768 phase-tables 0; +#N canvas 0 0 450 300 graph2 0; +#X array prev-imag 4096 float 0; +#X coords 0 1000 4096 -1000 400 300 1; +#X restore 169 326 graph; +#N canvas 0 0 450 300 graph3 0; +#X array prev-real 4096 float 0; +#X coords 0 500 4096 -500 400 300 1; +#X restore 170 17 graph; +#X restore 440 504 pd phase-tables; +#X obj 494 338 s transpo; +#X text 164 364 hundredths; +#X text 493 294 in cents; +#X text 389 359 normal; +#X obj 56 517 output~; +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 1024 float 0; +#X coords 0 1 1023 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 440 528 pd hann-window; +#N canvas 388 86 694 447 insample 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample 160161 float 0; +#X coords 0 1 160160 -1 400 150 1; +#X restore 281 135 graph; +#X obj 28 133 r read-sample; +#X obj 28 184 unpack s f; +#X obj 28 294 soundfiler; +#X text 365 360 read a sample; +#X obj 285 359 loadbang; +#X obj 28 210 t s b; +#X obj 84 209 symbol \$0-sample; +#X obj 28 245 pack s s; +#X msg 28 270 read -resize \$1 \$2; +#X obj 83 156 44100; +#X obj 28 157 t a b; +#X obj 38 318 s \$0-samplength; +#X obj 125 184 s \$0-insamprate; +#X obj 28 357 /; +#X obj 28 381 * 1000; +#X obj 28 404 s \$0-samp-msec; +#X obj 66 357 r \$0-insamprate; +#X obj 29 70 hip~ 5; +#X obj 29 46 adc~ 1; +#X obj 29 9 inlet; +#X obj 91 46 samplerate~; +#X obj 29 93 tabwrite~ \$0-sample; +#X obj 91 70 s \$0-insamprate; +#X msg 285 383 \; read-sample ../sound/voice.wav; +#X obj 276 20 inlet; +#X obj 276 42 openpanel; +#X obj 276 67 s read-sample; +#X connect 1 0 11 0; +#X connect 2 0 6 0; +#X connect 2 1 13 0; +#X connect 3 0 12 0; +#X connect 3 0 14 0; +#X connect 5 0 24 0; +#X connect 6 0 8 0; +#X connect 6 1 7 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; +#X connect 9 0 3 0; +#X connect 10 0 13 0; +#X connect 11 0 2 0; +#X connect 11 1 10 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 17 0 14 1; +#X connect 18 0 22 0; +#X connect 19 0 18 0; +#X connect 20 0 21 0; +#X connect 20 0 19 0; +#X connect 21 0 23 0; +#X connect 25 0 26 0; +#X connect 26 0 27 0; +#X restore 441 480 pd insample; +#X floatatom 552 480 5 0 0 0 - #0-samp-msec -; +#X msg 229 486 ../sound/bell.aiff; +#X msg 229 511 ../sound/voice.wav; +#X msg 229 536 ../sound/voice2.wav; +#X obj 229 562 s read-sample; +#X obj 441 439 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 460 438 <- record; +#X obj 493 387 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 55 407 s location; +#X obj 167 407 s speed; +#X obj 262 386 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 262 408 s rewind; +#X msg 345 336 200; +#X msg 345 358 100; +#X msg 345 380 20; +#X text 386 335 contract; +#X text 390 380 expand; +#X obj 493 407 s lock; +#X text 494 277 detune; +#X text 55 330 location; +#X text 52 346 (stops; +#X text 57 361 motion); +#X text 165 348 motion in; +#X text 232 464 read input sound; +#X text 103 7 PHASE VOCODER FOR TIME STETCHING AND CONTRACTION; +#X text 604 479 length \, msec; +#X floatatom 607 419 5 0 0 0 - window-size -; +#X msg 607 307 512; +#X msg 607 329 1024; +#X msg 607 351 2048; +#X msg 607 373 4096; +#X obj 607 395 s window-size; +#X text 607 274 window size \,; +#X text 607 289 samples; +#X text 648 306 <- set; +#X text 100 306 ------- location controls -------; +#X text 660 419 (check); +#X obj 345 407 s auto; +#X text 23 35 This patch takes a sound \, analyzes windows in it both +for channel magnitude and for phase precession in each channel (compared +to another operlapping window). The real-time output recreates the +same magnitudes and phase precession \, althought the phases themselves +are in general different. You can control either the location or its +motion (setting location stops motion \, while setting a non-zero motion +causes the location to change automatically). "Rewind" goes back to +the beginning. You can use different window sizes (use the message +boxes - the number box is for readout). The "lock" feature forces phase +coherency between neighboring channels \, which makes a more present +sound but can add artifacts to the sound. Look in "pd fft-analysis" +to see the workings.; +#X text 483 568 updated for Pd version 0.39; +#X obj 551 316 bng 15 250 50 0 no-detune empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 535 460 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 466 458 file ->; +#X connect 0 0 5 0; +#X connect 1 0 21 0; +#X connect 2 0 20 0; +#X connect 3 0 9 0; +#X connect 3 0 9 1; +#X connect 13 0 16 0; +#X connect 14 0 16 0; +#X connect 15 0 16 0; +#X connect 17 0 11 0; +#X connect 19 0 29 0; +#X connect 22 0 23 0; +#X connect 24 0 49 0; +#X connect 25 0 49 0; +#X connect 26 0 49 0; +#X connect 39 0 43 0; +#X connect 40 0 43 0; +#X connect 41 0 43 0; +#X connect 42 0 43 0; +#X connect 53 0 11 1; diff --git a/desiredata/doc/3.audio.examples/I08.pvoc.reverb.pd b/desiredata/doc/3.audio.examples/I08.pvoc.reverb.pd new file mode 100644 index 00000000..6898c216 --- /dev/null +++ b/desiredata/doc/3.audio.examples/I08.pvoc.reverb.pd @@ -0,0 +1,421 @@ +#N canvas 502 83 570 415 12; +#N canvas 105 328 986 609 fft 0; +#X obj 18 500 *~; +#X obj 291 455 *~; +#X obj 258 454 *~; +#X obj 356 456 *~; +#X obj 324 455 *~; +#X obj 324 477 +~; +#X obj 258 479 -~; +#X obj 560 383 *~; +#X obj 54 124 *~; +#X obj 22 124 *~; +#X obj 22 145 +~; +#X obj 325 82 *~; +#X obj 293 82 *~; +#X obj 608 312 *~; +#X obj 576 312 *~; +#X obj 93 63 *~; +#X obj 18 522 outlet~; +#X obj 18 475 *~; +#X obj 126 63 inlet~; +#X obj 93 84 rfft~; +#X obj 18 451 rifft~; +#X obj 576 334 rsqrt~; +#X obj 293 103 +~; +#X obj 484 383 *~; +#X obj 56 499 sig~ 0.0002; +#N canvas 167 161 699 396 decision 0; +#X obj 49 101 inlet~; +#X obj 50 341 outlet~; +#X obj 50 183 -~; +#X obj 50 226 clip~ 0 1; +#X obj 50 204 *~ 1e+20; +#X obj 196 98 inlet~; +#X text 137 213 stronger than; +#X text 139 228 old one; +#X obj 274 202 -~; +#X obj 288 177 lrshift~ 1; +#X obj 274 250 clip~ 0 1; +#X obj 274 228 *~ 1e+20; +#X obj 450 202 -~; +#X obj 450 250 clip~ 0 1; +#X obj 450 228 *~ 1e+20; +#X obj 464 177 lrshift~ -1; +#X obj 50 283 *~; +#X obj 50 312 *~; +#X text 135 199 1 if new signal; +#X text 55 73 new; +#X text 203 70 old; +#X text 51 12 Choose whether to replace the "lod" signal with the "new" +one. The "new" one must be stronger than the old one and also must +be stronger than its two neighboring channels; +#X text 267 283 1 if we're louder than neighbor; +#X connect 0 0 2 0; +#X connect 0 0 9 0; +#X connect 0 0 8 0; +#X connect 0 0 12 0; +#X connect 0 0 15 0; +#X connect 2 0 4 0; +#X connect 3 0 16 0; +#X connect 4 0 3 0; +#X connect 5 0 2 1; +#X connect 8 0 11 0; +#X connect 9 0 8 1; +#X connect 10 0 16 1; +#X connect 11 0 10 0; +#X connect 12 0 14 0; +#X connect 13 0 17 1; +#X connect 14 0 13 0; +#X connect 15 0 12 1; +#X connect 16 0 17 0; +#X connect 17 0 1 0; +#X restore 23 172 pd decision; +#X obj 576 356 *~; +#N canvas 276 481 755 363 divide-by-prev 0; +#X obj 283 99 inlet~; +#X obj 385 101 inlet~; +#X obj 284 249 outlet~; +#X obj 386 249 outlet~; +#X obj 107 251 outlet~; +#X obj 208 253 outlet~; +#X obj 250 180 *~; +#X obj 217 180 *~; +#X obj 182 181 *~; +#X obj 149 181 *~; +#X obj 149 203 +~; +#X obj 217 202 -~; +#X obj 92 49 tabreceive~ \$0-last-real; +#X obj 190 72 tabreceive~ \$0-last-imag; +#X connect 0 0 2 0; +#X connect 0 0 9 0; +#X connect 0 0 6 0; +#X connect 1 0 3 0; +#X connect 1 0 8 0; +#X connect 1 0 7 0; +#X connect 6 0 11 1; +#X connect 7 0 11 0; +#X connect 8 0 10 1; +#X connect 9 0 10 0; +#X connect 10 0 4 0; +#X connect 11 0 5 0; +#X connect 12 0 9 1; +#X connect 12 0 7 1; +#X connect 13 0 8 1; +#X connect 13 0 6 1; +#X restore 603 192 pd divide-by-prev; +#N canvas 650 183 602 327 switch 0; +#X obj 19 163 inlet~; +#X obj 107 99 inlet~; +#X obj 169 100 inlet~; +#X obj 273 97 inlet~; +#X obj 333 97 inlet~; +#X obj 367 185 -~; +#X obj 338 231 +~; +#X obj 372 229 *~; +#X obj 250 182 -~; +#X obj 220 228 +~; +#X obj 254 228 *~; +#X obj 219 278 outlet~; +#X obj 338 274 outlet~; +#X text 46 28 switch between two pairs of inputs. If first inlet is +one \, take the left-hand pair \, otherwise the right-hand one.; +#X text 15 140 switch; +#X text 92 76 pass this if one; +#X text 269 77 pass this if zero; +#X connect 0 0 10 1; +#X connect 0 0 7 1; +#X connect 1 0 8 0; +#X connect 2 0 5 0; +#X connect 3 0 9 0; +#X connect 3 0 8 1; +#X connect 4 0 6 0; +#X connect 4 0 5 1; +#X connect 5 0 7 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 8 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 9 1; +#X restore 327 275 pd switch; +#N canvas 650 183 602 327 switch 0; +#X obj 19 163 inlet~; +#X obj 107 99 inlet~; +#X obj 169 100 inlet~; +#X obj 273 97 inlet~; +#X obj 333 97 inlet~; +#X obj 367 185 -~; +#X obj 338 231 +~; +#X obj 372 229 *~; +#X obj 250 182 -~; +#X obj 220 228 +~; +#X obj 254 228 *~; +#X obj 219 278 outlet~; +#X obj 338 274 outlet~; +#X text 46 28 switch between two pairs of inputs. If first inlet is +one \, take the left-hand pair \, otherwise the right-hand one.; +#X text 15 140 switch; +#X text 92 76 pass this if one; +#X text 269 77 pass this if zero; +#X connect 0 0 10 1; +#X connect 0 0 7 1; +#X connect 1 0 8 0; +#X connect 2 0 5 0; +#X connect 3 0 9 0; +#X connect 3 0 8 1; +#X connect 4 0 6 0; +#X connect 4 0 5 1; +#X connect 5 0 7 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 8 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 9 1; +#X restore 484 266 pd switch; +#X obj 655 270 r revtime; +#X obj 54 476 tabreceive~ \$0-hann; +#X obj 94 35 tabreceive~ \$0-hann; +#X obj 505 112 tabreceive~ \$0-inc-real; +#X obj 587 134 tabreceive~ \$0-inc-imag; +#X obj 752 220 tabsend~ \$0-last-imag; +#X obj 702 243 tabsend~ \$0-last-real; +#X obj 559 426 tabsend~ \$0-inc-imag; +#X obj 484 449 tabsend~ \$0-inc-real; +#X msg 665 293 set \$1; +#X obj 665 317 s revtime-set; +#X obj 800 483 loadbang; +#X msg 800 509 \; pd dsp 1 \; window-size 4096 \; revtime 20; +#X obj 800 411 r window-size; +#X msg 800 433 set \$1 4; +#X obj 800 455 block~; +#X obj 655 341 expr 1 - 0.2/max(0.2 \, $f1); +#X text 20 206 choose whether to; +#X text 18 224 punch in new (amplitude \,; +#X text 16 243 increment) pair; +#X obj 367 26 tabreceive~ \$0-amp-real; +#X obj 443 50 tabreceive~ \$0-amp-imag; +#X obj 325 537 tabsend~ \$0-amp-imag; +#X obj 258 560 tabsend~ \$0-amp-real; +#X text 361 6 previous output amplitude \, encoding both magnitude +and phase; +#X text 453 87 previous phase increment (unit-magnitude complex number) +; +#X obj 506 134 +~ 1e-15; +#X obj 366 50 +~ 1e-15; +#X text 363 482 propagate amplitudes by multiplying in the; +#X text 361 499 increments \, which advance the phase and drop; +#X text 365 514 magnitude according to revtime.; +#X text 608 370 normalize increments between 0 and; +#X text 606 388 1 according to revtime.; +#X text 78 453 IFFT and output; +#X connect 0 0 16 0; +#X connect 1 0 6 1; +#X connect 2 0 6 0; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 5 0 52 0; +#X connect 6 0 53 0; +#X connect 7 0 1 0; +#X connect 7 0 3 0; +#X connect 7 0 37 0; +#X connect 8 0 10 1; +#X connect 9 0 10 0; +#X connect 10 0 25 0; +#X connect 11 0 22 1; +#X connect 12 0 22 0; +#X connect 13 0 21 0; +#X connect 14 0 21 0; +#X connect 15 0 19 0; +#X connect 17 0 0 0; +#X connect 18 0 15 1; +#X connect 19 0 9 0; +#X connect 19 0 9 1; +#X connect 19 0 27 0; +#X connect 19 0 28 1; +#X connect 19 1 8 0; +#X connect 19 1 8 1; +#X connect 19 1 27 1; +#X connect 19 1 28 2; +#X connect 20 0 17 0; +#X connect 21 0 26 0; +#X connect 22 0 25 1; +#X connect 23 0 2 0; +#X connect 23 0 4 0; +#X connect 23 0 38 0; +#X connect 24 0 0 1; +#X connect 25 0 28 0; +#X connect 25 0 29 0; +#X connect 26 0 23 1; +#X connect 26 0 7 1; +#X connect 27 0 29 1; +#X connect 27 1 29 2; +#X connect 27 2 36 0; +#X connect 27 3 35 0; +#X connect 28 0 20 0; +#X connect 28 0 3 1; +#X connect 28 0 2 1; +#X connect 28 1 20 1; +#X connect 28 1 1 1; +#X connect 28 1 4 1; +#X connect 29 0 14 0; +#X connect 29 0 14 1; +#X connect 29 0 23 0; +#X connect 29 1 13 0; +#X connect 29 1 13 1; +#X connect 29 1 7 0; +#X connect 30 0 39 0; +#X connect 30 0 46 0; +#X connect 31 0 17 1; +#X connect 32 0 15 0; +#X connect 33 0 56 0; +#X connect 34 0 29 4; +#X connect 39 0 40 0; +#X connect 41 0 42 0; +#X connect 43 0 44 0; +#X connect 44 0 45 0; +#X connect 46 0 26 1; +#X connect 50 0 57 0; +#X connect 51 0 11 0; +#X connect 51 0 11 1; +#X connect 51 0 28 4; +#X connect 56 0 29 3; +#X connect 57 0 12 0; +#X connect 57 0 12 1; +#X connect 57 0 28 3; +#X restore 141 301 pd fft; +#X floatatom 377 233 0 0 1000 0 - revtime-set -; +#X floatatom 68 239 0 0 0 0 - - -; +#X text 131 9 PIANO REVERB; +#X text 418 236 reverb time; +#X obj 141 331 output~; +#X obj 36 333 output~; +#X text 23 25 This is a phase vocoder acting as a reverberator. The +sound is more coherent (less "whispered") than a real room or a standard +delay-based reverberator.; +#X text 25 80 The technique is to "punch" the incoming sound into channels +where (1) there's a peak \, and (2) the incoming sound drowns out whatever +might already be there. If the sound already in any channel is louder +than the input the input for that channel is ignored.; +#N canvas 0 0 508 303 test-sound 0; +#X obj 35 33 inlet; +#X obj 36 144 osc~; +#X obj 164 173 line~; +#X floatatom 36 95 0 0 0 0 - - -; +#X obj 37 71 mtof; +#X obj 36 169 cos~; +#X obj 36 193 hip~ 20; +#X obj 36 118 t f b; +#X obj 164 63 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 209 144 pack 0 30; +#X obj 194 90 del 20; +#X obj 164 116 pack 1 20; +#X obj 38 224 *~; +#X obj 42 270 outlet~; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 2 0 12 1; +#X connect 3 0 7 0; +#X connect 4 0 3 0; +#X connect 5 0 6 0; +#X connect 6 0 12 0; +#X connect 7 0 1 0; +#X connect 7 1 8 0; +#X connect 8 0 10 0; +#X connect 8 0 11 0; +#X connect 9 0 2 0; +#X connect 10 0 9 0; +#X connect 11 0 2 0; +#X connect 12 0 13 0; +#X restore 68 266 pd test-sound; +#X text 56 217 short tone; +#X obj 377 257 s revtime; +#X text 24 164 For each window \, the amplitude in each channel is +propagated by a constant phase increment and multiplied downward by +a gain that determines the "reverb time".; +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 4096 float 0; +#X coords 0 1 4095 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 360 305 pd hann-window; +#N canvas 52 71 774 520 tables 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-last-real 2048 float 0; +#X coords 0 500 2048 -500 200 150 1; +#X restore 103 15 graph; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-last-imag 2048 float 0; +#X coords 0 500 2048 500 200 150 1; +#X restore 497 6 graph; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-amp-real 2048 float 0; +#X coords 0 500 2048 -500 200 150 1; +#X restore 105 185 graph; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-amp-imag 2048 float 0; +#X coords 0 500 2048 -500 200 150 1; +#X restore 501 178 graph; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-inc-real 2048 float 0; +#X coords 0 1 2048 -1 200 150 1; +#X restore 105 357 graph; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-inc-imag 2048 float 0; +#X coords 0 1 2048 -1 200 150 1; +#X restore 503 342 graph; +#X restore 360 326 pd tables; +#X text 307 383 Updated for Pd version 0.39; +#X text 26 389 reverb in; +#X text 133 388 reverb out; +#X connect 0 0 5 0; +#X connect 0 0 5 1; +#X connect 1 0 11 0; +#X connect 2 0 9 0; +#X connect 9 0 0 0; +#X connect 9 0 6 0; +#X connect 9 0 6 1; diff --git a/desiredata/doc/3.audio.examples/I09.sheep.from.goats.pd b/desiredata/doc/3.audio.examples/I09.sheep.from.goats.pd new file mode 100644 index 00000000..87a779ed --- /dev/null +++ b/desiredata/doc/3.audio.examples/I09.sheep.from.goats.pd @@ -0,0 +1,411 @@ +#N canvas -6 5 609 588 12; +#N canvas 300 81 867 775 fft-analysis 0; +#X obj 85 664 *~; +#X obj 35 712 *~; +#X obj 316 148 *~; +#X obj 34 58 *~; +#X obj 34 35 inlet~; +#X obj 34 82 rfft~; +#X obj 35 688 rifft~; +#X obj 35 737 outlet~; +#X obj 277 147 *~; +#X obj 277 198 rsqrt~; +#X obj 105 421 -~; +#X obj 34 663 *~; +#X obj 68 58 tabreceive~ \$0-hann; +#X obj 644 51 loadbang; +#X obj 644 133 r window-size; +#X obj 69 711 tabreceive~ \$0-hann; +#X obj 131 327 *~; +#X msg 644 155 set \$1 4; +#X obj 644 179 block~; +#X msg 643 75 \; pd dsp 1 \; window-size 1024; +#X obj 125 616 /~ 1000; +#X obj 197 616 r window-size; +#X obj 254 229 *~; +#X obj 113 220 *~; +#X obj 277 171 +~ 1e-20; +#X obj 152 246 lrshift~ 1; +#X obj 313 254 lrshift~ 1; +#X obj 152 272 lrshift~ -1; +#X obj 314 281 lrshift~ -1; +#X obj 292 335 *~; +#X obj 105 475 clip~ 0 1; +#X obj 106 448 *~ 1e+20; +#X obj 105 392 +~; +#X obj 105 508 *~; +#X obj 144 508 lrshift~ 1; +#X obj 251 508 lrshift~ -1; +#X obj 125 540 *~; +#X obj 410 411 -~; +#X obj 410 459 clip~ 0 1; +#X obj 411 435 *~ 1e+20; +#X obj 410 488 *~; +#X obj 449 488 lrshift~ 1; +#X obj 553 487 lrshift~ -1; +#X obj 430 517 *~; +#X obj 430 540 *~ -1; +#X obj 430 563 +~ 1; +#X obj 125 582 +~; +#X obj 255 335 *~; +#X obj 98 327 *~; +#X text 195 476 0 if clean; +#X text 170 541 0 if a neighbor is clean; +#X obj 97 301 +~; +#X obj 130 300 +~; +#X obj 255 309 +~; +#X obj 292 308 +~; +#X text 169 558 1 if all neighbors dirty; +#X text 470 584 1 if a neighbor dirty; +#X text 472 568 0 if all neighbors clean; +#X obj 224 679 lrshift~ -1; +#X obj 224 655 sig~ 1; +#X obj 125 638 *~; +#X obj 220 442 expr $f1*$f1/1250; +#X obj 432 385 expr $f1*$f1/1250; +#X obj 220 417 r dirty; +#X obj 432 360 r clean; +#X text 362 148 normalize the amplitudes; +#X text 439 253 add neighboring amplitude to this one; +#X text 437 269 and take squared magnitude of result -; +#X text 437 286 do this for both the left neightbor and; +#X text 436 303 the right one; +#X text 94 82 forward real Hann-windowed FT; +#X text 284 658 I had trouble with the DC bin - this zeros it.; +#X text 594 366 adjust threshold to quadratic; +#X text 594 382 units and scale; +#X text 142 389 total incoherence; +#X text 496 414 compare incoherence with the threshold; +#X text 532 511 multiply by left and right; +#X text 531 529 neighbors \, so 0 if any of; +#X text 531 546 the 3 is "clean".; +#X text 497 429 If greater (dirty) \, the "clip" outputs; +#X text 498 444 1 \, otherwise (if clean) \, zero.; +#X text 161 583 add to let in channels; +#X text 159 597 for either criterion; +#X connect 0 0 6 1; +#X connect 1 0 7 0; +#X connect 2 0 24 0; +#X connect 3 0 5 0; +#X connect 4 0 3 0; +#X connect 5 0 11 0; +#X connect 5 0 8 0; +#X connect 5 0 8 1; +#X connect 5 0 23 0; +#X connect 5 1 0 0; +#X connect 5 1 2 0; +#X connect 5 1 2 1; +#X connect 5 1 22 0; +#X connect 6 0 1 0; +#X connect 8 0 24 0; +#X connect 9 0 23 1; +#X connect 9 0 22 1; +#X connect 10 0 31 0; +#X connect 11 0 6 0; +#X connect 12 0 3 1; +#X connect 13 0 19 0; +#X connect 14 0 17 0; +#X connect 15 0 1 1; +#X connect 16 0 32 0; +#X connect 17 0 18 0; +#X connect 20 0 60 0; +#X connect 21 0 20 1; +#X connect 22 0 26 0; +#X connect 22 0 28 0; +#X connect 22 0 53 0; +#X connect 22 0 54 0; +#X connect 23 0 25 0; +#X connect 23 0 27 0; +#X connect 23 0 51 0; +#X connect 23 0 52 0; +#X connect 24 0 9 0; +#X connect 25 0 51 1; +#X connect 26 0 53 1; +#X connect 27 0 52 1; +#X connect 28 0 54 1; +#X connect 29 0 32 1; +#X connect 30 0 33 0; +#X connect 30 0 35 0; +#X connect 30 0 34 0; +#X connect 31 0 30 0; +#X connect 32 0 10 0; +#X connect 32 0 37 0; +#X connect 33 0 36 0; +#X connect 34 0 33 1; +#X connect 35 0 36 1; +#X connect 36 0 46 0; +#X connect 37 0 39 0; +#X connect 38 0 40 0; +#X connect 38 0 42 0; +#X connect 38 0 41 0; +#X connect 39 0 38 0; +#X connect 40 0 43 0; +#X connect 41 0 40 1; +#X connect 42 0 43 1; +#X connect 43 0 44 0; +#X connect 44 0 45 0; +#X connect 45 0 46 1; +#X connect 46 0 20 0; +#X connect 47 0 32 1; +#X connect 48 0 32 0; +#X connect 51 0 48 0; +#X connect 51 0 48 1; +#X connect 52 0 16 0; +#X connect 52 0 16 1; +#X connect 53 0 47 0; +#X connect 53 0 47 1; +#X connect 54 0 29 0; +#X connect 54 0 29 1; +#X connect 58 0 60 1; +#X connect 59 0 58 0; +#X connect 60 0 11 1; +#X connect 60 0 0 1; +#X connect 61 0 10 1; +#X connect 62 0 37 1; +#X connect 63 0 61 0; +#X connect 64 0 62 0; +#X restore 49 410 pd fft-analysis; +#X floatatom 355 287 0 0 100 0 - - -; +#X text 138 10 PITCHED/UNPITCHED SEPARATION; +#X obj 48 443 output~; +#X floatatom 48 356 0 0 100 0 - - -; +#X text 105 337 noise; +#X floatatom 108 356 0 0 100 0 - - -; +#N canvas 214 193 769 642 test-signal 0; +#X obj 75 328 line~; +#X obj 75 250 f; +#X obj 517 236 *~; +#X obj 76 442 *~; +#X obj 517 127 noise~; +#X obj 371 494 +~; +#X obj 98 415 dbtorms; +#X obj 539 210 dbtorms; +#X obj 98 390 inlet; +#X obj 539 186 inlet; +#X obj 373 568 outlet~; +#X msg 75 304 0 \, \$1 \$2; +#X obj 75 276 pack 0 0; +#X obj 236 248 /; +#X obj 251 190 * 0.001; +#X obj 251 219 t b f; +#X obj 372 543 hip~ 5; +#X obj 75 136 loadbang; +#X obj 75 182 metro 1000; +#X obj 517 152 bp~ 10000 3; +#X obj 75 161 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X text 270 247 sample duration \, msec; +#X text 126 84 looped sample playback; +#X obj 75 356 tabread4~ \$0-sample; +#X text 514 100 filtered noise; +#X text 105 15 TEST SIGNAL: looped sample plus noise. The inlets control +amplitude of each in dB.; +#X obj 236 139 r \$0-samplength; +#X obj 251 164 r \$0-insamprate; +#X obj 658 244 *~; +#X obj 680 218 dbtorms; +#X obj 680 194 inlet; +#X text 655 108 osc; +#X obj 658 134 osc~ 440; +#X obj 372 519 *~ 3; +#X connect 0 0 23 0; +#X connect 1 0 12 0; +#X connect 2 0 5 1; +#X connect 3 0 5 0; +#X connect 4 0 19 0; +#X connect 5 0 33 0; +#X connect 6 0 3 1; +#X connect 7 0 2 1; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 11 0 0 0; +#X connect 12 0 11 0; +#X connect 13 0 12 1; +#X connect 13 0 18 1; +#X connect 14 0 15 0; +#X connect 15 0 13 0; +#X connect 15 1 13 1; +#X connect 16 0 10 0; +#X connect 17 0 20 0; +#X connect 18 0 1 0; +#X connect 19 0 2 0; +#X connect 20 0 18 0; +#X connect 23 0 3 0; +#X connect 26 0 1 1; +#X connect 26 0 13 0; +#X connect 27 0 14 0; +#X connect 28 0 5 1; +#X connect 29 0 28 1; +#X connect 30 0 29 0; +#X connect 32 0 28 0; +#X connect 33 0 16 0; +#X restore 48 380 pd test-signal; +#X text 32 334 sampler; +#X text 56 314 amplitudes (dB); +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 1024 float 0; +#X coords 0 1 1023 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 457 458 pd hann-window; +#N canvas 52 71 774 520 tables 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-last-real 2048 float 0; +#X coords 0 500 2048 -500 200 150 1; +#X restore 103 15 graph; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-last-imag 2048 float 0; +#X coords 0 500 2048 500 200 150 1; +#X restore 497 6 graph; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-precess-real 2048 float 0; +#X coords 0 500 2048 -500 200 150 1; +#X restore 105 185 graph; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-precess-imag 2048 float 0; +#X coords 0 500 2048 -500 200 150 1; +#X restore 501 178 graph; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-inc-real 2048 float 0; +#X coords 0 1 2048 -1 200 150 1; +#X restore 105 357 graph; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-inc-imag 2048 float 0; +#X coords 0 1 2048 -1 200 150 1; +#X restore 503 342 graph; +#X restore 457 479 pd tables; +#N canvas 388 86 722 350 insample 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample 62079 float 0; +#X coords 0 1 62078 -1 400 150 1; +#X restore 259 24 graph; +#X obj 19 23 r read-sample; +#X obj 19 74 unpack s f; +#X obj 19 184 soundfiler; +#X text 356 250 read a sample; +#X obj 276 249 loadbang; +#X obj 19 100 t s b; +#X obj 75 99 symbol \$0-sample; +#X obj 19 135 pack s s; +#X msg 19 160 read -resize \$1 \$2; +#X obj 74 46 44100; +#X obj 19 47 t a b; +#X msg 276 273 \; read-sample ../sound/bell.aiff; +#X obj 29 208 s \$0-samplength; +#X obj 116 74 s \$0-insamprate; +#X obj 19 247 /; +#X obj 19 271 * 1000; +#X obj 19 294 s \$0-samp-msec; +#X obj 57 247 r \$0-insamprate; +#X connect 1 0 11 0; +#X connect 2 0 6 0; +#X connect 2 1 14 0; +#X connect 3 0 13 0; +#X connect 3 0 15 0; +#X connect 5 0 12 0; +#X connect 6 0 8 0; +#X connect 6 1 7 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; +#X connect 9 0 3 0; +#X connect 10 0 14 0; +#X connect 11 0 2 0; +#X connect 11 1 10 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 18 0 15 1; +#X restore 233 501 pd insample; +#X msg 233 403 ../sound/bell.aiff; +#X msg 233 426 ../sound/voice.wav; +#X msg 233 449 ../sound/voice2.wav; +#X text 236 383 change input sound; +#X obj 233 473 s read-sample; +#X floatatom 233 523 5 0 0 0 - #0-samp-msec -; +#X text 286 522 sample length \, msec; +#X floatatom 233 285 0 0 100 0 - - -; +#X floatatom 169 356 0 0 100 0 - - -; +#X text 167 336 osc; +#X msg 471 325 512; +#X msg 471 346 1024; +#X msg 471 368 2048; +#X obj 471 413 s window-size; +#X msg 471 390 4096; +#X obj 233 308 s clean; +#X text 233 331 0=silent; +#X text 231 351 100=all; +#X obj 355 310 s dirty; +#X text 351 331 100=silent; +#X text 353 348 0=all; +#X text 354 563 updated for Pd version 0.39; +#X text 11 212 Two separate thresholds may be adjusted to listen to +the "clean" or "dirty" part of the signal. You'll hear anything less +incoherent than the clean threshold \, OR more incoherent than the +dirty one.; +#X text 13 35 This patch applies a very simple coherence test to distinguish +between sinusoids and noise in an input signal. It works very imperfectly +(since noise is random \, no matter what test we place on it it will +sometimes spoof its way in.) Here we just test that neighboring channels +are 180 degrees (pi radians) out of phase \, as they should be in the +main lobe in response to a sinusoid. If any three channels are so arranged +\, all three are considered as contributing to a sinusoid. To do this +we make an "incoherence" measure which is zero if the phase relationship +is perfect and progressively larger otherwise.; +#X connect 0 0 3 0; +#X connect 0 0 3 1; +#X connect 1 0 31 0; +#X connect 4 0 7 0; +#X connect 6 0 7 1; +#X connect 7 0 0 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 20 0 28 0; +#X connect 21 0 7 2; +#X connect 23 0 26 0; +#X connect 24 0 26 0; +#X connect 25 0 26 0; +#X connect 27 0 26 0; diff --git a/desiredata/doc/3.audio.examples/I10.phase.bash.pd b/desiredata/doc/3.audio.examples/I10.phase.bash.pd new file mode 100644 index 00000000..4c66f9b7 --- /dev/null +++ b/desiredata/doc/3.audio.examples/I10.phase.bash.pd @@ -0,0 +1,569 @@ +#N canvas 165 311 718 552 12; +#X floatatom 407 323 0 0 0 0 - - -; +#N canvas 122 165 801 538 fft 0; +#X obj 39 153 *~; +#X obj 7 153 *~; +#X obj 7 98 *~; +#X obj 7 70 inlet~; +#X obj 7 125 rfft~; +#X obj 7 227 *~; +#X obj 7 306 rifft~; +#X obj 43 99 tabreceive~ \$0-hann; +#X obj 7 200 q8_sqrt~; +#X obj 337 158 samplerate~; +#X obj 328 124 bang~; +#X obj 337 183 t f b; +#X obj 444 4 loadbang; +#X obj 636 19 r window-size; +#X obj 636 65 block~; +#X obj 337 207 osc~; +#X msg 381 207 0; +#X obj 8 333 *~; +#X obj 44 334 tabreceive~ \$0-hann; +#X obj 9 363 outlet~; +#X obj 77 281 r window-size; +#X obj 7 281 /~ 1000; +#X msg 636 41 set \$1 2; +#X obj 387 267 r \$0-start; +#X obj 328 320 spigot; +#X msg 387 292 1; +#X msg 354 292 0; +#X obj 328 516 outlet; +#X obj 364 372 r window-size; +#X obj 364 441 t f b; +#X obj 396 464 samplerate~; +#X obj 364 464 /; +#X obj 364 487 * 1000; +#X obj 328 493 del; +#X obj 364 395 / 2; +#X obj 364 418 - 1; +#X msg 443 28 \; pd dsp 1 \; window-size 1024 \; pitch 48 \; specshift +0; +#X text 96 196 magnitude of FT; +#X text 18 249 align partials to middle of window; +#X text 39 232 alternate every other sign to; +#X text 383 122 control computations to do every frame; +#X text 414 180 set sample rate of the oscillator to; +#X text 416 195 Nyquist (here we're operating at twice; +#X text 418 211 the global "samplerate~" because of; +#X text 417 228 the overlap-2 blocking.) Also set phase; +#X text 417 244 to zero at beginning of frame.; +#X text 424 287 When analysis starts \, set a delay to; +#X text 425 304 one frame minus a sample (i.e. \, just; +#X text 424 321 one 64-sample block before the next; +#X text 423 338 frame) which is synchronized with the; +#X text 423 352 first frame emerging from outlet~ at; +#X text 499 368 left. In the parent window; +#X text 497 385 this is used to start; +#X text 497 402 recording synchronously.; +#X text 14 384 output phase-aligned frames; +#X text 395 514 output a bang to start recording; +#X connect 0 0 8 0; +#X connect 1 0 8 0; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 4 0 1 1; +#X connect 4 1 0 0; +#X connect 4 1 0 1; +#X connect 5 0 21 0; +#X connect 6 0 17 0; +#X connect 7 0 2 1; +#X connect 8 0 5 0; +#X connect 9 0 11 0; +#X connect 10 0 9 0; +#X connect 10 0 24 0; +#X connect 11 0 15 0; +#X connect 11 1 16 0; +#X connect 12 0 36 0; +#X connect 13 0 22 0; +#X connect 15 0 5 1; +#X connect 16 0 15 1; +#X connect 17 0 19 0; +#X connect 18 0 17 1; +#X connect 20 0 21 1; +#X connect 21 0 6 0; +#X connect 22 0 14 0; +#X connect 23 0 25 0; +#X connect 24 0 26 0; +#X connect 24 0 33 0; +#X connect 25 0 24 1; +#X connect 26 0 24 1; +#X connect 28 0 34 0; +#X connect 29 0 31 0; +#X connect 29 1 30 0; +#X connect 30 0 31 1; +#X connect 31 0 32 0; +#X connect 32 0 33 1; +#X connect 33 0 27 0; +#X connect 34 0 35 0; +#X connect 35 0 29 0; +#X restore 22 459 pd fft; +#X floatatom 586 377 0 0 120 0 - pitch-set -; +#X floatatom 583 330 0 0 0 0 - specshift-set -; +#X obj 583 353 s specshift; +#X obj 407 443 s loco; +#X obj 586 400 s pitch; +#X obj 407 346 pack 0 100; +#X obj 588 453 output~; +#X text 214 -1 PHASE BASHING; +#X text 455 515 updated for Pd version 0.39; +#X floatatom 199 389 5 0 0 0 - #0-samp-msec -; +#X text 197 403 sample length \, msec; +#X msg 198 288 ../sound/bell.aiff; +#X msg 198 313 ../sound/voice.wav; +#X msg 198 338 ../sound/voice2.wav; +#X text 201 266 change input sound; +#X obj 198 364 s read-sample; +#N canvas 190 43 657 626 test-signal 0; +#X obj 88 381 line~; +#X obj 88 306 f; +#X obj 88 536 outlet~; +#X msg 88 360 0 \, \$1 \$2; +#X obj 88 334 pack 0 0; +#X obj 190 303 /; +#X obj 269 283 * 0.001; +#X obj 211 260 t b b f; +#X obj 152 225 t b f; +#X obj 88 406 tabread4~ \$0-sample; +#X obj 286 391 adc~ 1; +#X obj 414 280 inlet; +#X obj 454 339 samplerate~; +#X obj 151 201 r \$0-samplength; +#X obj 211 234 r \$0-insamprate; +#X obj 87 189 inlet; +#X obj 454 363 s \$0-insamprate; +#X obj 285 423 *~; +#X obj 363 380 del; +#X obj 414 312 t b b; +#X msg 402 379 1; +#X msg 401 404 0; +#X obj 87 473 hip~ 5; +#X obj 88 444 +~; +#X text 73 123 play sample; +#X text 71 143 once; +#X obj 482 420 s \$0-start; +#X connect 0 0 9 0; +#X connect 1 0 4 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 1; +#X connect 5 0 18 1; +#X connect 6 0 5 1; +#X connect 7 1 5 0; +#X connect 7 2 6 0; +#X connect 8 1 5 0; +#X connect 8 1 1 1; +#X connect 9 0 23 0; +#X connect 10 0 17 0; +#X connect 11 0 19 0; +#X connect 12 0 16 0; +#X connect 13 0 8 0; +#X connect 14 0 7 0; +#X connect 15 0 1 0; +#X connect 15 0 26 0; +#X connect 17 0 23 1; +#X connect 18 0 21 0; +#X connect 19 0 20 0; +#X connect 19 0 18 0; +#X connect 19 0 26 0; +#X connect 19 1 12 0; +#X connect 20 0 17 1; +#X connect 21 0 17 1; +#X connect 22 0 2 0; +#X connect 23 0 22 0; +#X restore 22 436 pd test-signal; +#X obj 143 417 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#N canvas 0 110 565 454 hann-window 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-hann 2048 float 0; +#X coords 0 1 2047 0 300 100 1; +#X restore 82 311 graph; +#X obj 378 165 osc~; +#X obj 378 190 *~ -0.5; +#X obj 378 214 +~ 0.5; +#X obj 331 247 tabwrite~ \$0-hann; +#X obj 37 88 r window-size; +#X obj 38 173 /; +#X obj 127 142 samplerate~; +#X obj 38 251 s window-sec; +#X obj 177 204 swap; +#X obj 177 228 /; +#X obj 177 252 s window-hz; +#X obj 49 201 * 1000; +#X obj 49 228 s window-msec; +#X obj 38 115 t f b f; +#X msg 173 92 resize \$1; +#X obj 173 116 s \$0-hann; +#X obj 330 105 r window-hz; +#X msg 382 130 0; +#X obj 330 131 t f b; +#X text 15 8 calculate Hann window table (variable window size) and +constants window-hz (fundamental frequency of analysis) \, window-sec +and window-msec (analysis window size in seconds and msec).; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 14 0; +#X connect 6 0 8 0; +#X connect 6 0 12 0; +#X connect 7 0 6 1; +#X connect 7 0 9 1; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 14 0 6 0; +#X connect 14 0 9 0; +#X connect 14 1 7 0; +#X connect 14 2 15 0; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 1 1; +#X connect 19 0 1 0; +#X connect 19 1 4 0; +#X connect 19 1 18 0; +#X restore 195 441 pd hann-window; +#X msg 28 269 512; +#X msg 28 290 1024; +#X msg 28 312 2048; +#X obj 28 357 s window-size; +#X msg 28 334 4096; +#N canvas 388 86 736 499 insample 0; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sample 62079 float 0; +#X coords 0 1 62078 -1 400 150 1; +#X restore 259 24 graph; +#X obj 19 23 r read-sample; +#X obj 19 74 unpack s f; +#X obj 19 184 soundfiler; +#X text 118 379 read a sample; +#X obj 38 378 loadbang; +#X obj 19 100 t s b; +#X obj 75 99 symbol \$0-sample; +#X obj 19 135 pack s s; +#X msg 19 160 read -resize \$1 \$2; +#X obj 74 46 44100; +#X obj 19 47 t a b; +#X obj 29 208 s \$0-samplength; +#X obj 116 74 s \$0-insamprate; +#X obj 19 281 /; +#X obj 19 305 * 1000; +#X obj 19 328 s \$0-samp-msec; +#X obj 57 281 r \$0-insamprate; +#X msg 38 402 \; read-sample ../sound/voice.wav; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-nophase 62079 float 0; +#X coords 0 1 62078 -1 400 150 1; +#X restore 256 185 graph; +#X msg 376 403 resize \$1; +#X obj 376 379 r \$0-samplength; +#X obj 376 428 s \$0-nophase; +#X connect 1 0 11 0; +#X connect 2 0 6 0; +#X connect 2 1 13 0; +#X connect 3 0 12 0; +#X connect 3 0 14 0; +#X connect 5 0 18 0; +#X connect 6 0 8 0; +#X connect 6 1 7 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; +#X connect 9 0 3 0; +#X connect 10 0 13 0; +#X connect 11 0 2 0; +#X connect 11 1 10 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 17 0 14 1; +#X connect 20 0 22 0; +#X connect 21 0 20 0; +#X restore 195 464 pd insample; +#X obj 22 416 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 33 384 ---analyze---; +#X text 20 399 sample; +#X obj 94 489 tabwrite~ \$0-nophase; +#X obj 21 492 output~; +#X msg 415 384 0 \, 400 4000; +#X msg 415 419 0 \, 400 10000; +#X text 47 18 This patch takes an incoming sound \, does an overlap-2 +FFT analysis of it \, and bashes the phases of the spectra so that +when regenerated the components will all have zero phase at the middle +of each window. You can use the windows as waveforms and cross-fade +them at will without getting phase modulation. This might be useful +for making synthetic instruments that mimic the spectral variation +of recorded sounds.; +#X text 398 305 (hundredths of sec); +#X text 401 289 location in sample; +#X text 420 365 normal speed; +#X text 422 403 slow; +#X text 458 262 ------ playback -------; +#N canvas 81 424 887 624 playback 0; +#X obj 101 479 r invblk; +#X obj 28 499 *~; +#X obj 61 501 clip~ 1 1000; +#X floatatom 38 89 0 0 0 0 - - -; +#X floatatom 510 93 0 0 0 0 - - -; +#X obj 496 392 *~; +#X obj 626 369 samphold~; +#X obj 733 369 samphold~; +#X obj 538 369 samphold~; +#X obj 481 500 clip~ -0.5 0.5; +#X obj 481 523 cos~; +#X obj 651 427 +~; +#X obj 653 506 -~; +#X obj 642 533 *~; +#X obj 642 558 +~; +#X obj 621 582 *~; +#X obj 40 408 *~; +#X obj 197 362 samphold~; +#X obj 302 367 samphold~; +#X obj 508 290 phasor~; +#X obj 174 288 wrap~; +#X obj 510 68 r pitch; +#X obj 510 140 mtof; +#X obj 269 199 line~; +#X obj 268 224 -~; +#X text 8 42 spectral stretch; +#X obj 89 367 samphold~; +#X obj 665 187 t b f; +#X obj 699 210 /; +#X obj 665 209 1; +#X obj 29 524 clip~ -0.5 0.5; +#X obj 29 546 cos~; +#X obj 211 425 +~; +#X obj 212 505 -~; +#X obj 194 526 *~; +#X obj 201 549 +~; +#X text 45 426 offset into; +#X text 50 440 sample; +#X text 368 169 samples; +#X text 368 154 period in; +#X text 204 378 weight for; +#X text 204 393 next block; +#X obj 760 312 wrap~; +#X obj 700 232 s invblk; +#X obj 558 453 r invblk; +#X obj 665 138 r window-size; +#X obj 38 65 r specshift; +#X obj 261 64 r loco; +#X obj 482 473 *~; +#X obj 518 474 clip~ 1 1000; +#X obj 510 117 - 12; +#X obj 38 136 + 69; +#X obj 38 159 mtof; +#X obj 38 182 / 440; +#X obj 28 284 *~ 1; +#X obj 760 287 +~ 0.5; +#X obj 60 479 *~ 1; +#X obj 518 453 *~ 1; +#X obj 481 545 +~ 1; +#X obj 29 569 +~ 1; +#X obj 267 292 *~ 1; +#X obj 212 453 +~ 0; +#X obj 652 456 +~ 0; +#X obj 28 366 -~ 0.5; +#X obj 479 369 -~ 0.5; +#X obj 286 603 outlet~; +#X obj 212 479 tabread4~ \$0-nophase; +#X obj 249 504 tabread4~ \$0-nophase; +#X obj 652 480 tabread4~ \$0-nophase; +#X obj 688 505 tabread4~ \$0-nophase; +#X obj 268 247 +~ 0.5; +#X text 60 248 grain size; +#X text 62 264 in samples; +#X text 97 383 grain size; +#X text 311 389 middle; +#X text 311 404 of block; +#X text 165 248 fractional; +#X text 164 265 part of loc; +#X text 295 224 integer part of loc; +#X text 328 247 middle of block; +#X text 310 290 cvt to samples; +#X text 522 265 run two copies 180 degrees out of phase; +#X text 29 589 window shaped; +#X text 27 604 by raised cos; +#X text 265 522 weighted sum of; +#X text 265 538 2 windows; +#X obj 180 573 *~; +#X obj 286 577 +~; +#X obj 704 163 s blksize; +#X obj 683 429 r blksize; +#X obj 243 427 r blksize; +#X obj 297 270 r blksize; +#X obj 665 162 / 2; +#X obj 366 132 /; +#X obj 366 105 samplerate~; +#X obj 365 82 t b f; +#X obj 38 112 * 0.125; +#X text 223 44 read location in sec/100; +#X obj 200 120 samplerate~; +#X obj 167 72 / 100; +#X obj 167 96 t f b; +#X obj 167 119 *; +#X obj 200 144 r blksize; +#X obj 167 144 /; +#X text 113 162 read location \, blocks; +#X obj 260 89 unpack; +#X msg 630 52 set \$1; +#X obj 771 32 r pitch; +#X msg 771 55 set \$1; +#X obj 630 30 r specshift; +#X text 723 190 1/(block size); +#X obj 630 76 s specshift-set; +#X obj 770 78 s pitch-set; +#X text 607 104 analysis overlap was 2 so our; +#X text 606 120 block size is (window size)/2; +#X text 12 -1 OVERLAPPED \, WINDOWED SAMPLE PLAYBACK; +#X text 357 0 - with controls for pitch \, location \, and spectral +shift; +#X connect 0 0 56 1; +#X connect 1 0 30 0; +#X connect 2 0 1 1; +#X connect 3 0 96 0; +#X connect 4 0 50 0; +#X connect 5 0 11 0; +#X connect 6 0 13 0; +#X connect 7 0 11 1; +#X connect 8 0 5 1; +#X connect 8 0 57 0; +#X connect 9 0 10 0; +#X connect 10 0 58 0; +#X connect 11 0 62 0; +#X connect 11 0 69 0; +#X connect 12 0 13 1; +#X connect 13 0 14 0; +#X connect 14 0 15 1; +#X connect 15 0 87 1; +#X connect 16 0 32 0; +#X connect 17 0 34 0; +#X connect 18 0 32 1; +#X connect 19 0 26 1; +#X connect 19 0 18 1; +#X connect 19 0 17 1; +#X connect 19 0 55 0; +#X connect 19 0 63 0; +#X connect 20 0 24 1; +#X connect 20 0 17 0; +#X connect 20 0 6 0; +#X connect 21 0 4 0; +#X connect 22 0 19 0; +#X connect 22 0 95 0; +#X connect 23 0 20 0; +#X connect 23 0 24 0; +#X connect 24 0 70 0; +#X connect 26 0 16 1; +#X connect 26 0 56 0; +#X connect 27 0 29 0; +#X connect 27 1 28 1; +#X connect 28 0 43 0; +#X connect 29 0 28 0; +#X connect 30 0 31 0; +#X connect 31 0 59 0; +#X connect 32 0 61 0; +#X connect 32 0 67 0; +#X connect 33 0 34 1; +#X connect 34 0 35 0; +#X connect 35 0 86 1; +#X connect 42 0 8 1; +#X connect 42 0 6 1; +#X connect 42 0 7 1; +#X connect 42 0 64 0; +#X connect 44 0 57 1; +#X connect 45 0 92 0; +#X connect 46 0 3 0; +#X connect 47 0 105 0; +#X connect 48 0 9 0; +#X connect 49 0 48 1; +#X connect 50 0 22 0; +#X connect 51 0 52 0; +#X connect 52 0 53 0; +#X connect 53 0 54 1; +#X connect 54 0 26 0; +#X connect 54 0 8 0; +#X connect 55 0 42 0; +#X connect 56 0 2 0; +#X connect 57 0 49 0; +#X connect 58 0 15 0; +#X connect 59 0 86 0; +#X connect 60 0 18 0; +#X connect 60 0 7 0; +#X connect 61 0 66 0; +#X connect 62 0 68 0; +#X connect 63 0 16 0; +#X connect 63 0 1 0; +#X connect 64 0 5 0; +#X connect 64 0 48 0; +#X connect 66 0 33 0; +#X connect 67 0 33 1; +#X connect 67 0 35 1; +#X connect 68 0 12 0; +#X connect 69 0 12 1; +#X connect 69 0 14 1; +#X connect 70 0 60 0; +#X connect 86 0 87 0; +#X connect 87 0 65 0; +#X connect 89 0 62 1; +#X connect 90 0 61 1; +#X connect 91 0 60 1; +#X connect 92 0 88 0; +#X connect 92 0 27 0; +#X connect 93 0 54 0; +#X connect 94 0 93 0; +#X connect 95 0 94 0; +#X connect 95 1 93 1; +#X connect 96 0 51 0; +#X connect 98 0 101 1; +#X connect 99 0 100 0; +#X connect 100 0 101 0; +#X connect 100 1 98 0; +#X connect 101 0 103 0; +#X connect 102 0 103 1; +#X connect 103 0 23 0; +#X connect 105 0 99 0; +#X connect 105 1 23 1; +#X connect 106 0 111 0; +#X connect 107 0 108 0; +#X connect 108 0 112 0; +#X connect 109 0 106 0; +#X restore 589 428 pd playback; +#X text 585 290 spectral shift; +#X text 583 306 (hundredths of; +#X text 646 323 octave); +#X text 126 398 live; +#X text 45 141 You can save the analyses and needn't be running the +FFT patch to do the resynthesis. You can read a sample \, select window +size \, and press "sample" to analyze it \, or else analyze a "live" +input. You'll hear the phase-bashed sample as the analysis runs. You +can regenerate the sound with specified pitch \, sample location \, +and spectral shift \, using the "playback" controls.; +#X text 83 278 analysis; +#X text 80 264 (redo; +#X text 83 294 after; +#X text 84 309 changing; +#X text 84 325 window; +#X text 85 339 size); +#X connect 0 0 7 0; +#X connect 1 0 30 0; +#X connect 1 0 31 0; +#X connect 1 0 31 1; +#X connect 1 1 30 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 7 0 5 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 18 0 1 0; +#X connect 19 0 18 1; +#X connect 21 0 24 0; +#X connect 22 0 24 0; +#X connect 23 0 24 0; +#X connect 25 0 24 0; +#X connect 27 0 18 0; +#X connect 32 0 5 0; +#X connect 33 0 5 0; +#X connect 40 0 8 0; +#X connect 40 0 8 1; diff --git a/desiredata/doc/3.audio.examples/J01.even.odd.pd b/desiredata/doc/3.audio.examples/J01.even.odd.pd new file mode 100644 index 00000000..71c9fdf5 --- /dev/null +++ b/desiredata/doc/3.audio.examples/J01.even.odd.pd @@ -0,0 +1,66 @@ +#N canvas 213 27 782 599 12; +#X obj 80 156 wrap~; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-phasor 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 567 35 graph; +#X obj 24 57 -~ 0.5; +#X obj 80 184 -~ 0.5; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sum 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 567 189 graph; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-difference 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 566 343 graph; +#X text 570 475 ---- 0.02 seconds ----; +#X text 528 567 updated for Pd version 0.39; +#X obj 22 335 output~; +#X obj 138 78 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 29 270 output~; +#X text 41 -1 Splitting a sawtooth wave into even and odd harmonics +; +#X obj 24 29 phasor~ 100; +#X text 87 58 remove DC bias; +#X text 132 29 original sawtooth; +#X text 144 173 180-degree-out-of-phase; +#X text 147 188 sawtooth; +#X text 145 212 form the sum and difference; +#X obj 23 224 +~; +#X obj 59 223 -~; +#X text 4 408 This patch splits a sawtooth wave into its even and odd +harmonics. The wrap~ object is used to make the phased copy. Adding +and subtracting this to and from the original gives the results shown +and heard. (Listen to the two outputs separately \, then together.) +; +#X text 102 291 output level; +#X text 93 367 for sum; +#X text 95 350 output level; +#X text 100 308 for difference; +#X text 157 77 <-- click to graph; +#X msg 148 97 \; pd DSP 1; +#X obj 138 247 tabwrite~ \$0-difference; +#X obj 138 270 tabwrite~ \$0-sum; +#X obj 138 138 tabwrite~ \$0-phasor; +#X text 4 491 This is a classic technique for gaining separate control +over the even and odd harmonics in a synthetic sound. It can also be +used conceptually to understand the harmonic content of a square wave +in terms of that of a sawtooth \, or vice versa.; +#X connect 0 0 3 0; +#X connect 2 0 0 0; +#X connect 2 0 18 0; +#X connect 2 0 19 0; +#X connect 2 0 29 0; +#X connect 3 0 18 1; +#X connect 3 0 19 1; +#X connect 9 0 26 0; +#X connect 9 0 27 0; +#X connect 9 0 28 0; +#X connect 9 0 29 0; +#X connect 12 0 2 0; +#X connect 18 0 8 0; +#X connect 18 0 28 0; +#X connect 19 0 10 1; +#X connect 19 0 27 0; diff --git a/desiredata/doc/3.audio.examples/J02.trapezoids.pd b/desiredata/doc/3.audio.examples/J02.trapezoids.pd new file mode 100644 index 00000000..1e7e5d27 --- /dev/null +++ b/desiredata/doc/3.audio.examples/J02.trapezoids.pd @@ -0,0 +1,84 @@ +#N canvas 262 74 690 585 12; +#X obj 137 133 wrap~; +#X obj 137 155 -~ 0.5; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sum 882 float 0; +#X coords 0 1.02 881 -1.02 200 130 1; +#X restore 421 155 graph; +#X text 420 293 ---- 0.02 seconds ----; +#X text 427 550 updated for Pd version 0.39; +#X obj 53 335 output~; +#X obj 147 369 tabwrite~ \$0-sum; +#X obj 137 111 -~; +#X obj 159 70 / 100; +#X floatatom 159 49 4 -100 100 0 - - -; +#X obj 158 220 / 100; +#X floatatom 158 199 4 -100 100 0 - - -; +#X obj 136 242 *~; +#X obj 209 134 wrap~; +#X obj 209 156 -~ 0.5; +#X obj 209 112 -~; +#X obj 231 71 / 100; +#X floatatom 231 50 4 -100 100 0 - - -; +#X obj 230 221 / 100; +#X floatatom 230 200 4 -100 100 0 - - -; +#X obj 208 243 *~; +#X obj 280 135 wrap~; +#X obj 280 157 -~ 0.5; +#X obj 280 113 -~; +#X obj 302 72 / 100; +#X floatatom 302 51 4 -100 100 0 - - -; +#X obj 301 222 / 100; +#X floatatom 301 201 4 -100 100 0 - - -; +#X obj 279 244 *~; +#X text 138 30 -- PHASES (percent) --; +#X text 164 180 AMPLITUDES (percent); +#X obj 111 268 +~; +#X obj 112 294 +~; +#X text 31 3 Making trapezoidal waves from sawtooth waves; +#X obj 158 321 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 25 77 phasor~ 88.2; +#X obj 158 343 metro 193; +#X text 4 476 If the amplitudes sum to zero (with negative ones to +balance positive ones) \, the slope of each linear segment becomes +zero. Otherrwise \, the segments have just enough slope to make up +for the three jumps ane get to the same starting value after each cycle.. +; +#X text 4 408 Here we combine three sawtooth waves with controllable +relative phases and amplitudes (in percent \, between -100 and 100.) +Each sawtooth wave gives rise to one jump (upward or downward) per +cycle.; +#X connect 0 0 1 0; +#X connect 1 0 12 0; +#X connect 7 0 0 0; +#X connect 8 0 7 1; +#X connect 9 0 8 0; +#X connect 10 0 12 1; +#X connect 11 0 10 0; +#X connect 12 0 31 0; +#X connect 13 0 14 0; +#X connect 14 0 20 0; +#X connect 15 0 13 0; +#X connect 16 0 15 1; +#X connect 17 0 16 0; +#X connect 18 0 20 1; +#X connect 19 0 18 0; +#X connect 20 0 31 1; +#X connect 21 0 22 0; +#X connect 22 0 28 0; +#X connect 23 0 21 0; +#X connect 24 0 23 1; +#X connect 25 0 24 0; +#X connect 26 0 28 1; +#X connect 27 0 26 0; +#X connect 28 0 32 1; +#X connect 31 0 32 0; +#X connect 32 0 6 0; +#X connect 32 0 5 0; +#X connect 32 0 5 1; +#X connect 34 0 36 0; +#X connect 35 0 7 0; +#X connect 35 0 15 0; +#X connect 35 0 23 0; +#X connect 36 0 6 0; diff --git a/desiredata/doc/3.audio.examples/J03.pulse.width.mod.pd b/desiredata/doc/3.audio.examples/J03.pulse.width.mod.pd new file mode 100644 index 00000000..06301686 --- /dev/null +++ b/desiredata/doc/3.audio.examples/J03.pulse.width.mod.pd @@ -0,0 +1,48 @@ +#N canvas 46 315 784 514 12; +#X floatatom 95 64 0 0 0 0 - - -; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-difference 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 565 325 graph; +#X text 81 39 frequency; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-phasor1 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 565 24 graph; +#X text 57 9 CLASSICAL PULSE WIDTH MODULATION; +#X obj 111 156 phasor~ 0; +#X obj 111 132 + 0.2; +#X obj 95 206 -~; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-phasor2 882 float 0; +#X coords 0 1.02 882 -1.02 200 130 1; +#X restore 565 176 graph; +#X text 24 314 This patch demonstrates pulse width modulation \, which +is accomplished simply by subtracting two sawtooth waves at a varying +phase difference. Here their frequencies are set to differ by 1/5 Hz. +so that the relative phase wanders continuously.; +#X text 570 457 ---- 0.02 seconds ----; +#X text 524 487 updated for Pd version 0.39; +#X obj 96 247 output~; +#X obj 200 124 tabwrite~ \$0-phasor1; +#X obj 200 182 tabwrite~ \$0-phasor2; +#X obj 200 236 tabwrite~ \$0-difference; +#X obj 95 97 phasor~; +#X obj 200 82 metro 193; +#X obj 200 62 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X text 219 60 <-- start/stop graphing; +#X connect 0 0 6 0; +#X connect 0 0 16 0; +#X connect 5 0 7 1; +#X connect 5 0 14 0; +#X connect 6 0 5 0; +#X connect 7 0 12 0; +#X connect 7 0 12 1; +#X connect 7 0 15 0; +#X connect 16 0 7 0; +#X connect 16 0 13 0; +#X connect 17 0 13 0; +#X connect 17 0 14 0; +#X connect 17 0 15 0; +#X connect 18 0 17 0; diff --git a/desiredata/doc/3.audio.examples/J04.corners.pd b/desiredata/doc/3.audio.examples/J04.corners.pd new file mode 100644 index 00000000..72671d3d --- /dev/null +++ b/desiredata/doc/3.audio.examples/J04.corners.pd @@ -0,0 +1,112 @@ +#N canvas 612 -7 619 714 12; +#X obj 117 132 wrap~; +#X obj 117 154 -~ 0.5; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sum 882 float 0; +#X coords 0 0.25 881 -0.25 200 130 1; +#X restore 411 70 graph; +#X text 410 208 ---- 0.02 seconds ----; +#X text 354 676 updated for Pd version 0.39; +#X obj 33 427 output~; +#X obj 127 461 tabwrite~ \$0-sum; +#X obj 117 110 -~; +#X obj 139 69 / 100; +#X floatatom 139 48 4 -100 100 0 - - -; +#X obj 138 312 / 100; +#X floatatom 138 291 4 -100 100 0 - - -; +#X obj 116 334 *~; +#X obj 203 133 wrap~; +#X obj 203 155 -~ 0.5; +#X obj 203 111 -~; +#X obj 225 70 / 100; +#X floatatom 225 49 4 -100 100 0 - - -; +#X obj 225 313 / 100; +#X floatatom 225 292 4 -100 100 0 - - -; +#X obj 203 335 *~; +#X obj 290 134 wrap~; +#X obj 290 156 -~ 0.5; +#X obj 290 112 -~; +#X obj 311 71 / 100; +#X floatatom 311 50 4 -100 100 0 - - -; +#X obj 313 314 / 100; +#X floatatom 313 293 4 -100 100 0 - - -; +#X obj 291 336 *~; +#X text 129 26 -- PHASES (percent) --; +#X text 140 267 AMPLITUDES (percent); +#X obj 91 360 +~; +#X obj 92 386 +~; +#X obj 138 413 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 138 435 metro 193; +#X obj 20 80 phasor~; +#X floatatom 20 59 5 0 0 0 - - -; +#X text 12 36 frequency; +#X obj 116 184 *~; +#X obj 203 184 *~; +#X obj 290 184 *~; +#X obj 116 209 *~ 0.5; +#X obj 116 234 -~ 0.0833; +#X obj 203 209 *~ 0.5; +#X obj 290 209 *~ 0.5; +#X obj 204 234 -~ 0.0833; +#X obj 291 234 -~ 0.0833; +#X text 30 3 Making waveforms with corners using parabolic waves; +#X text 14 499 Here we combine three parabolic waves (in the same way +as \, two patches ago \, we combined sawtooth waves). The parabolic +wave is obtained from the sawtooth wave (assuming it runs from -0.5 +to 0.5) by the formula: y=x*x/2 - 1/12. This is normalized so that +the corner has a slope change of minus one unit per cycle \, and adjusted +to remove any DC component.; +#X text 12 593 In general \, the segments of the result will be curved +\, but if the three magnitudes sum algebraicly to zero \, the segments +will be linear.; +#X text 371 67 0.25; +#X text 362 184 -0.25; +#X text 14 644 Note the reduced scale of the graph (from -0.25 to 0.25) +compared to the previous examples.; +#X connect 0 0 1 0; +#X connect 1 0 38 0; +#X connect 1 0 38 1; +#X connect 7 0 0 0; +#X connect 8 0 7 1; +#X connect 9 0 8 0; +#X connect 10 0 12 1; +#X connect 11 0 10 0; +#X connect 12 0 31 0; +#X connect 13 0 14 0; +#X connect 14 0 39 0; +#X connect 14 0 39 1; +#X connect 15 0 13 0; +#X connect 16 0 15 1; +#X connect 17 0 16 0; +#X connect 18 0 20 1; +#X connect 19 0 18 0; +#X connect 20 0 31 1; +#X connect 21 0 22 0; +#X connect 22 0 40 0; +#X connect 22 0 40 1; +#X connect 23 0 21 0; +#X connect 24 0 23 1; +#X connect 25 0 24 0; +#X connect 26 0 28 1; +#X connect 27 0 26 0; +#X connect 28 0 32 1; +#X connect 31 0 32 0; +#X connect 32 0 6 0; +#X connect 32 0 5 0; +#X connect 32 0 5 1; +#X connect 33 0 34 0; +#X connect 34 0 6 0; +#X connect 35 0 7 0; +#X connect 35 0 15 0; +#X connect 35 0 23 0; +#X connect 36 0 35 0; +#X connect 38 0 41 0; +#X connect 39 0 43 0; +#X connect 40 0 44 0; +#X connect 41 0 42 0; +#X connect 42 0 12 0; +#X connect 43 0 45 0; +#X connect 44 0 46 0; +#X connect 45 0 20 0; +#X connect 46 0 28 0; diff --git a/desiredata/doc/3.audio.examples/J05.triangle.pd b/desiredata/doc/3.audio.examples/J05.triangle.pd new file mode 100644 index 00000000..fda0ef05 --- /dev/null +++ b/desiredata/doc/3.audio.examples/J05.triangle.pd @@ -0,0 +1,56 @@ +#N canvas 111 30 606 531 12; +#N canvas 0 0 450 300 graph1 0; +#X array \$0-sum 882 float 0; +#X coords 0 0.5 881 -0.5 200 130 1; +#X restore 382 119 graph; +#X text 381 257 ---- 0.02 seconds ----; +#X text 350 505 updated for Pd version 0.39; +#X obj 46 242 output~; +#X obj 140 276 tabwrite~ \$0-sum; +#X obj 130 107 / 100; +#X floatatom 130 86 4 0 100 0 - - -; +#X obj 206 108 / 100; +#X floatatom 206 87 4 0 100 0 - - -; +#X obj 151 228 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 151 250 metro 193; +#X obj 19 95 phasor~; +#X floatatom 19 74 5 0 0 0 - - -; +#X text 11 51 frequency; +#X text 126 50 SLOPES (percent); +#X obj 108 137 *~; +#X obj 19 129 *~ -1; +#X obj 19 154 +~ 1; +#X obj 184 156 *~; +#X obj 108 189 min~; +#X text 341 118 0.5; +#X text 338 237 -0.5; +#X text 30 4 Making waveforms with corners by specifying line segment +slopes; +#X text 136 67 up; +#X text 209 68 down; +#X text 29 317 Occasionally a second method for making corners is more +convenient. Here we specify the slopes of the rising and falling segments +(as always \, in units per cycle). We then make a triangle wave with +a corner at (0 \, 0) and another one \, placed somewhere within the +cycle. The slopes of the two lines determine the second point \, which +will have an x value of t/(s+t) (if we let s denote the rising slope +and t the falling one \, both as positive numbers). The y value is +st/(s+t). If we wish instead to specify the corner location (x \, y) +(with x in cycles \, 0= SR/2 and hi/lo to 0; +#X text 69 92 Shelving: HP and LP specify shelving band. Gain difference +is about HP/LP cubed (so HP=2LP should give about 18 dB \, for example.) +; +#X obj 127 272 buttercoef3; +#X obj 198 429 buttercoef3; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 1 1 2 1; +#X connect 2 0 12 0; +#X connect 3 0 1 0; +#X connect 4 0 0 0; +#X connect 4 0 1 0; +#X connect 4 0 2 0; +#X connect 4 0 6 0; +#X connect 4 0 7 0; +#X connect 4 0 8 0; +#X connect 5 0 16 0; +#X connect 6 0 9 0; +#X connect 7 0 8 0; +#X connect 7 1 8 1; +#X connect 8 0 29 0; +#X connect 9 0 7 0; +#X connect 10 0 41 1; +#X connect 10 0 42 1; +#X connect 11 0 0 0; +#X connect 12 0 6 0; +#X connect 13 0 14 0; +#X connect 14 0 15 1; +#X connect 15 0 41 0; +#X connect 16 0 17 0; +#X connect 17 0 15 0; +#X connect 17 1 13 0; +#X connect 18 0 16 0; +#X connect 19 0 31 0; +#X connect 20 0 31 0; +#X connect 21 0 30 0; +#X connect 22 0 23 0; +#X connect 23 0 24 1; +#X connect 24 0 42 0; +#X connect 25 0 24 0; +#X connect 25 1 22 0; +#X connect 26 0 30 0; +#X connect 27 0 11 0; +#X connect 28 0 4 0; +#X connect 30 0 25 0; +#X connect 31 0 10 0; +#X connect 41 0 11 1; +#X connect 41 1 3 1; +#X connect 41 2 0 1; +#X connect 41 3 1 2; +#X connect 41 3 2 2; +#X connect 41 4 1 3; +#X connect 41 5 2 3; +#X connect 42 0 12 1; +#X connect 42 1 9 1; +#X connect 42 2 6 1; +#X connect 42 3 7 2; +#X connect 42 3 8 2; +#X connect 42 4 7 3; +#X connect 42 5 8 3; diff --git a/desiredata/doc/3.audio.examples/filter-graph1.pd b/desiredata/doc/3.audio.examples/filter-graph1.pd new file mode 100644 index 00000000..747c283e --- /dev/null +++ b/desiredata/doc/3.audio.examples/filter-graph1.pd @@ -0,0 +1,84 @@ +#N canvas -4 364 603 514 10; +#X obj 145 292 f; +#X obj 175 292 + 1; +#X obj 46 160 t b b; +#X msg 161 268 0; +#X obj 125 355 sel 1; +#X msg 48 218 0; +#X msg 46 191 1; +#X floatatom 452 292 7 0 0 0 - - -; +#X obj 442 333 phasor~; +#X obj 415 384 cos~; +#X obj 450 384 cos~; +#X obj 449 361 -~ 0.25; +#X obj 46 134 inlet; +#X obj 394 413 outlet~; +#X obj 451 413 outlet~; +#X obj 216 329 t f f; +#X obj 217 391 outlet; +#X msg 114 122 \; pd dsp 1; +#X obj 125 332 >= \$1; +#X msg 498 333 0; +#X obj 145 237 metro; +#X text 166 7 filter-graph1 -- generate sinusoids to test a filter +; +#X text 168 23 arg 1: number of steps - arg2: frequency range; +#X text 40 53 This \, together with its companion filter-graph2 \, +measure a filter's frequency and phase response. Here we count from +0 to n-1 (where n is the table size) and output the index and a complex +sinusoid at each frequency to test.; +#X text 222 192 fudge to estimate settling time; +#X obj 487 67 loadbang; +#X obj 487 105 t b b; +#X obj 519 151 max 1; +#X obj 487 128 f \$2; +#X obj 519 128 f \$1; +#X obj 487 151 /; +#X obj 442 265 *; +#X obj 217 367 pack; +#X floatatom 500 183 5 0 0 0 - - -; +#X floatatom 248 237 5 0 0 0 - - -; +#X obj 487 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 202 173 expr max(50 \, 40000/($f2*max($f1 \, 1))); +#X connect 0 0 1 0; +#X connect 0 0 15 0; +#X connect 0 0 18 0; +#X connect 1 0 0 1; +#X connect 2 0 6 0; +#X connect 2 1 3 0; +#X connect 2 1 17 0; +#X connect 3 0 0 1; +#X connect 4 0 5 0; +#X connect 5 0 20 0; +#X connect 6 0 20 0; +#X connect 8 0 11 0; +#X connect 8 0 9 0; +#X connect 9 0 13 0; +#X connect 10 0 14 0; +#X connect 11 0 10 0; +#X connect 12 0 2 0; +#X connect 15 0 32 0; +#X connect 15 1 31 0; +#X connect 15 1 36 0; +#X connect 18 0 4 0; +#X connect 19 0 8 1; +#X connect 20 0 0 0; +#X connect 20 0 19 0; +#X connect 25 0 35 0; +#X connect 26 0 28 0; +#X connect 26 1 29 0; +#X connect 27 0 30 1; +#X connect 28 0 30 0; +#X connect 29 0 27 0; +#X connect 30 0 31 1; +#X connect 30 0 33 0; +#X connect 30 0 36 1; +#X connect 31 0 7 0; +#X connect 31 0 8 0; +#X connect 31 0 32 1; +#X connect 32 0 16 0; +#X connect 35 0 26 0; +#X connect 36 0 20 1; +#X connect 36 0 34 0; +#X connect 36 0 32 1; diff --git a/desiredata/doc/3.audio.examples/filter-graph2.pd b/desiredata/doc/3.audio.examples/filter-graph2.pd new file mode 100644 index 00000000..a800957d --- /dev/null +++ b/desiredata/doc/3.audio.examples/filter-graph2.pd @@ -0,0 +1,121 @@ +#N canvas 72 200 758 579 10; +#X obj 266 177 *~; +#X obj 317 175 *~; +#X obj 182 276 t b b; +#X obj 368 382 atan2; +#X obj 267 302 snapshot~; +#X obj 341 301 snapshot~; +#X obj 450 259 butterworth3~ 80 100000 0; +#X obj 64 135 inlet; +#X obj 368 410 expr $f1 + 6.283 * ($f1 < -0.01); +#X obj 71 417 t b f b; +#X obj 448 457 symbol \$2; +#X obj 519 457 symbol; +#X obj 463 434 t b b; +#X obj 447 504 t b; +#X obj 474 505 t b; +#X msg 447 525 0; +#X msg 474 526 1; +#X obj 447 481 sel symbol; +#X floatatom 447 549 5 0 0 0 - - -; +#X obj 195 493 f; +#X obj 265 135 inlet~; +#X obj 318 135 inlet~; +#X obj 418 134 inlet~; +#X obj 374 495 f; +#X obj 368 442 spigot; +#X obj 333 495 t f b; +#X obj 154 493 t f b; +#X obj 154 521 tabwrite \$1; +#X obj 333 520 tabwrite \$2; +#X obj 637 259 env~ 2048; +#X obj 311 362 f; +#X obj 267 324 t f f b; +#X obj 311 382 dbtopow; +#X obj 137 411 expr sqrt($f1*$f1 + $f2*$f2)/$f3; +#X obj 63 245 sel 0; +#X obj 87 270 - 1; +#X obj 64 156 unpack; +#X obj 117 157 expr 10000/$f1; +#X text 257 102 test sinusoid:; +#X text 272 116 cos; +#X text 325 115 sin; +#X text 397 97 output of filter; +#X text 398 113 we're testing; +#X text 31 103 index and time to next step; +#X text 39 82 ----- from filter-graph1's 3 outlets: -------; +#X text 117 193 low-pass filters; +#X text 118 177 cutoff freq. for; +#X obj 368 360 swap; +#X obj 620 215 t b; +#X text 583 184 clear filters; +#X text 582 198 to start; +#X text 578 452 cbeck if any table; +#X text 577 467 is specified for phase; +#X text 577 483 (don't compute it if; +#X text 578 498 not.); +#X text 31 3 filter-graph2: measures frequency and phase response of +a filter \, which should be driven by a "filter-graph1" object. We +need the three outputs of filter-graph1 \, plus the filter output. +; +#X text 438 55 1: table name for frequency response; +#X text 518 39 creation arguments:; +#X text 438 71 2 (optional): table name for phase response; +#X obj 266 260 butterworth3~ 80 100000 0; +#X connect 0 0 59 0; +#X connect 1 0 6 0; +#X connect 2 0 4 0; +#X connect 2 1 5 0; +#X connect 3 0 8 0; +#X connect 4 0 31 0; +#X connect 5 0 33 1; +#X connect 5 0 47 1; +#X connect 6 0 5 0; +#X connect 7 0 36 0; +#X connect 8 0 24 0; +#X connect 9 0 2 0; +#X connect 9 1 19 1; +#X connect 9 1 23 1; +#X connect 9 2 12 0; +#X connect 10 0 17 0; +#X connect 11 0 17 1; +#X connect 12 0 10 0; +#X connect 12 1 11 0; +#X connect 13 0 15 0; +#X connect 14 0 16 0; +#X connect 15 0 18 0; +#X connect 16 0 18 0; +#X connect 17 0 13 0; +#X connect 17 1 14 0; +#X connect 18 0 24 1; +#X connect 19 0 27 1; +#X connect 20 0 0 0; +#X connect 20 0 29 0; +#X connect 21 0 1 0; +#X connect 22 0 1 1; +#X connect 22 0 0 1; +#X connect 23 0 28 1; +#X connect 24 0 25 0; +#X connect 25 0 28 0; +#X connect 25 1 23 0; +#X connect 26 0 27 0; +#X connect 26 1 19 0; +#X connect 29 0 30 1; +#X connect 30 0 32 0; +#X connect 31 0 33 0; +#X connect 31 1 47 0; +#X connect 31 2 30 0; +#X connect 32 0 33 2; +#X connect 33 0 26 0; +#X connect 34 1 35 0; +#X connect 34 1 48 0; +#X connect 35 0 9 0; +#X connect 36 0 34 0; +#X connect 36 1 37 0; +#X connect 37 0 6 1; +#X connect 37 0 59 1; +#X connect 47 0 3 0; +#X connect 47 1 3 1; +#X connect 48 0 6 4; +#X connect 48 0 59 4; +#X connect 59 0 4 0; diff --git a/desiredata/doc/3.audio.examples/osc-voice.pd b/desiredata/doc/3.audio.examples/osc-voice.pd new file mode 100644 index 00000000..48bb81ea --- /dev/null +++ b/desiredata/doc/3.audio.examples/osc-voice.pd @@ -0,0 +1,89 @@ +#N canvas 153 209 946 576 12; +#X obj 163 390 line~; +#X obj 401 438 line~; +#X obj 163 511 *~; +#X obj 383 229 r \$1; +#X obj 363 316 dbtorms; +#X obj 383 281 unpack; +#X obj 383 255 t l b; +#X obj 401 412 pack; +#X obj 447 283 30; +#X obj 163 286 unpack; +#X obj 163 260 r \$2; +#X obj 163 470 osc~; +#X obj 163 312 mtof; +#X obj 363 342 sqrt; +#X obj 363 368 sqrt; +#X obj 163 338 sqrt; +#X obj 163 364 sqrt; +#X obj 163 418 *~; +#X obj 163 444 *~; +#X obj 401 464 *~; +#X obj 400 492 *~; +#X obj 96 486 inlet~; +#X obj 96 538 outlet~; +#X obj 96 512 +~; +#X floatatom 293 342 0 0 0; +#X msg 294 316 set \$1; +#X obj 294 368 s \$1; +#X floatatom 96 336 0 0 0; +#X msg 96 310 set \$1; +#X obj 96 362 s \$2; +#X text 370 201 amplitude; +#X text 157 233 pitch; +#X text 27 36 The amplitude and pitch are controlled by quartic envelopes +as in the previous example. Here we introduce two new features. First +\, there are number boxes to show the most recent targets for amplitude +and frequency \, which you can also use to change the values. Also +\, if amplitude gets a message without an explicit time value \, we +supply a default of "30".; +#X text 27 149 Other small differences from the previous patch: pitch +and amplitude are now in MIDI and dB \, and there's a summing bus arrangement +(the inlet~ \, +~ \, and outlet~).; +#X text 15 295 see or; +#X text 16 315 change; +#X text 16 336 pitch-->; +#X text 233 325 and; +#X text 233 342 amp-->; +#X text 488 283 "30" is short for "float 30." This is; +#X text 495 302 more CPU efficient than a message.; +#X text 451 403 The "pack" always gets a 30 \, but if you send a pair +of numbers to amplitude \, the second one overrides the 30; +#X text 439 254 first bang the "30" \, then pass the list on; +#X text 62 7 This abstraction is used in patch 68.qlist.pd.; +#X connect 0 0 17 0; +#X connect 0 0 17 1; +#X connect 1 0 19 0; +#X connect 1 0 19 1; +#X connect 2 0 23 1; +#X connect 3 0 6 0; +#X connect 4 0 13 0; +#X connect 5 0 4 0; +#X connect 5 0 25 0; +#X connect 5 1 7 1; +#X connect 6 0 5 0; +#X connect 6 1 8 0; +#X connect 7 0 1 0; +#X connect 8 0 7 1; +#X connect 9 0 12 0; +#X connect 9 0 28 0; +#X connect 9 1 0 1; +#X connect 10 0 9 0; +#X connect 11 0 2 0; +#X connect 12 0 15 0; +#X connect 13 0 14 0; +#X connect 14 0 7 0; +#X connect 15 0 16 0; +#X connect 16 0 0 0; +#X connect 17 0 18 0; +#X connect 17 0 18 1; +#X connect 18 0 11 0; +#X connect 19 0 20 0; +#X connect 19 0 20 1; +#X connect 20 0 2 1; +#X connect 21 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 26 0; +#X connect 25 0 24 0; +#X connect 27 0 29 0; +#X connect 28 0 27 0; diff --git a/desiredata/doc/3.audio.examples/output~.pd b/desiredata/doc/3.audio.examples/output~.pd new file mode 100644 index 00000000..81ad3b7f --- /dev/null +++ b/desiredata/doc/3.audio.examples/output~.pd @@ -0,0 +1,66 @@ +#N canvas 0 0 615 578 12; +#X obj 353 490 t b; +#X obj 353 437 f; +#X obj 353 515 f; +#X msg 467 514 0; +#X obj 353 467 moses 1; +#X obj 467 486 t b f; +#X obj 433 447 moses 1; +#X obj 29 97 dbtorms; +#X obj 85 170 inlet~; +#X msg 299 310 \; pd dsp 1; +#X obj 29 170 line~; +#X obj 64 242 *~; +#X obj 64 272 dac~; +#X obj 29 127 pack 0 50; +#X text 121 146 audio in; +#X text 138 464 test if less than 1 -->; +#X text 104 491 if true convert to bang -->; +#X text 100 96 <-- convert from dB to linear units; +#X floatatom 323 219 3 0 100 0 dB - -; +#X obj 350 240 bng 15 250 50 0 empty empty mute -38 7 0 12 -262144 +-1 -1; +#X text 118 126 <-- make a ramp to avoid clicks or zipper noise; +#X obj 148 170 inlet~; +#X obj 154 241 *~; +#X text 373 378 MUTE logic:; +#X obj 323 174 r \$0-master-lvl; +#X obj 353 541 s \$0-master-lvl; +#X obj 323 279 s \$0-master-out; +#X obj 29 71 r \$0-master-out; +#X obj 433 418 r \$0-master-out; +#X text 60 10 Level control abstraction \, used in many of the Pd example +patches. The "level" and "mute" controls show up on the parent \, calling +patch.; +#X text 66 517 previous nonzero master-lvl -->; +#X text 138 421 recall previous; +#X text 138 439 value of master-lvl -->; +#X text 39 319 automatically start DSP -->; +#X obj 85 192 hip~ 3; +#X obj 147 192 hip~ 3; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 25 0; +#X connect 3 0 25 0; +#X connect 4 0 0 0; +#X connect 4 1 5 0; +#X connect 5 0 3 0; +#X connect 6 1 2 1; +#X connect 7 0 13 0; +#X connect 8 0 34 0; +#X connect 10 0 22 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 13 0 10 0; +#X connect 18 0 9 0; +#X connect 18 0 26 0; +#X connect 19 0 1 0; +#X connect 21 0 35 0; +#X connect 22 0 12 1; +#X connect 24 0 18 0; +#X connect 27 0 7 0; +#X connect 28 0 1 1; +#X connect 28 0 6 0; +#X connect 34 0 11 1; +#X connect 35 0 22 1; +#X coords 0 0 1 1 65 55 1 300 200; diff --git a/desiredata/doc/3.audio.examples/partial.pd b/desiredata/doc/3.audio.examples/partial.pd new file mode 100644 index 00000000..03bb925d --- /dev/null +++ b/desiredata/doc/3.audio.examples/partial.pd @@ -0,0 +1,76 @@ +#N canvas 18 78 880 448 12; +#X obj 465 234 sqrt; +#X text 17 88 trigger; +#X text 33 175 relative frequency; +#X obj 17 341 *~; +#X obj 227 322 line~; +#X obj 227 349 *~; +#X obj 227 376 *~; +#X msg 227 285 0 \$1; +#X obj 465 261 sqrt; +#X obj 17 113 r trigger; +#X obj 465 180 float \$1; +#X obj 249 235 r duration; +#X obj 39 226 r frequency; +#X obj 227 158 t b b; +#X text 303 209 relative duration; +#X obj 17 368 throw~ sum; +#X obj 17 140 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 465 288 \$1 5; +#X obj 227 185 del 5; +#X obj 465 207 * 0.1; +#X obj 17 279 + \$4; +#X text 550 178 get amplitude from argument 1; +#X text 524 206 normalize to 0.1; +#X text 516 233 take fourth root (square root twice); +#X text 544 250 because we'll raise line~ output to; +#X text 543 267 fourth power; +#X text 515 292 attack time 5 msec; +#X text 280 184 decay after 5 msec; +#X text 469 157 attack; +#X obj 226 211 float \$2; +#X obj 227 258 *; +#X text 264 258 actual duration; +#X obj 17 200 float \$3; +#X obj 17 252 *; +#X obj 17 314 osc~; +#X text 49 252 times global freq.; +#X text 60 279 plus detune; +#X text 271 285 decay msg to line~; +#X text 266 350 raise to fourth power for; +#X text 267 368 natural-sounding decay shape; +#X text 20 396 add to global; +#X text 19 415 summing bus; +#X text 21 45 This patch is used as an abstraction in the additive +synthesis example \, D06.additive.pd; +#X text 25 4 partial -- sinusoidal partial for additive synthesis; +#X text 631 12 arguments:; +#X text 605 37 1 amplitude \; 2 relative duration \; 3 relative frequency +\; 4 detune; +#X connect 0 0 8 0; +#X connect 3 0 15 0; +#X connect 4 0 5 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X connect 5 0 6 1; +#X connect 6 0 3 1; +#X connect 7 0 4 0; +#X connect 8 0 17 0; +#X connect 9 0 16 0; +#X connect 10 0 19 0; +#X connect 11 0 30 1; +#X connect 12 0 33 1; +#X connect 13 0 18 0; +#X connect 13 1 10 0; +#X connect 16 0 13 0; +#X connect 16 0 32 0; +#X connect 17 0 4 0; +#X connect 18 0 29 0; +#X connect 19 0 0 0; +#X connect 20 0 34 0; +#X connect 29 0 30 0; +#X connect 30 0 7 0; +#X connect 32 0 33 0; +#X connect 33 0 20 0; +#X connect 34 0 3 0; diff --git a/desiredata/doc/3.audio.examples/qlist-sampler.txt b/desiredata/doc/3.audio.examples/qlist-sampler.txt new file mode 100644 index 00000000..0c412767 --- /dev/null +++ b/desiredata/doc/3.audio.examples/qlist-sampler.txt @@ -0,0 +1,147 @@ +note 60 90 50 2 50 30 30; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +15 note 60; +100 note 59 90 100; +comment measure 1; +100 note 60 90 150 2 0; + note 36 90 200 2 50; +200 note 48 90 250 2 0; + note 40 90 200 2 50; + note 43 90 200 2 50; +200 note 48 90 250 2 0; + note 31 90 200 2 50; +200 note 55 90 100; + note 41 90 200; + note 43 90 200; +100 note 53 90 100; +100 note 52 90 100; + note 36 90 200; +100 note 55 90 100; +100 note 60 90 100; + note 40 90 200; + note 43 90 200; +100 note 59 90 100; +100 note 60 90 100; + note 25 90 200; +100 note 64 90 100; +100 note 62 90 100; + note 39 90 200; + note 43 90 200; +100 note 61 90 100; + +comment measure 2; +100 note 62 90 150 2 0; + note 26 90 200; +200 note 50 90 250 2 50; + note 41 90 200; + note 42 90 200; +200 note 50 90 250; + note 29 90 200; +200 note 50 90 100; + note 30 90 200; + note 44 90 200; + note 48 90 200; +100 note 48 90 100; +100 note 47 90 100; + note 31 90 200; + note 43 90 200; + note 47 90 200; +100 note 50 90 100; +100 note 55 90 100; + note 34 90 200; + note 42 90 200; + note 46 90 200; +100 note 54 90 100; +100 note 55 90 200; + note 35 90 200; + note 42 90 200; + note 45 90 200; +200 note 57 90 100; + note 41 90 200; + note 47 90 200; +100 note 59 90 100; +comment measure 3; +100 note 60 90 100; + note 24 90 200; + note 40 90 200; + note 48 90 200 2 0; + +100 note 59 90 100 2 50; +100 note 57 90 100; +100 note 55 90 100; + +100 note 57 90 100; + note 28 90 200; + note 38 90 200; + note 46 90 200; +100 note 55 90 100; +100 note 53 90 100; +100 note 52 90 100; + +100 note 53 90 100; + note 29 90 100; + note 36 90 100; + note 45 90 100; +100 note 52 90 100; +100 note 50 90 100; + note 29 90 300; + note 36 90 300; + note 45 90 300; +100 note 48 90 100; + +100 note 50 90 100; +100 note 48 90 100; +100 note 47 90 100; + note 29 90 300; + note 38 90 300; + note 44 90 300 2 0; +100 note 45 90 100 2 50; + +comment measure 4; +100 note 43 90 100; + note 31 90 200; + note 38 90 200; +100 note 48 90 100; +100 note 47 90 100; + note 31 90 300; + note 40 90 300; + note 43 90 300 2 0; +100 note 50 90 100 2 50; + +100 note 48 90 100; +100 note 52 90 100; +100 note 50 90 100; + note 31 90 300 2 0; + note 41 90 300; + note 43 90 300; +100 note 53 90 100 2 50; + +100 note 52 90 200; + note 31 90 300 2 50; +200 note 48 90 200; + note 19 90 200 2 50; + note 29 90 200 2 50; + note 36 90 200 2 50; + +200 note 48 90 100 2 50 0 4000; + note 12 90 300; + note 28 90 300; + note 36 90 300; + + + diff --git a/desiredata/doc/3.audio.examples/qlist.txt b/desiredata/doc/3.audio.examples/qlist.txt new file mode 100644 index 00000000..719dc89b --- /dev/null +++ b/desiredata/doc/3.audio.examples/qlist.txt @@ -0,0 +1,56 @@ +# This is a qlist for patch number 68, which demonstrates an oscillator +bank. +; +# comments start with a "#" which must be followed by a space. The comment +is terminated by a semicolon like this: ; + +# first an arpeggio. You can group them in lines as you please. The 100s at +the beginnings of lines are delay times. ; + +pit1 89; amp1 80; +100 pit2 72; amp2 80; +100 pit3 57; amp3 90; +100 pit4 84; amp4 78; +100 pit5 74; amp5 74; +100 pit6 73; amp6 74; +100 pit7 100; amp7 78; +100 pit8 37; amp8 95; + +# after a 600-msec rest, gliss four of the oscillators to new frequencies. ; +600 pit1 70 1000; +300 pit8 40 1000; +300 pit4 89 1000; +300 pit7 95 1000; + +# a second later, turn them off with decay time 1500 ; +1000 +amp1 0 1500; +amp2 0 1500; +amp3 0 1500; +amp4 0 1500; +amp5 0 1500; +amp6 0 1500; +amp7 0 1500; +amp8 0 1500; + +# and re-attack them.. ; +1000 +amp1 85 5; +amp2 85 5; +amp3 85 5; +amp4 90 5; +amp5 85 5; +amp6 85 5; +amp7 90 5; +amp8 85 5; + +# this time, try varying decay times. ; +10 +amp1 0 2000; +amp2 0 2000; +amp3 0 2000; +amp4 0 500; +amp5 0 1000; +amp6 0 1000; +amp7 0 500; +amp8 0 4000; diff --git a/desiredata/doc/3.audio.examples/qlist2.txt b/desiredata/doc/3.audio.examples/qlist2.txt new file mode 100644 index 00000000..5c272646 --- /dev/null +++ b/desiredata/doc/3.audio.examples/qlist2.txt @@ -0,0 +1,5 @@ +note 36; +1000 note 34; +1000 note 33; +1000 note 31; +1000 qlist bang; diff --git a/desiredata/doc/3.audio.examples/reverb-echo.pd b/desiredata/doc/3.audio.examples/reverb-echo.pd new file mode 100644 index 00000000..81c96131 --- /dev/null +++ b/desiredata/doc/3.audio.examples/reverb-echo.pd @@ -0,0 +1,24 @@ +#N canvas 118 224 600 492 12; +#X obj 66 95 inlet~; +#X obj 130 96 inlet~; +#X obj 68 216 outlet~; +#X obj 141 215 outlet~; +#X obj 67 143 +~; +#X obj 140 141 -~; +#X obj 141 165 delwrite~ \$1 \$2; +#X obj 140 191 delread~ \$1 \$2; +#X text 48 14 This appears as an abstraction in patch G08.reverb.pd +; +#X text 27 267 This network makes two copies of the (stereo) input +\, one in phase \, the other out of phase and delayed. The total frequency +response is flat. The total signal power out is exactly twice that +of the input \, no matter what freqiencies the input contains. This +is used to increase echo density \, by stacking several of these units +with different delay times. Each stage doubles the echo density.; +#X connect 0 0 4 0; +#X connect 0 0 5 0; +#X connect 1 0 4 1; +#X connect 1 0 5 1; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 7 0 3 0; diff --git a/desiredata/doc/3.audio.examples/sampvoice.pd b/desiredata/doc/3.audio.examples/sampvoice.pd new file mode 100644 index 00000000..b277d345 --- /dev/null +++ b/desiredata/doc/3.audio.examples/sampvoice.pd @@ -0,0 +1,114 @@ +#N canvas 231 67 705 628 12; +#X obj 278 476 *~; +#X obj 177 604 outlet~; +#X obj 104 396 makefilename sample%d; +#X msg 104 419 set \$1; +#X obj 104 442 tabread4~ sample1; +#X obj 360 419 dbtorms; +#X obj 381 395 unpack; +#X obj 360 442 sqrt; +#X obj 360 465 sqrt; +#X obj 338 559 *~; +#X obj 406 513 *~; +#X obj 406 536 *~; +#X msg 201 42 bang; +#X obj 201 72 delay 5; +#X obj 289 95 unpack 0 0 0 0 0 0 0; +#X obj 426 184 f; +#X obj 367 161 f; +#X obj 309 161 f; +#X obj 278 161 f; +#X obj 247 161 f; +#X obj 156 159 f; +#X obj 156 182 mtof; +#X obj 156 205 / 261.62; +#X obj 156 228 * 4.41e+08; +#X obj 156 251 +; +#X obj 399 161 delay; +#X obj 247 303 pack 0 0 0 0 0; +#X obj 201 95 t b b b; +#X obj 309 207 + 1; +#X obj 309 184 * 44.1; +#X msg 55 338 0 5; +#X msg 289 337 1 5; +#X msg 325 337 0 \, \$1 \$2; +#X msg 128 338 \$3 \, \$4 1e+07; +#X msg 253 337 \$5; +#X msg 405 337 0 \$1; +#X obj 289 72 inlet; +#X obj 177 553 inlet~; +#X obj 177 579 +~; +#X text 44 15 This is an abstraction used by the polyphonic sampler. +; +#X text 505 67 ARGUMENTS FOR NOTES:; +#X text 505 89 pitch in halftones; +#X text 505 113 amplitude (dB); +#X text 505 161 sample number; +#X text 505 137 duration (msec); +#X text 505 185 start location (msec); +#X text 505 209 rise time (msec); +#X text 505 233 decay time (msec); +#X obj 45 396 vline~; +#X obj 301 396 vline~; +#X obj 406 490 vline~; +#X connect 0 0 9 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 6 1 50 1; +#X connect 7 0 8 0; +#X connect 8 0 50 0; +#X connect 9 0 38 1; +#X connect 10 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 9 1; +#X connect 12 0 13 0; +#X connect 12 0 30 0; +#X connect 13 0 27 0; +#X connect 14 0 20 1; +#X connect 14 0 12 0; +#X connect 14 1 19 1; +#X connect 14 2 25 1; +#X connect 14 3 18 1; +#X connect 14 4 17 1; +#X connect 14 5 16 1; +#X connect 14 6 15 1; +#X connect 15 0 35 0; +#X connect 16 0 26 1; +#X connect 17 0 29 0; +#X connect 18 0 26 4; +#X connect 19 0 26 0; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 26 3; +#X connect 25 0 15 0; +#X connect 26 0 31 0; +#X connect 26 0 32 0; +#X connect 26 0 33 0; +#X connect 26 0 34 0; +#X connect 27 0 19 0; +#X connect 27 1 20 0; +#X connect 27 2 16 0; +#X connect 27 2 17 0; +#X connect 27 2 18 0; +#X connect 27 2 25 0; +#X connect 28 0 26 2; +#X connect 28 0 24 1; +#X connect 29 0 28 0; +#X connect 30 0 49 0; +#X connect 31 0 49 0; +#X connect 32 0 6 0; +#X connect 33 0 48 0; +#X connect 34 0 2 0; +#X connect 35 0 6 0; +#X connect 36 0 14 0; +#X connect 37 0 38 0; +#X connect 38 0 1 0; +#X connect 48 0 4 0; +#X connect 49 0 0 1; +#X connect 50 0 10 0; +#X connect 50 0 10 1; diff --git a/desiredata/doc/3.audio.examples/sampvoice2.pd b/desiredata/doc/3.audio.examples/sampvoice2.pd new file mode 100644 index 00000000..4350ea48 --- /dev/null +++ b/desiredata/doc/3.audio.examples/sampvoice2.pd @@ -0,0 +1,122 @@ +#N canvas 231 67 770 791 12; +#X obj 284 616 *~; +#X obj 183 744 outlet~; +#X obj 110 536 makefilename sample%d; +#X msg 110 559 set \$1; +#X obj 110 582 tabread4~ sample1; +#X obj 367 559 dbtorms; +#X obj 367 536 unpack; +#X obj 367 582 sqrt; +#X obj 367 605 sqrt; +#X obj 367 628 line~; +#X obj 344 699 *~; +#X obj 367 651 *~; +#X obj 367 674 *~; +#X msg 122 184 bang; +#X obj 130 207 delay 5; +#X obj 437 275 f; +#X obj 399 276 f; +#X obj 322 276 f; +#X obj 283 276 f; +#X obj 252 276 f; +#X obj 159 263 f; +#X obj 159 286 mtof; +#X obj 159 309 / 261.62; +#X obj 159 332 * 4.41e+08; +#X obj 159 363 +; +#X obj 253 443 pack 0 0 0 0 0; +#X obj 130 230 t b b b; +#X obj 322 322 + 1; +#X obj 322 299 * 44.1; +#X msg 85 478 0 5; +#X msg 295 477 1 5; +#X msg 331 477 0 \, \$1 \$2; +#X msg 134 478 \$3 \, \$4 1e+07; +#X msg 259 477 \$5; +#X msg 411 477 0 \$1; +#X obj 230 119 inlet; +#X obj 183 693 inlet~; +#X obj 183 719 +~; +#X text 498 181 pitch in halftones; +#X text 499 158 amplitude (dB); +#X text 499 206 sample number; +#X text 499 230 start location (msec); +#X text 499 254 rise time (msec); +#X text 499 278 decay time (msec); +#X text 498 133 ARGUMENTS FOR NOTE ON:; +#X text 460 317 (Zero amplitude means note off \;; +#X text 481 338 other parameters are ignored.); +#X obj 230 144 route 0; +#X obj 288 175 unpack 0 0 0 0 0 0; +#X text 35 5 This is an abstraction used by the polyphonic sampler +\, version 2 \, which takes separate note-on and note-off messages. +Unlike "sampvoice" (the first version) \, there is no "duration" field +\, and the amplitude and pitch fields are reversed to make it easy +to separate note-on from note-off messages (which have amplitude zero.) +; +#X text 299 153 note-on; +#X text 155 153 note-off; +#X obj 50 536 vline~; +#X obj 307 536 vline~; +#X msg 230 166 bang; +#X connect 0 0 10 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 7 0; +#X connect 6 0 5 0; +#X connect 6 1 9 1; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 9 0 11 1; +#X connect 10 0 37 1; +#X connect 11 0 12 0; +#X connect 11 0 12 1; +#X connect 12 0 10 1; +#X connect 13 0 14 0; +#X connect 13 0 29 0; +#X connect 14 0 26 0; +#X connect 15 0 34 0; +#X connect 16 0 25 1; +#X connect 17 0 28 0; +#X connect 18 0 25 4; +#X connect 19 0 25 0; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 25 3; +#X connect 25 0 30 0; +#X connect 25 0 31 0; +#X connect 25 0 32 0; +#X connect 25 0 33 0; +#X connect 26 0 19 0; +#X connect 26 1 20 0; +#X connect 26 2 16 0; +#X connect 26 2 17 0; +#X connect 26 2 18 0; +#X connect 27 0 25 2; +#X connect 27 0 24 1; +#X connect 28 0 27 0; +#X connect 29 0 53 0; +#X connect 30 0 53 0; +#X connect 31 0 6 0; +#X connect 32 0 52 0; +#X connect 33 0 2 0; +#X connect 34 0 6 0; +#X connect 35 0 47 0; +#X connect 36 0 37 0; +#X connect 37 0 1 0; +#X connect 47 0 54 0; +#X connect 47 1 48 0; +#X connect 48 0 13 0; +#X connect 48 0 19 1; +#X connect 48 1 20 1; +#X connect 48 2 18 1; +#X connect 48 3 17 1; +#X connect 48 4 16 1; +#X connect 48 5 15 1; +#X connect 52 0 4 0; +#X connect 53 0 0 1; +#X connect 54 0 15 0; diff --git a/desiredata/doc/3.audio.examples/shepvoice.pd b/desiredata/doc/3.audio.examples/shepvoice.pd new file mode 100644 index 00000000..9e05c48b --- /dev/null +++ b/desiredata/doc/3.audio.examples/shepvoice.pd @@ -0,0 +1,47 @@ +#N canvas 471 146 638 403 12; +#X obj 156 262 pack 0 50; +#X obj 98 216 pack 0 50; +#X obj 29 298 inlet~; +#X obj 98 242 line~; +#X obj 156 288 line~; +#X obj 99 306 *~; +#X obj 29 324 +~; +#X obj 29 350 outlet~; +#X obj 285 165 r pitch+; +#X obj 185 139 r interval+; +#X obj 98 164 expr $f1 * $f2 + $f3; +#X obj 481 137 r dropoff+; +#X obj 297 63 expr ($i1% 10000) * 0.0002 - 1; +#X obj 297 11 r phase; +#X obj 297 37 + \$1; +#X obj 376 165 expr exp(-$f1*$f1*$f2); +#X obj 98 190 mtof; +#X obj 98 268 osc~; +#X text 64 8 our local phase =; +#X text 61 26 overall phase + our; +#X text 60 45 relative phase; +#X text 57 64 (modulo 10000); +#X text 59 81 normalized from -1 to 1; +#X text 349 36 \$1: relative phase; +#X text 9 110 pitch is center pitch; +#X text 16 125 + interval*phase; +#X text 373 194 amplitude is Gaussian \, with; +#X text 321 215 peak width controlled by "dropoff"; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 2 0 6 0; +#X connect 3 0 17 0; +#X connect 4 0 5 1; +#X connect 5 0 6 1; +#X connect 6 0 7 0; +#X connect 8 0 10 2; +#X connect 9 0 10 1; +#X connect 10 0 16 0; +#X connect 11 0 15 1; +#X connect 12 0 10 0; +#X connect 12 0 15 0; +#X connect 13 0 14 0; +#X connect 14 0 12 0; +#X connect 15 0 0 0; +#X connect 16 0 1 0; +#X connect 17 0 5 0; diff --git a/desiredata/doc/3.audio.examples/sinevoice.pd b/desiredata/doc/3.audio.examples/sinevoice.pd new file mode 100644 index 00000000..d8d1848b --- /dev/null +++ b/desiredata/doc/3.audio.examples/sinevoice.pd @@ -0,0 +1,67 @@ +#N canvas 621 65 547 441 12; +#X obj 120 299 line~; +#X obj 120 323 *~; +#X obj 120 346 *~; +#X obj 125 232 sqrt; +#X obj 96 39 inlet; +#X obj 125 253 sqrt; +#X obj 51 360 inlet~; +#X obj 51 413 outlet~; +#X obj 120 370 *~; +#X obj 206 351 osc~; +#X obj 51 388 +~; +#X obj 261 210 pack; +#X text 142 40 inlet: volume \, pitch \, duration; +#X obj 96 88 unpack 0 0 0; +#X text 12 2 arguments: \$1 = relative amplitude \, \$2 = pitch multiplier +\, \$3 = detune \, \$4 = time multiplier; +#X obj 157 117 dbtorms; +#X obj 157 139 * \$1; +#X obj 125 211 f; +#X obj 206 216 f; +#X obj 228 117 mtof; +#X obj 228 142 * \$2; +#X obj 228 164 + \$3; +#X obj 273 118 * \$4; +#X msg 8 148 0 5; +#X msg 99 118 bang; +#X obj 42 148 del 5; +#X obj 106 65 outlet; +#X msg 99 161 0; +#X obj 125 272 pack 0 5; +#X obj 99 139 del 10; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 8 0; +#X connect 3 0 5 0; +#X connect 4 0 13 0; +#X connect 4 0 26 0; +#X connect 5 0 28 0; +#X connect 6 0 10 0; +#X connect 8 0 10 1; +#X connect 9 0 8 1; +#X connect 10 0 7 0; +#X connect 11 0 0 0; +#X connect 13 0 15 0; +#X connect 13 0 23 0; +#X connect 13 0 24 0; +#X connect 13 1 19 0; +#X connect 13 2 22 0; +#X connect 15 0 16 0; +#X connect 16 0 17 1; +#X connect 17 0 3 0; +#X connect 18 0 9 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; +#X connect 21 0 18 1; +#X connect 22 0 11 1; +#X connect 23 0 0 0; +#X connect 24 0 25 0; +#X connect 24 0 29 0; +#X connect 25 0 17 0; +#X connect 25 0 18 0; +#X connect 27 0 11 0; +#X connect 28 0 0 0; +#X connect 29 0 27 0; diff --git a/desiredata/doc/3.audio.examples/spectrum-partial.pd b/desiredata/doc/3.audio.examples/spectrum-partial.pd new file mode 100644 index 00000000..3c242504 --- /dev/null +++ b/desiredata/doc/3.audio.examples/spectrum-partial.pd @@ -0,0 +1,57 @@ +#N canvas 211 116 826 530 12; +#X obj 28 412 osc~; +#X obj 94 197 r poll-table; +#X obj 129 337 + 50; +#X obj 129 363 dbtorms; +#X msg 78 339 0; +#X obj 78 392 pack 0 30; +#X obj 78 422 line~; +#X obj 28 471 throw~ sum-bus; +#X obj 28 442 *~; +#X obj 28 87 r pitch; +#X obj 28 114 mtof; +#X obj 78 230 f; +#X obj 28 142 * \$1; +#X obj 37 168 ftom; +#X obj 79 256 -; +#X obj 121 255 r whammybar; +#X text 28 9 This abstraction is used by the spectrum drawing example +\, number 16...; +#X text 61 46 \$1 is the partial number.; +#X text 79 114 pitch to frequency; +#X text 78 141 then get the frequency of this specific partial; +#X text 81 167 ... and then convert back to pitch.; +#X text 115 230 ... at which time we get the pitch back...; +#X text 233 249 ... and transpose \, effectively shifting the spectral +envelope left and right.; +#X text 203 341 The vertical scale is dB from 1 to 50 \, but we want +true zero when the table value is 0 or less.; +#X text 172 398 Amplitude control via pack \, line~ \, and *~.; +#X text 171 444 Finally \, add to a summing bus via throw~. All the +throw~s in the instantiations of this abstraction will add into the +one "catch~ sum-bus" at the output.; +#X text 216 195 the calling patch bangs "poll-table" every 30 msec. +; +#X obj 78 284 tabread4 spectrum-tab; +#X text 285 288 Finally get the strength from the table. Note that +we use the control object \, tabread4 \, not tabread4~.; +#X obj 78 311 moses 1; +#X connect 0 0 8 0; +#X connect 1 0 11 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 8 1; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 12 0; +#X connect 11 0 14 0; +#X connect 12 0 13 0; +#X connect 12 0 0 0; +#X connect 13 0 11 1; +#X connect 14 0 27 0; +#X connect 15 0 14 1; +#X connect 27 0 29 0; +#X connect 29 0 4 0; +#X connect 29 1 2 0; diff --git a/desiredata/doc/4.data.structures/00.intro.txt b/desiredata/doc/4.data.structures/00.intro.txt new file mode 100644 index 00000000..a1df9a88 --- /dev/null +++ b/desiredata/doc/4.data.structures/00.intro.txt @@ -0,0 +1,113 @@ +Pd release 0.23 and onward include objects for managing lists of data. The +objects allow you to describe data structures and how they are viewed +("template objects") and to traverse lists ("traversal objects.") + +The rest of this file gives a highly condensed summary of what's there; the +patches, starting with "1.scalars.pd", act as a tutorial. + +1. TEMPLATE OBJECTS. + +templates describe data structures. You can add an item to a data structure +using "field" or ask for a shape to be drawn using a "display command." + +1.1. "template" -- data structure. + +usage, "template ..." + +where the fields are either "float ", "symbol ", "list " +(don't try that yet); or "array . + +1.2. DISPLAY COMMANDS. + + +These are objects which ask Pd to draw a shape corresponding to some fields +of the datum. + +1.2.1. POLYGONS and CURVES. + +polygons: polygon ... +filled polygons: fpolygon ... +curves: curve ... +filled curves: fcurve ... + +Each argument can either be a number or a symbol. If a symbol, it's the +name of a field (which must be a "float) which specifies the vaiue. +So for instance in the "1.scalar.pd" example, in the template "template1", +the object "fpolygon 244 q 5 0 0 20 z 40 0" draws a filled polygon whose +interior color is 244 (red 2, green 4, blue 4) but whose outline color +depends on the value of the field "q". Its coordinates describe a triangle +whose altitude is given by "z." + +1.2.2 PLOT. + +The "plot" objects plots an array field as shown in 5_array.pd. + +2. TRAVERSAL. + +In this release of Pd, you can only traverse lists all of whose elements +belong to the same template; this restriction will be relaxed in a future +release. You "traverse" a list either to build it, to get its elements, +or to change their values. + +2.1. POINTER. + +The "pointer" object can be used to refer to an element of a list. Its +methods are: + +2.1.1. traverse . + +Point to the "head" of a list. The symbol should match the name of a Pd +window holding the list. The pointer is output, but you can't set or get the +fields of the "head" pointer; you can only get the "next" element or "append" +to the list. + +2.1.2. next. Goes to the next element of the list. Either the pointer +is output on the left side, or else a "bang" at right tells you that no +more objects are forthcoming. + +2.1.3. bang. +outputs the current pointer. + +2.2. APPEND. Adds an element of the specified template to the list. You +specify what fields you want to supply and the last inlet takes a pointer to +the element you want to "append" after. + +2.3. GET. + + get