chris@521: #N canvas 736 167 442 1518 10; chris@521: #X text 32 20 Using Puredata (libpd) on Bela; chris@521: #X text 32 30 ==============================; chris@543: #X obj 100 598 osc~ 440; chris@543: #X obj 100 620 *~ 0.1; chris@543: #X obj 100 642 dac~; chris@543: #X text 33 561 Here's how you produce a sine wave out of Bela's stereo chris@521: output:; chris@543: #X text 33 671 Similarly \, Bela's stereo input can be addressed as chris@521: follows:; chris@543: #X obj 100 702 adc~; chris@543: #X obj 100 724 dac~; chris@543: #X text 177 713 Audio pass-through; chris@543: #X text 33 1791 Supported objects; chris@543: #X text 33 1801 -----------------; chris@543: #X text 33 1835 All native pd (vanilla) objects can be used.; chris@543: #X text 33 1821 By default Bela uses libpd to run puredata patches. chris@521: ; chris@543: #X text 33 1855 It is also possible to compile pd objects to optimised chris@521: ; chris@543: #X text 33 1868 C code using the Heavy Cloud Compiler \, in which case chris@521: ; chris@543: #X text 33 1881 a different set of objects is supported (see below). chris@521: ; chris@543: #X text 33 761 Analog I/O; chris@543: #X text 33 771 ----------; chris@543: #X text 33 791 Analog inputs and outputs are treated as audio signals chris@521: and; chris@543: #X text 33 805 are addressed using the next 8 channels of the [adc~] chris@521: and; chris@543: #X text 33 819 [dac~] objects:; chris@543: #X obj 36 845 adc~ 3 4 5 6 7 8 9 10; chris@543: #X text 191 845 Analog Inputs 0 \, 1 \, 2 \, 3 \, 4 \, 5 \, 6 \, 7 chris@521: ; chris@543: #X text 191 875 Analog Outputs 0 \, 1 \, 2 \, 3 \, 4 \, 5 \, 6 \, 7 chris@521: ; chris@543: #X obj 36 875 dac~ 3 4 5 6 7 8 9 10; chris@543: #X text 33 913 examples.; chris@543: #X text 33 1101 MIDI; chris@543: #X text 33 1111 ----; chris@543: #X text 99 1131 and; chris@543: #X obj 36 1130 notein; chris@543: #X obj 125 1130 ctlin; chris@543: #X text 183 1131 objects can be used to interface MIDI devices; chris@543: #X text 33 1149 with the patch.; chris@543: #X text 33 1164 Most MIDI devices can be plugged into the Beaglebone's chris@521: USB; chris@543: #X text 33 1178 port and can be used with these objects.; chris@543: #X text 33 899 See the 'BasicAnalogIn' and 'BasicAnalogOut' projects chris@521: for; chris@543: #X text 33 1193 See the 'hello-midi' and 'midi-poly-synth' projects chris@521: for more; chris@543: #X text 33 1207 for examples.; chris@543: #X obj 57 1268 print; chris@543: #X text 33 1268 The; chris@543: #X text 115 1268 object can be used to log messages directly to Bela's chris@521: ; chris@543: #X text 33 1286 terminal output (e.g. as viewable in the browser IDE). chris@521: ; chris@543: #X obj 100 1312 loadbang; chris@543: #X obj 100 1356 print; chris@543: #X msg 100 1334 Puredata says: 'Hello Bela!'; chris@543: #X text 33 1251 ----------------; chris@543: #X text 33 1241 Debugging: print; chris@543: #X text 33 1401 ----------------; chris@543: #X text 33 1391 Debugging: scope; chris@543: #X text 33 1418 Any signal can be visualised using Bela's browser-based chris@521: ; chris@543: #X text 33 1432 scope. DAC channels 27 \, 28 \, 29 \, 30 address four chris@521: separate; chris@543: #X text 33 1446 scope channels.; chris@543: #X obj 147 1519 dac~ 27 28 29 30; chris@543: #X obj 79 1471 osc~ 440; chris@543: #X obj 149 1471 noise~; chris@543: #X obj 209 1471 osc~ 880; chris@543: #X obj 209 1493 *~; chris@543: #X text 33 1574 visualised.; chris@543: #X text 33 1920 Compiling Puredata patches with Heavy; chris@543: #X text 33 1930 -------------------------------------; chris@543: #X text 33 1950 As an alternative to libpd \, Puredata patches can chris@521: be; chris@543: #X text 33 1964 converted into optimised C code using the Heavy Cloud chris@521: ; chris@543: #X text 33 1978 Compiler by Enzien Audio. The resulting code can result chris@521: ; chris@543: #X text 33 1992 in large increases in performance and is therefore chris@521: well; chris@543: #X text 33 2006 suited for complex patches and final stages of development. chris@521: ; chris@543: #X text 33 2020 We recommend to use libpd for prototyping and less chris@521: CPU; chris@543: #X text 33 2034 intensive patches.; chris@543: #X text 33 2048 See our documentation to learn more about compiling chris@521: patches; chris@543: #X text 33 2061 using Heavy \, and visit enzienaudio.com for more info chris@521: and; chris@543: #X text 33 2075 a list of currently supported objects.; chris@543: #X text 33 1611 Combining Pd and C++; chris@543: #X text 33 1621 --------------------; chris@543: #X text 33 1638 There are many cases where it is useful to combine chris@521: Pd; chris@543: #X text 33 1652 patches with C++ code \, for example when needing to chris@521: ; chris@543: #X text 33 1666 incorporate system calls (e.g. networking) or for; chris@543: #X text 33 1680 sample-accurate dsp processes that are inconvenient chris@521: ; chris@543: #X text 33 1694 to program in Puredata.; chris@543: #X text 33 1727 is used \, which functions as a libpd wrapper. It is chris@521: ; chris@543: #X text 33 1714 When running Puredata patches a template render.cpp chris@521: file; chris@543: #X text 33 1741 possible to modify this file when starting a new pd chris@521: project.; chris@543: #X text 33 1755 See the 'CustomRenderFile' example project for more chris@521: info.; chris@543: #X text 177 620 Sine Wave; chris@543: #X obj 149 1493 *~ 0.1; chris@543: #X obj 279 1471 osc~ 0.5; chris@543: #X text 33 1560 click the scope button to see the above signals being chris@521: ; chris@543: #X text 33 1546 If you're viewing this patch using the Bela IDE you chris@521: can; chris@521: #X text 33 221 Patches can be drag-and-dropped into the browser IDE chris@521: ; chris@521: #X text 33 235 and will be added to the current project that is open. chris@521: ; chris@521: #X text 33 249 In order for the patch to run you need to fulfill the chris@521: ; chris@521: #X text 33 263 following two requirements:; chris@521: #X text 59 285 a) The top-level patch needs to be named '_main.pd' chris@521: ; chris@521: #X text 77 298 (you can still use abstractions); chris@521: #X text 59 315 b) Make sure there is no 'render.cpp' file inside; chris@521: #X text 77 328 the project. A template file will be used instead; chris@521: #X text 77 342 which acts as a wrapper for libpd.; chris@521: #X text 77 355 Alternatively you can modify this wrapper and place chris@521: ; chris@521: #X text 77 368 it inside the project. See below for more information. chris@521: ; chris@521: #X text 33 61 Puredata patches can easily be run on Bela. There are chris@521: two; chris@521: #X text 33 75 ways of doing this: using libpd (which is compatible chris@521: with; chris@521: #X text 33 89 the browser-based IDE) or using the Heavy cloud compiler chris@521: ; chris@521: #X text 33 103 by Enzien Audio.; chris@521: #X text 33 123 This guide focuses mainly on using libpd via the browser chris@521: \,; chris@521: #X text 33 137 however most of the functionality is compatible across chris@521: both; chris@521: #X text 33 151 solutions.; chris@521: #X text 33 191 Loading and running patches in the Bela IDE; chris@521: #X text 33 201 -------------------------------------------; chris@543: #X text 33 531 Audio I/O; chris@543: #X text 33 541 ---------; chris@521: #X text 33 392 If you're viewing this inside the Bela IDE \, then you've chris@521: ; chris@521: #X text 33 406 noticed by now that all pd patches can be previewed chris@521: within; chris@521: #X text 33 420 the browser. Note \, however \, that patches cannot chris@521: currently; chris@521: #X text 33 434 be edited or interacted with inside this preview.; chris@543: #X text 33 464 To view the contents of abstractions supplied with a chris@543: ; chris@543: #X text 33 477 project in the IDE \, simply go to the project navigator chris@543: ; chris@543: #X text 33 490 and open the corresponding patches from there.; chris@543: #X text 33 951 Digital I/O; chris@543: #X text 33 961 -----------; chris@543: #X text 33 981 Digital pins can also be addressed from within a patch. chris@543: ; chris@543: #X text 33 994 Unlike analog pins \, digital pins can be set to work chris@543: as; chris@543: #X text 33 1007 inputs or outputs and can be read/written as signals chris@543: or; chris@543: #X text 33 1020 as messages.; chris@543: #X text 33 1033 See the 'digital' example for instructions on how to chris@543: ; chris@543: #X text 33 1047 initialise \, read and write to digital pins as well chris@543: as some; chris@543: #X text 33 1060 usage examples; chris@521: #X connect 2 0 3 0; chris@521: #X connect 3 0 4 0; chris@521: #X connect 3 0 4 1; chris@521: #X connect 7 0 8 0; chris@521: #X connect 7 1 8 1; chris@521: #X connect 43 0 45 0; chris@521: #X connect 45 0 44 0; chris@521: #X connect 54 0 53 0; chris@521: #X connect 55 0 83 0; chris@521: #X connect 56 0 57 0; chris@521: #X connect 57 0 53 2; chris@521: #X connect 83 0 53 1; chris@521: #X connect 84 0 57 1; chris@521: #X connect 84 0 53 3;