VoidLinkAudio v0.2.0 — first public Ableton Link Audio implementation for Pd vanilla
Hi all,
I just released VoidLinkAudio v0.2.0, which includes — to my knowledge — the first public implementation of Ableton Link Audio on Pure Data vanilla.
Ableton Link Audio is the audio extension to Ableton Link, shipped with Live 12.4 (publicly released May 5, 2026). It allows audio buffers to be transmitted between Link peers over a local network, beat-synced and sample-accurate, in addition to the tempo/transport sync that Link has provided since 2016.
Demo video showing all hosts in action:
The Pd port consists of two externals:
void.linkaudio.send~ publish 2 audio inlets as a stereo channel
void.linkaudio.receive~ subscribe to a channel; output L/R audio
Both expose Link timing as audio-rate signal outlets (tempo~, phase~,
transport~) and accept tempo/transport messages that propagate to all Link peers (Live, Max, TouchDesigner, VCV Rack, openFrameworks, other Pd instances). Help patches are included.
Builds available for:
- macOS Universal (arm64 + x86_64), notarized
- Windows x64
- Linux: planned for v0.3.0
Important: most peers run at 48 kHz (Live default), so set Pd to 48 kHz
in Media > Audio settings to avoid drops.
Source code (GPL-2.0-or-later):
https://github.com/gluon/Void-LinkAudio
Pre-built binaries on GitHub Releases:
https://github.com/gluon/Void-LinkAudio/releases/tag/v0.2.0
Pay-what-you-want bundle (also free) for all hosts:
https://structurevoid.gumroad.com/l/voidlinkaudio-connectors
The project also covers Max/MSP, TouchDesigner, VCV Rack, and openFrameworks (in a separate repo: gluon/ofxAbletonLinkAudio). A VST3/AU plugin pack is in the works for DAW users.
Happy to answer questions, discuss the implementation, or hear about
any issues.
Best,
Julien Bayle
Structure Void
https://structure-void.com
no love for const dB/sec fade curves?
In Pd, if you implement a fade using [line~] into [*~], you get one that is linear in amplitude, which sounds like it starts out slowly and speeds up very quickly. If you put [dbtorms~] inbetween and adjust [line~]'s args, it sounds more like a constant fade and you could say it was "linear in dB" or a constant dB/sec fade. There's nothing exactly like that in either REAPER or Soundforge--their audio-tapered curves still speed up as they get softer. Automating the track fader in REAPER shows something similar. In the following snapshot, the automation line on the bottom track is controlling the track fader, and the vertical red marker lines mark the points where the signal drops another 6dB from the previous marker. See how the markers get closer and closer as the fade progresses? That means the fade is speeding up in terms of dB/s, despite being controlled by a straight line between two points.

