From 0a2efad2cf0a4d43cf3384b68d1f7b761f407a90 Mon Sep 17 00:00:00 2001 From: Florent Berthaut <florent.berthaut@univ-lille.fr> Date: Tue, 18 Feb 2025 11:53:14 +0100 Subject: [PATCH] Update for reverberations --- demo/addons/gdpd/patches/gdpd.pd | Bin 2135 -> 2528 bytes demo/addons/gdpd/patches/gdpd_send.pd | Bin 146 -> 370 bytes patches/gdpd.pd | Bin 2135 -> 2528 bytes patches/gdpd_send.pd | Bin 146 -> 370 bytes src/gdpd.cpp | 69 ++++++++++++++++---------- src/gdpd.h | 17 ++++++- src/rtaudio/RtAudio.os | Bin 58992 -> 0 bytes 7 files changed, 58 insertions(+), 28 deletions(-) delete mode 100644 src/rtaudio/RtAudio.os diff --git a/demo/addons/gdpd/patches/gdpd.pd b/demo/addons/gdpd/patches/gdpd.pd index a0843bc7bb6e8f312ae3e9bb1a4e3cf9d447f2d2..99faa5f136e354096f96cd4225af423d24ee1f50 100644 GIT binary patch literal 2528 zcmY%PQ%FwCD@!a^urxDJFf}z+urxJOFflVzFf_8}QjSo_Ps&m-G%{8&GBZ}lOD!o% zO-{`$OI6S<RnSdBRbXhLkdvR7l9ZU2jw)ecp^#skT##5)oQfi0Y-p^IlUZD%P*Rkc ziz;Jmp-_}xT9T@eo>GtkmohUpRxq+O!L-KM$U?!)P@y0tIX|zYC_e|RBeytR0VH8; zu8>%iUaVjM76thSBx+#-u{$R<FTErKMas|&(*_d*Qw1XfBZU%$BoIWXH#AW&GB;Bw zuFOr!&ryg`F+@liStuA9m@5>g=A<T<C>SUhDj<T?$k<H5*u)r{K2T_z7?~*KmzLzD zmcWezS!7|UP^6Gnl%E@)o}ZGBBxhu-U~FNbP@<5ikciM>Zm9q=s2HjRIVeqxEEJ3| z?FWY$$R<lmaPXw&fxM((X=DiT7f2qg)yzyGIX^EC<gpkPLy!W5-^@+S6pTy^6^a!~ z@{t@0(rapBreJCYj#ZGsaHkqu7%3PUn_>hnNWHNUwoo!RH&?JUK=Uz3xrHH`ASgVI z&5WT5svxl>84=xJry81r{i;w<lv<FQmjZDeLLJE6Mn(!oMiyXYsd><p1QItlGF33L zuvAFNEQSUL+)JkBpinRZCH=JgqTIw1baO!|(bU{R!Pvq~p(H&=!N@?tKp{1^prjIo zG*Hkr1j!g0DJZ8UgP?-40T{q(0|i9vfP4#zSWw1F%>zY@p@NaIrJj+Yfu50}p`H;m zUxQo^%1_3ImhhNFQwP!viB*tda|06vV^f4;LnCuN13d#hw8#hh$kY&2RuqE*6SbfK z$(k5rq-|qk69q$KGf4EqLl6|jrWOiC;AE6ikP;8d#&B6PGXqebN0LoRDT2$Io0uvX zS{j053>L9)Nsv}hprhm#Q;-`>Ajuv>2UyY!RZ^iCnmbEUD@qiM%nTF^Efri+OF(%d zu_(PXH#M)MSRpOHNCBLd6!H>tQxy{PQWP=^;4T51YXLPEUJOE$k^(5&ji9LwCT6H$ zpkQo_CTIi_L=!VsFi<c-6EjgTP%tt_6Ep>BMptR3V4z@urqEo$K*0=6%mP%dp}Wyi z!9W4s7DyU4MAL2vDisaUEiwdo($ErJt&xJEf-#0#BLyP`BlG|<1o_^`9GWlSVF&gq zy0IXy8lwB(&`iNl!4Sg}An$_mDL4Y*#)AB7fMzU6m4Y#Pa2bJO$_PUg<XVuEQH(V* z1~~!4Tw{=b(Vc4qj#>10FarA*J<N?v6$}+jFhoJYU}B6GVn(1~0M%otE(4_mLkwSl z0|&!gY=L78O4%5JV+@LROi@sf8KcJpC<}n{2a3ClL7{+Y05}xTT?<mCV2mDOpyZ{1 z5fjE1pt>79%#A@l0|haP8%#i6GeI{O6x<3%=xG<EOu+;_?V5nnxrrfKOn{Urn4r4> RB%ok|?l+Kt0w^@Cxd3j2l$HPh literal 2135 zcmY%PQ%FwCD@!a^urxDJFf}z+urxJOFflVzFf_8}QjSo_Ps&m-G%-^!GBZ`kOD!o% zO-{`$OI6S<RnSdBRbXVGkdvR7l9ZU2jw)ekppajjT##5)oQfi0Y-p;GlUZD%P*Rkc ziz;Jcpiq=wT9T@eo>GtkmohUpRxq+O!L-KM(m=t~T%jN(IX|zYC_e|RBeytR0VH8; ztdLlgUaVjM76thSBx+#*u{$R<FTErKMas|!(*_fBGX+CaONA1JBoKtFH!?9%Fto5x zD6Y&+%Fj`VQ89!|fow4}Fjgo|%}GrzQ7}+2R6qo&k*TGEv56@*eW1`bF)~xgFD=PQ zEkPJ(u3%(os8FPkR+OI`pPrwRkB|dt0a;g~kf@Ld*I{H}qyRFg7^($1D9sJb6ikd1 ziWExn<59xc#L`m1$iM*IVW7YS`PInK5FBo)c_6<kSQ;5ZJPeWtYc(=fNY2m81Nk^c z#So+b;b{wFBL$G7iov$ReE`yHYGS5fY6gyOkil?2n1I69*bpP!LF$c-&|L|NT#$?* zC@q3gRzXo}L26!#LNQW6g1l~SqJSD!AYB$9YmfsF9IR%h(4<(9SdxrLDCWi%3WkQz zL<F-26p{)Ebs&$Km?{_<LzJcFLDL{e+}y}i!N|f=AtkdI8eVWeo0*v_7#V^yO<I0Y zZej@}SP<rdy=iWtU~FNgP?DabU}T_RppcqdP*RCP8Yt)*f@BPh6qM7FK~O>201V)? zfdV4>K)y9Hfn>?lJW$LTDi|4C>KPdt=ouLr>KQ>x1d!`NInmhA5+2oP>Oh(y(GF5< zZeXHdY>H59Xk@Nupl6_mmO4y9J~A}~l`_SkI72OBK(Z#rCdj!08g2?8KN>-U7A9t> zV4z@ZiY90T5=0X-RxnU7K@&4kFi<eEL=!XxX*NR>G*d88us{<tS1?dOS7!mr{^)MB zR4`C5N7D?6FhfjHLj^;07a4*)35t7g%7OdbNWoCS&=}nWBLyP`BXo~~l!1H-Nd#~c zz+Oc+0OVCe3<JzSmSK1T<Xs~SQILO)(7gt7KPU!K`~Xs=V2mEHMxeMd!Vm?;7RV#0 zCYXR6W`O1iBNI?4U?dBWe?f+$ngH^!F?u+He5HU*)KI|~!!~d*peF?*3k9%R)G!An zHw8m<wICxEjL_4KF(}^AEi(ouZuGzbxfC-XjX^<XjGml8*##pejKQIRVJs+(W5f?g KKmla7H5ULQHz`&C diff --git a/demo/addons/gdpd/patches/gdpd_send.pd b/demo/addons/gdpd/patches/gdpd_send.pd index 61e18c7c8ea264bcef5e1d3525271bb6a4d40f0f..4bb09c4e684c9164cebcf772004c572872c4d9a4 100644 GIT binary patch literal 370 zcmY%PQ%FwCD@!a^urxDJFf}z+urxJOFflVzFf_8}QjSo_Ps&m-w@@%KQ^?HANiBhk z85<cZSePpmq$KC(l@#UYfF*K^(-lAxX2uGMMd`%~24GQ;5g<_$BZZv&#FV7OymYv@ zxrKtExrsutLP>sndP+e`JV+n1thu2=i9(`65?sv4%vizD#7rS4v$#Ydv7jI|F9k`? zNWswD4B5Dplp?Tna(-T3YI2E!fr5d8Db!&wF+&9d1v3Rh6m>=l1`38~>Wmc(6pYZs XOce|iOfbX@70l4Y%oGe1%t2xR$7f<i delta 96 zcmeywG>LJ7Wu&=<f}ydALa{<getddLL5ek(a)d&DQkH_bg@UDlLQZCJi9$h9YC&pV jib9NvAy_&&KQAvexkSN0!9c-C!2m_fNWnnC5F`cwS?e0H diff --git a/patches/gdpd.pd b/patches/gdpd.pd index a0843bc7bb6e8f312ae3e9bb1a4e3cf9d447f2d2..99faa5f136e354096f96cd4225af423d24ee1f50 100644 GIT binary patch literal 2528 zcmY%PQ%FwCD@!a^urxDJFf}z+urxJOFflVzFf_8}QjSo_Ps&m-G%{8&GBZ}lOD!o% zO-{`$OI6S<RnSdBRbXhLkdvR7l9ZU2jw)ecp^#skT##5)oQfi0Y-p^IlUZD%P*Rkc ziz;Jmp-_}xT9T@eo>GtkmohUpRxq+O!L-KM$U?!)P@y0tIX|zYC_e|RBeytR0VH8; zu8>%iUaVjM76thSBx+#-u{$R<FTErKMas|&(*_d*Qw1XfBZU%$BoIWXH#AW&GB;Bw zuFOr!&ryg`F+@liStuA9m@5>g=A<T<C>SUhDj<T?$k<H5*u)r{K2T_z7?~*KmzLzD zmcWezS!7|UP^6Gnl%E@)o}ZGBBxhu-U~FNbP@<5ikciM>Zm9q=s2HjRIVeqxEEJ3| z?FWY$$R<lmaPXw&fxM((X=DiT7f2qg)yzyGIX^EC<gpkPLy!W5-^@+S6pTy^6^a!~ z@{t@0(rapBreJCYj#ZGsaHkqu7%3PUn_>hnNWHNUwoo!RH&?JUK=Uz3xrHH`ASgVI z&5WT5svxl>84=xJry81r{i;w<lv<FQmjZDeLLJE6Mn(!oMiyXYsd><p1QItlGF33L zuvAFNEQSUL+)JkBpinRZCH=JgqTIw1baO!|(bU{R!Pvq~p(H&=!N@?tKp{1^prjIo zG*Hkr1j!g0DJZ8UgP?-40T{q(0|i9vfP4#zSWw1F%>zY@p@NaIrJj+Yfu50}p`H;m zUxQo^%1_3ImhhNFQwP!viB*tda|06vV^f4;LnCuN13d#hw8#hh$kY&2RuqE*6SbfK z$(k5rq-|qk69q$KGf4EqLl6|jrWOiC;AE6ikP;8d#&B6PGXqebN0LoRDT2$Io0uvX zS{j053>L9)Nsv}hprhm#Q;-`>Ajuv>2UyY!RZ^iCnmbEUD@qiM%nTF^Efri+OF(%d zu_(PXH#M)MSRpOHNCBLd6!H>tQxy{PQWP=^;4T51YXLPEUJOE$k^(5&ji9LwCT6H$ zpkQo_CTIi_L=!VsFi<c-6EjgTP%tt_6Ep>BMptR3V4z@urqEo$K*0=6%mP%dp}Wyi z!9W4s7DyU4MAL2vDisaUEiwdo($ErJt&xJEf-#0#BLyP`BlG|<1o_^`9GWlSVF&gq zy0IXy8lwB(&`iNl!4Sg}An$_mDL4Y*#)AB7fMzU6m4Y#Pa2bJO$_PUg<XVuEQH(V* z1~~!4Tw{=b(Vc4qj#>10FarA*J<N?v6$}+jFhoJYU}B6GVn(1~0M%otE(4_mLkwSl z0|&!gY=L78O4%5JV+@LROi@sf8KcJpC<}n{2a3ClL7{+Y05}xTT?<mCV2mDOpyZ{1 z5fjE1pt>79%#A@l0|haP8%#i6GeI{O6x<3%=xG<EOu+;_?V5nnxrrfKOn{Urn4r4> RB%ok|?l+Kt0w^@Cxd3j2l$HPh literal 2135 zcmY%PQ%FwCD@!a^urxDJFf}z+urxJOFflVzFf_8}QjSo_Ps&m-G%-^!GBZ`kOD!o% zO-{`$OI6S<RnSdBRbXVGkdvR7l9ZU2jw)ekppajjT##5)oQfi0Y-p;GlUZD%P*Rkc ziz;Jcpiq=wT9T@eo>GtkmohUpRxq+O!L-KM(m=t~T%jN(IX|zYC_e|RBeytR0VH8; ztdLlgUaVjM76thSBx+#*u{$R<FTErKMas|!(*_fBGX+CaONA1JBoKtFH!?9%Fto5x zD6Y&+%Fj`VQ89!|fow4}Fjgo|%}GrzQ7}+2R6qo&k*TGEv56@*eW1`bF)~xgFD=PQ zEkPJ(u3%(os8FPkR+OI`pPrwRkB|dt0a;g~kf@Ld*I{H}qyRFg7^($1D9sJb6ikd1 ziWExn<59xc#L`m1$iM*IVW7YS`PInK5FBo)c_6<kSQ;5ZJPeWtYc(=fNY2m81Nk^c z#So+b;b{wFBL$G7iov$ReE`yHYGS5fY6gyOkil?2n1I69*bpP!LF$c-&|L|NT#$?* zC@q3gRzXo}L26!#LNQW6g1l~SqJSD!AYB$9YmfsF9IR%h(4<(9SdxrLDCWi%3WkQz zL<F-26p{)Ebs&$Km?{_<LzJcFLDL{e+}y}i!N|f=AtkdI8eVWeo0*v_7#V^yO<I0Y zZej@}SP<rdy=iWtU~FNgP?DabU}T_RppcqdP*RCP8Yt)*f@BPh6qM7FK~O>201V)? zfdV4>K)y9Hfn>?lJW$LTDi|4C>KPdt=ouLr>KQ>x1d!`NInmhA5+2oP>Oh(y(GF5< zZeXHdY>H59Xk@Nupl6_mmO4y9J~A}~l`_SkI72OBK(Z#rCdj!08g2?8KN>-U7A9t> zV4z@ZiY90T5=0X-RxnU7K@&4kFi<eEL=!XxX*NR>G*d88us{<tS1?dOS7!mr{^)MB zR4`C5N7D?6FhfjHLj^;07a4*)35t7g%7OdbNWoCS&=}nWBLyP`BXo~~l!1H-Nd#~c zz+Oc+0OVCe3<JzSmSK1T<Xs~SQILO)(7gt7KPU!K`~Xs=V2mEHMxeMd!Vm?;7RV#0 zCYXR6W`O1iBNI?4U?dBWe?f+$ngH^!F?u+He5HU*)KI|~!!~d*peF?*3k9%R)G!An zHw8m<wICxEjL_4KF(}^AEi(ouZuGzbxfC-XjX^<XjGml8*##pejKQIRVJs+(W5f?g KKmla7H5ULQHz`&C diff --git a/patches/gdpd_send.pd b/patches/gdpd_send.pd index 61e18c7c8ea264bcef5e1d3525271bb6a4d40f0f..4bb09c4e684c9164cebcf772004c572872c4d9a4 100644 GIT binary patch literal 370 zcmY%PQ%FwCD@!a^urxDJFf}z+urxJOFflVzFf_8}QjSo_Ps&m-w@@%KQ^?HANiBhk z85<cZSePpmq$KC(l@#UYfF*K^(-lAxX2uGMMd`%~24GQ;5g<_$BZZv&#FV7OymYv@ zxrKtExrsutLP>sndP+e`JV+n1thu2=i9(`65?sv4%vizD#7rS4v$#Ydv7jI|F9k`? zNWswD4B5Dplp?Tna(-T3YI2E!fr5d8Db!&wF+&9d1v3Rh6m>=l1`38~>Wmc(6pYZs XOce|iOfbX@70l4Y%oGe1%t2xR$7f<i delta 96 zcmeywG>LJ7Wu&=<f}ydALa{<getddLL5ek(a)d&DQkH_bg@UDlLQZCJi9$h9YC&pV jib9NvAy_&&KQAvexkSN0!9c-C!2m_fNWnnC5F`cwS?e0H diff --git a/src/gdpd.cpp b/src/gdpd.cpp index ceef2ac..9b4e75e 100644 --- a/src/gdpd.cpp +++ b/src/gdpd.cpp @@ -63,6 +63,17 @@ void GdPd::_bind_methods() { ClassDB::bind_method(D_METHOD("get_pd_patch"), &GdPd::get_pd_patch); + ClassDB::bind_method(D_METHOD("set_addon_patches_folder", + "p_addon_patches_folder"), + &GdPd::set_addon_patches_folder); + ClassDB::bind_method(D_METHOD("get_addon_patches_folder"), + &GdPd::get_addon_patches_folder); + + ClassDB::bind_method(D_METHOD("set_application_name", + "p_application_name"), + &GdPd::set_application_name); + ClassDB::bind_method(D_METHOD("get_application_name"), + &GdPd::get_application_name); ClassDB::bind_method(D_METHOD("send"), &GdPd::send); @@ -75,6 +86,10 @@ void GdPd::_bind_methods() { "set_osc_address", "get_osc_address"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "pd_patch", PROPERTY_HINT_FILE), "set_pd_patch", "get_pd_patch"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "addon_patches_folder"), + "set_addon_patches_folder", "get_addon_patches_folder"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "application_name"), + "set_application_name", "get_application_name"); ADD_SIGNAL(MethodInfo("got_message", PropertyInfo(Variant::STRING, "address"), @@ -88,6 +103,8 @@ GdPd::GdPd() { m_rtDefaults=true; m_player=NULL; osc_address = String(MULTICAST_ADDRESS.c_str()); + addon_patches_folder = "res://addons/gdpd/patches"; + m_applicationNameStr = "patch"; } GdPd::~GdPd() {} @@ -95,7 +112,7 @@ GdPd::~GdPd() {} int GdPd::audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, - RtAudioStreamStatus status, void *userData){ + RtAudioStreamStatus status, void *userData) { GdPd* gdpd = static_cast<GdPd*>(userData); gdpd->processAudio(outputBuffer, inputBuffer, nBufferFrames); return 0; @@ -184,8 +201,8 @@ int GdPd::start() { //FIXME add local port in addition to multicast m_receiver = lo_server_new_multicast( MULTICAST_ADDRESS.c_str(), - std::to_string(RECEIVER_PORT).c_str(), - errorHandler); + std::to_string(RECEIVER_PORT).c_str(),NULL); + //errorHandler); /* m_receiver = lo_server_new_with_proto( std::to_string(RECEIVER_PORT).c_str(), @@ -342,13 +359,13 @@ void GdPd::send(String address, Array arguments) { } std::string addrStr(address.utf8().get_data()); - addrStr = std::string("/gdpd/patch/")+addrStr; + addrStr = std::string("/gdpd/")+m_applicationNameStr+"/"+addrStr; lo_send_message(m_destination, addrStr.c_str(), msg); } else { libpd_start_message(arguments.size()+2); libpd_add_symbol("gdpd"); - libpd_add_symbol("patch"); + libpd_add_symbol(m_applicationNameStr.c_str()); libpd_add_symbol(String(address).utf8().get_data()); for(int i=0; i<arguments.size(); ++i) { switch(arguments[i].get_type()) { @@ -372,10 +389,9 @@ void GdPd::_process(double delta) { if(!m_init) { return; } - if(mode==OSC) { if(m_receiver!=NULL) { - lo_server_recv_noblock(m_receiver, 1); + lo_server_recv_noblock(m_receiver, 10); } } else { @@ -410,22 +426,21 @@ void GdPd::processAudio(void *outputBuffer, void *inputBuffer, } bool GdPd::open_patch() { - std::string pdPatchStr; - std::string pdDirStr; //If opening from editor, just set the paths if(OS::get_singleton()->has_feature("editor")) { - print("Loading patch from editor"); String fullpath = ProjectSettings::get_singleton() ->globalize_path(pd_patch); - - String pat = fullpath.get_slice("/",fullpath.get_slice_count("/")-1); String dir = fullpath.trim_suffix(pat); - pdPatchStr = std::string(pat.utf8().get_data()); - pdDirStr = std::string(dir.utf8().get_data()); + m_pdPatchStr = std::string(pat.utf8().get_data()); + m_pdDirStr = std::string(dir.utf8().get_data()); + + print("Loading patch "+m_pdPatchStr + +" from editor at path " + +m_pdDirStr); } else { // Otherwise, copy the files to user folder @@ -435,9 +450,11 @@ bool GdPd::open_patch() { if(OS::get_singleton()->get_name() == "Android") { print("On Android, so start copying files to user folder"); - String packageName = "com.example.gdpd"; + String packageName = ProjectSettings::get_singleton() + ->globalize_path("user://").trim_suffix("/").rsplit("/")[2]; + + print(packageName.utf8().get_data()); - //FIXME get Android package name userPath = String("/sdcard/Android/data/") + packageName + String("/files/"); @@ -454,39 +471,38 @@ bool GdPd::open_patch() { //Recursively copy this folder from res to user directory recurseCopy("res://"+patchDir, userPath+patchDir); - //Also copy gdpd patches + //Also copy gdpd patches from patches folder std::vector<String> gdpdFiles{"gdpd.pd", "gdpd_send.pd", "gdpd_receive.pd"}; for(auto& f : gdpdFiles) { Ref<DirAccess> diracc = DirAccess::open("res://"); - diracc->copy("res://addons/gdpd/patches/"+f, + diracc->copy(addon_patches_folder+"/"+f, userPath+patchDir+"/"+f); } //Define new paths - pdPatchStr = std::string(patch.utf8().get_data()); - pdDirStr = std::string((userPath+patchDir).utf8().get_data()); + m_pdPatchStr = std::string(patch.utf8().get_data()); + m_pdDirStr = std::string((userPath+patchDir).utf8().get_data()); } - // Open the patch m_patchOpened=false; - pd::Patch p1 = m_pd.openPatch(pdPatchStr.c_str(), pdDirStr.c_str()); + pd::Patch p1 = m_pd.openPatch(m_pdPatchStr.c_str(), m_pdDirStr.c_str()); + /* if(!p1.isValid()) { - print("Could not open patch "+pdPatchStr); + print("Could not open patch "+m_pdPatchStr); return false; } else { - print("Opened patch "+pdPatchStr); + print("Opened patch "+m_pdPatchStr); m_patchOpened=true; std::string patchStr(pd_patch.utf8().get_data()); m_patchsMap[patchStr] = p1; - } + }*/ return true; } void GdPd::recurseCopy(String fromPath, String toPath) { - //Create the toPath folder DirAccess::make_dir_absolute(toPath); @@ -505,7 +521,6 @@ void GdPd::recurseCopy(String fromPath, String toPath) { String dirName = dirs[i]; recurseCopy(fromPath+"/"+dirName, toPath+"/"+dirName); } - } void GdPd::close_patch() { diff --git a/src/gdpd.h b/src/gdpd.h index 4d8b67e..74d278a 100644 --- a/src/gdpd.h +++ b/src/gdpd.h @@ -58,7 +58,6 @@ protected: lo_arg ** argv, int argc, lo_message msg, void *user_data) { GdPd* gdpd = (GdPd*)user_data; - std::cout<<"got osc message"<<std::endl; gdpd->handleOSC(path, types, argv, argc, msg); return 0; } @@ -97,6 +96,12 @@ private: String pd_patch; String pd_folder; bool m_patchOpened; + String addon_patches_folder; + std::string m_pdPatchStr; + std::string m_pdDirStr; + + String application_name; + std::string m_applicationNameStr; const int SENDER_PORT = 9211; const int RECEIVER_PORT = 9212; @@ -133,6 +138,16 @@ public: inline String get_pd_folder() const{return pd_folder;} inline void set_pd_patch(const String p_patch){pd_patch=p_patch;} inline String get_pd_patch() const{return pd_patch;} + inline void set_addon_patches_folder(const String p_addon_patches_folder){ + addon_patches_folder=p_addon_patches_folder; + } + inline String get_addon_patches_folder() const{return addon_patches_folder;} + + inline void set_application_name(const String p_application_name){ + application_name=p_application_name; + m_applicationNameStr = application_name.utf8().get_data(); + } + inline String get_application_name() const{return application_name;} inline void set_osc_address(const String p_osc_address) { osc_address = p_osc_address; diff --git a/src/rtaudio/RtAudio.os b/src/rtaudio/RtAudio.os deleted file mode 100644 index 1ec3e45a8b107c72164645ecd3c180df9bc90664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58992 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 -- GitLab