From 16a790a33d8cf233bc294063b03cb029bfc22162 Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Thu, 15 Apr 2021 10:57:36 +0200 Subject: [PATCH] Small, all zero files are replaced by *silence --- src/sfizz/FilePool.cpp | 1 - src/sfizz/Synth.cpp | 20 ++++++++++++++++++-- tests/SynthT.cpp | 17 +++++++++++++++++ tests/TestFiles/root_key_38.flac | Bin 8436 -> 12935 bytes tests/TestFiles/root_key_38.wav | Bin 90 -> 4572 bytes tests/TestFiles/root_key_62.flac | Bin 8436 -> 12935 bytes tests/TestFiles/root_key_62.wav | Bin 90 -> 4572 bytes tests/TestFiles/silence.wav | Bin 0 -> 4044 bytes 8 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 tests/TestFiles/silence.wav diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index 78783a0ca..6bd4e35ae 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -355,7 +355,6 @@ sfz::FileDataHolder sfz::FilePool::loadFile(const FileId& fileId) noexcept *fileInformation }); insertedPair.first->second.status = FileData::Status::Preloaded; - ASSERT(insertedPair.second); return { &insertedPair.first->second }; } } diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 2d7f2a92a..fc4ad988b 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -595,8 +595,24 @@ void Synth::Impl::finalizeSfzLoad() continue; } - region.hasWavetableSample = fileInformation->wavetable || - fileInformation->end < config::wavetableMaxFrames; + region.hasWavetableSample = fileInformation->wavetable.has_value(); + + if (fileInformation->end < config::wavetableMaxFrames) { + auto sample = resources_.filePool.loadFile(*region.sampleId); + bool allZeros = true; + int numChannels = sample->information.numChannels; + for (int i = 0; i < numChannels; ++i) { + allZeros &= allWithin(sample->preloadedData.getConstSpan(i), + -config::virtuallyZero, config::virtuallyZero); + } + + if (allZeros) { + region.sampleId.reset(new FileId("*silence")); + region.hasWavetableSample = false; + } else { + region.hasWavetableSample |= true; + } + } } if (!region.isOscillator()) { diff --git a/tests/SynthT.cpp b/tests/SynthT.cpp index abc9054a4..d9f6a2daa 100644 --- a/tests/SynthT.cpp +++ b/tests/SynthT.cpp @@ -1811,3 +1811,20 @@ TEST_CASE("[Keyswitches] Trigger from aftertouch extended CC") synth.renderBlock(buffer); REQUIRE(synth.getNumActiveVoices() == 2); } + +TEST_CASE("[Synth] Short empty files are turned into *silence") +{ + sfz::Synth synth; + std::vector messageList; + sfz::Client client(&messageList); + client.setReceiveCallback(&simpleMessageReceiver); + sfz::AudioBuffer buffer { 2, static_cast(synth.getSamplesPerBlock()) }; + synth.loadSfzString(fs::current_path() / "tests/TestFiles/aftertouch_trigger.sfz", R"( + sample=silence.wav + )"); + synth.dispatchMessage(client, 0, "/region0/sample", "", nullptr); + std::vector expected { + "/region0/sample,s : { *silence }", + }; + REQUIRE(messageList == expected); +} diff --git a/tests/TestFiles/root_key_38.flac b/tests/TestFiles/root_key_38.flac index d8eefb36ad9420da8054eb2edc8bac8162343d5e..d650d48d959ba15179b88f6df4e8a9d56281b559 100644 GIT binary patch delta 4665 zcmV-962|THL5F2PW=vs20000Y5C9MW01-C;5jP6NK=1$n2$sKyiS!fqV&-}<6@ex( zentZT01^NI000000000000000000PTk$Nd)P;zNzW=u&_R73y(07*_pPf1foR3rcZ08DRha6xrsX>@6CZe?Y1ASi5U zVsma}W@&6?Eio=IE;2YN07*kqL<|4`05UK#F)c7OEip9!00IC25OQf|W@B|_AOrva z00000k)J^aED-GUQ_(Zy zrN;xO$iGAUszZdzp|W}r2OB$*1b4I)3Sdu`e~t`pQ)=0{K@821AqhB!jhWuo$nDiUXdG{N-97BUU*T& z<&`=9x&NH|37ZBMSoi$hoQbh*Aah8{$^x`@P|(m2#pvfY9KU$jLS4>#?u4=nwDK5?xanDB!adSY`0kXv4AN zaA0?3eMT|WqRM~SAm1A!5QYh{Pd!Nw%Xncw{;Kug_0TxiC4563Q13#@?4`h;IkBH> z2eas@p7BD062a)kJd_dI$c(GgLl;lcEnw|4^C1>5&*CKc5e_u(v~r+$2VX!{N&WHW z9J$au80+u^)(^TfKN{O!VB#LN7t z4?v+g!B5O2HN`{*99r2#lw60(f@Li=JPbu)>$*eGZ#2@kjl+o<^zJ-Md$7pw>J>gNq`T~*GTxs z(r-BS#r?kqPAFISvIWBnLZ{(_S>);CLLf|VOzIYPLB6GV6uS4GxX;|9FH>a~F(XXx z4~7&z_E$|crk^h>AI8%IRFnsf#EhUjF!-R;=pTP1dhr><+X{l$on~I3P*T?k^NnD$dNhp_OA)7^NDw zQFaT{u&4ZW^u@atyUhK=-WJV^0S{&QuC`PxV_C>__3=q>wYnB)r6g2C`Ox{e0y4fh zEZGVzyC&ZjzJI1QQBc*52@v0|_X#UQL)U*hhhH<^e>)qefXqrb2i9RIn;R7JfY_WS zpx|3L(z*3W@LhCGFzmXrFvaB&n!eDm%T13iME2y~Eb}PTOtV$%>=`;#&iUO--X?lB znGPM>A;Py!8=GDUcOQqly6gZJlcI+|9WO1;(CSfCW99X&T_3tFLxQ)PE+k5+Ket`pU`4`zxXiOKgXl+r9vhDEoZMnL2f$6 zr$pRtvq&M`Augye-yE>BGfw^u*LQ!ZW)dr|CNS>nw5c?u7_+ahZJ{pO4o0j;TjXR? zR0j8}Uz;}J_)L+g-6YOtJ~1QTlBf)+)b_AJy$(qAX^$8(G1;@S1A&l-VG*6$;!i7s-{HkR>-UvUaN_YF)wYd6dU#SNSx{6cDGp+Ar z779ysM6kgC07(=vd$is zwG7j|3;RzVDTuqAG%g3!-1~p#x8W#aX7sT_DY|1O++I;Lz9#dt-w8Ji1UX0Djx~JC zC}P0$X+`+2A*`KYXz4{B{z@RMWKkUcbil%XqFVwH&s#B`{Bf9c@1wQKu&Wsj z$pZ!5&snq1$p4?*I?rJe7v0{)*Fg|B3>^s~B*-VACP3qj5aL81EMLOm<(}&U?k4J3 z#^gjT28!ME_SH4 zJfv+tKds#O^};mUBi6nzBOiY=`Tnf~RQe+5au$fjm8O>@a1lYN^rI#P${)&JIJmG@ z+zeK=i8yRz_C+j1KRnD?an;OaY0fMX@Gd4)5#WKwa`5&+6cv9zp(CL=B10?l80RvW zHHElE>;ElQ*IL|n(?au3u6fba(h^u6s653Q$A+gp`K>_QJId!*y7!yaKD1(T7kEZN zoj=oC3&|XhpN!h*J38_5q1CK1G|St91>s4s6SqEJJ7OYUoe!LaFaG@{L&XJTO5tTA z2c9D^VJ^6^0}Fp-((-huY8w9dW$C!@(onqd^#W=iA~V^c=>lotD@Lx@WSt{QCE83g zis0k7s?v(ZTDEFHi%#^hEnlbWldqoZuli>(0!nvEi@Ikt)YcOtJME66hAWL$SnC}N z(Z^Trr|*sk47G>Lx1k(LF#!?8H1U85u5KQN%@MQd)tr`VP@Q@9t@n80LQjyQ%B}+9K2hVLr2@DA^&Y(#p0D zQb(fftp4$3qL5>DruJ4}6(}c5zcA&`u~oE{531h@RYqhj)@YS9XJjj?UcrPQB+qR!X<@bhUZ*BP%e^^t9~k@bh0inY;%E$fz_J)jz{4*1(O%@L0L6 zw+YC$me;ewFe`Iljt^d5IO!lCTAU}%a;;^!3MuwK0q$T$OvQ&tCmep~_2`K!7Mf?l z;_!;WRqsCH*wuAkZ2!~~kh?R);tjSi`@Da#T|MdVzdgiC{kYw)RHxQaGI%qH0zwow z>7Y=aV<)aoQEk4U1wpJ@6h}^c=s68X=kQ`GF6I+534r-@Hc$XkNy=OFD+A#i(>xhM z9oC;q=4iRB8SOS|qv;l?OC(#jJG1Hgp{(hY(h%@XT|gja>=Gru%{5!}xX_&%_2Yk> zGGBDMgX6HwPC6!=B+>o4D!VpPPgecKfC8C2vAWvV-oHx1?I+du#2K9)v9ZISN!|zL zU}2*DKIq`_Aph3k?Gg$}>J+Bs#Y=fj1_oB3NjUHJ>dZCO8q7THa1&wi>=we*(ohu1 z`&s9ka?h#Jisv@U=QS)geyXnpYwO46yh{MH=#_s%%AO063Tf9fS^uEdCCDO%wK`C6uB@&h7nR6XvaqA4MC&n zog8mnX!kUzWg~j+w$jA3c+p}TU|ST~6+M(;Wx~UuqXUA;cTs{f>R6~solRw{aVWj` zQ!YDJY(~Qgec7M<%>aEjISYTBy^X$$M8()^_Eq`3%^Wq&(Cf$>UiH}bG62E~#0~$7 zv_z;&=7h!{H)};cTEQoBC7J!$nyI`3WVtv@E&sdaT{sM4`n2sQpSdnHyph)jT)4F! z7G@|>-Ht%n!FKpIPmT^;B)}k!?Kl}0;hwB!u#DoV&eN{kw2osu(IJ1UXbCSeME>m$ zRr(Gg=1juyUp;I5!Lm!Vk=HZYDibTfTu$uKghx`Q(M_DQvd7eEmGOy3J^h+b{Z})!p?G!HH1uxh28XP7XbRGwuN*n{j zH6nL1&rmDYrLy_S0JcFGzqucSL_+dWkf${$yQtyL_R8Q+3(sZ z9TC!1wu#vqCPx)(76>uWtTzabnk&oS$9%aMD3YNsV2Bw^uiAeuDL0UzUg3*2Z$~N- zOe`5C1JzWYpk1w{3S8mATwEG`}j3wMPil1U`E3%rlA|kboWBBAV|^STu>eX z_r;ghH_=-@VfcSZsDCn7>s&23(J-VWqra=hFS_PNMTRX+MC3$bDSV;cB);#ysa#c@ zO<}<2I0VR8s-V-5^jYRR3suZfMC%$lWe~~V;SJB&)NAW7;s>3)H{QV~F>DrLpB(gv z9-=BiO06zq8Fw+NRjun7U}Tx>B?<0b=7!1tAr8e4N}YcnxAj=XKUMlLBo^Aymo!S~ zPx&SPPh}YXrdmK9P{M>hgXK>`V+q34oW~6V$JFRjgIIzg+_n}IE=^CGP0W7WLB;aC z5~cn_H1rKXuf-ozmD!ua&g<08ct?N~!=;kOY4E=lx&dw;FtZ#yx(ZIEI`}Il&K}I) z6(@pGt|3{!Q`o0mE+H_d0ni9(Tr2MXNNc&1K{>B}nyK%ayK={TM!h$cFHQc6Q4|HF vqHbKdWH2wN6&c*+@Vx+MWdhzf4k0YXsB@``&dZ)O{`0WUzAD+w#;nWtPc+N2 delta 136 zcmZoq{o?45=9B2mz`&p+z#ssmcz}rOh{FdUlktdvy^yYYdd=L8E~g$^dZjTlFbDy~ zQ32yb2RRvI1tSAPO9Kl76Obem1A{_Ab5Mh1n=fsFs< T`4|}f|H$NEV2}lhD)0aRLg*TA diff --git a/tests/TestFiles/root_key_38.wav b/tests/TestFiles/root_key_38.wav index e7a27089c869484b53a1de2bf5911108f4c2f0ba..83dcb92c0fb3bbb50074a2734d18653e69bcc59e 100644 GIT binary patch delta 4539 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 diff --git a/tests/TestFiles/root_key_62.flac b/tests/TestFiles/root_key_62.flac index 10006b5812e4655388fcfe0d445c37bdc583b5ef..9fc639190946924ee738272f8c9e5bd31d29c30f 100644 GIT binary patch delta 4665 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 delta 136 zcmZoq{o?45=9B2mz`&p+z#ssmcz}rOh{FdUlktdvy^yYYdd=L8E~g$^dZjTlFbDy~ zQ32yb2RRvI1tSAPO9Kl76Obem1A{_Ab5Mh1n=fsFs< T`4|}f|H$NEV2}lhD)0aRLg*TA diff --git a/tests/TestFiles/root_key_62.wav b/tests/TestFiles/root_key_62.wav index 658d5bd4d6d4510e649e6061feb7258c926a0d23..51790923c00abf18decd44d8e7029f28bc8c53f2 100644 GIT binary patch delta 4539 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 diff --git a/tests/TestFiles/silence.wav b/tests/TestFiles/silence.wav new file mode 100644 index 0000000000000000000000000000000000000000..6218802a694c8125dfd8bb8bc9cddbefccb110ab GIT binary patch literal 4044 zcmZvfOKucF5JYSI0d{Z%u7U)X*s=h&NQfOf4#6=v0LS1`{M^*@BZ#UoZB2Jib$%iu zGpon1Uf$e%dpyRQXRlv;`1tARlQG6={yqOX#^<-EaWS5Z_wPQv`!a1jPUH7+J$@cn z^LonSydM9)9mmDEz5Dpw@7!y%pRsM6)t5|H6VD!xS4n)^KU$sU^s9N2mGP6lPgU2RnYG{nA~x$?Q1Dx&1|M0_#h>L-dlL)NO{ z9gyh}^>*LdcfGhlG#1TjlX~HgDworWHE@RqSL;G;jAWHiF$Xa@)KlJTMWRnF&Yyx| z%>GLy#q+;PC8yV9wCdn5ziObqa0wFq%4}yGdsdCoS|mOdT(xNz%96S>TiUbMi3mFt zPeiXigGnZ$vvAaN1c9osUVSou>38u&<;-Aq;8g*$7jJr|yXe~UpbJ-Urhm*ULKvab_4qMA zd7>&kg8_fFX&q95#PH1#3}z2zbw<4$s#m?wHOI3I;+3fS!LJ;-qZ`_P_SzMqv@bf9oO!nAvU89LUjMj`OW^dc~xAV-= zLWFR*9^a3La}F{CRaW)Y#$PCV?x>WiXYVox9p&CcoUn&YcB8(*>=OIy{N6pKt0)kT z>*SnwPNP|I`rCIyurNjOTC3?ihm}?`Pc=|=KN2%c6WK|{cGVS4oe%23vmD|{&Y#DF zx!*qcTb(gv?zk0KA5XcRP}k! z_jzYxRyL{b{{Bekr!FY%-j_ZMKdjq)*Tb$^>tRjOP4<|+vO+QHkXdd`$Yb_&ODyXj<%ps-sRApVCi2TaRz;fW@t1&D yqP%SPIGJ#Bs