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.
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/PKG-INFO +2 -2
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/README.md +1 -1
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/Libraries.yaml +32 -3
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/ambi~.cmake +2 -6
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/cyclone.cmake +4 -10
- pd4web-2.1.0.dev5/Sources/Libraries/earplug.cmake +6 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/else.cmake +12 -13
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/libpd.cmake +6 -5
- pd4web-2.1.0.dev5/Sources/Libraries/o.scofo~.cmake +9 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pmpd.cmake +2 -12
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/timbreIDLib.cmake +2 -11
- pd4web-2.1.0.dev5/Sources/Templates/1/bula.md +10 -0
- pd4web-2.1.0.dev5/Sources/Templates/1/index.html +158 -0
- pd4web-2.1.0.dev5/Sources/Templates/2/index.html +66 -0
- pd4web-2.1.0.dev5/Sources/Templates/2/sketch.js +55 -0
- pd4web-2.1.0.dev5/Sources/index.html +30 -0
- pd4web-2.1.0.dev5/Sources/nogui.html +29 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Builder.py +63 -67
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Compilers.py +1 -2
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Libraries.py +8 -48
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Objects.py +10 -3
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Patch.py +196 -82
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Pd4Web.py +41 -3
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.cpp +122 -19
- pd4web-2.1.0.dev5/Sources/pd4web.gui.js +2610 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.hpp +7 -1
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.style.css +282 -119
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/pyproject.toml +1 -2
- pd4web-2.0.10rc2/Sources/Libraries/earplug.cmake +0 -21
- pd4web-2.0.10rc2/Sources/Libraries/o.scofo~.cmake +0 -14
- pd4web-2.0.10rc2/Sources/Templates/Template1.html +0 -128
- pd4web-2.0.10rc2/Sources/index.html +0 -128
- pd4web-2.0.10rc2/Sources/pd4web/Emscripten.py +0 -58
- pd4web-2.0.10rc2/Sources/pd4web.gui.js +0 -1930
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/LICENSE +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/.clang-format +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/.prettierrc +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/.yamlftm +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/.git +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/.github/workflows/c-cpp.yml +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/.gitignore +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/CMakeLists.txt +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/.clang-format +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/CMakeLists.txt +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/fft~/fft~-help.pd +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/fft~/fft~.cpp +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple/simple-help.pd +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple/simple-patch.pd +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple/simple.cpp +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple~/simple~-help.pd +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Examples/simple~/simple~.cpp +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/LICENSE +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/README.md +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Tests/01.Deprecated-Functions/CMakeLists.txt +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/Tests/CMakeLists.txt +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/Libraries/pd.cmake/pd.cmake +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/__init__.py +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/cmake-format.yaml +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/config.h +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/externals.cpp +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/favicon.ico +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/Helpers.py +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web/__init__.py +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.gitignore +0 -0
- {pd4web-2.0.10rc2 → pd4web-2.1.0.dev5}/Sources/pd4web.midi.js +0 -0
- {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.
|
|
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/
|
|
53
|
+
* Check some examples [here](https://charlesneimog.github.io/pd4web/).
|
|
54
54
|
|
|
55
55
|
-----
|
|
56
56
|
<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:
|
|
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:
|
|
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(
|
|
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(
|
|
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")
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
cmake_minimum_required(VERSION 3.25)
|
|
2
|
-
|
|
3
|
-
set(
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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>
|