Skip to content

Commit

Permalink
add messagehook
Browse files Browse the repository at this point in the history
  • Loading branch information
charlesneimog committed Nov 22, 2023
1 parent ca80a63 commit e612d4d
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
8 changes: 8 additions & 0 deletions pd4web/src/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,14 @@ function JS_setSymbol(symbol, value) {
window.pd4webGuiValues[symbol] = value;
}

// ====================
function JS_setList(symbol, value) {
if (window.pd4webGuiValues[symbol] === undefined) {
window.pd4webGuiValues[symbol] = [];
}
window.pd4webGuiValues[symbol].push(value);
}

// ====================
function sendFloat(receiver, f) {
if (Module === undefined) {
Expand Down
49 changes: 48 additions & 1 deletion pd4web/src/template.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,15 @@ void receiveListfromPd(const char *src, int argc, t_atom *argv) {
InsertList(receiverHash, (char *)src, argc, argv);
}

// ========================================
static void receiveMessageFromPd(const char *src, const char *sym, int argc,
t_atom *argv) {

if (argc == 0) {
InsertSymbol(receiverHash, (char *)src, (char *)sym);
}
}

// ========================================
void receiveFloatfromPd(const char *receiver, float value) {
InsertFloat(receiverHash, (char *)receiver, value);
Expand Down Expand Up @@ -306,6 +315,8 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext,
libpd_set_floathook(receiveFloatfromPd);
libpd_set_symbolhook(receiveSymbolfromPd);
libpd_set_banghook(receiveBangfromPd);
libpd_set_messagehook(receiveMessageFromPd);

libpd_set_printhook(pdprint);
libpd_init();

Expand Down Expand Up @@ -344,16 +355,40 @@ void WebAudioWorkletThreadInitialized(EMSCRIPTEN_WEBAUDIO_T audioContext,
EM_JS(void, setFloatValue, (const char* symbol, float value), {
if (typeof JS_setFloat === "function"){
JS_setFloat(UTF8ToString(symbol), value);
} else{
console.log("JS_setFloat not defined");
}
});

// ========================================
EM_JS(void, setSymbolValue, (const char* symbol, const char* value), {
if (typeof JS_setSymbol === "function"){
JS_setSymbol(UTF8ToString(symbol), UTF8ToString(value));
} else{
console.log("JS_setSymbol not defined");
}
});

// ========================================
EM_JS(void, clearListValue, (const char* symbol), {
if (typeof JS_setList === "function"){
window.pd4webGuiValues[symbol] = [];
} else{
console.log("JS_setList not defined");
}
});
// ========================================
EM_JS(void, setListValueFloat, (const char* symbol, int isfloat, const char* valueSymbol, float valueFloat), {
if (typeof JS_setList === "function"){
if (isfloat){
JS_setList(UTF8ToString(symbol), valueFloat);
} else{
JS_setList(UTF8ToString(symbol), UTF8ToString(valueSymbol));
}
} else{
console.log("JS_setList not defined");
}
});
// clang-format on
// ========================================
void PdWebCompiler_Loop() {
Expand All @@ -367,7 +402,19 @@ void PdWebCompiler_Loop() {
setFloatValue(HTML_IDS[i], item->f);
} else if (item->type == A_SYMBOL) {
setSymbolValue(HTML_IDS[i], item->s);
} else {
} else if (item->type == A_GIMME) {
clearListValue(HTML_IDS[i]);
for (int j = 0; j < item->listSize; j++) {
if (item->list[j].a_type == A_FLOAT) {
setListValueFloat(HTML_IDS[i], 1, NULL, item->list[j].a_w.w_float);
} else if (item->list[j].a_type == A_SYMBOL) {
setListValueFloat(HTML_IDS[i], 0,
item->list[j].a_w.w_symbol->s_name, 0);
}
}
}

else {
EM_ASM_({ alert("Unknown type"); });
return;
}
Expand Down

0 comments on commit e612d4d

Please sign in to comment.