pd4web 2.0.10rc2__tar.gz → 2.1.0.dev5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/PKG-INFO +2 -2
  2. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/README.md +1 -1
  3. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/Libraries.yaml +32 -3
  4. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/ambi~.cmake +2 -6
  5. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/cyclone.cmake +4 -10
  6. pd4web-2.1.0.dev5/Sources/Libraries/earplug.cmake +6 -0
  7. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/else.cmake +12 -13
  8. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/libpd.cmake +6 -5
  9. pd4web-2.1.0.dev5/Sources/Libraries/o.scofo~.cmake +9 -0
  10. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pmpd.cmake +2 -12
  11. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/timbreIDLib.cmake +2 -11
  12. pd4web-2.1.0.dev5/Sources/Templates/1/bula.md +10 -0
  13. pd4web-2.1.0.dev5/Sources/Templates/1/index.html +158 -0
  14. pd4web-2.1.0.dev5/Sources/Templates/2/index.html +66 -0
  15. pd4web-2.1.0.dev5/Sources/Templates/2/sketch.js +55 -0
  16. pd4web-2.1.0.dev5/Sources/index.html +30 -0
  17. pd4web-2.1.0.dev5/Sources/nogui.html +29 -0
  18. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Builder.py +63 -67
  19. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Compilers.py +1 -2
  20. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Libraries.py +8 -48
  21. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Objects.py +10 -3
  22. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Patch.py +196 -82
  23. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Pd4Web.py +41 -3
  24. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.cpp +122 -19
  25. pd4web-2.1.0.dev5/Sources/pd4web.gui.js +2610 -0
  26. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.hpp +7 -1
  27. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.style.css +282 -119
  28. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/pyproject.toml +1 -2
  29. pd4web-2.0.10rc2/Sources/Libraries/earplug.cmake +0 -21
  30. pd4web-2.0.10rc2/Sources/Libraries/o.scofo~.cmake +0 -14
  31. pd4web-2.0.10rc2/Sources/Templates/Template1.html +0 -128
  32. pd4web-2.0.10rc2/Sources/index.html +0 -128
  33. pd4web-2.0.10rc2/Sources/pd4web/Emscripten.py +0 -58
  34. pd4web-2.0.10rc2/Sources/pd4web.gui.js +0 -1930
  35. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/LICENSE +0 -0
  36. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/.clang-format +0 -0
  37. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/.prettierrc +0 -0
  38. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/.yamlftm +0 -0
  39. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/.git +0 -0
  40. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/.github/workflows/c-cpp.yml +0 -0
  41. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/.gitignore +0 -0
  42. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/CMakeLists.txt +0 -0
  43. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/.clang-format +0 -0
  44. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/CMakeLists.txt +0 -0
  45. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/fft~/fft~-help.pd +0 -0
  46. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/fft~/fft~.cpp +0 -0
  47. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple/simple-help.pd +0 -0
  48. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple/simple-patch.pd +0 -0
  49. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple/simple.cpp +0 -0
  50. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple~/simple~-help.pd +0 -0
  51. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple~/simple~.cpp +0 -0
  52. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/LICENSE +0 -0
  53. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/README.md +0 -0
  54. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Tests/01.Deprecated-Functions/CMakeLists.txt +0 -0
  55. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Tests/CMakeLists.txt +0 -0
  56. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/pd.cmake +0 -0
  57. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/__init__.py +0 -0
  58. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/cmake-format.yaml +0 -0
  59. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/config.h +0 -0
  60. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/externals.cpp +0 -0
  61. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/favicon.ico +0 -0
  62. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Helpers.py +0 -0
  63. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/__init__.py +0 -0
  64. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.gitignore +0 -0
  65. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.midi.js +0 -0
  66. {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.threads.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pd4web
3
- Version: 2.0.10rc2
3
+ Version: 2.1.0.dev5
4
4
  Summary: pd4web compiles PureData patches with external objects for Wasm, allowing to run entire patches in web browsers.
5
5
  Home-page: https://charlesneimog.github.io/pd4web
6
6
  Author: Charles K. Neimog
@@ -50,7 +50,7 @@ Description-Content-Type: text/markdown
50
50
 
51
51
  <h3 align="center">Examples</h3>
52
52
 
53
- * Check some examples [here](https://charlesneimog.github.io/pd4web/tests/).
53
+ * Check some examples [here](https://charlesneimog.github.io/pd4web/).
54
54
 
55
55
  -----
56
56
  <h3 align="center">Questions, doubts, help</h3>
@@ -27,7 +27,7 @@
27
27
 
28
28
  <h3 align="center">Examples</h3>
29
29
 
30
- * Check some examples [here](https://charlesneimog.github.io/pd4web/tests/).
30
+ * Check some examples [here](https://charlesneimog.github.io/pd4web/).
31
31
 
32
32
  -----
33
33
  <h3 align="center">Questions, doubts, help</h3>
@@ -23,7 +23,22 @@ Libraries:
23
23
  Developer: porres
24
24
  Repository: pd-cyclone
25
25
  Version: cyclone_0.9-1
26
- Unsupported: [active, mousefilter, mousestate, scope~, coll, mtr, capture, hrandfile, prob, funbuff, seq, hrandgrowfile, hrandfile, capture~, table]
26
+ Unsupported:
27
+ - active
28
+ - mousefilter
29
+ - mousestate
30
+ - scope~
31
+ - coll
32
+ - mtr
33
+ - capture
34
+ - hrandfile
35
+ - prob
36
+ - funbuff
37
+ - seq
38
+ - hrandgrowfile
39
+ - hrandfile
40
+ - capture~
41
+ - table
27
42
 
28
43
  # ─────────────── o.scofo~ ───────────────
29
44
  - Name: ambi~
@@ -51,17 +66,21 @@ Libraries:
51
66
  Source: GITHUB
52
67
  Developer: porres
53
68
  Repository: pd-else
54
- Version: faa72218e7290769b689cddc9b66ae0db5c2faaa
69
+ Version: v.1.0-rc12
55
70
  Unsupported:
56
71
  # Need implementation
57
72
  - sfz~
58
73
  - sfont~
74
+ - play.file~
75
+ - sfload
76
+
77
+ # Osc is not support on browsers
59
78
 
60
79
  # Pd GUI Related
61
80
  - oscope~
62
81
  - midi
63
82
  - numbox~
64
- - keyboard
83
+ # - keyboard
65
84
  - pic
66
85
  - bicoeff
67
86
  - function
@@ -79,5 +98,15 @@ Libraries:
79
98
  - bl.imp2~
80
99
  - slew2~
81
100
  - bl.imp~
101
+
82
102
  # Incompatible with Web enviroment
83
103
  - osc.format
104
+ - osc.send
105
+ - pdlink
106
+ - pdlink~
107
+ - keymap
108
+ - properties
109
+
110
+ # need extra objects
111
+ - pvoc.freeze~
112
+ - freeze~
@@ -1,11 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.25)
2
+ project(ambi~) # MUST BE THE SAME NAME AS IS NAME FROM Libraries.yaml
2
3
 
3
- set(PDCMAKE_DIR
4
- ${CMAKE_CURRENT_SOURCE_DIR}/Resources/pd.cmake
5
- CACHE PATH "Path to pd.cmake")
6
-
7
- include(${PDCMAKE_DIR}/pd.cmake)
8
- set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/Externals/ambi~)
4
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
9
5
 
10
6
  function(ReplaceLine file line new_line)
11
7
  file(READ ${file} FILE_CONTENTS)
@@ -1,13 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.25)
2
2
  project(cyclone)
3
3
 
4
- set(PDCMAKE_DIR
5
- ${CMAKE_CURRENT_SOURCE_DIR}/Resources/pd.cmake
6
- CACHE PATH "Path to pd.cmake")
7
- include(${PDCMAKE_DIR}/pd.cmake)
8
-
9
- set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/Externals/cyclone)
10
- set(ENABLE_TILDE_TARGET_WARNING off)
4
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
11
5
 
12
6
  include_directories(${LIB_DIR}/shared/)
13
7
 
@@ -191,7 +185,7 @@ pd_add_external(rminus~ "${LIB_DIR}/cyclone_objects/binaries/audio/rminus.c")
191
185
  pd_add_external(round~ "${LIB_DIR}/cyclone_objects/binaries/audio/round.c")
192
186
  pd_add_external(scale~ "${LIB_DIR}/cyclone_objects/binaries/audio/scale.c")
193
187
  pd_add_external(thresh~ "${LIB_DIR}/cyclone_objects/binaries/audio/thresh.c")
194
- pd_add_external(trunc~ "${LIB_DIR}/cyclone_objects/binaries/audio/trunc.c")
188
+ #pd_add_external(trunc~ "${LIB_DIR}/cyclone_objects/binaries/audio/trunc.c")
195
189
 
196
190
  # ╭──────────────────────────────────────╮
197
191
  # │ Classes with Dependencies │
@@ -251,7 +245,7 @@ pd_add_external(decide "${LIB_DIR}/cyclone_objects/binaries/control/decide.c;${L
251
245
 
252
246
  # New dependencies for rand~ and pink~
253
247
  pd_add_external(rand~ "${LIB_DIR}/cyclone_objects/binaries/audio/rand.c;${LIB_DIR}/shared/common/random.c")
254
- pd_add_external(pink~ "${LIB_DIR}/cyclone_objects/binaries/audio/pink.c;${LIB_DIR}/shared/common/random.c")
248
+ #pd_add_external(pink~ "${LIB_DIR}/cyclone_objects/binaries/audio/pink.c;${LIB_DIR}/shared/common/random.c")
255
249
 
256
250
  # New dependencies for frameaccum~ and framedelta~
257
251
  pd_add_external(frameaccum~ "${LIB_DIR}/cyclone_objects/binaries/audio/frameaccum.c;${LIB_DIR}/shared/common/grow.c")
@@ -280,7 +274,7 @@ pd_add_external(bitshift~ "${LIB_DIR}/cyclone_objects/binaries/audio/bitshift.c;
280
274
  pd_add_external(bitxor~ "${LIB_DIR}/cyclone_objects/binaries/audio/bitxor.c;${LIB_DIR}/shared/common/magicbit.c")
281
275
 
282
276
  # New dependency for scope~
283
- pd_add_external(scope~ "${LIB_DIR}/cyclone_objects/binaries/audio/scope.c;${LIB_DIR}/shared/common/magicbit.c")
277
+ #pd_add_external(scope~ "${LIB_DIR}/cyclone_objects/binaries/audio/scope.c;${LIB_DIR}/shared/common/magicbit.c")
284
278
 
285
279
  # New dependency for comment
286
280
  pd_add_external(comment "${LIB_DIR}/cyclone_objects/binaries/control/comment.c;${LIB_DIR}/shared/control/s_cycloneutf8.c")
@@ -0,0 +1,6 @@
1
+ cmake_minimum_required(VERSION 3.25)
2
+ project(earplug)
3
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
4
+
5
+ pd_add_external(earplug~ "${LIB_DIR}/earplug.c")
6
+ pd_add_datafile(earplug~ "${LIB_DIR}/earplug_data.txt")
@@ -1,19 +1,10 @@
1
1
  cmake_minimum_required(VERSION 3.25)
2
-
3
- set(PDCMAKE_DIR
4
- ${CMAKE_CURRENT_SOURCE_DIR}/Resources/pd.cmake
5
- CACHE PATH "Path to pd.cmake")
6
-
7
- include(${PDCMAKE_DIR}/pd.cmake)
8
-
9
- set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/Externals/else)
2
+ project(else)
3
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
10
4
 
11
5
  include_directories(${LIB_DIR}/Source/Shared/aubio/src)
12
6
  include_directories(${LIB_DIR}/Source/Shared)
13
7
 
14
- project(else)
15
-
16
- set(ENABLE_TILDE_TARGET_WARNING off)
17
8
 
18
9
  # ╭──────────────────────────────────────╮
19
10
  # │ GUI INTERFACE │
@@ -238,13 +229,15 @@ pd_add_external(toggleff~ "${LIB_DIR}/Source/Audio/toggleff~.c")
238
229
  pd_add_external(trighold~ "${LIB_DIR}/Source/Audio/trighold~.c")
239
230
  pd_add_external(unmerge~ "${LIB_DIR}/Source/Audio/unmerge~.c")
240
231
  pd_add_external(vu~ "${LIB_DIR}/Source/Audio/vu~.c")
241
- # pd_add_external(vcf2~ "${LIB_DIR}/Source/Audio/vcf2~.c")
232
+ pd_add_external(vcf2~ "${LIB_DIR}/Source/Audio/vcf2~.c")
242
233
  pd_add_external(xmod~ "${LIB_DIR}/Source/Audio/xmod~.c")
243
234
  pd_add_external(xmod2~ "${LIB_DIR}/Source/Audio/xmod2~.c")
244
235
  pd_add_external(wrap2 "${LIB_DIR}/Source/Control/wrap2.c")
245
236
  pd_add_external(wrap2~ "${LIB_DIR}/Source/Audio/wrap2~.c")
246
237
  pd_add_external(zerocross~ "${LIB_DIR}/Source/Audio/zerocross~.c")
247
238
 
239
+
240
+
248
241
  # ╭──────────────────────────────────────╮
249
242
  # │ AUBIO │
250
243
  # ╰──────────────────────────────────────╯
@@ -347,6 +340,7 @@ pd_add_external(gendyn~ "${LIB_DIR}/Source/Audio/gendyn~.c;${randbuf}")
347
340
  list(APPEND randmagic ${MAGIC_CODE})
348
341
  list(APPEND randmagic "${LIB_DIR}/Source/Shared/random.c")
349
342
  pd_add_external(brown~ "${LIB_DIR}/Source/Audio/brown~.c;${randmagic}")
343
+ pd_add_external(velvet~ "${LIB_DIR}/Source/Audio/velvet~.c;${randmagic}")
350
344
 
351
345
  # ╭──────────────────────────────────────╮
352
346
  # │ RAND │
@@ -408,7 +402,7 @@ pd_add_external(plaits~ "${PLAITS_SRC}")
408
402
  # ╭──────────────────────────────────────╮
409
403
  # │ SFONT │
410
404
  # ╰──────────────────────────────────────╯
411
- if(NOT PD4WEB)
405
+ if(NOT EMSCRIPTEN)
412
406
  set(BUILD_SFONT ON)
413
407
  if(BUILD_SFONT)
414
408
 
@@ -516,3 +510,8 @@ if(WIN32)
516
510
  endif()
517
511
 
518
512
  add_definitions(-DHAVE_STRUCT_TIMESPEC)
513
+
514
+
515
+ #add_subdirectory("${LIB_DIR}/Source/Shared/ffmpeg")
516
+ #pd_add_external(play.file~ "${LIB_DIR}/Source/Audio/play.file~.c")
517
+ #target_link_libraries(play.file_tilde PUBLIC ffmpeg)
@@ -1,12 +1,13 @@
1
1
  cmake_minimum_required(VERSION 3.25)
2
2
  project(libpd C)
3
3
 
4
- set(PD_SOURCE_DIR
5
- ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/pure-data/src/
6
- CACHE STRING "PATH where is located PureData Source Code")
7
-
8
- message(STATUS "PD_SOURCES: ${PD_SOURCE_DIR}")
4
+ set(ENABLE_TILDE_TARGET_WARNING off)
9
5
 
6
+ if (LSP_SUPPORT)
7
+ set(PD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build/pure-data/src/)
8
+ else()
9
+ set(PD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/pure-data/src/)
10
+ endif()
10
11
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -matomics -mbulk-memory")
11
12
 
12
13
  # ╭──────────────────────────────────────╮
@@ -0,0 +1,9 @@
1
+ cmake_minimum_required(VERSION 3.25)
2
+ project(o.scofo~)
3
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
4
+
5
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -matomics -mbulk-memory")
6
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -matomics -mbulk-memory")
7
+
8
+ set(BUILD_PD_OBJECT ON)
9
+ add_subdirectory(${LIB_DIR})
@@ -1,17 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.25)
2
-
3
- set(PDCMAKE_DIR
4
- ${CMAKE_CURRENT_SOURCE_DIR}/Resources/pd.cmake
5
- CACHE PATH "Path to pd.cmake")
6
- include(${PDCMAKE_DIR}/pd.cmake)
7
-
8
- set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/Externals/pmpd)
9
-
10
- # ╭──────────────────────────────────────╮
11
- # │ PMPD Compilation │
12
- # ╰──────────────────────────────────────╯
13
-
14
2
  project(pmpd)
