From b92388dc76e59e770885897ee0d1bd2951c8a649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Sat, 1 Jul 2023 13:02:11 +0200 Subject: [PATCH 01/68] Update fr.po (dropping unused msgid) --- po/fr.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/fr.po b/po/fr.po index 39abaa8d..a9fd1940 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1660,8 +1660,8 @@ msgstr "Supprimer" msgid "ignoring '%s': doesn't look like a Pd file" msgstr "ignorer '%s' : ne semble pas être un fichier Pd" -msgid "(no device)" -msgstr "(aucun périphérique)" +#~ msgid "(no device)" +#~ msgstr "(aucun périphérique)" #~ msgid "Path..." #~ msgstr "Chemins..." From c57abca8e6db2eb2e9c58494d0db3c7870ef2ae3 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Fri, 30 Jun 2023 07:26:07 +0000 Subject: [PATCH 02/68] Translated using Weblate (Hebrew) Currently translated at 100.0% (491 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/he/ --- po/he.po | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/po/he.po b/po/he.po index 149808cf..3e0073fc 100644 --- a/po/he.po +++ b/po/he.po @@ -6,17 +6,17 @@ msgstr "" "Project-Id-Version: Pure Data 0.53.1\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-06-26 04:41+0000\n" +"PO-Revision-Date: 2023-07-01 07:53+0000\n" "Last-Translator: Yaron Shahrabani \n" -"Language-Team: Hebrew \n" +"Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.18.1\n" +"X-Generator: Weblate 5.0-dev\n" msgid "linear" msgstr "קווי" @@ -707,11 +707,10 @@ msgid "Failed to find plugins in %s ...skipping!" msgstr "איתור תוספים ב־ ‚%s’ נכשל …מדלגים!" msgid "Pd startup failure" -msgstr "" +msgstr "במהלך הפעלת Pd אירע כשל" -#, fuzzy msgid "Failed to start Pd-core" -msgstr "התקנת ‚%s’ נכשלה!" +msgstr "הפעלת Pd-core נכשלה" msgid "(Tcl) MISSING CLOSE-BRACE '}': " msgstr "(Tcl) חסרים סוגריים מרובעים סוגרים '}': " @@ -1581,11 +1580,11 @@ msgid "Pd" msgstr "Pd" msgid "EXPERIMENTAL double (64bit) precision" -msgstr "" +msgstr "ניסיוני - דיוק כפול (64 סיביות)" -#, fuzzy, tcl-format +#, tcl-format msgid "%dbit-floats EXPERIMENTAL" -msgstr "כפול (64 סיביות) ניסיוני" +msgstr "נק׳ צפה ב־%d סיביות - ניסיוני" msgid "DSP" msgstr "DSP" From a92541e409485a97d68a01893785788ca90fd810 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Mon, 3 Jul 2023 05:31:24 -0300 Subject: [PATCH 03/68] HTML: document 'Double precision' file extensions and build instructions. --- doc/1.manual/x4.htm | 298 +++++++++++++++++++++++++++++++++----------- doc/1.manual/x6.htm | 12 +- 2 files changed, 234 insertions(+), 76 deletions(-) diff --git a/doc/1.manual/x4.htm b/doc/1.manual/x4.htm index 956e6d52..56c1ff0f 100644 --- a/doc/1.manual/x4.htm +++ b/doc/1.manual/x4.htm @@ -25,7 +25,7 @@

Pd Manual chapter 4: externals

back to table of contents

-

+

4. Externals

@@ -89,79 +89,238 @@

4.1.2.1. Compiled objects:

These are Pd objects compiled to binaries from programming code (like in C or C++). They have to be compiled for your operating system, which means the binaries have different extensions according to each platform. For -instance: - +instance: + - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Operating SystemCPU-architecturefilename
OS CPU-architecture float size filename
Linuxunspecified -(any architecture)my_lib.pd_linux
Linuxi386 (Intel/AMD 32bit)my_lib.l_i386
Linuxamd64 (Intel/AMD 64bit)my_lib.l_amd64
Linuxarm (e.g. RaspberryPi)my_lib.l_arm
Linuxarm64my_lib.l_arm64
macOSunspecified -(any architecture)my_lib.pd_darwin
macOSfat (multiple archs)my_lib.d_fat
macOSPowerPCmy_lib.d_ppc
macOSi386 (Intel 32bit)my_lib.d_i386
macOSamd64 (Intel 64bit)my_lib.d_amd64
macOSarm64 (Apple Silicon)my_lib.d_arm64
Windowsunspecified -(any architecture)my_lib.dll
Windowsi386 (Intel/AMD 32bit)my_lib.m_i386
Windowsamd64 (Intel/AMD 64bit)my_lib.m_amd64
Linux unspecified (any architecture) 32my_lib.pd_linux
‘’ i386 (Intel/AMD 32bit) 32my_lib.l_i386
‘’ ‘’ 32my_lib.linux-i386-32.so
‘’ ‘’ 64my_lib.linux-i386-64.so
‘’ amd64 (Intel/AMD 64bit) 32my_lib.l_amd64
‘’ ‘’ 32my_lib.linux-amd64-32.so
‘’ ‘’ 64my_lib.linux-amd64-64.so
arm (e.g. RaspberryPi) 32my_lib.l_arm
‘’ ‘’ 32my_lib.linux-arm-32.so
‘’ ‘’ 64my_lib.linux-arm-64.so
‘’ arm64 32my_lib.l_arm64
‘’ ‘’ 32my_lib.linux-arm64-32.so
‘’ ‘’ 64my_lib.linux-arm64-64.so
macOS unspecified (any architecture) 32my_lib.pd_darwin
‘’ fat (multiple archs) 32my_lib.d_fat
‘’ ‘’ 32my_lib.darwin-fat-32.dylib
‘’ ‘’ 64my_lib.darwin-fat-64.dylib
‘’ PowerPC 32my_lib.d_ppc
‘’ ‘’ 32my_lib.darwin-ppc-32.dylib
‘’ ‘’ 64my_lib.darwin-ppc-64.dylib
‘’ i386 (Intel 32bit) 32my_lib.d_i386
‘’ ‘’ 32my_lib.darwin-i386-32.dylib
‘’ ‘’ 64my_lib.darwin-i386-64.dylib
‘’ amd64 (Intel 64bit) 32my_lib.d_amd64
‘’ ‘’ 32my_lib.darwin-amd64-32.dylib
‘’ ‘’ 64my_lib.darwin-amd64-64.dylib
‘’ arm64 (Apple Silicon) 32my_lib.d_arm64
‘’ ‘’ 32my_lib.darwin-arm64-32.dylib
‘’ ‘’ 64my_lib.darwin-arm64-64.dylib
Windows unspecified (any architecture) 32my_lib.dll
‘’ i386 (Intel/AMD 32bit) 32my_lib.m_i386
‘’ ‘’ 32my_lib.windows-i386-32.dll
‘’ ‘’ 64my_lib.windows-i386-64.dll
‘’ amd64 (Intel/AMD 64bit) 32my_lib.m_amd64
‘’ ‘’ 32my_lib.windows-amd64-32.dll
‘’ ‘’ 64my_lib.windows-amd64-64.dll
- +

4.1.2.2. Abstractions:

You can have a Pd patch behave like an object by loading it into other @@ -224,8 +383,7 @@

Wrapping up Part 1)

4.2. Installing External Objects and Libraries

- - +

Installing externals in Pd is quite simple, all you need to do is download @@ -589,7 +747,7 @@

4.5. Search order for loading objects



next chapter
- back to table of contents + back to table of contents

diff --git a/doc/1.manual/x6.htm b/doc/1.manual/x6.htm index 17ae174f..b7fb3b5a 100644 --- a/doc/1.manual/x6.htm +++ b/doc/1.manual/x6.htm @@ -9,7 +9,7 @@ - + @@ -26,7 +26,7 @@

Pd Manual chapter 6: Installing from source.

back to table of contents

-

+

Pd is built on the commandline using traditional Unix-style tools. The source distribution comes with two build systems:

@@ -314,7 +314,7 @@

6.5. Windows

pacman -S mingw-w64-i686-toolchain mingw-w64-i686-clang \ make autoconf automake libtool \ mingw-w64-i686-gettext - +

Install git if you want to clone the Pd sources from Github, etc:

pacman -S git
@@ -364,9 +364,9 @@

6.5. Windows

6.6. Double precision

-

As of Pd 0.51-0 you can compile a "Double precision" Pd. On the autotools do:

+

As of Pd 0.54-0 you can compile a "Double precision" Pd (AKA: Pd64). On the autotools do:

-
./configure CPPFLAGS="-DPD_FLOATSIZE=64"
+
./configure --with-floatsize=64

6.7. Other flags

@@ -463,7 +463,7 @@

6.10. Reporting Bugs



- back to table of contents + back to table of contents

From 96eecfc9e68c0787ebb788a2ece1611dd68ef611 Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 3 Jul 2023 16:15:55 -0300 Subject: [PATCH 04/68] improve/fix sigmund~ help the 'print' message was updated for 0.08 but not the 'post' when loading the object, so I also changed this in the code. The default values for quality and amppower were wrong, I fixed it. We had too much repeating information, so I reorganized things a bit and left the details for parameters in the already existing subpatch for setting the parameters. I added a new example subptach with 'notes' output, which also uses 'quality' and added information from the release notes about the purpose of 'evenness'. --- extra/sigmund~/sigmund~-help.pd | 196 +++++++++++++++++++------------- extra/sigmund~/sigmund~.c | 2 +- 2 files changed, 121 insertions(+), 77 deletions(-) diff --git a/extra/sigmund~/sigmund~-help.pd b/extra/sigmund~/sigmund~-help.pd index b945882b..77020830 100644 --- a/extra/sigmund~/sigmund~-help.pd +++ b/extra/sigmund~/sigmund~-help.pd @@ -1,4 +1,5 @@ -#N canvas 431 23 632 723 12; +#N canvas 426 47 631 621 12; +#X declare -stdpath ./; #N canvas 629 23 564 665 using-with-tables 0; #N canvas 0 50 450 300 (subpatch) 0; #X array insignal 1024 float 0; @@ -21,9 +22,9 @@ #X floatatom 164 411 9 0 0 0 - - - 0; #X obj 30 382 sigmund~ -t -npeak 10 -maxfreq 5000 env pitch peaks tracks; #X text 19 43 If invoked with the "-t" flag (which stands for 'table'). In this case \, the DSP doesn't need to be on for it to output data as [sigmund~] ignores audio input and only analyzes signals stored in tables/arrays. In this mode \, feed it "list" messages with the following arguments:, f 73; -#X text 288 288 <-- analyze whole table; -#X text 299 319 <-- analyze first half of table; -#X text 277 349 <-- analyze second half of table; +#X text 278 288 <-- analyze whole table; +#X text 285 319 <-- analyze first half of table; +#X text 267 349 <-- analyze second half of table; #X msg 425 532 \; pd dsp \$1; #X text 457 500 DSP on/off; #X obj 425 495 ../../doc/5.reference/set-dsp-tgl; @@ -46,30 +47,35 @@ #X connect 24 0 16 0; #X connect 25 0 16 0; #X connect 26 0 16 0; -#X restore 457 606 pd using-with-tables; -#X obj 77 600 phasor~; -#X floatatom 77 652 8 0 0 0 - - - 0; -#X floatatom 270 652 7 0 0 0 - - - 0; -#X obj 77 575 mtof; -#X text 157 101 pitch - output pitch continuously, f 57; -#N canvas 589 25 499 697 setting-parameters 0; -#X msg 182 66 print; -#X floatatom 192 92 5 0 0 0 - - - 0; -#X msg 192 113 minpower \$1; -#X obj 182 139 sigmund~ -minpower 40; -#X text 39 14 You can set parameters either by creation arguments \, or else using messages. The "print" message gives you the current values of all the parameters:; -#X text 28 169 npts: number of points used in an analysis. Must be a power of two \, at least 128 The minimum frequency that can be tracked is about 2(sample_rate)/npts.; -#X text 26 219 hop: number of points between analyses. Must be a power of two \, at least the DSP vector size (usually 64). This regulates the number of analyses done per unit of time.; -#X text 28 271 npeak: maximum number of sinusoidal peaks to look for. The computation time is quadratic in the number of peaks actually found (this number only sets an upper limit). Use it to balance CPU time with quality of results.; -#X text 30 336 maxfreq: maximum frequency of sinusoidal peaks to look for. This can be useful in situations where background noise creates high-frequency \, spurious peaks..; -#X text 37 388 vibrato: maximum deviation from "pitch" to accept as normal vibrato (affects "notes" output only). If the value is too small. vibratos will appear as trills. If too large \, very small melodic intervals may not be reported as new notes.; -#X text 33 457 stabletime: time period to wait before reporting a note (affects "notes" output only). The "pitch" must be present and must not vary more than "vibrato" for this entire period to report a note. If too large \, the "notes" will be unnecessarily delayed. If too small \, spurious notes get output.; -#X text 34 606 growth: minimum measured RMS growth to report a new note (affects "notes" output only). The RMS level must rise by this many dB (within a time period given by "stabletime") to report a repetition of a note at or near the previously output pitch.; -#X text 33 555 minpower: minimum measured RMS level to report a pitch (affects "notes" output only). Signals quieter than this will be assumed to be crosstalk and ignored.; -#X connect 0 0 3 0; +#X restore 457 482 pd using-with-tables; +#X obj 77 490 phasor~; +#X floatatom 77 544 8 0 0 0 - - - 0; +#X floatatom 181 544 7 0 0 0 - - - 0; +#X obj 77 465 mtof; +#X text 87 101 pitch - output pitch continuously, f 57; +#N canvas 471 122 850 510 setting-parameters 0; +#X msg 122 97 print; +#X floatatom 179 76 5 0 0 0 - - - 0; +#X msg 179 101 minpower \$1; +#X text 28 178 - npts (default 1024): number of points used in an analysis. Must be a power of two \, at least 128 The minimum frequency that can be tracked is about 2(sample_rate)/npts., f 63; +#X text 28 228 - hop (default 512): number of points between analyses. Must be a power of two \, at least the DSP vector size (usually 64). This regulates the number of analyses done per unit of time., f 63; +#X text 28 280 - npeak (default 20): maximum number of sinusoidal peaks to look for. The computation time is quadratic in the number of peaks actually found (this number only sets an upper limit). Use it to balance CPU time with quality of results., f 63; +#X text 28 432 - vibrato (default 1): maximum deviation from "pitch" to accept as normal vibrato. If the value is too small \, vibratos will appear as trills. If too large \, very small melodic intervals may not be reported as new notes., f 63; +#X text 505 18 - stabletime (default 50): time period in ms to wait before reporting a note. The "pitch" must be present and must not vary more than "vibrato" for this entire period to report a note. If too large \, the "notes" will be unnecessarily delayed. If too small \, spurious notes get output., f 42; +#X text 505 137 - growth (default 7): minimum measured RMS growth to report a new note. The RMS level must rise by this many dB (within a time period given by "stabletime") to report a repetition of a note at or near the previously output pitch., f 42; +#X text 505 235 - minpower (default 50): minimum measured RMS level in db to report a pitch. Signals quieter than this will be assumed to be crosstalk and ignored., f 42; +#X text 505 447 - nharmonics (default 6): harmonic number at which pitch detection rolls off., f 42; +#X text 28 348 - maxfreq (default 1000000): maximum frequency of sinusoidal peaks to look for. This can be useful in situations where background noise creates high-frequency \, spurious peaks., f 63; +#X text 25 404 Parameters that only affect note detection ("note" output):; +#X text 505 308 Parameters that only affect raw pitch detection ("pitch" output):, f 33; +#X obj 179 137 sigmund~ -minpower 40; +#X text 39 14 You can set these parameters either by creation arguments (as flags) \, or else using messages. The "print" message gives you the current values of all the parameters and more details:; +#X text 505 408 - quality (default 0.4): minimum pitch quality to report a nonzero pitch., f 42; +#X text 505 357 - amppowerlaw (default 0.5): exponent to which amplitude is raised for pitch spectrum., f 42; +#X connect 0 0 14 0; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X restore 457 583 pd setting-parameters; +#X connect 2 0 14 0; +#X restore 457 432 pd setting-parameters; #N canvas 298 46 1011 451 sinusoid-tracking 0; #X obj 86 210 sigmund~ -npeak 10 peaks; #X obj 86 180 phasor~; @@ -142,27 +148,23 @@ #X connect 38 0 1 0; #X connect 39 0 26 0; #X connect 43 0 41 0; -#X restore 457 560 pd sinusoid-tracking; -#X text 157 202 tracks - output sinusoidal peaks organized into tracks, f 57; -#X text 157 151 notes - output pitch at the beginning of notes, f 57; -#X text 457 536 more details:; -#X text 69 246 npts - number of points in each analysis window (1024); -#X text 69 263 hop - number of points between each analysis (512), f 54; -#X text 69 280 npeak - number of sinusoidal peaks (20), f 54; -#X text 69 400 vibrato - depth of vibrato to expect in 1/2-tones (1), f 54; -#X text 157 185 peaks - output all sinusoidal peaks in order of amplitude; -#X text 69 297 maxfreq - maximum sinusoid frequency in Hz. (1000000), f 54; -#X text 157 168 env - output amplitude continuously, f 57; -#X text 69 417 stabletime - time (msec) to wait to report notes (50), f 54; -#X text 69 434 minpower - minimum power (dB) to report a note (50), f 54; -#X text 69 451 growth - growth (dB) to report a repeated note (7), f 54; +#X restore 457 457 pd sinusoid-tracking; +#X text 87 202 tracks - output sinusoidal peaks organized into tracks, f 57; +#X text 87 151 notes - output pitch at the beginning of notes, f 57; +#X text 458 408 more details:; +#X text 89 248 npts - number of points in each analysis window (1024); +#X text 89 265 hop - number of points between each analysis (512), f 54; +#X text 89 282 npeak - number of sinusoidal peaks (20), f 54; +#X text 87 185 peaks - output all sinusoidal peaks in order of amplitude; +#X text 89 299 maxfreq - maximum sinusoid frequency in Hz. (1000000), f 54; +#X text 87 168 env - output amplitude continuously, f 57; #X obj 38 12 sigmund~; #X text 107 11 - sinusoidal analysis and pitch tracking; -#X msg 303 576 \; pd dsp \$1; -#X text 335 544 DSP on/off; +#X msg 295 458 \; pd dsp \$1; +#X text 327 426 DSP on/off; #X obj 6 41 cnv 1 620 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 545 11 <= click; -#N canvas 494 23 680 723 reference 0; +#N canvas 529 23 680 723 reference 0; #X obj 6 33 cnv 5 650 5 empty empty INLET: 8 18 0 13 #202020 #000000 0; #X obj 6 311 cnv 2 650 2 empty empty OUTLETS: 8 12 0 13 #202020 #000000 0; #X obj 6 514 cnv 2 650 2 empty empty ARGUMENTS: 8 12 0 13 #202020 #000000 0; @@ -209,48 +211,90 @@ #X obj 5 364 cnv 1 650 1 empty empty quality: 8 12 0 13 #9f9f9f #000000 0; #X obj 5 391 cnv 1 650 1 empty empty evenness: 8 12 0 13 #9f9f9f #000000 0; #X text 186 755 sets outlets and types: pitch \, quality \, evenness \, notes \, env \, peaks \, tracks (default: "pitch env").; -#X text 30 626 -nharmonics : rolloff point for harmonics used in pitch detection., f 86; -#X text 23 643 -amppowerlaw : power applied to amplitude in pitch spectrum., f 87; -#X text 51 660 -quality : minimum pitch quality to report a pitch., f 83; #X text 110 290 print - print version number and current parameters., f 76; #X text 110 274 clear - forget previous analisys for tracks output., f 76; #X text 106 367 float - fraction of spectrum (0-1) that contributed to pitch finding., f 70; #X text 106 394 float - fraction (0-1) of harmonic strength found in even harmonics., f 69; #X text 322 806 unsupported debugging features:; -#N canvas 237 208 511 231 debugging 0; -#X text 38 112 "param1" \, etc \, for possible extra parameters; -#X text 38 131 "printnext" generates debugging printout from DSP routine; -#X text 28 96 unsupported methods used for debugging:; -#X text 30 52 "pitch spectrum" argument makes an outlet for a pitch spectrum as a list.; +#N canvas 802 506 509 164 debugging 0; +#X text 63 88 "param1" \, etc \, for possible extra parameters; +#X text 63 107 "printnext" generates debugging printout from DSP routine; +#X text 53 72 unsupported methods used for debugging:; +#X text 55 28 "pitch spectrum" argument makes an outlet for a pitch spectrum as a list.; #X restore 549 807 pd debugging; +#X text 30 626 -nharmonics : rolloff point for harmonics used in pitch detection (default 6)., f 86; +#X text 23 643 -amppowerlaw : power applied to amplitude in pitch spectrum (default 0.5)., f 87; +#X text 51 660 -quality : minimum pitch quality to report a pitch (default 0.4)., f 83; #X restore 450 11 pd reference; -#X obj 6 688 cnv 1 620 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X text 31 228 Parameters you may set in creation arguments as flags or messages:, f 67; -#X text 26 475 The npts and hop parameters are in samples \, and are powers of two. The example below specifies a huge hop of 4096 (to slow the output down) and to output "pitch" and "env" (the default outputs)., f 82; +#X obj 6 578 cnv 1 620 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 28 52 [sigmund~] analyzes an incoming sound into sinusoidal components \, which may be reported individually or combined to form a pitch estimate. Possible outputs are specified as creation arguments:, f 78; -#X obj 77 549 nbx 5 17 -1e+37 1e+37 0 1 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 69 256; -#X text 47 315 Parameters that affect raw pitch detection ("pitch" output):, f 63; -#X text 46 383 Parameters that affect note detection ("note" output):, f 63; -#X text 69 332 nharmonics - harmonic number at which pitch detection rolls off (6), f 67; -#X text 68 349 amppowerlaw - exponent to which amplitude is raised for pitch spectrum (2), f 74; -#X text 69 366 quality - minimum pitch quality to report a nonzero pitch (0.6), f 63; -#X text 414 698 updated for Pd version 0.54; -#X text 157 118 quality - continuous pitch quality, f 57; -#X text 157 134 evenness - continuous even harmonic fraction, f 57; +#X obj 77 439 nbx 5 17 -1e+37 1e+37 0 1 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 69 256; +#X text 414 588 updated for Pd version 0.54; +#X text 87 118 quality - continuous pitch quality, f 57; #N canvas 629 224 504 270 backwards 0; #X msg 146 89 \; pd compatibility 0.53; #X text 46 151 In this case \, [sigmund~] will then revert to an earlier and less reliable method for determining quality of peaks \, which somewhat degrades performance but should give exactly the same results as "sigmund 0.07" \, which was used in Pd versions 0.42 through 0.53 (2009-2023)., f 55; #X text 51 22 COMPATIBILITY NOTE: For exact compatibility with pre-0.54 versions of [sigmund~] \, set "compatibility" to 0.53 or below in Pd's command line or via the message:, f 52; -#X restore 457 629 pd backwards \; compatibility; -#X text 331 652 envelope (db); -#X text 142 651 pitch (MIDI); -#X obj 77 626 sigmund~ -hop 4096 pitch env; -#X msg 22 582 print; -#X obj 303 539 ../../doc/5.reference/set-dsp-tgl; -#X connect 1 0 44 0; +#X restore 457 529 pd backwards \; compatibility; +#X obj 295 421 ../../doc/5.reference/set-dsp-tgl; +#X floatatom 285 544 9 0 0 0 - - - 0; +#X text 24 545 (MIDI); +#X text 142 543 (db); +#X text 87 134 evenness - continuous even/odd harmonic fraction, f 57; +#X obj 77 516 sigmund~ -hop 4096 pitch env evenness quality; +#X floatatom 389 544 4 0 0 0 - - - 0; +#N canvas 461 151 720 540 more 0; +#X text 404 204 The even/odd balance allows a synth to play in unison with an instrument with very few octave jumps by coherently mixing both possible octaves., f 31; +#X floatatom 103 123 8 0 0 0 - - - 0; +#X floatatom 210 123 7 0 0 0 - - - 0; +#X floatatom 317 233 9 0 0 0 - - - 0; +#X text 50 124 (MIDI); +#X obj 103 35 adc~ 1; +#X obj 103 185 spigot; +#X floatatom 103 248 8 0 0 0 - - - 0; +#X obj 210 151 > 0.85; +#X obj 103 281 mtof; +#X floatatom 103 312 7 0 0 0 - - - 0; +#X obj 208 394 *~; +#X obj 103 217 trigger float bang; +#X obj 226 332 vline~; +#X obj 208 428 output~; +#X obj 226 258 bng 19 250 50 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000; +#X obj 416 332 loadbang; +#X obj 103 345 tabosc4~ wave; +#X obj 417 421 array define wave; +#X msg 226 294 1 10 \, 0 300 150; +#X text 381 63 This example analyses the sound input from the soundcard and outputs 'notes' when you have a new note/pitch detection. Here we also use the 'quality' output to filter notes that have a lower quality., f 43; +#X msg 416 359 \; wave sinesum 512 1 1 1 1 \, normalize, f 25; +#X obj 418 460 declare -stdpath ./; +#X obj 103 81 sigmund~ notes quality evenness; +#X connect 1 0 6 0; +#X connect 2 0 8 0; +#X connect 5 0 23 0; +#X connect 6 0 12 0; +#X connect 7 0 9 0; +#X connect 8 0 6 1; +#X connect 9 0 10 0; +#X connect 10 0 17 0; +#X connect 11 0 14 0; +#X connect 12 0 7 0; +#X connect 12 1 15 0; +#X connect 13 0 11 1; +#X connect 15 0 19 0; +#X connect 16 0 21 0; +#X connect 17 0 11 0; +#X connect 19 0 13 0; +#X connect 23 0 1 0; +#X connect 23 1 2 0; +#X connect 23 2 3 0; +#X restore 457 505 pd more; +#X text 31 228 The basic parameters for all output options are:; +#X text 38 333 These can be set via flags or messages. The 'npts' and 'hop' parameters are in samples and need to be powers of two. The example below specifies a huge hop of 4096 (to slow the output down). There are more parameters see [pd setting-parameters] for more details on them all., f 74; +#X connect 1 0 35 0; #X connect 4 0 1 0; -#X connect 32 0 4 0; -#X connect 44 0 2 0; -#X connect 44 1 3 0; -#X connect 45 0 44 0; -#X connect 46 0 23 0; +#X connect 26 0 4 0; +#X connect 30 0 19 0; +#X connect 35 0 2 0; +#X connect 35 1 3 0; +#X connect 35 2 31 0; +#X connect 35 3 36 0; diff --git a/extra/sigmund~/sigmund~.c b/extra/sigmund~/sigmund~.c index b06aa90e..da046941 100644 --- a/extra/sigmund~/sigmund~.c +++ b/extra/sigmund~/sigmund~.c @@ -1916,7 +1916,7 @@ int main() class_register(CLASS_BOX, c); sigmund_class = c; - post("sigmund~ version 0.07"); + post("sigmund~ version 0.08"); return (0); } From 44faeedafb99f288765a226abfda170ffd8d59dc Mon Sep 17 00:00:00 2001 From: porres Date: Tue, 4 Jul 2023 14:37:11 -0300 Subject: [PATCH 05/68] fix typo in binops tilde --- doc/5.reference/binops-tilde-help.pd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/5.reference/binops-tilde-help.pd b/doc/5.reference/binops-tilde-help.pd index b2d6ac80..3f4164a5 100644 --- a/doc/5.reference/binops-tilde-help.pd +++ b/doc/5.reference/binops-tilde-help.pd @@ -1,4 +1,4 @@ -#N canvas 319 23 841 594 12; +#N canvas 319 23 841 580 12; #X obj 22 164 +~; #X obj 102 164 -~; #X obj 22 18 +~; @@ -130,8 +130,8 @@ #X floatatom 111 228 5 0 0 0 - - - 0; #X obj 86 163 sig~ 2; #X obj 146 163 sig~ 5; -#X text 42 15 All of these objects work with multichannel signals. If both inputs have the same amoun of channels \, then operations are done at each corresponding channels. In case the number mismatch \, the input with less channels wrap around and copy the first channels until reaching the number of channels of the other input. This is specially useful to use a single channel value (or a float) to multily to every channel in a multisignal connection., f 67; #X text 128 255 value summed to all channels, f 16; +#X text 42 15 All of these objects work with multichannel signals. If both inputs have the same amoun of channels \, then operations are done at each corresponding channels. In case the number mismatch \, the input with less channels wrap around and copy the first channels until reaching the number of channels of the other input. This is specially useful to use a single channel value (or a float) to apply an operation to every channel in a multisignal connection., f 67; #X connect 0 0 2 0; #X connect 1 0 2 1; #X connect 2 0 10 0; @@ -166,7 +166,7 @@ #X text 519 450 mutichannel signal support ----------->, f 20; #X text 35 307 These objects perform the 4 arithmetic functions ([+~] \, etc) \, output the minimum or maximum of two numbers ([min~] \, [max~]) \, or perform logarithms and exponentiation ([log~] \, [pow~])., f 62; #X text 35 422 [pow~] raises a signal to a numeric power given by the right inlet or a creation argument. The inputs may be positive \, zero \, or negative. WARNING: it's easy to generate "infinity" \, but there' a protection against NaNs (they become 0)., f 62; -#X text 615 553 updated for Pd version 0.54; +#X text 627 550 updated for Pd version 0.54; #X obj 10 510 cnv 1 830 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 141 523 (etc.) - control rate versions; #X text 298 17 - signal binary operators; From 01c56fa89a63b59bedf7c938a274b20818a752fd Mon Sep 17 00:00:00 2001 From: porres Date: Tue, 4 Jul 2023 20:54:46 -0300 Subject: [PATCH 06/68] Update help-intro.pd add missing new [file] methods --- doc/5.reference/help-intro.pd | 1006 +++++++++++++++++---------------- 1 file changed, 505 insertions(+), 501 deletions(-) diff --git a/doc/5.reference/help-intro.pd b/doc/5.reference/help-intro.pd index 0fbf57dd..478d2824 100644 --- a/doc/5.reference/help-intro.pd +++ b/doc/5.reference/help-intro.pd @@ -1,503 +1,507 @@ -#N canvas 431 44 591 628 12; +#N canvas 409 36 591 628 12; #X declare; -#X obj 46 2395 delay; -#X obj 46 2442 metro; -#X obj 46 2466 line; -#X obj 46 2490 timer; -#X obj 46 2514 cputime; -#X obj 46 2538 realtime; -#X text 178 2543 - measure real time; -#X obj 46 2419 pipe; -#X obj 48 2937 random; -#X obj 176 2968 max; -#X obj 208 2968 min; -#X obj 48 2906 clip; -#X obj 48 3458 notein; -#X obj 98 3458 ctlin; -#X obj 140 3458 pgmin; -#X obj 183 3458 bendin; -#X obj 231 3458 touchin; -#X obj 48 3482 polytouchin; -#X obj 298 3471 midiin; -#X obj 133 3482 sysexin; -#X text 357 3472 - MIDI input; -#X obj 47 3514 noteout; -#X obj 104 3514 ctlout; -#X obj 153 3514 pgmout; -#X obj 204 3514 bendout; -#X obj 47 3536 touchout; -#X obj 114 3536 polytouchout; -#X obj 208 3536 midiout; -#X text 273 3524 - MIDI output; -#X obj 47 3566 makenote; -#X obj 47 3591 stripnote; -#X text 178 3590 - strip "note off" messages; -#X obj 55 1111 tabread; -#X obj 55 1134 tabread4; -#X obj 55 1157 tabwrite; -#X obj 55 1181 soundfiler; -#X obj 42 6110 loadbang; -#X obj 56 1538 qlist; -#X obj 47 3616 poly; -#X obj 46 4926 clip~; -#X obj 46 4889 wrap~; -#X obj 50 7349 framp~; -#X obj 49 4221 dac~; -#X text 174 4221 - audio output; -#X obj 49 4195 adc~; -#X text 174 4195 - audio input; -#X obj 49 4246 sig~; -#X text 174 4246 - convert numbers to audio signals; -#X obj 49 4270 line~; -#X obj 49 4294 vline~; -#X obj 49 4367 snapshot~; -#X obj 49 4391 vsnapshot~; -#X obj 49 4441 bang~; -#X obj 49 4465 samplerate~; -#X obj 49 4490 send~; -#X obj 92 4490 receive~; -#X obj 49 4517 throw~; -#X obj 100 4517 catch~; -#X obj 43 6368 block~; -#X obj 49 4544 readsf~; -#X text 174 4544 - soundfile playback from disk; -#X obj 49 4568 writesf~; -#X obj 43 5296 phasor~; -#X obj 43 5320 cos~; -#X obj 43 5344 osc~; -#X obj 43 5416 tabwrite~; -#X obj 43 5392 tabplay~; -#X text 173 5392 - play back from a table (non-transposing); -#X obj 43 5440 tabread~; -#X obj 43 5464 tabread4~; -#X obj 43 5368 tabosc4~; -#X obj 43 5488 tabsend~; -#X text 173 5488 - write one block continuously to a table; -#X obj 43 5512 tabreceive~; -#X text 173 5512 - read one block continuously from a table; -#X obj 42 5619 vcf~; -#X obj 43 5271 noise~; -#X obj 49 4344 env~; -#X text 174 4343 - envelope follower; -#X obj 42 5646 hip~; -#X obj 42 5670 lop~; -#X obj 42 5720 bp~; -#X obj 42 5744 biquad~; -#X obj 49 4417 samphold~; -#X text 174 4416 - sample and hold unit; -#X obj 49 4593 print~; -#X text 174 4593 - print out one or more "blocks"; -#X obj 42 5770 rpole~; -#X text 173 5769 - raw real-valued one-pole filter; -#X obj 42 5794 rzero~; -#X text 173 5793 - raw real-valued one-zero filter; -#X obj 42 5818 rzero_rev~; -#X obj 42 5843 cpole~; -#X obj 99 5843 czero~; -#X obj 42 5949 delwrite~; -#X obj 42 5973 delread~; +#X obj 46 2475 delay; +#X obj 46 2522 metro; +#X obj 46 2546 line; +#X obj 46 2570 timer; +#X obj 46 2594 cputime; +#X obj 46 2618 realtime; +#X text 178 2623 - measure real time; +#X obj 46 2499 pipe; +#X obj 48 3017 random; +#X obj 176 3048 max; +#X obj 208 3048 min; +#X obj 48 2986 clip; +#X obj 48 3538 notein; +#X obj 98 3538 ctlin; +#X obj 140 3538 pgmin; +#X obj 183 3538 bendin; +#X obj 231 3538 touchin; +#X obj 48 3562 polytouchin; +#X obj 298 3551 midiin; +#X obj 133 3562 sysexin; +#X text 357 3552 - MIDI input; +#X obj 47 3594 noteout; +#X obj 104 3594 ctlout; +#X obj 153 3594 pgmout; +#X obj 204 3594 bendout; +#X obj 47 3616 touchout; +#X obj 114 3616 polytouchout; +#X obj 208 3616 midiout; +#X text 273 3604 - MIDI output; +#X obj 47 3646 makenote; +#X obj 47 3671 stripnote; +#X text 178 3670 - strip "note off" messages; +#X obj 55 1117 tabread; +#X obj 55 1140 tabread4; +#X obj 55 1163 tabwrite; +#X obj 55 1187 soundfiler; +#X obj 42 6190 loadbang; +#X obj 56 1544 qlist; +#X obj 47 3696 poly; +#X obj 46 5006 clip~; +#X obj 46 4969 wrap~; +#X obj 50 7429 framp~; +#X obj 49 4301 dac~; +#X text 174 4301 - audio output; +#X obj 49 4275 adc~; +#X text 174 4275 - audio input; +#X obj 49 4326 sig~; +#X text 174 4326 - convert numbers to audio signals; +#X obj 49 4350 line~; +#X obj 49 4374 vline~; +#X obj 49 4447 snapshot~; +#X obj 49 4471 vsnapshot~; +#X obj 49 4521 bang~; +#X obj 49 4545 samplerate~; +#X obj 49 4570 send~; +#X obj 92 4570 receive~; +#X obj 49 4597 throw~; +#X obj 100 4597 catch~; +#X obj 43 6448 block~; +#X obj 49 4624 readsf~; +#X text 174 4624 - soundfile playback from disk; +#X obj 49 4648 writesf~; +#X obj 43 5376 phasor~; +#X obj 43 5400 cos~; +#X obj 43 5424 osc~; +#X obj 43 5496 tabwrite~; +#X obj 43 5472 tabplay~; +#X text 173 5472 - play back from a table (non-transposing); +#X obj 43 5520 tabread~; +#X obj 43 5544 tabread4~; +#X obj 43 5448 tabosc4~; +#X obj 43 5568 tabsend~; +#X text 173 5568 - write one block continuously to a table; +#X obj 43 5592 tabreceive~; +#X text 173 5592 - read one block continuously from a table; +#X obj 42 5699 vcf~; +#X obj 43 5351 noise~; +#X obj 49 4424 env~; +#X text 174 4423 - envelope follower; +#X obj 42 5726 hip~; +#X obj 42 5750 lop~; +#X obj 42 5800 bp~; +#X obj 42 5824 biquad~; +#X obj 49 4497 samphold~; +#X text 174 4496 - sample and hold unit; +#X obj 49 4673 print~; +#X text 174 4673 - print out one or more "blocks"; +#X obj 42 5850 rpole~; +#X text 173 5849 - raw real-valued one-pole filter; +#X obj 42 5874 rzero~; +#X text 173 5873 - raw real-valued one-zero filter; +#X obj 42 5898 rzero_rev~; +#X obj 42 5923 cpole~; +#X obj 99 5923 czero~; +#X obj 42 6029 delwrite~; +#X obj 42 6053 delread~; #N canvas 52 50 450 300 (subpatch) 0; -#X restore 42 6238 pd; -#X obj 55 1210 table; -#X obj 42 6264 inlet; -#X obj 42 6290 outlet; -#X obj 42 6316 inlet~; -#X obj 96 6316 outlet~; -#X obj 44 6484 struct; -#X obj 44 6532 drawcurve; -#X obj 121 6532 filledcurve; -#X obj 44 6508 drawpolygon; -#X obj 136 6508 filledpolygon; -#X obj 44 6583 plot; -#X obj 44 6557 drawnumber; -#X obj 45 6639 pointer; -#X obj 45 6663 get; -#X obj 45 6687 set; -#X obj 45 6711 element; -#X obj 45 6735 getsize; -#X obj 45 6759 setsize; -#X obj 45 6783 append; -#X obj 45 6610 scalar; -#X obj 155 5843 czero_rev~; -#X obj 49 4318 threshold~; -#X obj 83 4827 min~; -#X obj 46 4827 max~; -#X obj 81 2968 -; -#X obj 114 2968 *; -#X obj 146 2968 /; -#X obj 49 2968 +; -#X obj 46 4803 +~; -#X obj 76 4803 -~; -#X obj 105 4803 *~; -#X obj 135 4803 /~; -#X obj 42 6135 declare; -#X text 174 6315 - signal versions, f 48; -#X obj 158 4827 pow~; -#X obj 121 4827 log~; -#X obj 89 4889 exp~; -#X obj 46 4863 abs~; -#X text 178 3565 - schedule delayed "note off" message for a note-on; -#X obj 55 1583 textfile; -#X obj 83 4863 sqrt~; -#X obj 47 3642 oscparse; -#X obj 47 3666 oscformat; -#X obj 45 6906 sigmund~; -#X obj 45 6931 bonk~; -#X obj 45 6956 choice; -#X obj 45 6981 hilbert~; -#X obj 45 7009 complex-mod~; -#X obj 45 7037 loop~; -#X obj 45 7064 lrshift~; -#X obj 46 7090 pd~; -#X obj 46 7147 rev1~; -#X obj 91 7147 rev2~, f 7; -#X obj 149 7147 rev3~, f 7; -#X text 207 7147 - reverberators; -#X obj 46 7117 stdout; -#X obj 46 7174 bob~; -#X obj 42 6185 clone; -#X obj 190 3482 midirealtimein; -#X obj 42 5999 delread4~; -#X obj 126 4863 rsqrt~; -#X obj 50 7441 q8_sqrt~; -#X obj 50 7468 q8_rsqrt~; -#X obj 46 4771 expr~; -#X obj 47 2874 expr; -#X obj 93 4771 fexpr~; -#X text 175 4769 - C-style expressions; -#X text 178 2875 - C-style expressions; -#X obj 126 6557 drawsymbol; -#X obj 207 6557 drawtext; -#X obj 42 6159 savestate; -#X obj 42 5695 slop~, f 7; -#X obj 42 6211 pdcontrol; -#X obj 51 7379 fiddle~; -#X obj 112 7379 pique; -#X text 200 249 click and open for all Graphical User Interface (GUI) objects in Pd, f 48; -#X text 173 5296 - phase ramp generator; -#X text 175 6609 - create a single scalar (experimental); -#X obj 42 6342 namecanvas; -#X text 175 6341 - attach a name to a pd window, f 48; -#X text 173 5320 - cosine wavetable; -#X obj 46 7205 output~; -#X text 178 2400 - send a bang message after a time delay; -#X text 178 2447 - send a bang message periodically (a la metronome); -#X obj 54 250 all_guis; -#X text 175 6484 - define a data structure template; -#X text 274 6556 - draw number/symbol/text fields; -#X text 175 6663 - get field values (floats/symbols) from a scalar; -#X text 175 6687 - set field values (floats/symbols) of a scalar; -#X text 175 6783 - add a scalar to a Data Structure list; -#X obj 55 825 list append; -#X obj 55 850 list prepend; -#X obj 55 924 list trim; -#X obj 55 899 list split; -#X text 185 824 - append the second list to the first; -#X text 186 851 - prepend the second list to the first; -#X text 186 900 - split a list in two; -#X text 186 924 - trim the "list" selector off; -#X text 186 948 - output number of items in list; -#X obj 55 949 list length; -#X obj 55 974 list fromsymbol; -#X obj 55 999 list tosymbol; -#X text 185 876 - build up or break down a list; -#X obj 55 875 list store; -#X text 187 973 - convert symbols to numeric characters; -#X text 187 1000 - convert numeric characters to symbols; -#X obj 56 1269 array size; -#X obj 56 1247 array define; -#X obj 56 1291 array sum; -#X obj 56 1357 array quantile; -#X obj 56 1313 array get; -#X obj 56 1335 array set; -#X obj 56 1379 array random; -#X obj 56 1401 array max; -#X obj 56 1424 array min; -#X text 186 1379 - array as weighted probabilities; -#X text 187 1247 - create \, store \, and/or edit an array; -#X text 187 1269 - get or change array size; -#X text 187 1291 - sum all or a range of array's elements; -#X text 186 1313 - get array contents as a list; -#X text 186 1335 - set array contents from a list; -#X text 186 1357 - get array quantile; -#X text 186 1401 - find highest value in array; -#X text 186 1424 - find lowest value in array; -#X obj 48 3097 sin; -#X obj 81 3097 cos; -#X obj 113 3097 tan; -#X obj 145 3097 atan; -#X obj 183 3097 atan2; -#X obj 76 3061 sqrt; -#X obj 238 2968 log; -#X obj 148 3061 exp; -#X obj 48 3061 abs; -#X obj 113 3061 wrap; -#X obj 266 2968 pow; -#X obj 48 3001 >; -#X obj 76 3001 >=; -#X obj 132 3001 <=; -#X obj 104 3001 <; -#X obj 161 3001 ==; -#X obj 189 3001 !=; -#X obj 217 3001 div; -#X obj 217 3025 mod; -#X obj 48 3025 &&; -#X obj 76 3025 ||; -#X obj 104 3025 &; -#X obj 132 3025 |; -#X obj 160 3025 <<; -#X obj 189 3025 >>; -#X text 177 2937 - pseudo random integers; -#X msg 95 6368 switch~; -#X text 175 6364 - set block size \, overlap and up/downsampling (also switch subpatches if invoked as [switch~]), f 48; -#X obj 55 1630 text define; -#X obj 55 1653 text get; -#X obj 55 1751 text size; -#X obj 55 1677 text set; -#X obj 55 1775 text tolist; -#X obj 55 1799 text fromlist; -#X obj 55 1822 text search; -#X obj 55 1845 text sequence; -#X obj 55 1726 text delete; -#X obj 55 1701 text insert; -#X text 188 1629 - create \, store \, and/or edit a text; -#X text 188 1652 - get a line from a text; -#X text 188 1676 - replace or add a line to a text; -#X text 188 1700 - insert a line to a text; -#X text 188 1725 - delete a line or clear text; -#X text 188 1750 - get number of lines in a text; -#X text 188 1774 - convert a text into list; -#X text 188 1798 - convert from a list to a text; -#X text 188 1821 - search for a line in a text; -#X text 188 1844 - text based sequencer/message-sender; -#X text 188 1578 - read/write text files (rather deprecated \, check the ones below instead), f 43; -#X obj 55 1963 file handle; -#X obj 55 2102 file stat; -#X text 188 1962 - read/write binary files; -#X text 188 2045 - find a file in Pd's search-path; -#X text 188 2075 - list files in directories; -#X obj 55 2074 file glob; -#X obj 55 2044 file which; -#X obj 55 2017 file mkdir; -#X text 189 2018 - create a directory; -#X obj 56 2208 file delete; -#X text 194 2209 - delete files and directories; -#X obj 56 2153 file copy; -#X text 194 2154 - copy files; -#X obj 56 2180 file move; -#X text 194 2181 - move files; -#X obj 56 2243 file split; -#X obj 56 2268 file join; -#X obj 137 2243 file splitext; -#X obj 130 2268 file splitname; -#X text 255 2269 - filename operations; -#X obj 56 2127 file isfile; -#X obj 127 2102 file isdirectory; -#X obj 146 2127 file size; -#X text 256 2105 - get information on existing files, f 18; -#X obj 55 1990 file define \$0.f; -#X text 188 1989 - shared file handles; -#X obj 48 4141 snake~ in; -#X obj 48 4168 snake~ out; -#X text 174 4140 - combine mono signals into multichannel signals; -#X text 174 4167 - split multichannel signals into mono signals; -#X text 240 5842 - complex-valued variants; -#X text 22 212 ----------------------------------- GUIs -----------------------------------, f 76; -#X text 15 1081 ------------------------------ ARRAYS/TABLES -------------------------------, f 77; -#X text 3 4107 --------------------------- GENERAL AUDIO TOOLS ----------------------------, f 77; -#X text -3 4691 -------------------------------- AUDIO MATH ---------------------------------, f 77; -#X text 3 5237 ----------------------- AUDIO GENERATORS AND TABLES ------------------------, f 77; -#X text 9 5925 ---------------------------- AUDIO DELAY -----------------------------------, f 76; -#X text 8 5593 ---------------------------- AUDIO FILTERS ---------------------------------, f 76; -#X text 1 6084 ---------------------------- PATCH/SUBPATCH ---------------------------------, f 77; -#X text -2 6454 ------------------------------ DATA STRUCTURES -------------------------------, f 79; -#X text 3 6868 ----------------- "EXTRA" (patches and externs in pd/extra) ------------------, f 78; -#X text 7 7585 ------------------------------------------------------------------------------, f 78; -#X text 15 20 ------------------------------------------------------------------------------, f 78; -#X text 16 1506 ------------------------------ TEXT MANAGEMENT ------------------------------, f 78; -#X text 13 1927 ----------------------------- FILE MANAGEMENT ------------------------------, f 78; -#X text 19 739 ----------------------------- LIST MANAGEMENT -------------------------------, f 78; -#X obj 54 367 bang; -#X obj 55 496 float; -#X text 185 496 - store and recall a number; -#X obj 55 573 symbol; -#X text 185 573 - store and recall a symbol; -#X obj 55 522 int; -#X text 185 522 - store and recall an integer; -#X obj 55 629 send; -#X obj 55 653 receive; -#X obj 54 418 route; -#X text 185 419 - route messages according to first element; -#X obj 54 769 pack; -#X obj 54 794 unpack; -#X obj 54 392 trigger; -#X obj 54 469 print; -#X text 185 470 - print out messages; -#X obj 55 600 makefilename; -#X obj 54 443 swap; -#X text 186 444 - swap two numbers; -#X obj 55 547 value; -#X text 185 547 - shared numeric value; -#X obj 48 3852 netsend; -#X obj 48 3878 netreceive; -#X text 177 3851 - send messages over a network connection; -#X text 177 3877 - receive messages over a network connection; -#X text 186 367 - convert to a bang message; -#X text 185 601 - format a symbol name with a variable field; -#X text 185 629 - send messages without patch cords; -#X text 185 653 - receive messages without patch cords; -#X obj 46 2653 select; -#X obj 46 2711 spigot; -#X obj 46 2738 moses; -#X text 178 2737 - part a numeric stream; -#X obj 46 2766 until; -#X obj 46 2683 change; -#X text 178 2682 - eliminate repeated numbers; -#X text 178 2710 - pass or block messages; -#X text 178 2765 - bang loop mechanism; -#X obj 48 3985 trace; -#X text 178 3984 - message tracing for debugging; -#X obj 48 3775 openpanel; -#X obj 48 3798 savepanel; -#X obj 48 3959 bag; -#X obj 48 3824 key; -#X obj 76 3824 keyup; -#X obj 118 3824 keyname; -#X text 178 3958 - collection of numbers; -#X obj 48 3906 fudiparse; -#X obj 48 3932 fudiformat; -#X text 178 3905 - convert FUDI messages to Pd messages; -#X text 178 3931 - convert Pd messages to FUDI message; -#X text 13 3748 ----------------------------------- MISC -----------------------------------, f 76; -#X text 178 3665 - convert lists to OSC packets; -#X text 178 3641 - parse OSC packets into Pd messages; -#X text 175 7411 (use [struct] now); -#X text 174 4294 - deluxe [line~]; -#X text 174 4391 - deluxe [snapshot~]; -#X text 124 249 <--------; -#X text 3 7317 ------------------------ OBSOLETE / DEPRECATED -------------------------------, f 78; -#X text 176 7442 (fast \, cheap 8 bits versions of square root functions \, use [srqt~]/[rsqrt~] instead), f 43; -#X text 3 5003 ---------------------- SIGNAL ACOUSTIC CONVERSIONS --------------------------, f 77; -#X obj 46 5034 mtof~; -#X obj 46 5059 ftom~; -#X obj 46 5083 dbtorms~; -#X obj 46 5106 rmstodb~; -#X obj 46 5130 dbtopow~; -#X obj 47 5154 powtodb~; -#X text 177 3217 - MIDI pitch to Frequency in hertz; -#X text 177 3267 - dB to linear "RMS"; -#X text 177 3291 - linear "RMS" to dB; -#X text 177 3315 - dB to power unit (square of "RMS"); -#X text 177 3338 - power unit (square of "RMS") to dB; -#X text 177 3243 - frequency in hertz to MIDI pitch; -#X text 10 3186 -------------------------- ACOUSTIC CONVERSIONS -----------------------------, f 77; -#X obj 53 3217 mtof; -#X obj 53 3242 ftom; -#X obj 53 3266 dbtorms; -#X obj 53 3289 rmstodb; -#X obj 53 3313 dbtopow; -#X obj 54 3337 powtodb; -#X text 185 393 - sequence messages in right-to-left order; -#X text 185 770 - combine atoms into a list; -#X text 185 795 - split lists into atoms; -#X text 187 1111 - non-interpolating table lookup; -#X text 187 1134 - 4-point-interpolating table lookup; -#X text 187 1157 - write numbers to a table; -#X text 187 1181 - import/export soundfiles to/from arrays; -#X text 178 2471 - timed ramp generator; -#X text 178 2495 - measure logical time; -#X text 178 2519 - measure CPU time/usage; -#X text 178 2424 - message "delay line"; -#X text 178 2652 - compare numbers or symbols; -#X text 177 2907 - bound a number between two limits; -#X text 178 3615 - MIDI-style polyphonic voice allocator; -#X text 178 3775 - query for files or directories; -#X text 178 3798 - query you for the name of a file to create; -#X text 177 3823 - grab keyboard input; -#X text 174 4270 - audio ramp generator; -#X text 174 4318 - detect signal thresholds (schmitt trigger); -#X text 174 4367 - convert a signal to a number on demand; -#X text 174 4441 - output a bang after each DSP block; -#X text 174 4465 - get sample rate; -#X text 174 4489 - one-to-many nonlocal signal(s) connection; -#X text 174 4516 - summing signal bus and non-local connection; -#X text 174 4568 - record audio signals to a soundfile; -#X obj 46 4746 fft~; -#X obj 96 4747 ifft~; -#X text 175 4745 - forward and inverse complex FFT; -#X obj 46 4722 rfft~; -#X obj 96 4723 rifft~; -#X text 175 4721 - forward and inverse real FFT; -#X text 93 4926 - bound a signal between two limits; -#X text 174 5034 - MIDI pitch to Frequency in hertz for signals; -#X text 174 5060 - frequency in hertz to MIDI pitch for signals; -#X text 174 5084 - dB to linear "RMS" for signals; -#X text 174 5108 - linear "RMS" to dB for signals; -#X text 174 5132 - dB to power unit (square of "RMS") for signals; -#X text 174 5155 - power unit (square of "RMS") to dB for signals; -#X text 174 5271 - uniformly distributed white noise; -#X text 173 5344 - cosine wave oscillator; -#X text 173 5368 - 4-point interpolating wavetable oscillator; -#X text 173 5416 - write a signal in an array; -#X text 173 5440 - non-interpolating table lookup for signals; -#X text 173 5464 - 4-point-interpolating table lookup for signals; -#X text 173 5619 - voltage-controlled band/low-pass filter; -#X text 173 5645 - one-pole high pass filter; -#X text 173 5669 - one-pole low pass filter; -#X text 173 5694 - slew-limiting / low pass filter; -#X text 173 5719 - 2-pole band-pass filter; -#X text 173 5743 - raw biquad 2nd order filter; -#X text 173 5817 - real one-zero "reverse" filter; -#X text 173 5949 - writes a signal in a delay line; -#X text 173 5973 - read a signal from a delay line (no interpolation); -#X text 172 5999 - read from a delay line with 4-point interpolation; -#X text 172 6135 - set search path and/or libraries for the patch; -#X text 172 6110 - send a "bang" when loading the patch, f 48; -#X text 172 6159 - mechanism for saving the state of an abstraction; -#X text 173 6211 - get patch/window information; -#X text 175 6186 - make multiple copies of an abstraction; -#X text 188 1203 - create a subwindow with an array (rather deprecated \, check [array define] instead), f 42; -#X text 186 1536 - text-based sequencer (rather deprecated \, check [text sequence] instead), f 42; -#X text 173 6237 - create a subpatch; -#X text 174 6266 - add an inlet to a subpatch/abstraction, f 48; -#X text 174 6290 - add an outlet to a pd subpatch/abstraction, f 48; -#X text 175 6583 - draw array in a scalar; -#X text 238 6508 - draw polygon shapes in a scalar; -#X text 209 6532 - draw shapes with bezier curve in a scalar; -#X text 175 6639 - store the location of a scalar in a list; -#X text 175 6711 - get pointer to a Data Structure's array element; -#X text 175 6735 - get the size of a Data Structure's array; -#X text 175 6759 - change the size of a Data Structure's array; -#X text 175 6931 - attack detection and spectral envelope measurement; -#X text 175 6906 - signal analyzer (pitch/amplitude and more); -#X text 175 6956 - search for a best match to an incoming list; -#X text 175 6980 - hilbert transform; -#X text 175 7009 - complex amplitude modulator (frequency shifter); -#X text 175 7038 - phase generator for looping samplers; -#X text 175 7064 - shift block elements left or right; -#X text 175 7088 - run a Pd sub-proccess (for multiprocessing); -#X text 175 7115 - standard output for sub-process; -#X text 175 7176 - Moog analog lowpass resonant filter simulation; -#X text 175 7213 - simple stereo output GUI abstraction; -#X text 223 7234 (used in the documentation); -#X text 175 7349 - FFT frequency estimate (use [sigmund~] now); -#X text 173 7379 - pitch/peaks estimate (use [sigmund~] now); -#X obj 49 7498 %; -#X text 177 7496 (use [mod] instead); -#X text 20 2373 ----------------------------- TIME -----------------------------------------, f 76; -#X text 20 2623 ------------------------------ LOGIC ---------------------------------------, f 76; -#X text 14 2848 ------------------------------- MATH ----------------------------------------, f 77; -#X text 13 3422 ------------------------------ MIDI/OSC -------------------------------------, f 77; -#X obj 50 7410 template; -#X text 14 332 ------------------------- GENERAL DATA MANAGEMENT ----------------------------, f 78; -#X text 251 3013 - other binary operators; -#X obj 384 133 pd-messages; -#X text 104 55 This file contains a list of built-in objects in Pd. Right-click (or control-click on a Macintosh) on any object to get its "help window"., f 54; -#X text 104 107 But first \, we here present a help file with messages you can send to Pd or canvas windows., f 54; -#X text 230 3096 - trigonometric functions; -#X text 300 2967 - binary (two-input) operators; -#X text 182 3060 - unary (one-input) operators; -#X text 202 4872 - unary (one-input) signal operators; -#X text 202 4811 - binary (two-input) signal operators; -#X obj 163 2294 file isabsolute; -#X obj 56 2294 file normalize; +#X restore 42 6318 pd; +#X obj 55 1216 table; +#X obj 42 6344 inlet; +#X obj 42 6370 outlet; +#X obj 42 6396 inlet~; +#X obj 96 6396 outlet~; +#X obj 44 6564 struct; +#X obj 44 6612 drawcurve; +#X obj 121 6612 filledcurve; +#X obj 44 6588 drawpolygon; +#X obj 136 6588 filledpolygon; +#X obj 44 6663 plot; +#X obj 44 6637 drawnumber; +#X obj 45 6719 pointer; +#X obj 45 6743 get; +#X obj 45 6767 set; +#X obj 45 6791 element; +#X obj 45 6815 getsize; +#X obj 45 6839 setsize; +#X obj 45 6863 append; +#X obj 45 6690 scalar; +#X obj 155 5923 czero_rev~; +#X obj 49 4398 threshold~; +#X obj 83 4907 min~; +#X obj 46 4907 max~; +#X obj 81 3048 -; +#X obj 114 3048 *; +#X obj 146 3048 /; +#X obj 49 3048 +; +#X obj 46 4883 +~; +#X obj 76 4883 -~; +#X obj 105 4883 *~; +#X obj 135 4883 /~; +#X obj 42 6215 declare; +#X text 174 6395 - signal versions, f 48; +#X obj 158 4907 pow~; +#X obj 121 4907 log~; +#X obj 89 4969 exp~; +#X obj 46 4943 abs~; +#X text 178 3645 - schedule delayed "note off" message for a note-on; +#X obj 55 1589 textfile; +#X obj 83 4943 sqrt~; +#X obj 47 3722 oscparse; +#X obj 47 3746 oscformat; +#X obj 45 6986 sigmund~; +#X obj 45 7011 bonk~; +#X obj 45 7036 choice; +#X obj 45 7061 hilbert~; +#X obj 45 7089 complex-mod~; +#X obj 45 7117 loop~; +#X obj 45 7144 lrshift~; +#X obj 46 7170 pd~; +#X obj 46 7227 rev1~; +#X obj 91 7227 rev2~, f 7; +#X obj 149 7227 rev3~, f 7; +#X text 207 7227 - reverberators; +#X obj 46 7197 stdout; +#X obj 46 7254 bob~; +#X obj 42 6265 clone; +#X obj 190 3562 midirealtimein; +#X obj 42 6079 delread4~; +#X obj 126 4943 rsqrt~; +#X obj 50 7521 q8_sqrt~; +#X obj 50 7548 q8_rsqrt~; +#X obj 46 4851 expr~; +#X obj 47 2954 expr; +#X obj 93 4851 fexpr~; +#X text 178 2955 - C-style expressions; +#X obj 126 6637 drawsymbol; +#X obj 207 6637 drawtext; +#X obj 42 6239 savestate; +#X obj 42 5775 slop~, f 7; +#X obj 42 6291 pdcontrol; +#X obj 51 7459 fiddle~; +#X obj 112 7459 pique; +#X text 200 255 click and open for all Graphical User Interface (GUI) objects in Pd, f 48; +#X text 173 5376 - phase ramp generator; +#X text 175 6689 - create a single scalar (experimental); +#X obj 42 6422 namecanvas; +#X text 175 6421 - attach a name to a pd window, f 48; +#X text 173 5400 - cosine wavetable; +#X obj 46 7285 output~; +#X text 178 2480 - send a bang message after a time delay; +#X text 178 2527 - send a bang message periodically (a la metronome); +#X obj 54 256 all_guis; +#X text 175 6564 - define a data structure template; +#X text 274 6636 - draw number/symbol/text fields; +#X text 175 6743 - get field values (floats/symbols) from a scalar; +#X text 175 6767 - set field values (floats/symbols) of a scalar; +#X text 175 6863 - add a scalar to a Data Structure list; +#X obj 55 831 list append; +#X obj 55 856 list prepend; +#X obj 55 930 list trim; +#X obj 55 905 list split; +#X text 185 830 - append the second list to the first; +#X text 186 857 - prepend the second list to the first; +#X text 186 906 - split a list in two; +#X text 186 930 - trim the "list" selector off; +#X text 186 954 - output number of items in list; +#X obj 55 955 list length; +#X obj 55 980 list fromsymbol; +#X obj 55 1005 list tosymbol; +#X text 185 882 - build up or break down a list; +#X obj 55 881 list store; +#X text 187 979 - convert symbols to numeric characters; +#X text 187 1006 - convert numeric characters to symbols; +#X obj 56 1275 array size; +#X obj 56 1253 array define; +#X obj 56 1297 array sum; +#X obj 56 1363 array quantile; +#X obj 56 1319 array get; +#X obj 56 1341 array set; +#X obj 56 1385 array random; +#X obj 56 1407 array max; +#X obj 56 1430 array min; +#X text 186 1385 - array as weighted probabilities; +#X text 187 1253 - create \, store \, and/or edit an array; +#X text 187 1275 - get or change array size; +#X text 187 1297 - sum all or a range of array's elements; +#X text 186 1319 - get array contents as a list; +#X text 186 1341 - set array contents from a list; +#X text 186 1363 - get array quantile; +#X text 186 1407 - find highest value in array; +#X text 186 1430 - find lowest value in array; +#X obj 48 3177 sin; +#X obj 81 3177 cos; +#X obj 113 3177 tan; +#X obj 145 3177 atan; +#X obj 183 3177 atan2; +#X obj 76 3141 sqrt; +#X obj 238 3048 log; +#X obj 148 3141 exp; +#X obj 48 3141 abs; +#X obj 113 3141 wrap; +#X obj 266 3048 pow; +#X obj 48 3081 >; +#X obj 76 3081 >=; +#X obj 132 3081 <=; +#X obj 104 3081 <; +#X obj 161 3081 ==; +#X obj 189 3081 !=; +#X obj 217 3081 div; +#X obj 217 3105 mod; +#X obj 48 3105 &&; +#X obj 76 3105 ||; +#X obj 104 3105 &; +#X obj 132 3105 |; +#X obj 160 3105 <<; +#X obj 189 3105 >>; +#X text 177 3017 - pseudo random integers; +#X msg 95 6448 switch~; +#X text 175 6444 - set block size \, overlap and up/downsampling (also switch subpatches if invoked as [switch~]), f 48; +#X obj 55 1636 text define; +#X obj 55 1659 text get; +#X obj 55 1757 text size; +#X obj 55 1683 text set; +#X obj 55 1781 text tolist; +#X obj 55 1805 text fromlist; +#X obj 55 1828 text search; +#X obj 55 1851 text sequence; +#X obj 55 1732 text delete; +#X obj 55 1707 text insert; +#X text 188 1635 - create \, store \, and/or edit a text; +#X text 188 1658 - get a line from a text; +#X text 188 1682 - replace or add a line to a text; +#X text 188 1706 - insert a line to a text; +#X text 188 1731 - delete a line or clear text; +#X text 188 1756 - get number of lines in a text; +#X text 188 1780 - convert a text into list; +#X text 188 1804 - convert from a list to a text; +#X text 188 1827 - search for a line in a text; +#X text 188 1850 - text based sequencer/message-sender; +#X text 188 1584 - read/write text files (rather deprecated \, check the ones below instead), f 43; +#X obj 55 1969 file handle; +#X obj 55 2164 file stat; +#X text 188 1968 - read/write binary files; +#X text 185 2107 - find a file in Pd's search-path; +#X text 185 2136 - list files in directories; +#X obj 55 2136 file glob; +#X obj 55 2106 file which; +#X obj 55 2023 file mkdir; +#X text 189 2024 - create a directory; +#X obj 56 2270 file delete; +#X text 194 2271 - delete files and directories; +#X obj 56 2215 file copy; +#X text 194 2216 - copy files; +#X obj 56 2242 file move; +#X text 194 2243 - move files; +#X obj 56 2305 file split; +#X obj 56 2330 file join; +#X obj 137 2305 file splitext; +#X obj 130 2330 file splitname; +#X text 255 2331 - filename operations; +#X obj 56 2189 file isfile; +#X obj 127 2164 file isdirectory; +#X obj 146 2189 file size; +#X text 256 2167 - get information on existing files, f 18; +#X obj 55 1996 file define \$0.f; +#X text 188 1995 - shared file handles; +#X obj 48 4221 snake~ in; +#X obj 48 4248 snake~ out; +#X text 174 4220 - combine mono signals into multichannel signals; +#X text 174 4247 - split multichannel signals into mono signals; +#X text 240 5922 - complex-valued variants; +#X text 22 218 ----------------------------------- GUIs -----------------------------------, f 76; +#X text 15 1087 ------------------------------ ARRAYS/TABLES -------------------------------, f 77; +#X text 3 4187 --------------------------- GENERAL AUDIO TOOLS ----------------------------, f 77; +#X text 3 5317 ----------------------- AUDIO GENERATORS AND TABLES ------------------------, f 77; +#X text 9 6005 ---------------------------- AUDIO DELAY -----------------------------------, f 76; +#X text 8 5673 ---------------------------- AUDIO FILTERS ---------------------------------, f 76; +#X text 1 6164 ---------------------------- PATCH/SUBPATCH ---------------------------------, f 77; +#X text -2 6534 ------------------------------ DATA STRUCTURES -------------------------------, f 79; +#X text 3 6948 ----------------- "EXTRA" (patches and externs in pd/extra) ------------------, f 78; +#X text 7 7665 ------------------------------------------------------------------------------, f 78; +#X text 15 26 ------------------------------------------------------------------------------, f 78; +#X text 16 1512 ------------------------------ TEXT MANAGEMENT ------------------------------, f 78; +#X text 13 1933 ----------------------------- FILE MANAGEMENT ------------------------------, f 78; +#X text 19 745 ----------------------------- LIST MANAGEMENT -------------------------------, f 78; +#X obj 54 373 bang; +#X obj 55 502 float; +#X text 185 502 - store and recall a number; +#X obj 55 579 symbol; +#X text 185 579 - store and recall a symbol; +#X obj 55 528 int; +#X text 185 528 - store and recall an integer; +#X obj 55 635 send; +#X obj 55 659 receive; +#X obj 54 424 route; +#X text 185 425 - route messages according to first element; +#X obj 54 775 pack; +#X obj 54 800 unpack; +#X obj 54 398 trigger; +#X obj 54 475 print; +#X text 185 476 - print out messages; +#X obj 55 606 makefilename; +#X obj 54 449 swap; +#X text 186 450 - swap two numbers; +#X obj 55 553 value; +#X text 185 553 - shared numeric value; +#X obj 48 3932 netsend; +#X obj 48 3958 netreceive; +#X text 177 3931 - send messages over a network connection; +#X text 177 3957 - receive messages over a network connection; +#X text 186 373 - convert to a bang message; +#X text 185 607 - format a symbol name with a variable field; +#X text 185 635 - send messages without patch cords; +#X text 185 659 - receive messages without patch cords; +#X obj 46 2733 select; +#X obj 46 2791 spigot; +#X obj 46 2818 moses; +#X text 178 2817 - part a numeric stream; +#X obj 46 2846 until; +#X obj 46 2763 change; +#X text 178 2762 - eliminate repeated numbers; +#X text 178 2790 - pass or block messages; +#X text 178 2845 - bang loop mechanism; +#X obj 48 4065 trace; +#X text 178 4064 - message tracing for debugging; +#X obj 48 3855 openpanel; +#X obj 48 3878 savepanel; +#X obj 48 4039 bag; +#X obj 48 3904 key; +#X obj 76 3904 keyup; +#X obj 118 3904 keyname; +#X text 178 4038 - collection of numbers; +#X obj 48 3986 fudiparse; +#X obj 48 4012 fudiformat; +#X text 178 3985 - convert FUDI messages to Pd messages; +#X text 178 4011 - convert Pd messages to FUDI message; +#X text 13 3828 ----------------------------------- MISC -----------------------------------, f 76; +#X text 178 3745 - convert lists to OSC packets; +#X text 178 3721 - parse OSC packets into Pd messages; +#X text 175 7491 (use [struct] now); +#X text 174 4374 - deluxe [line~]; +#X text 174 4471 - deluxe [snapshot~]; +#X text 124 255 <--------; +#X text 3 7397 ------------------------ OBSOLETE / DEPRECATED -------------------------------, f 78; +#X text 176 7522 (fast \, cheap 8 bits versions of square root functions \, use [srqt~]/[rsqrt~] instead), f 43; +#X text 3 5083 ---------------------- SIGNAL ACOUSTIC CONVERSIONS --------------------------, f 77; +#X obj 46 5114 mtof~; +#X obj 46 5139 ftom~; +#X obj 46 5163 dbtorms~; +#X obj 46 5186 rmstodb~; +#X obj 46 5210 dbtopow~; +#X obj 47 5234 powtodb~; +#X text 177 3297 - MIDI pitch to Frequency in hertz; +#X text 177 3347 - dB to linear "RMS"; +#X text 177 3371 - linear "RMS" to dB; +#X text 177 3395 - dB to power unit (square of "RMS"); +#X text 177 3418 - power unit (square of "RMS") to dB; +#X text 177 3323 - frequency in hertz to MIDI pitch; +#X text 10 3266 -------------------------- ACOUSTIC CONVERSIONS -----------------------------, f 77; +#X obj 53 3297 mtof; +#X obj 53 3322 ftom; +#X obj 53 3346 dbtorms; +#X obj 53 3369 rmstodb; +#X obj 53 3393 dbtopow; +#X obj 54 3417 powtodb; +#X text 185 399 - sequence messages in right-to-left order; +#X text 185 776 - combine atoms into a list; +#X text 185 801 - split lists into atoms; +#X text 187 1117 - non-interpolating table lookup; +#X text 187 1140 - 4-point-interpolating table lookup; +#X text 187 1163 - write numbers to a table; +#X text 187 1187 - import/export soundfiles to/from arrays; +#X text 178 2551 - timed ramp generator; +#X text 178 2575 - measure logical time; +#X text 178 2599 - measure CPU time/usage; +#X text 178 2504 - message "delay line"; +#X text 178 2732 - compare numbers or symbols; +#X text 177 2987 - bound a number between two limits; +#X text 178 3695 - MIDI-style polyphonic voice allocator; +#X text 178 3855 - query for files or directories; +#X text 178 3878 - query you for the name of a file to create; +#X text 177 3903 - grab keyboard input; +#X text 174 4350 - audio ramp generator; +#X text 174 4398 - detect signal thresholds (schmitt trigger); +#X text 174 4447 - convert a signal to a number on demand; +#X text 174 4521 - output a bang after each DSP block; +#X text 174 4545 - get sample rate; +#X text 174 4569 - one-to-many nonlocal signal(s) connection; +#X text 174 4596 - summing signal bus and non-local connection; +#X text 174 4648 - record audio signals to a soundfile; +#X obj 46 4826 fft~; +#X obj 96 4827 ifft~; +#X text 175 4825 - forward and inverse complex FFT; +#X obj 46 4802 rfft~; +#X obj 96 4803 rifft~; +#X text 175 4801 - forward and inverse real FFT; +#X text 93 5006 - bound a signal between two limits; +#X text 174 5114 - MIDI pitch to Frequency in hertz for signals; +#X text 174 5140 - frequency in hertz to MIDI pitch for signals; +#X text 174 5164 - dB to linear "RMS" for signals; +#X text 174 5188 - linear "RMS" to dB for signals; +#X text 174 5212 - dB to power unit (square of "RMS") for signals; +#X text 174 5235 - power unit (square of "RMS") to dB for signals; +#X text 174 5351 - uniformly distributed white noise; +#X text 173 5424 - cosine wave oscillator; +#X text 173 5448 - 4-point interpolating wavetable oscillator; +#X text 173 5496 - write a signal in an array; +#X text 173 5520 - non-interpolating table lookup for signals; +#X text 173 5544 - 4-point-interpolating table lookup for signals; +#X text 173 5699 - voltage-controlled band/low-pass filter; +#X text 173 5725 - one-pole high pass filter; +#X text 173 5749 - one-pole low pass filter; +#X text 173 5774 - slew-limiting / low pass filter; +#X text 173 5799 - 2-pole band-pass filter; +#X text 173 5823 - raw biquad 2nd order filter; +#X text 173 5897 - real one-zero "reverse" filter; +#X text 173 6029 - writes a signal in a delay line; +#X text 173 6053 - read a signal from a delay line (no interpolation); +#X text 172 6079 - read from a delay line with 4-point interpolation; +#X text 172 6215 - set search path and/or libraries for the patch; +#X text 172 6190 - send a "bang" when loading the patch, f 48; +#X text 172 6239 - mechanism for saving the state of an abstraction; +#X text 173 6291 - get patch/window information; +#X text 175 6266 - make multiple copies of an abstraction; +#X text 188 1209 - create a subwindow with an array (rather deprecated \, check [array define] instead), f 42; +#X text 186 1542 - text-based sequencer (rather deprecated \, check [text sequence] instead), f 42; +#X text 173 6317 - create a subpatch; +#X text 174 6346 - add an inlet to a subpatch/abstraction, f 48; +#X text 174 6370 - add an outlet to a pd subpatch/abstraction, f 48; +#X text 175 6663 - draw array in a scalar; +#X text 238 6588 - draw polygon shapes in a scalar; +#X text 209 6612 - draw shapes with bezier curve in a scalar; +#X text 175 6719 - store the location of a scalar in a list; +#X text 175 6791 - get pointer to a Data Structure's array element; +#X text 175 6815 - get the size of a Data Structure's array; +#X text 175 6839 - change the size of a Data Structure's array; +#X text 175 7011 - attack detection and spectral envelope measurement; +#X text 175 6986 - signal analyzer (pitch/amplitude and more); +#X text 175 7036 - search for a best match to an incoming list; +#X text 175 7060 - hilbert transform; +#X text 175 7089 - complex amplitude modulator (frequency shifter); +#X text 175 7118 - phase generator for looping samplers; +#X text 175 7144 - shift block elements left or right; +#X text 175 7168 - run a Pd sub-proccess (for multiprocessing); +#X text 175 7195 - standard output for sub-process; +#X text 175 7256 - Moog analog lowpass resonant filter simulation; +#X text 175 7293 - simple stereo output GUI abstraction; +#X text 223 7314 (used in the documentation); +#X text 175 7429 - FFT frequency estimate (use [sigmund~] now); +#X text 173 7459 - pitch/peaks estimate (use [sigmund~] now); +#X obj 49 7578 %; +#X text 177 7576 (use [mod] instead); +#X text 20 2453 ----------------------------- TIME -----------------------------------------, f 76; +#X text 20 2703 ------------------------------ LOGIC ---------------------------------------, f 76; +#X text 14 2928 ------------------------------- MATH ----------------------------------------, f 77; +#X text 13 3502 ------------------------------ MIDI/OSC -------------------------------------, f 77; +#X obj 50 7490 template; +#X text 14 338 ------------------------- GENERAL DATA MANAGEMENT ----------------------------, f 78; +#X text 251 3093 - other binary operators; +#X obj 384 139 pd-messages; +#X text 104 61 This file contains a list of built-in objects in Pd. Right-click (or control-click on a Macintosh) on any object to get its "help window"., f 54; +#X text 104 113 But first \, we here present a help file with messages you can send to Pd or canvas windows., f 54; +#X text 230 3176 - trigonometric functions; +#X text 300 3047 - binary (two-input) operators; +#X text 182 3140 - unary (one-input) operators; +#X text 202 4952 - unary (one-input) signal operators; +#X text 202 4891 - binary (two-input) signal operators; +#X obj 163 2356 file isabsolute; +#X obj 56 2356 file normalize; +#X obj 55 2049 file cwd; +#X text 185 2048 - get/set the current working directory; +#X obj 55 2075 file patchpath; +#X text 185 2074 - get path relative to the patch; +#X text -3 4771 ------------------------------- SIGNAL MATH ---------------------------------, f 77; +#X text 175 4849 - C-style expressions / filter expressions; From 1f8ba583a7d38deea8dba92ed6db1da747c777a5 Mon Sep 17 00:00:00 2001 From: porres Date: Tue, 4 Jul 2023 21:55:57 -0300 Subject: [PATCH 07/68] Update testtone.pd changed description because the way "preferences" works now has changed --- doc/7.stuff/tools/testtone.pd | 310 +++++++++++++++++----------------- 1 file changed, 155 insertions(+), 155 deletions(-) diff --git a/doc/7.stuff/tools/testtone.pd b/doc/7.stuff/tools/testtone.pd index 442fbe77..f4a2fcca 100644 --- a/doc/7.stuff/tools/testtone.pd +++ b/doc/7.stuff/tools/testtone.pd @@ -1,60 +1,60 @@ -#N canvas 363 29 678 610 12; -#X floatatom 102 544 5 0 0 0 - - - 0; -#X obj 83 488 notein; -#X obj 42 517 stripnote; -#X floatatom 42 544 4 0 0 0 - - - 0; -#X floatatom 185 517 3 0 0 0 - - - 0; -#X floatatom 155 517 3 0 0 0 - - - 0; -#X obj 169 488 ctlin; -#X obj 191 415 tgl 20 0 \$0-tone-ch1 \$0-tone-ch1 1 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 211 415 tgl 20 0 \$0-tone-ch2 \$0-tone-ch2 2 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 429 495 tgl 20 0 empty empty empty 20 8 0 8 #dfdfdf #000000 #000000 0 1; -#X obj 382 334 tgl 22 0 \$0-tone-hipass \$0-tone-hipass-set empty 23 8 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 273 415 tgl 20 0 \$0-tone-ch3 \$0-tone-ch3 3 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 293 415 tgl 20 0 \$0-tone-ch4 \$0-tone-ch4 4 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 355 415 tgl 20 0 \$0-tone-ch5 \$0-tone-ch5 5 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 375 415 tgl 20 0 \$0-tone-ch6 \$0-tone-ch6 6 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 367 384 bng 19 250 50 0 \$0-tone-all \$0-tone-all empty 21 9 0 12 #dfdfdf #000000 #000000; -#X obj 419 384 bng 19 250 50 0 \$0-tone-none \$0-tone-none empty 21 9 0 12 #dfdfdf #000000 #000000; -#X obj 41 167 vradio 19 1 0 2 \$0-tone-type \$0-tone-type-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; -#X obj 31 320 vradio 19 1 0 3 \$0-tone-radio \$0-tone-radio-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; -#X obj 437 415 tgl 20 0 \$0-tone-ch7 \$0-tone-ch7 7 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X obj 457 415 tgl 20 0 \$0-tone-ch8 \$0-tone-ch8 8 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X floatatom 31 388 4 0 100 1 - \$0-tone-level-set \$0-tone-level 16; -#X floatatom 40 216 5 0 136 1 - \$0-tone-pitch-set \$0-tone-pitch 0; -#X floatatom 40 247 6 0 20000 1 - \$0-tone-hz-set \$0-tone-hz 0; -#X text 27 138 TEST TONES; -#X obj 42 570 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X obj 155 544 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X obj 548 216 vradio 19 1 0 8 \$0-inch-sel \$0-inch-sel empty 0 -8 0 10 #dfdfdf #000000 #000000 0; -#X obj 574 216 vradio 19 1 0 8 \$0-outch-sel \$0-outch-sel empty 0 -8 0 10 #dfdfdf #000000 #000000 0; -#X floatatom 187 334 4 0 120 0 - \$0-input-monitor-gain-set \$0-input-monitor-gain 16; -#X text 440 385 NONE; -#X text 388 385 ALL; -#X text 64 167 Noise; -#X text 63 188 Tone; -#X text 595 217 01-08; -#X text 546 180 Channel assign:, f 7; -#X text 548 371 In; -#X text 572 371 Out; -#X text 80 223 Pitch; -#X text 81 211 MIDI; -#X text 86 248 Hertz; -#X obj 173 174 vu 19 120 \$0-vu1 empty -1 -10 0 12 #404040 #000000 0 0; -#X obj 194 174 vu 19 120 \$0-vu2 empty -1 -10 0 10 #404040 #000000 1 0; -#X obj 255 174 vu 19 120 \$0-vu3 empty -1 -10 0 12 #404040 #000000 0 0; -#X obj 276 174 vu 19 120 \$0-vu4 empty -1 -10 0 10 #404040 #000000 1 0; -#X obj 337 174 vu 19 120 \$0-vu5 empty -1 -10 0 12 #404040 #000000 0 0; -#X obj 358 174 vu 19 120 \$0-vu6 empty -1 -10 0 10 #404040 #000000 1 0; -#X obj 419 174 vu 19 120 \$0-vu7 empty -1 -10 0 12 #404040 #000000 0 0; -#X obj 440 174 vu 19 120 \$0-vu8 empty -1 -10 0 10 #404040 #000000 1 0; -#X text 495 424 |; -#X text 151 425 |; -#X text 495 137 |; -#X text 495 149 |; -#X text 151 137 |; -#X text 151 149 |; -#X text 477 384 ---; +#N canvas 363 29 678 622 12; +#X floatatom 102 558 5 0 0 0 - - - 0; +#X obj 83 502 notein; +#X obj 42 531 stripnote; +#X floatatom 42 558 4 0 0 0 - - - 0; +#X floatatom 185 531 3 0 0 0 - - - 0; +#X floatatom 155 531 3 0 0 0 - - - 0; +#X obj 169 502 ctlin; +#X obj 191 420 tgl 20 0 \$0-tone-ch1 \$0-tone-ch1 1 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 211 420 tgl 20 0 \$0-tone-ch2 \$0-tone-ch2 2 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 429 509 tgl 20 0 empty empty empty 20 8 0 8 #dfdfdf #000000 #000000 0 1; +#X obj 382 339 tgl 22 0 \$0-tone-hipass \$0-tone-hipass-set empty 23 8 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 273 420 tgl 20 0 \$0-tone-ch3 \$0-tone-ch3 3 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 293 420 tgl 20 0 \$0-tone-ch4 \$0-tone-ch4 4 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 355 420 tgl 20 0 \$0-tone-ch5 \$0-tone-ch5 5 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 375 420 tgl 20 0 \$0-tone-ch6 \$0-tone-ch6 6 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 367 389 bng 19 250 50 0 \$0-tone-all \$0-tone-all empty 21 9 0 12 #dfdfdf #000000 #000000; +#X obj 419 389 bng 19 250 50 0 \$0-tone-none \$0-tone-none empty 21 9 0 12 #dfdfdf #000000 #000000; +#X obj 41 172 vradio 19 1 0 2 \$0-tone-type \$0-tone-type-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; +#X obj 31 325 vradio 19 1 0 3 \$0-tone-radio \$0-tone-radio-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; +#X obj 437 420 tgl 20 0 \$0-tone-ch7 \$0-tone-ch7 7 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 457 420 tgl 20 0 \$0-tone-ch8 \$0-tone-ch8 8 5 30 0 12 #dfdfdf #000000 #000000 0 1; +#X floatatom 31 393 4 0 100 1 - \$0-tone-level-set \$0-tone-level 16; +#X floatatom 40 221 5 0 136 1 - \$0-tone-pitch-set \$0-tone-pitch 0; +#X floatatom 40 252 6 0 20000 1 - \$0-tone-hz-set \$0-tone-hz 0; +#X text 27 143 TEST TONES; +#X obj 42 584 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 155 558 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 548 221 vradio 19 1 0 8 \$0-inch-sel \$0-inch-sel empty 0 -8 0 10 #dfdfdf #000000 #000000 0; +#X obj 574 221 vradio 19 1 0 8 \$0-outch-sel \$0-outch-sel empty 0 -8 0 10 #dfdfdf #000000 #000000 0; +#X floatatom 187 339 4 0 120 0 - \$0-input-monitor-gain-set \$0-input-monitor-gain 16; +#X text 440 390 NONE; +#X text 388 390 ALL; +#X text 64 172 Noise; +#X text 63 193 Tone; +#X text 595 222 01-08; +#X text 546 185 Channel assign:, f 7; +#X text 548 376 In; +#X text 572 376 Out; +#X text 80 228 Pitch; +#X text 81 216 MIDI; +#X text 86 253 Hertz; +#X obj 173 179 vu 19 120 \$0-vu1 empty -1 -10 0 12 #404040 #000000 0 0; +#X obj 194 179 vu 19 120 \$0-vu2 empty -1 -10 0 10 #404040 #000000 1 0; +#X obj 255 179 vu 19 120 \$0-vu3 empty -1 -10 0 12 #404040 #000000 0 0; +#X obj 276 179 vu 19 120 \$0-vu4 empty -1 -10 0 10 #404040 #000000 1 0; +#X obj 337 179 vu 19 120 \$0-vu5 empty -1 -10 0 12 #404040 #000000 0 0; +#X obj 358 179 vu 19 120 \$0-vu6 empty -1 -10 0 10 #404040 #000000 1 0; +#X obj 419 179 vu 19 120 \$0-vu7 empty -1 -10 0 12 #404040 #000000 0 0; +#X obj 440 179 vu 19 120 \$0-vu8 empty -1 -10 0 10 #404040 #000000 1 0; +#X text 495 429 |; +#X text 151 430 |; +#X text 495 142 |; +#X text 495 154 |; +#X text 151 142 |; +#X text 151 154 |; +#X text 477 389 ---; #N canvas 670 117 256 227 guts 0; #N canvas 762 44 420 641 tone-generator 0; #X obj 52 195 osc~; @@ -753,25 +753,25 @@ #X connect 19 0 14 0; #X connect 20 0 9 0; #X restore 94 164 pd +tests; -#X restore 580 415 pd guts; -#X text 154 384 ---- AUDIO OUTPUT ON/OFF ----; -#X text 155 132 -------------- AUDIO INPUT MONITOR --------------; -#X text 495 160 |; -#X text 495 172 |; -#X text 151 160 |; -#X text 151 172 |; -#X text 495 184 |; -#X text 151 184 |; -#X text 495 412 |; -#X text 151 413 |; -#X text 495 400 |; -#X text 151 401 |; -#X text 495 388 |; -#X text 151 389 |; -#X obj 232 488 midiin; -#X text 69 571 note on; -#X text 180 547 control in; -#X floatatom 232 516 4 0 0 0 - - - 0; +#X restore 580 420 pd guts; +#X text 154 389 ---- AUDIO OUTPUT ON/OFF ----; +#X text 155 137 -------------- AUDIO INPUT MONITOR --------------; +#X text 495 165 |; +#X text 495 177 |; +#X text 151 165 |; +#X text 151 177 |; +#X text 495 189 |; +#X text 151 189 |; +#X text 495 417 |; +#X text 151 418 |; +#X text 495 405 |; +#X text 151 406 |; +#X text 495 393 |; +#X text 151 394 |; +#X obj 232 502 midiin; +#X text 69 585 note on; +#X text 180 561 control in; +#X floatatom 232 530 4 0 0 0 - - - 0; #N canvas 587 106 553 387 note-out 0; #X obj 81 111 inlet; #X obj 271 311 noteout; @@ -794,58 +794,58 @@ #X connect 9 0 7 2; #X connect 10 0 6 0; #X connect 11 0 7 0; -#X restore 429 522 pd note-out; -#X text 353 488 Generate random note out messages, f 9; -#X text 453 495 ON/OFF; -#X obj 530 569 ctlout; -#X text 562 490 value; -#X text 595 543 channel; -#X floatatom 549 516 4 0 127 0 - - - 0; -#X floatatom 530 489 4 0 127 0 - - - 0; -#X floatatom 569 542 0 1 64 0 - - - 0; -#X text 580 517 control #; -#X text 352 569 control out messages -->; -#X text 91 12 Welcome to Pd ("Pure Data"). Pd is Free software under the BSD license (see LICENSE.txt in the distribution for details). For help \, please go to the "Help" menu., f 71; -#X text 176 152 1; -#X text 196 152 2; -#X text 259 152 3; -#X text 279 152 4; -#X text 341 152 5; -#X text 361 152 6; -#X text 423 152 7; -#X text 443 152 8; -#X text 495 196 |; -#X text 495 208 |; -#X text 495 220 |; -#X text 151 196 |; -#X text 151 208 |; -#X text 151 220 |; -#X text 495 232 |; -#X text 495 243 |; -#X text 495 255 |; -#X text 495 267 |; -#X text 495 279 |; -#X text 495 291 |; -#X text 495 303 |; -#X text 151 232 |; -#X text 151 243 |; -#X text 151 255 |; -#X text 151 267 |; -#X text 151 279 |; -#X text 151 291 |; -#X text 151 303 |; -#X text 495 315 |; -#X text 495 327 |; -#X text 495 339 |; -#X text 495 351 |; -#X text 495 363 |; -#X text 151 315 |; -#X text 151 327 |; -#X text 151 339 |; -#X text 151 351 |; -#X text 151 363 |; -#X text 13 457 ---------- MIDI INPUT MONITOR ----------; -#X text 336 457 -------------- MIDI OUTPUT TEST --------------; +#X restore 429 536 pd note-out; +#X text 353 502 Generate random note out messages, f 9; +#X text 453 509 ON/OFF; +#X obj 530 583 ctlout; +#X text 562 504 value; +#X text 595 557 channel; +#X floatatom 549 530 4 0 127 0 - - - 0; +#X floatatom 530 503 4 0 127 0 - - - 0; +#X floatatom 569 556 0 1 64 0 - - - 0; +#X text 580 531 control #; +#X text 352 583 control out messages -->; +#X text 91 10 Welcome to Pd ("Pure Data"). Pd is Free software under the BSD license (see LICENSE.txt in the distribution for details). For help \, please go to the "Help" menu., f 74; +#X text 176 157 1; +#X text 196 157 2; +#X text 259 157 3; +#X text 279 157 4; +#X text 341 157 5; +#X text 361 157 6; +#X text 423 157 7; +#X text 443 157 8; +#X text 495 201 |; +#X text 495 213 |; +#X text 495 225 |; +#X text 151 201 |; +#X text 151 213 |; +#X text 151 225 |; +#X text 495 237 |; +#X text 495 248 |; +#X text 495 260 |; +#X text 495 272 |; +#X text 495 284 |; +#X text 495 296 |; +#X text 495 308 |; +#X text 151 237 |; +#X text 151 248 |; +#X text 151 260 |; +#X text 151 272 |; +#X text 151 284 |; +#X text 151 296 |; +#X text 151 308 |; +#X text 495 320 |; +#X text 495 332 |; +#X text 495 344 |; +#X text 495 356 |; +#X text 495 368 |; +#X text 151 320 |; +#X text 151 332 |; +#X text 151 344 |; +#X text 151 356 |; +#X text 151 368 |; +#X text 13 467 ---------- MIDI INPUT MONITOR ----------; +#X text 336 467 -------------- MIDI OUTPUT TEST --------------; #N canvas 441 116 893 512 instructions 0; #X text 44 236 A toggle sets a highpass filter for the input channels with a cuttof frequency of 5Hz. This is useful to filter DC offsets., f 61; #X text 23 16 Audio Input:; @@ -863,33 +863,33 @@ #X text 44 123 The VU meters show us the audio input level of each input channel. Number boxes below show the RMS dB level in the range from 0 to 100 dB as given by the [env~] object., f 61; #X text 47 412 You can use radio buttons to the right to reassing input and output channels into different groups. By default input and output channels are assigned from 1 to 8 \, but you can test other groups of 8 channels (up to the range from 57 to 64).; #X text 521 177 The output level of test tones can be controlled by the number box below \, within the 0 to 100 dB range. You can use the radio button above it to set to three presets \, 80dB \, 60dB or "off" (which is '0dB' and the default setting). A vu meter is there to display the output level of the test tones., f 48; -#X restore 539 141 pd instructions; -#X text 91 64 This window is used to test audio and MIDI connections. You can go to Preferences->Audio and Preferences->MIDI to set your Input/output devices. For more details \, see [pd instructions]., f 71; -#X floatatom 170 300 3 0 0 0 - \$0-ch1 \$0-ch1-set 0; -#X floatatom 193 300 3 0 0 0 - \$0-ch2 \$0-ch2-set 0; -#X floatatom 252 300 3 0 0 0 - \$0-ch3 \$0-ch3-set 0; -#X floatatom 275 300 3 0 0 0 - \$0-ch4 \$0-ch4-set 0; -#X floatatom 334 300 3 0 0 0 - \$0-ch5 \$0-ch5-set 0; -#X floatatom 357 300 3 0 0 0 - \$0-ch6 \$0-ch6-set 0; -#X floatatom 416 300 3 0 0 0 - \$0-ch7 \$0-ch7-set 0; -#X floatatom 439 300 3 0 0 0 - \$0-ch8 \$0-ch8-set 0; -#X text 236 336 <-- Input monitor gain (0-120 dB), f 17; -#X text 408 336 <-- Input highpass, f 9; -#X text 263 517 (raw); -#X text 21 289 TEST GAIN (dB); -#X text 52 320 80; -#X text 52 339 60; -#X obj 99 317 vu 22 120 \$0-test-vu empty -1 -10 0 12 #404040 #000000 0 0; -#X text 26 417 (0-100); -#X text 41 435 dB; -#X text 52 360 Off; -#X text 595 236 09-16; -#X text 595 255 17-24; -#X text 595 274 25-32; -#X text 595 292 33-40; -#X text 595 312 41-48; -#X text 595 331 49-56; -#X text 595 350 57-64; +#X restore 539 146 pd instructions; +#X floatatom 170 305 3 0 0 0 - \$0-ch1 \$0-ch1-set 0; +#X floatatom 193 305 3 0 0 0 - \$0-ch2 \$0-ch2-set 0; +#X floatatom 252 305 3 0 0 0 - \$0-ch3 \$0-ch3-set 0; +#X floatatom 275 305 3 0 0 0 - \$0-ch4 \$0-ch4-set 0; +#X floatatom 334 305 3 0 0 0 - \$0-ch5 \$0-ch5-set 0; +#X floatatom 357 305 3 0 0 0 - \$0-ch6 \$0-ch6-set 0; +#X floatatom 416 305 3 0 0 0 - \$0-ch7 \$0-ch7-set 0; +#X floatatom 439 305 3 0 0 0 - \$0-ch8 \$0-ch8-set 0; +#X text 236 341 <-- Input monitor gain (0-120 dB), f 17; +#X text 408 341 <-- Input highpass, f 9; +#X text 263 531 (raw); +#X text 21 294 TEST GAIN (dB); +#X text 52 325 80; +#X text 52 344 60; +#X obj 99 322 vu 22 120 \$0-test-vu empty -1 -10 0 12 #404040 #000000 0 0; +#X text 26 422 (0-100); +#X text 41 440 dB; +#X text 52 365 Off; +#X text 595 241 09-16; +#X text 595 260 17-24; +#X text 595 279 25-32; +#X text 595 297 33-40; +#X text 595 317 41-48; +#X text 595 336 49-56; +#X text 595 355 57-64; +#X text 91 61 This window is used to test audio and MIDI connections. You can go to "Preferences -> Edit Preferences" to configure "Audio" and "MIDI" settings to choose your Input/output devices. For more details on how this patch works \, see [pd instructions]., f 74; #X connect 1 0 2 0; #X connect 1 1 2 1; #X connect 2 0 3 0; From 983800c4b64492324c93b03bf8685d6196a1dd0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Wed, 5 Jul 2023 10:44:57 +0200 Subject: [PATCH 08/68] Add missing sys_gui_midipreferences() to libpd as a no-op Closes: https://github.com/pure-data/pure-data/issues/2046 --- src/s_libpdmidi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/s_libpdmidi.c b/src/s_libpdmidi.c index 5e585ca4..ddac9090 100644 --- a/src/s_libpdmidi.c +++ b/src/s_libpdmidi.c @@ -71,4 +71,6 @@ void glob_midi_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv) {} int sys_mididevnametonumber(int output, const char *name) { return 0; } void sys_mididevnumbertoname(int output, int devno, char *name, int namesize) {} void sys_set_midi_api(int api) {} +void sys_gui_midipreferences(void) {} + int sys_midiapi; From ca7ad6f9e6cac084d595c65ae7e340fe129c1e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Wed, 5 Jul 2023 10:54:30 +0200 Subject: [PATCH 09/68] adc~: Properly allocate multichannel vectors Closes: https://github.com/pure-data/pure-data/issues/2045 --- src/d_dac.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/d_dac.c b/src/d_dac.c index aecff4b6..0f0797f0 100644 --- a/src/d_dac.c +++ b/src/d_dac.c @@ -118,7 +118,7 @@ static void *adc_new(t_symbol *s, int argc, t_atom *argv) x->x_n = 2; if ((firstchan = atom_getfloatarg(2, argc, argv)) < 1) firstchan = 1; - x->x_vec = (int *)getbytes(argc * sizeof(*x->x_vec)); + x->x_vec = (int *)getbytes(x->x_n * sizeof(*x->x_vec)); for (i = 0; i < x->x_n; i++) x->x_vec[i] = firstchan+i; outlet_new(&x->x_obj, &s_signal); @@ -202,4 +202,3 @@ void d_dac_setup(void) dac_setup(); adc_setup(); } - From 51dbce927d17bcfa3d3fb7287405c51da9185edc Mon Sep 17 00:00:00 2001 From: Christof Ressi Date: Wed, 5 Jul 2023 13:25:37 +0200 Subject: [PATCH 10/68] adc~: both arguments for the "-m" flag are supposed to be optional with the current code, [adc~ -m] would silently create the single-channel version. --- src/d_dac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_dac.c b/src/d_dac.c index 0f0797f0..593b93bb 100644 --- a/src/d_dac.c +++ b/src/d_dac.c @@ -110,7 +110,7 @@ static void *adc_new(t_symbol *s, int argc, t_atom *argv) SETFLOAT(&defarg[0], 1); SETFLOAT(&defarg[1], 2); } - if (argc >= 2 && argv[0].a_type == A_SYMBOL && + if (argc > 0 && argv[0].a_type == A_SYMBOL && !strcmp(argv[0].a_w.w_symbol->s_name, "-m")) { /* multichannel version: -m [nchans] [start channel] */ x->x_multi = 1; From 34ce94fec936f8b9af603935065f6cfa98d0fd0b Mon Sep 17 00:00:00 2001 From: porres Date: Wed, 5 Jul 2023 19:30:17 -0300 Subject: [PATCH 11/68] add new [file] methods to the release notes --- doc/1.manual/x5.htm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm index 5fe57214..2aeaab7f 100644 --- a/doc/1.manual/x5.htm +++ b/doc/1.manual/x5.htm @@ -62,6 +62,9 @@

5.1. release notes

The [lop~] object can now also take a signal to set rolloff frequency, but the same slightly faster algorithm is used if you have a scalar input instead. +

There are new methods for the [file] object by IOhannes, namely "cwd", "patchpath", + "normalize" and "isabsolute". +

The 64-bit windows build uses the lower-latency WASAPI audio system in place of the older MMIO. This therefore only runs on Windows 7 and newer. The 32-bit version can still run all the way back to Windows XP. From e7b9bcfb92c7799701acc29b5c53452ab332e478 Mon Sep 17 00:00:00 2001 From: Christof Ressi Date: Thu, 6 Jul 2023 23:11:01 +0200 Subject: [PATCH 12/68] fix typos in log~ and pow~ --- src/d_arithmetic.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/d_arithmetic.c b/src/d_arithmetic.c index f8bb7768..5fc522cf 100644 --- a/src/d_arithmetic.c +++ b/src/d_arithmetic.c @@ -933,7 +933,7 @@ typedef struct _scalarlog_tilde static void *log_tilde_new(t_symbol *s, int argc, t_atom *argv) { - if (argc > 1) post("-~: extra arguments ignored"); + if (argc > 1) post("log~: extra arguments ignored"); if (argc) { t_scalarlog_tilde *x = @@ -1033,7 +1033,7 @@ static void log_tilde_setup(void) CLASS_MAINSIGNALIN(log_tilde_class, t_log_tilde, x_f); class_addmethod(log_tilde_class, (t_method)log_tilde_dsp, gensym("dsp"), A_CANT, 0); class_sethelpsymbol(log_tilde_class, gensym("binops-tilde")); - scalarlog_tilde_class = class_new(gensym("-~"), 0, 0, + scalarlog_tilde_class = class_new(gensym("log~"), 0, 0, sizeof(t_scalarlog_tilde), CLASS_MULTICHANNEL, 0); CLASS_MAINSIGNALIN(scalarlog_tilde_class, t_scalarlog_tilde, x_f); class_addmethod(scalarlog_tilde_class, (t_method)scalarlog_tilde_dsp, @@ -1059,7 +1059,7 @@ typedef struct _scalarpow_tilde static void *pow_tilde_new(t_symbol *s, int argc, t_atom *argv) { - if (argc > 1) post("-~: extra arguments ignored"); + if (argc > 1) post("pow~: extra arguments ignored"); if (argc) { t_scalarpow_tilde *x = @@ -1150,7 +1150,7 @@ static void pow_tilde_setup(void) CLASS_MAINSIGNALIN(pow_tilde_class, t_pow_tilde, x_f); class_addmethod(pow_tilde_class, (t_method)pow_tilde_dsp, gensym("dsp"), A_CANT, 0); class_sethelpsymbol(pow_tilde_class, gensym("binops-tilde")); - scalarpow_tilde_class = class_new(gensym("-~"), 0, 0, + scalarpow_tilde_class = class_new(gensym("pow~"), 0, 0, sizeof(t_scalarpow_tilde), CLASS_MULTICHANNEL, 0); CLASS_MAINSIGNALIN(scalarpow_tilde_class, t_scalarpow_tilde, x_f); class_addmethod(scalarpow_tilde_class, (t_method)scalarpow_tilde_dsp, From 272c173bb94c1ddcd7657a48499ae3308f75dee6 Mon Sep 17 00:00:00 2001 From: Christof Ressi Date: Mon, 10 Jul 2023 02:23:07 +0200 Subject: [PATCH 13/68] sys_initsavepreferences(): remove previous search path entries from registry just as we do with audio/MIDI device entries --- src/s_file.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/s_file.c b/src/s_file.c index b5449a92..d42cb2fc 100644 --- a/src/s_file.c +++ b/src/s_file.c @@ -400,22 +400,28 @@ static void sys_initsavepreferences(void) { if (sys_prefsavefp) bug("sys_initsavepreferences"); - else /* delete audio and MIDI device keys */ + else /* delete previous audio/MIDI device and search path entries */ { int i, j; - char dev[MAXPDSTRING], devname[MAXPDSTRING]; + char buf[MAXPDSTRING], devname[MAXPDSTRING]; const char *key[4] = { "audioin", "audioout", "midiin", "midiout" }; int maxnum[4] = { MAXAUDIOINDEV, MAXAUDIOOUTDEV, MAXMIDIINDEV, MAXMIDIOUTDEV }; for (i = 0; i < 4; i++) { for (j = 0; j < maxnum[i]; j++) { - snprintf(dev, sizeof(dev), "%sdev%d", key[i], j + 1); + snprintf(buf, sizeof(buf), "%sdev%d", key[i], j + 1); snprintf(devname, sizeof(devname), "%sdevname%d", key[i], j + 1); - if (!sys_deletepreference(dev) || !sys_deletepreference(devname)) + if (!sys_deletepreference(buf) || !sys_deletepreference(devname)) break; } } + for (i = 0; ; i++) + { + snprintf(buf, sizeof(buf), "path%d", i + 1); + if (!sys_deletepreference(buf)) + break; + } } } From 4267a5b50c723e5796c4871a460b49eddc77364d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Wed, 19 Jul 2023 17:23:57 +0200 Subject: [PATCH 14/68] use helper-variable for the scrollbox box --- tcl/scrollbox.tcl | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/tcl/scrollbox.tcl b/tcl/scrollbox.tcl index 7746f7f9..114970f4 100644 --- a/tcl/scrollbox.tcl +++ b/tcl/scrollbox.tcl @@ -12,10 +12,11 @@ namespace eval scrollbox { array set ::scrollbox::entrytext {} proc ::scrollbox::get_curidx { mytoplevel } { - set idx [$mytoplevel.listbox.box index active] + set box $mytoplevel.listbox.box + set idx [$box index active] if {$idx < 0 || \ - $idx == [$mytoplevel.listbox.box index end]} { - return [expr {[$mytoplevel.listbox.box index end] + 1}] + $idx == [$box index end]} { + return [expr {[$box index end] + 1}] } return [expr $idx] } @@ -108,8 +109,9 @@ proc ::scrollbox::add_item { mytoplevel add_method } { } proc ::scrollbox::edit_item { mytoplevel edit_method } { - set idx [expr {[get_curidx $mytoplevel]}] - set initialValue [$mytoplevel.listbox.box get $idx] + set idx [get_curidx $mytoplevel] + set box $mytoplevel.listbox.box + set initialValue [$box get $idx] if {$initialValue != ""} { if { $edit_method == "" } { set dir [::scrollbox::my_edit $mytoplevel $initialValue ] @@ -118,13 +120,13 @@ proc ::scrollbox::edit_item { mytoplevel edit_method } { } if {$dir != ""} { - $mytoplevel.listbox.box delete $idx + $box delete $idx insert_item $mytoplevel $idx $dir } - $mytoplevel.listbox.box activate $idx - $mytoplevel.listbox.box selection clear 0 end - $mytoplevel.listbox.box selection set active - focus $mytoplevel.listbox.box + $box activate $idx + $box selection clear 0 end + $box selection set active + focus $box } } From e33c857f5bf86f93620ad6035cfc24c4b2f5c318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Wed, 19 Jul 2023 17:24:43 +0200 Subject: [PATCH 15/68] check if scrollbox exists, before modfying it Closes: https://github.com/pure-data/pure-data/issues/2044 --- tcl/scrollbox.tcl | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tcl/scrollbox.tcl b/tcl/scrollbox.tcl index 114970f4..44944a2c 100644 --- a/tcl/scrollbox.tcl +++ b/tcl/scrollbox.tcl @@ -13,6 +13,9 @@ array set ::scrollbox::entrytext {} proc ::scrollbox::get_curidx { mytoplevel } { set box $mytoplevel.listbox.box + if { ! [winfo exists $box] } { + return + } set idx [$box index active] if {$idx < 0 || \ $idx == [$box index end]} { @@ -105,11 +108,17 @@ proc ::scrollbox::add_item { mytoplevel add_method } { } else { set dir [$add_method] } - insert_item $mytoplevel [expr {[get_curidx $mytoplevel] + 1}] $dir + set idx [get_curidx $mytoplevel] + if { $idx ne {} } { + insert_item $mytoplevel [expr {[get_curidx $mytoplevel] + 1}] $dir + } } proc ::scrollbox::edit_item { mytoplevel edit_method } { set idx [get_curidx $mytoplevel] + if { $idx eq {} } { + return + } set box $mytoplevel.listbox.box set initialValue [$box get $idx] if {$initialValue != ""} { @@ -118,6 +127,9 @@ proc ::scrollbox::edit_item { mytoplevel edit_method } { } else { set dir [$edit_method $initialValue] } + if { ! [winfo exists $box ] } { + return + } if {$dir != ""} { $box delete $idx From fd2ddb0158abb934014077ed0ba548a33dd371c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Wed, 19 Jul 2023 17:25:28 +0200 Subject: [PATCH 16/68] do not pass dialog keypresses to Pd Closes: https://github.com/pure-data/pure-data/issues/2062 --- tcl/pd_bindings.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tcl/pd_bindings.tcl b/tcl/pd_bindings.tcl index de8f4b61..a24ec31d 100644 --- a/tcl/pd_bindings.tcl +++ b/tcl/pd_bindings.tcl @@ -155,9 +155,9 @@ proc ::pd_bindings::global_bindings {} { proc ::pd_bindings::dialog_bindings {mytoplevel dialogname} { variable modifier - bind $mytoplevel "dialog_${dialogname}::cancel $mytoplevel" - bind $mytoplevel "dialog_${dialogname}::ok $mytoplevel" - bind_capslock $mytoplevel $::modifier-Key w "dialog_${dialogname}::cancel $mytoplevel" + bind $mytoplevel "dialog_${dialogname}::cancel $mytoplevel; break" + bind $mytoplevel "dialog_${dialogname}::ok $mytoplevel; break" + bind_capslock $mytoplevel $::modifier-Key w "dialog_${dialogname}::cancel $mytoplevel; break" # these aren't supported in the dialog, so alert the user, then break so # that no other key bindings are run if {$mytoplevel ne ".find"} { From 24b8646de75ab2cfbb1039e984e825bebf623c3c Mon Sep 17 00:00:00 2001 From: porres Date: Wed, 19 Jul 2023 13:07:01 -0300 Subject: [PATCH 17/68] improve [sig~] and [vline~] I'm documenting that [sig~] can only convert one float per block and that [vline~] can be used for more sophisticated and precise conversions, but no examples were given, just new 'text' --- doc/5.reference/sig~-help.pd | 46 ++++++++-------- doc/5.reference/vline~-help.pd | 99 ++++++++++++++++++---------------- 2 files changed, 76 insertions(+), 69 deletions(-) diff --git a/doc/5.reference/sig~-help.pd b/doc/5.reference/sig~-help.pd index baf394b5..afdb3906 100644 --- a/doc/5.reference/sig~-help.pd +++ b/doc/5.reference/sig~-help.pd @@ -1,24 +1,24 @@ -#N canvas 512 61 490 403 12; -#X obj 90 280 snapshot~; -#X floatatom 90 314 6 0 0 0 - - - 0; +#N canvas 512 61 488 451 12; +#X obj 90 330 snapshot~; +#X floatatom 90 364 6 0 0 0 - - - 0; #X obj 27 13 sig~; -#X obj 90 151 sig~; -#X floatatom 90 119 6 0 0 0 - - - 0; -#X obj 112 226 metro 200; -#X text 266 366 updated for Pd version 0.33; -#X text 140 119 <= Scroll to set value, f 12; -#X obj 112 195 loadbang; -#X text 353 126 DSP on/off; -#X obj 206 240 sig~ 10; -#X obj 206 280 snapshot~; -#X floatatom 206 206 6 0 0 0 - - - 0; -#X floatatom 206 314 6 0 0 0 - - - 0; -#X text 271 232 An argument initializes the signal value., f 23; -#X msg 319 157 \; pd dsp \$1; -#X text 14 366 see also:; -#X obj 90 365 snapshot~; +#X obj 90 201 sig~; +#X floatatom 90 169 6 0 0 0 - - - 0; +#X obj 112 276 metro 200; +#X text 266 416 updated for Pd version 0.33; +#X text 140 169 <= Scroll to set value, f 12; +#X obj 112 245 loadbang; +#X text 353 176 DSP on/off; +#X obj 206 290 sig~ 10; +#X obj 206 330 snapshot~; +#X floatatom 206 256 6 0 0 0 - - - 0; +#X floatatom 206 364 6 0 0 0 - - - 0; +#X text 271 282 An argument initializes the signal value., f 23; +#X msg 319 207 \; pd dsp \$1; +#X text 14 416 see also:; +#X obj 90 415 snapshot~; #X obj 7 43 cnv 1 475 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X obj 6 351 cnv 1 475 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 6 401 cnv 1 475 1 empty empty empty 8 12 0 13 #000000 #000000 0; #N canvas 667 102 424 185 reference 0; #X obj 8 45 cnv 5 400 5 empty empty INLET: 8 18 0 13 #202020 #000000 0; #X obj 8 87 cnv 2 400 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0; @@ -28,12 +28,14 @@ #X text 67 13 - convert numbers to signals; #X text 109 58 float - number to convert to signal.; #X text 102 93 signal - converted signal.; -#X text 104 123 1) float - initially convertedd value.; +#X text 104 123 1) float - initially converted value.; #X restore 315 14 pd reference; #X text 409 14 <= click; #X text 63 13 - convert numbers to signals; -#X text 47 57 [sig~] object converts numbers to an audio signal. In this example \, the [snapshot~] converts back again., f 53; -#X obj 319 120 set-dsp-tgl; +#X text 47 57 [sig~] object converts numbers to an audio signal. In this example \, the [snapshot~] converts back again., f 54; +#X obj 319 170 set-dsp-tgl; +#X obj 169 415 vline~; +#X text 47 95 You can only convert one float per block \, for a more sophisticated convertion in between blocks you can use [vline~]; #X connect 0 0 1 0; #X connect 3 0 0 0; #X connect 4 0 3 0; diff --git a/doc/5.reference/vline~-help.pd b/doc/5.reference/vline~-help.pd index 64002e66..b6af1564 100644 --- a/doc/5.reference/vline~-help.pd +++ b/doc/5.reference/vline~-help.pd @@ -1,31 +1,29 @@ -#N canvas 504 23 619 719 12; -#X obj 68 620 snapshot~; -#X floatatom 68 646 5 0 0 0 - - - 0; -#X obj 83 587 metro 100; -#X msg 48 289 1 1000; -#X msg 97 422 stop; -#X msg 86 339 0; -#X text 20 690 see also:; -#X obj 96 691 line; -#X obj 142 691 line~; +#N canvas 403 23 616 705 12; +#X obj 98 605 snapshot~; +#X floatatom 98 635 8 0 0 0 - - - 0; +#X msg 78 344 1 1000; +#X msg 127 477 stop; +#X msg 116 394 0; +#X text 20 678 see also:; +#X obj 96 679 line; +#X obj 142 679 line~; #X obj 27 15 vline~; -#X text 91 15 - high-precision audio ramp generator; -#X obj 68 515 vline~; -#X text 103 286 ramp up; -#X msg 68 313 0 1000; -#X text 121 314 ramp down; -#X text 97 361 ramp up \, jump down \, ramp up again; -#X text 119 338 jump down; -#X msg 91 387 1 1000 \, 0 0 2000 \, 1 1000 3000; -#X text 309 380 note: times (2000 \, 3000) are cumulative \, not incremental., f 29; -#X text 403 689 updated for Pd version 0.47; -#X floatatom 107 488 5 0 0 0 - - - 0; -#X floatatom 103 454 5 0 0 0 - - - 0; -#X text 146 446 middle inlet sets next ramp time (cleared when ramp starts!), f 32; -#X text 149 484 right inlet sets next delay time (cleared when ramp starts!), f 32; -#X obj 83 552 loadbang; +#X text 84 15 - high-precision audio ramp generator; +#X obj 98 570 vline~; +#X text 133 341 ramp up; +#X msg 98 368 0 1000; +#X text 151 369 ramp down; +#X text 127 416 ramp up \, jump down \, ramp up again; +#X text 149 393 jump down; +#X msg 121 442 1 1000 \, 0 0 2000 \, 1 1000 3000; +#X text 339 435 note: times (2000 \, 3000) are cumulative \, not incremental., f 29; +#X text 403 677 updated for Pd version 0.47; +#X floatatom 137 543 5 0 0 0 - - - 0; +#X floatatom 133 509 5 0 0 0 - - - 0; +#X text 176 501 middle inlet sets next ramp time (cleared when ramp starts!), f 32; +#X text 179 539 right inlet sets next delay time (cleared when ramp starts!), f 32; #X obj 11 44 cnv 1 600 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X text 522 15 <= click; +#X text 526 14 <= click; #N canvas 708 145 583 306 reference 0; #X obj 9 42 cnv 5 550 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0; #X obj 9 205 cnv 2 550 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0; @@ -42,25 +40,32 @@ #X obj 9 164 cnv 1 550 1 empty empty 3rd: 8 12 0 13 #9f9f9f #000000 0; #X text 141 99 stop - stops the ramp.; #X text 133 173 float - sets delay time.; -#X restore 428 15 pd reference; -#X obj 11 681 cnv 1 600 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X text 29 53 The [vline~] object \, like [line~] \, generates linear ramps whose levels and timing are determined by messages you send it. It takes a target value \, a time interval in milliseconds and an initial delay (also in ms). Ramps may start and stop between audio samples \, in which case the output is interpolated accordingly., f 81; -#X text 29 119 A list up to three floats distributes the values over the inlets \, as usual in Pd. Note that the middle and right inlet (that sets the time and delay) do not remember old values (unlike other inlets in Pd). Thus \, if you send [vline~] a float without priorly specifying a ramp time and delay and sent \, it jumps immediately to the target value. In the same way \, a list of two values will not have a delay time if no delay time was priorly set in the right inlet., f 80; -#X text 29 214 Any number of future ramps may be scheduled and [vline~] will remember them and execute them in order. They must be specified in increasing order of initial delay however \, since a segment cancels all planned segments at any future time., f 80; -#X text 140 421 "stop" message freezes [vline~] at its current value; -#X text 259 584 !!! BUG: [vline~] objects inside reblocked subpatches can have slightly incorrect timing !!!, f 42; -#X msg 379 319 \; pd dsp \$1; -#X obj 379 284 set-dsp-tgl; -#X text 410 288 DSP on/off; +#X restore 432 14 pd reference; +#X obj 11 669 cnv 1 600 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X text 24 181 A list up to three floats distributes the values over the inlets \, as usual in Pd. Note that the middle and right inlet (that sets the time and delay) do not remember old values (unlike other inlets in Pd). Thus \, if you send [vline~] a float without priorly specifying a ramp time and delay and sent \, it jumps immediately to the target value. In the same way \, a list of two values will not have a delay time if no delay time was priorly set in the right inlet., f 81; +#X text 24 276 Any number of future ramps may be scheduled and [vline~] will remember them and execute them in order. They must be specified in increasing order of initial delay however \, since a segment cancels all planned segments at any future time., f 81; +#X text 170 476 "stop" message freezes [vline~] at its current value; +#X text 226 593 !!! BUG: [vline~] objects inside reblocked subpatches can have slightly incorrect timing !!!, f 42; +#X msg 424 376 \; pd dsp \$1; +#X obj 424 341 set-dsp-tgl; +#X text 455 345 DSP on/off; +#X obj 193 679 sig~; +#X obj 446 533 metro 100; +#X obj 446 507 loadbang; +#X obj 446 559 s bang; +#X obj 35 570 r bang; +#X text 24 53 The [vline~] object \, like [line~] \, generates linear ramps whose levels and timing are determined by messages you send it. It takes a target value \, a time interval in milliseconds and an initial delay (also in ms)., f 81; +#X text 24 102 Ramps may start and stop between blocks and even between audio samples (in which case the output is interpolated accordingly). This feature can also be used to convert floats to signals in between blocks in a more sohisticated manner than [sig~] \, where you can also convert more than one float to a signal within a block., f 81; #X connect 0 0 1 0; -#X connect 2 0 0 0; -#X connect 3 0 11 0; -#X connect 4 0 11 0; -#X connect 5 0 11 0; -#X connect 11 0 0 0; -#X connect 13 0 11 0; -#X connect 17 0 11 0; -#X connect 20 0 11 2; -#X connect 21 0 11 1; -#X connect 24 0 2 0; -#X connect 35 0 34 0; +#X connect 2 0 10 0; +#X connect 3 0 10 0; +#X connect 4 0 10 0; +#X connect 10 0 0 0; +#X connect 12 0 10 0; +#X connect 16 0 10 0; +#X connect 19 0 10 2; +#X connect 20 0 10 1; +#X connect 32 0 31 0; +#X connect 35 0 37 0; +#X connect 36 0 35 0; +#X connect 38 0 0 0; From aa0188ae645ee51809a0b166475a9cf1dabba6a8 Mon Sep 17 00:00:00 2001 From: porres Date: Wed, 19 Jul 2023 13:13:25 -0300 Subject: [PATCH 18/68] attempt to fix compilation error (trailing white space) --- doc/1.manual/x5.htm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm index 2aeaab7f..1bae55c9 100644 --- a/doc/1.manual/x5.htm +++ b/doc/1.manual/x5.htm @@ -62,8 +62,8 @@

5.1. release notes

The [lop~] object can now also take a signal to set rolloff frequency, but the same slightly faster algorithm is used if you have a scalar input instead. -

There are new methods for the [file] object by IOhannes, namely "cwd", "patchpath", - "normalize" and "isabsolute". +

There are new methods for the [file] object by IOhannes, namely "cwd", "patchpath", +"normalize" and "isabsolute".

The 64-bit windows build uses the lower-latency WASAPI audio system in place of the older MMIO. This therefore only runs on Windows 7 and newer. The 32-bit version From 2eb805cd80f4a18fd5adfb778e7adf71ad92c6c7 Mon Sep 17 00:00:00 2001 From: porres Date: Thu, 20 Jul 2023 13:08:25 -0300 Subject: [PATCH 19/68] Update binops-tilde-help.pd improve text according to suggestions from https://github.com/pure-data/pure-data/pull/2042/files/44faeedafb99f288765a226abfda170ffd8d59dc#r1269192005 --- doc/5.reference/binops-tilde-help.pd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/5.reference/binops-tilde-help.pd b/doc/5.reference/binops-tilde-help.pd index 3f4164a5..17d15722 100644 --- a/doc/5.reference/binops-tilde-help.pd +++ b/doc/5.reference/binops-tilde-help.pd @@ -131,7 +131,7 @@ #X obj 86 163 sig~ 2; #X obj 146 163 sig~ 5; #X text 128 255 value summed to all channels, f 16; -#X text 42 15 All of these objects work with multichannel signals. If both inputs have the same amoun of channels \, then operations are done at each corresponding channels. In case the number mismatch \, the input with less channels wrap around and copy the first channels until reaching the number of channels of the other input. This is specially useful to use a single channel value (or a float) to apply an operation to every channel in a multisignal connection., f 67; +#X text 37 13 All of these objects work with multichannel signals. If both inputs have the same amount of channels \, then operations are done at each corresponding channels. In case the numbers mismatch \, the input with less channels wraps around and copy the first channels until reaching the number of channels of the other input. This is especially useful when you have a single channel value (or a float) to apply an operation to every channel in a multisignal connection., f 69; #X connect 0 0 2 0; #X connect 1 0 2 1; #X connect 2 0 10 0; From 731e3bdbe6db6ebfe2b94e922649058f10bc8022 Mon Sep 17 00:00:00 2001 From: porres Date: Sat, 22 Jul 2023 12:38:15 -0300 Subject: [PATCH 20/68] Update G05.execution.order.pd fixed the description as it seemed wrong, now it is clearer that the "writer" and "reader" need to be in different subpatches. Before, it only mentioned delread~ or delread4~ --- doc/3.audio.examples/G05.execution.order.pd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/3.audio.examples/G05.execution.order.pd b/doc/3.audio.examples/G05.execution.order.pd index 921f2c6e..2a390540 100644 --- a/doc/3.audio.examples/G05.execution.order.pd +++ b/doc/3.audio.examples/G05.execution.order.pd @@ -1,8 +1,8 @@ -#N canvas 596 23 518 683 12; +#N canvas 509 23 518 683 12; #X declare -stdpath ./; #X floatatom 296 312 4 0 100 0 - - - 0; #X obj 74 471 +~; -#X text 45 51 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:, f 64; +#X text 45 46 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:, f 64; #X obj 109 557 *~; #X obj 109 523 -~; #N canvas 352 175 330 235 delay-writer 0; @@ -45,11 +45,11 @@ #X text 336 312 <= delay in samples; #X text 171 520 <= off to hear left-hand side \; on to hear right hand side.; #X obj 295 584 declare -stdpath ./; -#X text 54 19 ORDER OF EXECUTION OF DELWRITE~ AND DELREAD~/DELREAD4~; +#X text 69 16 ORDER OF EXECUTION OF DELWRITE~ AND DELREAD~/DELREAD4~; #X obj 296 428 delread4~ G05-d1; -#X text 45 118 To get them to go off in the correct order \, put the [delread~] and [delread4~] 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., f 64; #X text 263 629 updated for Pd version 0.52; #X text 45 238 You can use the same strategy to avoid an unwanted delay of one block in pairs of [send~]/[receive~] \, [tabsend~]/[tabreceive~] or [throw~]/[catch~] objects., f 64; +#X text 45 108 To get them to go off in the correct order \, put the [delwrite~] into a subptach \, then the [delread4~] and/or [delread4~] objects into another subpatch. The audio connections between these subpatches force the "reader" to be sorted after the "writer". DSP sorting in Pd follows the hierarchy of subpatches., f 64; #X connect 0 0 8 0; #X connect 1 0 4 1; #X connect 1 0 7 0; From f3a825a87bb9bd5620573b212715691b4105f5ad Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 31 Jul 2023 13:30:57 -0300 Subject: [PATCH 21/68] use "especially" instead of "specially" --- doc/5.reference/expr-help.pd | 4 +- doc/5.reference/float-help.pd | 16 +++--- doc/5.reference/int-help.pd | 18 +++---- doc/5.reference/message-help.pd | 14 +++--- doc/5.reference/send-receive-help.pd | 30 ++++++------ doc/5.reference/soundfiler-help.pd | 10 ++-- doc/5.reference/tabosc4~-help.pd | 20 ++++---- doc/5.reference/tabplay~-help.pd | 18 +++---- doc/5.reference/tabread-help.pd | 16 +++--- doc/5.reference/tabread4-help.pd | 14 +++--- doc/5.reference/tabread4~-help.pd | 22 ++++----- doc/5.reference/tabread~-help.pd | 20 ++++---- doc/5.reference/tabsend-receive~-help.pd | 16 +++--- doc/5.reference/tabwrite-help.pd | 62 ++++++++---------------- doc/5.reference/tabwrite~-help.pd | 12 ++--- doc/5.reference/value-help.pd | 20 ++++---- 16 files changed, 146 insertions(+), 166 deletions(-) diff --git a/doc/5.reference/expr-help.pd b/doc/5.reference/expr-help.pd index 0dbf3a4e..ef3e4a79 100644 --- a/doc/5.reference/expr-help.pd +++ b/doc/5.reference/expr-help.pd @@ -66,11 +66,11 @@ #X text 500 23 A solution for such array name issues is to send the table name as a symbol input. But this doesn't deal with variable names as they can't be loaded as symbols!; #X text 57 458 error; #X text 670 184 (works); -#X text 21 6 '\$0' - the patch ID number used to force locality in Pd - may be used in the definition local array names in [expr] \, [expr~] or [fexpr~]. You can also use it to set local variable names in value objects that are retrieved in [expr] \, [expr~] and [fexpr~]. This is specially useful in abstractions., f 62; #X text 21 89 But it is important to note the restrictions of adopting the C-style expression syntax \, where symbols cannot start with a number \, so '\$0x' or '\$0_x' are illegal as Pd turns '\$0' into a number and thus the object won't load giving a syntax error!, f 62; #X obj 590 323 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 538 127 try now -->; #X text 100 362 <-- try; +#X text 21 6 '\$0' - the patch ID number used to force locality in Pd - may be used in the definition local array names in [expr] \, [expr~] or [fexpr~]. You can also use it to set local variable names in value objects that are retrieved in [expr] \, [expr~] and [fexpr~]. This is especially useful in abstractions., f 62; #X connect 0 0 3 0; #X connect 1 0 0 1; #X connect 2 0 0 0; @@ -83,7 +83,7 @@ #X connect 13 0 10 0; #X connect 14 0 12 0; #X connect 14 0 13 0; -#X connect 25 0 11 0; +#X connect 24 0 11 0; #X restore 505 524 pd Dealing_with_"\$0"; #X text 28 607 see also:; #X obj 285 671 block~; diff --git a/doc/5.reference/float-help.pd b/doc/5.reference/float-help.pd index 63167e16..5b9fe4fd 100644 --- a/doc/5.reference/float-help.pd +++ b/doc/5.reference/float-help.pd @@ -16,7 +16,6 @@ #X obj 448 247 v float-help; #X obj 448 222 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #N canvas 738 162 565 399 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, specially in abstractions so each copy has local connections instead of global., f 67; #X floatatom 341 335 5 0 0 0 - - - 0; #X obj 149 295 float 1.5; #X msg 149 259 send \$1-x; @@ -32,15 +31,16 @@ #X obj 288 189 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 44 189 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 435 220 <- right click for properties, f 10; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, especially in abstractions so each copy has local connections instead of global., f 67; +#X connect 2 0 1 0; #X connect 3 0 2 0; -#X connect 4 0 3 0; -#X connect 5 0 6 0; -#X connect 8 0 2 0; -#X connect 9 0 8 0; -#X connect 10 0 1 0; +#X connect 4 0 5 0; +#X connect 7 0 1 0; +#X connect 8 0 7 0; +#X connect 9 0 0 0; +#X connect 11 0 3 0; #X connect 12 0 4 0; -#X connect 13 0 5 0; -#X connect 14 0 9 0; +#X connect 13 0 8 0; #X restore 393 444 pd Dealing_with_"\$0"; #X floatatom 448 308 5 0 0 0 - float-help - 0; #X obj 52 446 print float; diff --git a/doc/5.reference/int-help.pd b/doc/5.reference/int-help.pd index 4edcc5f0..8437c24b 100644 --- a/doc/5.reference/int-help.pd +++ b/doc/5.reference/int-help.pd @@ -16,7 +16,6 @@ #X obj 453 252 r int-help; #X obj 455 332 v int-help; #N canvas 771 162 565 399 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, specially in abstractions so each copy has local connections instead of global., f 67; #X floatatom 341 339 5 0 0 0 - - - 0; #X msg 149 257 send \$1-x; #X obj 149 225 f \$0; @@ -32,15 +31,16 @@ #X obj 149 190 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 288 190 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 44 190 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X connect 2 0 11 0; -#X connect 3 0 2 0; -#X connect 4 0 5 0; -#X connect 7 0 11 0; -#X connect 8 0 7 0; -#X connect 9 0 1 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, especially in abstractions so each copy has local connections instead of global., f 67; +#X connect 1 0 10 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 6 0 10 0; +#X connect 7 0 6 0; +#X connect 8 0 0 0; +#X connect 12 0 2 0; #X connect 13 0 3 0; -#X connect 14 0 4 0; -#X connect 15 0 8 0; +#X connect 14 0 7 0; #X restore 362 474 pd Dealing_with_"\$0"; #X text 38 80 The int object stores a number initialized by its creation argument \, which may be reset using its inlet and output by sending it the "bang" message. Sending a number sets a new value and outputs it. A non-integer input is truncated to an integer (a la Max) so the object can also be used to truncate values and convert from float to integers., f 72; #X obj 69 481 print float; diff --git a/doc/5.reference/message-help.pd b/doc/5.reference/message-help.pd index 8c33cde1..be53f6fb 100644 --- a/doc/5.reference/message-help.pd +++ b/doc/5.reference/message-help.pd @@ -119,8 +119,7 @@ #X connect 23 0 24 0; #X connect 25 0 26 0; #X restore 748 631 pd escaping-characters; -#N canvas 901 343 445 331 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 49; +#N canvas 896 198 445 331 Dealing_with_"\$0" 0; #X text 35 115 If you are using a message as a 'send' \, you need to load the '\$0' in an object \, since "\$0" doesn't work in messages., f 49; #X msg 203 246 \; \$1-x 15; #X obj 203 214 f \$0; @@ -131,11 +130,12 @@ #X obj 73 187 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 99 186 <-- click -->; #X obj 203 187 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X connect 3 0 2 0; -#X connect 4 0 5 0; -#X connect 6 0 7 0; -#X connect 8 0 6 0; -#X connect 10 0 3 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 49; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 5 0 6 0; +#X connect 7 0 5 0; +#X connect 9 0 2 0; #X restore 794 537 pd Dealing_with_"\$0"; #X text 59 679 see also:; #X msg 110 233 bang; diff --git a/doc/5.reference/send-receive-help.pd b/doc/5.reference/send-receive-help.pd index 8c295af6..98141941 100644 --- a/doc/5.reference/send-receive-help.pd +++ b/doc/5.reference/send-receive-help.pd @@ -1,4 +1,4 @@ -#N canvas 259 23 915 656 12; +#N canvas 324 23 915 656 12; #X obj 33 15 send; #X obj 26 120 send help-send1; #X obj 182 121 send help-send1; @@ -63,7 +63,6 @@ #X text 499 87 Interaction with other objects (check their help files):; #X msg 836 410 send x; #N canvas 452 151 914 439 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, specially in abstractions so each copy has local connections instead of global., f 67; #X obj 171 164 send \$0-x; #X obj 294 120 receive \$0-x; #X floatatom 294 161 5 0 0 0 - - - 0; @@ -95,22 +94,23 @@ #X obj 718 154 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 281 292 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 151 301 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X connect 2 0 3 0; -#X connect 4 0 1 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, especially in abstractions so each copy has local connections instead of global., f 67; +#X connect 1 0 2 0; +#X connect 3 0 0 0; +#X connect 6 0 4 0; #X connect 7 0 5 0; -#X connect 8 0 6 0; -#X connect 8 0 5 1; -#X connect 11 0 10 0; -#X connect 12 0 14 0; -#X connect 12 0 9 0; +#X connect 7 0 4 1; +#X connect 10 0 9 0; +#X connect 11 0 13 0; +#X connect 11 0 8 0; +#X connect 15 0 14 0; #X connect 16 0 15 0; #X connect 17 0 16 0; -#X connect 18 0 17 0; -#X connect 19 0 20 0; -#X connect 23 0 22 0; -#X connect 26 0 19 0; -#X connect 27 0 12 0; -#X connect 28 0 8 0; +#X connect 18 0 19 0; +#X connect 22 0 21 0; +#X connect 25 0 18 0; +#X connect 26 0 11 0; +#X connect 27 0 7 0; #X restore 335 570 pd Dealing_with_"\$0"; #X msg 223 619 message; #X obj 374 619 samplerate~; diff --git a/doc/5.reference/soundfiler-help.pd b/doc/5.reference/soundfiler-help.pd index b1d90eaa..9e56f6c3 100644 --- a/doc/5.reference/soundfiler-help.pd +++ b/doc/5.reference/soundfiler-help.pd @@ -36,7 +36,6 @@ #X msg 91 352 write /tmp/foo1.txt array2; #X text 314 374 "-ascii" set via file ext; #N canvas 791 194 575 345 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; #X obj 258 174 array define \$0-x; #X obj 153 202 f \$0; #X obj 153 263 soundfiler; @@ -45,10 +44,11 @@ #X obj 153 176 loadbang; #X text 36 86 You can use "\$0" in an array name in [array define] and if you need to set the array name in a message you can load '\$0' in a float object and send it to it., f 70; #X text 390 175 <- array with local name, f 13; -#X connect 2 0 5 0; -#X connect 3 0 4 0; -#X connect 5 0 3 0; -#X connect 6 0 2 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 1 0 4 0; +#X connect 2 0 3 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; #X restore 381 409 pd Dealing_with_"\$0"; #X text 219 400 open subpatch to see how to deal with '\$0', f 21; #X obj 95 542 array; diff --git a/doc/5.reference/tabosc4~-help.pd b/doc/5.reference/tabosc4~-help.pd index 28a3d4bd..3fd4c443 100644 --- a/doc/5.reference/tabosc4~-help.pd +++ b/doc/5.reference/tabosc4~-help.pd @@ -1,4 +1,4 @@ -#N canvas 551 23 665 661 12; +#N canvas 432 23 665 661 12; #X declare -stdpath ./; #X floatatom 81 298 5 0 0 0 - - - 0; #X obj 81 328 sig~ 100; @@ -22,8 +22,7 @@ #X msg 101 363 set wave1; #X msg 111 389 set wave2; #X obj 217 512 declare -stdpath ./; -#N canvas 792 194 574 404 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; +#N canvas 715 168 574 404 Dealing_with_"\$0" 0; #X text 394 262 <= array with local name, f 13; #X obj 262 261 array define \$0-x; #X obj 178 279 f \$0; @@ -38,14 +37,15 @@ #X text 240 185 You can also load '\$0' in a float object and send it to a message that works like a send to send messages to an array., f 40; #X text 158 151 click to set name; #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; -#X connect 3 0 4 0; -#X connect 6 0 11 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 2 0 3 0; +#X connect 5 0 10 0; +#X connect 6 0 5 0; #X connect 7 0 6 0; -#X connect 8 0 7 0; -#X connect 9 0 11 0; -#X connect 10 0 3 0; -#X connect 11 0 5 0; -#X connect 11 0 5 1; +#X connect 8 0 10 0; +#X connect 9 0 2 0; +#X connect 10 0 4 0; +#X connect 10 0 4 1; #X restore 435 536 pd Dealing_with_"\$0"; #X obj 451 360 array define wave1; #X obj 451 384 array define wave2; diff --git a/doc/5.reference/tabplay~-help.pd b/doc/5.reference/tabplay~-help.pd index 19134f55..85f93d7d 100644 --- a/doc/5.reference/tabplay~-help.pd +++ b/doc/5.reference/tabplay~-help.pd @@ -30,7 +30,6 @@ #X text 641 84 load table; #X obj 574 84 loadbang; #N canvas 642 190 593 443 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; #X obj 316 280 array define \$0-x; #X obj 227 300 f \$0; #X obj 62 290 output~; @@ -47,15 +46,16 @@ #X obj 62 189 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 100 152 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 448 281 <- array with local name, f 13; -#X connect 2 0 10 0; -#X connect 4 0 12 0; -#X connect 5 0 4 0; -#X connect 8 0 9 0; -#X connect 10 0 8 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 1 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 3 0; +#X connect 7 0 8 0; +#X connect 9 0 7 0; +#X connect 10 0 1 0; #X connect 11 0 2 0; -#X connect 12 0 3 0; -#X connect 14 0 12 0; -#X connect 15 0 5 0; +#X connect 13 0 11 0; +#X connect 14 0 4 0; #X restore 359 383 pd Dealing_with_"\$0"; #X text 197 374 open subpatch to see how to deal with '\$0', f 21; #X obj 399 474 array; diff --git a/doc/5.reference/tabread-help.pd b/doc/5.reference/tabread-help.pd index c80c9509..876583d6 100644 --- a/doc/5.reference/tabread-help.pd +++ b/doc/5.reference/tabread-help.pd @@ -22,8 +22,7 @@ #X msg 35 74 \; table-ex resize 10 \; table-ex bounds 0 10 10 0 \; table-ex xlabel -0.2 0 1 2 3 4 5 6 7 8 9 \; table-ex ylabel -0.3 0 1 2 3 4 5 6 7 8 9 10 \; table-ex 0 1 4 2 8 5 6 1 4 2 8; #X connect 0 0 1 0; #X restore 545 127 pd init-table; -#N canvas 978 194 593 412 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; +#N canvas 773 194 593 412 Dealing_with_"\$0" 0; #X text 435 291 <= array with local name, f 13; #X obj 221 291 f \$0; #X msg 120 210 set \$1; @@ -38,13 +37,14 @@ #X obj 221 265 loadbang; #X obj 69 251 tabread; #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; -#X connect 2 0 11 0; -#X connect 3 0 13 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 1 0 10 0; +#X connect 2 0 12 0; +#X connect 3 0 2 0; #X connect 4 0 3 0; -#X connect 5 0 4 0; -#X connect 8 0 13 0; -#X connect 12 0 2 0; -#X connect 13 0 9 0; +#X connect 7 0 12 0; +#X connect 11 0 1 0; +#X connect 12 0 8 0; #X restore 200 332 pd Dealing_with_"\$0"; #X text 38 323 open subpatch to see how to deal with '\$0', f 21; #X text 129 18 - non-interpolating table lookup; diff --git a/doc/5.reference/tabread4-help.pd b/doc/5.reference/tabread4-help.pd index 9f6b54d2..d3b069b6 100644 --- a/doc/5.reference/tabread4-help.pd +++ b/doc/5.reference/tabread4-help.pd @@ -27,7 +27,6 @@ #X restore 548 159 pd init-table; #X obj 73 169 hsl 162 19 1 8 0 0 empty empty empty -2 -8 0 10 #dfdfdf #000000 #000000 0 1; #N canvas 681 295 593 399 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; #X obj 221 291 f \$0; #X msg 121 210 set \$1; #X obj 121 184 symbol \$0-x; @@ -42,13 +41,14 @@ #X obj 221 264 loadbang; #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; #X text 462 275 <- array with local name, f 13; -#X connect 1 0 11 0; -#X connect 2 0 10 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 0 0 10 0; +#X connect 1 0 9 0; +#X connect 2 0 1 0; #X connect 3 0 2 0; -#X connect 4 0 3 0; -#X connect 7 0 10 0; -#X connect 10 0 9 0; -#X connect 12 0 1 0; +#X connect 6 0 9 0; +#X connect 9 0 8 0; +#X connect 11 0 0 0; #X restore 202 374 pd Dealing_with_"\$0"; #X text 40 365 open subpatch to see how to deal with '\$0', f 21; #X obj 45 16 tabread4; diff --git a/doc/5.reference/tabread4~-help.pd b/doc/5.reference/tabread4~-help.pd index 001233dd..e4c7e869 100644 --- a/doc/5.reference/tabread4~-help.pd +++ b/doc/5.reference/tabread4~-help.pd @@ -27,8 +27,7 @@ #X obj 36 313 tabread4~ table2-ex; #X msg 52 207 set table2-ex; #X text 124 16 - 4-point-interpolating table lookup for signals; -#N canvas 773 305 593 441 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; +#N canvas 721 150 593 441 Dealing_with_"\$0" 0; #X text 462 275 <= array with local name, f 13; #X obj 221 291 f \$0; #X msg 121 210 set \$1; @@ -46,16 +45,17 @@ #X floatatom 67 371 6 0 0 0 - - - 0; #X obj 86 289 loadbang; #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; -#X connect 2 0 10 0; -#X connect 3 0 12 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 1 0 9 0; +#X connect 2 0 11 0; +#X connect 3 0 2 0; #X connect 4 0 3 0; -#X connect 5 0 4 0; -#X connect 8 0 12 0; -#X connect 11 0 2 0; -#X connect 12 0 13 0; -#X connect 13 0 15 0; -#X connect 14 0 13 0; -#X connect 16 0 14 0; +#X connect 7 0 11 0; +#X connect 10 0 1 0; +#X connect 11 0 12 0; +#X connect 12 0 14 0; +#X connect 13 0 12 0; +#X connect 15 0 13 0; #X restore 576 422 pd Dealing_with_"\$0"; #X obj 39 111 hsl 162 19 1 8 0 0 empty empty empty -2 -8 0 10 #dfdfdf #000000 #000000 0 1; #N canvas 750 87 575 293 reference 0; diff --git a/doc/5.reference/tabread~-help.pd b/doc/5.reference/tabread~-help.pd index a2ca3cc9..aa172aff 100644 --- a/doc/5.reference/tabread~-help.pd +++ b/doc/5.reference/tabread~-help.pd @@ -29,7 +29,6 @@ #X restore 670 123 pd init-table; #X text 116 16 - non-interpolating table lookup for signals; #N canvas 711 190 593 412 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; #X obj 221 291 f \$0; #X msg 118 210 set \$1; #X obj 118 184 symbol \$0-x; @@ -47,16 +46,17 @@ #X obj 86 288 loadbang; #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; #X text 462 275 <- array with local name, f 13; -#X connect 1 0 9 0; -#X connect 2 0 11 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 0 0 8 0; +#X connect 1 0 10 0; +#X connect 2 0 1 0; #X connect 3 0 2 0; -#X connect 4 0 3 0; -#X connect 7 0 11 0; -#X connect 10 0 1 0; -#X connect 11 0 12 0; -#X connect 12 0 14 0; -#X connect 13 0 12 0; -#X connect 15 0 13 0; +#X connect 6 0 10 0; +#X connect 9 0 0 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 12 0 11 0; +#X connect 14 0 12 0; #X restore 619 366 pd Dealing_with_"\$0"; #X text 613 332 open subpatch to see how to deal with '\$0', f 22; #N canvas 698 164 581 232 reference 0; diff --git a/doc/5.reference/tabsend-receive~-help.pd b/doc/5.reference/tabsend-receive~-help.pd index 5ceab18d..e588dc07 100644 --- a/doc/5.reference/tabsend-receive~-help.pd +++ b/doc/5.reference/tabsend-receive~-help.pd @@ -28,7 +28,6 @@ #X obj 64 411 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 277 509 tabwrite~; #N canvas 647 144 569 384 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; #X msg 167 212 set \$1; #X obj 167 186 symbol \$0-x; #X text 189 159 click to set name; @@ -40,13 +39,14 @@ #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; #X obj 167 159 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 183 304 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X connect 1 0 5 0; -#X connect 1 0 7 0; -#X connect 2 0 1 0; -#X connect 6 0 5 0; -#X connect 7 0 8 0; -#X connect 10 0 2 0; -#X connect 11 0 8 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 0 0 4 0; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 9 0 1 0; +#X connect 10 0 7 0; #X restore 483 453 pd Dealing_with_"\$0"; #X text 479 415 open subpatch to see how to deal with '\$0', f 21; #X obj 8 80 cnv 1 700 1 empty empty empty 8 12 0 13 #000000 #000000 0; diff --git a/doc/5.reference/tabwrite-help.pd b/doc/5.reference/tabwrite-help.pd index 5efafa8c..1e65db63 100644 --- a/doc/5.reference/tabwrite-help.pd +++ b/doc/5.reference/tabwrite-help.pd @@ -1,4 +1,4 @@ -#N canvas 369 29 666 457 12; +#N canvas 389 50 666 457 12; #X obj 26 22 tabwrite; #X floatatom 28 136 4 0 10 0 - - - 0; #N canvas 0 22 450 278 (subpatch) 0; @@ -12,55 +12,42 @@ #X text 164 170 change array name; #X text 457 420 updated for Pd version 0.33; #X text 98 22 - write numbers to a table; -#X text 66 204 right inlet selects x value (indexed from 0). Note that -input values are clipped to the range from 0 to size-1, f 37; +#X text 66 204 right inlet selects x value (indexed from 0). Note that input values are clipped to the range from 0 to size-1, f 37; #X obj 152 420 tabread; #X obj 209 420 tabread4; #X obj 274 420 array; #N canvas 742 134 401 220 init-table 0; #X obj 35 42 loadbang; -#X msg 35 74 \; tabwrite-ex resize 10 \; tabwrite-ex bounds 0 10 10 -0 \; tabwrite-ex xlabel -0.2 0 1 2 3 4 5 6 7 8 9 \; tabwrite-ex ylabel --0.3 0 1 2 3 4 5 6 7 8 9 10 \; tabwrite-ex 0 1 4 2 8 5 6 1 4 2 8; +#X msg 35 74 \; tabwrite-ex resize 10 \; tabwrite-ex bounds 0 10 10 0 \; tabwrite-ex xlabel -0.2 0 1 2 3 4 5 6 7 8 9 \; tabwrite-ex ylabel -0.3 0 1 2 3 4 5 6 7 8 9 10 \; tabwrite-ex 0 1 4 2 8 5 6 1 4 2 8; #X connect 0 0 1 0; #X restore 521 112 pd init-table; #X obj 28 295 tabwrite tabwrite-ex; #X msg 49 170 set tabwrite-ex; -#N canvas 792 534 593 356 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in -Pd - is widely used in send/receive names as well as array names. This -is specially useful in abstractions so each copy has local names instead -of global., f 70; +#N canvas 632 117 593 356 Dealing_with_"\$0" 0; #X text 431 244 <= array with local name, f 13; #X msg 151 216 set \$1; #X obj 151 190 symbol \$0-x; -#X obj 151 167 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc -#000000 #000000; +#X obj 151 167 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000; #X text 170 164 click to set name; #X floatatom 90 199 6 1 8 0 - - - 0; #X obj 280 245 array define \$0-x 10; #X obj 92 284 tabwrite; #X floatatom 146 256 5 0 0 0 - - - 0; -#X text 36 86 You can use "\$0" in an array name and if you need to -set the array name you can load it in a symbol object \, since "\$0" -doesn't work in messages., f 70; -#X connect 2 0 8 0; +#X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 1 0 7 0; +#X connect 2 0 1 0; #X connect 3 0 2 0; -#X connect 4 0 3 0; -#X connect 6 0 8 0; -#X connect 9 0 8 1; +#X connect 5 0 7 0; +#X connect 8 0 7 1; #X restore 187 361 pd Dealing_with_"\$0"; #X text 25 352 open subpatch to see how to deal with '\$0', f 21; #X obj 81 420 tabwrite~; #N canvas 653 102 583 306 reference 0; -#X obj 18 52 cnv 5 550 5 empty empty INLET: 8 18 0 13 #202020 #000000 -0; -#X obj 18 188 cnv 2 550 2 empty empty OUTLETS: 8 12 0 13 #202020 #000000 -0; -#X obj 18 233 cnv 2 550 2 empty empty ARGUMENT: 8 12 0 13 #202020 #000000 -0; -#X obj 17 270 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 -0; +#X obj 18 52 cnv 5 550 5 empty empty INLET: 8 18 0 13 #202020 #000000 0; +#X obj 18 188 cnv 2 550 2 empty empty OUTLETS: 8 12 0 13 #202020 #000000 0; +#X obj 18 233 cnv 2 550 2 empty empty ARGUMENT: 8 12 0 13 #202020 #000000 0; +#X obj 17 270 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 0; #X text 113 114 set -; #X text 162 94 float -; #X text 218 114 set the table name., f 39; @@ -68,19 +55,15 @@ doesn't work in messages., f 70; #X text 118 22 - write numbers to a table.; #X text 218 94 sets index value and write to a table., f 39; #X text 170 201 NONE; -#X obj 17 144 cnv 1 550 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 -0; -#X obj 17 85 cnv 1 550 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 -0; +#X obj 17 144 cnv 1 550 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 0; +#X obj 17 85 cnv 1 550 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 0; #X text 162 154 float -; #X text 218 155 sets index to write to., f 39; #X text 126 242 1) symbol - sets table name with the sample.; #X restore 461 18 pd reference; #X text 559 17 <= click; -#X obj 8 52 cnv 1 650 1 empty empty empty 8 12 0 13 #000000 #000000 -0; -#X obj 8 403 cnv 1 650 1 empty empty empty 8 12 0 13 #000000 #000000 -0; +#X obj 8 52 cnv 1 650 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 8 403 cnv 1 650 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 9 419 see also:; #N canvas 643 412 384 186 array-examples 0; #N canvas 491 316 457 285 open 0; @@ -101,14 +84,11 @@ doesn't work in messages., f 70; #X msg 52 76 15.array.pd; #X msg 62 102 16.more.arrays.pd; #X text 144 77 <-- click to open examples.; -#X text 47 22 See also and the "array" examples from the section 2 -of Pd's tutorial:, f 39; +#X text 47 22 See also and the "array" examples from the section 2 of Pd's tutorial:, f 39; #X connect 1 0 0 0; #X connect 2 0 0 0; #X restore 317 420 pd array-examples; -#X text 22 66 [tabwrite] writes floats into an array \, input values -are set in the left inlet \, while the index is set on the right inlet. -, f 62; +#X text 22 66 [tabwrite] writes floats into an array \, input values are set in the left inlet \, while the index is set on the right inlet., f 62; #X connect 1 0 15 0; #X connect 3 0 15 1; #X connect 16 0 15 0; diff --git a/doc/5.reference/tabwrite~-help.pd b/doc/5.reference/tabwrite~-help.pd index eaefce72..abb1481b 100644 --- a/doc/5.reference/tabwrite~-help.pd +++ b/doc/5.reference/tabwrite~-help.pd @@ -21,7 +21,6 @@ #X obj 182 482 soundfiler; #X text 136 262 start at index 500 (middle of this table), f 22; #N canvas 703 134 593 356 Dealing_with_"\$0" 0; -#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70; #X text 431 244 <= array with local name, f 13; #X msg 153 216 set \$1; #X obj 153 190 symbol \$0-x; @@ -32,11 +31,12 @@ #X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70; #X obj 153 165 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 160 251 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X connect 2 0 6 0; -#X connect 3 0 2 0; -#X connect 7 0 6 0; -#X connect 9 0 3 0; -#X connect 10 0 6 0; +#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is especially useful in abstractions so each copy has local names instead of global., f 70; +#X connect 1 0 5 0; +#X connect 2 0 1 0; +#X connect 6 0 5 0; +#X connect 8 0 2 0; +#X connect 9 0 5 0; #X restore 323 409 pd Dealing_with_"\$0"; #X text 161 400 open subpatch to see how to deal with '\$0', f 21; #N canvas 651 119 583 293 reference 0; diff --git a/doc/5.reference/value-help.pd b/doc/5.reference/value-help.pd index 3e9cd5c5..90dc2142 100644 --- a/doc/5.reference/value-help.pd +++ b/doc/5.reference/value-help.pd @@ -1,4 +1,4 @@ -#N canvas 539 23 565 709 12; +#N canvas 487 23 565 709 12; #X floatatom 73 127 5 0 0 0 - - - 0; #X floatatom 73 206 5 0 0 0 - - - 0; #X obj 37 12 value; @@ -39,14 +39,13 @@ #X text 322 675 updated for Pd version 0.51.; #X text 85 12 - nonlocal shared value (named variable); #X text 82 37 - abbreviation; -#N canvas 727 185 548 342 Dealing_with_"\$0" 0; +#N canvas 720 150 548 342 Dealing_with_"\$0" 1; #X floatatom 54 237 5 0 0 0 - - - 0; #X floatatom 389 285 5 0 0 0 - - - 0; #X obj 389 254 receive \$0-y; #X obj 271 204 f \$0; #X floatatom 382 187 5 0 0 0 - \$0-y - 0; #X obj 86 288 value; -#X text 36 19 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names \, This kitchen was specially designed to make it easy for a disabled person to use. This kitchen was specially designed to make it easy for a disabled person to use. specially in abstractions so each copy has local connections instead of global. Note that "\$0" is also used in send/receive names in GUIs as well as variable names in value objects., f 67; #X floatatom 227 296 5 0 0 0 - - - 0; #X text 139 218 <= click; #X obj 118 248 symbol \$0-x; @@ -57,15 +56,16 @@ #X obj 271 180 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 227 204 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 118 218 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X text 36 40 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names. This is specially useful in abstractions so that each copy has local connections instead of global. Note that "\$0" is also used in send/receive names in GUIs as well as variable names in value objects., f 67; #X connect 0 0 5 0; #X connect 2 0 1 0; -#X connect 3 0 11 0; -#X connect 9 0 5 1; -#X connect 10 0 7 0; -#X connect 11 0 10 0; -#X connect 14 0 3 0; -#X connect 15 0 10 0; -#X connect 16 0 9 0; +#X connect 3 0 10 0; +#X connect 8 0 5 1; +#X connect 9 0 6 0; +#X connect 10 0 9 0; +#X connect 13 0 3 0; +#X connect 14 0 9 0; +#X connect 15 0 8 0; #X restore 366 623 pd Dealing_with_"\$0"; #X text 35 623 open subpatch to see how to deal with '\$0' =>; #X obj 6 67 cnv 1 550 1 empty empty empty 8 12 0 13 #000000 #000000 0; From 81d8bb172faaf277c56cf839da750795f47d81a6 Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 31 Jul 2023 13:33:56 -0300 Subject: [PATCH 22/68] fix biquad~ reference closes https://github.com/pure-data/pddp/issues/163 --- doc/5.reference/biquad~-help.pd | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/5.reference/biquad~-help.pd b/doc/5.reference/biquad~-help.pd index 2d665258..385a9f48 100644 --- a/doc/5.reference/biquad~-help.pd +++ b/doc/5.reference/biquad~-help.pd @@ -9,7 +9,7 @@ #X msg 152 303 1.41407 -0.9998 1 -1.41421 1; #X msg 186 369 clear; #X obj 53 352 osc~ 5512.5; -#X msg 459 268 \; pd dsp \$1; +#X msg 471 274 \; pd dsp \$1; #X text 39 227 The filter's coefficients syntax (set via arguments or list input) is: fb1 fb2 ff1 ff2 ff3, f 51; #X text 259 330 set internal state (previous input samples), f 24; #X msg 171 338 set 0.5 0.4; @@ -24,14 +24,14 @@ #X obj 17 229 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 0; #X obj 39 16 biquad~; #X text 121 60 signal - input signal to be filtered., f 59; -#X text 135 79 list - input signal to be filtered (fb1 fb2 ff1 ff2 ff3).; -#X text 129 117 clear - clear filter's memory buffer., f 58; +#X text 128 117 clear - clear filter's memory buffer., f 58; #X text 123 158 signal - the filtered signal output.; #X text 112 198 1) list - initializes the 5 coefficients (fb1 fb2 ff1 ff2 ff3)., f 63; -#X text 38 98 set - set the last two input samples., f 71; +#X text 37 98 set - set the last two input samples., f 71; #X text 101 15 - raw biquad 2nd order filter; -#X restore 387 13 pd reference; -#X text 485 13 <= click; +#X text 135 79 list - list of filter coefficients (fb1 fb2 ff1 ff2 ff3).; +#X restore 417 13 pd reference; +#X text 515 13 <= click; #X text 54 561 see also:; #X obj 185 610 rzero~; #X obj 128 633 cpole~; @@ -57,8 +57,8 @@ #X text 407 631 updated for Pd version 0.3; #X text 45 86 y[n] = fb1 * y[n-1] + fb2 * y[n-2] + ff1 * x[n] + ff2 * x[n-1] + ff3 * x[n-2], f 77; #X text 83 13 - raw biquad 2nd order filter; -#X obj 460 230 set-dsp-tgl; -#X text 491 234 DSP on/off; +#X obj 472 236 set-dsp-tgl; +#X text 503 240 DSP on/off; #X connect 0 0 1 0; #X connect 2 0 9 0; #X connect 3 0 4 0; From e1f60ca38a245f4257bb1430456460e4a35e5149 Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 31 Jul 2023 14:25:04 -0300 Subject: [PATCH 23/68] add example with [clone] in [poly]'s help file closes https://github.com/pure-data/pddp/issues/161 --- doc/5.reference/clone-abs-c.pd | 22 +++++ doc/5.reference/clone-help.pd | 142 ++++++++++++++------------- doc/5.reference/poly-help.pd | 173 +++++++++++++++++++-------------- doc/Makefile.am | 1 + 4 files changed, 197 insertions(+), 141 deletions(-) create mode 100644 doc/5.reference/clone-abs-c.pd diff --git a/doc/5.reference/clone-abs-c.pd b/doc/5.reference/clone-abs-c.pd new file mode 100644 index 00000000..bf35b39a --- /dev/null +++ b/doc/5.reference/clone-abs-c.pd @@ -0,0 +1,22 @@ +#N canvas 585 104 323 372 12; +#X obj 110 199 osc~; +#X obj 110 315 outlet~; +#X obj 110 238 *~; +#X obj 110 163 mtof; +#X obj 156 261 pow~ 4; +#X obj 110 81 inlet; +#X obj 110 114 unpack, f 7; +#X obj 156 156 / 127; +#X text 61 21 This is the abstraction for the [poly] help patch., f 26; +#X obj 156 222 line~; +#X msg 156 186 \$1 150; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 6 0; +#X connect 6 0 3 0; +#X connect 6 1 7 0; +#X connect 7 0 10 0; +#X connect 9 0 4 0; +#X connect 10 0 9 0; diff --git a/doc/5.reference/clone-help.pd b/doc/5.reference/clone-help.pd index 83cad5c6..8c0c39ff 100644 --- a/doc/5.reference/clone-help.pd +++ b/doc/5.reference/clone-help.pd @@ -1,23 +1,22 @@ -#N canvas 395 23 754 706 12; +#N canvas 302 23 794 703 12; #X declare -stdpath ./; -#X floatatom 181 253 4 57 83 0 - - - 0; -#X obj 181 290 t b f, f 9; -#X obj 181 316 f; -#X msg 359 334 next \$1; -#X msg 367 383 this \$1; -#X msg 378 431 set \$1; -#X msg 387 479 all \$1; -#X text 422 308 "next" forwards a message to the next instance (incrementing and repeating circularly)., f 31; -#X text 430 362 "this" forwards a message to the previous instance sent to by "this" or "next", f 30; -#X text 63 623 note: for backwards compatibility \, you can also invoke this as "clone 16 clone-abstraction" (for instance) \, swapping the abstraction name and the number of voices., f 91; -#X obj 181 556 output~; +#X floatatom 223 250 5 57 83 0 - - - 0; +#X obj 223 290 t b f, f 9; +#X obj 223 316 f; +#X msg 401 334 next \$1; +#X msg 409 383 this \$1; +#X msg 420 431 set \$1; +#X msg 429 479 all \$1; +#X text 464 308 "next" forwards a message to the next instance (incrementing and repeating circularly)., f 31; +#X text 472 362 "this" forwards a message to the previous instance sent to by "this" or "next", f 30; +#X obj 223 548 output~; #X obj 30 8 clone; -#X obj 181 378 pack f f; -#X listbox 181 406 5 0 0 0 - - - 0; -#X obj 70 571 declare -stdpath ./, f 11; -#X obj 6 37 cnv 1 740 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X obj 6 668 cnv 1 740 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X obj 210 316 + 1; +#X obj 223 378 pack f f; +#X listbox 223 406 5 0 0 0 - - - 0; +#X obj 100 560 declare -stdpath ./, f 11; +#X obj 6 37 cnv 1 775 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 6 668 cnv 1 775 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 252 316 + 1; #N canvas 696 57 567 608 reference 0; #X obj 8 43 cnv 5 550 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0; #X obj 8 76 cnv 1 550 1 empty empty 'n': 8 12 0 13 #9f9f9f #000000 0; @@ -56,17 +55,17 @@ #X text 91 475 -do - combine signal outputs to make a multichannel signal.; #X text 98 491 -d - set both -di and -do flags.; #X text 84 304 (number and type depends on the abstraction); -#X restore 571 8 pd reference; -#X text 664 8 <= click; -#X text 222 247 A list beginning with a number dispatches the rest of the list as a message to a copy of the abstraction defined by the first number., f 69; -#X text 49 519 click to open --> (first copy only), f 17; +#X restore 592 8 pd reference; +#X text 685 8 <= click; +#X text 268 245 A list beginning with a number dispatches the rest of the list as a message to a copy of the abstraction defined by the first number., f 69; +#X text 91 519 click to open --> (first copy only), f 17; #X text 78 9 - make multiple copies of an abstraction; -#X text 531 677 updated for Pd version 0.54; -#X text 28 678 see also:; -#X obj 107 679 inlet; -#X obj 159 679 snake~; -#X text 396 576 mutichannel signal support ----------->, f 20; -#X floatatom 378 409 5 0 3 0 - - - 0; +#X text 565 677 updated for Pd version 0.54; +#X text 15 678 see also:; +#X obj 87 679 inlet; +#X obj 135 679 snake~; +#X text 438 576 mutichannel signal support ----------->, f 20; +#X floatatom 420 409 5 0 3 0 - - - 0; #N canvas 462 108 850 454 multichannel 0; #X obj 361 338 output~; #X obj 361 296 snake~ out; @@ -111,47 +110,50 @@ #X connect 20 0 19 0; #X connect 20 1 19 1; #X connect 21 0 20 0; -#X restore 547 591 pd multichannel; -#X obj 181 352 mod 4; -#X msg 39 309 vis 2 0; -#X msg 102 309 vis 2 1; -#X text 49 266 open or close copy number 2:, f 14; -#X floatatom 387 457 4 57 83 0 - - - 0; -#X floatatom 367 361 5 0 3 0 - - - 0; -#X floatatom 359 312 5 0 3 0 - - - 0; -#X text 325 518 <-- file name and number of copies; -#X obj 181 518 clone clone-abs-a 4; -#X floatatom 275 289 5 0 0 0 - - - 0; -#X msg 275 329 resize \$1; -#X text 438 419 "set" sets the "next" and "this" counter, f 22; -#X text 444 467 "all" sends a message to all instances, f 21; -#X text 322 286 <-- resize the number of instances; -#X text 40 46 [clone] creates any number of copies of an abstraction (a patch loaded as an object in another patch). By default "\$1" is set to the instance number within each copy (counted from 0 unless overridden by the "-s" flag). You can prevent '\$1' from reflecting the instance number with the "-x" flag. Arguments must be filename and number of copies \, additional arguments are passed to the copies and appear as \$2 and onward (or \$1 and onward with the "-x" flag)., f 95; -#X text 40 197 Signal inlets can get non float control messages with the 'fwd' argument in the same way \, but signals are sent to all the instances. See [pd multichannel] example for more details on how signal distribution works in [clone]., f 95; -#X listbox 311 546 7 0 0 0 - - - 0; -#X text 40 121 [clone]'s inlets/outlets correspond to those of the contained patch \, and may be control and/or signal inlets/outlets (this example has one control inlet plus one signal and another control outlet). You can click on the clone object to see the first of the created instances. At least one control inlet is present even if the abstraction has none so [clone] can receive the 'vis' and 'resize' messages. The way control inlets/outlets forward messages is shown below., f 95; -#X text 368 546 control data is preceded by instance number; +#X restore 589 591 pd multichannel; +#X obj 223 352 mod 4; +#X msg 61 430 vis 2 0; +#X msg 125 431 vis 2 1; +#X floatatom 429 457 4 57 83 0 - - - 0; +#X floatatom 409 361 5 0 3 0 - - - 0; +#X floatatom 401 312 5 0 3 0 - - - 0; +#X text 367 518 <-- file name and number of copies; +#X obj 223 518 clone clone-abs-a 4; +#X floatatom 317 289 5 0 0 0 - - - 0; +#X msg 317 329 resize \$1; +#X text 480 419 "set" sets the "next" and "this" counter, f 22; +#X text 486 467 "all" sends a message to all instances, f 21; +#X text 364 286 <-- resize the number of instances; +#X text 24 46 [clone] creates any number of copies of an abstraction (a patch loaded as an object in another patch). By default "\$1" is set to the instance number within each copy (counted from 0 unless overridden by the "-s" flag). You can prevent '\$1' from reflecting the instance number with the "-x" flag. Arguments must be filename and number of copies \, additional arguments are passed to the copies and appear as \$2 and onward (or \$1 and onward with the "-x" flag)., f 104; +#X text 23 197 Signal inlets can get non float control messages with the 'fwd' argument in the same way \, but signals are sent to all the instances. See [pd multichannel] example for more details on how signal distribution works in [clone]., f 104; +#X listbox 353 546 7 0 0 0 - - - 0; +#X text 23 121 [clone]'s inlets/outlets correspond to those of the contained patch \, and may be control and/or signal inlets/outlets (this example has one control inlet plus one signal and another control outlet). You can click on the clone object to see the first of the created instances. At least one control inlet is present even if the abstraction has none so [clone] can receive the 'vis' and 'resize' messages. The way control inlets/outlets forward messages is shown below., f 104; +#X text 410 546 control data is preceded by instance number; +#X obj 193 679 poly; +#X text 80 623 Note: for backwards compatibility \, you can also invoke this as "clone 16 clone-abstraction" (for instance) \, swapping the abstraction name and the number of voices., f 91; +#X text 71 387 Open or close copy number 2:, f 14; +#X text 59 261 Check [poly]'s help for an example implementing a polyphonic synth with [clone] and the list input., f 19; #X connect 0 0 1 0; #X connect 1 0 2 0; -#X connect 1 1 12 1; -#X connect 2 0 30 0; -#X connect 3 0 38 0; -#X connect 4 0 38 0; -#X connect 5 0 38 0; -#X connect 6 0 38 0; -#X connect 12 0 13 0; -#X connect 13 0 38 0; -#X connect 17 0 2 1; -#X connect 28 0 5 0; -#X connect 30 0 12 0; -#X connect 30 0 17 0; -#X connect 31 0 38 0; -#X connect 32 0 38 0; -#X connect 34 0 6 0; -#X connect 35 0 4 0; -#X connect 36 0 3 0; -#X connect 38 0 10 0; -#X connect 38 1 46 0; -#X connect 39 0 40 0; -#X connect 39 0 30 1; -#X connect 40 0 38 0; +#X connect 1 1 11 1; +#X connect 2 0 29 0; +#X connect 3 0 36 0; +#X connect 4 0 36 0; +#X connect 5 0 36 0; +#X connect 6 0 36 0; +#X connect 11 0 12 0; +#X connect 12 0 36 0; +#X connect 16 0 2 1; +#X connect 27 0 5 0; +#X connect 29 0 11 0; +#X connect 29 0 16 0; +#X connect 30 0 36 0; +#X connect 31 0 36 0; +#X connect 32 0 6 0; +#X connect 33 0 4 0; +#X connect 34 0 3 0; +#X connect 36 0 9 0; +#X connect 36 1 44 0; +#X connect 37 0 38 0; +#X connect 37 0 29 1; +#X connect 38 0 36 0; diff --git a/doc/5.reference/poly-help.pd b/doc/5.reference/poly-help.pd index 29458551..ddc0ee43 100644 --- a/doc/5.reference/poly-help.pd +++ b/doc/5.reference/poly-help.pd @@ -1,36 +1,28 @@ -#N canvas 549 25 568 446 12; -#X text 341 415 updated for Pd version 0.25; -#X text 43 413 see also:; +#N canvas 476 23 567 514 12; +#X declare -stdpath ./; +#X text 16 476 see also:; #X obj 29 16 poly; -#X obj 121 414 route; -#X obj 175 414 makenote; -#X obj 158 268 poly 4 1; -#X msg 227 236 stop; -#X msg 216 210 clear; +#X obj 94 476 makenote; +#X obj 99 276 poly 4 1; +#X msg 211 242 stop; +#X msg 203 216 clear; #X text 68 16 - MIDI-style polyphonic voice allocator; -#X listbox 151 329 20 0 0 0 - - - 0; -#X obj 151 298 pack f f f; -#X msg 64 184 60 \$1; -#X msg 111 184 62 \$1; -#X msg 158 184 65 \$1; -#X msg 206 184 69 \$1; -#X text 261 211 clear memory; -#X text 266 236 flush hanging note on messages; -#X obj 9 50 cnv 1 550 1 empty empty empty 8 12 0 13 #000000 #000000 -0; +#X listbox 92 336 13 0 0 0 - - - 0; +#X obj 92 306 pack f f f; +#X msg 52 188 60 \$1; +#X msg 99 188 62 \$1; +#X msg 146 188 65 \$1; +#X msg 194 188 69 \$1; +#X text 248 217 clear memory; +#X text 249 243 flush hanging note on messages; +#X obj 9 50 cnv 1 550 1 empty empty empty 8 12 0 13 #000000 #000000 0; #N canvas 800 147 484 391 reference 0; -#X obj 8 52 cnv 5 450 5 empty empty INLETS: 8 18 0 13 #202020 #000000 -0; -#X obj 8 192 cnv 2 450 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 -0; -#X obj 8 313 cnv 2 450 2 empty empty ARGUMENTS: 8 12 0 13 #202020 #000000 -0; -#X obj 7 370 cnv 5 450 5 empty empty empty 8 18 0 13 #202020 #000000 -0; -#X obj 7 155 cnv 1 450 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 -0; -#X obj 7 85 cnv 1 450 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 -0; +#X obj 8 52 cnv 5 450 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0; +#X obj 8 192 cnv 2 450 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0; +#X obj 8 313 cnv 2 450 2 empty empty ARGUMENTS: 8 12 0 13 #202020 #000000 0; +#X obj 7 370 cnv 5 450 5 empty empty empty 8 18 0 13 #202020 #000000 0; +#X obj 7 155 cnv 1 450 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 0; +#X obj 7 85 cnv 1 450 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 0; #X obj 27 18 poly; #X text 66 18 - MIDI-style polyphonic voice allocator.; #X text 131 93 float - MIDI pitch value., f 40; @@ -39,51 +31,90 @@ #X text 138 129 stop -; #X text 187 129 flush hanging note on messages., f 32; #X text 132 162 float - set velocity value., f 40; -#X obj 7 246 cnv 1 450 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 -0; -#X obj 7 216 cnv 1 450 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 -0; +#X obj 7 246 cnv 1 450 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 0; +#X obj 7 216 cnv 1 450 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 0; #X text 132 224 float - the voice number., f 40; -#X obj 7 276 cnv 1 450 1 empty empty 3rd: 8 12 0 13 #7c7c7c #000000 -0; +#X obj 7 276 cnv 1 450 1 empty empty 3rd: 8 12 0 13 #7c7c7c #000000 0; #X text 111 323 1) float - number of voices (default 1)., f 43; #X text 111 341 2) float - non-zero sets to voice stealing.; #X text 131 284 float - note velocity., f 40; #X text 131 254 float - note pitch., f 40; #X restore 383 17 pd reference; #X text 477 17 <= click; -#X obj 9 400 cnv 1 550 1 empty empty empty 8 12 0 13 #000000 #000000 -0; -#X obj 206 158 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 -#000000 0 64; -#X text 249 183 <-- emulating note on/off messages; -#X text 228 268 <-- first argument \, number of voices second argument -selects voice stealing, f 43; -#X text 21 58 The [poly] object takes a stream of pitch/velocity pairs -and outputs triples containing voice number \, pitch and velocity - -it can be configured to do voice stealing or not (the default). You -can pack the output and use the [route] object to route messages among -a bank of voices depending on the first outlet. Another option is to -connect it [clone] so you can route to different copies., f 74; -#X obj 64 158 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 -#000000 0 64; -#X obj 111 158 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 -#000000 0 64; -#X obj 158 158 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 -#000000 0 64; -#X obj 151 364 print poly; -#X connect 5 0 10 0; -#X connect 5 1 10 1; -#X connect 5 2 10 2; -#X connect 6 0 5 0; -#X connect 7 0 5 0; -#X connect 9 0 28 0; -#X connect 10 0 9 0; -#X connect 11 0 5 0; -#X connect 12 0 5 0; -#X connect 13 0 5 0; -#X connect 14 0 5 0; -#X connect 21 0 14 0; -#X connect 25 0 11 0; -#X connect 26 0 12 0; -#X connect 27 0 13 0; +#X obj 9 463 cnv 1 550 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 194 162 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 64; +#X text 237 187 <-- emulating note on/off messages; +#X obj 52 162 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 64; +#X obj 99 162 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 64; +#X obj 146 162 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 64; +#X obj 92 365 route 1 2 3 4, f 39; +#X listbox 92 393 7 0 0 0 - - - 0; +#X obj 92 420 print v1; +#X listbox 159 393 7 0 0 0 - - - 0; +#X listbox 227 393 7 0 0 0 - - - 0; +#X listbox 294 393 7 0 0 0 - - - 0; +#X obj 159 420 print v2; +#X obj 227 420 print v3; +#X obj 294 420 print v4; +#N canvas 662 49 425 614 clone 0; +#X text 33 19 You'll usually want [poly] to control a single polyhonic synth. The "route" method shown in the parent patch would then imply that you'd have the same subpatch or abstraction taking the note message., f 48; +#X listbox 182 370 13 0 0 0 - - - 0; +#X obj 182 338 pack f f f; +#X obj 182 438 output~; +#X obj 60 436 declare -stdpath ./, f 11; +#X obj 182 402 clone -s 1 clone-abs-c 4; +#X obj 181 304 poly 4 1; +#X text 65 532 In [clone] \, we use the "-s" flag to set the starting copy number to 1 \, so it matches the voice numbers from [poly] \, which is indexed by 1 as well., f 43; +#X obj 181 254 makenote 55 1500; +#X msg 111 188 60; +#X msg 144 188 62; +#X msg 181 188 65; +#X msg 222 188 69; +#X floatatom 181 226 5 0 0 0 - - - 0; +#X obj 119 256 notein; +#X text 33 102 An approach that is more useful in this case is using [clone] to load an abstraction \, see below. Here we use [makenote] now but you can also try your MIDI keyboard input with [notein]., f 48; +#X connect 1 0 5 0; +#X connect 2 0 1 0; +#X connect 5 0 3 0; +#X connect 6 0 2 0; +#X connect 6 1 2 1; +#X connect 6 2 2 2; +#X connect 8 0 6 0; +#X connect 8 1 6 1; +#X connect 9 0 13 0; +#X connect 10 0 13 0; +#X connect 11 0 13 0; +#X connect 12 0 13 0; +#X connect 13 0 8 0; +#X connect 14 0 6 0; +#X connect 14 1 6 1; +#X restore 464 406 pd clone; +#X text 166 276 <-- first argument \, number of voices second; +#X text 195 292 argument selects voice stealing; +#X text 21 58 The [poly] object takes a stream of pitch/velocity pairs and outputs triples containing voice number \, pitch and velocity - it can be configured to do voice stealing or not (the default). You can pack the output and use the [route] object to route messages to different voices (as below) \, or feeding it [clone] (see example in [pd clone])., f 74; +#X text 339 478 updated for Pd version 0.54-1; +#X obj 221 476 clone; +#X obj 163 475 notein; +#X connect 3 0 8 0; +#X connect 3 1 8 1; +#X connect 3 2 8 2; +#X connect 4 0 3 0; +#X connect 5 0 3 0; +#X connect 7 0 24 0; +#X connect 8 0 7 0; +#X connect 9 0 3 0; +#X connect 10 0 3 0; +#X connect 11 0 3 0; +#X connect 12 0 3 0; +#X connect 19 0 12 0; +#X connect 21 0 9 0; +#X connect 22 0 10 0; +#X connect 23 0 11 0; +#X connect 24 0 25 0; +#X connect 24 1 27 0; +#X connect 24 2 28 0; +#X connect 24 3 29 0; +#X connect 25 0 26 0; +#X connect 27 0 30 0; +#X connect 28 0 31 0; +#X connect 29 0 32 0; diff --git a/doc/Makefile.am b/doc/Makefile.am index fb3ec430..62d4d5d5 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -317,6 +317,7 @@ nobase_dist_libpd_DATA = \ ./5.reference/clip~-help.pd \ ./5.reference/clone-abs-a.pd \ ./5.reference/clone-abs-b.pd \ + ./5.reference/clone-abs-c.pd \ ./5.reference/clone-help.pd \ ./5.reference/cnv-help.pd \ ./5.reference/cos~-help.pd \ From 7611a0d736b826d9ab05ccfdec54a6b67290555a Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 31 Jul 2023 15:27:43 -0300 Subject: [PATCH 24/68] Update value-help.pd "especially" again --- doc/5.reference/value-help.pd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/5.reference/value-help.pd b/doc/5.reference/value-help.pd index 90dc2142..1523742b 100644 --- a/doc/5.reference/value-help.pd +++ b/doc/5.reference/value-help.pd @@ -39,7 +39,7 @@ #X text 322 675 updated for Pd version 0.51.; #X text 85 12 - nonlocal shared value (named variable); #X text 82 37 - abbreviation; -#N canvas 720 150 548 342 Dealing_with_"\$0" 1; +#N canvas 720 150 548 342 Dealing_with_"\$0" 0; #X floatatom 54 237 5 0 0 0 - - - 0; #X floatatom 389 285 5 0 0 0 - - - 0; #X obj 389 254 receive \$0-y; @@ -56,7 +56,7 @@ #X obj 271 180 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 227 204 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 118 218 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X text 36 40 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names. This is specially useful in abstractions so that each copy has local connections instead of global. Note that "\$0" is also used in send/receive names in GUIs as well as variable names in value objects., f 67; +#X text 36 40 '\$0' - the patch ID number used to force locality in Pd - is widely used in send and receive names. This is especially useful in abstractions so that each copy has local connections instead of global. Note that "\$0" is also used in send/receive names in GUIs as well as variable names in value objects., f 67; #X connect 0 0 5 0; #X connect 2 0 1 0; #X connect 3 0 10 0; From 03f8583fef085a1afe65711dcd09bbb111d54e88 Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 31 Jul 2023 17:37:35 -0300 Subject: [PATCH 25/68] Add example in [lop~] to set frequency with signal input and also add some sliders in the help files of filters to control frequency and Q --- doc/5.reference/append-help.pd | 6 +-- doc/5.reference/bp~-help.pd | 46 ++++++++++---------- doc/5.reference/hip~-help.pd | 6 ++- doc/5.reference/lop~-help.pd | 62 +++++++++++++++++---------- doc/5.reference/vcf~-help.pd | 76 ++++++++++++++++++---------------- 5 files changed, 111 insertions(+), 85 deletions(-) diff --git a/doc/5.reference/append-help.pd b/doc/5.reference/append-help.pd index 11498582..ff19805e 100644 --- a/doc/5.reference/append-help.pd +++ b/doc/5.reference/append-help.pd @@ -1,4 +1,4 @@ -#N canvas 397 23 617 637 12; +#N canvas 579 25 617 637 12; #X obj 254 319 pointer; #X floatatom 93 324 5 0 150 0 - - - 0; #X obj 197 533 pointer; @@ -16,7 +16,7 @@ #X obj 93 583 pointer; #X text 403 596 updated for Pd version 0.47; #X text 526 10 <= click; -#N canvas 744 111 575 343 reference 1; +#N canvas 744 111 575 343 reference 0; #X obj 8 46 cnv 5 550 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0; #X obj 7 79 cnv 1 550 1 empty empty 1st: 8 12 0 13 #9f9f9f #000000 0; #X obj 8 211 cnv 2 550 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0; @@ -50,7 +50,7 @@ #X text 189 365 z; #X text 50 418 If there are no field arguments or just one specified field \, you can use a "set" message to set both the template and field., f 59; #X obj 10 571 cnv 1 600 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#N canvas 265 164 338 297 append-data 1; +#N canvas 225 165 338 297 append-data 1; #X coords 0 297 1 296 0 0 0; #X restore 483 526 pd append-data; #N canvas 836 175 475 285 append-template 0; diff --git a/doc/5.reference/bp~-help.pd b/doc/5.reference/bp~-help.pd index 681b9659..08e80d34 100644 --- a/doc/5.reference/bp~-help.pd +++ b/doc/5.reference/bp~-help.pd @@ -1,22 +1,22 @@ -#N canvas 588 45 480 548 12; +#N canvas 562 45 480 601 12; #X declare -stdpath ./; -#X floatatom 89 219 7 0 0 0 - - - 0; +#X floatatom 89 249 7 0 0 0 - - - 0; #X msg 56 192 clear; #X text 35 91 The left inlet is the incoming audio signal \, the middle control input sets center frequency and the right input sets "Q"., f 58; -#X floatatom 123 246 5 1 50 0 - - - 0; +#X floatatom 123 306 5 1 50 0 - - - 0; #X text 35 53 bp~ passes a sinusoid at the center frequency at unit gain (approximately). Other frequencies are attenuated.; -#X obj 56 319 output~; +#X obj 56 379 output~; #X obj 31 160 noise~; #X obj 285 146 declare -stdpath ./; -#X obj 56 279 bp~ 500 10; -#X text 181 308 Listen to how the white noise input is filtered. The higher the Q \, the more attenuation we have for frequencies besides the center frequency \, so the less wide the frequency band is., f 38; +#X obj 56 339 bp~ 500 10; +#X text 181 368 Listen to how the white noise input is filtered. The higher the Q \, the more attenuation we have for frequencies besides the center frequency \, so the less wide the frequency band is., f 38; #X obj 20 9 bp~; -#X text 16 483 see also:; -#X obj 88 484 vcf~; -#X text 270 488 updated for Pd version 0.46; -#X obj 130 484 bob~; -#X obj 170 484 lop~; -#X obj 210 484 hip~; +#X text 16 543 see also:; +#X obj 88 544 vcf~; +#X text 270 548 updated for Pd version 0.46; +#X obj 130 544 bob~; +#X obj 170 544 lop~; +#X obj 210 544 hip~; #X obj 5 42 cnv 1 470 1 empty empty empty 8 12 0 13 #000000 #000000 0; #N canvas 694 141 574 303 reference 0; #X obj 29 16 bp~; @@ -38,18 +38,22 @@ #X restore 294 9 pd reference; #X text 392 9 <= click; #X text 53 9 - 2-pole band-pass filter; -#X obj 30 513 biquad~; -#X obj 89 512 slop~, f 7; -#X obj 148 512 cpole~, f 7; -#X obj 210 512 fexpr~; -#X obj 2 471 cnv 1 470 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 30 573 biquad~; +#X obj 89 572 slop~, f 7; +#X obj 148 572 cpole~, f 7; +#X obj 210 572 fexpr~; +#X obj 2 531 cnv 1 470 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 103 191 <-- reinitialize internal state; -#X text 170 246 <-- Q (controls bandwidth); -#X text 25 393 NOTE: the maximum center frequency is sample rate divided by 6.28 \, or about 12kHz at the "usual" rates - for a more general and stable (but slightly more CPU-expensive) filter \, try [vcf~].; -#X text 137 279 <-- frequency and Q, f 20; -#X text 146 219 <-- center frequency in hertz; +#X text 170 306 <-- Q (controls bandwidth); +#X text 25 453 NOTE: the maximum center frequency is sample rate divided by 6.28 \, or about 12kHz at the "usual" rates - for a more general and stable (but slightly more CPU-expensive) filter \, try [vcf~].; +#X text 146 249 <-- center frequency in hertz; +#X obj 92 222 hsl 169 18 200 2000 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 126 279 hsl 169 18 1 20 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; +#X text 137 339 <-- arguments: frequency and Q; #X connect 0 0 8 1; #X connect 1 0 8 0; #X connect 3 0 8 2; #X connect 6 0 8 0; #X connect 8 0 5 0; +#X connect 30 0 0 0; +#X connect 31 0 3 0; diff --git a/doc/5.reference/hip~-help.pd b/doc/5.reference/hip~-help.pd index 141c2caf..8b549774 100644 --- a/doc/5.reference/hip~-help.pd +++ b/doc/5.reference/hip~-help.pd @@ -1,6 +1,6 @@ #N canvas 541 23 578 563 12; #X declare -stdpath ./; -#X floatatom 216 177 5 0 0 0 - - - 0; +#X floatatom 216 177 8 0 0 0 - - - 0; #X msg 113 124 clear; #X obj 25 15 hip~; #X text 70 14 - one-pole high pass filter; @@ -42,8 +42,10 @@ #X obj 8 491 cnv 1 560 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 39 56 [hip~] is a one-pole high pass filter with a specified cutoff frequency. Left (audio) inlet is the incoming audio signal. Right (control) inlet sets cutoff frequency., f 72; #X text 162 124 <-- reinitialize internal state; -#X text 259 176 <-- set cutoff frequency; +#X text 282 177 <-- set cutoff frequency; +#X obj 219 150 hsl 169 18 50 5000 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; #X connect 0 0 15 1; #X connect 1 0 15 0; #X connect 13 0 15 0; #X connect 15 0 14 0; +#X connect 29 0 0 0; diff --git a/doc/5.reference/lop~-help.pd b/doc/5.reference/lop~-help.pd index 361c5edf..93238298 100644 --- a/doc/5.reference/lop~-help.pd +++ b/doc/5.reference/lop~-help.pd @@ -1,24 +1,23 @@ -#N canvas 530 29 579 392 12; +#N canvas 431 29 579 404 12; #X declare -stdpath ./; -#X floatatom 236 174 5 0 0 0 - - - 0; +#X floatatom 236 187 8 0 0 0 - - - 0; #X obj 26 13 lop~; #X text 66 14 - one-pole low pass filter; -#X msg 140 128 clear; -#X text 14 330 see also:; -#X obj 93 329 hip~; -#X obj 138 329 bp~; -#X obj 175 329 vcf~; -#X obj 220 329 bob~; -#X obj 183 155 noise~; -#X obj 183 241 output~; -#X obj 183 201 lop~ 100; -#X text 254 198 The filter is initialized to cut off frequencies above 100 Hz., f 32; -#X obj 314 261 declare -stdpath ./; -#X obj 28 358 biquad~; -#X obj 87 357 slop~, f 7; -#X obj 146 357 cpole~, f 7; -#X obj 208 357 fexpr~; -#X text 264 357 - unfriendly filters; +#X msg 140 135 clear; +#X text 14 346 see also:; +#X obj 93 345 hip~; +#X obj 138 345 bp~; +#X obj 175 345 vcf~; +#X obj 220 345 bob~; +#X obj 183 162 noise~; +#X obj 183 257 output~; +#X obj 183 217 lop~ 100; +#X text 254 214 The filter is initialized to cut off frequencies above 100 Hz., f 32; +#X obj 28 374 biquad~; +#X obj 87 373 slop~, f 7; +#X obj 146 373 cpole~, f 7; +#X obj 208 373 fexpr~; +#X text 264 373 - unfriendly filters; #X obj 7 46 cnv 1 560 1 empty empty empty 8 12 0 13 #000000 #000000 0; #N canvas 796 97 475 266 reference 0; #X obj 9 45 cnv 5 450 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0; @@ -36,12 +35,29 @@ #X text 113 130 float or signal - rolloff frequency.; #X restore 385 13 pd reference; #X text 483 14 <= click; -#X obj 7 312 cnv 1 560 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X text 279 175 <-- set cutoff frequency; -#X text 184 127 <-- reinitialize internal state; -#X text 34 57 [lop~] is a one-pole low pass filter with a specified rolloff frequency. The left inlet is the incoming audio signal. The right inlet is the cutoff frequency in cycles per second. It may be a signal or scalar -- if a scalar \, a slightly faster algorithm is used., f 72; -#X text 362 328 updated for Pd version 0.54; +#X obj 7 328 cnv 1 560 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X text 299 188 <-- set cutoff frequency; +#X text 184 134 <-- reinitialize internal state; +#X text 362 344 updated for Pd version 0.54; +#X obj 239 162 hsl 169 18 100 5000 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; +#X text 25 57 [lop~] is a one-pole low pass filter with a specified rolloff frequency. The left inlet is the incoming audio signal. The right inlet is the cutoff frequency in cycles per second and can take a signal or float - if a float is given as in the example below \, a slightly faster algorithm is used., f 74; +#N canvas 821 143 324 400 signal-cutoff 0; +#X obj 92 125 noise~; +#X obj 92 220 output~; +#X obj 81 322 declare -stdpath ./; +#X obj 92 180 lop~; +#X obj 156 122 *~ 1000; +#X obj 156 146 +~ 1200; +#X text 70 28 Here's an example using a signal input to control the cutoff frequency., f 25; +#X obj 156 98 osc~ 2; +#X connect 0 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 3 1; +#X connect 7 0 4 0; +#X restore 416 280 pd signal-cutoff; #X connect 0 0 11 1; #X connect 3 0 11 0; #X connect 9 0 11 0; #X connect 11 0 10 0; +#X connect 25 0 0 0; diff --git a/doc/5.reference/vcf~-help.pd b/doc/5.reference/vcf~-help.pd index faedaeca..0cfa223b 100644 --- a/doc/5.reference/vcf~-help.pd +++ b/doc/5.reference/vcf~-help.pd @@ -1,32 +1,31 @@ -#N canvas 480 56 608 558 12; +#N canvas 480 36 606 610 12; #X declare -stdpath ./; -#X obj 225 247 sig~; -#X floatatom 225 216 5 0 0 0 - - - 0; -#X floatatom 259 277 5 0 0 0 - - - 0; -#X obj 34 14 vcf~; -#X text 52 484 see also:; -#X obj 130 484 bp~; -#X obj 192 309 vcf~ 1, f 10; -#X text 384 484 updated for Pd version 0.46; -#X text 137 430 (band-pass); -#X text 267 431 (low-pass); -#X text 137 413 real output; -#X text 254 413 imaginary output; -#X obj 164 484 bob~; -#X obj 131 243 noise~; -#X text 114 218 test input; -#X text 303 276 Q; -#X text 274 309 optional argument initializes Q; -#X obj 134 353 output~; -#X obj 259 353 output~; -#X obj 205 484 lop~; -#X obj 245 484 hip~; -#X obj 418 380 declare -stdpath ./; -#X obj 65 520 biquad~; -#X obj 124 519 slop~, f 7; -#X obj 183 519 cpole~, f 7; -#X obj 245 519 fexpr~; -#X text 301 519 - unfriendly filters; +#X floatatom 215 240 8 0 0 0 - - - 0; +#X floatatom 259 337 5 0 0 0 - - - 0; +#X obj 28 14 vcf~; +#X text 12 544 see also:; +#X obj 90 544 bp~; +#X obj 171 369 vcf~ 1, f 13; +#X text 384 544 updated for Pd version 0.46; +#X text 137 490 (band-pass); +#X text 267 491 (low-pass); +#X text 137 473 real output; +#X text 254 473 imaginary output; +#X obj 124 544 bob~; +#X obj 149 308 noise~; +#X text 69 308 test input; +#X text 303 336 Q; +#X text 274 369 optional argument initializes Q; +#X obj 134 413 output~; +#X obj 259 413 output~; +#X obj 165 544 lop~; +#X obj 205 544 hip~; +#X obj 418 440 declare -stdpath ./; +#X obj 25 576 biquad~; +#X obj 84 575 slop~, f 7; +#X obj 143 575 cpole~, f 7; +#X obj 205 575 fexpr~; +#X text 261 575 - unfriendly filters; #X obj 7 43 cnv 1 590 1 empty empty empty 8 12 0 13 #000000 #000000 0; #N canvas 667 114 517 345 reference 0; #X obj 9 42 cnv 5 490 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0; @@ -49,14 +48,19 @@ #X text 86 250 signal - imaginary output (band-pass filtered signal).; #X restore 414 14 pd reference; #X text 512 14 <= click; -#X obj 7 465 cnv 1 590 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 7 525 cnv 1 590 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 76 14 - voltage-controlled band/low-pass filter; -#X text 270 216 resonant frequency in Hz; #X text 25 53 [vcf~] is a resonant band-pass and low-pass filter that takes either a control or an audio signal to set center frequency \, which may thus change continuously in time as in an analog voltage controlled filter (and unlike [bp~] and [lop~] that only take control values). The "Q" or filter sharpness is still only set by control messages. It is more expensive but more powerful than the [bp~] band-pass filter., f 78; #X text 24 146 [vcf~] is implemented as a one-pole complex filter with outlets for the real and imaginary value. These may be used as band-pass and low-pass filter outputs \, or combined to allow other possibilities., f 78; -#X connect 0 0 6 1; -#X connect 1 0 0 0; -#X connect 2 0 6 2; -#X connect 6 0 17 0; -#X connect 6 1 18 0; -#X connect 13 0 6 0; +#X obj 218 213 hsl 169 18 200 2000 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; +#X text 283 240 <-- resonant frequency in Hz; +#X obj 262 308 hsl 169 18 1 20 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; +#X obj 215 271 sig~ 200; +#X connect 0 0 36 0; +#X connect 1 0 5 2; +#X connect 5 0 16 0; +#X connect 5 1 17 0; +#X connect 12 0 5 0; +#X connect 33 0 0 0; +#X connect 35 0 1 0; +#X connect 36 0 5 1; From 058937e570e355665b3fcdc607b378857c43a5f0 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Thu, 27 Jul 2023 05:47:24 -0300 Subject: [PATCH 26/68] nsis: installer updates safer behavior: - the (un)installer refuses to do anything if it finds a currently running Pd(64). - check if there's write permission on target dir before attempting to do anything else. troubleshoot tools: - tool to clear Pd(64) preferences. (only runs at user scope). - tool to set which Pd(64) installation is used to open .pd files (scope can be user or allusers). - also these two tools are included in the uninstaller but here the '.pd' files repair is automatic (you don't have to choose which app). user scope: - admin users can choose to install or run troubleshot tools at user or allusers scope. alternate install: - user can choose to do an alternate install if there is already a default one. it prompts for a short string (like Pd-0.54-0-(alt) to be used to name the install folder, start menu folder, desktop shortcut and uninstall name. Tested to work correctly on WinXp(i386) and Win11(amd64). --- msw/pd.nsi | 654 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 506 insertions(+), 148 deletions(-) diff --git a/msw/pd.nsi b/msw/pd.nsi index 639ce84a..d6d569c1 100644 --- a/msw/pd.nsi +++ b/msw/pd.nsi @@ -11,7 +11,7 @@ ;#################################################### ; -; NOTE: registry settings auto change for the 32bit Pd: +; NOTE: registry settings auto change for the 32bit Pd on a 64bit OS: ; ; SHCTX "Software\${PRODUCT_NAME}" ; turns @@ -67,39 +67,80 @@ Unicode True !define MUI_HEADERIMAGE_BITMAP "small.bmp" !define MUI_HEADERIMAGE_UNBITMAP "small.bmp" -Var INSTDIR_BASE -Var CONTEXT +Var VInstDirBase +Var VContext +Var Vshortpath Var PreUninstallerDisplayName Var PreUninstallerPath Var PreUninstallerUninstallString -var ShowPreviousInstallationDetected +Var ShowPreviousInstallationDetected +Var PdProcess +Var JustForMeShow +Var VProductName +Var Vpdexe +Var Vwishexe +Var Vinstalldir +Var Vusername +Var Showaltinstall +Var Valtinstallbasename +Var Valtinstall +Var Vtempproductname +Var Vtempinstalldir Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "/tmp/${PD_FOLDER}-${PRODUCT_VERSION}.windows-installer.exe" InstallDir "" +; Installer +!define MUI_ABORTWARNING +!insertmacro MUI_PAGE_WELCOME +; License page +!include "/tmp/license_page.nsh" +Page Custom JustForMe JustForMeLeave +Page Custom Troubleshoot TroubleshootLeave +Page Custom PreviousInstallationDetected PreviousInstallationDetectedLeave +Page Custom AltInstall AltInstallLeave +!define MUI_COMPONENTSPAGE_NODESC +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_DIRECTORY +Page Custom WriteAccess WriteAccessLeave +!insertmacro MUI_PAGE_INSTFILES + +; Finish page +!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\${WISH_NAME}" +!define MUI_FINISHPAGE_RUN_PARAMETERS " $Vshortpath\tcl\pd-gui.tcl" +!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\doc\1.manual\index.htm" +!insertmacro MUI_PAGE_FINISH + +; Uninstaller +;!insertmacro MUI_UNPAGE_CONFIRM +UninstPage Custom un.Troubleshoot un.TroubleshootLeave +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_LANGUAGE "English" + ; Take the highest execution level available ; This means that if it's possible to, we become an administrator RequestExecutionLevel highest !macro ONINIT un Function ${un}.onInit - ; avoid silent install for later use with "winget" (Windows package manager) (tested). - SetSilent normal - ; The value of SetShellVarContext detetmines whether SHCTX is HKLM or HKCU - ; and whether SMPROGRAMS refers to all users or just the current user + ReadRegStr $Vusername HKCU "Volatile Environment" "USERNAME" UserInfo::GetAccountType Pop $0 ${If} $0 == "Admin" ; If we're an admin, default to installing to C:\Program Files + ; The value of SetShellVarContext detetmines whether SHCTX is HKLM or HKCU SetShellVarContext all - StrCpy $CONTEXT all - StrCpy $INSTDIR_BASE "$PROGRAMFILES${ARCHI}" + StrCpy $VContext "all" + StrCpy $VInstDirBase "$PROGRAMFILES${ARCHI}" + StrCpy $VProductName "${PRODUCT_NAME}" + StrCpy $JustForMeShow "yes" ${Else} ; If we're just a user, default to installing to ~\AppData\Local SetShellVarContext current - StrCpy $CONTEXT current - StrCpy $INSTDIR_BASE "$LOCALAPPDATA" + StrCpy $VContext "current" + StrCpy $VInstDirBase "$LOCALAPPDATA" + StrCpy $VProductName "${PRODUCT_NAME} ($Vusername)" ${EndIf} ; the installer .exe might be a 32bit app and Windows is treating it ; "as is" but we might need to access the 64bit part of the registry. @@ -111,21 +152,25 @@ RequestExecutionLevel highest ${Endif} ; This only happens in the installer, because the uninstaller already knows INSTDIR ${If} $INSTDIR == "" - ReadRegStr $PreUninstallerPath SHCTX "Software\${PRODUCT_NAME}" "${ARCHI}" - ReadRegStr $PreUninstallerDisplayName SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" - ReadRegStr $PreUninstallerUninstallString SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" - ${If} $PreUninstallerPath != "" - ; If we're already installed show the optional uninstall page: - StrCpy $ShowPreviousInstallationDetected "yes" - ${Endif} - - ${If} ${ARCHI} != "64" - ${AndIf} $INSTDIR_BASE == "$LOCALAPPDATA" - ; use special folder if we are 32bit and on $LOCALAPPDATA - StrCpy $INSTDIR "$INSTDIR_BASE\${PD_FOLDER}${ARCHI}" - ${Else} - StrCpy $INSTDIR "$INSTDIR_BASE\${PD_FOLDER}" - ${Endif} + Call ${un}.SetupStuff + ${Endif} + FunctionEnd + + Function ${un}.SetupStuff + ReadRegStr $PreUninstallerPath SHCTX "Software\$VProductName" "${ARCHI}" + ReadRegStr $PreUninstallerDisplayName SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "DisplayName" + ReadRegStr $PreUninstallerUninstallString SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "UninstallString" + ${If} $PreUninstallerPath != "" + ; If we're already installed show the optional uninstall page: + StrCpy $ShowPreviousInstallationDetected "yes" + ${Endif} + + ${If} ${ARCHI} != "64" + ${AndIf} $VInstDirBase == "$LOCALAPPDATA" + ; use special folder if we are 32bit and on $LOCALAPPDATA + StrCpy $INSTDIR "$VInstDirBase\${PD_FOLDER}${ARCHI}" + ${Else} + StrCpy $INSTDIR "$VInstDirBase\${PD_FOLDER}" ${Endif} FunctionEnd !macroend @@ -134,198 +179,511 @@ RequestExecutionLevel highest !insertmacro ONINIT "" !insertmacro ONINIT "un" -!define MUI_ABORTWARNING +!macro macroA un + Function ${un}RefreshShellIcons + ; By jerome tremblay - april 2003 + System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \ + (0x08000000, 0, 0, 0)' + FunctionEnd -; Welcome page -!insertmacro MUI_PAGE_WELCOME -; License page -!include "/tmp/license_page.nsh" -Page Custom PreviousInstallationDetected PreviousInstallationDetectedLeave -!define MUI_COMPONENTSPAGE_NODESC -!insertmacro MUI_PAGE_COMPONENTS -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES + Function ${un}DoCheckIfRunning + ; perhaps all this can be done with an nsis plugin but we just use nsis as it comes from package managers. + ; https://stackoverflow.com/questions/2003573/how-to-start-a-64-bit-process-from-a-32-bit-process + ; we need this because our installer is a 32bit app and we get access for a 32bit cmd and we can't do 'qprocess' in non native OS arch + ; https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm + + ReadEnvStr $0 COMSPEC + nsExec::ExecToStack '"$0" /c cd %programfiles(x86)%' + Pop $1 + Pop $2 + ${If} $2 == "" + ; we are on a 64bit OS. This will fail only on an 64-bit XP but its a rare OS and we only care about the 32-bit XP. + nsExec::ExecToStack '"$0" /c cd %windir%\sysnative && qprocess $PdProcess' + ${Else} + ; we are on a 32-bit OS. + nsExec::ExecToStack '"$0" /c qprocess $PdProcess' + ${EndIf} + Pop $1 + Pop $2 + ${If} $2 != "No Process exists for $PdProcess$\r$\n" + IfSilent default + HideWindow + MessageBox MB_OK "Refusing to continue. Save your work and quit \ + any running ${PD_FOLDER} app before doing an (un)installation." + default: + quit + ${EndIf} + FunctionEnd -; Finish page -Var SHORTPATH -!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\${WISH_NAME}" -!define MUI_FINISHPAGE_RUN_PARAMETERS " $SHORTPATH\tcl\pd-gui.tcl" -!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\doc\1.manual\index.htm" -!insertmacro MUI_PAGE_FINISH + Function ${un}CheckIfRunning + StrCpy $PdProcess "${PD_FOLDER}.com" + Call ${un}DoCheckIfRunning + StrCpy $PdProcess "${PD_FOLDER}.exe" + Call ${un}DoCheckIfRunning + FunctionEnd -;!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES + Function ${un}AssociatePdFiles + ; Set file ext associations + WriteRegStr SHCTX "Software\Classes\.pd" "" "PureData" + WriteRegStr SHCTX "Software\Classes\PureData" "" "" + WriteRegStr SHCTX "Software\Classes\PureData\DefaultIcon" "" "$Vinstalldir\bin\$Vpdexe" + WriteRegStr SHCTX "Software\Classes\PureData\shell" "" "" + WriteRegStr SHCTX "Software\Classes\PureData\shell\open" "" "" + WriteRegStr SHCTX "Software\Classes\PureData\shell\open\command" "" '"$Vinstalldir\bin\$Vwishexe" "$Vinstalldir\tcl\pd-gui.tcl" "%1"' + ; Set file ext icon + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd" "" "" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithList" "a" "$Vpdexe" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithList" "MRUList" "" + WriteRegBin SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithProgids" "PureData" "0" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\UserChoice" "Progid" "PureData" + ; Refresh Shell Icons + Call ${un}RefreshShellIcons + FunctionEnd -!insertmacro MUI_LANGUAGE "English" + Function ${un}Wipeprefs + DeleteRegKey HKCU "Software\Pure-Data" + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "Pd preferences had been cleared" + quit + FunctionEnd +!macroend -; Function to refresh shell icons -!define SHCNE_ASSOCCHANGED 0x08000000 -!define SHCNF_IDLIST 0 +!insertmacro macroA "" +!insertmacro macroA "un." -Function RefreshShellIcons - ; By jerome tremblay - april 2003 - System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \ - (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' +Function JustForMe + ${If} $JustForMeShow == "yes" + nsDialogs::Create 1018 + Pop $0 + !insertmacro MUI_HEADER_TEXT \ + "User selection" "This section is only aviable for admin users." + ${NSD_CreateLabel} 0 0 100% 40% "Since you are admin you can \ + select to install for all users or just for you.$\r$\n$\r$\n\ + If you select 'Just me' your start menu folder will be named \ + '${PRODUCT_NAME} ($Vusername)'.$\r$\n$\r$\nAlso in the next \ + section there's a tool to set which app opens .pd files. \ + Select here the scope for it." + ${NSD_CreateRadioButton} 0 40% 100% 10% "All users" + Pop $1 + SendMessage $1 ${BM_CLICK} "" "" ; Must select a default + ${NSD_CreateRadioButton} 0 50% 100% 15% "Just me" + Pop $2 + nsDialogs::Show + ${EndIf} FunctionEnd -Function un.RefreshShellIcons - ; By jerome tremblay - april 2003 - System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \ - (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' +Function JustForMeLeave + ${NSD_GetState} $2 $3 + ${If} $3 == ${BST_CHECKED} + StrCpy $ShowPreviousInstallationDetected " " + SetShellVarContext current + StrCpy $VContext "current" + StrCpy $VInstDirBase "$LOCALAPPDATA" + StrCpy $VProductName "${PRODUCT_NAME} ($Vusername)" + Call .SetupStuff + ${Else} + ; we have to do all this again if we change our minds later and came back to here. + StrCpy $ShowPreviousInstallationDetected " " + SetShellVarContext all + StrCpy $VContext "all" + StrCpy $VInstDirBase "$PROGRAMFILES${ARCHI}" + StrCpy $VProductName "${PRODUCT_NAME}" + Call .SetupStuff + ${Endif} FunctionEnd -; start Pd-GUI from the installer (this is to avoid whitespace in path) -; ; make variable $SHORTPATH -Function PdGuiFromInstaller - GetFullPathName /SHORT $SHORTPATH $INSTDIR +Function CheckValidAppFolder + StrCpy $Vpdexe " " + StrCpy $Vwishexe " " + nsDialogs::SelectFolderDialog "Select the Pd(64) app folder to open .pd \ + files.$\r$\nNormally is 'C:\Program files\Pd'" "c:\" + Pop $0 + StrCpy $Vinstalldir "$0" + IfFileExists $0\bin\pd.exe 0 +2 + StrCpy $Vpdexe "pd.exe" + IfFileExists $0\bin\pd64.exe 0 +2 + StrCpy $Vpdexe "pd64.exe" + IfFileExists $0\bin\wish85.exe 0 +2 + StrCpy $Vwishexe "wish85.exe" + IfFileExists $0\bin\wish86.exe 0 +2 + StrCpy $Vwishexe "wish86.exe" FunctionEnd -Function PreviousInstallationDetected -${If} $ShowPreviousInstallationDetected == "yes" +Function DefaultToOpen + loop: + Call CheckValidAppFolder + ${If} $Vpdexe != " " + ${AndIf} $Vwishexe != " " + HideWindow + Call AssociatePdFiles + MessageBox MB_ICONINFORMATION|MB_OK "Successfully set Pd(64) app \ + at '$Vinstalldir' to open .pd files." + quit + ${Else} + MessageBox MB_ICONINFORMATION|MB_RETRYCANCEL "Not a valid Pd \ + or Pd64 app folder. Select a valid one." IDRETRY loop IDCANCEL bye + goto loop + ${Endif} + bye: + quit +FunctionEnd + +Function Troubleshoot nsDialogs::Create 1018 Pop $0 !insertmacro MUI_HEADER_TEXT \ - "Previous Installation" "Select if you are going to uninstall previous installation" - ${NSD_CreateLabel} 0 0 100% 40% "System tells there is already a Pd installation:$\r$\n$\r$\n\ - '$PreUninstallerDisplayName' on '$PreUninstallerPath' $\r$\n$\r$\n\ - If you are going to upgrade or downgrade it is recommended that you run \ - the uninstaller. If not, proceed the installation to a different location" - ${NSD_CreateRadioButton} 0 50% 50% 10% "Run the uninstaller (recommended)" + "Troubleshoot existing installation" "Preferences repair tools." + ${NSD_CreateLabel} 0 0 100% 40% "Sometimes your pre-existing Pd settings \ + (if there are any) can go wrong and the app might not be able to load. You \ + don't have to use this tool unless the app is failing to start. \ + $\r$\n$\r$\nAlso there's a tool to set which app is the default to \ + open .pd files." + + ${NSD_CreateRadioButton} 0 40% 100% 10% "Continue (normal installation)" Pop $1 SendMessage $1 ${BM_CLICK} "" "" ; Must select a default - ${NSD_CreateRadioButton} 0 60% 50% 10% "continue" + ${NSD_CreateRadioButton} 0 55% 100% 10% "Clear Pd preferences and exit." Pop $2 + ${NSD_CreateRadioButton} 0 70% 100% 10% "Repair which Pd(64) defaults to \ + open .pd files and exit" + Pop $3 nsDialogs::Show -${EndIf} FunctionEnd -Function PreviousInstallationDetectedLeave -${NSD_GetState} $1 $3 -${If} $3 == ${BST_CHECKED} - ; run the uninstaller - ; https://stackoverflow.com/questions/4676898/how-to-execute-an-nsis-uninstaller-from-within-an-another-nsis-installer-and-wai +Function TroubleshootLeave + ${NSD_GetState} $2 $4 + ${If} $4 == ${BST_CHECKED} + Call Wipeprefs + ${EndIf} + ${NSD_GetState} $3 $4 + ${If} $4 == ${BST_CHECKED} + Call DefaultToOpen + ${EndIf} +FunctionEnd + +Function PreviousInstallationDetected + ; do an early warning if we find Pd is running + Call CheckIfRunning + ${If} $ShowPreviousInstallationDetected == "yes" + nsDialogs::Create 1018 + Pop $0 + !insertmacro MUI_HEADER_TEXT \ + "Previous Installation" "Select if you are going to uninstall \ + previous installation" + ${NSD_CreateLabel} 0 0 100% 40% "System tells there is already a \ + Pd installation:$\r$\n$\r$\n \ + '$PreUninstallerDisplayName' on '$PreUninstallerPath' $\r$\n$\r$\n\ + If you are going to upgrade or downgrade it is recommended that you run \ + the uninstaller. If not, install as an alternate app or proceed the \ + installation to a different location" + ${NSD_CreateRadioButton} 0 40% 50% 10% "Run the uninstaller (recommended)" + Pop $1 + SendMessage $1 ${BM_CLICK} "" "" ; Must select a default + ${NSD_CreateRadioButton} 0 55% 50% 10% "Install as an alternate app" + Pop $2 + ${NSD_CreateRadioButton} 0 70% 50% 10% "Continue" + Pop $3 + nsDialogs::Show + ${EndIf} +FunctionEnd + +Function DoUninstall ExecWait '"$PreUninstallerUninstallString" /S _?=$PreUninstallerPath' - IfErrors uninstaller_canceled - ; if all went good this file is gone - IfFileExists \ - "$PreUninstallerPath\bin\${PDEXE}" uninstaller_canceled uninstaller_done - uninstaller_done: - ; the uninstaller does not delete itself when runned via ExecWait Delete "$PreUninstallerUninstallString" RMDir "$PreUninstallerPath" ; don't show the uninstall window if you hit "back" StrCpy $ShowPreviousInstallationDetected "no" - uninstaller_canceled: -${EndIf} FunctionEnd -SectionGroup /e "${PRODUCT_NAME}" +Function AltInstall + ${If} $Showaltinstall == "yes" + nsDialogs::Create 1018 + Pop $0 + !insertmacro MUI_HEADER_TEXT \ + "Alternate installation" "Make an 'alternate' installation." + ${NSD_CreateLabel} 0 0 100% 40% "This installation will be an \ + alternate install.$\r$\n$\r$\nThe start menu folder, desktop \ + icon and uninstaller will be named with the following string. \ + You can change it but is recommnded that you keep it short." + StrCpy $1 "${PD_FOLDER}-${PDVER}-(alt)" + ${NSD_CreateText} 0 40% 50% 10% "$1" + Pop $Valtinstallbasename + nsDialogs::Show + ${EndIf} +FunctionEnd + +Function AltInstallLeave + ${If} $Showaltinstall == "yes" + ${NSD_GetText} $Valtinstallbasename $0 + StrCpy $Vtempproductname "$VProductName" + StrCpy $Vtempinstalldir "$INSTDIR" + StrCpy $VProductName "$0" + StrCpy $INSTDIR "$VInstDirBase\$VProductName" + StrCpy $Valtinstall "yes" + ${EndIf} +FunctionEnd +Function UndoAltInstall + ${If} $Valtinstall == "yes" + StrCpy $VProductName "$Vtempproductname" + StrCpy $INSTDIR "$Vtempinstalldir" + StrCpy $Valtinstall "no" + ${EndIf} + StrCpy $Showaltinstall "no" +FunctionEnd + +Function PreviousInstallationDetectedLeave + ${NSD_GetState} $1 $4 + ${If} $4 == ${BST_CHECKED} + Call UndoAltInstall + Call DoUninstall + ${EndIf} + ${NSD_GetState} $2 $4 + ${If} $4 == ${BST_CHECKED} + StrCpy $Showaltinstall "yes" + ${EndIf} + ${NSD_GetState} $3 $4 + ${If} $4 == ${BST_CHECKED} + Call UndoAltInstall + ${EndIf} +FunctionEnd + +;https://nsis.sourceforge.io/Go_to_a_NSIS_page +Function RelGotoPage + IntCmp $R9 0 0 Move Move + StrCmp $R9 "X" 0 Move + StrCpy $R9 "120" + + Move: + SendMessage $HWNDPARENT "0x408" "$R9" "" +FunctionEnd + +Function WriteAccess + IfSilent skip + StrCpy $0 " " + CreateDirectory "$INSTDIR\chk" + WriteINIStr "$INSTDIR\chk\writecheck.ini" section1 check "yes" + IfFileExists "$INSTDIR\chk\writecheck.ini" 0 +2 + StrCpy $0 "yes" + ${If} $0 == "yes" + Delete "$INSTDIR\chk\writecheck.ini" + RmDir "$INSTDIR\chk\" + return + ${Else} + MessageBox MB_ICONINFORMATION|MB_RETRYCANCEL "We don't have \ + permissions to write to folder: '$INSTDIR'. Please select a writtable \ + folder." IDRETRY loop IDCANCEL bye + goto loop + ${Endif} + bye: + quit + loop: + StrCpy $R9 -1 ;Relative page number. + Call RelGotoPage + skip: +FunctionEnd + +Function WriteAccessLeave +FunctionEnd + +SectionGroup /e "${PRODUCT_NAME}" Section "Application" PureData + ; When on silent installs custom pages are skipped but we need to \ + ; ckeck if Pd is running and uninstall previous installation. + IfSilent x_silent x_nosilent + x_silent: + Call CheckIfRunning + ${If} $ShowPreviousInstallationDetected == "yes" + Call DoUninstall + ${EndIf} + x_nosilent: SectionIn RO !include "/tmp/install_files_list.nsh" + ; write ini file + WriteINIStr "$INSTDIR\uninst.ini" section1 vname "$VProductName" + WriteINIStr "$INSTDIR\uninst.ini" section1 shellcontext "$VContext" SectionEnd Section "Create Startmenu entry" StartMenu + WriteINIStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" + WriteINIStr "$INSTDIR\uninst.ini" section1 uninstallstartmenu "yes" ; ugly hack so the app shows up in "recently added" - ; should have been one "SetShellVarContext $CONTEXT" but it refuses to compile - ${If} $CONTEXT == "all" + ; should have been one "SetShellVarContext $VContext" but it refuses to compile + ${If} $VContext == "all" SetShellVarContext all ${Else} SetShellVarContext current ${EndIf} - WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" - CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}\" - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" "" "%SYSTEMROOT%\system32\shell32.dll" 14 - CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\bin\${WISH_NAME}" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\${PDEXE}" 0 + CreateDirectory "$SMPROGRAMS\$VProductName\" + CreateShortCut "$SMPROGRAMS\$VProductName\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" "" "%SYSTEMROOT%\system32\shell32.dll" 14 + CreateShortCut "$SMPROGRAMS\$VProductName\$VProductName.lnk" "$INSTDIR\bin\${WISH_NAME}" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\${PDEXE}" 0 SectionEnd Section "Create Desktop Shortcut" DesktopShortcut - CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\bin\${WISH_NAME}" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\${PDEXE}" 0 + CreateShortCut "$Desktop\$VProductName.lnk" "$INSTDIR\bin\${WISH_NAME}" '"$INSTDIR\tcl\pd-gui.tcl"' "$INSTDIR\bin\${PDEXE}" 0 + WriteINIStr "$INSTDIR\uninst.ini" section1 uninstalldesktopshortcut "yes" SectionEnd Section "Open .pd-files with Pd" SetFileAssociations - ; Set file ext associations - WriteRegStr SHCTX "Software\Classes\.pd" "" "PureData" - WriteRegStr SHCTX "Software\Classes\PureData" "" "" - WriteRegStr SHCTX "Software\Classes\PureData\DefaultIcon" "" "$INSTDIR\bin\${PDEXE}" - WriteRegStr SHCTX "Software\Classes\PureData\shell" "" "" - WriteRegStr SHCTX "Software\Classes\PureData\shell\open" "" "" - WriteRegStr SHCTX "Software\Classes\PureData\shell\open\command" "" '$INSTDIR\bin\${WISH_NAME} "$INSTDIR\tcl\pd-gui.tcl" "%1"' - ; Set file ext icon - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd" "" "" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithList" "a" "${PDEXE}" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithList" "MRUList" "" - WriteRegBin SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\OpenWithProgids" "PureData" "0" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd\UserChoice" "Progid" "PureData" - ; Refresh Shell Icons - Call RefreshShellIcons + StrCpy $Vpdexe "${PDEXE}" + StrCpy $Vwishexe "${WISH_NAME}" + StrCpy $Vinstalldir "$INSTDIR" + Call AssociatePdFiles + WriteINIStr "$INSTDIR\uninst.ini" section1 uninstallfileassociation "yes" SectionEnd Section - ; make variable $SHORTPATH - Call PdGuiFromInstaller + ; make variable $Vshortpath + GetFullPathName /SHORT $Vshortpath $INSTDIR SectionEnd - SectionGroupEnd Section -Post - WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr SHCTX "Software\${PRODUCT_NAME}" "${ARCHI}" $INSTDIR + ${If} $Valtinstall != "yes" + WriteRegStr SHCTX "Software\$VProductName" "${ARCHI}" $INSTDIR + ${EndIf} ; These registry entries are necessary for the program to show up in the Add/Remove programs dialog - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" "$(^Name)" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayIcon" "$INSTDIR\bin\${PDEXE}" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayVersion" "${PRODUCT_VERSION}" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" - WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "Publisher" "${PRODUCT_PUBLISHER}" - - ;WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "NoModify" 1 - ;WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "NoRepair" 1 - - ${GetSize} "$INSTDIR" "/S=0M" $0 $1 $2 - IntOp $3 $0 * 1000 - IntFmt $4 "0x%08X" $3 - WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "EstimatedSize" "$4" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "DisplayName" "$VProductName ${PRODUCT_VERSION}" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "UninstallString" "$INSTDIR\uninst.exe" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "ModifyPath" "$INSTDIR\uninst.exe" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "DisplayIcon" "$INSTDIR\bin\${PDEXE}" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "Publisher" "${PRODUCT_PUBLISHER}" + + ;WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "NoModify" 1 + ;WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "NoRepair" 1 + + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 + IntFmt $0 "0x%08X" $0 + WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" "EstimatedSize" "$0" SectionEnd Function un.onUninstSuccess + IfSilent skip HideWindow - MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed \ + from your computer." + skip: + quit FunctionEnd Function un.sure - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 + IfSilent skip + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you \ + want to completely remove $(^Name) and all of its components?" IDYES +2 Abort + skip: FunctionEnd -Section Uninstall - Call un.sure - Delete "$INSTDIR\${PRODUCT_NAME}.url" - Delete "$INSTDIR\uninst.exe" - Delete "$DESKTOP\${PRODUCT_NAME}.lnk" +Function un.dirty + IfSilent skip + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "We could not find '$INSTDIR\uninst.ini' \ + so we could not remove the startup program folder and other Windows registry \ + stuff. We could only delete '$INSTDIR'." + skip: +FunctionEnd - Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}\Website.lnk" - Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" - RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}\" +Function un.deletefiles !include "/tmp/uninstall_files_list.nsh" + Delete "$INSTDIR\${PRODUCT_NAME}.url" + Delete "$INSTDIR\uninst.ini" + Delete "$INSTDIR\uninst.exe" + RmDir "$INSTDIR" +FunctionEnd - ; file ext association - ;DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" +Function un.Troubleshoot + nsDialogs::Create 1018 + Pop $0 + !insertmacro MUI_HEADER_TEXT \ + "Troubleshoot existing installation" "Preferences repair tools." + ${NSD_CreateLabel} 0 0 100% 40% "Sometimes your ${PD_FOLDER} \ + preferences can go wrong and the app might not be able to load. \ + $\r$\n$\r$\nAlso there's a tool to repair .pd files associations \ + to open with this ${PD_FOLDER} installation." - DeleteRegKey SHCTX "Software\${PRODUCT_NAME}" - DeleteRegKey SHCTX "Software\Classes\.pd" - DeleteRegKey SHCTX "Software\Classes\PureData" + ${NSD_CreateRadioButton} 0 40% 100% 10% "Uninstall the app" + Pop $1 + SendMessage $1 ${BM_CLICK} "" "" ; Must select a default + ${NSD_CreateRadioButton} 0 55% 100% 10% "Clear Pd preferences and exit." + Pop $2 + ${NSD_CreateRadioButton} 0 70% 100% 10% "Repair .pd files associations \ + and exit" + Pop $3 + GetDlgItem $R0 $HWNDPARENT 1 + SendMessage $R0 ${WM_SETTEXT} 0 "STR:Next" + nsDialogs::Show +FunctionEnd - ; file ext icon - DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd" - DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +Function un.TroubleshootLeave + ${NSD_GetState} $2 $4 + ${If} $4 == ${BST_CHECKED} + Call un.Wipeprefs + ${EndIf} + ${NSD_GetState} $3 $4 + ${If} $4 == ${BST_CHECKED} + ReadINIStr $0 "$INSTDIR\uninst.ini" section1 shellcontext + ${If} "$0" != "all" + SetShellVarContext current + ${EndIf} + StrCpy $Vpdexe "${PDEXE}" + StrCpy $Vwishexe "${WISH_NAME}" + StrCpy $Vinstalldir "$INSTDIR" + Call un.AssociatePdFiles + MessageBox MB_ICONINFORMATION|MB_OK "Successfully set the app \ + at '$Vinstalldir' to open .pd files." + quit + ${EndIf} +FunctionEnd - ; Refresh Shell Icons - Call un.RefreshShellIcons +Section Uninstall - SetAutoClose true -SectionEnd + ; let the uninstaller quit if Pd is running + Call un.CheckIfRunning + IfSilent skip + Call un.sure + skip: + StrCpy $0 " " + IfFileExists "$INSTDIR\uninst.ini" 0 +2 + StrCpy $0 "yes" + ${If} $0 == "yes" + ; read ini file + ReadINIStr $VProductName "$INSTDIR\uninst.ini" section1 vname + ReadINIStr $0 "$INSTDIR\uninst.ini" section1 shellcontext + ${If} "$0" != "all" + SetShellVarContext current + ${EndIf} + ReadINIStr $0 "$INSTDIR\uninst.ini" section1 uninstallstartmenu + ${If} "$0" == "yes" + Delete "$SMPROGRAMS\$VProductName\Website.lnk" + Delete "$SMPROGRAMS\$VProductName\$VProductName.lnk" + RMDir "$SMPROGRAMS\$VProductName" + ${EndIf} + ReadINIStr $0 "$INSTDIR\uninst.ini" section1 uninstalldesktopshortcut + ${If} "$0" == "yes" + Delete "$DESKTOP\$VProductName.lnk" + ${EndIf} + ReadINIStr $0 "$INSTDIR\uninst.ini" section1 uninstallfileassociation + ${If} "$0" == "yes" + DeleteRegKey SHCTX "Software\Classes\.pd" + DeleteRegKey SHCTX "Software\Classes\PureData" + ; file ext icon + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pd" + ${EndIf} + Call un.deletefiles + Call un.RefreshShellIcons + DeleteRegKey SHCTX "Software\$VProductName" + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\$VProductName" + SetAutoClose true + ${Else} + ; no ini file. dirty uninstall + Call un.deletefiles + Call un.dirty + Call un.RefreshShellIcons + SetAutoClose true + ${EndIf} +SectionEnd \ No newline at end of file From 06d66324e5c89e9dd1b4388c10ff8522d5b8acd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 1 Aug 2023 23:09:52 +0200 Subject: [PATCH 27/68] build-nsi: unmangle paths when running on MinGW See:: https://github.com/pure-data/pure-data/pull/2067#issuecomment-1660861258 --- msw/build-nsi.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/msw/build-nsi.sh b/msw/build-nsi.sh index 544d012a..d4b935b5 100755 --- a/msw/build-nsi.sh +++ b/msw/build-nsi.sh @@ -220,10 +220,15 @@ find "${PDWINDIR}" -type d -printf 'RMDir "$INSTDIR/%P"\n' \ echo "!insertmacro MUI_PAGE_LICENSE \"${PDWINDIR}/LICENSE.txt\"" \ > "${LICENSEFILE}" + +# if we are on mingw/cygwin, we have to unmangle the directories +WWORKDIR=$(cygpath -m "${WORKDIR}" 2>/dev/null || echo "${WORKDIR}") +WOUTDIR=$(cygpath -m "${OUTDIR}" 2>/dev/null || echo "${OUTDIR}") + # uninstall/license/... information into pd.nsi script cat "${SCRIPTDIR}/pd.nsi" | sed \ - -e "s|include \"/tmp/|include \"${WORKDIR}/|" \ - -e "s|OutFile \"/tmp/|OutFile \"${OUTDIR}/|" \ + -e "s|include \"/tmp/|include \"${WWORKDIR}/|" \ + -e "s|OutFile \"/tmp/|OutFile \"${WOUTDIR}/|" \ > "${NSIFILE}" # check if we have nsis compiler From e8f4e8b75c35673f5789062a9b3e5135116e78e7 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Wed, 2 Aug 2023 08:56:20 -0300 Subject: [PATCH 28/68] build-nsi: fine tune unmangle paths when running on MinGW Closes: #2073 --- msw/build-nsi.sh | 11 ++++------- msw/pd.nsi | 11 +++-------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/msw/build-nsi.sh b/msw/build-nsi.sh index d4b935b5..562a9102 100755 --- a/msw/build-nsi.sh +++ b/msw/build-nsi.sh @@ -220,15 +220,12 @@ find "${PDWINDIR}" -type d -printf 'RMDir "$INSTDIR/%P"\n' \ echo "!insertmacro MUI_PAGE_LICENSE \"${PDWINDIR}/LICENSE.txt\"" \ > "${LICENSEFILE}" - # if we are on mingw/cygwin, we have to unmangle the directories -WWORKDIR=$(cygpath -m "${WORKDIR}" 2>/dev/null || echo "${WORKDIR}") -WOUTDIR=$(cygpath -m "${OUTDIR}" 2>/dev/null || echo "${OUTDIR}") +WOUTDIR=$(cygpath -m "${OUTDIR}\\" || echo "${OUTDIR}/" | sed 's|/|\\\\|g') -# uninstall/license/... information into pd.nsi script +# Outfile into pd.nsi script cat "${SCRIPTDIR}/pd.nsi" | sed \ - -e "s|include \"/tmp/|include \"${WWORKDIR}/|" \ - -e "s|OutFile \"/tmp/|OutFile \"${WOUTDIR}/|" \ + -e "s|OutFile \"/tmp/|OutFile \"${WOUTDIR}|" \ > "${NSIFILE}" # check if we have nsis compiler @@ -265,4 +262,4 @@ else error "(files are not cleaned up so you can inspect them)" exit 1 fi -cleanup 0 +cleanup 0 \ No newline at end of file diff --git a/msw/pd.nsi b/msw/pd.nsi index d6d569c1..8218fa03 100644 --- a/msw/pd.nsi +++ b/msw/pd.nsi @@ -1,10 +1,5 @@ ; -; to make this work outside of Miller's machines (and on Windows) create a 'C:\tmp' dir and -; remove all occurrences of '/tmp/' except on : ; -; "OutFile "/tmp/pd-${PRODUCT_VERSION}.windows-installer.exe" -; - ; https://stackoverflow.com/questions/36185539/can-i-get-nsis-to-make-a-single-installer-that-handles-local-deployment-and-syst ; ./build-nsi.sh G:/gitportable/nsis/pd-0.53.1 0.53.1 @@ -95,7 +90,7 @@ InstallDir "" !define MUI_ABORTWARNING !insertmacro MUI_PAGE_WELCOME ; License page -!include "/tmp/license_page.nsh" +!include "license_page.nsh" Page Custom JustForMe JustForMeLeave Page Custom Troubleshoot TroubleshootLeave Page Custom PreviousInstallationDetected PreviousInstallationDetectedLeave @@ -498,7 +493,7 @@ SectionGroup /e "${PRODUCT_NAME}" ${EndIf} x_nosilent: SectionIn RO - !include "/tmp/install_files_list.nsh" + !include "install_files_list.nsh" ; write ini file WriteINIStr "$INSTDIR\uninst.ini" section1 vname "$VProductName" WriteINIStr "$INSTDIR\uninst.ini" section1 shellcontext "$VContext" @@ -589,7 +584,7 @@ Function un.dirty FunctionEnd Function un.deletefiles - !include "/tmp/uninstall_files_list.nsh" + !include "uninstall_files_list.nsh" Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.ini" Delete "$INSTDIR\uninst.exe" From a8ef17b56b57c8fbf7a97e7022b9cdd5b728121d Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Thu, 3 Aug 2023 03:51:31 -0300 Subject: [PATCH 29/68] NSIS: tell msys2 users that they have to build with a 32bit nsis. --- INSTALL.txt | 3 +-- doc/1.manual/x6.htm | 11 +++++------ msw/pd.nsi | 7 +++++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/INSTALL.txt b/INSTALL.txt index e11237de..229a68f1 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -336,8 +336,7 @@ Install git if you want to clone the Pd sources from Github, etc: and/or the nsis installer tool if you want to build the Pd Windows installer: - # 64 bit - pacman -S mingw-w64-x86_64-nsis + (Currently we only support 32bit installers) # 32 bit pacman -S mingw-w64-i686-nsis diff --git a/doc/1.manual/x6.htm b/doc/1.manual/x6.htm index 17ae174f..32ac1fc4 100644 --- a/doc/1.manual/x6.htm +++ b/doc/1.manual/x6.htm @@ -9,7 +9,7 @@ - + @@ -26,7 +26,7 @@

Pd Manual chapter 6: Installing from source.

back to table of contents

-

+

Pd is built on the commandline using traditional Unix-style tools. The source distribution comes with two build systems:

@@ -314,15 +314,14 @@

6.5. Windows

pacman -S mingw-w64-i686-toolchain mingw-w64-i686-clang \ make autoconf automake libtool \ mingw-w64-i686-gettext - +

Install git if you want to clone the Pd sources from Github, etc:

pacman -S git

and/or the nsis installer tool if you want to build the Pd Windows installer:

-
# 64 bit
-pacman -S mingw-w64-x86_64-nsis
+
(Currently we only support 32bit installers)
 
 # 32 bit
 pacman -S mingw-w64-i686-nsis
@@ -463,7 +462,7 @@

6.10. Reporting Bugs



- back to table of contents + back to table of contents

diff --git a/msw/pd.nsi b/msw/pd.nsi index 8218fa03..916e0451 100644 --- a/msw/pd.nsi +++ b/msw/pd.nsi @@ -1,4 +1,11 @@ +; IMPORTANT NOTICE TO MSYS2 USERS: ; +; currently we only support building with 32bit NSIS. +; so use the mingw32/mingw-w64-i686-nsis package from pacman and +; build from a MINGW32 shell. +; this could change in the future but for now we keep in sync with nsis +; that comes in package managers for Debian and Fedora (possibly others) +; which are 32bit nsis. ; ; https://stackoverflow.com/questions/36185539/can-i-get-nsis-to-make-a-single-installer-that-handles-local-deployment-and-syst ; ./build-nsi.sh G:/gitportable/nsis/pd-0.53.1 0.53.1 From b0e8ab48bb5296101b7c1bc3795df73d597d7e14 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Thu, 3 Aug 2023 07:45:08 -0300 Subject: [PATCH 30/68] NSIS: use 'tasklist' instead of 'qprocess'. --- INSTALL.txt | 3 ++- doc/1.manual/x6.htm | 3 ++- msw/pd.nsi | 24 ++++-------------------- 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/INSTALL.txt b/INSTALL.txt index 229a68f1..e11237de 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -336,7 +336,8 @@ Install git if you want to clone the Pd sources from Github, etc: and/or the nsis installer tool if you want to build the Pd Windows installer: - (Currently we only support 32bit installers) + # 64 bit + pacman -S mingw-w64-x86_64-nsis # 32 bit pacman -S mingw-w64-i686-nsis diff --git a/doc/1.manual/x6.htm b/doc/1.manual/x6.htm index 32ac1fc4..371754a8 100644 --- a/doc/1.manual/x6.htm +++ b/doc/1.manual/x6.htm @@ -321,7 +321,8 @@

6.5. Windows

and/or the nsis installer tool if you want to build the Pd Windows installer:

-
(Currently we only support 32bit installers)
+
# 64 bit
+pacman -S mingw-w64-x86_64-nsis
 
 # 32 bit
 pacman -S mingw-w64-i686-nsis
diff --git a/msw/pd.nsi b/msw/pd.nsi index 916e0451..2295bb7b 100644 --- a/msw/pd.nsi +++ b/msw/pd.nsi @@ -1,14 +1,7 @@ -; IMPORTANT NOTICE TO MSYS2 USERS: ; -; currently we only support building with 32bit NSIS. -; so use the mingw32/mingw-w64-i686-nsis package from pacman and -; build from a MINGW32 shell. -; this could change in the future but for now we keep in sync with nsis -; that comes in package managers for Debian and Fedora (possibly others) -; which are 32bit nsis. ; ; https://stackoverflow.com/questions/36185539/can-i-get-nsis-to-make-a-single-installer-that-handles-local-deployment-and-syst -; ./build-nsi.sh G:/gitportable/nsis/pd-0.53.1 0.53.1 +; ./build-nsi.sh -o "c:/tmp" G:/gitportable/nsis/pd-0.53.1 0.53.1 ;#################################################### @@ -190,24 +183,14 @@ RequestExecutionLevel highest Function ${un}DoCheckIfRunning ; perhaps all this can be done with an nsis plugin but we just use nsis as it comes from package managers. - ; https://stackoverflow.com/questions/2003573/how-to-start-a-64-bit-process-from-a-32-bit-process - ; we need this because our installer is a 32bit app and we get access for a 32bit cmd and we can't do 'qprocess' in non native OS arch - ; https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm ReadEnvStr $0 COMSPEC - nsExec::ExecToStack '"$0" /c cd %programfiles(x86)%' + nsExec::ExecToStack '"$0" /c tasklist | find /I "$PdProcess"' Pop $1 Pop $2 ${If} $2 == "" - ; we are on a 64bit OS. This will fail only on an 64-bit XP but its a rare OS and we only care about the 32-bit XP. - nsExec::ExecToStack '"$0" /c cd %windir%\sysnative && qprocess $PdProcess' + goto good ${Else} - ; we are on a 32-bit OS. - nsExec::ExecToStack '"$0" /c qprocess $PdProcess' - ${EndIf} - Pop $1 - Pop $2 - ${If} $2 != "No Process exists for $PdProcess$\r$\n" IfSilent default HideWindow MessageBox MB_OK "Refusing to continue. Save your work and quit \ @@ -215,6 +198,7 @@ RequestExecutionLevel highest default: quit ${EndIf} + good: FunctionEnd Function ${un}CheckIfRunning From 8d049fba4b7c357bd5d3e13418cf383d89889e89 Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 25 Aug 2023 14:07:44 -0300 Subject: [PATCH 31/68] improve help file of iemguis and mention how 'init' works as a state saving mechanism --- doc/5.reference/bng-help.pd | 5 ++- doc/5.reference/delay-help.pd | 79 ++++++++++++++++++++++----------- doc/5.reference/nbx-help.pd | 6 ++- doc/5.reference/radio-help.pd | 6 ++- doc/5.reference/sliders-help.pd | 6 ++- doc/5.reference/toggle-help.pd | 6 ++- 6 files changed, 76 insertions(+), 32 deletions(-) diff --git a/doc/5.reference/bng-help.pd b/doc/5.reference/bng-help.pd index 02690eed..c3908592 100644 --- a/doc/5.reference/bng-help.pd +++ b/doc/5.reference/bng-help.pd @@ -385,13 +385,16 @@ #X connect 23 0 4 0; #X connect 24 0 1 0; #X restore 165 212 pd label; -#N canvas 896 171 425 339 init 0; +#N canvas 896 171 442 454 init 0; #X msg 174 197 init \$1; #X obj 174 165 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1; #X obj 174 240 bng 30 250 50 1 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 48 29 The 'init' message takes a float and sets to 'init mode' (if different than zero) or 'no init' (if equal to zero - the default value)., f 48; #X text 48 84 When in 'init mode' \, the bang GUI is activated when loading the patch \, in the same way as a loadbang object., f 48; #X obj 174 288 print bng-init; +#X text 185 394 see also:; +#X obj 263 393 loadbang; +#X text 49 334 The init message is actually a state saving mechanism for most iemguis \, but that is not pertinent in this case., f 44; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 2 0 5 0; diff --git a/doc/5.reference/delay-help.pd b/doc/5.reference/delay-help.pd index 46d78294..fb0d879d 100644 --- a/doc/5.reference/delay-help.pd +++ b/doc/5.reference/delay-help.pd @@ -1,19 +1,15 @@ -#N canvas 478 23 706 702 12; +#N canvas 437 23 706 648 12; #X obj 24 11 delay; #X obj 25 36 del; #X floatatom 233 462 5 0 0 0 - - - 0; #X msg 92 271 stop; -#X text 14 672 see also:; -#X obj 138 672 timer; -#X obj 90 672 metro; +#X text 14 612 see also:; +#X obj 138 612 timer; +#X obj 90 612 metro; #X obj 64 270 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X text 491 672 updated for Pd version 0.45; +#X text 491 612 updated for Pd version 0.45; #X obj 117 491 delay 1000 1 msec; #X text 251 508 - tempo (float) and time unit (symbol) as in "tempo" message; -#X obj 194 591 delay 1 60 permin; -#X obj 346 569 delay 1 1 sec; -#X obj 516 569 delay 1 44100 samp; -#X obj 516 593 delay 44100 1 samp; #X msg 162 325 tempo 0.5 msec; #X floatatom 117 325 5 0 0 0 - - - 0; #X msg 117 298 1000; @@ -22,13 +18,11 @@ #X text 326 389 same as 1 msec \, so '1000' is a second.; #X text 340 358 this is the same as above.; #X text 261 203 These symbols can also be preceded by "per" (as in "permin" \, "permsec" \, etc.) In this case \, 60 permin means 1/60 min (hence \, the same as 'BPM')., f 50; -#X obj 346 593 delay 2 2 persec; -#X obj 346 616 delay 0.0166667 1 min; #X text 19 270 start; #X text 132 270 cancel the delay; #X text 156 297 set delay time and start; #X msg 188 389 tempo 0.001 second; -#X obj 185 672 text sequence; +#X obj 185 612 text sequence; #X text 69 10 - send a bang message after a time delay; #X text 206 414 Note that if the tempo is changed while the delay is in progress \, the change takes effect to the remaining fraction of the delay., f 65; #X obj 8 62 cnv 1 690 1 empty empty empty 8 12 0 13 #000000 #000000 0; @@ -57,29 +51,60 @@ #X text 123 268 3) symbol - time unit (default 'msec')., f 55; #X restore 533 34 pd reference; #X text 631 35 <= click; -#X text 33 563 A more traditionally musical way to set a one-second delay is "delay 1" with "tempo 60 permin"., f 21; -#X text 351 541 other ways to get a one second delay; -#X text 535 615 (sample-rate dependent), f 12; #X text 276 460 set delay time (only takes effect at the next tempo).; #X text 20 135 Delay times are in units of 1 millisecond by default \, but you can change this with the second and third argument or with a "tempo" message (as in [timer] \, [metro] and [text sequence]) \, which set a tempo value and a time unit symbol. Possible symbols are:, f 94; -#X obj 290 672 pipe; +#X obj 290 612 pipe; #X text 93 184 - millisecond (msec for short) \; - seconds (sec) \; - minutes (min) \; - samples (samp), f 32; #X text 401 252 'samp' depends on the sample rate the patch is running, f 28; -#X obj 8 657 cnv 1 690 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X obj 117 520 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X obj 194 562 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; -#X obj 194 619 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 8 597 cnv 1 690 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 117 550 bng 25 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 20 75 The [delay] object outputs a bang after a given delay time (via argument or right inlet). A bang starts the delay. A float specifies the time delay and starts it. If the delay is running and scheduled to output \, sending a bang or a float cancels the previous setting and reschedules the output., f 94; #X text 247 491 <-- creation arguments: - delay time (float); #X text 59 36 <-- abbreviation; +#N canvas 514 198 736 437 examples 0; +#X obj 131 169 delay 1 60 permin; +#X obj 49 328 delay 1 1 sec; +#X obj 527 172 delay 1 44100 samp; +#X obj 153 328 delay 2 2 persec; +#X obj 277 328 delay 0.0166667 1 min; +#X obj 131 116 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 131 203 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X text 26 21 Here's a more traditionally musical way to set a one-second delay by using a "bpm" setting. So we have "tempo 60 permin" and "delay 1".; +#X msg 183 129 tempo \$1 permin; +#X floatatom 183 96 5 0 0 0 - - - 0; +#X text 224 96 change bpm; +#X text 55 237 Now for other ways to get a one second delay; +#X obj 153 275 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 49 378 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 153 378 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 277 378 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 527 124 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X text 481 22 Here we have yet another way yo set a one second delay \, but it depends on the sample-rate that Pd is running. We're then assuming a 44100 samplerate, f 31; +#X obj 527 216 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 527 275 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 527 378 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 527 339 delay 44100 1 samp; +#X connect 0 0 6 0; +#X connect 1 0 13 0; +#X connect 2 0 18 0; +#X connect 3 0 14 0; +#X connect 4 0 15 0; +#X connect 5 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 8 0; +#X connect 12 0 1 0; +#X connect 12 0 3 0; +#X connect 12 0 4 0; +#X connect 16 0 2 0; +#X connect 19 0 21 0; +#X connect 21 0 20 0; +#X restore 562 551 pd examples; #X connect 2 0 9 1; #X connect 3 0 9 0; #X connect 7 0 9 0; -#X connect 9 0 44 0; -#X connect 11 0 46 0; +#X connect 9 0 35 0; +#X connect 11 0 9 0; +#X connect 12 0 9 0; +#X connect 13 0 12 0; #X connect 15 0 9 0; -#X connect 16 0 9 0; -#X connect 17 0 16 0; -#X connect 19 0 9 0; -#X connect 28 0 9 0; -#X connect 45 0 11 0; +#X connect 22 0 9 0; diff --git a/doc/5.reference/nbx-help.pd b/doc/5.reference/nbx-help.pd index 3a4b3756..76d242ad 100644 --- a/doc/5.reference/nbx-help.pd +++ b/doc/5.reference/nbx-help.pd @@ -328,7 +328,7 @@ #X connect 3 0 5 0; #X connect 7 0 3 0; #X restore 173 77 pd size; -#N canvas 906 195 433 296 init 0; +#N canvas 906 195 437 454 init 0; #X msg 162 163 init \$1; #X obj 162 131 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1; #X text 55 22 The init message takes a float and sets to init (if different than zero) or no init (if equal to zero - the default value)., f 46; @@ -336,6 +336,10 @@ #X obj 162 243 print nbx-init; #X obj 162 202 nbx 5 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 12 #dfdfdf #000000 #000000 0 256; #X text 55 69 If in 'init mode' \, when loading the patch \, the objects sends its holding value from when the patch was last saved., f 46; +#X obj 299 407 savestate; +#X text 151 407 see also:; +#X text 41 300 Therefore \, this actually a state saving mechanism and also a "loadbang" feature. But as a savestating mechanism it is limited because it can't work for abstractions. In order to deal with state saving in abstractions you have to rely on the [savestate] object., f 52; +#X obj 229 406 loadbang; #X connect 0 0 5 0; #X connect 1 0 0 0; #X connect 5 0 4 0; diff --git a/doc/5.reference/radio-help.pd b/doc/5.reference/radio-help.pd index c2a18b18..8f1dd411 100644 --- a/doc/5.reference/radio-help.pd +++ b/doc/5.reference/radio-help.pd @@ -400,7 +400,7 @@ #X connect 23 0 1 0; #X connect 24 0 4 0; #X restore 167 221 pd label; -#N canvas 904 91 434 344 init 0; +#N canvas 904 91 445 462 init 0; #X msg 109 183 init \$1; #X obj 109 151 tgl 18 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1; #X text 132 151 init on/off; @@ -408,6 +408,10 @@ #X obj 109 265 print hradio-init; #X obj 109 222 hradio 18 1 1 8 empty empty empty 0 -8 0 10 #dfdfdf #000000 #000000 4; #X text 46 76 If in 'init mode' \, when loading the patch \, the objects sends its holding value from when the patch was last saved., f 46; +#X obj 299 407 savestate; +#X text 151 407 see also:; +#X text 41 300 Therefore \, this actually a state saving mechanism and also a "loadbang" feature. But as a savestating mechanism it is limited because it can't work for abstractions. In order to deal with state saving in abstractions you have to rely on the [savestate] object., f 52; +#X obj 229 406 loadbang; #X connect 0 0 5 0; #X connect 1 0 0 0; #X connect 5 0 4 0; diff --git a/doc/5.reference/sliders-help.pd b/doc/5.reference/sliders-help.pd index bfd91a8b..9ecd57a3 100644 --- a/doc/5.reference/sliders-help.pd +++ b/doc/5.reference/sliders-help.pd @@ -417,7 +417,7 @@ #X connect 23 0 4 0; #X connect 24 0 15 0; #X restore 166 266 pd label; -#N canvas 890 195 433 307 init 0; +#N canvas 803 161 434 463 init 0; #X msg 144 164 init \$1; #X obj 144 132 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1; #X obj 147 203 hsl 128 18 0 127 0 1 empty empty empty 0 -9 0 10 #dfdfdf #000000 #000000 1700 1; @@ -425,6 +425,10 @@ #X obj 144 244 print hsl-init; #X text 46 23 The 'init' message takes a float and sets to 'init mode' (if different than zero) or 'no init' (if equal to zero - the default value)., f 46; #X text 46 74 If in 'init mode' \, when loading the patch \, the objects sends its holding value from when the patch was last saved., f 46; +#X obj 299 407 savestate; +#X text 151 407 see also:; +#X text 41 300 Therefore \, this actually a state saving mechanism and also a "loadbang" feature. But as a savestating mechanism it is limited because it can't work for abstractions. In order to deal with state saving in abstractions you have to rely on the [savestate] object., f 52; +#X obj 229 406 loadbang; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 2 0 4 0; diff --git a/doc/5.reference/toggle-help.pd b/doc/5.reference/toggle-help.pd index bd5de119..d5a69a06 100644 --- a/doc/5.reference/toggle-help.pd +++ b/doc/5.reference/toggle-help.pd @@ -386,13 +386,17 @@ #X connect 21 0 0 0; #X connect 24 0 4 0; #X restore 165 212 pd label; -#N canvas 855 201 424 388 init 0; +#N canvas 855 201 451 511 init 0; #X msg 174 188 init \$1; #X obj 174 156 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1; #X text 52 27 The 'init' message takes a float and sets to 'init mode' (if different than zero) or 'no init' (if equal to zero - the default value)., f 45; #X obj 174 231 tgl 50 1 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 1 1; #X obj 174 305 print tgl-init; #X text 52 78 If in 'init mode' \, when loading the patch \, the objects sends its holding value from when the patch was last saved., f 45; +#X obj 301 464 savestate; +#X text 153 464 see also:; +#X text 43 357 Therefore \, this actually a state saving mechanism and also a "loadbang" feature. But as a savestating mechanism it is limited because it can't work for abstractions. In order to deal with state saving in abstractions you have to rely on the [savestate] object., f 52; +#X obj 231 463 loadbang; #X connect 0 0 3 0; #X connect 1 0 0 0; #X connect 3 0 4 0; From fa58195fd173363834f1e3496ba2792f4d0d7717 Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 25 Aug 2023 14:30:47 -0300 Subject: [PATCH 32/68] closes https://github.com/pure-data/pddp/issues/166 added an example on how to use multiple [savestate] abstractions in a patch --- doc/5.reference/savestate-ex2.pd | 24 ++++----- doc/5.reference/savestate-ex3.pd | 64 ++++++++++++++++++++++++ doc/5.reference/savestate-help.pd | 82 +++++++++++++++++++------------ doc/Makefile.am | 1 + 4 files changed, 127 insertions(+), 44 deletions(-) create mode 100644 doc/5.reference/savestate-ex3.pd diff --git a/doc/5.reference/savestate-ex2.pd b/doc/5.reference/savestate-ex2.pd index 9d3f7848..c0fc0f3b 100644 --- a/doc/5.reference/savestate-ex2.pd +++ b/doc/5.reference/savestate-ex2.pd @@ -1,18 +1,18 @@ -#N canvas 257 57 1095 443 12; +#N canvas 181 57 1095 460 12; #X obj 388 69 savestate; #X text 636 82 This is an abstraction used by the [savestate] help file.; #X listbox 129 100 12 0 0 0 - - - 0; #X listbox 129 124 12 0 0 0 - - - 0; #X text 216 100 freq list; #X text 218 123 amp list; -#X obj 136 290 list; +#X obj 129 290 list; #X obj 195 171 loadbang; #X obj 195 195 t b b; #X obj 129 179 t b l; -#X obj 136 384 outlet; -#X obj 68 292 list; +#X obj 129 384 outlet; +#X obj 61 292 list; #X obj 61 179 t b l; -#X obj 68 386 outlet; +#X obj 61 386 outlet; #X obj 401 325 text define \$0-data; #X obj 213 277 text set \$0-data 0; #X obj 213 250 list prepend amp; @@ -24,14 +24,14 @@ #X obj 388 273 s \$0-set-amp; #X obj 32 45 r \$0-set-amp; #X obj 129 45 r \$0-set-freq; -#X text 636 116 This abstraction is merely for didactical purposes and doesn't do anything. This example shows how you can store multiple lists in a [savestate] object. A good practice is to differentiate the lists and use [route] to send them to the righr place., f 60; -#X text 636 201 Another thing we have in this example is that this abstraction communicates with the parent patch by sending values to it. But since [savestate] outputs saved data before any outside connections are made we use [loadbang] objects to send the loaded messages to the owning patch., f 60; -#X text 636 286 We're using [text] as a hint to store multiple lists.; +#X text 636 311 We're using [text] as a hint to store multiple lists.; #X obj 448 124 text sequence \$0-data; #X msg 448 97 line 0 \, bang; -#X text 634 323 Another hint is that you can saved/restore one or more [text] objects by using [text tolist] and [text fromlist].; +#X text 634 348 Another hint is that you can saved/restore one or more [text] objects by using [text tolist] and [text fromlist].; +#X text 636 116 This abstraction is merely for didactical purposes and doesn't do anything. This example shows how you can store multiple lists in a [savestate] object. A good practice is to differentiate the lists and use [route] to send them to the right place., f 60; +#X text 636 201 Another thing we have in this example is that this abstraction communicates with the parent patch by sending values to it. But since [savestate] outputs saved data before any outside connections are made we use [loadbang] objects to send messages to objects elsewhere in the owning patch at load time once the entire owning patch is loaded.; #X connect 0 0 19 0; -#X connect 0 1 29 0; +#X connect 0 1 27 0; #X connect 2 0 12 0; #X connect 3 0 9 0; #X connect 6 0 10 0; @@ -52,6 +52,6 @@ #X connect 20 1 21 0; #X connect 23 0 3 0; #X connect 24 0 2 0; -#X connect 28 0 0 0; -#X connect 29 0 28 0; +#X connect 26 0 0 0; +#X connect 27 0 26 0; #X coords 0 -1 1 1 166 75 1 125 75; diff --git a/doc/5.reference/savestate-ex3.pd b/doc/5.reference/savestate-ex3.pd new file mode 100644 index 00000000..c4b7c48f --- /dev/null +++ b/doc/5.reference/savestate-ex3.pd @@ -0,0 +1,64 @@ +#N canvas 372 253 950 466 12; +#X obj 418 46 savestate; +#X listbox 129 100 12 0 0 0 - - - 0; +#X listbox 129 124 12 0 0 0 - - - 0; +#X text 216 100 freq list; +#X text 218 123 amp list; +#X obj 129 290 list; +#X obj 195 171 loadbang; +#X obj 195 195 t b b; +#X obj 129 179 t b l; +#X obj 129 384 outlet; +#X obj 61 292 list; +#X obj 61 179 t b l; +#X obj 61 386 outlet; +#X obj 388 106 list trim; +#X obj 388 185 s \$0-set-amp; +#X obj 32 45 r \$0-set-amp; +#X obj 129 45 r \$0-set-freq; +#X obj 478 101 list; +#X obj 201 254 s \$0-amp; +#X obj 503 72 list prepend amp; +#X obj 503 48 r \$0-amp; +#X obj 388 141 route amp; +#X obj 405 228 savestate; +#X obj 385 298 list trim; +#X obj 465 283 list; +#X obj 200 291 s \$0-freq; +#X obj 490 230 r \$0-freq; +#X obj 385 333 route freq; +#X obj 385 377 s \$0-set-freq; +#X text 650 101 You can use multiple [savestate] objects instead of sending multiple ists to a single one., f 35; +#X text 650 155 The thing is that the [savestate] objects aren't differentiated. In this example both will output a collection of lists sent to both objects., f 34; +#X text 652 241 Hence \, it is a good idea to tag and route the lists differently. Here we prepend "amp" or "freq" to tag the lists., f 34; +#X obj 490 254 list prepend freq; +#X connect 0 0 13 0; +#X connect 0 1 17 0; +#X connect 1 0 11 0; +#X connect 2 0 8 0; +#X connect 5 0 9 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 7 1 5 0; +#X connect 8 0 5 0; +#X connect 8 1 5 1; +#X connect 8 1 18 0; +#X connect 10 0 12 0; +#X connect 11 0 10 0; +#X connect 11 1 10 1; +#X connect 11 1 25 0; +#X connect 13 0 21 0; +#X connect 15 0 2 0; +#X connect 16 0 1 0; +#X connect 17 0 0 0; +#X connect 19 0 17 1; +#X connect 20 0 19 0; +#X connect 21 0 14 0; +#X connect 22 0 23 0; +#X connect 22 1 24 0; +#X connect 23 0 27 0; +#X connect 24 0 22 0; +#X connect 26 0 32 0; +#X connect 27 0 28 0; +#X connect 32 0 24 1; +#X coords 0 -1 1 1 166 75 1 125 75; diff --git a/doc/5.reference/savestate-help.pd b/doc/5.reference/savestate-help.pd index 3394a983..6b6967d0 100644 --- a/doc/5.reference/savestate-help.pd +++ b/doc/5.reference/savestate-help.pd @@ -1,6 +1,6 @@ -#N canvas 385 48 851 592 12; -#X text 617 558 updated for Pd version 0.49.; -#X text 26 469 The abstraction may itself be modified at will without disturbing the saved states of its copies in any calling patches \, as long as the usage of the saved and restored lists is kept compatible.; +#N canvas 332 51 824 646 12; +#X text 587 615 updated for Pd version 0.49.; +#X text 44 509 The abstraction may itself be modified at will without disturbing the saved states of its copies in any calling patches \, as long as the usage of the saved and restored lists is kept compatible., f 49; #X obj 39 13 savestate; #N canvas 689 98 622 256 reference 0; #X obj 18 52 cnv 5 580 5 empty empty INLET: 8 18 0 13 #202020 #000000 0; @@ -18,39 +18,57 @@ #X text 173 122 one or more lists when the parent patch is opened.; #X text 173 66 one or more lists when the parent patch gets saved.; #X text 115 16 - mechanism for saving the state of an abstraction., f 61; -#X restore 630 13 pd reference; -#X text 728 14 <= click; -#X obj 7 45 cnv 1 835 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X obj 7 545 cnv 1 835 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X restore 600 13 pd reference; +#X text 698 14 <= click; +#X obj 7 46 cnv 1 805 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 112 12 - mechanism for saving the state of an abstraction; -#X obj 71 304 savestate-ex1; +#X obj 52 342 savestate-ex1; #A saved 0 125; -#X obj 209 304 savestate-ex1; +#X obj 190 342 savestate-ex1; #A saved 0 150; -#X text 22 58 The [savestate] object is used inside abstractions to save their state as they are used in a calling (parent) patch. When the parent patch (such as this one \, which calls the example abstractions) is saved \, the included [savestate] object inside the abstractions sends a 'bang' message out its right outlet \, with which the abstraction may respond by presenting one or more 'list' messages back to the [savestate] object. These lists are saved as part of the calling patch. If the calling patch is reopened later \, the lists are sent out the left outlet of the [savestate] object. The abstraction can then use them to restore its state., f 58; -#X text 233 385 Parameters for different copies of the abstraction are saved and restored independently., f 25; -#X obj 106 392 output~; -#X text 22 237 Open the abstractions below (right- or CTRL- click and select "open" in popup menu) to see how the [savestate] object is used from within., f 58; -#X text 460 58 Multiple [savestate] objects aren't differentiated \, so they all receive all lists sent to any one of them and output them. Hence \, it's probably best to just use a single [savestate] object per abstraction., f 51; -#X obj 463 269 savestate-ex2; +#X text 214 423 Parameters for different copies of the abstraction are saved and restored independently., f 25; +#X obj 87 430 output~; +#X text 27 270 Open the abstractions below (right- or CTRL- click and select "open" in popup menu) to see how the [savestate] object is used from within., f 52; +#X obj 436 165 savestate-ex2; #A saved amp 1 0.5 0.333; #A saved freq 200 400 600; -#X obj 650 269 savestate-ex2; +#X obj 623 165 savestate-ex2; #A saved amp 0.5 1 0.5; #A saved freq 300 600 900; -#X listbox 463 415 12 0 0 0 - - - 0; -#X listbox 552 377 12 0 0 0 - - - 0; -#X listbox 650 415 12 0 0 0 - - - 0; -#X listbox 717 377 12 0 0 0 - - - 0; -#X text 460 141 The saved messages are output when the object is recreated \, before any outside connections are made and possibly before other parts of a saved patch have been restored. You can use [loadbang] objects to send messages to objects elsewhere in the owning patch at load time once the entire patch is loaded. See example below for more details, f 51; -#X text 465 460 Note that abstractions within [clone] objects are not handled! Instead \, you can have a [clone] object inside your abstraction and use [savestate] to send data to the copies of the cloned abstraction., f 51; -#X text 685 376 amp; -#X text 741 414 freq; -#X text 520 376 amp; -#X text 554 414 freq; -#X connect 8 0 12 0; -#X connect 9 0 12 1; -#X connect 15 0 17 0; -#X connect 15 1 18 0; -#X connect 16 0 19 0; -#X connect 16 1 20 0; +#X listbox 436 292 12 0 0 0 - - - 0; +#X listbox 525 263 12 0 0 0 - - - 0; +#X listbox 623 292 12 0 0 0 - - - 0; +#X listbox 690 263 12 0 0 0 - - - 0; +#X text 658 262 amp; +#X text 714 291 freq; +#X text 493 262 amp; +#X text 527 291 freq; +#X text 426 58 The saved messages are output when the object is recreated \, but before connections to the parent patch are made. Check the example below on how to [loadbang] to send messages to objects elsewhere in the owning patch. The example also shows how to store more than one list in a [savestate] object., f 51; +#X text 438 327 Note that abstractions within [clone] objects are not handled! Instead \, you can have a [clone] object inside your abstraction and use [savestate] to send data to the copies of the cloned abstraction. The last example below shows how to use multiple [savestate] objects in an abstraction., f 51; +#X listbox 451 561 12 0 0 0 - - - 0; +#X listbox 540 532 12 0 0 0 - - - 0; +#X listbox 638 561 12 0 0 0 - - - 0; +#X listbox 705 532 12 0 0 0 - - - 0; +#X text 673 531 amp; +#X text 729 560 freq; +#X text 508 531 amp; +#X text 542 560 freq; +#X obj 451 434 savestate-ex3; +#A saved amp 1 1 1; +#A saved freq 100 200 300; +#X obj 638 434 savestate-ex3; +#A saved amp 0.5 0.5 0.5; +#A saved freq 400 500 600; +#X text 27 58 The [savestate] object is used inside abstractions to save their state as they are used in a calling (parent) patch. When the parent patch (such as this one \, which calls the example abstractions) is saved \, the included [savestate] object inside the abstractions sends a 'bang' message out its right outlet \, with which the abstraction may respond by presenting one or more 'list' messages back to the [savestate] object., f 52; +#X text 27 192 These lists are saved as part of the calling patch. If the calling patch is reopened later \, the lists are sent out the left outlet of the [savestate] object. The abstraction can then use them to restore its state., f 52; +#X obj 7 602 cnv 1 805 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X connect 7 0 10 0; +#X connect 8 0 10 1; +#X connect 12 0 14 0; +#X connect 12 1 15 0; +#X connect 13 0 16 0; +#X connect 13 1 17 0; +#X connect 32 0 24 0; +#X connect 32 1 25 0; +#X connect 33 0 26 0; +#X connect 33 1 27 0; diff --git a/doc/Makefile.am b/doc/Makefile.am index 62d4d5d5..748a092e 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -391,6 +391,7 @@ nobase_dist_libpd_DATA = \ ./5.reference/savepanel-help.pd \ ./5.reference/savestate-ex1.pd \ ./5.reference/savestate-ex2.pd \ + ./5.reference/savestate-ex3.pd \ ./5.reference/savestate-help.pd \ ./5.reference/scalar-object-help.pd \ ./5.reference/select-help.pd \ From ae14b266dbcd4f961bc6559eee80788d08217608 Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 25 Aug 2023 16:22:13 -0300 Subject: [PATCH 33/68] document readsf~ bug just saying it can't find paths from [declare], see discussion in https://github.com/pure-data/pure-data/issues/234 --- doc/5.reference/readsf~-help.pd | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/5.reference/readsf~-help.pd b/doc/5.reference/readsf~-help.pd index 727df13a..887f3e77 100644 --- a/doc/5.reference/readsf~-help.pd +++ b/doc/5.reference/readsf~-help.pd @@ -1,4 +1,4 @@ -#N canvas 421 44 690 553 12; +#N canvas 421 44 688 658 12; #X declare -stdpath ./; #X obj 491 428 print didit; #X obj 163 403 env~ 16384; @@ -9,13 +9,13 @@ #X obj 323 403 env~ 16384; #X obj 404 403 env~ 16384; #X msg 41 177 open ../sound/bell.aiff 0 200 4 2 b; -#X obj 96 514 soundfiler; -#X text 17 513 see also:; +#X obj 96 614 soundfiler; +#X text 17 613 see also:; #X obj 38 15 readsf~; #X text 300 167 Open takes a filename \, an onset in sample frames \, and \, as an override \, you may also supply a header size to skip \, a number of channels \, bytes per sample \, and endianness., f 44; #X text 21 126 The wave \, aiff \, caf \, and next formats are parsed automatically \, although only uncompressed 2- or 3-byte integer ("pcm") and 4-byte floating point samples are accepted., f 91; #X obj 34 406 output~; -#X obj 185 514 writesf~; +#X obj 185 614 writesf~; #X obj 491 402 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 511 352 - number of channels \; - per channel buffer size in bytes, f 22; #X msg 75 205 open ../sound/bell.aiff; @@ -51,7 +51,7 @@ #X floatatom 323 430 6 0 0 0 - - - 0; #X floatatom 404 430 6 0 0 0 - - - 0; #X text 506 334 Arguments:; -#X obj 7 497 cnv 1 675 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 7 597 cnv 1 675 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 207 322 print information on the Pd window; #X obj 123 287 tgl 19 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 0 1; #X floatatom 123 314 3 0 0 0 - - - 0; @@ -61,9 +61,12 @@ #X text 136 233 start playback; #X text 143 259 stop playback; #X text 21 60 The [readsf~] object reads a soundfile into its signal outputs. You must open the soundfile in advance (best a little bit before you need it) using the "open" message. The object immediately starts reading from the file \, but output will only appear after you send a "1" or "start" message to start the playback. A "0" or "stop" message stops it., f 91; -#X text 482 517 Updated for version 0.53-1; +#X text 482 617 Updated for version 0.53-1; #X text 96 15 - soundfile playback from disk; #X text 487 451 "bang" when the soundfile is done., f 18; +#X text 37 506 BUG: [readsf~] cannot find files in folders added via a [declare] object. It works fine for paths added to the search path via preferences though. If you need to find files from a [declare] object you can use [file which] to get the absolute path instead., f 82; +#X text 211 562 see:; +#X obj 259 562 file which; #X connect 1 0 2 0; #X connect 3 0 5 0; #X connect 4 0 23 0; From 2a4e8be6fd7dff0ecf3c3486ff33adf717234479 Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 25 Aug 2023 16:30:52 -0300 Subject: [PATCH 34/68] document float input to [clone] closes https://github.com/pure-data/pddp/issues/164 --- doc/5.reference/clone-abs-a.pd | 39 +++++++++++++++++++--------------- doc/5.reference/clone-help.pd | 13 +++++++----- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/doc/5.reference/clone-abs-a.pd b/doc/5.reference/clone-abs-a.pd index d6b69e64..d60eafb7 100644 --- a/doc/5.reference/clone-abs-a.pd +++ b/doc/5.reference/clone-abs-a.pd @@ -1,21 +1,23 @@ -#N canvas 585 104 574 369 12; -#X obj 65 167 osc~; -#X obj 65 257 outlet~; -#X obj 65 206 *~; -#X obj 65 99 t f b, f 7; -#X obj 65 131 mtof; -#X obj 263 141 float \$1; -#X obj 263 97 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#N canvas 585 104 563 448 12; +#X obj 65 207 osc~; +#X obj 65 307 outlet~; +#X obj 65 246 *~; +#X obj 65 139 t f b, f 7; +#X obj 65 171 mtof; +#X obj 269 150 float \$1; +#X obj 269 106 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 64 14 This is the abstraction for the clone help patch. It plays tones at pitches sent to its inlet., f 64; -#X floatatom 263 170 5 0 0 0 - - - 0; -#X obj 111 167 vline~; -#X text 294 90 You can access the instance number within the patch., f 27; -#X obj 111 206 pow~ 4; -#X msg 111 131 0.5 50 \, 0 4000 50; +#X floatatom 269 179 5 0 0 0 - - - 0; +#X obj 111 207 vline~; +#X text 300 99 You can access the instance number within the patch., f 27; +#X obj 111 246 pow~ 4; +#X msg 111 171 0.5 50 \, 0 4000 50; #X obj 65 66 inlet; -#X obj 385 248 outlet; -#X floatatom 385 200 5 0 0 0 - - - 0; -#X text 315 281 control data is preceded by instance number in [clone]'s output., f 25; +#X obj 318 307 outlet; +#X floatatom 318 261 5 0 0 0 - - - 0; +#X text 248 342 control data is preceded by instance number in [clone]'s output., f 25; +#X obj 65 104 route float bang; +#X obj 269 202 print instance number; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 3 0 4 0; @@ -23,8 +25,11 @@ #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 5 0; +#X connect 8 0 18 0; #X connect 9 0 11 0; #X connect 11 0 2 1; #X connect 12 0 9 0; -#X connect 13 0 3 0; +#X connect 13 0 17 0; #X connect 15 0 14 0; +#X connect 17 0 3 0; +#X connect 17 1 5 0; diff --git a/doc/5.reference/clone-help.pd b/doc/5.reference/clone-help.pd index 8c0c39ff..43a4a719 100644 --- a/doc/5.reference/clone-help.pd +++ b/doc/5.reference/clone-help.pd @@ -1,4 +1,4 @@ -#N canvas 302 23 794 703 12; +#N canvas 304 60 794 703 12; #X declare -stdpath ./; #X floatatom 223 250 5 57 83 0 - - - 0; #X obj 223 290 t b f, f 9; @@ -112,8 +112,8 @@ #X connect 21 0 20 0; #X restore 589 591 pd multichannel; #X obj 223 352 mod 4; -#X msg 61 430 vis 2 0; -#X msg 125 431 vis 2 1; +#X msg 44 455 vis 2 0; +#X msg 108 456 vis 2 1; #X floatatom 429 457 4 57 83 0 - - - 0; #X floatatom 409 361 5 0 3 0 - - - 0; #X floatatom 401 312 5 0 3 0 - - - 0; @@ -131,8 +131,10 @@ #X text 410 546 control data is preceded by instance number; #X obj 193 679 poly; #X text 80 623 Note: for backwards compatibility \, you can also invoke this as "clone 16 clone-abstraction" (for instance) \, swapping the abstraction name and the number of voices., f 91; -#X text 71 387 Open or close copy number 2:, f 14; -#X text 59 261 Check [poly]'s help for an example implementing a polyphonic synth with [clone] and the list input., f 19; +#X text 54 412 Open or close copy number 2:, f 14; +#X floatatom 165 344 5 0 3 0 - - - 0; +#X text 24 257 Check [poly]'s help for a polyphonic synth example with [clone] and a list input., f 25; +#X text 25 330 Just a float sends an empty list to the instance \, which becomes a bang!, f 19; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 1 11 1; @@ -157,3 +159,4 @@ #X connect 37 0 38 0; #X connect 37 0 29 1; #X connect 38 0 36 0; +#X connect 50 0 36 0; From 9b993fbec368bfc2b675417434095a6a9f397749 Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 25 Aug 2023 17:23:12 -0300 Subject: [PATCH 35/68] Update readsf~-help.pd using text suggested by @danomatika --- doc/5.reference/readsf~-help.pd | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/5.reference/readsf~-help.pd b/doc/5.reference/readsf~-help.pd index 887f3e77..beaca963 100644 --- a/doc/5.reference/readsf~-help.pd +++ b/doc/5.reference/readsf~-help.pd @@ -1,4 +1,4 @@ -#N canvas 421 44 688 658 12; +#N canvas 421 44 688 635 12; #X declare -stdpath ./; #X obj 491 428 print didit; #X obj 163 403 env~ 16384; @@ -9,13 +9,13 @@ #X obj 323 403 env~ 16384; #X obj 404 403 env~ 16384; #X msg 41 177 open ../sound/bell.aiff 0 200 4 2 b; -#X obj 96 614 soundfiler; -#X text 17 613 see also:; +#X obj 96 599 soundfiler; +#X text 17 598 see also:; #X obj 38 15 readsf~; #X text 300 167 Open takes a filename \, an onset in sample frames \, and \, as an override \, you may also supply a header size to skip \, a number of channels \, bytes per sample \, and endianness., f 44; #X text 21 126 The wave \, aiff \, caf \, and next formats are parsed automatically \, although only uncompressed 2- or 3-byte integer ("pcm") and 4-byte floating point samples are accepted., f 91; #X obj 34 406 output~; -#X obj 185 614 writesf~; +#X obj 185 599 writesf~; #X obj 491 402 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 511 352 - number of channels \; - per channel buffer size in bytes, f 22; #X msg 75 205 open ../sound/bell.aiff; @@ -51,7 +51,7 @@ #X floatatom 323 430 6 0 0 0 - - - 0; #X floatatom 404 430 6 0 0 0 - - - 0; #X text 506 334 Arguments:; -#X obj 7 597 cnv 1 675 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 7 582 cnv 1 675 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 207 322 print information on the Pd window; #X obj 123 287 tgl 19 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 0 1; #X floatatom 123 314 3 0 0 0 - - - 0; @@ -61,12 +61,12 @@ #X text 136 233 start playback; #X text 143 259 stop playback; #X text 21 60 The [readsf~] object reads a soundfile into its signal outputs. You must open the soundfile in advance (best a little bit before you need it) using the "open" message. The object immediately starts reading from the file \, but output will only appear after you send a "1" or "start" message to start the playback. A "0" or "stop" message stops it., f 91; -#X text 482 617 Updated for version 0.53-1; +#X text 482 602 Updated for version 0.53-1; #X text 96 15 - soundfile playback from disk; #X text 487 451 "bang" when the soundfile is done., f 18; -#X text 37 506 BUG: [readsf~] cannot find files in folders added via a [declare] object. It works fine for paths added to the search path via preferences though. If you need to find files from a [declare] object you can use [file which] to get the absolute path instead., f 82; -#X text 211 562 see:; -#X obj 259 562 file which; +#X text 538 546 see:; +#X obj 581 546 file which; +#X text 39 505 Note: [readsf~] cannot find files in folders added via a [declare] object and it is recommended to use [file which] to get absolute paths which can be used with open. Folder paths added to the search path via preferences do work., f 82; #X connect 1 0 2 0; #X connect 3 0 5 0; #X connect 4 0 23 0; From ac65080c9bdb1d6661790fbf6b91b49c1844c3e4 Mon Sep 17 00:00:00 2001 From: danomatika Date: Mon, 28 Aug 2023 20:23:52 +0200 Subject: [PATCH 36/68] fixed libpd Makefile build by setting explict HAVE_*_H defines required by new m_private_utils.h header --- libpd/Makefile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libpd/Makefile b/libpd/Makefile index 352725a8..9ab33d5c 100644 --- a/libpd/Makefile +++ b/libpd/Makefile @@ -11,7 +11,7 @@ PLATFORM_ARCH ?= $(shell $(CC) -dumpmachine | sed -e 's,-.*,,') ifeq ($(UNAME), Darwin) # Mac SOLIB_EXT = dylib - PLATFORM_CFLAGS = -DHAVE_LIBDL + PLATFORM_CFLAGS = -DHAVE_LIBDL -DHAVE_MACHINE_ENDIAN_H PLATFORM_LDFLAGS = -dynamiclib -ldl -Wl,-no_compact_unwind ifeq ($(FAT_LIB), true) # macOS universal "fat" lib compilation @@ -35,14 +35,15 @@ else SOLIB_PREFIX = LIBPD_IMPLIB = libpd.lib LIBPD_DEF = libpd.def - PLATFORM_CFLAGS = -DWINVER=0x502 -DWIN32 -D_WIN32 -DPD_INTERNAL + PLATFORM_CFLAGS = -DWINVER=0x502 -DWIN32 -D_WIN32 MINGW_LDFLAGS = -shared -Wl,--export-all-symbols -lws2_32 -lkernel32 \ -static-libgcc PLATFORM_LDFLAGS = $(MINGW_LDFLAGS) -Wl,--output-def=$(LIBPD_DEF) \ -Wl,--out-implib=$(LIBPD_IMPLIB) else # Linux or *BSD SOLIB_EXT = so - PLATFORM_CFLAGS = -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -fPIC + PLATFORM_CFLAGS = -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -fPIC \ + -DHAVE_ENDIAN_H PLATFORM_LDFLAGS = -shared -Wl,-Bsymbolic ifeq ($(UNAME), Linux) PLATFORM_CFLAGS += -DHAVE_LIBDL @@ -59,8 +60,8 @@ VPATH = ../src:\ # to allow easy overriding of CODECFLAGS and to allow adding MORECFLAGS: # C preprocessor flags, and flags controlling errors and warnings -CPPFLAGS = -I../src -DPD -DHAVE_UNISTD_H -DUSEAPI_DUMMY -DLIBPD_EXTRA \ - -DPDINSTANCE -DPD_INTERNAL +CPPFLAGS = -I../src -DPD -DUSEAPI_DUMMY -DPD_INTERNAL -DHAVE_UNISTD_H \ + -DHAVE_ALLOCA_H -DLIBPD_EXTRA -DPDINSTANCE # code generation flags (e.g., optimization). CODECFLAGS = -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -O3 From d6151e032e890c52b79885f1c7d850848a3714d3 Mon Sep 17 00:00:00 2001 From: danomatika Date: Mon, 28 Aug 2023 22:00:50 +0200 Subject: [PATCH 37/68] fixed libpd build on iOS due to missing include for NSGetExecutablePath --- src/s_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/s_main.c b/src/s_main.c index 1dfe369a..0d2393cf 100644 --- a/src/s_main.c +++ b/src/s_main.c @@ -21,6 +21,9 @@ #include #include #endif +#ifdef __APPLE__ +#include // for _NSGetExecutablePath +#endif #include "m_private_utils.h" #define stringify(s) str(s) From 0b5e467b8728b3ed56e1a8ee5b367ce78e7e6e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 25 Jul 2023 17:03:58 +0200 Subject: [PATCH 38/68] Terminate if canceling setuid() privilege fails Closes: https://github.com/pure-data/pure-data/issues/2063 --- src/s_main.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/s_main.c b/src/s_main.c index 0d2393cf..92d4d167 100644 --- a/src/s_main.c +++ b/src/s_main.c @@ -395,7 +395,19 @@ int sys_main(int argc, const char **argv) if (getuid() != geteuid()) { fprintf(stderr, "warning: canceling setuid privilege\n"); - setuid(getuid()); + if(setuid(getuid()) < 0) { + /* sometimes this fails (which, according to 'man 2 setuid' is a + * grave security error), in which case we bail out and quit. */ + fprintf(stderr, "\n\nFATAL: could not cancel setuid privilege"); + fprintf(stderr, "\nTo fix this, please remove the setuid flag from the Pd binary"); + if(argc>0) { + fprintf(stderr, "\ne.g. by running the following as root/superuser:"); + fprintf(stderr, "\n chmod u-s '%s'", argv[0]); + } + fprintf(stderr, "\n\n"); + perror("setuid"); + return (1); + } } #endif /* _WIN32 */ if (socket_init()) From 606e3ec6f4824f33e9c88184bafda8a04b37b028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 29 Aug 2023 13:34:59 +0200 Subject: [PATCH 39/68] comment indentation --- src/d_ugen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_ugen.c b/src/d_ugen.c index 32db9470..e0d500c3 100644 --- a/src/d_ugen.c +++ b/src/d_ugen.c @@ -1050,8 +1050,8 @@ void ugen_done_graph(t_dspcontext *dc) int chainafterall; /* and after signal outlet epilog */ int reblock = 0, switched; int downsample = 1, upsample = 1; - /* debugging printout */ + /* debugging printout */ if (THIS->u_loud) { post("ugen_done_graph..."); From 40feda2ee1ab39e4121e3a00cb40599de6e5fcff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 29 Aug 2023 13:35:51 +0200 Subject: [PATCH 40/68] pass overlap to nullsignal --- src/d_ugen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/d_ugen.c b/src/d_ugen.c index e0d500c3..562d7974 100644 --- a/src/d_ugen.c +++ b/src/d_ugen.c @@ -636,6 +636,7 @@ struct _dspcontext }; #define DC_LENGTH(x) ((x)->dc_nullsignal.s_length) #define DC_SR(x) ((x)->dc_nullsignal.s_sr) +#define DC_OVERLAP(x) ((x)->dc_nullsignal.s_overlap) #define t_dspcontext struct _dspcontext @@ -1050,6 +1051,7 @@ void ugen_done_graph(t_dspcontext *dc) int chainafterall; /* and after signal outlet epilog */ int reblock = 0, switched; int downsample = 1, upsample = 1; + int realoverlap = 1; /* debugging printout */ if (THIS->u_loud) @@ -1093,7 +1095,6 @@ void ugen_done_graph(t_dspcontext *dc) } if (blk) { - int realoverlap; calcsize = blk->x_calcsize; if (calcsize == 0) calcsize = parent_vecsize; @@ -1134,6 +1135,7 @@ void ugen_done_graph(t_dspcontext *dc) dc->dc_switched = switched; dc->dc_nullsignal.s_sr = srate; dc->dc_nullsignal.s_length = calcsize; + dc->dc_nullsignal.s_overlap = realoverlap; dc->dc_nullsignal.s_nchans = -1; /* fake so we can sanity check */ /* if we're reblocking or switched, we now have to create output From f89a4d7b9632ee1b519d1406f9af14aaf550b910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 29 Aug 2023 14:15:23 +0200 Subject: [PATCH 41/68] report overlap factor in dsp-callbacks Closes: https://github.com/pure-data/pure-data/issues/2071 --- src/d_ugen.c | 26 ++++++++++++++++++++------ src/g_io.c | 2 ++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/d_ugen.c b/src/d_ugen.c index 562d7974..c33cd4e8 100644 --- a/src/d_ugen.c +++ b/src/d_ugen.c @@ -544,6 +544,7 @@ t_signal *signal_new(int length, int nchans, t_float sr, t_sample *scalarptr) ret->s_nchans = nchans; ret->s_nalloc = allocsize; ret->s_sr = sr; + ret->s_overlap = 0; ret->s_refcount = 0; ret->s_borrowedfrom = 0; if (THIS->u_loud) post("new %lx: %lx", ret, ret->s_vec); @@ -552,7 +553,9 @@ t_signal *signal_new(int length, int nchans, t_float sr, t_sample *scalarptr) t_signal *signal_newlike(const t_signal *sig) { - return (signal_new(sig->s_length, sig->s_nchans, sig->s_sr, 0)); + t_signal *s = signal_new(sig->s_length, sig->s_nchans, sig->s_sr, 0); + s->s_overlap = sig->s_overlap; + return s; } void signal_setborrowed(t_signal *sig, t_signal *sig2) @@ -565,6 +568,8 @@ void signal_setborrowed(t_signal *sig, t_signal *sig2) sig->s_vec = sig2->s_vec; sig->s_length = sig2->s_length; sig->s_nchans = sig2->s_nchans; + sig->s_sr = sig2->s_sr; + sig->s_overlap = sig2->s_overlap; sig->s_nalloc = sig2->s_nalloc; sig2->s_refcount++; if (THIS->u_loud) post("set borrowed %lx: from %lx vec %lx", @@ -575,13 +580,15 @@ void signal_setborrowed(t_signal *sig, t_signal *sig2) on output signal - we assume it's currently a pointer to the null signal */ void signal_setmultiout(t_signal **sig, int nchans) { + int overlap = (*sig)->s_overlap; *sig = signal_new((*sig)->s_length, nchans, (*sig)->s_sr, 0); + (*sig)->s_overlap = overlap; } static int signal_compatible(t_signal *s1, t_signal *s2) { return (s1->s_length == s2->s_length && s1->s_nchans == s2->s_nchans - && s1->s_sr == s2->s_sr); + && s1->s_sr == s2->s_sr && s1->s_overlap == s2->s_overlap); } /* ------------------ ugen ("unit generator") sorting ----------------- */ @@ -643,8 +650,10 @@ struct _dspcontext /* get a new signal for the current context - used by clone~ object */ t_signal *signal_newfromcontext(int borrowed, int nchans) { - return (signal_new((borrowed? 0 : DC_LENGTH(THIS->u_context)), nchans, - DC_SR(THIS->u_context), 0)); + t_signal *s = signal_new((borrowed? 0 : DC_LENGTH(THIS->u_context)), nchans, + DC_SR(THIS->u_context), 0); + s->s_overlap = DC_OVERLAP(THIS->u_context); + return s; } void ugen_stop(void) @@ -886,6 +895,7 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u) dsp_add_scalarcopy(scalar, uin->i_signal->s_vec, uin->i_signal->s_n); } + uin->i_signal->s_overlap = DC_OVERLAP(dc); uin->i_signal->s_refcount = 1; } } @@ -931,6 +941,8 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u) else if (flags & CLASS_MULTICHANNEL) *sig = &dc->dc_nullsignal; else *sig = signal_new(DC_LENGTH(dc), 1, DC_SR(dc), 0); + (*sig)->s_overlap = DC_OVERLAP(dc); + } /* now call the DSP scheduling routine for the ugen. This routine must fill in "borrowed" signal outputs in case it's either @@ -1152,8 +1164,9 @@ void ugen_done_graph(t_dspcontext *dc) { if ((*sigp)->s_isborrowed && !(*sigp)->s_borrowedfrom) { - signal_setborrowed(*sigp, - signal_new(parent_vecsize, 1, parent_srate, 0)); + t_signal *s = signal_new(parent_vecsize, 1, parent_srate, 0); + s->s_overlap = realoverlap; + signal_setborrowed(*sigp, s); if (THIS->u_loud) post("set %lx->%lx", *sigp, (*sigp)->s_borrowedfrom); @@ -1235,6 +1248,7 @@ void ugen_done_graph(t_dspcontext *dc) if ((*sigp)->s_isborrowed && !(*sigp)->s_borrowedfrom) { t_signal *s3 = signal_new(parent_vecsize, 1, parent_srate, 0); + s3->s_overlap = realoverlap; signal_setborrowed(*sigp, s3); dsp_add_zero(s3->s_vec, s3->s_n); if (THIS->u_loud) diff --git a/src/g_io.c b/src/g_io.c index 7e9c90ac..5eb2d9bb 100644 --- a/src/g_io.c +++ b/src/g_io.c @@ -528,12 +528,14 @@ void voutlet_dspprolog(struct _voutlet *x, t_signal **parentsigs, x->x_borrowed = 0; else /* OK, borrow it */ { + int overlap = (*(x->x_parentsignal))->s_overlap; x->x_borrowed = 1; if (!parentsigs) bug("voutlet_dspprolog"); /* create new borrowed signal to be set in dsp routine below */ *(x->x_parentsignal) = signal_new(0, 1, (*(x->x_parentsignal))->s_sr, 0); + (*(x->x_parentsignal))->s_overlap = overlap; } if (reblock) { From 320409172d8e4b84dbc5bc7f0a93573210978177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Tue, 29 Aug 2023 15:07:08 +0200 Subject: [PATCH 42/68] accumulate overlaps (like samplerates) --- src/d_ugen.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/d_ugen.c b/src/d_ugen.c index c33cd4e8..2751d223 100644 --- a/src/d_ugen.c +++ b/src/d_ugen.c @@ -1055,7 +1055,7 @@ void ugen_done_graph(t_dspcontext *dc) t_block *blk; t_dspcontext *parent_context = dc->dc_parentcontext; t_float parent_srate; - int parent_vecsize; + int parent_vecsize, parent_overlap; int period, frequency, phase, calcsize; t_float srate; int chainblockbegin; /* DSP chain onset before block prolog code */ @@ -1063,7 +1063,7 @@ void ugen_done_graph(t_dspcontext *dc) int chainafterall; /* and after signal outlet epilog */ int reblock = 0, switched; int downsample = 1, upsample = 1; - int realoverlap = 1; + int totaloverlap; /* debugging printout */ if (THIS->u_loud) @@ -1099,14 +1099,18 @@ void ugen_done_graph(t_dspcontext *dc) { parent_srate = DC_SR(parent_context); parent_vecsize = DC_LENGTH(parent_context); + parent_overlap = DC_OVERLAP(parent_context); } else { parent_srate = sys_getsr(); parent_vecsize = sys_getblksize(); + parent_overlap = 1; } + totaloverlap = parent_overlap; if (blk) { + int realoverlap; calcsize = blk->x_calcsize; if (calcsize == 0) calcsize = parent_vecsize; @@ -1132,6 +1136,8 @@ void ugen_done_graph(t_dspcontext *dc) (downsample != 1) || (upsample != 1)) reblock = 1; switched = blk->x_switched; + + totaloverlap = parent_overlap * realoverlap; } else { @@ -1147,7 +1153,7 @@ void ugen_done_graph(t_dspcontext *dc) dc->dc_switched = switched; dc->dc_nullsignal.s_sr = srate; dc->dc_nullsignal.s_length = calcsize; - dc->dc_nullsignal.s_overlap = realoverlap; + dc->dc_nullsignal.s_overlap = totaloverlap; dc->dc_nullsignal.s_nchans = -1; /* fake so we can sanity check */ /* if we're reblocking or switched, we now have to create output @@ -1165,7 +1171,7 @@ void ugen_done_graph(t_dspcontext *dc) if ((*sigp)->s_isborrowed && !(*sigp)->s_borrowedfrom) { t_signal *s = signal_new(parent_vecsize, 1, parent_srate, 0); - s->s_overlap = realoverlap; + s->s_overlap = totaloverlap; signal_setborrowed(*sigp, s); if (THIS->u_loud) post("set %lx->%lx", *sigp, @@ -1248,7 +1254,7 @@ void ugen_done_graph(t_dspcontext *dc) if ((*sigp)->s_isborrowed && !(*sigp)->s_borrowedfrom) { t_signal *s3 = signal_new(parent_vecsize, 1, parent_srate, 0); - s3->s_overlap = realoverlap; + s3->s_overlap = totaloverlap; signal_setborrowed(*sigp, s3); dsp_add_zero(s3->s_vec, s3->s_n); if (THIS->u_loud) From 213f0be243f69fe61b863f994828521449113880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 25 Sep 2023 10:34:44 +0200 Subject: [PATCH 43/68] Imported deken-plugin v0.9.12 - Closes: https://github.com/pure-data/deken/issues/298 (disable "install" button while installing) - Closes: https://github.com/pure-data/deken/issues/288 (fix unset deken architectures on macOS) - fix some typos --- tcl/pd_deken.tcl | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/tcl/pd_deken.tcl b/tcl/pd_deken.tcl index 65c19a2b..0231092f 100644 --- a/tcl/pd_deken.tcl +++ b/tcl/pd_deken.tcl @@ -103,7 +103,7 @@ proc ::deken::versioncheck {version} { } ## put the current version of this package here: -if { [::deken::versioncheck 0.9.4] } { +if { [::deken::versioncheck 0.9.12] } { namespace eval ::deken:: { namespace export open_searchui @@ -1082,13 +1082,23 @@ if { [ catch { set ::deken::installpath [::pd_guiprefs::read dekenpath] } stdout # user requested platform (empty = DEFAULT) set ::deken::userplatform [::pd_guiprefs::read deken_platform] catch {set ::deken::userplatform [lindex ${deken::userplatform} 0 ]} + # urgh, on macOS an empty :deken::userplatform ({}, which is promoted to [list {}] on save) + # got saved as a literal "{}" (actually "\\\\{\\\\}") + # which then gets restored as "\\{\\}"... + # the bogus write behaviour was fixed with v0.9.8, but we need to handle old prefs... + set ::deken::userplatform [string trim [string trim ${::deken::userplatform} "\\\{\}" ] ] set ::deken::hideforeignarch [::deken::utilities::bool [::pd_guiprefs::read deken_hide_foreign_archs] 1] set ::deken::hideoldversions [::deken::utilities::bool [::pd_guiprefs::read deken_hide_old_versions] 1] proc ::deken::set_platform_options {platform hideforeignarch {hideoldversions 0}} { set ::deken::userplatform $platform + if { $platform == "" } { + set platformlist [list] + } else { + set platformlist [list $platform] + } set ::deken::hideforeignarch [::deken::utilities::bool $hideforeignarch ] set ::deken::hideoldversions [::deken::utilities::bool $hideoldversions ] - ::pd_guiprefs::write deken_platform [list $platform] + ::pd_guiprefs::write deken_platform $platformlist ::pd_guiprefs::write deken_hide_foreign_archs $::deken::hideforeignarch ::pd_guiprefs::write deken_hide_old_versions $::deken::hideoldversions } @@ -1490,6 +1500,7 @@ proc ::deken::menu_installselected {resultsid} { # clear the selection set ::deken::selected {} ::deken::clear_selection $resultsid + ::deken::update_installbutton $::deken::winid } proc ::deken::menu_uninstall_package {winid pkgname installpath} { @@ -1813,7 +1824,8 @@ proc ::deken::initiate_search {winid} { } if {[llength $results] != 0} { ::deken::show_results $resultsid - ::deken::post [format [_ "Found %1\$d usable packages (of %2\$d packages in total)." ] $matchcount [llength $results]] + set msg [format [_ "Found %1\$d usable packages (of %2\$d packages in total)." ] $matchcount [llength $results]] + ::deken::statuspost [format {"%s": %s} ${searchterm} ${msg}] if { $matchcount } { ::deken::show_tab $winid results } else { @@ -1926,7 +1938,7 @@ proc ::deken::textresults::clear_selection {resultsid} { ## deken::treeresults: show versions of libraries in a tree-view # TASKs -# - each library (distinguished by name) is a separate (expandable/collapsable) node +# - each library (distinguished by name) is a separate (expandable/collapsible) node # - expanding a library node shows all versions # - the library node shows which version of the library is going to be installed (if any) # - the tree can be sorted in both directions by clicking on any of the headings @@ -1944,7 +1956,7 @@ proc ::deken::textresults::clear_selection {resultsid} { # CAVEATs # - interaccting with the selection for library 'x' should not interfere with the selection of library 'y' # - incompatible archs should be marked somehow -# - incompatible archs must always be explicitely selected +# - incompatible archs must always be explicitly selected # - TODO: what about multi-selecting incompatible archs of only a single library? # - TODO: what about multi-selecting a couple of libraries where some only have incompatible archs? @@ -2158,7 +2170,7 @@ proc ::deken::treeresults::doubleclick {treeid x y} { } if { $installitem eq {} } { - # the user doubleclicked on a column heading + # the user double-clicked on a column heading set column [$treeid identify column $x $y] if { $column eq "#0" } { # we don't want to sort by column#0 @@ -2203,7 +2215,7 @@ proc ::deken::treeresults::doubleclick {treeid x y} { } $treeid children {} $pkgs if { $item eq {} } { - # yikes: if we are not scrolled down, the doubleclick will trigger columnsort twice + # yikes: if we are not scrolled down, the double-click will trigger columnsort twice # so we do an extra round here... ::deken::treeresults::columnsort $treeid $column } @@ -2216,7 +2228,6 @@ proc ::deken::treeresults::doubleclick {treeid x y} { ::deken::post "" eval $cmd } - } @@ -2440,18 +2451,22 @@ proc ::deken::ensure_installdir {{installdir ""} {extname ""}} { } # handle a clicked link -proc ::deken::clicked_link {URL filename} { +proc ::deken::install_link {URL filename} { ## make sure that the destination path exists ### if ::deken::installpath is set, use the first writable item ### if not, get a writable item from one of the searchpaths ### if this still doesn't help, ask the user variable winid + set installbutton ${winid}.status.install + if {[winfo exists $installbutton]} { + $installbutton configure -state disabled + } ::deken::show_tab $winid info set installdir [::deken::ensure_installdir "" ${filename}] if { "${installdir}" == "" } { ::deken::utilities::debug [format [_ "Cancelling download of '%s': No installation directory given." ] $filename] - ::deken::statuspost [format [_ "Installing to non-existant directory failed" ] $filename] error + ::deken::statuspost [format [_ "Installing to non-existent directory failed" ] $filename] error return } if { ! [file exists $installdir] } { @@ -2501,6 +2516,7 @@ proc ::deken::clicked_link {URL filename} { } } ::deken::install_package ${fullpkgfile} ${filename} ${installdir} ${::deken::keep_package} + ::deken::update_installbutton $winid } # print the download progress to the results window @@ -2643,7 +2659,7 @@ proc ::deken::register {fun} { ## (the user will select the element by this name) ## e.g. "frobscottle-1.10 (Linux/amd64)" ## cmd : a command that will install the selected library -## e.g. "[list ::deken::clicked_link http://bfg.org/frobscottle-1.10.zip frobscottle-1.10.zip]" +## e.g. "[list ::deken::install_link http://bfg.org/frobscottle-1.10.zip frobscottle-1.10.zip]" ## match: an integer indicating whether this entry is actually usable ## on this host (1) or not (0) ## comment: secondary line to display @@ -2746,7 +2762,7 @@ proc ::deken::search::puredata.info::search {term} { foreach {name URL creator date} [ split $ele "\t" ] {break} set decURL [::deken::utilities::urldecode $URL] set filename [ file tail $URL ] - set cmd [list ::deken::clicked_link $decURL $filename] + set cmd [list ::deken::install_link $decURL $filename] set pkgverarch [ ::deken::utilities::parse_filename $filename ] set pkgname [lindex $pkgverarch 0] set version [lindex $pkgverarch 1] @@ -2860,7 +2876,7 @@ proc ::deken::search::puredata.info::contextmenu {widget theX theY pkgname URL} set pkgverarch [ ::deken::utilities::parse_filename $filename ] set pkgname [lindex $pkgverarch 0] - set cmd [list ::deken::clicked_link $decURL $filename] + set cmd [list ::deken::install_link $decURL $filename] set selcount 0 set selected 0 From 8882c9687d124de29ffe40d51ec19212e08acf50 Mon Sep 17 00:00:00 2001 From: baptiste Date: Thu, 7 Sep 2023 19:23:33 +0000 Subject: [PATCH 44/68] Translated using Weblate (French) Currently translated at 99.7% (490 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/fr/ --- po/fr.po | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/po/fr.po b/po/fr.po index a9fd1940..5d10aa16 100644 --- a/po/fr.po +++ b/po/fr.po @@ -11,16 +11,16 @@ msgstr "" "Project-Id-Version: Pure Data 0.53-0\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-06-26 09:35+0000\n" +"PO-Revision-Date: 2023-09-08 06:19+0000\n" "Last-Translator: baptiste \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.18.1\n" +"X-Generator: Weblate 5.0.1-dev\n" msgid "linear" msgstr "linéaire" @@ -220,7 +220,7 @@ msgid "Use Multiple Devices" msgstr "Utiliser plusieurs périphériques" msgid "audio system" -msgstr "système audio" +msgstr "Système audio" msgid "Settings" msgstr "Paramètres" @@ -292,7 +292,7 @@ msgid "Y range: from" msgstr "Intervalle Y : de" msgid "Data Properties" -msgstr "Propriétés de la donnée" +msgstr "Propriétés des données" msgid "Send" msgstr "Envoyer" @@ -460,7 +460,7 @@ msgid "Canvas" msgstr "Canevas" msgid "Visible Rectangle (pix)" -msgstr "Rectangle visible (pix)" +msgstr "Rectangle visible (px)" #, tcl-format msgid "%s Properties" @@ -717,11 +717,10 @@ msgid "Failed to find plugins in %s ...skipping!" msgstr "Impossible de trouver des plugins dans %s... passer !" msgid "Pd startup failure" -msgstr "" +msgstr "Échec du démarrage de Pd" -#, fuzzy msgid "Failed to start Pd-core" -msgstr "Échec de l'installation de '%s' !" +msgstr "Échec au démarrage de Pd-core" msgid "(Tcl) MISSING CLOSE-BRACE '}': " msgstr "(Tcl) ACCOLADE FERMANTE MANQUANTE '}' : " @@ -1614,7 +1613,7 @@ msgid "Pd" msgstr "Pd" msgid "EXPERIMENTAL double (64bit) precision" -msgstr "" +msgstr "EXPÉRIMENTAL : double précision (64 bits)" #, fuzzy, tcl-format msgid "%dbit-floats EXPERIMENTAL" From 68821477ba3d4b96f69a423324670b875d97aff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 25 Sep 2023 11:48:13 +0200 Subject: [PATCH 45/68] Import deken v0.9.14 Fix sha256 verification --- tcl/pd_deken.tcl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tcl/pd_deken.tcl b/tcl/pd_deken.tcl index 0231092f..8cca138b 100644 --- a/tcl/pd_deken.tcl +++ b/tcl/pd_deken.tcl @@ -103,7 +103,7 @@ proc ::deken::versioncheck {version} { } ## put the current version of this package here: -if { [::deken::versioncheck 0.9.12] } { +if { [::deken::versioncheck 0.9.14] } { namespace eval ::deken:: { namespace export open_searchui @@ -538,6 +538,7 @@ proc ::deken::utilities::verify_sha256 {url pkgfile} { foreach impl {sha256sum shasum msw tcllib} { if { [::deken::utilities::sha256_${impl} $::argv0] ne "" } { + set ::deken::utilities::sha256_implementation ::deken::utilities::sha256_${impl} proc ::deken::utilities::verify_sha256 {url pkgfile} { ::deken::statuspost [format [_ "SHA256 verification of '%s'" ] $pkgfile ] debug ::deken::syncgui @@ -569,7 +570,7 @@ foreach impl {sha256sum shasum msw tcllib} { catch { file delete $hashfile } } - set hash [string trim [string tolower [ ::deken::utilities::sha256_${impl} $pkgfile ] ] ] + set hash [string trim [string tolower [ ${::deken::utilities::sha256_implementation} $pkgfile ] ] ] if { "${hash}" eq "${reference}" } { set retval 1 } else { From 0f29b0db1776e476ed1ebb8c4f4e30c39f8123ab Mon Sep 17 00:00:00 2001 From: porres Date: Sat, 30 Sep 2023 18:20:17 -0300 Subject: [PATCH 46/68] better describe throw~/catch~ closes https://github.com/pure-data/pddp/issues/167 --- doc/5.reference/throw~-catch~-help.pd | 92 +++++++++++++-------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/doc/5.reference/throw~-catch~-help.pd b/doc/5.reference/throw~-catch~-help.pd index 03825758..f7a09f90 100644 --- a/doc/5.reference/throw~-catch~-help.pd +++ b/doc/5.reference/throw~-catch~-help.pd @@ -1,30 +1,22 @@ -#N canvas 476 32 521 526 12; -#X floatatom 34 436 5 0 0 0 - - - 0; -#X obj 374 234 sig~ 50; -#X obj 34 406 snapshot~; -#X obj 374 269 throw~ signal1; -#X obj 42 251 sig~ 25; -#X obj 34 350 catch~ signal1; +#N canvas 476 32 518 527 12; +#X floatatom 64 436 5 0 0 0 - - - 0; +#X obj 64 406 snapshot~; #X obj 34 15 throw~; #X obj 34 39 catch~; #X obj 285 370 metro 200; #X obj 168 406 snapshot~; -#X obj 168 349 catch~ signal2; #X obj 100 494 send~; #X text 27 493 see also:; #X floatatom 168 436 5 0 0 0 - - - 0; #X obj 285 342 loadbang; #X msg 395 357 \; pd dsp 1; #X text 427 327 DSP on/off; -#X floatatom 42 225 5 0 0 0 - - - 0; -#X floatatom 374 205 5 0 0 0 - - - 0; +#X floatatom 160 220 5 0 0 0 - - - 0; +#X floatatom 62 224 5 0 0 0 - - - 0; #X text 87 17 - summing signal bus and; #X text 101 34 non-local connection, f 22; -#X obj 102 305 throw~ \$0-signal; -#X msg 114 277 set signal; -#X msg 102 251 set \$1-signal; -#X obj 102 218 f \$0; -#X obj 102 193 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X obj 230 213 f \$0; +#X obj 230 188 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #N canvas 525 216 510 156 execution-order 0; #X obj 115 95 ../3.audio.examples/G05.execution.order; #X text 46 30 You have to get the throw~ sorted before the catch~ or else you'll never get less than a block's delay. You can use the strategy given in the example below to control this.; @@ -57,17 +49,15 @@ #X obj 4 68 cnv 1 510 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X obj 4 478 cnv 1 510 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X obj 146 494 tabsend~; -#X text 210 251 You can redirect [throw~] via a "set" message., f 16; -#X text 140 194 <- \$0 needs to be expanded from objects., f 23; +#X text 338 246 You can redirect [throw~] via a "set" message., f 16; +#X text 268 189 <- \$0 needs to be expanded from objects., f 23; #N canvas 680 88 505 390 multichannel 0; #X obj 304 247 metro 200; #X obj 193 284 snapshot~; #X floatatom 193 314 5 0 0 0 - - - 0; #X obj 304 219 loadbang; -#X obj 192 187 catch~ signal3 2; #X obj 273 284 snapshot~; #X floatatom 273 314 5 0 0 0 - - - 0; -#X obj 44 282 throw~ signal3; #X floatatom 44 208 5 0 0 0 - - - 0; #X floatatom 118 207 5 0 0 0 - - - 0; #X text 47 11 A [catch~] object may be directed to output multichannel signals via its second optional argument. A [throw~] object automatically uses as many channels as its input signal provides. If the matching [catch~] has fewer channels than that the extras are ignored. If the [throw~] object has fewer than the catch the extra output channels are left unchanged.; @@ -79,36 +69,46 @@ #X msg 192 129 channels 1; #X msg 206 158 channels 2; #X text 298 130 message to set number of channels, f 18; +#X obj 44 282 throw~ bus3; +#X obj 192 187 catch~ bus3 2; #X connect 0 0 1 0; -#X connect 0 0 5 0; +#X connect 0 0 4 0; #X connect 1 0 2 0; #X connect 3 0 0 0; -#X connect 4 0 12 0; -#X connect 5 0 6 0; -#X connect 8 0 11 0; -#X connect 9 0 11 1; -#X connect 11 0 7 0; -#X connect 12 0 1 0; -#X connect 12 1 5 0; -#X connect 16 0 4 0; -#X connect 17 0 4 0; +#X connect 4 0 5 0; +#X connect 6 0 9 0; +#X connect 7 0 9 1; +#X connect 9 0 17 0; +#X connect 10 0 1 0; +#X connect 10 1 4 0; +#X connect 14 0 18 0; +#X connect 15 0 18 0; +#X connect 18 0 10 0; #X restore 346 441 pd multichannel; #X text 277 493 updated for Pd version 0.54; -#X text 33 81 A [throw~] object copies its input to a local buffer which all [catch~] objects of the same name read from. They may be in different windows or even different patches. Any number of [throw~] objects can add into one [catch~] object (but two [catch~] objects cannot share the same name.) A pair of [throw~]/[catch~]objects must have matching block sizes., f 61; #X obj 395 322 set-dsp-tgl; -#X connect 1 0 3 0; -#X connect 2 0 0 0; -#X connect 4 0 21 0; -#X connect 5 0 2 0; -#X connect 8 0 2 0; -#X connect 8 0 9 0; -#X connect 9 0 13 0; -#X connect 10 0 9 0; -#X connect 14 0 8 0; -#X connect 17 0 4 0; -#X connect 18 0 1 0; -#X connect 22 0 21 0; -#X connect 23 0 21 0; -#X connect 24 0 23 0; -#X connect 25 0 24 0; -#X connect 37 0 15 0; +#X text 33 81 A [throw~] object copies its input to a local buffer which a [catch~] object of the same name reads from. Any number of [throw~] objects can add into one [catch~] object (but two [catch~] objects cannot share the same name.) A pair of [throw~]/[catch~]objects must have matching block sizes \, but they may be in different windows or even different patches., f 61; +#X msg 230 242 set \$1-bus2; +#X msg 242 272 set bus1; +#X obj 168 349 catch~ \$0-bus2; +#X obj 62 288 throw~ bus1; +#X obj 64 350 catch~ bus1; +#X obj 230 300 throw~ bus1; +#X obj 160 246 sig~ 25; +#X obj 62 251 sig~ 50; +#X connect 1 0 0 0; +#X connect 4 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 8 0; +#X connect 9 0 4 0; +#X connect 12 0 36 0; +#X connect 13 0 37 0; +#X connect 16 0 30 0; +#X connect 17 0 16 0; +#X connect 28 0 10 0; +#X connect 30 0 35 0; +#X connect 31 0 35 0; +#X connect 32 0 5 0; +#X connect 34 0 1 0; +#X connect 36 0 35 0; +#X connect 37 0 33 0; From 2beb1d7db718b50489bbad0d2a4397db952f83a1 Mon Sep 17 00:00:00 2001 From: porres Date: Sun, 8 Oct 2023 08:47:38 -0300 Subject: [PATCH 47/68] fix many typos superceedes https://github.com/pure-data/pure-data/pull/2098/commits/79ab9ba9645b0d3ecd5a06cb3cd0d30b038678e2 --- doc/2.control.examples/15.array.pd | 2 +- doc/3.audio.examples/A10.review.pd | 2 +- doc/3.audio.examples/B06.table.switching.pd | 2 +- doc/3.audio.examples/D13.additive.qlist.pd | 12 +-- doc/4.data.structures/01.scalars.pd | 8 +- doc/4.data.structures/03.setting.data.pd | 4 +- doc/4.data.structures/11.scaling.pd | 50 +++------ doc/4.data.structures/16.FFT-plot.pd | 2 +- doc/4.data.structures/17.partialtracer.pd | 114 ++++++++++---------- doc/5.reference/key-input-help.pd | 14 +-- doc/5.reference/savestate-ex3.pd | 8 +- doc/5.reference/sig~-help.pd | 2 +- doc/5.reference/until-help.pd | 41 +++---- 13 files changed, 120 insertions(+), 141 deletions(-) diff --git a/doc/2.control.examples/15.array.pd b/doc/2.control.examples/15.array.pd index 180afeb1..bc2fe7ae 100644 --- a/doc/2.control.examples/15.array.pd +++ b/doc/2.control.examples/15.array.pd @@ -55,10 +55,10 @@ #X floatatom 652 647 5 0 0 0 - - - 0; #X text 471 274 check [soundfiler] for reading and writing files. The example to the right reads a soundfile or a text file to an array., f 30; #X text 498 366 A simpler way to read a text file (but no resizing available), f 33; -#X text 31 169 It's also posssible to change most of these settings with messages sent to the array name \, like changing the array size with the "resize" message shown to the right.; #X text 31 43 Arrays in Pd provide a unified way to deal with lists of numbers \, treating them as either audio samples or control messages. To make an array \, select "Array" on the "Put" menu. Dialogs appear to help you choose the name \, array size and various flags (for instance \, if the contents of the array are saved with the patch or not.) Right click for properties where you can edit these settings as well and also get 'help' for detailed reference information., f 57; #X text 509 15 Some messgages you can send to an array object:, f 28; #X text 31 221 Arrays live in graphs. When you make an array you can choose to include it in a new graph or in a 'last' graph \, which allows you to include more than one array in the same graph (as the next example shows.) You can click on arrays and drag to set and change values., f 57; +#X text 31 169 It's also possible to change most of these settings with messages sent to the array name \, like changing the array size with the "resize" message shown to the right.; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 26 0 27 0; diff --git a/doc/3.audio.examples/A10.review.pd b/doc/3.audio.examples/A10.review.pd index 2133d75e..4ea3a933 100644 --- a/doc/3.audio.examples/A10.review.pd +++ b/doc/3.audio.examples/A10.review.pd @@ -35,7 +35,6 @@ #X obj 88 625 hsl 162 19 0 127 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1; #X text 259 624 -- slider; #X obj 167 269 dbtorms; -#X text 227 267 -- accoustic conversions; #N canvas 0 22 450 278 (subpatch) 0; #X array array 64 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; @@ -43,3 +42,4 @@ #X restore 81 443 graph; #X text 157 122 -- sampler (which we've only used for graphing audio so far); #X text 242 468 -- array (for graphing audio so far); +#X text 227 267 -- acoustic conversions; diff --git a/doc/3.audio.examples/B06.table.switching.pd b/doc/3.audio.examples/B06.table.switching.pd index a6851be8..309862d4 100644 --- a/doc/3.audio.examples/B06.table.switching.pd +++ b/doc/3.audio.examples/B06.table.switching.pd @@ -23,8 +23,8 @@ #X msg 194 244 set waveshape15c; #X text 563 490 updated for Pd version 0.52; #X obj 79 497 table; -#X text 123 498 <-- see also this older and less powerfull object (you can't save contents in this one)., f 46; #X text 48 381 There's also an [array] object so that you can have arrays with parameterizable names and sizes. You can also save the state of the array in this case \, and read it in from a file or calculate it at startup.; +#X text 123 498 <-- see also this older and less powerful object (you can't save contents in this one)., f 46; #X connect 3 0 8 0; #X connect 4 0 3 0; #X connect 5 0 3 0; diff --git a/doc/3.audio.examples/D13.additive.qlist.pd b/doc/3.audio.examples/D13.additive.qlist.pd index 06e8c0cc..d041b3d6 100644 --- a/doc/3.audio.examples/D13.additive.qlist.pd +++ b/doc/3.audio.examples/D13.additive.qlist.pd @@ -27,7 +27,6 @@ #X text 179 446 <-- rewind; #X text 175 476 <-- step through; #X text 99 325 this is where comments go to:, f 15; -#X text 402 407 You can also use the more modern [text sequence] object instead which is more powerfull. It can also save contents of the sequence with the patch., f 32; #X msg 411 164 tempo 5 \, bang; #X msg 160 531 stop; #X text 201 531 <-- stop; @@ -36,6 +35,7 @@ #X msg 153 503 line 0 \, auto; #X text 250 500 <-- rewind and play; #X text 278 517 automatically, f 15; +#X text 402 407 You can also use the more modern [text sequence] object instead which is more powerful. It can also save contents of the sequence with the patch., f 32; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 5 0 0 0; @@ -43,11 +43,11 @@ #X connect 7 0 0 0; #X connect 10 0 19 0; #X connect 13 0 11 0; -#X connect 20 0 31 0; +#X connect 20 0 30 0; #X connect 21 0 18 0; #X connect 22 0 18 0; -#X connect 27 0 0 0; -#X connect 28 0 18 0; -#X connect 30 0 31 0; +#X connect 26 0 0 0; +#X connect 27 0 18 0; +#X connect 29 0 30 0; +#X connect 30 0 18 0; #X connect 31 0 18 0; -#X connect 32 0 18 0; diff --git a/doc/4.data.structures/01.scalars.pd b/doc/4.data.structures/01.scalars.pd index 1ae518a1..97952bc5 100644 --- a/doc/4.data.structures/01.scalars.pd +++ b/doc/4.data.structures/01.scalars.pd @@ -53,12 +53,12 @@ #X text 544 10 IMPORTANT NOTE:, f 63; #X obj 162 286 filledpolygon 250 q 5 0 0 20 z 40 0; #X text 544 350 The reason you probably want to do this is because it is more intuitive to have an increase in "Y" values reflect on an increase in pixels moving upwards. This is specially important for arrays \, but it also affects the scalars in this example. For the triangular shapes \, the apex value depends on a 'z' field which is a vertical coordinate. Positive values of 'z' move the apex upwards \, while negative values move it downwards., f 63; -#X text 22 145 When you right click on a scalar for properties \, you can see the template namem the specified field names and then the scalar's data \, which is the template name followed by the field values., f 70; #X text 544 455 For all examples in this tutorial \, the Units per pixel for both "X" and "Y" is "1"!, f 63; -#X text 544 32 Patch windows in Pd have properties \, click on an empty spot on the canvas to ask for it \, or right click on subpatches and abstractions boxes. The "Units per pixels" parameter is only meaningful if you don't have a "graph no parent" and the deault is "1" for "X" and "-1" for "Y"., f 63; #X text 544 110 This default setting sets the (0 \, 0) coordinates (the 'origin') to the top left of the canvas this works well for regular canvases/patches \, since you can resize the window in a more intuitive way \, where dragging from the bottom corners don't move the objects. For regular patches \, the actual value of the unit is not really meaningful \, only if it is positive or not. The actual 'scale' values only affect the display of Scalars. In this case \, an increment in 1 pixel reflect an incremente of 1 in value. A unit of "0.5" means that moving an object by 1 pixel changes the values in halves., f 63; +#X text 22 145 When you right click on a scalar for properties \, you can see the template name \, the specified field names and then the scalar's data \, which is the template name followed by the field values., f 70; +#X text 544 32 Patch windows in Pd have properties \, click on an empty spot on the canvas to ask for it \, or right click on subpatches and abstractions boxes. The "Units per pixels" parameter is only meaningful if you don't have a "graph no parent" and the default is "1" for "X" and "-1" for "Y"., f 63; #X restore 213 343 pd template1; -#X text 28 222 Scalars are described by "templates" \, which are defined in [struct] objects inside a given subwindow. In this case \, the subwindow is "template1" but it could hve any other name. The template in [struct] describes what form the data take and how it is shown. It's possible to mix data of many different templates in the same collection \, but each template needs its own distinct subwindow. The data is displayed in the [pd data1] subpatch., f 77; -#X text 28 116 When the data window is locked (not in edit mode) you can drag the apex of either triangle up or down to change the altitude (you should see the cursor change when dragging is possible and why this happens is explained in the "template1" suboatch.) You can also right click and ask for properties \, so you can see the Data Structures of the selected scalar \, you can also change values in the properties window. In edit (unlocked) mode \, you can move the entire triangles around \, or cut \, copy \, and paste them., f 77; #X text 368 481 updated for Pd version 0.52; +#X text 28 116 When the data window is locked (not in edit mode) you can drag the apex of either triangle up or down to change the altitude (you should see the cursor change when dragging is possible and why this happens is explained in the "template1" subpatch.) You can also right click and ask for properties \, so you can see the Data Structures of the selected scalar \, you can also change values in the properties window. In edit (unlocked) mode \, you can move the entire triangles around \, or cut \, copy \, and paste them., f 77; +#X text 28 222 Scalars are described by "templates" \, which are defined in [struct] objects inside a given subwindow. In this case \, the subwindow is "template1" but it could have any other name. The template in [struct] describes what form the data take and how it is shown. It's possible to mix data of many different templates in the same collection \, but each template needs its own distinct subwindow. The data is displayed in the [pd data1] subpatch., f 77; #X connect 4 0 5 0; diff --git a/doc/4.data.structures/03.setting.data.pd b/doc/4.data.structures/03.setting.data.pd index fc351fae..8fb47805 100644 --- a/doc/4.data.structures/03.setting.data.pd +++ b/doc/4.data.structures/03.setting.data.pd @@ -1,5 +1,5 @@ #N struct template3 float x float y float w float h float c; -#N canvas 279 34 676 631 12; +#N canvas 501 61 676 631 12; #X obj 281 337 pointer; #X msg 329 301 next; #N canvas 961 36 381 425 data3 1; @@ -216,7 +216,7 @@ #X text 368 301 <-- get pointer of next scalar; #X text 306 204 <-- click to re-initialize; #X obj 281 178 loadbang; -#X text 30 83 Getting parameter values is as in the previous patch. However \, as you traverse the list with "next" messages the new pointers are also sent to the [set] object \, whose arguments define the template name and the name of the fields to set. Values from [get] set the number values of the 5 number boxes and you can drag them to change the parameters of scalars. Clicking the "next" message now loops back to the beggining of the list when reaching its end., f 86; +#X text 30 83 Getting parameter values is as in the previous patch. However \, as you traverse the list with "next" messages the new pointers are also sent to the [set] object \, whose arguments define the template name and the name of the fields to set. Values from [get] set the number values of the 5 number boxes and you can drag them to change the parameters of scalars. Clicking the "next" message now loops back to the beginning of the list when reaching its end., f 86; #X connect 0 0 32 0; #X connect 0 1 12 0; #X connect 1 0 0 0; diff --git a/doc/4.data.structures/11.scaling.pd b/doc/4.data.structures/11.scaling.pd index 07b51f79..a6d026a1 100644 --- a/doc/4.data.structures/11.scaling.pd +++ b/doc/4.data.structures/11.scaling.pd @@ -8,32 +8,21 @@ #X coords 0 341 1 340 0 0 0; #X restore 92 284 pd data10; #N canvas 315 107 562 552 template10a 0; -#X obj 60 18 struct template10a float x float y float a float b float -c; -#X obj 92 423 bng 17 250 50 0 empty empty empty 0 -6 0 8 #dfdfdf #000000 -#000000; +#X obj 60 18 struct template10a float x float y float a float b float c; +#X obj 92 423 bng 17 250 50 0 empty empty empty 0 -6 0 8 #dfdfdf #000000 #000000; #X obj 92 449 t b b; #X obj 278 475 pointer; #X msg 278 444 traverse pd-data10 \, bang; #X obj 92 506 append template10a x y a b c; #X msg 92 476 50 50 30 20 40; -#X obj 59 107 drawpolygon 0 1 0 10 0 a(0:100)(10:110) -5 a(0:100)(5:105) -0 a(0:100)(10:110) 5 a(0:100)(5:105); +#X obj 59 107 drawpolygon 0 1 0 10 0 a(0:100)(10:110) -5 a(0:100)(5:105) 0 a(0:100)(10:110) 5 a(0:100)(5:105); #X obj 61 326 drawcurve 0 1 0 -2 0 3 5 3 5 -8 -13 -8 -13 21; -#X obj 61 276 drawpolygon 0 1 10 0 c(0:100)(10:110) 0 c(0:100)(5:105) --5 c(0:100)(10:110) 0 c(0:100)(5:105) 5; -#X obj 61 192 drawpolygon 0 1 7 7 b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70) -b(0:100)(7:77) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70) -; -#X text 59 49 'a' controls an arrow pointing upward. The main segment -goes from (0.10) to (0 \, a+10). Then we hike 5 units down and left -\, back to the point \, and then 5 units down and right.; -#X text 61 359 It's a good practice to put a small patch like this -one in each template that you can use to make the first one (and will -often find yourself wanting to use again later):; -#X text 64 153 Slightly more complicated construction to make an arrow -at 45 degrees with the 'b' field:; -#X text 62 251 'c' controls an arrow pointing to the rigth.; +#X obj 61 276 drawpolygon 0 1 10 0 c(0:100)(10:110) 0 c(0:100)(5:105) -5 c(0:100)(10:110) 0 c(0:100)(5:105) 5; +#X obj 61 192 drawpolygon 0 1 7 7 b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70); +#X text 59 49 'a' controls an arrow pointing upward. The main segment goes from (0.10) to (0 \, a+10). Then we hike 5 units down and left \, back to the point \, and then 5 units down and right.; +#X text 61 359 It's a good practice to put a small patch like this one in each template that you can use to make the first one (and will often find yourself wanting to use again later):; +#X text 64 153 Slightly more complicated construction to make an arrow at 45 degrees with the 'b' field:; +#X text 62 251 'c' controls an arrow pointing to the right.; #X connect 1 0 2 0; #X connect 2 0 6 0; #X connect 2 1 4 0; @@ -42,18 +31,14 @@ at 45 degrees with the 'b' field:; #X connect 6 0 5 0; #X restore 92 234 pd template10a; #N canvas 288 217 500 359 template10b 0; -#X obj 79 226 bng 15 250 50 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 -#000000; +#X obj 79 226 bng 15 250 50 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000; #X obj 79 246 t b b; #X obj 237 274 pointer; #X msg 237 244 traverse pd-data10 \, bang; #X obj 41 26 struct template10b float x float y float w symbol s; #X msg 79 277 50 50 30; #X obj 79 306 append template10b x y w; -#X obj 41 61 filledpolygon 900 0 2 w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:92) -w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:-38) w(0:100)(0:38) w(0:100)(0:-92) -w(0:100)(0:-38) w(0:100)(0:-92) w(0:100)(0:-92) w(0:100)(0:-38) w(0:100)(0:-92) -w(0:100)(0:38) w(0:100)(0:-38) w(0:100)(0:92); +#X obj 41 61 filledpolygon 900 0 2 w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:92) w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:-38) w(0:100)(0:38) w(0:100)(0:-92) w(0:100)(0:-38) w(0:100)(0:-92) w(0:100)(0:-92) w(0:100)(0:-38) w(0:100)(0:-92) w(0:100)(0:38) w(0:100)(0:-38) w(0:100)(0:92); #X obj 42 167 drawsymbol s w(0:100)(10:-90) 10 0; #X connect 0 0 1 0; #X connect 1 0 5 0; @@ -62,14 +47,7 @@ w(0:100)(0:38) w(0:100)(0:-38) w(0:100)(0:92); #X connect 3 0 2 0; #X connect 5 0 6 0; #X restore 92 259 pd template10b; -#X text 30 18 Screen dimensions can be tailored to specific ranges -by adding suffixes in the drawing instructions. For example \, in "template10a" -\, a coordinate such as "b(0:100)(7:77)" instructs the drawpolygon -object to rescale b from the range 0-100 to the range 7-77.; -#X text 29 100 The application is to introduce an offset to a coordinate. -For example \, the construction "a(0:100)(10:110)" just gives a+10. -, f 60; -#X text 29 154 Each of the three arrows of template10a is controlled -by a single parameter (a \, b \, or c) and the entire red octagon in -template10b likewise., f 60; +#X text 30 18 Screen dimensions can be tailored to specific ranges by adding suffixes in the drawing instructions. For example \, in "template10a" \, a coordinate such as "b(0:100)(7:77)" instructs the drawpolygon object to rescale b from the range 0-100 to the range 7-77.; +#X text 29 100 The application is to introduce an offset to a coordinate. For example \, the construction "a(0:100)(10:110)" just gives a+10., f 60; +#X text 29 154 Each of the three arrows of template10a is controlled by a single parameter (a \, b \, or c) and the entire red octagon in template10b likewise., f 60; #X text 260 265 updated for Pd version 0.39; diff --git a/doc/4.data.structures/16.FFT-plot.pd b/doc/4.data.structures/16.FFT-plot.pd index bd9f069e..4155024c 100644 --- a/doc/4.data.structures/16.FFT-plot.pd +++ b/doc/4.data.structures/16.FFT-plot.pd @@ -143,7 +143,7 @@ #N canvas 395 221 458 221 peaks-template 0; #X obj 59 81 filledpolygon 3 3 3 0 0 0 amp 0 0; #X obj 58 41 struct peaks-template float x float y float amp; -#X text 55 131 This is a template for ploting FFT amplitude peaks \, where a polygon is drawn for all peaks., f 46; +#X text 55 131 This is a template for plotting FFT amplitude peaks \, where a polygon is drawn for all peaks., f 46; #X restore 409 337 pd peaks-template; #X text 380 153 synthesize -->; #X msg 207 168 voice2.wav; diff --git a/doc/4.data.structures/17.partialtracer.pd b/doc/4.data.structures/17.partialtracer.pd index 1edf0713..c78e52ba 100644 --- a/doc/4.data.structures/17.partialtracer.pd +++ b/doc/4.data.structures/17.partialtracer.pd @@ -145,7 +145,6 @@ #X obj 267 402 set trace-template y; #X obj 509 253 get trace-template x y; #X msg 457 127 traverse pd-trace-list \, next; -#X text 301 41 This subpatch cretaes tracks manually or randomly; #X obj 243 221 bng 19 250 50 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000; #X floatatom 67 228 6 0 0 0 - - - 0; #X floatatom 227 161 6 0 0 0 - - - 0; @@ -182,6 +181,7 @@ #X obj 773 291 trigger bang bang pointer; #X obj 784 444 random 50; #X obj 784 470 + 50; +#X text 301 41 This subpatch creates tracks manually or randomly; #X connect 1 0 7 0; #X connect 2 0 10 0; #X connect 4 0 10 1; @@ -191,50 +191,50 @@ #X connect 4 0 13 0; #X connect 4 0 6 0; #X connect 5 0 4 0; -#X connect 6 0 21 0; +#X connect 6 0 20 0; #X connect 7 0 3 0; #X connect 9 0 1 0; #X connect 9 0 8 1; -#X connect 9 0 47 1; -#X connect 13 0 20 0; -#X connect 13 1 19 0; +#X connect 9 0 46 1; +#X connect 13 0 19 0; +#X connect 13 1 18 0; #X connect 14 0 4 0; -#X connect 16 0 1 0; -#X connect 17 0 8 0; -#X connect 18 0 9 0; -#X connect 22 0 11 0; -#X connect 23 0 12 0; -#X connect 24 0 45 2; -#X connect 25 0 24 0; -#X connect 26 0 27 0; -#X connect 27 0 35 0; -#X connect 27 1 28 0; +#X connect 15 0 1 0; +#X connect 16 0 8 0; +#X connect 17 0 9 0; +#X connect 21 0 11 0; +#X connect 22 0 12 0; +#X connect 23 0 44 2; +#X connect 24 0 23 0; +#X connect 25 0 26 0; +#X connect 26 0 34 0; +#X connect 26 1 27 0; +#X connect 27 0 28 0; #X connect 28 0 29 0; -#X connect 29 0 30 0; -#X connect 30 0 45 1; -#X connect 31 0 45 0; -#X connect 32 0 0 0; -#X connect 33 0 25 0; -#X connect 35 0 36 0; -#X connect 36 0 31 0; -#X connect 37 0 44 1; -#X connect 38 0 40 0; -#X connect 39 0 40 1; -#X connect 40 0 41 0; -#X connect 40 0 43 0; -#X connect 41 0 40 1; -#X connect 42 0 38 0; -#X connect 43 0 50 0; -#X connect 43 1 37 0; -#X connect 45 0 49 0; -#X connect 46 0 47 0; -#X connect 49 0 42 0; -#X connect 49 1 32 0; -#X connect 49 1 39 0; -#X connect 49 2 0 1; -#X connect 49 2 37 1; -#X connect 50 0 51 0; -#X connect 51 0 44 0; +#X connect 29 0 44 1; +#X connect 30 0 44 0; +#X connect 31 0 0 0; +#X connect 32 0 24 0; +#X connect 34 0 35 0; +#X connect 35 0 30 0; +#X connect 36 0 43 1; +#X connect 37 0 39 0; +#X connect 38 0 39 1; +#X connect 39 0 40 0; +#X connect 39 0 42 0; +#X connect 40 0 39 1; +#X connect 41 0 37 0; +#X connect 42 0 49 0; +#X connect 42 1 36 0; +#X connect 44 0 48 0; +#X connect 45 0 46 0; +#X connect 48 0 41 0; +#X connect 48 1 31 0; +#X connect 48 1 38 0; +#X connect 48 2 0 1; +#X connect 48 2 36 1; +#X connect 49 0 50 0; +#X connect 50 0 43 0; #X restore 385 594 pd make-trace; #X obj 319 427 bng 20 250 50 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000; #X obj 393 427 tgl 19 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 0 1; @@ -244,17 +244,17 @@ #X obj 177 179 spigot; #X obj 54 106 inlet; #X obj 216 106 inlet; -#X text 57 54 This subpatch plays the orignal sample.; #X text 242 147 looping; #X obj 216 147 tgl 19 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 0 1; #X obj 54 149 tabplay~ \$0-sample; -#X connect 1 0 8 0; +#X text 57 54 This subpatch plays the original sample.; +#X connect 1 0 7 0; #X connect 2 0 1 0; -#X connect 3 0 8 0; -#X connect 4 0 7 0; -#X connect 7 0 2 1; -#X connect 8 0 0 0; -#X connect 8 1 2 0; +#X connect 3 0 7 0; +#X connect 4 0 6 0; +#X connect 6 0 2 1; +#X connect 7 0 0 0; +#X connect 7 1 2 0; #X restore 319 458 pd original; #X text 439 499 play original sample., f 8; #X text 416 427 Loop; @@ -360,7 +360,6 @@ #X connect 39 0 20 0; #X restore 538 242 pd analysis; #X text 258 15 This patch derives sinusoidal "tracks" from a sampled sound via [sigmund~] into data structures and resynthesizes it.; -#X text 51 295 To resynthesize \, activate 'start' toggle and then 'step' over and over to move to the next resynthesis frame (hit toggle again to stop). Alternatively \, you can step with [metro] at a given rate in msec. The 'loop' toggle goes back to the beggining of the sample when done., f 91; #X text 51 345 The resynthesizer is limited to 50-voice polyphony (the 'nvoice' number box sets the number of voices/tracks from 1 to 50). You can check the trace-list subwindow and graphically edit the spectral analysis by clicking and dragging in the arrays or duplicating \, deleting and changing their position \, then listen to the result., f 91; #X obj 468 130 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 575 161 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; @@ -514,6 +513,7 @@ #X connect 6 0 5 0; #X restore 649 244 pd init; #X text 511 583 updated for Pd version 0.54-0; +#X text 51 295 To resynthesize \, activate 'start' toggle and then 'step' over and over to move to the next resynthesis frame (hit toggle again to stop). Alternatively \, you can step with [metro] at a given rate in msec. The 'loop' toggle goes back to the beginning of the sample when done., f 91; #X connect 6 0 11 2; #X connect 7 0 27 0; #X connect 9 0 11 0; @@ -525,12 +525,12 @@ #X connect 20 0 22 0; #X connect 21 0 22 1; #X connect 22 0 8 0; -#X connect 31 0 11 3; -#X connect 32 0 27 1; -#X connect 33 0 34 0; -#X connect 34 0 45 1; -#X connect 35 0 34 1; -#X connect 41 0 45 0; -#X connect 43 0 45 2; -#X connect 45 0 36 0; -#X connect 48 0 45 1; +#X connect 30 0 11 3; +#X connect 31 0 27 1; +#X connect 32 0 33 0; +#X connect 33 0 44 1; +#X connect 34 0 33 1; +#X connect 40 0 44 0; +#X connect 42 0 44 2; +#X connect 44 0 35 0; +#X connect 47 0 44 1; diff --git a/doc/5.reference/key-input-help.pd b/doc/5.reference/key-input-help.pd index 7c222b23..51d67bcb 100644 --- a/doc/5.reference/key-input-help.pd +++ b/doc/5.reference/key-input-help.pd @@ -1,4 +1,4 @@ -#N canvas 466 62 523 358 12; +#N canvas 466 62 523 386 12; #X obj 22 15 key; #X obj 51 15 keyup; #X obj 94 15 keyname; @@ -6,8 +6,7 @@ #X floatatom 125 95 4 0 0 0 - - - 0; #X obj 275 66 keyname; #X symbolatom 321 95 10 0 0 0 - - - 0; -#X text 289 332 updated for Pd version 0.32.; -#X text 35 261 Caveat -- this only works if Pd actually gets the key events which can depend on the stacking order of windows and/or the pointer location \, depending on the system., f 65; +#X text 289 356 updated for Pd version 0.32.; #X obj 194 66 keyup; #X floatatom 194 95 4 0 0 0 - - - 0; #X floatatom 275 95 4 0 0 0 - - - 0; @@ -40,10 +39,11 @@ #X text 93 255 - key symbol name and press/release information; #X restore 338 15 pd reference; #X text 436 16 <= click; -#X obj 8 322 cnv 1 510 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X text 35 134 [key] and [keyup] report the (system dependent) numbers of "printing" keys of the keyboard. [key] outputs when the keyboard key is pressed while [keyup] outputs it when you release the key. Check your system's preferences for 'autorepeat' as it affects the output of these objects., f 65; +#X obj 8 346 cnv 1 510 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 35 211 [keyname] gives the symbolic name of the key on the right outlet \, with a 1 or 0 in the left outlet if it's up or down \, and works with non-printing keys like "shift" or "F1"., f 65; +#X text 35 261 Caveat -- this only works if Pd actually gets the key events which can depend on the stacking order of windows and/or the pointer location \, depending on the system. Also note that typical computer keyboards will only allow you to press a few keys simultaneously., f 65; +#X text 35 134 [key] and [keyup] report the (system dependent) numbers of "printing" keys of the keyboard. The [key] object outputs when the keyboard key is pressed while [keyup] outputs it when you release the key. Check your system's preferences for 'autorepeat' as it affects the output of these objects., f 65; #X connect 3 0 4 0; -#X connect 5 0 11 0; +#X connect 5 0 10 0; #X connect 5 1 6 0; -#X connect 9 0 10 0; +#X connect 8 0 9 0; diff --git a/doc/5.reference/savestate-ex3.pd b/doc/5.reference/savestate-ex3.pd index c4b7c48f..226b903b 100644 --- a/doc/5.reference/savestate-ex3.pd +++ b/doc/5.reference/savestate-ex3.pd @@ -1,4 +1,4 @@ -#N canvas 372 253 950 466 12; +#N canvas 309 176 950 466 12; #X obj 418 46 savestate; #X listbox 129 100 12 0 0 0 - - - 0; #X listbox 129 124 12 0 0 0 - - - 0; @@ -28,10 +28,10 @@ #X obj 490 230 r \$0-freq; #X obj 385 333 route freq; #X obj 385 377 s \$0-set-freq; -#X text 650 101 You can use multiple [savestate] objects instead of sending multiple ists to a single one., f 35; #X text 650 155 The thing is that the [savestate] objects aren't differentiated. In this example both will output a collection of lists sent to both objects., f 34; #X text 652 241 Hence \, it is a good idea to tag and route the lists differently. Here we prepend "amp" or "freq" to tag the lists., f 34; #X obj 490 254 list prepend freq; +#X text 650 101 You can use multiple [savestate] objects instead of sending multiple lists to a single one., f 35; #X connect 0 0 13 0; #X connect 0 1 17 0; #X connect 1 0 11 0; @@ -58,7 +58,7 @@ #X connect 22 1 24 0; #X connect 23 0 27 0; #X connect 24 0 22 0; -#X connect 26 0 32 0; +#X connect 26 0 31 0; #X connect 27 0 28 0; -#X connect 32 0 24 1; +#X connect 31 0 24 1; #X coords 0 -1 1 1 166 75 1 125 75; diff --git a/doc/5.reference/sig~-help.pd b/doc/5.reference/sig~-help.pd index afdb3906..293e57fe 100644 --- a/doc/5.reference/sig~-help.pd +++ b/doc/5.reference/sig~-help.pd @@ -35,7 +35,7 @@ #X text 47 57 [sig~] object converts numbers to an audio signal. In this example \, the [snapshot~] converts back again., f 54; #X obj 319 170 set-dsp-tgl; #X obj 169 415 vline~; -#X text 47 95 You can only convert one float per block \, for a more sophisticated convertion in between blocks you can use [vline~]; +#X text 47 95 You can only convert one float per block \, for a more sophisticated conversion in between blocks you can use [vline~]; #X connect 0 0 1 0; #X connect 3 0 0 0; #X connect 4 0 3 0; diff --git a/doc/5.reference/until-help.pd b/doc/5.reference/until-help.pd index 03774498..58d66094 100644 --- a/doc/5.reference/until-help.pd +++ b/doc/5.reference/until-help.pd @@ -1,15 +1,15 @@ -#N canvas 547 54 414 438 12; +#N canvas 547 54 415 461 12; #X obj 21 21 until; -#X obj 126 274 until; -#X text 151 215 start; -#X msg 142 244 3; -#X text 178 245 start limited to 3 iterations; -#X obj 126 312 f; -#X obj 164 305 + 1; -#X obj 219 301 sel 0; -#X obj 164 331 mod 10; +#X obj 126 294 until; +#X text 151 235 start; +#X msg 142 264 3; +#X text 178 265 start limited to 3 iterations; +#X obj 126 332 f; +#X obj 164 325 + 1; +#X obj 219 321 sel 0; +#X obj 164 351 mod 10; #X obj 12 52 cnv 1 400 1 empty empty empty 8 12 0 13 #000000 #000000 0; -#X obj 2 394 cnv 1 400 1 empty empty empty 8 12 0 13 #000000 #000000 0; +#X obj 2 414 cnv 1 400 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 340 20 <= click; #N canvas 598 111 573 271 reference 0; #X obj 8 52 cnv 5 550 5 empty empty INLET: 8 18 0 13 #202020 #000000 0; @@ -18,20 +18,21 @@ #X obj 8 207 cnv 2 550 2 empty empty ARGUMENTS: 8 12 0 13 #202020 #000000 0; #X text 147 218 NONE, f 52; #X obj 38 18 until; -#X text 136 180 bang - bangs in a loop., f 49; -#X text 137 106 bang - start loop until a bang reaches the right inlet.; -#X text 130 86 float - set number of iterations in the loop.; +#X text 126 180 bang - bangs in a loop., f 49; +#X text 127 106 bang - start loop until a bang reaches the right inlet.; #X obj 7 130 cnv 1 550 1 empty empty 2nd: 8 12 0 13 #7c7c7c #000000 0; #X obj 9 83 cnv 1 550 1 empty empty 1st: 8 12 0 13 #7c7c7c #000000 0; -#X text 137 136 bang - stops the loop.; +#X text 127 136 bang - stops the loop.; #X text 87 18 - bang loop mechanism.; +#X text 120 86 float - set number of iterations in the loop and start it.; #X restore 246 21 pd reference; -#X text 23 162 WARNING: if you bang an [until] which doesn't have a stopping mechanism \, Pd goes into an infinite loop and freezes!; -#X obj 126 361 print until; -#X text 20 65 The [until] object's left inlet starts a loop in which it outputs "bang" until its right inlet gets a bang which stops it. If you start [until] with a number \, it iterates that number of times (if a bang to the right inlet doesn't stop it first). 0 or negative numbers are ignored., f 54; -#X text 202 407 updated for Pd version 0.41; -#X obj 126 215 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X text 23 182 WARNING: if you bang an [until] which doesn't have a stopping mechanism \, Pd goes into an infinite loop and freezes!; +#X obj 126 381 print until; +#X text 202 427 updated for Pd version 0.41; +#X obj 126 235 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 70 20 - bang loop mechanism; +#X text 20 65 When receiving a bang at the left inlet \, [until] starts a loop in which it outputs "bang" until its right inlet gets a bang which stops it., f 54; +#X text 20 114 If you send [until] a number instead of a bang \, it iterates that number of times (if a bang to the right inlet doesn't stop it first). 0 or negative numbers are ignored., f 53; #X connect 1 0 5 0; #X connect 3 0 1 0; #X connect 5 0 6 0; @@ -40,4 +41,4 @@ #X connect 7 0 1 1; #X connect 8 0 5 1; #X connect 8 0 7 0; -#X connect 17 0 1 0; +#X connect 16 0 1 0; From 33a75ad766403ebf4e1dabce23a98524f859fc32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 9 Oct 2023 15:18:19 +0200 Subject: [PATCH 48/68] Make sure that DEKEN_OS and DEKEN_CPU are passed as quoted defines otherwise we see weird effects if the *value* is also defined as a macro. e.g. compiling with `-DDEKEN_CPU="i386"` will pass the literal `i386` to the preprocessor-engine. On x86_32 (aka "i386"), gcc will have a predefined macro 'i386' that is set to 1. `stringify(DEKEN_CPU)` will then generate a string "1" and we end up with a bogus deken specifier like "Linux-1-64". so we have to pass it double-quoted, e.g. `-DDEKEN_CPU="'i386'"`, which will then expand to the string "'i386'" (with the extra quotes), which we then have to strip down again. Closes: https://github.com/pure-data/pure-data/issues/2101 --- src/Makefile.am | 4 ++-- src/s_inter.c | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index af02aab7..466b88b4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -229,8 +229,8 @@ pd_CFLAGS += $(WISHDEFINE) DEKEN_OS=@DEKEN_OS@ DEKEN_CPU=@DEKEN_CPU@ DEKEN_DEFINE= -DEKEN_DEFINE+=$(if $(DEKEN_OS),-DDEKEN_OS="$(DEKEN_OS)") -DEKEN_DEFINE+=$(if $(DEKEN_CPU),-DDEKEN_CPU="$(DEKEN_CPU)") +DEKEN_DEFINE+=$(if $(DEKEN_OS),-DDEKEN_OS="'$(DEKEN_OS)'") +DEKEN_DEFINE+=$(if $(DEKEN_CPU),-DDEKEN_CPU="'$(DEKEN_CPU)'") pd_CFLAGS += $(DEKEN_DEFINE) diff --git a/src/s_inter.c b/src/s_inter.c index c3f4e79c..adf82f8a 100644 --- a/src/s_inter.c +++ b/src/s_inter.c @@ -1159,15 +1159,49 @@ static const char*deken_CPU[] = { #endif , 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const char*strip_quotes(const char*s, char*outbuf, size_t outsize) { + size_t len = strlen(s); + const char q = (len>1)?s[0]:0; + /* only strip single or double quotes */ + switch(q) { + case '\'': + case '"': + break; + case 0: + default: + return s; + } + /* only strip quotes if they are both at the beginning and the end */ + if (q != s[len-1]) + return s; + + if(len>outsize) + len = outsize; + + outbuf[0] = 0; + strncpy(outbuf, s+1, len-2); + outbuf[outsize-1] = 0; + return outbuf; +} + static void init_deken_arch(void) { static int initialized = 0; + static char deken_OS_noquotes[MAXPDSTRING]; + static char deken_CPU_noquotes[MAXPDSTRING]; + if(initialized) return; initialized = 1; -#define CPUNAME_SIZE 15 -#if !defined(DEKEN_CPU) +#if defined(DEKEN_OS) + deken_OS = strip_quotes(deken_OS, deken_OS_noquotes, MAXPDSTRING); +#endif /* DEKEN_OS */ + +#define CPUNAME_SIZE 15 +#if defined(DEKEN_CPU) + deken_CPU[0] = strip_quotes(deken_CPU[0], deken_CPU_noquotes, MAXPDSTRING); +#else /* !DEKEN_CPU */ # if defined __ARM_ARCH /* ARM-specific: * if we are running ARMv7, we can also load ARMv6 externals From f9637d43860f7fa0e62cec0ff1edaaae94a31ffd Mon Sep 17 00:00:00 2001 From: danomatika Date: Fri, 20 Oct 2023 14:09:19 +0200 Subject: [PATCH 49/68] tiny clarification --- mac/README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mac/README.txt b/mac/README.txt index ece75ec8..26819c05 100644 --- a/mac/README.txt +++ b/mac/README.txt @@ -61,7 +61,7 @@ argument, a "Pd.app" is built. The version argument is only used as a suffix to the file name and contextual version info is pulled from configure script output. -A pre-built universal (32/64 bit) Tk 8.6.10 Wish with patches applied is +A pre-built universal (32/64 bit) Tk 8.6.10+ Wish with patches applied is included with the Pd source distribution and works across the majority of macOS versions up to 10.15. This is the default Wish.app when using osx-app.sh. If you want to use a different Wish.app (a newer version, a custom build, a system From 13a8265243bce2059581ae3a01e0297a60fe0f8f Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 20 Oct 2023 22:42:43 -0300 Subject: [PATCH 50/68] adress the issue in https://github.com/pure-data/pure-data/issues/2106 this tries to better and explicitly say that you have an iniatilaztion that binds empty symbols to [v], [s], [r] and stuff, see https://github.com/pure-data/pure-data/issues/2106 --- doc/5.reference/send-receive-help.pd | 8 ++++---- doc/5.reference/send-receive-tilde-help.pd | 4 ++-- doc/5.reference/value-help.pd | 18 +++++++++--------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/doc/5.reference/send-receive-help.pd b/doc/5.reference/send-receive-help.pd index 98141941..5f71ebe8 100644 --- a/doc/5.reference/send-receive-help.pd +++ b/doc/5.reference/send-receive-help.pd @@ -14,11 +14,11 @@ #X floatatom 332 174 5 0 0 0 - - - 0; #X obj 374 14 s; #X msg 199 306 \; help-send1 34 \; help-send2 67; -#X obj 155 533 send; +#X obj 156 540 send; #X msg 181 448 symbol help-send1; #X msg 194 477 symbol help-send2; -#X floatatom 120 478 5 0 0 0 - - - 0; -#X symbolatom 181 506 12 0 0 0 - - - 0; +#X floatatom 127 478 5 0 0 0 - - - 0; +#X symbolatom 181 509 12 0 0 0 - - - 0; #X obj 599 197 value y; #X obj 525 214 send y; #X floatatom 525 186 5 0 0 0 - - - 0; @@ -151,11 +151,11 @@ #X obj 824 514 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 809 409 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X text 23 225 [send] sends messages to [receive] objects with the same name (set by the argument). They work across windows too. Also \, you can use message boxes to send messages if they start with a semicolon as shown below:; -#X text 22 378 If invoked without an argument \, [send] creates an inlet to let you set the target via "symbol" messages:, f 54; #X text 499 110 The [value] object receives floats from [send] objects with the same name as its variable name. You can also use [send] to send messages to arrays with the same name., f 55; #X text 479 262 The [receive] object can also get messages from [value] and the other objects below via their "send" messages. Note that [value] can also get these values from these objects (except [list store] because [value] can't deal with lists).; #X obj 503 517 hsl 162 19 0 127 0 0 empty empty empty -2 -10 0 12 #dfdfdf #000000 #000000 0 1; #X text 7 570 Open subpatch to see how to deal with '\$0' ->; +#X text 22 378 If invoked without an argument \, [send] is assigned to an empty symbol and creates an inlet to let you set the target via "symbol" messages:, f 54; #X connect 4 0 10 0; #X connect 5 0 11 0; #X connect 6 0 12 0; diff --git a/doc/5.reference/send-receive-tilde-help.pd b/doc/5.reference/send-receive-tilde-help.pd index 453e53ba..faf7169d 100644 --- a/doc/5.reference/send-receive-tilde-help.pd +++ b/doc/5.reference/send-receive-tilde-help.pd @@ -98,7 +98,6 @@ #X connect 24 0 23 0; #X restore 340 480 pd multi-channel; #X text 89 481 see multi channel example here -->; -#X text 37 88 A [send~] object copies its input to a local buffer which all [receive~] objects of the same name read from. They may be in different windows or even different patches. Any number of [receive~] may be associated with one [send~] \, but it is an error to have two [send~] objects of the same name. [receive~] takes "set" messages to switch between different [send~] objects. Multi channel connections is supported., f 72; #X text 162 13 - one-to-many nonlocal signal(s) connection; #X text 117 514 Example for feedback loops -->; #N canvas 639 104 520 539 feedback-loop 0; @@ -132,6 +131,7 @@ #X obj 443 215 set-dsp-tgl; #X text 474 219 DSP on/off; #X text 72 418 [send~]/[receive~] must have matching block sizes., f 62; +#X text 37 88 A [send~] object copies its input to a local buffer which all [receive~] objects of the same name read from. They may be in different windows or even different patches. Any number of [receive~] may be associated with one [send~] \, but it is an error to have two [send~] objects of the same name. A [receive~] takes "set" messages to switch between different [send~] objects. Multi channel connections is supported., f 72; #X connect 1 0 17 0; #X connect 2 0 0 0; #X connect 3 0 2 0; @@ -147,4 +147,4 @@ #X connect 23 0 4 0; #X connect 25 0 2 0; #X connect 30 0 14 0; -#X connect 44 0 43 0; +#X connect 43 0 42 0; diff --git a/doc/5.reference/value-help.pd b/doc/5.reference/value-help.pd index 1523742b..6695e469 100644 --- a/doc/5.reference/value-help.pd +++ b/doc/5.reference/value-help.pd @@ -82,7 +82,6 @@ #X obj 74 15 v; #X text 147 95 float -; #X text 203 95 sets variable value., f 36; -#X text 203 271 sets value name (if no name is given \, a right inlet is created to set the name)., f 44; #X text 147 236 float -; #X text 46 168 (if created without argument); #X text 140 195 symbol - sets the value name.; @@ -92,13 +91,13 @@ #X text 203 135 sends the value to a matching receive name.; #X text 120 271 1) symbol -; #X text 203 236 outputs variable value when receiving a bang.; +#X text 203 271 send symbol (if given \, 2nd inlet is suppressed \, default: empty symbol)., f 36; #X restore 387 34 pd reference; #X text 484 35 <= click; #X text 41 78 [value] stores a numeric value which is shared between all values with the same name (which need not be in the same Pd window.), f 66; #X text 32 257 The value may also be stored or recalled in expressions via the [expr] family of objects., f 34; #X text 32 335 The [value] object can also receive float values sent via a [send] object or a message if it has a variable with the same name., f 31; #X text 32 424 You can also send the stored value to a named object such as a [receive] or another [value] \, see example to the right., f 31; -#X text 36 519 if invoked without a creation argument \, [value] adds a right inlet for setting the variable name with a "symbol" message:, f 30; #X text 119 126 set the value; #X text 110 151 retrieve it; #X obj 255 152 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; @@ -108,6 +107,7 @@ #X obj 363 336 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 474 423 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 276 514 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; +#X text 36 509 if invoked without a creation argument \, [value] is assigned to an empty symbol adds a right inlet is created for setting the variable name with a "symbol" message:, f 30; #X connect 0 0 3 0; #X connect 3 0 1 0; #X connect 5 0 7 0; @@ -126,10 +126,10 @@ #X connect 33 0 32 0; #X connect 34 0 35 0; #X connect 36 0 29 0; -#X connect 53 0 7 0; -#X connect 54 0 10 0; -#X connect 55 0 3 0; -#X connect 56 0 14 0; -#X connect 57 0 17 0; -#X connect 58 0 34 0; -#X connect 59 0 25 0; +#X connect 52 0 7 0; +#X connect 53 0 10 0; +#X connect 54 0 3 0; +#X connect 55 0 14 0; +#X connect 56 0 17 0; +#X connect 57 0 34 0; +#X connect 58 0 25 0; From 8d01ee0c8a6b9fb6b9d6d97f38f114114a9e46f0 Mon Sep 17 00:00:00 2001 From: porres Date: Fri, 20 Oct 2023 22:57:40 -0300 Subject: [PATCH 51/68] fix typo in [clone] and corrected name for [send] in accoustics~ --- doc/5.reference/acoustics-tilde-help.pd | 16 ++++++++-------- doc/5.reference/clone-help.pd | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/5.reference/acoustics-tilde-help.pd b/doc/5.reference/acoustics-tilde-help.pd index 25dcef45..84d0d378 100644 --- a/doc/5.reference/acoustics-tilde-help.pd +++ b/doc/5.reference/acoustics-tilde-help.pd @@ -32,7 +32,6 @@ #X obj 59 371 r metro; #X obj 162 371 r metro; #X obj 586 507 metro 100; -#X obj 586 533 s metro; #X msg 544 194 \; pd dsp \$1; #X floatatom 49 273 6 0 0 0 - - - 0; #X floatatom 254 273 6 0 0 0 - - - 0; @@ -124,6 +123,7 @@ #X restore 336 515 pd multichannel; #X text 185 500 mutichannel signal support ----------->, f 20; #X text 467 608 updated for Pd version 0.54; +#X obj 586 533 s bang; #X connect 0 0 32 0; #X connect 1 0 2 0; #X connect 2 0 22 0; @@ -150,10 +150,10 @@ #X connect 29 0 6 0; #X connect 30 0 2 0; #X connect 31 0 3 0; -#X connect 32 0 33 0; -#X connect 35 0 9 0; -#X connect 36 0 10 0; -#X connect 37 0 15 0; -#X connect 38 0 16 0; -#X connect 39 0 17 0; -#X connect 70 0 34 0; +#X connect 32 0 73 0; +#X connect 34 0 9 0; +#X connect 35 0 10 0; +#X connect 36 0 15 0; +#X connect 37 0 16 0; +#X connect 38 0 17 0; +#X connect 69 0 33 0; diff --git a/doc/5.reference/clone-help.pd b/doc/5.reference/clone-help.pd index 43a4a719..8d7c797e 100644 --- a/doc/5.reference/clone-help.pd +++ b/doc/5.reference/clone-help.pd @@ -1,4 +1,4 @@ -#N canvas 304 60 794 703 12; +#N canvas 304 43 794 703 12; #X declare -stdpath ./; #X floatatom 223 250 5 57 83 0 - - - 0; #X obj 223 290 t b f, f 9; @@ -89,8 +89,8 @@ #X obj 615 335 output~; #X obj 615 293 snake~ out; #X obj 615 245 clone -d clone-abs-b 2; -#X text 46 20 By default \, for signal inlets \, [clone] expects a single mono channel and distributes it to all copies of the abstraction. If you have a multichannel input you need to use a flag to split and disctribute the channels separately to each copy. By default \, an outlet connection gets the sum of all copies \, but you can also get a multichannel output that combines the output of all copies with a flag., f 70; #X text 322 118 The '-do' flag combines the audio of all copies into a multichannel signal output., f 27; +#X text 46 20 By default \, for signal inlets \, [clone] expects a single mono channel and distributes it to all copies of the abstraction. If you have a multichannel input you need to use a flag to split and distribute the channels separately to each copy. By default \, an outlet connection gets the sum of all copies \, but you can also get a multichannel output that combines the output of all copies with a flag., f 70; #X connect 1 0 0 0; #X connect 1 1 0 1; #X connect 2 0 11 0; From 7ce76ea859fcb9bb7fe0f10b870cd46f7d414b5c Mon Sep 17 00:00:00 2001 From: porres Date: Sat, 21 Oct 2023 13:45:18 -0300 Subject: [PATCH 52/68] document [clone -di] and a single channel input closes https://github.com/pure-data/pddp/issues/169 saying how a single channel in is copied and sent to all copies, as it wraps like in +~ --- doc/5.reference/clone-help.pd | 5 +++-- doc/5.reference/soundfiler-help.pd | 16 ++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/doc/5.reference/clone-help.pd b/doc/5.reference/clone-help.pd index 8d7c797e..507850ff 100644 --- a/doc/5.reference/clone-help.pd +++ b/doc/5.reference/clone-help.pd @@ -1,4 +1,4 @@ -#N canvas 304 43 794 703 12; +#N canvas 305 29 794 703 12; #X declare -stdpath ./; #X floatatom 223 250 5 57 83 0 - - - 0; #X obj 223 290 t b f, f 9; @@ -66,7 +66,7 @@ #X obj 135 679 snake~; #X text 438 576 mutichannel signal support ----------->, f 20; #X floatatom 420 409 5 0 3 0 - - - 0; -#N canvas 462 108 850 454 multichannel 0; +#N canvas 461 86 828 543 multichannel 0; #X obj 361 338 output~; #X obj 361 296 snake~ out; #X msg 361 221 next \$1; @@ -91,6 +91,7 @@ #X obj 615 245 clone -d clone-abs-b 2; #X text 322 118 The '-do' flag combines the audio of all copies into a multichannel signal output., f 27; #X text 46 20 By default \, for signal inlets \, [clone] expects a single mono channel and distributes it to all copies of the abstraction. If you have a multichannel input you need to use a flag to split and distribute the channels separately to each copy. By default \, an outlet connection gets the sum of all copies \, but you can also get a multichannel output that combines the output of all copies with a flag., f 70; +#X text 73 440 When distributing a mutichannel input into copies \, if the number of channels is less than the number of copies \, [clone] will wrap around and copy the first channels until reaching the number of copies. This is specially useful if you have like an actual multichannel input in the leftmost inlet and other secondary signal inlets that just receive a single channel signal \, in which case the single channels are sent to all copies., f 97; #X connect 1 0 0 0; #X connect 1 1 0 1; #X connect 2 0 11 0; diff --git a/doc/5.reference/soundfiler-help.pd b/doc/5.reference/soundfiler-help.pd index 9e56f6c3..f1eeb0ff 100644 --- a/doc/5.reference/soundfiler-help.pd +++ b/doc/5.reference/soundfiler-help.pd @@ -1,17 +1,17 @@ #N canvas 322 46 863 579 12; #N canvas 0 22 450 300 (subpatch) 0; -#X array array1 78003 float 2; -#X coords 0 1 78003 -1 300 100 1 0 0; +#X array array1 13 float 2; +#X coords 0 1 13 -1 300 100 1 0 0; #X restore 545 269 graph; #N canvas 0 22 450 300 (subpatch) 0; -#X array array2 155944 float 2; -#X coords 0 1 155944 -1 300 100 1; +#X array array2 78003 float 2; +#X coords 0 1 78003 -1 300 100 1; #X restore 545 387 graph; #X obj 32 382 soundfiler; #X msg 76 270 write -aiff /tmp/foo1 array2; #X msg 25 141 read ../sound/bell.aiff array2; #X msg 41 198 read -raw 128 2 2 b ../sound/bell.aiff array1 array2; -#X floatatom 32 411 8 0 0 0 - - - 0; +#X floatatom 32 411 7 0 0 0 - - - 0; #X msg 33 169 read -resize ../sound/bell.aiff array2; #X text 286 270 write a file; #X text 408 326 write stereo; @@ -49,10 +49,10 @@ #X connect 2 0 3 0; #X connect 4 0 2 0; #X connect 5 0 1 0; -#X restore 381 409 pd Dealing_with_"\$0"; -#X text 219 400 open subpatch to see how to deal with '\$0', f 21; +#X restore 385 410 pd Dealing_with_"\$0"; +#X text 234 401 open subpatch to see how to deal with '\$0', f 21; #X obj 95 542 array; -#X listbox 99 411 14 0 0 0 - - - 0; +#X listbox 99 411 16 0 0 0 - - - 0; #X obj 8 46 cnv 1 850 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 774 11 <= click; #N canvas 556 60 632 371 reference 0; From bdf59e7b044a08a5bc495549d453dd43a988cd75 Mon Sep 17 00:00:00 2001 From: Reza Almanda Date: Sun, 22 Oct 2023 00:00:52 +0000 Subject: [PATCH 53/68] Translated using Weblate (Indonesian) Currently translated at 36.8% (181 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/id/ --- po/id.po | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/po/id.po b/po/id.po index 1d18ad15..f93dd1f8 100644 --- a/po/id.po +++ b/po/id.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Pure Data 0.53.0\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-05-15 22:50+0000\n" +"PO-Revision-Date: 2023-10-23 01:02+0000\n" "Last-Translator: Reza Almanda \n" "Language-Team: Indonesian \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 5.1\n" msgid "linear" msgstr "linier" @@ -196,9 +196,8 @@ msgstr "Menggunakan" msgid "OK" msgstr "OK" -#, fuzzy msgid "no device" -msgstr "Perangkat memasuk" +msgstr "tidak ada perangkat" msgid "(same as input device)..." msgstr "(sama dengan perangkat memasuk)..." @@ -216,7 +215,7 @@ msgid "Use Multiple Devices" msgstr "Pakai Banyak Perangkat" msgid "audio system" -msgstr "" +msgstr "sistem audio" msgid "Settings" msgstr "Pengaturan" @@ -361,7 +360,7 @@ msgid "Receive symbol:" msgstr "Terima simbol:" msgid "auto" -msgstr "" +msgstr "Otomatis" msgid "Width:" msgstr "Lebar:" @@ -430,10 +429,10 @@ msgid "Height:" msgstr "Tinggi:" msgid "Output Range" -msgstr "" +msgstr "Rentang output" msgid "Log height:" -msgstr "" +msgstr "Tinggi log:" msgid "Vslider" msgstr "Vtombolgeser" @@ -445,13 +444,13 @@ msgid "Vradio" msgstr "Vradio" msgid "Num cells:" -msgstr "" +msgstr "Jumlah sel:" msgid "Hradio" -msgstr "" +msgstr "Hradio" msgid "VU Meter" -msgstr "" +msgstr "VU Meter" msgid "Canvas" msgstr "Kanvas" @@ -461,28 +460,28 @@ msgstr "" #, tcl-format msgid "%s Properties" -msgstr "" +msgstr "%s Properti" msgid "Parameters" -msgstr "" +msgstr "Parameter" msgid "Init" -msgstr "" +msgstr "Init" msgid "No init" -msgstr "" +msgstr "Tidak ada init" msgid "Jump on click" -msgstr "" +msgstr "Loncat saat diklik" msgid "Steady on click" -msgstr "" +msgstr "Diam saat diklik" msgid "X offset:" -msgstr "" +msgstr "X offset:" msgid "Y offset:" -msgstr "" +msgstr "Y offset:" msgid "Colors" msgstr "Warna" @@ -503,14 +502,13 @@ msgid "Send a Pd message" msgstr "Mengirim sebuah pesan Pd" msgid "(use arrow keys for history)" -msgstr "" +msgstr "(gunakan tombol panah untuk riwayat)" -#, fuzzy msgid "no input devices" -msgstr "Perangkat memasuk" +msgstr "tidak ada perangkat input" msgid "In Ports:" -msgstr "" +msgstr "Port Masuk:" msgid "Out Ports:" msgstr "" From f7f3b5a85f8c513d730f454e91adef75161968ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?uml=C3=A4ute?= Date: Mon, 23 Oct 2023 09:50:59 +0000 Subject: [PATCH 54/68] Translated using Weblate (German) Currently translated at 100.0% (491 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/de/ --- po/de.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/de.po b/po/de.po index efb30d9e..86b3dee1 100644 --- a/po/de.po +++ b/po/de.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: Pure Data 0.52\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-06-27 06:05+0000\n" +"PO-Revision-Date: 2023-10-23 10:04+0000\n" "Last-Translator: umläute \n" "Language-Team: German \n" @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18.1\n" +"X-Generator: Weblate 5.1.1-dev\n" msgid "linear" msgstr "linear" @@ -1646,7 +1646,7 @@ msgid "Edit..." msgstr "Bearbeiten..." msgid "Delete" -msgstr "Löschen" +msgstr "Entfernen" #, tcl-format msgid "ignoring '%s': doesn't look like a Pd file" From 49b5df2dd93a15f36294bc5a8c634a1c1304ab29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?uml=C3=A4ute?= Date: Mon, 23 Oct 2023 09:52:41 +0000 Subject: [PATCH 55/68] Translated using Weblate (French) Currently translated at 100.0% (491 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/fr/ --- po/fr.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/fr.po b/po/fr.po index 5d10aa16..d489e2d2 100644 --- a/po/fr.po +++ b/po/fr.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: Pure Data 0.53-0\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-09-08 06:19+0000\n" -"Last-Translator: baptiste \n" +"PO-Revision-Date: 2023-10-23 10:04+0000\n" +"Last-Translator: umläute \n" "Language-Team: French \n" "Language: fr\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.0.1-dev\n" +"X-Generator: Weblate 5.1.1-dev\n" msgid "linear" msgstr "linéaire" @@ -1615,9 +1615,9 @@ msgstr "Pd" msgid "EXPERIMENTAL double (64bit) precision" msgstr "EXPÉRIMENTAL : double précision (64 bits)" -#, fuzzy, tcl-format +#, tcl-format msgid "%dbit-floats EXPERIMENTAL" -msgstr "double (64bit) EXPÉRIMENTAL" +msgstr "%dbit flottants EXPÉRIMENTAL" msgid "DSP" msgstr "DSP" From 3afa2ff6cb9e3a8582b872701dcd792feee1d8f5 Mon Sep 17 00:00:00 2001 From: Miller Puckette Date: Mon, 23 Oct 2023 12:40:51 +0200 Subject: [PATCH 56/68] fixed monitor-gain error in testtone patch --- doc/7.stuff/tools/testtone.pd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/7.stuff/tools/testtone.pd b/doc/7.stuff/tools/testtone.pd index f4a2fcca..8a5e6082 100644 --- a/doc/7.stuff/tools/testtone.pd +++ b/doc/7.stuff/tools/testtone.pd @@ -679,8 +679,8 @@ #X obj 163 128 dbtorms; #X obj 163 156 pack f 50; #X obj 163 87 clip 0 120; -#X obj 246 153 s \$0-input-monitor-gain; #X msg 246 122 set \$1; +#X obj 246 153 s \$0-input-monitor-gain-set; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 4 0 2 0; @@ -688,8 +688,8 @@ #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 8 0 6 0; -#X connect 8 0 10 0; -#X connect 10 0 9 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; #X restore 68 72 pd monitor-input; #N canvas 799 168 518 309 initialization 0; #X obj 29 21 loadbang; From 7a1539c65c997d4fefcfb051d182a900175c227e Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Mon, 23 Oct 2023 09:11:29 -0300 Subject: [PATCH 57/68] html: larger width in CSS and tiny clarification. --- doc/1.manual/pdmanual.css | 50 +++++++++++++++++++-------------------- doc/1.manual/x6-a.htm | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/1.manual/pdmanual.css b/doc/1.manual/pdmanual.css index 44cd23b5..37596400 100644 --- a/doc/1.manual/pdmanual.css +++ b/doc/1.manual/pdmanual.css @@ -7,7 +7,7 @@ font-weight: 400; } -BODY { +BODY { background: #ffffff;; color: #000000; font-family: Georgia, serif; /*Georgia, serif; */ /*Helevetica, sans-serif;*/ @@ -15,53 +15,53 @@ BODY { line-height: 1.6; } - -#corpus { - width: 6.5in; +#corpus { + + width: 8.5in; margin-left: 0.8in; } - + H1 { font-size: 32.7pt; text-align: center; font-weight: normal; - - + + } H2 { font-size: 22.7pt; text-align: center; font-weight: normal; - + } H3 { font-size: 14.7pt; text-align: left; - + } H4 { font-size: 12.7pt; text-align: left; - + } H5 { font-size: 10.7pt; text-align: left; - + } H6 { font-size: 10.7pt; text-align: left; - + } -H1, H2, H3, H4, H5, H6, ol, ul, mark, PRE { +H1, H2, H3, H4, H5, H6, ol, ul, mark, PRE { color: #3E4349; - + } -PRE { +PRE { font-size: 80%; background-color:#f0f0f0; text-align: left; @@ -83,7 +83,7 @@ table { tr:nth-child(even) {background-color: #f0f0f0;} -CODE { +CODE { background-color:#f0f0f0; font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; } @@ -147,12 +147,12 @@ a.green:link { text-decoration: none; display: inline-block; font-size: 80%; - + } a.green:hover { text-decoration: none; - background-color: #4CAF50; + background-color: #4CAF50; } a.green:visited { @@ -175,7 +175,7 @@ a.green:visited { /* standard images */ IMG { - + display: block; margin: 0 auto; width: auto; @@ -197,7 +197,7 @@ div.butt { left: 0; } -blockquote { +blockquote { padding: 0; margin-right:0px; } @@ -211,8 +211,8 @@ blockquote p { @media screen and (max-device-width: 700px) { #corpus { - padding: 10px; - width: auto; + padding: 10px; + width: auto; margin-left: 6px; } H1 {font-size: 25pt;} @@ -223,9 +223,9 @@ blockquote p { @media screen and (max-width: 700px) { #corpus { - padding: 10px; - width: auto; - margin-left: 6px; + padding: 10px; + width: auto; + margin-left: 6px; } H1 {font-size: 25pt;} IMG {max-width: 100%;} diff --git a/doc/1.manual/x6-a.htm b/doc/1.manual/x6-a.htm index 91a1a764..477afa00 100644 --- a/doc/1.manual/x6-a.htm +++ b/doc/1.manual/x6-a.htm @@ -94,7 +94,7 @@

App Bundle Helpers

the file name and contextual version info is pulled from configure script output.

-

A pre-built universal (32/64 bit) Tk 8.6.10 Wish with patches applied is +

A pre-built universal (32/64 bit) Tk 8.6.10+ Wish with patches applied is included with the Pd source distribution and works across the majority of macOS versions up to 10.15. This is the default Wish.app when using osx-app.sh. If you want to use a different Wish.app (a newer version, a custom build, a system From 1acdbd6516d696faf66a488de0728a3839de5f91 Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 23 Oct 2023 13:47:32 -0300 Subject: [PATCH 58/68] make it clear in [key] that 'pointer' means 'mouse pointer' discussion in https://github.com/pure-data/pddp/issues/168#issuecomment-1775603216 closes https://github.com/pure-data/pddp/issues/168 --- doc/5.reference/key-input-help.pd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/5.reference/key-input-help.pd b/doc/5.reference/key-input-help.pd index 51d67bcb..7c96698a 100644 --- a/doc/5.reference/key-input-help.pd +++ b/doc/5.reference/key-input-help.pd @@ -41,8 +41,8 @@ #X text 436 16 <= click; #X obj 8 346 cnv 1 510 1 empty empty empty 8 12 0 13 #000000 #000000 0; #X text 35 211 [keyname] gives the symbolic name of the key on the right outlet \, with a 1 or 0 in the left outlet if it's up or down \, and works with non-printing keys like "shift" or "F1"., f 65; -#X text 35 261 Caveat -- this only works if Pd actually gets the key events which can depend on the stacking order of windows and/or the pointer location \, depending on the system. Also note that typical computer keyboards will only allow you to press a few keys simultaneously., f 65; #X text 35 134 [key] and [keyup] report the (system dependent) numbers of "printing" keys of the keyboard. The [key] object outputs when the keyboard key is pressed while [keyup] outputs it when you release the key. Check your system's preferences for 'autorepeat' as it affects the output of these objects., f 65; +#X text 35 261 Caveat -- this only works if Pd actually gets the key events which can depend on the stacking order of windows and/or the mouse pointer location \, depending on the system. Also note that typical computer keyboards will only allow you to press a few keys simultaneously., f 65; #X connect 3 0 4 0; #X connect 5 0 10 0; #X connect 5 1 6 0; From 492e902990a0d189a0596316d8c534f8914cf820 Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 23 Oct 2023 14:41:48 -0300 Subject: [PATCH 59/68] minor design change in testtone this minor reorganization makes better sense to me, now the output setting comes on top and usually that's the first thing we go to. --- doc/7.stuff/tools/testtone.pd | 46 ++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/doc/7.stuff/tools/testtone.pd b/doc/7.stuff/tools/testtone.pd index 8a5e6082..451e2592 100644 --- a/doc/7.stuff/tools/testtone.pd +++ b/doc/7.stuff/tools/testtone.pd @@ -1,4 +1,4 @@ -#N canvas 363 29 678 622 12; +#N canvas 446 35 678 622 12; #X floatatom 102 558 5 0 0 0 - - - 0; #X obj 83 502 notein; #X obj 42 531 stripnote; @@ -16,14 +16,14 @@ #X obj 375 420 tgl 20 0 \$0-tone-ch6 \$0-tone-ch6 6 5 30 0 12 #dfdfdf #000000 #000000 0 1; #X obj 367 389 bng 19 250 50 0 \$0-tone-all \$0-tone-all empty 21 9 0 12 #dfdfdf #000000 #000000; #X obj 419 389 bng 19 250 50 0 \$0-tone-none \$0-tone-none empty 21 9 0 12 #dfdfdf #000000 #000000; -#X obj 41 172 vradio 19 1 0 2 \$0-tone-type \$0-tone-type-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; -#X obj 31 325 vradio 19 1 0 3 \$0-tone-radio \$0-tone-radio-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; +#X obj 48 355 vradio 19 1 0 2 \$0-tone-type \$0-tone-type-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; +#X obj 31 245 vradio 19 1 0 3 \$0-tone-radio \$0-tone-radio-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; #X obj 437 420 tgl 20 0 \$0-tone-ch7 \$0-tone-ch7 7 5 30 0 12 #dfdfdf #000000 #000000 0 1; #X obj 457 420 tgl 20 0 \$0-tone-ch8 \$0-tone-ch8 8 5 30 0 12 #dfdfdf #000000 #000000 0 1; -#X floatatom 31 393 4 0 100 1 - \$0-tone-level-set \$0-tone-level 16; -#X floatatom 40 221 5 0 136 1 - \$0-tone-pitch-set \$0-tone-pitch 0; -#X floatatom 40 252 6 0 20000 1 - \$0-tone-hz-set \$0-tone-hz 0; -#X text 27 143 TEST TONES; +#X floatatom 30 209 4 0 100 1 - \$0-tone-level-set \$0-tone-level 16; +#X floatatom 68 406 5 0 136 1 - \$0-tone-pitch-set \$0-tone-pitch 0; +#X floatatom 68 437 6 0 20000 1 - \$0-tone-hz-set \$0-tone-hz 0; +#X text 36 328 TEST TONES; #X obj 42 584 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 155 558 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 548 221 vradio 19 1 0 8 \$0-inch-sel \$0-inch-sel empty 0 -8 0 10 #dfdfdf #000000 #000000 0; @@ -31,15 +31,15 @@ #X floatatom 187 339 4 0 120 0 - \$0-input-monitor-gain-set \$0-input-monitor-gain 16; #X text 440 390 NONE; #X text 388 390 ALL; -#X text 64 172 Noise; -#X text 63 193 Tone; +#X text 71 355 Noise; +#X text 70 376 Tone; #X text 595 222 01-08; #X text 546 185 Channel assign:, f 7; #X text 548 376 In; #X text 572 376 Out; -#X text 80 228 Pitch; -#X text 81 216 MIDI; -#X text 86 253 Hertz; +#X text 24 415 Pitch; +#X text 31 403 MIDI; +#X text 24 438 Hertz; #X obj 173 179 vu 19 120 \$0-vu1 empty -1 -10 0 12 #404040 #000000 0 0; #X obj 194 179 vu 19 120 \$0-vu2 empty -1 -10 0 10 #404040 #000000 1 0; #X obj 255 179 vu 19 120 \$0-vu3 empty -1 -10 0 12 #404040 #000000 0 0; @@ -844,8 +844,6 @@ #X text 151 344 |; #X text 151 356 |; #X text 151 368 |; -#X text 13 467 ---------- MIDI INPUT MONITOR ----------; -#X text 336 467 -------------- MIDI OUTPUT TEST --------------; #N canvas 441 116 893 512 instructions 0; #X text 44 236 A toggle sets a highpass filter for the input channels with a cuttof frequency of 5Hz. This is useful to filter DC offsets., f 61; #X text 23 16 Audio Input:; @@ -863,7 +861,7 @@ #X text 44 123 The VU meters show us the audio input level of each input channel. Number boxes below show the RMS dB level in the range from 0 to 100 dB as given by the [env~] object., f 61; #X text 47 412 You can use radio buttons to the right to reassing input and output channels into different groups. By default input and output channels are assigned from 1 to 8 \, but you can test other groups of 8 channels (up to the range from 57 to 64).; #X text 521 177 The output level of test tones can be controlled by the number box below \, within the 0 to 100 dB range. You can use the radio button above it to set to three presets \, 80dB \, 60dB or "off" (which is '0dB' and the default setting). A vu meter is there to display the output level of the test tones., f 48; -#X restore 539 146 pd instructions; +#X restore 529 146 pd instructions; #X floatatom 170 305 3 0 0 0 - \$0-ch1 \$0-ch1-set 0; #X floatatom 193 305 3 0 0 0 - \$0-ch2 \$0-ch2-set 0; #X floatatom 252 305 3 0 0 0 - \$0-ch3 \$0-ch3-set 0; @@ -875,13 +873,11 @@ #X text 236 341 <-- Input monitor gain (0-120 dB), f 17; #X text 408 341 <-- Input highpass, f 9; #X text 263 531 (raw); -#X text 21 294 TEST GAIN (dB); -#X text 52 325 80; -#X text 52 344 60; -#X obj 99 322 vu 22 120 \$0-test-vu empty -1 -10 0 12 #404040 #000000 0 0; -#X text 26 422 (0-100); -#X text 41 440 dB; -#X text 52 365 Off; +#X text 24 162 TEST GAIN (dB); +#X text 52 245 80; +#X text 52 264 60; +#X obj 111 192 vu 22 120 \$0-test-vu empty -1 -10 0 12 #404040 #000000 0 0; +#X text 52 285 Off; #X text 595 241 09-16; #X text 595 260 17-24; #X text 595 279 25-32; @@ -890,6 +886,12 @@ #X text 595 336 49-56; #X text 595 355 57-64; #X text 91 61 This window is used to test audio and MIDI connections. You can go to "Preferences -> Edit Preferences" to configure "Audio" and "MIDI" settings to choose your Input/output devices. For more details on how this patch works \, see [pd instructions]., f 74; +#X text 29 190 0-100; +#X text 0 137 --- OUTPUT MONITOR ---; +#X text 495 441 |; +#X text 151 441 |; +#X text 341 467 --------------- MIDI OUTPUT TEST --------------; +#X text 13 467 ---------- MIDI INPUT MONITOR -----------; #X connect 1 0 2 0; #X connect 1 1 2 1; #X connect 2 0 3 0; From 027506b5dba124faa971fafc9ff5417a318f14c2 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Mon, 23 Oct 2023 14:01:28 -0300 Subject: [PATCH 60/68] document '--enable-debug' configure flag --- INSTALL.txt | 6 ++++++ doc/1.manual/x6.htm | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/INSTALL.txt b/INSTALL.txt index e11237de..30a87104 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -85,6 +85,12 @@ script settings on the commandline: # build Pd using a system installed PortAudio ./configure --without-local-portaudio +If you need to run Pd through a debugger (like gdb), you can +build Pd with debugging symbols using the "--enable-debug" flag. + + # build Pd with debugging information + ./configure --enable-debug + An important configure option for some platforms is --enable-universal which allows you to specify the desired architecture(s) when building Pd. For Intel and AMD processors, 32 bit is called "i386" and 64 bit is "x86_64". By default, diff --git a/doc/1.manual/x6.htm b/doc/1.manual/x6.htm index b7fb3b5a..7199980d 100644 --- a/doc/1.manual/x6.htm +++ b/doc/1.manual/x6.htm @@ -118,6 +118,12 @@

6.2. Autotools Build (recommended)

# build Pd using a system installed PortAudio ./configure --without-local-portaudio
+

If you need to run Pd through a debugger (like gdb), you can +build Pd with debugging symbols using the "--enable-debug" flag. + +

# build Pd with debugging information
+./configure --enable-debug
+

An important configure option for some platforms is --enable-universal which allows you to specify the desired architecture(s) when building Pd. For Intel and AMD processors, 32 bit is called "i386" and 64 bit is "x86_64". By default, Pd is built for the architecture of the current system, however you may want a 32 bit Pd to work with existing 32 bit externals on a 64 bit system. You can override the defaults with --enable-universal:

# build 32 bit Pd

From 6a5116aac889d35610a197f12d6ce91ffebf2481 Mon Sep 17 00:00:00 2001
From: danomatika 
Date: Tue, 24 Oct 2023 00:40:51 +0200
Subject: [PATCH 61/68] added Tk 8.6.13 patch for weak linking of
 UniformTypeIdentifiers framework to fix app crashes on macOS versions before
 11

---
 mac/patches/README.txt                        |  8 +++-
 .../tk8.6.13_UniformTypeIdentifiers.patch     | 40 +++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)
 create mode 100644 mac/patches/tk8.6.13_UniformTypeIdentifiers.patch

diff --git a/mac/patches/README.txt b/mac/patches/README.txt
index bdabdcb5..7827dc4a 100644
--- a/mac/patches/README.txt
+++ b/mac/patches/README.txt
@@ -29,10 +29,16 @@ To skip applying patches, use the tcltk-wish.sh --no-patches commandline option.
 
 ## Current Patches
 
+### tk8.6.13_UniformTypeIdentifiers.patch
+
+Backport fix to weak link the UniformTypeIdentifiers framework, otherwise builds
+on macOS 11+ will not start on older systems due to the missing framework.
+
+    https://github.com/tcltk/tk/commit/a3eb1edc6e9c2eb227b40c7d46f42e6162be78d6
 
 ### tk8.6.12_NSBitmapFormatAlphaFirst.patch
 
-Backport to fix compilation of Tk-8.6.12 on macOS<10.12, see
+Backport to fix compilation of Tk-8.6.12 on macOS < 10.12, see
 
     https://core.tcl-lang.org/tk/info/e699a7b606
 
diff --git a/mac/patches/tk8.6.13_UniformTypeIdentifiers.patch b/mac/patches/tk8.6.13_UniformTypeIdentifiers.patch
new file mode 100644
index 00000000..645e4aa7
--- /dev/null
+++ b/mac/patches/tk8.6.13_UniformTypeIdentifiers.patch
@@ -0,0 +1,40 @@
+diff --git a/macosx/tkMacOSXFileTypes.c b/macosx/tkMacOSXFileTypes.c
+index 66e4fbbc1..2fcc6cddf 100644
+--- a/macosx/tkMacOSXFileTypes.c
++++ b/macosx/tkMacOSXFileTypes.c
+@@ -25,9 +25,6 @@ without generating deprecation warnings.
+ 
+ #include "tkMacOSXPrivate.h"
+ #include "tkMacOSXFileTypes.h"
+-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 110000
+-#import 
+-#endif
+ 
+ #define CHARS_TO_OSTYPE(string) (OSType) string[0] << 24 | \
+                                 (OSType) string[1] << 16 | \
+diff --git a/unix/configure b/unix/configure
+index a9ad15082..57ea3f297 100755
+--- a/unix/configure
++++ b/unix/configure
+@@ -9438,7 +9438,7 @@ _ACEOF
+ 
+     LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit -framework QuartzCore"
+     if test -d "/System/Library/Frameworks/UniformTypeIdentifiers.framework"; then
+-        LIBS="$LIBS -framework UniformTypeIdentifiers"
++        LIBS="$LIBS -weak_framework UniformTypeIdentifiers"
+     fi
+     EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c'
+     TK_WINDOWINGSYSTEM=AQUA
+diff --git a/unix/configure.in b/unix/configure.in
+index de34db89f..54cfd2c04 100644
+--- a/unix/configure.in
++++ b/unix/configure.in
+@@ -353,7 +353,7 @@ if test $tk_aqua = yes; then
+     AC_DEFINE(MAC_OSX_TK, 1, [Are we building TkAqua?])
+     LIBS="$LIBS -framework Cocoa -framework Carbon -framework IOKit -framework QuartzCore"
+     if test -d "/System/Library/Frameworks/UniformTypeIdentifiers.framework"; then
+-        LIBS="$LIBS -framework UniformTypeIdentifiers"
++        LIBS="$LIBS -weak_framework UniformTypeIdentifiers"
+     fi
+     EXTRA_CC_SWITCHES='-std=gnu99 -x objective-c'
+     TK_WINDOWINGSYSTEM=AQUA

From 64a9da31adb6b887d2cf5ab88dcf52b1a27d812d Mon Sep 17 00:00:00 2001
From: Miller Puckette 
Date: Tue, 24 Oct 2023 15:44:21 +0200
Subject: [PATCH 62/68] version to 0.51-1test1

---
 configure.ac        | 2 +-
 doc/1.manual/x5.htm | 6 ++++++
 src/m_pd.h          | 4 ++--
 src/pd.rc           | 8 ++++----
 4 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index 33b5d240..d6c1364f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 ##### Prelude #####
 
 AC_PREREQ(2.59)
-AC_INIT([pd], [0.54.0])
+AC_INIT([pd], [0.54.1])
 AC_CONFIG_SRCDIR(src/m_pd.c)
 AC_CONFIG_AUX_DIR([m4/config])
 AC_CONFIG_MACRO_DIR([m4/generated])
diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm
index 1bae55c9..c545487a 100644
--- a/doc/1.manual/x5.htm
+++ b/doc/1.manual/x5.htm
@@ -30,6 +30,12 @@ 

Pd Manual chapter 5: current status

5.1. release notes

+

------------------ 0.54-1 ------------------------------ + +

Fixes a compatibility problem with MacOS 14. + +

Numerous bug fixes and documentation updates. +

------------------ 0.54-0 ------------------------------

Multichannel audio signals are supported for many objects. They may be created diff --git a/src/m_pd.h b/src/m_pd.h index 01dd00fe..7970f962 100644 --- a/src/m_pd.h +++ b/src/m_pd.h @@ -10,8 +10,8 @@ extern "C" { #define PD_MAJOR_VERSION 0 #define PD_MINOR_VERSION 54 -#define PD_BUGFIX_VERSION 0 -#define PD_TEST_VERSION "" +#define PD_BUGFIX_VERSION 1 +#define PD_TEST_VERSION "test1" extern int pd_compatibilitylevel; /* e.g., 43 for pd 0.43 compatibility */ /* old name for "MSW" flag -- we have to take it for the sake of many old diff --git a/src/pd.rc b/src/pd.rc index 9ddb86b8..94a131dc 100644 --- a/src/pd.rc +++ b/src/pd.rc @@ -1,7 +1,7 @@ id ICON "../tcl/pd.ico" 1 VERSIONINFO -FILEVERSION 0,54,0,0 -PRODUCTVERSION 0,54,0,0 +FILEVERSION 0,54,1,0 +PRODUCTVERSION 0,54,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -9,12 +9,12 @@ BEGIN BEGIN VALUE "CompanyName", "puredata.info" VALUE "FileDescription", "Pure Data Application" - VALUE "FileVersion", "0.54-0" + VALUE "FileVersion", "0.54-1test1" VALUE "InternalName", "pd.exe" VALUE "LegalCopyright", "Miller Puckette, et al." VALUE "OriginalFilename", "pd.exe" VALUE "ProductName", "Pure Data" - VALUE "ProductVersion", "0.54-02" + VALUE "ProductVersion", "0.54-1test1" END END From f2ab3d06f40919cbd5c77ed9f142a5675d4d690d Mon Sep 17 00:00:00 2001 From: porres Date: Mon, 23 Oct 2023 16:03:32 +0000 Subject: [PATCH 63/68] Translated using Weblate (Portuguese (Brazil)) Currently translated at 90.6% (445 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/pt_BR/ --- po/pt_br.po | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/po/pt_br.po b/po/pt_br.po index 19d72c80..f2f5bfca 100644 --- a/po/pt_br.po +++ b/po/pt_br.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Pure Data 0.53.0\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-06-29 13:51+0000\n" +"PO-Revision-Date: 2023-10-24 17:02+0000\n" "Last-Translator: porres \n" "Language-Team: Portuguese (Brazil) \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.18.1\n" +"X-Generator: Weblate 5.1.1-dev\n" msgid "linear" msgstr "linear" @@ -124,7 +124,7 @@ msgid "Put" msgstr "Inserir" msgid "Find" -msgstr "Procurar" +msgstr "Encontrar" msgid "Media" msgstr "Mídia" @@ -371,10 +371,10 @@ msgid "Limits" msgstr "Limites" msgid "Lower:" -msgstr "Mínimo:" +msgstr "Inferior:" msgid "Upper:" -msgstr "Máximo:" +msgstr "Superior:" msgid "Label" msgstr "Rótulo" @@ -401,7 +401,7 @@ msgid "Label color" msgstr "Cor do rótulo" msgid "Bang" -msgstr "Bang" +msgstr "" msgid "Flash Time (msec)" msgstr "Tempo de piscagem (ms)" @@ -413,7 +413,7 @@ msgid "Max:" msgstr "Máximo:" msgid "Toggle" -msgstr "Toggle" +msgstr "" msgid "Non Zero Value" msgstr "Valor Ligado (Não Zero)" @@ -452,10 +452,10 @@ msgid "Hradio" msgstr "Rádio Horizontal" msgid "VU Meter" -msgstr "VU Meter" +msgstr "" msgid "Canvas" -msgstr "Canvas" +msgstr "" msgid "Visible Rectangle (pix)" msgstr "Retângulo Visível (pix)" @@ -629,13 +629,13 @@ msgid "float (32bit)" msgstr "float (32bit)" msgid "double (64bit) EXPERIMENTAL" -msgstr "double (64bit) EXPERIMENTAL" +msgstr "" msgid "double (64bit)" -msgstr "double (64bit)" +msgstr "" msgid "float size" -msgstr "Tamanho do float:" +msgstr "Tamanho do float" msgid "Numeric precision of Pd-core" msgstr "Precisão numérica do núcleo do Pd" @@ -717,7 +717,7 @@ msgid "Failed to start Pd-core" msgstr "Falha ao iniciar o núcleo do Pd" msgid "(Tcl) MISSING CLOSE-BRACE '}': " -msgstr "(Tcl) MISSING CLOSE-BRACE '}': " +msgstr "" msgid "(Tcl) INVALID COMMAND NAME: " msgstr "(Tcl) INVALID COMMAND NAME: " @@ -1321,13 +1321,13 @@ msgid "Polish" msgstr "" msgid "Portuguese" -msgstr "" +msgstr "Português" msgid "Portuguese (Brazil)" -msgstr "" +msgstr "Português (Brasil)" msgid "Portuguese (Portugal)" -msgstr "" +msgstr "Português (Portugal)" msgid "Russian" msgstr "" @@ -1396,7 +1396,7 @@ msgid "(Dis)Connect Selection" msgstr "(Des)Conectar Seleção" msgid "Triggerize" -msgstr "Triggerize" +msgstr "" msgid "Edit Mode" msgstr "Modo de Edição" @@ -1607,7 +1607,7 @@ msgid "Log:" msgstr "Log:" msgid "fatal" -msgstr "fatal" +msgstr "" msgid "error" msgstr "erro" From 59e78e6bf2da26a519632102142c29f4715489dd Mon Sep 17 00:00:00 2001 From: porres Date: Wed, 25 Oct 2023 10:13:07 -0300 Subject: [PATCH 64/68] improve instructions of testtone.pd --- doc/7.stuff/tools/testtone.pd | 61 +++++++++++++++++------------------ 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/doc/7.stuff/tools/testtone.pd b/doc/7.stuff/tools/testtone.pd index 451e2592..b4de64ad 100644 --- a/doc/7.stuff/tools/testtone.pd +++ b/doc/7.stuff/tools/testtone.pd @@ -1,4 +1,4 @@ -#N canvas 446 35 678 622 12; +#N canvas 399 65 678 622 12; #X floatatom 102 558 5 0 0 0 - - - 0; #X obj 83 502 notein; #X obj 42 531 stripnote; @@ -16,14 +16,13 @@ #X obj 375 420 tgl 20 0 \$0-tone-ch6 \$0-tone-ch6 6 5 30 0 12 #dfdfdf #000000 #000000 0 1; #X obj 367 389 bng 19 250 50 0 \$0-tone-all \$0-tone-all empty 21 9 0 12 #dfdfdf #000000 #000000; #X obj 419 389 bng 19 250 50 0 \$0-tone-none \$0-tone-none empty 21 9 0 12 #dfdfdf #000000 #000000; -#X obj 48 355 vradio 19 1 0 2 \$0-tone-type \$0-tone-type-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; +#X obj 31 355 vradio 19 1 0 2 \$0-tone-type \$0-tone-type-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; #X obj 31 245 vradio 19 1 0 3 \$0-tone-radio \$0-tone-radio-set empty 0 -6 0 8 #dfdfdf #000000 #000000 0; #X obj 437 420 tgl 20 0 \$0-tone-ch7 \$0-tone-ch7 7 5 30 0 12 #dfdfdf #000000 #000000 0 1; #X obj 457 420 tgl 20 0 \$0-tone-ch8 \$0-tone-ch8 8 5 30 0 12 #dfdfdf #000000 #000000 0 1; #X floatatom 30 209 4 0 100 1 - \$0-tone-level-set \$0-tone-level 16; #X floatatom 68 406 5 0 136 1 - \$0-tone-pitch-set \$0-tone-pitch 0; #X floatatom 68 437 6 0 20000 1 - \$0-tone-hz-set \$0-tone-hz 0; -#X text 36 328 TEST TONES; #X obj 42 584 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 155 558 bng 20 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000; #X obj 548 221 vradio 19 1 0 8 \$0-inch-sel \$0-inch-sel empty 0 -8 0 10 #dfdfdf #000000 #000000 0; @@ -31,8 +30,7 @@ #X floatatom 187 339 4 0 120 0 - \$0-input-monitor-gain-set \$0-input-monitor-gain 16; #X text 440 390 NONE; #X text 388 390 ALL; -#X text 71 355 Noise; -#X text 70 376 Tone; +#X text 54 355 Noise; #X text 595 222 01-08; #X text 546 185 Channel assign:, f 7; #X text 548 376 In; @@ -755,7 +753,6 @@ #X restore 94 164 pd +tests; #X restore 580 420 pd guts; #X text 154 389 ---- AUDIO OUTPUT ON/OFF ----; -#X text 155 137 -------------- AUDIO INPUT MONITOR --------------; #X text 495 165 |; #X text 495 177 |; #X text 151 165 |; @@ -844,23 +841,22 @@ #X text 151 344 |; #X text 151 356 |; #X text 151 368 |; -#N canvas 441 116 893 512 instructions 0; -#X text 44 236 A toggle sets a highpass filter for the input channels with a cuttof frequency of 5Hz. This is useful to filter DC offsets., f 61; -#X text 23 16 Audio Input:; -#X text 29 282 Audio output:; -#X text 29 381 Channel assignment:; -#X text 509 16 Test-tones:; -#X text 521 120 When generating pure tones you can also change the frequency in either hertz or MIDI pitch (default is 440Hz / MIDI pitch 69)., f 48; -#X text 513 293 MIDI Input/Output; -#X text 44 46 In this patch we have 8 input and output audio channels that depend on your audio settings. In order to set them \, go to Pd->Preferences->Audio \, where you can choose audio input and output devices plus the number of channels. By default \, Pd loads with only 2 input/output channels., f 61; -#X text 44 173 You can click on the bigger number box below them to send the input channels to the output channels and monitor the input sound. The gain level is set in dB within the 0-120 range (over 100 you're adding up to 20dB in gain), f 61; -#X text 45 311 There are toggles for each channel that you can set on/off. The "ALL" bang button turns all output channels on (default) and the "NONE" button sets them all off., f 61; -#X text 521 48 Besides monitoring input \, you can also generate test tones - either white noise or pure tones (default). Use the top radio button to the left to set this., f 48; -#X text 520 325 For this to work \, you need to set your input and output MIDI device(s) in Pd->Preferences->MIDI. Once you have it ready \, check the objects below to the left for incoming MIDI messages., f 48; -#X text 521 405 For testing MIDI output \, there's a subpatch that generates random MIDI-Note messages. Open it up to check it out. There's also an object that sends MICI cc messages., f 48; -#X text 44 123 The VU meters show us the audio input level of each input channel. Number boxes below show the RMS dB level in the range from 0 to 100 dB as given by the [env~] object., f 61; -#X text 47 412 You can use radio buttons to the right to reassing input and output channels into different groups. By default input and output channels are assigned from 1 to 8 \, but you can test other groups of 8 channels (up to the range from 57 to 64).; -#X text 521 177 The output level of test tones can be controlled by the number box below \, within the 0 to 100 dB range. You can use the radio button above it to set to three presets \, 80dB \, 60dB or "off" (which is '0dB' and the default setting). A vu meter is there to display the output level of the test tones., f 48; +#N canvas 369 146 925 501 instructions 0; +#X text 47 435 A toggle sets a highpass filter for the input channels with a cuttof frequency of 5Hz. This is useful to filter DC offsets., f 61; +#X text 508 23 Audio output:; +#X text 507 168 Channel assignment:; +#X text 47 372 You can click on the bigger number box below them to send the input channels to the output channels and monitor the input sound. The gain level is set in dB within the 0-120 range (over 100 you're adding up to 20dB in gain), f 61; +#X text 531 335 For this to work \, you need to set your input and output MIDI device(s) in Pd->Preferences->MIDI. Once you have it ready \, check the objects below to the left for incoming MIDI messages., f 50; +#X text 30 107 Output Monitor:; +#X text 46 15 In this patch we have 8 input and 8 output audio channels that depend on your audio settings. In order to set them \, go to Pd->Preferences->Audio \, where you can choose audio input and output devices plus the number of input and output channels (by default \, Pd loads only 2 input/output channels)., f 61; +#X text 46 216 The default test sound is a pure tone (a sine wave) \, you can change its pitch either in MIDI or Hertz (default is MIDI pitch 69 / 440 Hz). You can also change the test sound to white noite with the radio button., f 61; +#X text 26 298 Input Monitor:; +#X text 524 52 There are toggles for each channel that you can set on/off. The "ALL" bang button turns all output channels on (default) and the "NONE" button sets them all off. This affects both the OUTPUT MONITOR (if you set the test gain dB) as well as the INPUT MONITOR (if you set the input monitor gain)., f 51; +#X text 508 310 MIDI Input/Output:; +#X text 531 193 You can use radio buttons to the right to reassing input and output channels into different groups. By default input and output channels are assigned from 1 to 8 \, but you can test other groups of 8 channels (up to the range from 57 to 64). Hence \, you can test up to 64 input or output channels!, f 50; +#X text 46 130 To the top left you can test the output with a test sound by adjusting the "test gain" level in dB. Do this by setting a value from 0-100 in the number box or by setting preset levels in the radio button below: 80 dB \, 60 dB of Off (0 dB). A VU meter display the output level of the test sound., f 61; +#X text 47 322 The VU meters show us the audio input level of each input channel \, with number boxes below showing us the RMS dB level in the range from 0 to 100 dB as given by the [env~] object., f 61; +#X text 531 405 For testing MIDI output \, there's a subpatch that generates random MIDI-Note messages. Open it up to check it out. There's also an object that sends MICI CC messages., f 50; #X restore 529 146 pd instructions; #X floatatom 170 305 3 0 0 0 - \$0-ch1 \$0-ch1-set 0; #X floatatom 193 305 3 0 0 0 - \$0-ch2 \$0-ch2-set 0; @@ -875,7 +871,7 @@ #X text 263 531 (raw); #X text 24 162 TEST GAIN (dB); #X text 52 245 80; -#X text 52 264 60; +#X text 52 265 60; #X obj 111 192 vu 22 120 \$0-test-vu empty -1 -10 0 12 #404040 #000000 0 0; #X text 52 285 Off; #X text 595 241 09-16; @@ -892,16 +888,19 @@ #X text 151 441 |; #X text 341 467 --------------- MIDI OUTPUT TEST --------------; #X text 13 467 ---------- MIDI INPUT MONITOR -----------; +#X text 155 137 ----------------- INPUT MONITOR -----------------; +#X text 53 376 Pure Tone; +#X text 36 328 TEST SOUND; #X connect 1 0 2 0; #X connect 1 1 2 1; #X connect 2 0 3 0; #X connect 2 1 0 0; -#X connect 3 0 25 0; -#X connect 5 0 26 0; +#X connect 3 0 24 0; +#X connect 5 0 25 0; #X connect 6 0 5 0; #X connect 6 1 4 0; -#X connect 9 0 75 0; -#X connect 71 0 74 0; -#X connect 81 0 78 1; -#X connect 82 0 78 0; -#X connect 83 0 78 2; +#X connect 9 0 72 0; +#X connect 68 0 71 0; +#X connect 78 0 75 1; +#X connect 79 0 75 0; +#X connect 80 0 75 2; From 9ff9272acf0afdf0b510df31e0a0a97e6af222af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?uml=C3=A4ute?= Date: Wed, 25 Oct 2023 06:21:43 +0000 Subject: [PATCH 65/68] Translated using Weblate (Italian) Currently translated at 98.1% (482 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/it/ --- po/it.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/it.po b/po/it.po index 51040580..01b36381 100644 --- a/po/it.po +++ b/po/it.po @@ -10,16 +10,16 @@ msgstr "" "Project-Id-Version: Pure Data 0.43\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-06-07 05:32+0000\n" -"Last-Translator: Lorenzo Sutton \n" -"Language-Team: Italian \n" +"PO-Revision-Date: 2023-10-26 07:01+0000\n" +"Last-Translator: umläute \n" +"Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 5.1.1\n" msgid "linear" msgstr "lineare" @@ -641,7 +641,7 @@ msgid "float size" msgstr "Dimensione del blocco:" msgid "Numeric precision of Pd-core" -msgstr "" +msgstr "Precisione numerica di Pd-core" msgid "Startup options" msgstr "Opzioni di avvio" From 74b6680a3525de62d72f05e50fc8c3fa360ede47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?uml=C3=A4ute?= Date: Wed, 25 Oct 2023 06:07:32 +0000 Subject: [PATCH 66/68] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (491 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/pt_BR/ --- po/pt_br.po | 98 ++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/po/pt_br.po b/po/pt_br.po index f2f5bfca..93f22dd2 100644 --- a/po/pt_br.po +++ b/po/pt_br.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: Pure Data 0.53.0\n" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" -"PO-Revision-Date: 2023-10-24 17:02+0000\n" -"Last-Translator: porres \n" +"PO-Revision-Date: 2023-10-26 07:01+0000\n" +"Last-Translator: umläute \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_br\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.1.1-dev\n" +"X-Generator: Weblate 5.1.1\n" msgid "linear" msgstr "linear" @@ -401,7 +401,7 @@ msgid "Label color" msgstr "Cor do rótulo" msgid "Bang" -msgstr "" +msgstr "Bang" msgid "Flash Time (msec)" msgstr "Tempo de piscagem (ms)" @@ -413,7 +413,7 @@ msgid "Max:" msgstr "Máximo:" msgid "Toggle" -msgstr "" +msgstr "Toggle" msgid "Non Zero Value" msgstr "Valor Ligado (Não Zero)" @@ -452,10 +452,10 @@ msgid "Hradio" msgstr "Rádio Horizontal" msgid "VU Meter" -msgstr "" +msgstr "VU Meter" msgid "Canvas" -msgstr "" +msgstr "Canvas" msgid "Visible Rectangle (pix)" msgstr "Retângulo Visível (pix)" @@ -629,10 +629,10 @@ msgid "float (32bit)" msgstr "float (32bit)" msgid "double (64bit) EXPERIMENTAL" -msgstr "" +msgstr "double (64bit) EXPERIMENTAL" msgid "double (64bit)" -msgstr "" +msgstr "double (64bit)" msgid "float size" msgstr "Tamanho do float" @@ -717,7 +717,7 @@ msgid "Failed to start Pd-core" msgstr "Falha ao iniciar o núcleo do Pd" msgid "(Tcl) MISSING CLOSE-BRACE '}': " -msgstr "" +msgstr "(Tcl) MISSING CLOSE-BRACE '}': " msgid "(Tcl) INVALID COMMAND NAME: " msgstr "(Tcl) INVALID COMMAND NAME: " @@ -1237,88 +1237,88 @@ msgid "Couldn't create preferences \"%1$s\" in %2$s" msgstr "Não foi possível criar preferências \"%1$s\" em %2$s" msgid "Afrikaans" -msgstr "" +msgstr "Africâner" msgid "Arabic" -msgstr "" +msgstr "Árabe" msgid "Azerbaijani" -msgstr "" +msgstr "Azerbaijano" msgid "Belarusian" -msgstr "" +msgstr "Bielorrusso" msgid "Bulgarian" -msgstr "" +msgstr "Búlgaro" msgid "German" -msgstr "" +msgstr "Alemão" msgid "German (Austria)" -msgstr "" +msgstr "Alemão (Áustria)" msgid "Greek" -msgstr "" +msgstr "Grego" msgid "English" -msgstr "" +msgstr "Inglês" msgid "English (Canada)" -msgstr "" +msgstr "Inglês (Canadá)" msgid "English (UK)" -msgstr "" +msgstr "Inglês (Britânico)" msgid "English (USA)" -msgstr "" +msgstr "Inglês (EUA)" msgid "Spanish" -msgstr "" +msgstr "Espanhol" msgid "Basque" -msgstr "" +msgstr "Basco" msgid "Finnish" -msgstr "" +msgstr "Finlândia" msgid "French" -msgstr "" +msgstr "Francês" msgid "Gujarati" -msgstr "" +msgstr "Gujardo" msgid "Hebrew" -msgstr "" +msgstr "Hebraico" msgid "Hindi" -msgstr "" +msgstr "Híndi" msgid "Hungarian" -msgstr "" +msgstr "Húngaro" msgid "Armenian" -msgstr "" +msgstr "Arménio" msgid "Italian" -msgstr "" +msgstr "Italiano" msgid "Indonesian" -msgstr "" +msgstr "Indonésio" msgid "Japanese" -msgstr "" +msgstr "Japonês" msgid "Korean" -msgstr "" +msgstr "Coreano" msgid "Dutch" -msgstr "" +msgstr "Holandês" msgid "Panjabi" -msgstr "" +msgstr "Panjábi" msgid "Polish" -msgstr "" +msgstr "Polonês" msgid "Portuguese" msgstr "Português" @@ -1330,25 +1330,25 @@ msgid "Portuguese (Portugal)" msgstr "Português (Portugal)" msgid "Russian" -msgstr "" +msgstr "Russo" msgid "Albanian" -msgstr "" +msgstr "Albanês" msgid "Swedish" -msgstr "" +msgstr "Sueco" msgid "Turkish" -msgstr "" +msgstr "Turco" msgid "Ukrainian" -msgstr "" +msgstr "Ucraniano" msgid "Vietnamese" -msgstr "" +msgstr "Vietnamita" msgid "Chinese (Traditional)" -msgstr "" +msgstr "Chinês (Tradicional)" #, tcl-format msgid "(default language: %s)" @@ -1396,7 +1396,7 @@ msgid "(Dis)Connect Selection" msgstr "(Des)Conectar Seleção" msgid "Triggerize" -msgstr "" +msgstr "Triggerize" msgid "Edit Mode" msgstr "Modo de Edição" @@ -1595,7 +1595,7 @@ msgstr "EXPERIMENTAL precisão double (64bit)" #, tcl-format msgid "%dbit-floats EXPERIMENTAL" -msgstr "" +msgstr "%dbit-floats EXPERIMENTAL" msgid "DSP" msgstr "DSP" @@ -1607,7 +1607,7 @@ msgid "Log:" msgstr "Log:" msgid "fatal" -msgstr "" +msgstr "fatal" msgid "error" msgstr "erro" @@ -1622,7 +1622,7 @@ msgid "all" msgstr "todos" msgid "y1" -msgstr "" +msgstr "y1" msgid "New..." msgstr "Novo..." From 13e8c3b95e059967682816d79d5c4c33a2e76e4b Mon Sep 17 00:00:00 2001 From: porres Date: Wed, 25 Oct 2023 02:35:29 +0000 Subject: [PATCH 67/68] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (491 of 491 strings) Translation: pure-data/Interface Translate-URL: https://hosted.weblate.org/projects/pure-data/pure-data/pt_BR/ --- po/pt_br.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/pt_br.po b/po/pt_br.po index 93f22dd2..65a98b68 100644 --- a/po/pt_br.po +++ b/po/pt_br.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: pd-dev@iem.at\n" "POT-Creation-Date: 2023-06-26 22:30+0200\n" "PO-Revision-Date: 2023-10-26 07:01+0000\n" -"Last-Translator: umläute \n" +"Last-Translator: porres \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_br\n" @@ -553,7 +553,7 @@ msgid "Clear" msgstr "Limpar" msgid "path preferences" -msgstr "preferências de caminho" +msgstr "caminho de busca" msgid "Choose Pd documents directory:" msgstr "Escolher diretório dos documentos Pd:" @@ -590,19 +590,19 @@ msgid "Preferences" msgstr "Preferências" msgid "startup preferences" -msgstr "preferências de inicialização" +msgstr "inicialização" msgid "audio preferences" -msgstr "preferências de áudio" +msgstr "áudio" msgid "MIDI preferences" -msgstr "preferências de MIDI" +msgstr "MIDI" msgid "deken preferences" msgstr "preferências do deken" msgid "misc preferences" -msgstr "preferências diversas" +msgstr "diversas" msgid "Add new library" msgstr "Adicionar nova biblioteca" From 0259d00373b9e6f3bc1d76eebc5b243283ca7063 Mon Sep 17 00:00:00 2001 From: Miller Puckette Date: Mon, 30 Oct 2023 15:56:36 +0100 Subject: [PATCH 68/68] version number to 0.54-1 --- linux/release-checklist.txt | 20 ++++++++++++++++---- src/m_pd.h | 2 +- src/pd.rc | 4 ++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/linux/release-checklist.txt b/linux/release-checklist.txt index a4343b54..30c9a590 100644 --- a/linux/release-checklist.txt +++ b/linux/release-checklist.txt @@ -3,7 +3,7 @@ release checklist test compilation on linux/msw/mac: VERSION=tmp -... later: VERSION=0.53-2 +... later: VERSION=0.54-0test1 ------------- remake po: ---------------- @@ -30,8 +30,12 @@ cd ~/pd/msw rm -rf /tmp/pd-* ./build-msw-64.sh $VERSION ./build-wxp-32.sh $VERSION -mv /tmp/pd-$VERSION*.{zip,exe} ~/pd/dist -rm -rf /tmp/pd-* +mv /tmp/pd-$VERSION*.zip ~/pd/dist +mv /tmp/Pd-$VERSION-i386.windows-installer.exe \ + ~/pd/dist/pd-$VERSION-i386.windows-installer.exe +mv /tmp/Pd-$VERSION.windows-installer.exe \ + ~/pd/dist/pd-$VERSION.windows-installer.exe +rm -rf /tmp/pd-* /tmp/Pd-* ---- build on macosx 10.7 machine: scp -p ~/pd/dist/pd-$VERSION.src.tar.gz $MAC:work/build/ @@ -41,6 +45,14 @@ ssh $MAC 'cd work/b32/; ./build-i386 ' $VERSION && \ scp -p $MAC:work/b32/pd-$VERSION-i386.mac.tar.gz ~/pd/dist/ +---------- test reality check ---------- + +cd ~/bis/work/reality-check/test-manoury-en-echo/ +SCRIPT=../old-vector/betty-test.txt ./test-me.sh +cd ../test-hagan-ofpulsesandtimes +./test-me.sh +(add more as available) + ---------- grab CI version ----------- git push origin --tags @@ -51,7 +63,7 @@ grab "macOS:archive" from https://git.iem.at/pd/pure-data/pipelines or try: https://git.iem.at/pd/pure-data/-/pipelines --> pure-data_$VERSION_macOS.zip -mv -i ~/pure-data_${VERSION}_macOS.zip ~/pd/dist/pd-$VERSION.macos.zip +mv -i ~/pure-data_master_macOS.zip ~/pd/dist/pd-$VERSION.macos.zip --------- once the above checks out with a tmp version, proceed: update version string in ../src/m_pd.h ../configure.ac ../src/pd.rc diff --git a/src/m_pd.h b/src/m_pd.h index 7970f962..c658fa55 100644 --- a/src/m_pd.h +++ b/src/m_pd.h @@ -11,7 +11,7 @@ extern "C" { #define PD_MAJOR_VERSION 0 #define PD_MINOR_VERSION 54 #define PD_BUGFIX_VERSION 1 -#define PD_TEST_VERSION "test1" +#define PD_TEST_VERSION "" extern int pd_compatibilitylevel; /* e.g., 43 for pd 0.43 compatibility */ /* old name for "MSW" flag -- we have to take it for the sake of many old diff --git a/src/pd.rc b/src/pd.rc index 94a131dc..608e4a59 100644 --- a/src/pd.rc +++ b/src/pd.rc @@ -9,12 +9,12 @@ BEGIN BEGIN VALUE "CompanyName", "puredata.info" VALUE "FileDescription", "Pure Data Application" - VALUE "FileVersion", "0.54-1test1" + VALUE "FileVersion", "0.54-1" VALUE "InternalName", "pd.exe" VALUE "LegalCopyright", "Miller Puckette, et al." VALUE "OriginalFilename", "pd.exe" VALUE "ProductName", "Pure Data" - VALUE "ProductVersion", "0.54-1test1" + VALUE "ProductVersion", "0.54-1" END END