Assuming that REAPER and SoundForge cater to the way the vast majority of people hear/use fades, the constant dB/sec fade must not be considered useful in most cases. If I'm right, why would that be?
Help with simple external - signal gating
@robertesler thanks again! i got rid of reading the value in perform funuction using matrix_rw and now i just access it via the class object x. but still, the laggy sound remains. one thing is, that instead of being 1, the value from matrix (value that multiplies the incoming signal) is 266830762" that explains a lot, so the laggy sound i caused by clipping of some sort. nooow to figure out where this bug comes from.
simple_matrix~.c
//sudo ln /Applications/Pd-0.55-0.app/Contents/Resources/src/m_pd.h m_pd.h
//snad je to ok udelat takhle no
#include <m_pd.h>
#include <string.h>
#include <pthread.h>
#include <stdarg.h>
#define MATRIX_SIZE 7
#define TRANSM_SIZE 3
static t_class *simple_matrix_tilde_class;
typedef struct _simple_matrix_tilde
{
t_object x_obj;
t_float some;
int frame;
int val;
int posx;
int posy;
char recv[TRANSM_SIZE];
t_float m_state[MATRIX_SIZE][MATRIX_SIZE]; //stav peč desky
t_float stat;
t_inlet *sym_in_on;
t_symbol *sgo;
pthread_mutex_t mutex;
t_inlet *sig_one_in, *sig_two_in, *sig_tri_in, *sig_qud_in, *sig_fiv_in, *sig_six_in, *sig_sev_in;
t_outlet *sig_one_out, *sig_two_out, *sig_tri_out, *sig_qud_out, *sig_fiv_out, *sig_six_out, *sig_sev_out;
} t_simple_matrix_tilde;
t_float matrix_rw(t_simple_matrix_tilde *x, int op, int c, ...) //x, 0/1, c, x, y, val
{
va_list args;
va_start(args, c);
int xpos;
int ypos;
int sval;
int m;
switch(op)
{
case 0: //read from timrax
m = pthread_mutex_lock(&x->mutex);
xpos = va_arg(args, int);
ypos = va_arg(args, int);
va_end(args);
pthread_mutex_unlock(&x->mutex);
return x->m_state[xpos][ypos];
case 1: //write to axtirm
m = pthread_mutex_lock(&x->mutex);
xpos = va_arg(args, int);
ypos = va_arg(args, int);
sval = va_arg(args, int);
va_end(args);
x->m_state[xpos][ypos] = (t_float)sval;
pthread_mutex_unlock(&x->mutex);
return 0;
default:
//hm
va_end(args);
return 0;
}
if(m)
{
//pthread error
pd_error(x, "pthread mutex lock is behaving :(");
va_end(args);
return 0;
}
}
void simple_matrix_tilde_oscin(t_simple_matrix_tilde *x, t_symbol *s)
{
if(strlen(s->s_name) >= TRANSM_SIZE)
{
//sometimes the size is for some reason larger, maybe UDP? crazy guy
//char recv[TRANSM_SIZE]; //snad to nevybouchne
memcpy(x->recv, s->s_name, TRANSM_SIZE);
x->val = x->recv[0] - '0';
x->posx = x->recv[1] - '0';
x->posy = x->recv[2] - '0';
//post("val %d posx %d posy %d", x->val, x->posx, x->posy);
x->stat = matrix_rw(x, 1, 3, x->posx, x->posy, x->val); //write
} else
{
//?
}
}
t_int *simple_matrix_tilde_perform(t_int *w)
{
t_simple_matrix_tilde *x = (t_simple_matrix_tilde*)(w[1]);
t_sample *sig_in = (t_sample *)(w[2]);
t_sample *sig_out = (t_sample *)(w[3]);
int len = (int)(w[4]); //lenght of sample
//t_float stat = matrix_rw(x, 0, 2, 0, 0); //read
for(int u = 0; u < len; u++)
{
post("%d", x->m_state[0][0]);
*sig_out++ = *(sig_in++) * x->m_state[0][0];
}
return (w+5);
}
void simple_matrix_tilde_dsp(t_simple_matrix_tilde *x, t_signal **sp)
{
dsp_add(simple_matrix_tilde_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
}
void *simple_matrix_tilde_new(t_symbol *s, int argc, t_atom *argv, t_floatarg some)
{
t_simple_matrix_tilde *x = (t_simple_matrix_tilde *)pd_new(simple_matrix_tilde_class);
pthread_mutex_init(&x->mutex, NULL);
memset(x->m_state, 0, sizeof(x->m_state));
x->sym_in_on = inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("symbol"), gensym("oscin"));
//wall,
//wall,
//x->sig_one_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
//x->sig_two_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
//x->sig_tri_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
//x->sig_qud_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
//x->sig_fiv_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
//x->sig_six_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
//x->sig_sev_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
x->sig_one_out = outlet_new(&x->x_obj, &s_signal);
//x->sig_two_out = outlet_new(&x->x_obj, &s_signal);
//x->sig_tri_out = outlet_new(&x->x_obj, &s_signal);
//x->sig_qud_out = outlet_new(&x->x_obj, &s_signal);
//x->sig_fiv_out = outlet_new(&x->x_obj, &s_signal);
//x->sig_six_out = outlet_new(&x->x_obj, &s_signal);
//x->sig_sev_out = outlet_new(&x->x_obj, &s_signal);
return (void *) x;
}
void simple_matrix_tilde_freedom(t_simple_matrix_tilde *x)
{
inlet_free(x->sym_in_on);
inlet_free(x->sig_one_in);
inlet_free(x->sig_two_in);
inlet_free(x->sig_tri_in);
inlet_free(x->sig_qud_in);
inlet_free(x->sig_fiv_in);
inlet_free(x->sig_six_in);
inlet_free(x->sig_sev_in);
outlet_free(x->sig_one_out);
outlet_free(x->sig_two_out);
outlet_free(x->sig_tri_out);
outlet_free(x->sig_qud_out);
outlet_free(x->sig_fiv_out);
outlet_free(x->sig_six_out);
outlet_free(x->sig_sev_out);
}
void simple_matrix_tilde_setup(void)
{
simple_matrix_tilde_class = class_new(
gensym("simple_matrix~"),
(t_newmethod)simple_matrix_tilde_new,
(t_method)simple_matrix_tilde_freedom,
sizeof(t_simple_matrix_tilde),
CLASS_DEFAULT,
0
);
class_addmethod(simple_matrix_tilde_class, (t_method)simple_matrix_tilde_oscin, gensym("oscin"), A_DEFSYMBOL, 0);
class_addmethod(simple_matrix_tilde_class, (t_method)simple_matrix_tilde_dsp, gensym("dsp"), A_CANT, 0);
CLASS_MAINSIGNALIN(simple_matrix_tilde_class, t_simple_matrix_tilde, some);
}
code responsible for sending data over network (miniosc is needed to compile https://github.com/cnlohr/miniosc/):
(also run the output as ./a.out <portnumber>)
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define MINIOSC_IMPLEMENTATION
#include "miniosc.h"
int main(int argc, char *argv[])
{
//argv[0] must !!
int port = atoi(argv[1]);
printf("on oprt %d!!\n", port);
miniosc * osc = minioscInit(7000, port, "127.0.0.1", 0);
int frame_n = 0;
int send_test = 1;
int neco[7][7];
memset(neco, 0, sizeof(neco));
neco[0][0] = 1;
//printf("%d\n", neco[2][2]);
char path[100];
char path_one[] = "/matrix/data";
snprintf(path, sizeof(path), "/matrix/r%d/c%d", 3, 5);
while(1)
{
//sleep(1);
for(int a = 0; a < 7; a++) //7 matrix size
{
for(int b = 0; b < 7; b++)
{
//matrix value, pos x, pos y
char send_mee[3];
send_mee[0] = neco[a][b] + '0'; //jupi
send_mee[1] = a + '0';
send_mee[2] = b + '0';
minioscSend(osc, path_one, ",s", send_mee);
}
}
//send_test++;
//frame_n++;
}
return 0;
}
testing_tesing.pd patch im testing this stuff on
Thanks !
Help with simple external - signal gating
Hi,
im trying to implement this simple object/class, that takes symbol in the first inlet and based on its value gates signal from nd inlet to outlet. The symbol comes from udp data stream, that is being parsed as OSC. Internally the incoming signal is multiplied by the symbol value (0 or 1). So in my understanding output should be silent or come through.
Buuut its not working as excpected... signal output is terribly noisy and "laggy" sounding. Sometimes the puredata even shows and "Audio error". Interestingly, when i stop the OSC transmission it goes to normal and sounds as expected.
Is my understanding of signal manipulation wrong? Or is the datastream lagging Pd?
Thanks much for advice!
simple_matrix~.c
//sudo ln /Applications/Pd-0.55-0.app/Contents/Resources/src/m_pd.h m_pd.h
//snad je to ok udelat takhle no
#include <m_pd.h>
#include <string.h>
#define MATRIX_SIZE 7
#define TRANSM_SIZE 3
static t_class *simple_matrix_tilde_class;
typedef struct _simple_matrix_tilde
{
t_object x_obj;
t_float m_state[MATRIX_SIZE][MATRIX_SIZE]; //stav peč desky
t_symbol transm_in;
t_inlet *sig_one_in, *sig_two_in, *sig_tri_in, *sig_qud_in, *sig_fiv_in, *sig_six_in, *sig_sev_in;
t_outlet *sig_one_out, *sig_two_out, *sig_tri_out, *sig_qud_out, *sig_fiv_out, *sig_six_out, *sig_sev_out;
} t_simple_matrix_tilde;
void simple_matrix_tilde_osc_recv(t_simple_matrix_tilde *x, t_symbol *s)
{
if(strlen(s->s_name) > TRANSM_SIZE)
{
//pd_error(&x->x_obj, ":(");
//sometimes the size is for some reason larger, maybe UDP? crazy guy
}
//post("lenght %d", strlen(s->s_name));
//post("value %s", s->s_name);
char recv[TRANSM_SIZE]; //snad to nevybouchne
memcpy(recv, s->s_name, TRANSM_SIZE);
int val = recv[0] - '0';
int posx = recv[1] - '0';
int posy = recv[2] - '0';
//post("val %d posx %d posy %d", val, posx, posy);
x->m_state[posx][posy] = (t_float)val;
}
t_int *simple_matrix_tilde_perform(t_int *w)
{
t_simple_matrix_tilde *x = (t_simple_matrix_tilde*)(w[1]);
t_sample *sig_in = (t_sample *)(w[2]);
t_sample *sig_out = (t_sample *)(w[3]);
int len = (int)(w[4]); //lenght of sample
for(int u = 0; u < len; u++)
{
t_sample timesby = x->m_state[0][0];
*sig_out++ = *(sig_in++) * timesby;
}
return (w+5);
}
void simple_matrix_tilde_dsp(t_simple_matrix_tilde *x, t_signal **sp)
{
dsp_add(simple_matrix_tilde_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
return;
}
void *simple_matrix_tilde_new(void)
{
t_simple_matrix_tilde *x = (t_simple_matrix_tilde *)pd_new(simple_matrix_tilde_class);
//wall,
//wall,
x->sig_one_in = inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
x->sig_one_out = outlet_new(&x->x_obj, &s_signal);
return (void *) x;
}
void simple_matrix_tilde_freedom(t_simple_matrix_tilde *x)
{
inlet_free(x->sig_one_in);
outlet_free(x->sig_one_out);
}
void simple_matrix_tilde_setup(void)
{
simple_matrix_tilde_class = class_new(
gensym("simple_matrix~"),
(t_newmethod)simple_matrix_tilde_new,
(t_method)simple_matrix_tilde_freedom,
sizeof(t_simple_matrix_tilde),
CLASS_DEFAULT,
0
);
class_addsymbol(simple_matrix_tilde_class, simple_matrix_tilde_osc_recv);
class_addmethod(simple_matrix_tilde_class, (t_method)simple_matrix_tilde_dsp, gensym("dsp"), A_CANT, 0);
}
The function simple_matrix_tilde_osc_recv just takes the input symbol and updates state of matrix connections, from which the gate of signal is later determined in perform function. The object should have 7 signal inlets and outlets in the future.
Also i understand, that this could be implemented as a subpatch, but it seemed like good first external, to learn the basics.
aand my Pd patch for testing:

(i just got into writing externls, so maybe my undertanding of basic Pd internal concepts is little off)
Help parsing continuous serial float stream from Arduino into Pure Data
@fishcrystals said:
//these magic functions let us send human readable info to pure data void fudiStart(){ Serial.write(108); //Fudi Serial.write(105); //Fudi Serial.write(115); //Fudi Serial.write(116); //Fudi Serial.write(32); //Fudi } void fudiEnd(){ Serial.write(59); //Fudi Serial.write(10); //Fudi }
Could be:
//these magic functions let us send human readable info to pure data
void fudiStart(){
Serial.print("list ");
}
void fudiEnd(){
Serial.print(" ;");
}
and become not-so-magic…
Help parsing continuous serial float stream from Arduino into Pure Data
cobbled together a solution a couple years ago that should work for you to get information in from analog reads -
the problem is arduino talks over serial so a number like "3.02" gets turned into a stream of ascii bytes. sometimes they show up as 0-255, other times as an ascii character (including invisible characters that were meant to control the movement of a teletypwriter). they could also be a pair of two hex symbols.. in any form theyre not human readable.
so in the arduino sketch I added functions that send the magic begin and end serial messages to use pure data's built in serial network encoder/decoder object so it should work across pd and clones versions from the last decade or so (newest vanilla is the safe bet) .. the only thing you need to have installed either bundled or using "find externals" is [comport]
heres code for the arduino to put above the setup()
//these magic functions let us send human readable info to pure data
void fudiStart(){
Serial.write(108); //Fudi
Serial.write(105); //Fudi
Serial.write(115); //Fudi
Serial.write(116); //Fudi
Serial.write(32); //Fudi
}
void fudiEnd(){
Serial.write(59); //Fudi
Serial.write(10); //Fudi
}
I also added a delay to read and send the information because if you push information too fast (faster than your monitors refresh rate) and send that to a UI like a slider or number box pure data will slog/stop responding.
unsigned long previousMillis = 0;
const long interval = 100; //10 hz (100 milliseconds) seems pretty low, 30hz is 34
now inside the loop{}
//instead of using Delay we will put reading input thats sent to Pure Data inside a timer
//this was so receiving back to arduino from pure data will happen as fast as possible
//later we could maybe use an interrupt
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Gather Input and send it to pure data
int sensorValue1 = analogRead(A0);
int sensorValue2 = analogRead(A1);
fudiStart();
Serial.print("A0 ");
Serial.print(sensorValue1);
fudiEnd();
fudiStart();
Serial.print("A1 ");
Serial.print(sensorValue2);
fudiEnd();
}
notice the serial.print("A0 "); - this is because its going to get filtered out in pure data, I circled the important part
the other stuff was an early attempt at sending info to the arduino which hasnt been worked out and debug stuff I used to figure out how fudi talks.
there's been other ways to do this (like by https://drymonitis.me/code/ ..
and
)so this was just what worked for me.. here's the sketch comPortFixin.pd AnalogReadSerial2PureDataFUDI.ino
How does Pd reinitialize blocks that have hardcoded sample rates like filters?
@oid said:
@inari said:
However what's not clear is how these different sample rates get into the filter blocks, which use x_sr for calculating their coefficients.
But they also use c_coef and c_x which take current sample rate into account because they are type _samplerate. From d_ugen.c:
/* ------------------------ samplerate~~ -------------------------- */ static t_class *samplerate_tilde_class; typedef struct _samplerate { t_object x_obj; t_float x_sr; t_canvas *x_canvas; } t_samplerate; static void samplerate_tilde_bang(t_samplerate *x) { outlet_float(x->x_obj.ob_outlet, canvas_getsr(x->x_canvas)); } static void *samplerate_tilde_new(void) { t_samplerate *x = (t_samplerate *)pd_new(samplerate_tilde_class); outlet_new(&x->x_obj, &s_float); x->x_canvas = canvas_getcurrent(); return (x); } static void samplerate_tilde_setup(void) { samplerate_tilde_class = class_new(gensym("samplerate~"), (t_newmethod)samplerate_tilde_new, 0, sizeof(t_samplerate), 0, 0); class_addbang(samplerate_tilde_class, samplerate_tilde_bang); } /* -------------------- setup routine -------------------------- */ void d_ugen_setup(void) { block_tilde_setup(); samplerate_tilde_setup(); }I think if you do the math it will work out but I could be missing something, OOP in C plus heavy pointer use plus math symbols thrown about with pointer symbols always leaves me a but unsure of what is going on if not completely lost.
The use of globals across multiple files in the PD source as well as the breaking of OOP principles by calling member functions of blocks that aren't used (looking at you osc~, vcf~ and cos~) amounts to a crime against humanity... A shame really. If you don't look at how the sausage is made, PD is a nifty little language, but the moment something breaks or needs to be extended, watch out...
How does Pd reinitialize blocks that have hardcoded sample rates like filters?
@inari said:
However what's not clear is how these different sample rates get into the filter blocks, which use x_sr for calculating their coefficients.
But they also use c_coef and c_x which take current sample rate into account because they are type _samplerate. From d_ugen.c:
/* ------------------------ samplerate~~ -------------------------- */
static t_class *samplerate_tilde_class;
typedef struct _samplerate
{
t_object x_obj;
t_float x_sr;
t_canvas *x_canvas;
} t_samplerate;
static void samplerate_tilde_bang(t_samplerate *x)
{
outlet_float(x->x_obj.ob_outlet, canvas_getsr(x->x_canvas));
}
static void *samplerate_tilde_new(void)
{
t_samplerate *x = (t_samplerate *)pd_new(samplerate_tilde_class);
outlet_new(&x->x_obj, &s_float);
x->x_canvas = canvas_getcurrent();
return (x);
}
static void samplerate_tilde_setup(void)
{
samplerate_tilde_class = class_new(gensym("samplerate~"),
(t_newmethod)samplerate_tilde_new, 0, sizeof(t_samplerate), 0, 0);
class_addbang(samplerate_tilde_class, samplerate_tilde_bang);
}
/* -------------------- setup routine -------------------------- */
void d_ugen_setup(void)
{
block_tilde_setup();
samplerate_tilde_setup();
}
I think if you do the math it will work out but I could be missing something, OOP in C plus heavy pointer use plus math symbols thrown about with pointer symbols always leaves me a but unsure of what is going on if not completely lost.
looking for velvet noise generator
As I was imagining, as a C code, this is all hassle free, very simple, and never misses a period. And the code is pretty simple. And Multichannel capable 