3
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
4
+
15
5
  configure_file("${LIB_DIR}/pmpd_version.c.in" "${CMAKE_BINARY_DIR}/pmpd_version.c" @ONLY)
16
6
 
17
7
  include_directories(${CMAKE_BINARY_DIR})
@@ -1,16 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.25)
2
-
3
- set(PDCMAKE_DIR
4
- ${CMAKE_CURRENT_SOURCE_DIR}/Resources/pd.cmake
5
- CACHE PATH "Path to pd.cmake")
6
-
7
- message(STATUS "PDCMAKE_DIR: ${PDCMAKE_DIR}")
8
- include(${PDCMAKE_DIR}/pd.cmake)
9
-
10
- set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Pd4Web/Externals/timbreIDLib)
11
-
12
2
  project(timbreIDLib)
13
- set(ENABLE_TILDE_TARGET_WARNING off)
3
+ set(LIB_DIR ${PD4WEB_EXTERNAL_DIR}/${PROJECT_NAME})
4
+
14
5
  set(timbreIDLib_Common "${LIB_DIR}/src/tIDLib.c")
15
6
  include_directories(${LIB_DIR}/include)
16
7
 
@@ -0,0 +1,10 @@
1
+ # by ChatGpt
2
+
3
+ "Spectral Echoes" is an immersive electroacoustic composition that blends live instruments with pre-recorded electronic sounds and real-time audio processing. To ensure the best experience, follow these setup and performance instructions:
4
+
5
+ ## Equipment Needed
6
+
7
+ * Audio Interface: A multi-channel audio interface.
8
+ * Speakers: A quadraphonic speaker setup (four speakers positioned in a square around the audience) for spatial audio diffusion.
9
+ * Microphones: One or two condenser microphones for capturing live instruments.
10
+ * Cables: Ensure all necessary audio cables (XLR, TRS, and USB) are available.
@@ -0,0 +1,158 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Pd4Web</title>
5
+ <meta charset="UTF-8" />
6
+ <!-- pd4web.threads.js can help if you can't active Cross-Origin Resource Sharing (CORS) from server side -->
7
+ <script src="./pd4web.threads.js"></script>
8
+ <script src="./pd4web.js"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
10
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css">
11
+ <style>
12
+ /* Style for the entire Markdown content container */
13
+ #Pd4WebText {
14
+ font-family: Arial, sans-serif;
15
+ line-height: 1.6;
16
+ padding: 20px;
17
+ border-radius: 8px;
18
+ text-align: center;
19
+ }
20
+
21
+ /* Style for h1 tags inside #Pd4WebText */
22
+ #Pd4WebText h1 {
23
+ font-size: 2em;
24
+ color: #2c3e50;
25
+ margin-bottom: 0.5em;
26
+ padding-bottom: 0.3em;
27
+ text-align: center;
28
+ user-select: none;
29
+ }
30
+
31
+ /* Style for h2 tags inside #Pd4WebText */
32
+ #Pd4WebText h2 {
33
+ font-size: 1.75em;
34
+ color: #34495e;
35
+ margin-top: 1em;
36
+ margin-bottom: 0.5em;
37
+ text-align: center;
38
+ user-select: none;
39
+ }
40
+
41
+ /* Style for paragraph tags inside #Pd4WebText */
42
+ #Pd4WebText p {
43
+ font-size: 1.5em;
44
+ color: #000000;
45
+ margin-bottom: 1em;
46
+ text-align: justify;
47
+ user-select: none;
48
+ }
49
+
50
+ /* Style for lists */
51
+ #Pd4WebText ul {
52
+ list-style-type: disc;
53
+ margin-left: 20px;
54
+ margin-bottom: 1em;
55
+ text-align: left;
56
+ }
57
+
58
+ #Pd4WebText ol {
59
+ list-style-type: decimal;
60
+ margin-left: 1px;
61
+ margin-bottom: 1em;
62
+ font-size: 1.5em;
63
+ text-align: left;
64
+ }
65
+
66
+ #Pd4WebText ul {
67
+ list-style-type: disc; /* Use a disc (default bullet) */
68
+ margin-left: 2px;
69
+ padding-left: 0px;
70
+ font-size: 1.2em;
71
+ }
72
+
73
+ /* Style for each list item */
74
+ #Pd4WebText li {
75
+ font-size: 1.2em;
76
+ color: #000000; /* Dark gray color */
77
+ margin-bottom: 0.5em; /* Space between items */
78
+ }
79
+
80
+ .pd4web-fullscreen {
81
+ content: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMzIiIHdpZHRoPSIyOCIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi42LjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyNCBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNjR6TTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwek00NDggMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZ6Ii8+PC9zdmc+");
82
+ display: flex;
83
+ justify-content: center;
84
+ align-items: center;
85
+ width: 24px;
86
+ height: 24px;
87
+ margin: 0 auto;
88
+ cursor: pointer;
89
+ }
90
+ </style>
91
+ </head>
92
+ <body>
93
+ <!-- All the styles are in the pd4web.style.css file loaded by pd4web.js -->
94
+ <div style="display: flex; justify-content: center; width: 100%; height: 100vh; margin-top: 20px;">
95
+ <div style="width: 30%;">
96
+ <div style="display: flex; justify-content: center;">
97
+ <span class="pd4web-sound-switch" id="Pd4WebAudioSwitch"></span>
98
+ <span class="pd4web-fullscreen" id="Pd4WebFullscreen"></span>
99
+ </div>
100
+ <hr>
101
+ <div id="Pd4WebPatchDiv"class="Pd4WebPatchDiv">
102
+ <svg id="Pd4WebCanvas"></svg>
103
+ </div>
104
+ <div id="Pd4WebText"></div>
105
+ </div>
106
+ <div style="width: 70%; margin: 0 auto; text-align: center;">
107
+ <img id="Pd4WebScore" src="score1.png" style="width: 100%; max-width: 100%;">
108
+ </div>
109
+
110
+
111
+
112
+ </div>
113
+ <script>
114
+ async function loadMarkdown() {
115
+ try {
116
+ const response = await fetch('bula.md');
117
+ if (!response.ok) throw new Error('Failed to load file.md');
118
+ const markdown = await response.text();
119
+ const html = marked.parse(markdown);
120
+ document.getElementById('Pd4WebText').innerHTML = html;
121
+ } catch (error) {
122
+ console.error('Error loading Markdown:', error);
123
+ document.getElementById('Pd4WebText').innerText = 'Failed to load content.';
124
+ }
125
+ }
126
+ window.onload = loadMarkdown;
127
+
128
+ // when user click pd4web-fullscreen, the patch will be displayed in full screen
129
+ document.getElementById("Pd4WebFullscreen").addEventListener("click", () => {
130
+ // check if already in full screen
131
+ if (document.fullscreenElement) {
132
+ document.exitFullscreen();
133
+ return;
134
+ }
135
+ document.documentElement.requestFullscreen();
136
+
137
+ });
138
+
139
+
140
+ var Pd4Web = null; // Pd4Web object must be declared in the global scope
141
+ Pd4WebModule().then((Pd4WebModulePromise) => {
142
+ Pd4Web = new Pd4WebModulePromise.Pd4Web();
143
+ });
144
+
145
+ document
146
+ .getElementById("Pd4WebAudioSwitch")
147
+ .addEventListener("click", async () => {
148
+ // Pd4Web.init(), when using audio input, must be called after a user gesture
149
+ Pd4Web.init();
150
+
151
+ Pd4Web.onSymbolReceived("pd4web-score", function (symbol) {
152
+ document.getElementById("Pd4WebScore").src = symbol;
153
+ });
154
+
155
+ });
156
+ </script>
157
+ </body>
158
+ </html>
@@ -0,0 +1,66 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Pd4Web</title>
5
+ <meta charset="UTF-8" />
6
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.11.1/p5.min.js"></script>
7
+ <script src="https://unpkg.com/ml5@1/dist/ml5.js"></script>
8
+ <script src="./pd4web.threads.js"></script>
9
+ <script src="./pd4web.js"></script>
10
+ <script src="./sketch.js"></script>
11
+ <style>
12
+ canvas {
13
+ border-radius: 30px;
14
+ }
15
+ </style>
16
+ </head>
17
+ <body>
18
+ <span class="pd4web-sound-switch" id="Pd4WebAudioSwitch"></span>
19
+ <div id="Pd4WebPatchDiv"class="Pd4WebPatchDiv">
20
+ <svg id="Pd4WebCanvas"></svg>
21
+ </div>
22
+ <hr>
23
+ <p id="message" style="text-align: center; font-size: 20px">
24
+ Click on the page to request access to the camera and microphone.
25
+ </p>
26
+ <div style="display: flex; justify-content: center; border-radius: 30px">
27
+ <div id="p5js" style="border-radius: 30px"></div>
28
+ </div>
29
+
30
+
31
+ <script>
32
+ // ╭─────────────────────────────────────╮
33
+ // │ Gui Bottoms Interface │
34
+ // ╰─────────────────────────────────────╯
35
+ var Pd4Web = null;
36
+
37
+ // add window click event to start video
38
+ document.addEventListener("click", async () => {
39
+ navigator.mediaDevices.getUserMedia({
40
+ video: true,
41
+ audio: true
42
+ });
43
+ if (Pd4Web) {
44
+ return;
45
+ }
46
+ Pd4WebModule().then((Pd4WebModulePromise) => {
47
+ Pd4Web = new Pd4WebModulePromise.Pd4Web();
48
+ const message = document.getElementById("message");
49
+ if (message) {
50
+ message.style.display = "none";
51
+ }
52
+ });
53
+ // remove event listener
54
+ document.removeEventListener("click", () => {});
55
+ });
56
+
57
+ document
58
+ .getElementById("Pd4WebAudioSwitch")
59
+ .addEventListener("click", async () => {
60
+ startVideo();
61
+ Pd4Web.init();
62
+ console.log("Pd4Web", Pd4Web);
63
+ });
64
+ </script>
65
+ </body>
66
+ </html>
@@ -0,0 +1,55 @@
1
+ let handPose;
2
+ let hands = [];
3
+ var p5jsConfigured = false;
4
+ let video;
5
+ let canvas;
6
+
7
+ function preload() {
8
+ handPose = ml5.handPose({ flipped: true });
9
+ }
10
+
11
+ function mousePressed() {
12
+ console.log(hands);
13
+ }
14
+
15
+ function gotHands(results) {
16
+ hands = results;
17
+ }
18
+
19
+ function setup() {
20
+ canvas = createCanvas(640, 480);
21
+ canvas.parent("p5js");
22
+ noLoop();
23
+ }
24
+
25
+ function startVideo() {
26
+ video = createCapture(VIDEO, { flipped: true });
27
+ video.hide();
28
+ handPose.detectStart(video, gotHands);
29
+ loop(); // Restart draw loop to start rendering video frames
30
+ }
31
+
32
+ function draw() {
33
+ // Draw the webcam video
34
+ image(video, 0, 0, width, height);
35
+
36
+ // Draw all the tracked hand points
37
+ for (let i = 0; i < hands.length; i++) {
38
+ let hand = hands[i];
39
+ for (let j = 0; j < hand.keypoints.length; j++) {
40
+ let keypoint = hand.keypoints[j];
41
+ let whichHand = hand.handedness;
42
+ fill(255, 0, 0);
43
+ noStroke();
44
+ circle(keypoint.x, keypoint.y, 5);
45
+ if (Pd4Web){
46
+ let x = keypoint.x / width;
47
+ let y = keypoint.y / height;
48
+ // check if sendList is available
49
+ if (Pd4Web.sendList){
50
+ Pd4Web.sendList(whichHand[0] + "-" + j, [x, y]);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,30 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Pd4Web</title>
5
+ <meta charset="UTF-8" />
6
+ <!-- pd4web.threads.js can help if you can't active Cross-Origin Resource Sharing (CORS) from server side -->
7
+ <script src="./pd4web.threads.js"></script>
8
+ <script src="./pd4web.js"></script>
9
+ </head>
10
+ <body>
11
+ <!-- All the styles are in the pd4web.style.css file loaded by pd4web.js -->
12
+ <span class="pd4web-sound-switch" id="Pd4WebAudioSwitch"></span>
13
+ <div id="Pd4WebPatchDiv"class="Pd4WebPatchDiv">
14
+ <svg id="Pd4WebCanvas"></svg>
15
+ </div>
16
+ <script>
17
+ var Pd4Web = null; // Pd4Web object must be declared in the global scope
18
+ Pd4WebModule().then((Pd4WebModulePromise) => {
19
+ Pd4Web = new Pd4WebModulePromise.Pd4Web();
20
+ });
21
+
22
+ document
23
+ .getElementById("Pd4WebAudioSwitch")
24
+ .addEventListener("click", async () => {
25
+ // Pd4Web.init(), when using audio input, must be called after a user gesture
26
+ Pd4Web.init();
27
+ });
28
+ </script>
29
+ </body>
30
+ </html>
@@ -0,0 +1,29 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Pd4Web</title>
5
+ <meta charset="UTF-8" />
6
+ <!-- pd4web.threads.js can help if you can't active Cross-Origin Resource Sharing (CORS) from server side -->
7
+ <script src="./pd4web.threads.js"></script>
8
+ <script src="./pd4web.js"></script>
9
+ </head>
10
+ <body>
11
+ <script>
12
+ var Pd4Web = null; // Pd4Web object must be declared in the global scope
13
+ Pd4WebModule().then((Pd4WebModulePromise) => {
14
+ Pd4Web = new Pd4WebModulePromise.Pd4Web();
15
+ });
16
+
17
+ // If you are using the "-nogui" option, you need to manually call Pd4Web.init()
18
+ // after a user interaction to enable audio (case you use audio input, from mic). In this example, Pd4Web.init() is
19
+ // triggered by the first click anywhere on the page.
20
+ document.addEventListener(
21
+ "click",
22
+ async () => {
23
+ Pd4Web.init();
24
+ },
25
+ { once: true }, // Ensures this only runs once
26
+ );
27
+ </script>
28
+ </body>
29
+ </html>