From 19822c017fab87533ccbfc5ce9536dc05abdbbe6 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Tue, 12 Apr 2022 23:17:03 -0300 Subject: [PATCH] replace in opening quotations --- book.html | 2 +- node10.html | 2 +- node101.html | 34 +++++++++++++++++----------------- node104.html | 2 +- node11.html | 4 ++-- node110.html | 4 ++-- node112.html | 2 +- node113.html | 2 +- node115.html | 4 ++-- node117.html | 2 +- node119.html | 6 +++--- node12.html | 8 ++++---- node120.html | 8 ++++---- node121.html | 6 +++--- node122.html | 4 ++-- node123.html | 4 ++-- node124.html | 2 +- node125.html | 6 +++--- node139.html | 4 ++-- node14.html | 2 +- node141.html | 2 +- node149.html | 2 +- node156.html | 2 +- node157.html | 4 ++-- node16.html | 12 ++++++------ node162.html | 2 +- node163.html | 2 +- node167.html | 2 +- node17.html | 4 ++-- node171.html | 2 +- node172.html | 4 ++-- node173.html | 4 ++-- node174.html | 2 +- node178.html | 2 +- node179.html | 6 +++--- node180.html | 20 ++++++++++---------- node181.html | 10 +++++----- node182.html | 18 +++++++++--------- node19.html | 12 ++++++------ node198.html | 2 +- node199.html | 4 ++-- node20.html | 6 +++--- node201.html | 2 +- node21.html | 4 ++-- node22.html | 6 +++--- node23.html | 20 ++++++++++---------- node24.html | 2 +- node26.html | 6 +++--- node28.html | 14 +++++++------- node29.html | 2 +- node30.html | 14 +++++++------- node31.html | 2 +- node33.html | 8 ++++---- node34.html | 14 +++++++------- node36.html | 6 +++--- node37.html | 12 ++++++------ node38.html | 4 ++-- node41.html | 4 ++-- node42.html | 4 ++-- node43.html | 2 +- node44.html | 2 +- node46.html | 4 ++-- node47.html | 6 +++--- node49.html | 10 +++++----- node5.html | 2 +- node51.html | 4 ++-- node52.html | 4 ++-- node53.html | 8 ++++---- node55.html | 2 +- node56.html | 18 +++++++++--------- node57.html | 2 +- node59.html | 28 ++++++++++++++-------------- node6.html | 6 +++--- node63.html | 2 +- node64.html | 8 ++++---- node67.html | 18 +++++++++--------- node69.html | 14 +++++++------- node71.html | 10 +++++----- node73.html | 28 ++++++++++++++-------------- node74.html | 2 +- node75.html | 2 +- node76.html | 4 ++-- node77.html | 4 ++-- node78.html | 4 ++-- node81.html | 2 +- node9.html | 2 +- node92.html | 4 ++-- node95.html | 4 ++-- node98.html | 2 +- 89 files changed, 282 insertions(+), 282 deletions(-) diff --git a/book.html b/book.html index 25732ae..04d6d50 100644 --- a/book.html +++ b/book.html @@ -499,7 +499,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds
  • Narrow-band companding: noise suppression
  • Timbre stamp (``vocoder") + HREF="node181.html">Timbre stamp ("vocoder")
  • Phase vocoder time bender diff --git a/node10.html b/node10.html index 7e014d8..55d636f 100644 --- a/node10.html +++ b/node10.html @@ -85,7 +85,7 @@ nominal amplitude
    Figure 1.4: -The relationship between ``MIDI" pitch and frequency in cycles per +The relationship between "MIDI" pitch and frequency in cycles per second (Hertz). The span of 24 MIDI values on the horizontal axis represents two octaves, over which the frequency increases by a factor of four.
    Example F12.paf.pd (Figure 6.18) is a realization of the PAF generator, described in Section 6.4. The control inputs specify the fundamental frequency, the center frequency, and -the bandwidth, all in ``MIDI" units. The first steps taken in the realization +the bandwidth, all in "MIDI" units. The first steps taken in the realization are to divide center frequency by fundamental (to get the center frequency quotient) and bandwidth by fundamental to get the index of modulation for the waveshaper. The center frequency quotient is sampled-and-held so that it is @@ -95,7 +95,7 @@ only updated at periods of the fundamental.

    The one oscillator (the phasor~ object) runs at the fundamental frequency. This is used both to control a samphold~ object which -synchronizes updates to the center frequency quotient (labeled ``C.F. relative +synchronizes updates to the center frequency quotient (labeled "C.F. relative to fundamental" in the figure), and to compute phases for both cos~ objects which operate as shown earlier in Figure 6.17.

    @@ -115,7 +115,7 @@ The amplitude of the half-sinusoid is then adjusted by an index of modulation WIDTH="38" HEIGHT="32" ALIGN="MIDDLE" BORDER="0" SRC="img588.png" ALT="${\omega_b}/\omega$">). The table -(``bell-curve") holds an unnormalized Gaussian curve sampled +("bell-curve") holds an unnormalized Gaussian curve sampled from -4 to 4 over 200 points (25 points per unit), so the center of the table, at point 100, corresponds to the central peak of the bell curve. Outside the interval from -4 to 4 the Gaussian curve is negligibly small. @@ -145,31 +145,31 @@ Filling in the wavetable for Figure 6.18. WIDTH="57" HEIGHT="41" ALIGN="MIDDLE" BORDER="0" SRC="img623.png" ALT="\fbox{ $\mathrm{until}$\ }"> : -When the left, ``start" inlet is banged, output sequential bangs (with no -elapsed time between them) iteratively, until the right, ``stop" inlet is -banged. The stopping ``bang" message must originate somehow from the -until object's outlet; otherwise, the outlet will send ``bang" messages +When the left, "start" inlet is banged, output sequential bangs (with no +elapsed time between them) iteratively, until the right, "stop" inlet is +banged. The stopping "bang" message must originate somehow from the +until object's outlet; otherwise, the outlet will send "bang" messages forever, freezing out any other object which could break the loop.

    As used here, a loop driven by an until object counts from 0 to 199, inclusive. The loop count is maintained by the -``f" and ``+ 1" objects, each of which feeds the other. But -since the ``+ 1" object's output goes to the right inlet of the -``f", its result (one greater) will only emerge from the -``f" the next time it is banged by ``until". So each bang -from ``until" increments the value by one. +"f" and "+ 1" objects, each of which feeds the other. But +since the "+ 1" object's output goes to the right inlet of the +"f", its result (one greater) will only emerge from the +"f" the next time it is banged by "until". So each bang +from "until" increments the value by one.

    -The order in which the loop is started matters: the upper ``t b b" -object (short for ``trigger bang bang") must first send zero to the -``f", thus initializing it, and then set the until object sending +The order in which the loop is started matters: the upper "t b b" +object (short for "trigger bang bang") must first send zero to the +"f", thus initializing it, and then set the until object sending bangs, incrementing the value, until stopped. To stop it when the value reaches 199, a select object checks the value and, when it sees the -match, bangs the ``stop" inlet of the until object. +match, bangs the "stop" inlet of the until object.

    -Meanwhile, for every number from 0 to 199 that comes out of the ``f" +Meanwhile, for every number from 0 to 199 that comes out of the "f" object, we create an ordered pair of messages to the tabwrite object. First, at right, goes the index itself, from 0 to 199. Then for the left inlet, the first expr object adjusts the index to range from -4 to 4 (it diff --git a/node104.html b/node104.html index 4966608..a2159f7 100644 --- a/node104.html +++ b/node104.html @@ -100,7 +100,7 @@ notes.

    Echos: At time shifts between about 30 milliseconds and about a second, the later copy of the signal can sound like an echo of the earlier one. An echo may reduce the intelligibility of the signal (especially if it consists of -speech), but usually won't change the overall ``shape" of melodies or +speech), but usually won't change the overall "shape" of melodies or phrases.

    diff --git a/node11.html b/node11.html index ae0f040..1285885 100644 --- a/node11.html +++ b/node11.html @@ -92,7 +92,7 @@ A convenient logarithmic scale for pitch is simply to count the number of half-steps from a reference pitch--allowing fractions to permit us to specify pitches which don't fall on a note of the Western scale. The most commonly used logarithmic pitch scale is -``MIDI pitch", in which the pitch 69 is assigned to a frequency of 440 cycles +"MIDI pitch", in which the pitch 69 is assigned to a frequency of 440 cycles per second--the A above middle C. To convert between a MIDI pitch

    In order to work with power-conserving delay networks we will need an -explicit definition of ``total average power". +explicit definition of "total average power". If there is only one signal (call it $R$; (b) the ``all-pass" configuration. + ALT="$R$">; (b) the "all-pass" configuration.

    $x[n-1.5]$. We could do this using standard four-point interpolation, putting a cubic -polynomial through the four ``known" points (0, x[n]), (1, x[n-1]), (2, x[n-2]), +polynomial through the four "known" points (0, x[n]), (1, x[n-1]), (2, x[n-2]), (3, x[n-3]), and then evaluating the polynomial at the point 1.5. Doing this repeatedly for each value of \fbox{ \texttt{delread\~}}: -read from (or ``tap") a delay line. The first creation argument gives the name +read from (or "tap") a delay line. The first creation argument gives the name of the delay line (which should agree with the name of the corresponding delwrite~ object; this is how Pd knows which delwrite~ to associate with the delread~ object). The diff --git a/node119.html b/node119.html index 9f7a948..a1848bc 100644 --- a/node119.html +++ b/node119.html @@ -106,7 +106,7 @@ achievable delay is one sample. Here the objects on the left side, from the top down to the clip -0.2 0.2 object, form a waveshaping network; the index is set by the -``timbre" control, and the waveshaping output varies between a near sinusoid +"timbre" control, and the waveshaping output varies between a near sinusoid and a bright, buzzy sound. The output is added to the output of the vd~ object. The sum is then high pass filtered (the hip~ object at lower left), multiplied by a @@ -121,10 +121,10 @@ that the signal cannot exceed 1 in absolute value. The length of the delay is controlled by the signal input to the vd~ object. An oscillator with variable frequency and gain, in the center of the figure, provides the delay time. The oscillator is added to -one to make it nonnegative before multiplying it by the ``cycle depth" control, +one to make it nonnegative before multiplying it by the "cycle depth" control, which effectively sets the range of delay times. The minimum possible delay time of 1.46 milliseconds is added so that the true range of delay times -is between the minimum and the same plus twice the ``depth". The reason for this +is between the minimum and the same plus twice the "depth". The reason for this minimum delay time is taken up in the discussion of the next example.

    diff --git a/node12.html b/node12.html index e5fbf39..2f366d1 100644 --- a/node12.html +++ b/node12.html @@ -82,7 +82,7 @@ the software package specifies the network, sometimes called a which essentially corresponds to the synthesis algorithm to be used, and then worries about how to control the various unit generators in time. In this section, we'll use abstract block diagrams to describe patches, but in the -``examples" section (Page [*][*]), we'll choose a specific implementation environment and show some of the software-dependent details. @@ -158,13 +158,13 @@ Parts (c) and (d) show a more gently-varying possibility for $y[n]$ and the result. Intuition suggests that the result shown in (b) won't sound like an amplitude-varying sinusoid, but instead like a sinusoid interrupted by -an audible ``pop" after which it continues more quietly. In general, for +an audible "pop" after which it continues more quietly. In general, for reasons that can't be explained in this chapter, amplitude control signals $y[n]$ which ramp smoothly from one value to another are less likely to give -rise to parasitic results (such as that ``pop") than are abruptly changing +rise to parasitic results (such as that "pop") than are abruptly changing ones.

    @@ -173,7 +173,7 @@ sinusoids are the signals most sensitive to the parasitic effects of quick amplitude change. So when you want to test an amplitude transition, if it works for sinusoids it will probably work for other signals as well. Second, depending on the signal whose amplitude you are changing, the amplitude -control will need between 0 and 30 milliseconds of ``ramp" time--zero for the +control will need between 0 and 30 milliseconds of "ramp" time--zero for the most forgiving signals (such as white noise), and 30 for the least (such as a sinusoid). All this also depends in a complicated way on listening levels and the acoustic context. diff --git a/node120.html b/node120.html index f90d575..344ea87 100644 --- a/node120.html +++ b/node120.html @@ -86,8 +86,8 @@ tilde objects, and because of the connections, the object a~ must produce its output before either of b~ or c~ can run; and both of those in turn are used in the computation of d~. So the -possible orderings of these four objects are ``a-b-c-d" and -``a-c-b-d". These +possible orderings of these four objects are "a-b-c-d" and +"a-c-b-d". These two orderings will have exactly the same result unless the computation of b~ and c~ somehow affect each other's output (as delay operations might, for example). @@ -98,7 +98,7 @@ delay operations might, for example).
    Figure 7.26: Order of execution of tilde objects in Pd: (a), an acyclic network. -The objects may be executed in either the order ``a-b-c-d" or ``a-c-b-d". In +The objects may be executed in either the order "a-b-c-d" or "a-c-b-d". In part (b), there is a cycle, and there is thus no compatible linear ordering of the objects because each one would need to be run before the other.
    Figure 7.27: A patch using block size control to lower the loop delay below -the normal 64 samples: (a) the main patch; (b) the ``delay-writer" subpatch +the normal 64 samples: (a) the main patch; (b) the "delay-writer" subpatch with a block~ object and a recirculating delay network.
    7.28). Using subpatches to ensure that delay lines are written before they are read in non-recirculating networks: (a) the delwrite~ and vd~ objects might be executed in either -the ``right" or the ``wrong" order; (b) the delwrite~ object is inside the +the "right" or the "wrong" order; (b) the delwrite~ object is inside the pd delay-writer subpatch and the vd~ object is inside the pd delay-reader one. Because of the audio connection between the two subpatches, the order of @@ -116,8 +116,8 @@ the subpatch as a whole. So everything in the one subpatch happens before anything in the second one.)

    -In this example, the ``right" -and the ``wrong" way to make the comb filter have audibly different results. +In this example, the "right" +and the "wrong" way to make the comb filter have audibly different results. For delays less than 64 samples, the right hand side of the patch (using subpatches) gives the correct result, but the left hand side can't produce delays below the 64 sample block size. diff --git a/node122.html b/node122.html index 51d4d98..2d68389 100644 --- a/node122.html +++ b/node122.html @@ -78,7 +78,7 @@ Section 7.3. Using a variable, non-recirculating comb filter we take out odd harmonics, leaving only the even ones, which sound an octave higher. As before, the spectral envelope of the sound is -roughly preserved by the operation, so we can avoid the ``chipmunk" effect we +roughly preserved by the operation, so we can avoid the "chipmunk" effect we would have got by using speed change to do the transposition.

    @@ -86,7 +86,7 @@ would have got by using speed change to do the transposition.

    Figure 7.29: -An ``octave doubler" uses pitch information (obtained using +An "octave doubler" uses pitch information (obtained using a fiddle~ object) to tune a comb filter to remove the odd harmonics in an incoming sound.
    +make an "envelope".
    Figure 7.30: -A ``shaker", a four-tap comb filter with randomly varying gains +A "shaker", a four-tap comb filter with randomly varying gains on the taps.

    diff --git a/node125.html b/node125.html index db95044..16cf2be 100644 --- a/node125.html +++ b/node125.html @@ -72,8 +72,8 @@ Pitch shifter Example G09.pitchshift.pd (Figure 7.33) shows a realization of the pitch shifter described in Section 7.9. A delay line (defined and written elsewhere in the patch) is read using two vd~ objects. The delay -times vary between a minimum delay (provided as the ``delay" control) and the -minimum plus a window size (the ``window" control.) +times vary between a minimum delay (provided as the "delay" control) and the +minimum plus a window size (the "window" control.)

    @@ -112,7 +112,7 @@ t = {2 ^ {h/12}} = {e ^ {\log(2)/12 \cdot h}} \approx {e ^ {0.05776 h}}

    -(called ``speed change" in the patch). The computation labeled ``tape +(called "speed change" in the patch). The computation labeled "tape head rotation speed" is the same as the formula for $Q_i$ with an ``o" (calling it a ``zero") + ALT="$Q_i$"> with an "o" (calling it a "zero") and each of the $P_i$ with an ``x" (a ``pole"); their names are borrowed + ALT="$P_i$"> with an "x" (a "pole"); their names are borrowed from the field of complex analysis. A plot showing the poles and zeroes associated with a filter is unimaginatively called a pole-zero plot. diff --git a/node14.html b/node14.html index 12359f5..d847ec9 100644 --- a/node14.html +++ b/node14.html @@ -107,7 +107,7 @@ the smallest $\tau$ if any at which a signal repeats is called the signal's period. In discussing periods of digital audio signals, we quickly run into the -difficulty of describing signals whose ``period" isn't an integer, so that the +difficulty of describing signals whose "period" isn't an integer, so that the equation above doesn't make sense. For now we'll effectively ignore this difficulty by supposing that the signal 5.3 almost always contain a This is inaudible, but, since it specifies electrical power that is sent to your speakers, its presence reduces the level of loudness you can reach without distortion. Another name for a constant signal component is -``DC", meaning ``direct current". +"DC", meaning "direct current".

    An easy and practical way to remove the zero-frequency component from an audio diff --git a/node149.html b/node149.html index d05159e..996f1c4 100644 --- a/node149.html +++ b/node149.html @@ -225,7 +225,7 @@ where $q$ is the quality of the filter, defined as the center frequency divided by bandwidth. Resonant filters are often specified in terms of the center -frequency and ``q" in place of bandwidth. +frequency and "q" in place of bandwidth.


    diff --git a/node156.html b/node156.html index 9c884ed..c268825 100644 --- a/node156.html +++ b/node156.html @@ -109,7 +109,7 @@ gain is one at frequency 0. SRC="img1017.png" ALT="\fbox{ \texttt{bp\~}}">: resonant filter. The middle inlet takes control messages to set the center -frequency, and the right inlet to set ``q". +frequency, and the right inlet to set "q".


    -Timbre stamp (``vocoder") +Timbre stamp ("vocoder")

    @@ -99,7 +99,7 @@ are $c[k]$ for the control source, we just -``whiten" the filter input, multiplying by $1/f[k]$, and then stamp the control @@ -113,7 +113,7 @@ done by limiting the whitening factor $1/f[k]$ to a specified maximum value using the clip~ object. The limit is controlled by the -``squelch" parameter, which is squared and divided by 100 to map values +"squelch" parameter, which is squared and divided by 100 to map values from 0 to 100 to a useful range.

    diff --git a/node182.html b/node182.html index 5ae6855..a3d58c2 100644 --- a/node182.html +++ b/node182.html @@ -55,7 +55,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds Up: Examples Previous: Timbre stamp (``vocoder") + HREF="node181.html">Timbre stamp ("vocoder")   Contents  

    The phase vocoder usually refers to the general technique of passing from (complex-valued) channel amplitudes to pairs consisting of (real-valued) -magnitudes and phase precession rates (``frequencies"), and back, as +magnitudes and phase precession rates ("frequencies"), and back, as described in Figure 9.11 (Section 9.5). In Example I07.phase.vocoder.pd (Figure 9.18), we use this technique with the specific aim of time-stretching and/or time-contracting a recorded sound @@ -118,8 +118,8 @@ computation than a full-precision square root and reciprocal would.

    The process starts with a sub-patch, pd read-windows, that outputs -two Hann-windowed blocks of the recorded sound, a ``back" one and a -``front" one 1/4 window further forward in the recording. The window +two Hann-windowed blocks of the recorded sound, a "back" one and a +"front" one 1/4 window further forward in the recording. The window shown uses the two outputs of the sub-patch to guide the amplitude and phase change of each channel of its own output. @@ -142,7 +142,7 @@ After normalizing $S[m-1,k]$, its complex conjugate (the normalized inverse) is multiplied by the windowed Fourier -transform of the ``back" window $T[k]$, giving the product $R[k]$ of Page [*]. -Next, depending on the value of the parameter ``lock", the computed value of +Next, depending on the value of the parameter "lock", the computed value of lrshift~ objects, whose outputs are added into $R[k]$ if -``lock" is set to one, or otherwise not if it is zero. +"lock" is set to one, or otherwise not if it is zero. The result is then normalized and multiplied by the Hann-windowed Fourier transform -of the ``front" window ($T'[k]$) to give Up: Examples Previous: Timbre stamp (``vocoder") + HREF="node181.html">Timbre stamp ("vocoder")   Contents   Example A01.sinewave.pd, shown in Figure 1.11, contains essentially the simplest possible patch that makes a sound, with only three object boxes. (There are also comments, and two message -boxes to turn Pd's ``DSP" (audio) processing on and off.) The three object boxes +boxes to turn Pd's "DSP" (audio) processing on and off.) The three object boxes are:

    @@ -144,20 +144,20 @@ consult the Pd documentation for details.

    The two message boxes show a peculiarity in the way messages are parsed in message boxes. Earlier in Figure 1.10 (part a), the message -consisted only of the number 21. When clicked, that box sent the message ``21" +consisted only of the number 21. When clicked, that box sent the message "21" to its outlet and hence to any objects connected to it. In this current example, the text of the message boxes starts with a semicolon. This is a terminator between messages (so the first message is empty), after which the next word is taken as the name of the recipient of the following message. Thus -the message here is ``dsp 1" (or ``dsp 0") and the message is to be sent, not +the message here is "dsp 1" (or "dsp 0") and the message is to be sent, not to any connected objects--there aren't any anyway--but rather, to the object -named ``pd". This particular object is provided invisibly by the Pd program +named "pd". This particular object is provided invisibly by the Pd program and you can send it various messages to control Pd's global state, in this case -turning audio processing on (``1") and off (``0"). +turning audio processing on ("1") and off ("0").

    Many more details about the control aspects of Pd, such as the above, are -explained in a different series of example patches (the ``control examples") in +explained in a different series of example patches (the "control examples") in the Pd release, but they will only be touched on here as necessary to demonstrate the audio signal processing techniques that are the subject of this book. diff --git a/node198.html b/node198.html index 78162db..b4401b9 100644 --- a/node198.html +++ b/node198.html @@ -98,7 +98,7 @@ jumps so that the result repeats from one period to the next. Example J03.pulse.width.mod.pd (not shown) combines two sawtooth waves, of opposite sign, with slightly different frequencies so that the relative phase changes continuously. Their sum is a rectangle wave whose width varies in time. This -is known as pulse width modulation (``PWM"). +is known as pulse width modulation ("PWM").

    diff --git a/node199.html b/node199.html index 9d161f9..17253a7 100644 --- a/node199.html +++ b/node199.html @@ -75,7 +75,7 @@ Strategies for band-limiting sawtooth waves

    Figure 10.14: Alternative techniques for making waveforms with corners: (a) a triangle wave as the minimum of two line segments; (b) clipping a triangle wave to -make an ``envelope".
    clip~ object prevents it from rising above 1 (so that, if the intersection of the two segments is -higher than one, we get a horizontal ``sustain" segment), and also from falling +higher than one, we get a horizontal "sustain" segment), and also from falling below zero, so that once the falling shape reaches zero, the output is zero for the rest of the cycle. diff --git a/node20.html b/node20.html index db04861..4f3b624 100644 --- a/node20.html +++ b/node20.html @@ -96,8 +96,8 @@ A03.line.pd; (c) A05.output.subpatch.pd. WIDTH="77" HEIGHT="41" ALIGN="MIDDLE" BORDER="0" SRC="img150.png" ALT="\fbox{ $ \mathrm{dbtorms} $}"> : Decibels to linear -amplitude conversion. The ``RMS" is a misnomer; it should have been named -``dbtoamp", +amplitude conversion. The "RMS" is a misnomer; it should have been named +"dbtoamp", since it really converts from decibels to any linear amplitude unit, be it RMS, peak, or other. An input of 100 dB is normalized to an output of 1. Values greater than 100 are fine (120 will give 10), but values less than or @@ -116,7 +116,7 @@ one way or another to avoid using it.)

    The two number boxes are connected to the input and output of the -dbtorms object. The input functions as a control; ``mouse" on it +dbtorms object. The input functions as a control; "mouse" on it (click and drag upward or downward) to change the amplitude. It has been set to range from 0 to 80; this is protection for your speakers and ears, and it's wise to build such guardrails into your own patches. diff --git a/node201.html b/node201.html index 4968374..b3b43b3 100644 --- a/node201.html +++ b/node201.html @@ -1046,7 +1046,7 @@ Index

    in Pd
    Control operations in Pd -
    quality (``q'') +
    quality ("q'')
    Impulse responses of recirculating
    real part of a complex number
    Complex numbers diff --git a/node21.html b/node21.html index 057e12d..1c2216e 100644 --- a/node21.html +++ b/node21.html @@ -120,8 +120,8 @@ the beginning and end values of a segment in line~'s output.

    The treatment of line~'s right inlet is unusual among Pd objects in that -it forgets old values; a message with a single number such as ``0.1" is -always equivalent to the pair, ``0.1 0". Almost any other object will retain +it forgets old values; a message with a single number such as "0.1" is +always equivalent to the pair, "0.1 0". Almost any other object will retain the previous value for the right inlet, instead of resetting it to zero.

    diff --git a/node22.html b/node22.html index ea16c8f..af0d75b 100644 --- a/node22.html +++ b/node22.html @@ -81,10 +81,10 @@ have equal amplitudes.

    The amplitude control in this example is taken care of by a new object called output~. This isn't a built-in object of Pd, but is itself a Pd patch -which lives in a file, ``output.pd". (You can see the internals of +which lives in a file, "output.pd". (You can see the internals of output~ by opening the properties menu for the box and selecting -``open".) You get two controls, one for amplitude in dB (100 meaning ``unit -gain"), and a ``mute" button. Pd's audio processing is turned on automatically +"open".) You get two controls, one for amplitude in dB (100 meaning "unit +gain"), and a "mute" button. Pd's audio processing is turned on automatically when you set the output level--this might not be the best behavior in general, but it's appropriate for these example patches. The mechanism for embedding one Pd patch as an object box inside another is discussed in Section diff --git a/node23.html b/node23.html index e364f7b..bba9afc 100644 --- a/node23.html +++ b/node23.html @@ -71,7 +71,7 @@ Conversion between frequency and pitch

    Example A06.frequency.pd  (Figure 1.13) shows Pd's object for converting -pitch to frequency units (mtof, meaning ``MIDI to frequency") and its +pitch to frequency units (mtof, meaning "MIDI to frequency") and its inverse ftom. We also introduce two other object classes, send and receive. @@ -105,7 +105,7 @@ Conversion between pitch and frequency in A06.frequency.pd. convert MIDI pitch to frequency units according to the Pitch/Frequency Conversion Formulas (Page [*]). Inputs -and outputs are messages (``tilde" equivalents of the two also exist, +and outputs are messages ("tilde" equivalents of the two also exist, although like dbtorms~ they're expensive in CPU time). The ftom object's output is -1500 if the input is zero or negative; and likewise, if you give mtof -1500 or lower it outputs zero. @@ -125,11 +125,11 @@ if the input is zero or negative; and likewise, if you give mtof -1500 SRC="img157.png" ALT="\fbox{ $ \mathrm{r} $}">: Receive messages non-locally. -The receive object, which may be abbreviated as ``r", +The receive object, which may be abbreviated as "r", waits for non-local messages to be sent by a send object (described below) or -by a message box using redirection (the ``;" feature discussed in the -earlier example, A01.sinewave.pd). The argument (such as ``frequency" and ``pitch" +by a message box using redirection (the ";" feature discussed in the +earlier example, A01.sinewave.pd). The argument (such as "frequency" and "pitch" in this example) is the name to which messages are sent. Multiple receive objects may share the same name, in which case any message sent to that name will go to all of them. @@ -148,7 +148,7 @@ sent to that name will go to all of them. WIDTH="31" HEIGHT="33" ALIGN="MIDDLE" BORDER="0" SRC="img159.png" ALT="\fbox{ $\mathrm{s}$\ }">: -The send object, which may be abbreviated as ``s", directs +The send object, which may be abbreviated as "s", directs messages to receive objects.

    @@ -156,11 +156,11 @@ Two new properties of number boxes are used here. Earlier we've used them as controls or as displays; here, the two number boxes each function as both. If a number box gets a number in its inlet, it not only displays the number but also repeats the number to its output. However, a number box may also be sent -a ``set" message, such as ``set 55" for example. This would set the value +a "set" message, such as "set 55" for example. This would set the value of the number box to 55 (and display it) but not cause the output that would -result from the simple ``55" message. In this case, numbers coming from the -two receive objects are formatted (using message boxes) to read ``set 55" instead -of just ``55", and so on. (The special word ``$1" is replaced by the +result from the simple "55" message. In this case, numbers coming from the +two receive objects are formatted (using message boxes) to read "set 55" instead +of just "55", and so on. (The special word "$1" is replaced by the incoming number.) This is done because otherwise we would have an infinite loop: frequency would change pitch which would change frequency and so on forever, or at least until something broke. diff --git a/node24.html b/node24.html index d120664..d8fdcc0 100644 --- a/node24.html +++ b/node24.html @@ -89,7 +89,7 @@ oscillators, effectively turning them on and off.

    Even when all four oscillators are combined (with the toggle switch in the -``1" position), the result fuses into a single tone, +"1" position), the result fuses into a single tone, heard at the pitch of the leftmost oscillator. In effect this patch sums a four-term Fourier series to generate a complex, periodic waveform. diff --git a/node26.html b/node26.html index be47b78..66ad273 100644 --- a/node26.html +++ b/node26.html @@ -77,7 +77,7 @@ a continuous stream at some sample rate. The sample rate isn't really a quality of the audio signal, but rather it specifies how fast the individual samples should flow into or out of the computer. But audio signals are at bottom just sequences of numbers, and in practice there is no requirement that -they be ``played" sequentially. Another, complementary view is that +they be "played" sequentially. Another, complementary view is that they can be stored in memory, and, later, they can be read back in any order--forward, backward, back and forth, or totally at random. An inexhaustible range of new possibilities opens up. @@ -224,7 +224,7 @@ x[ \lfloor y[n] \rflo... $\lfloor y[n] \rfloor$ means, ``the greatest integer not + ALT="$\lfloor y[n] \rfloor$"> means, "the greatest integer not exceeding $y[1]$ and $z[1]$ and so on. The ``natural" range for the input $z[1]$ and so on. The "natural" range for the input $y[n]$ diff --git a/node28.html b/node28.html index 28dcffb..54bc15c 100644 --- a/node28.html +++ b/node28.html @@ -72,12 +72,12 @@ Sampling

    -``Sampling" +"Sampling" is nothing more than recording a live signal into a wavetable, and then later playing it out again. (In commercial samplers the entire wavetable is -usually called a ``sample" but to avoid confusion we'll only use the word -``sample" here to mean a single number in an audio signal.) +usually called a "sample" but to avoid confusion we'll only use the word +"sample" here to mean a single number in an audio signal.)

    At its simplest, a sampler is simply a wavetable oscillator, as was shown in @@ -281,7 +281,7 @@ h[n] = 12 {{\log_2} \left \vert y[n] - y[n-1] \right \vert}

    -(Here the enclosing bars ``$\vert$" mean absolute value.) @@ -361,7 +361,7 @@ at the beginning of each new cycle.

    It's well known that transposing a recording also transposes its timbre--this -is the ``chipmunk" effect. Not only are any periodicities (such as might +is the "chipmunk" effect. Not only are any periodicities (such as might give rise to pitch) transposed, but so are the frequencies of the overtones. Some timbres, notably those of vocal sounds, have characteristic frequency ranges in which overtones are stronger than other nearby ones. @@ -378,7 +378,7 @@ wavetables periodically. In Section 2.1< repeated quickly enough that the repetition gives rise to a pitch, say between 30 and 4000 times per second, roughly the range of a piano. In the current section we assumed a wavetable one second long, and in this case -``reasonable" transposition factors (less than four octaves up) would give rise +"reasonable" transposition factors (less than four octaves up) would give rise to a rate of repetition below 30, usually much lower, and going down as low as we wish. @@ -506,7 +506,7 @@ location as the segment's midpoint, we first subtract Figure 2.5: A simple looping sampler, as yet with no amplitude control. There are inputs to control the frequency and the segment size and location. -The ``-" operation is included if we wish the segment location to be specified +The "-" operation is included if we wish the segment location to be specified as the segment's midpoint; otherwise we specify the location of the left end of the segment.

    $a$ (which takes the -value 0.3 in the graphed signals). The ``wrap" operation computes the fractional +value 0.3 in the graphed signals). The "wrap" operation computes the fractional part of its input.
    $1/f$--at least approximately, and the approximation is at least -fairly good if the waveform ``behaves well" at its ends. +fairly good if the waveform "behaves well" at its ends. (As we'll see later, the waveform can always be forced to behave at least reasonably well by enveloping it as in Figure 2.7.) @@ -449,9 +449,9 @@ curve is both compressed to the left (the frequencies all drop) and amplified +"ideal" contours.
    Figure 2.10: The Fourier series magnitudes for the waveforms shown in Figure -2.9. The horizontal axis is the harmonic number. We only ``hear" +2.9. The horizontal axis is the harmonic number. We only "hear" the coefficients for integer harmonic numbers; the continuous curves are the -``ideal" contours.
    -This ``true" spectrum is only audible at suitably low duty cycles, though. The +This "true" spectrum is only audible at suitably low duty cycles, though. The 200 percent duty cycle example actually misses the peak in the ideal (continuous) spectrum because the peak falls below the first harmonic. In general, higher duty cycles sample the ideal curve at lower resolutions. @@ -484,11 +484,11 @@ endlessly variable waveforms from recorded samples (Section 2.2), it is possible to generate all sorts of sounds. For example, the block diagram of Figure 2.7 gives us a way to to grab and stretch timbres from a recorded wavetable. When the -``frequency" parameter $f$ is high enough to be audible as a pitch, the -``size" +"size" parameter [*]

    Example B01.wavetables.pd, shown in Figure 2.12, implements a wavetable -oscillator, which plays back from a wavetable named ``table10". Two new Pd +oscillator, which plays back from a wavetable named "table10". Two new Pd primitives are shown here. First is the wavetable itself, which appears at -right in the figure. You can ``mouse" on the wavetable to change its shape and +right in the figure. You can "mouse" on the wavetable to change its shape and hear the sound change as a result. Not shown in the figure but demonstrated in the patch is Pd's facility for automatically calculating wavetables with specified partial amplitudes, which is often preferable to drawing waveforms by @@ -101,8 +101,8 @@ A wavetable oscillator: B01.wavetables.pd. WIDTH="89" HEIGHT="41" ALIGN="MIDDLE" BORDER="0" SRC="img273.png" ALT="\fbox{ $ \mathrm{tabosc4}\sim $}">: -a wavetable oscillator. The ``4" indicates that this class uses 4-point -(cubic) interpolation. In the example, the table's name, ``table10", is +a wavetable oscillator. The "4" indicates that this class uses 4-point +(cubic) interpolation. In the example, the table's name, "table10", is specified as a creation argument to the tabosc4~ object. (You can also switch between wavetables dynamically by sending appropriate messages to the object.) diff --git a/node34.html b/node34.html index 5347c52..630e4c0 100644 --- a/node34.html +++ b/node34.html @@ -117,12 +117,12 @@ you can send messages to select which table to use. record an audio signal into a wavetable. In this example the tabwrite~ is used to display the output (although later on it will be used for all sorts of other things.) Whenever it receives a -``bang" message from the pushbutton icon above it, tabwrite~ begins +"bang" message from the pushbutton icon above it, tabwrite~ begins writing successive samples of its input to the named table.

    Example B03.tabread4.pd shows how to combine a phasor~ and a tabread4~ object to make a wavetable oscillator. The phasor~'s output ranges from -0 to 1 in value. In this case the input wavetable, named ``waveform12", is 131 +0 to 1 in value. In this case the input wavetable, named "waveform12", is 131 elements long. The domain for the tabread4~ object is thus from 1 to 129. To adjust the range of the phasor~ accordingly, we multiply it by the length of the domain (128) so that it reaches between 0 and 128, and then @@ -133,7 +133,7 @@ between the phasor~ and the tabread4~.

    With only these four boxes we would have essentially reinvented the tabosc4~ class. In this example, however, the multiplication -is not by a constant 128 but by a variable amount controlled by the ``squeeze" +is not by a constant 128 but by a variable amount controlled by the "squeeze" parameter. The function of the four boxes at the right hand side of the patch is to supply the *~ object with values to scale the phasor~ by. This makes use of one more new object class: @@ -150,18 +150,18 @@ is to supply the *~ object with values to scale the number of arguments, their types (usually numbers) and their initial values. The inlets (there will be as many as you specified creation arguments) update the values of the message arguments, and, if the leftmost inlet is changed -(or just triggered with a ``bang" message), the message is output. +(or just triggered with a "bang" message), the message is output.

    In this patch the arguments are initially 0 and 50, but the number box will update the value of the first argument, so that, as pictured, the most recent -message to leave the pack object was ``206 50". The effect of this +message to leave the pack object was "206 50". The effect of this on the line~ object below is to ramp to 206 in 50 milliseconds; in general the output of the line~ object is an audio signal that smoothly -follows the sporadically changing values of the number box labeled ``squeeze". +follows the sporadically changing values of the number box labeled "squeeze".

    -Finally, 128 is added to the ``squeeze" value; if ``squeeze" takes non-negative +Finally, 128 is added to the "squeeze" value; if "squeeze" takes non-negative values (as the number box in this patch enforces), the range-setting multiplier ranges the phasor by 128 or more. If the value is greater than 128, the effect is that the rescaled phasor spends some fraction of its cycle stuck at the end diff --git a/node36.html b/node36.html index 1355c36..01a7ba7 100644 --- a/node36.html +++ b/node36.html @@ -119,7 +119,7 @@ In Figure 2.15 (part a), a phasor~ object suppl indices into the wavetable (at right) and phases for a half-cosine-shaped envelope function at left. These two are multiplied, and the product is high-pass filtered and output. Reading the wavetable is straightforward; the -phasor is multiplied by a ``chunk size" parameter, added to 1, and used as an +phasor is multiplied by a "chunk size" parameter, added to 1, and used as an index to tabread4~The chunk size parameter is multiplied by 441 to convert it from hundredths of a second to samples. This corresponds exactly to the block diagram shown in Figure 2.5, with a segment @@ -141,10 +141,10 @@ function in the range ( -Part (b) of Figure 2.15 introduces a third parameter, the ``read +Part (b) of Figure 2.15 introduces a third parameter, the "read point", which specifies where in the sample the loop is to start. (In part (a) we always started at the beginning.) The necessary change is simple enough: -add the ``read point" control value, in samples, +add the "read point" control value, in samples, to the wavetable index and proceed as before. To avoid discontinuities in the index we smooth the read point value using pack and line~ objects, just as we did in diff --git a/node37.html b/node37.html index 386d485..29c2172 100644 --- a/node37.html +++ b/node37.html @@ -100,9 +100,9 @@ same, but with a phasor-controlled read point (B11.sampler.rockafella.pd).: -output a ``bang" message on load. This is used in this patch to make sure the +output a "bang" message on load. This is used in this patch to make sure the division of transposition by chunk size will have a valid transposition factor -in case ``chunk size" is moused on first. +in case "chunk size" is moused on first.


    diff --git a/node98.html b/node98.html index 214d25f..7f7cd6f 100644 --- a/node98.html +++ b/node98.html @@ -100,7 +100,7 @@ stretched wavetable lookup.
    Figure 6.14: Intermediate audio signals from Figure 6.13: (a) the -result of multiplying the phasor by the ``index"; (b) the same, clipped to +result of multiplying the phasor by the "index"; (b) the same, clipped to lie between -0.5 and 0.5; (c) the output.