So far this is what I have....
// Porres 2024
#include "m_pd.h"
#include <stdlib.h>
#include "random.h"
#define MAXLEN 1024
typedef struct _velvet{
t_object x_obj;
double *x_phase;
double *x_lastphase;
t_random_state x_rstate;
int x_id;
t_float *x_rand;
int x_nchans;
t_float x_hz;
t_int x_n;
t_int x_ch2;
t_int x_ch3;
t_inlet *x_inlet_reg;
t_inlet *x_inlet_bias;
t_outlet *x_outlet;
double x_sr_rec;
}t_velvet;
static t_class *velvet_class;
static void velvet_seed(t_velvet *x, t_symbol *s, int ac, t_atom *av){
random_init(&x->x_rstate, get_seed(s, ac, av, x->x_id));
}
static t_int *velvet_perform(t_int *w){
t_velvet *x = (t_velvet *)(w[1]);
t_float *in1 = (t_float *)(w[2]);
// t_float *in2 = (t_float *)(w[3]); // bias placeholder
// t_float *in3 = (t_float *)(w[4]); // regularity placeholder
t_float *out = (t_float *)(w[5]);
double phase = x->x_phase;
double lastphase = x->x_lastphase;
for(int j = 0; j < x->x_nchans; j++){
for(int i = 0, n = x->x_n; i < n; i++){
double hz = in1[jn + i];
double step = hz * x->x_sr_rec; // phase step
step = step > 1 ? 1 : step < 0 ? 0 : step; // clipped phase_step
out[jn + i] = ((phase[j] + x->x_rand[j]) >= 1.) && ((lastphase[j] + x->x_rand[j]) < 1.);
if(phase[j] >= 1.){
uint32_t *s1 = &x->x_rstate.s1;
uint32_t *s2 = &x->x_rstate.s2;
uint32_t *s3 = &x->x_rstate.s3;
x->x_rand[j] = (t_float)(random_frand(s1, s2, s3)) * 0.5 + 0.5;
post("phase = %f", phase[j]);
post("random = %f", x->x_rand[j]);
phase[j] -= 1; // wrapped phase
}
lastphase[j] = phase[j];
phase[j] += step;
}
}
x->x_phase = phase;
x->x_lastphase = lastphase;
return(w+6);
}
static void velvet_dsp(t_velvet *x, t_signal **sp){
x->x_n = sp[0]->s_n, x->x_sr_rec = 1.0 / (double)sp[0]->s_sr;
int chs = sp[0]->s_nchans;
x->x_ch2 = sp[1]->s_nchans, x->x_ch3 = sp[2]->s_nchans;
if(x->x_nchans != chs){
x->x_lastphase = (double *)resizebytes(x->x_lastphase,
x->x_nchans * sizeof(double), chs * sizeof(double));
x->x_phase = (double *)resizebytes(x->x_phase,
x->x_nchans * sizeof(double), chs * sizeof(double));
x->x_rand = (t_float )resizebytes(x->x_rand,
x->x_nchans * sizeof(t_float), chs * sizeof(t_float));
x->x_nchans = chs;
}
signal_setmultiout(&sp[3], x->x_nchans);
if((x->x_ch2 > 1 && x->x_ch2 != x->x_nchans)
|| (x->x_ch3 > 1 && x->x_ch3 != x->x_nchans)){
dsp_add_zero(sp[3]->s_vec, x->x_nchansx->x_n);
pd_error(x, "[velvet~]: channel sizes mismatch");
return;
}
dsp_add(velvet_perform, 5, x, sp[0]->s_vec,
sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec);
}
static void *velvet_free(t_velvet *x){
inlet_free(x->x_inlet_bias);
inlet_free(x->x_inlet_reg);
outlet_free(x->x_outlet);
freebytes(x->x_phase, x->x_nchans * sizeof(*x->x_phase));
freebytes(x->x_lastphase, x->x_nchans * sizeof(*x->x_lastphase));
freebytes(x->x_rand, x->x_nchans * sizeof(*x->x_rand));
return(void *)x;
}
static void *velvet_new(t_symbol *s, int ac, t_atom *av){
s = NULL;
t_velvet *x = (t_velvet *)pd_new(velvet_class);
x->x_id = random_get_id();
x->x_phase = (double *)getbytes(sizeof(*x->x_phase));
x->x_lastphase = (double *)getbytes(sizeof(*x->x_lastphase));
x->x_rand = (t_float *)getbytes(sizeof(*x->x_rand));
x->x_hz = x->x_phase[0] = x->x_lastphase[0] = x->x_rand[0] = 0;
velvet_seed(x, s, 0, NULL);
if(ac){
while(av->a_type == A_SYMBOL){
if(ac >= 2 && atom_getsymbol(av) == gensym("-seed")){
t_atom at[1];
SETFLOAT(at, atom_getfloat(av+1));
ac-=2, av+=2;
velvet_seed(x, s, 1, at);
}
else
goto errstate;
}
if(ac && av->a_type == A_FLOAT){
x->x_hz = av->a_w.w_float;
ac--, av++;
}
}
x->x_inlet_bias = inlet_new((t_object *)x, (t_pd *)x, &s_signal, &s_signal);
pd_float((t_pd *)x->x_inlet_bias, 0);
x->x_inlet_reg = inlet_new((t_object *)x, (t_pd *)x, &s_signal, &s_signal);
pd_float((t_pd *)x->x_inlet_reg, x->x_phase[0]);
x->x_outlet = outlet_new(&x->x_obj, &s_signal);
return(x);
errstate:
post("[velvet~]: improper args");
return(NULL);
}
void velvet_tilde_setup(void){
velvet_class = class_new(gensym("velvet~"), (t_newmethod)velvet_new, (t_method)velvet_free,
sizeof(t_velvet), CLASS_MULTICHANNEL, A_GIMME, 0);
CLASS_MAINSIGNALIN(velvet_class, t_velvet, x_hz);
class_addmethod(velvet_class, (t_method)velvet_dsp, gensym("dsp"), A_CANT, 0);
class_addmethod(velvet_class, (t_method)velvet_seed, gensym("seed"), A_GIMME, 0);
}
pd-else + libpd on iOS
Hi, I'm trying to use pd-else with libpd on ios.
I'm makeing pd-else for PLATFORM=x86-64-apple-ios, copying over the output (objectsdir) to my bundle resources, building libpd with ADDITIONAL_LDFLAGS=-ldl, adding with the output to search path PdBase.add(toSearchPath: Bundle.main.resourcePath)
When I'm trying to open a patch which uses pd-else
Some attempts to find files are successful:
2024-04-16 21:14:27.771002+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.pd and succeeded
2024-04-16 21:14:27.771098+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.pd and succeeded
But most fails
2024-04-16 21:14:27.751266+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.darwin-amd64-32.so and failed
2024-04-16 21:14:27.751597+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.darwin-amd64-0.so and failed
2024-04-16 21:14:27.751739+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.darwin-fat-32.so and failed
2024-04-16 21:14:27.751876+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.darwin-fat-0.so and failed
2024-04-16 21:14:27.752090+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.d_amd64 and failed
2024-04-16 21:14:27.752374+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.d_fat and failed
2024-04-16 21:14:27.752664+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.pd_darwin and failed
2024-04-16 21:14:27.752902+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.darwin-amd64-32.so and failed
2024-04-16 21:14:27.753208+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.darwin-amd64-0.so and failed
2024-04-16 21:14:27.753470+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.darwin-fat-32.so and failed
2024-04-16 21:14:27.770480+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.darwin-fat-0.so and failed
2024-04-16 21:14:27.770636+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.d_amd64 and failed
2024-04-16 21:14:27.770790+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.d_fat and failed
2024-04-16 21:14:27.770900+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~/out~.pd_darwin and failed
2024-04-16 21:14:27.771002+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.pd and succeeded
2024-04-16 21:14:27.771098+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/out~.pd and succeeded
2024-04-16 21:14:27.771192+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-amd64-32.so and failed
2024-04-16 21:14:27.771485+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-amd64-0.so and failed
2024-04-16 21:14:27.771726+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-fat-32.so and failed
2024-04-16 21:14:27.771987+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-fat-0.so and failed
2024-04-16 21:14:27.772286+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.d_amd64 and failed
2024-04-16 21:14:27.772645+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.d_fat and failed
2024-04-16 21:14:27.773142+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pd_darwin and failed
2024-04-16 21:14:27.773783+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-amd64-32.so and failed
2024-04-16 21:14:27.774359+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-amd64-0.so and failed
2024-04-16 21:14:27.774935+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-fat-32.so and failed
2024-04-16 21:14:27.775535+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-fat-0.so and failed
2024-04-16 21:14:27.776348+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.d_amd64 and failed
2024-04-16 21:14:27.776992+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.d_fat and failed
2024-04-16 21:14:27.777360+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.pd_darwin and failed
2024-04-16 21:14:27.777810+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pd and failed
2024-04-16 21:14:27.778584+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pat and failed
2024-04-16 21:14:27.779417+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/else/lb.pd and failed
2024-04-16 21:14:27.780202+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-amd64-32.so and failed
2024-04-16 21:14:27.781051+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-amd64-0.so and failed
2024-04-16 21:14:27.781778+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-fat-32.so and failed
2024-04-16 21:14:27.782005+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-fat-0.so and failed
2024-04-16 21:14:27.782436+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.d_amd64 and failed
2024-04-16 21:14:27.782651+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.d_fat and failed
2024-04-16 21:14:27.788387+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pd_darwin and failed
2024-04-16 21:14:27.788947+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-amd64-32.so and failed
2024-04-16 21:14:27.789356+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-amd64-0.so and failed
2024-04-16 21:14:27.789586+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-fat-32.so and failed
2024-04-16 21:14:27.789874+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-fat-0.so and failed
2024-04-16 21:14:27.790175+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.d_amd64 and failed
2024-04-16 21:14:27.790421+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.d_fat and failed
2024-04-16 21:14:27.790769+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.pd_darwin and failed
2024-04-16 21:14:27.791501+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pd and failed
2024-04-16 21:14:27.792396+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pat and failed
2024-04-16 21:14:27.793014+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/else/lb.pd and failed
2024-04-16 21:14:27.793494+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-amd64-32.so and failed
2024-04-16 21:14:27.795343+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-amd64-0.so and failed
2024-04-16 21:14:27.795655+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-fat-32.so and failed
2024-04-16 21:14:27.796345+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.darwin-fat-0.so and failed
2024-04-16 21:14:27.797063+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.d_amd64 and failed
2024-04-16 21:14:27.797921+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.d_fat and failed
2024-04-16 21:14:27.798883+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb.pd_darwin and failed
2024-04-16 21:14:27.802219+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-amd64-32.so and failed
2024-04-16 21:14:27.802831+0300 YoganOme[72363:460962] Pd: verbose(4): tried /Users/anvlkv/Library/Developer/CoreSimulator/Devices/19822801-5565-453D-802D-5533CB03027B/data/Containers/Bundle/Application/B61B55C5-FEE9-4A99-964E-D45932D58CE1/YoganOme.app/else/else/lb/lb.darwin-amd64-0.so and failed
2024-04-16 21:14:27.803686+0300 YoganOme[72363:460962] Pd: verbose(0): else/lb
2024-04-16 21:14:27.804195+0300 YoganOme[72363:460962] Pd: error: ... couldn't create
And indeed there're no such files in the output, there're some with _darwin but not with specific architecture. Also there's no else/else subdirectory
Could anyone give a hint?

