From a75f1f0cd51a02814555add5c6a12bee08fe9911 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Wed, 26 Jun 2019 21:31:50 -0700 Subject: [PATCH] fixed point resampling option --- components/codecs/component.mk | 1 + components/codecs/inc/resample16/resample16.h | 85 +++++++++ components/codecs/lib/libresample16.a | Bin 0 -> 199002 bytes components/codecs/lib/libsoxr.a | Bin 382728 -> 382708 bytes main/component.mk | 3 +- main/main.c | 17 +- main/process.c | 2 +- main/resample.c | 4 +- main/resample16.c | 163 ++++++++++++++++++ main/squeezelite.h | 6 +- main/vorbis.c | 2 +- 11 files changed, 272 insertions(+), 11 deletions(-) create mode 100644 components/codecs/inc/resample16/resample16.h create mode 100644 components/codecs/lib/libresample16.a create mode 100644 main/resample16.c diff --git a/components/codecs/component.mk b/components/codecs/component.mk index 19181656..9707fc8d 100644 --- a/components/codecs/component.mk +++ b/components/codecs/component.mk @@ -9,6 +9,7 @@ COMPONENT_ADD_LDFLAGS=-l$(COMPONENT_NAME) \ $(COMPONENT_PATH)/lib/libvorbisidec.a \ $(COMPONENT_PATH)/lib/libogg.a \ $(COMPONENT_PATH)/lib/libalac.a \ + $(COMPONENT_PATH)/lib/libresample16.a \ $(COMPONENT_PATH)/lib/libsoxr.a diff --git a/components/codecs/inc/resample16/resample16.h b/components/codecs/inc/resample16/resample16.h new file mode 100644 index 00000000..ddf3aced --- /dev/null +++ b/components/codecs/inc/resample16/resample16.h @@ -0,0 +1,85 @@ +/* + * FILE: resample16.h + * + * The configuration constants below govern + * the number of bits in the input sample and filter coefficients, the + * number of bits to the right of the binary-point for fixed-point math, etc. + * + */ + +/* Conversion constants */ +#define Nhc 8 +#define Na 7 +#define Np (Nhc+Na) +#define Npc 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 z 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≷!hRx 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 ^l$T#L02zBDUM@#hrpj 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 literal 0 HcmV?d00001 diff --git a/components/codecs/lib/libsoxr.a b/components/codecs/lib/libsoxr.a index 3e802732a43cfc2a85691ada0ebfc61adfe17094..377edc1805dee904ee5f03c715abb22a02195154 100644 GIT binary patch delta 16170 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 Ztk=5FqTVWRKAx}X)zt#`)WN8v{{vQtnHc~8 delta 16297 zcmZ{reOwh~+Q;X-DS5~sNilpuK%+AA1r-Ss4HcD)%!Mjjie0V9sI`5xsI*)&*OWFZ(&zU(=Xcflqh~%JoA3R-uKT+0IcH|h z%rG@?=uok-Lsh3%eFyX#G;qM;lz(^2b9_(yKmSfobo|x3Uh3(o^##Hm+^bi4I&2A? z8m{K%x4j+iPZ(2^Fve4o5#?%@hCH=hB7^i>a(Z<8n$lICJ-0@Sf*9|_9qRI7wZDVE zf5w0eciI!abkBJAhqt{Cd$zmt-tj(n-qL}N)6maxHf1_a$pFVm>+d*I-NEmAPkMUR z^r`oz4G7J1D#pz!&Kq{ByliG&&di<1XVw)?k8M>n^O~k><2SS(L=i}FTcEprV@~$cVbzDlvy(#Sqek`x(_Tz>-zf4J*p3>nR2g~g- z1yAm6S{`4p<3!f-wOz8Bww13~+O#|VwMDg|olO<-wZXcIx>x&@*SGv*+nbJ4RzCE> zp#`x&Cso{C5t|xx+MVT$*%s#=J!bg`kAr~=Vt)3Gc4i;gTih;b!I&3*yyU6+_@c_X zOi!MtG&S>zqSErBo9k}PEl%k;Ygp0Xy?Nsbi>LJ~&$+g4V1IvBM&IH<(SZ}_+xhr_ zFC2H|8Shx{r(T$-{(Q{i53(b`iIHK zTgu#g#rpdACRen$ceDyDOj{Fbxui|yOZCHd`093*N50a|$DPW-{L&n!lgDwYY7WKv zPR509M%#;jOD>J9W5ADr^RQ0AzXM<&*5~416POEg$me6toS(rLiPL&V;`BYiTw>BA z`~a9^ZHC7bSSRFcL1PA5?9ijH<8;BAoD1$Io(yg+o(kr|qU2OCi~bd?qD~dKyK26S z!=wY^=i=WUFmqY|eK5xl7viyGg-(L4P&4>E6*>#Ym=#I}TcH#%7fy)Bq171)wmNxW zpX!Xk@!B5woY15Y8dm6LFc%i$L2ZQ=f~`;m_Qm<#J{ z2j_tq^Jn4n=RU&D8Cf_%h_`~fi9ZH+6*q$~6nDPt_Z@H`*d~+-Zl|0vU>`UJ|Hgu? z&h6m1a1Orz`_QnR?g=nw#tu({Ia5yV5I8~n6ZkxFTO7n(m`{$!n)zM9HlbwjWcdf8 z^2x0+ez-$rRDjG$u+Sp&={RJ;^Whjvz@eOsHFGk+oyAv!xo|>co9L7%Pd*EA_Py@T zr~o+$k^?*h=9)=%-r)B~=2kNHBsdvs=In^de`BzF`YL}{_nuCHkMN7tG1WI@GIzxD z@sW7(h1`XF9&zK;o{2X1uQqDWMw$g|9U1$122M9T_0fNg zHBWcuH)1IItyuq^jQm{W?-A#L6Z=GbJ~&BS03I(M557LaA*T?HSqe-9-zzQxS7JLk z*x&Jats`TwUGSU5_2AdUd%$mr8^F88jo^>O`@o-y_k%z0i(QaKo6tCB#r|Q z5hs9$ixa_P#GSxbi<80Ei_^e!#p&Rm#67{em|%!A{WEsAA~d*_y%D%ooB^IL&II2p z&IZpH=YSs(=Yp4r^T5l+`QWF-1>iN}@i90B{!NWS1onz2g6CsWoZKTgc2<)yxgz-I z#UrUCujlVU@72prRgJS-A)RHkkGX~oxJ_R0&b1n<< zynVBHFxFGWZ3fq575L7-Xz+NQy)tnOl7l$Ga4DA0h9?KH^KmJa&w(#>7ti)}2rZ<- zSiIJIM$D7qdt#m}Pl$Q_*hwczUJs7diLnIb$Ts{0`BHeY4PPWb6`mZ-;B^|7`xxM- z8*rQl#1CU#A?7vXTV#A#)6kh591`y8d?G&so@|5tEI$jL9K;1bmveOzo&$ewAB=B- zE((+(K(;~`$3hW zwt<`FYvIY3e_DQfYkdD~SO>p;o9fVk9K<<_OE-G#AH0tkAkM~mkeK%xH;H*qQ6}d7 z!a_0kt!JY6`!M74=Z(ZJ{jl*y;-HxK2;Yj?xfOq3w3Gfx%zKAKp4s7f?~p0xeZdeh z`%Z}B&0^j!OyGS2J5R!TmYDYf=Gl3LJo$Su?-43^wnbmwBdini`u{~S^ZyaW9d&}` zZ9%m-#QTC>YVewWx0s#3j^aK%Nn$YG3v3eeUf{GC*Zhu$Cr{+?JQt@EX%o(8+ym=WF|X|}6LS(dWE47zNsz71HS)*d$-!Qc z$xWh1ecqeQCWp}AUCSZ`cyqEr%%6zeV%~)86Z1ypq?k7_a}Z-u{>+5L{5qZ`V{$E+ z1UZ-9Mx=cUP5`t%>rC-S6{&lGE>KH)o69C_;4Kl~W7?6fa`tsZ{5b3>kvp2#yt-{D>! z_s6%r4|=NHr`PzOZ9gjydvFeZOmK{*;k#XZ1ulLrcQ1d}oA0h&>tE|RTyy1f{_0T| zJ?#{ZE5)**&>T;&+%$pt?Gi^#;*_3MrEpEt-$5Xc44XqyBJZRo1_k&-&iJ_;H zveqr$;al@U%dnJ=<5Jq?Oer7L=LXNMS66JlrMq`Ty3;o$X;?~!LET3E<@xvrhvM1e zprL>AXZFdP)cc3My$_uz?ACB5e)O5O=Zz>hR$j3)Z{Csq6)_FR;v4$K|2*SroItSO zm1bqux8B!bU8~ym4^NqgAEp@Ry*3Ae8~i&0?(5(CgQ1zXEZK+WkjO=k%=l5h8`|Z0 z3jZ=8w=jN`XIOE&yrB@@;rY6}F=;!rJt{LwObnv0n)K-B9)4E^v z%O5>itSX2cKzy>ew5DV00G=%V4-^g=r<;yyoL$0Jh zesCN4uPq;^s>9%W;5pVLoJBAN2V;etVl*bAl>+fP4%)6*lMjHqiBE%Z5fS!*%K=#U zm?H+<9n7MafK}A#1-<}|b*=?Jh6M7FoJcO2hX}_H7h=N-#Si_x(79kMGzdIdg;wF1 z0)~t7_~OC|k*&_#V4Ki8V5{>TxWDS8gm8dbAs(z&h-`&MfvwPJuoe0XIG{pz=lx!X zCjhHMwmMIOtx7>yzKzDmh@?QQz*)m4#4`vNZW-AMy$QBLJHa-ge}mVk&Z7L^ z>r{cQ4mlSMj?tKp&mR|i;eq{E;x|vc0DQ4{GuQ^$2e$l}vABIvP8yg?4E~YZVa<&h z2=>WmfoOvIs_tei}6XYsXQE*zL_6TL0Ulkuw< zu7BNKQ2}xi0vvo1*d}4;4ekeIZY5(+gOjo5MBj|cf2$zs$zqjzW#_<cn-WD;rg)+eH#F^lWu)Q4YaE{~L zNJh>|_?yJ5!S{))!DZrg;PvA5;1@5)F3--J(AclQR`BQIT5#-;NX~ZfIpR8Sws;qK zh`1g+RlEm$r?>&UQrrlBO1v+G#vV2HgFg^Afm_4}!DqyW!53nyIq9R|p5o)+YsJmr zLh&i^JaG$nzSxPyMuWpQ$$m6mQXmH0b|?nG$Gh?hY#AAYt%n~b-UOZ`-U==e*Mh6W z+rdl3b>KSjF7R98`dFOuj;pZ;fs^6}aPqLoz>VNk@jh^Yct7|WaTB;qd=PxU_%L{r z_$c@#@p15hFo$rUq0ywkDezg?YHo20I9BYOjh`v8ADk(U0hfql!MBLxz&puaYzPkC zlk)4}|0`Y(J}-pRe|QH(BT>8+oGY#cj}&hQ&k)yvXNq@$tHt%;=fr!!jp7FIKgEq; z|M1ATp?zqyR%1UnL)-)&C_V_DBt8r-5g!FVB0dhT5;uci6`ulc7q@^9i=DQ31Th@n zKeyhG#t3{&{J3V|+&GgAUj;u~ycE1#ybQcjyb@e5UJc$Yt_GhHuLJ)gUJp(msZYHv zzW0I6>SSoFmQvUm?x}PZMW@?;3;epEJ!tW3>Xg z;Ah2o;P=G&;0AF4_$TpraErJQ+#Qo;&57W2aS?dDxCDH?xHN=D_LY$i4d8pkjo_EX z`@ps0{otcf{y$MZe(djcx{>k8J&tvTcm~#U$(S6+ssM-olEfrl;920ADBc{!ZLW$G zosM-<6!W6a`u30F2b9BWxJof|x05l6<~XO9^M)FyFr#q=kpXz^b&Gf?*3-moYrZHB zyqgo^J=OqTd|(TCK~kg(k%VA`?V;-(@`>a@wmNz48m&|ZNY1jsfp{zeks!d!SV{u~fq2GV1&)d3vl;^9~i6Z1arPBK27 zJoF_8aV^3n{HGT9{2+E(Hf%6^7*>D|;fG=UA|32+FyrCLmcLU26vC738F-`oM0m3K z&*Y2X$-$5YIIKVk0%YsZB3}wmwt?H|5^gFy+49@VPlG30e!Bb&c(VCWUj=3%K(_BS zTYe5a**aV&Uj|RMfx{2j@R81kC!4=b`4#YF^K&CUx~CLF+z4m{ZkZImy9CtLnI z@+I(O^Lyn>;mKC#Gx@3TpM|12{8xc#2#~FiHz)EH%z!6bp|o>G`9yfK4Sb7yCwOu&#OI+{?ouEb0kU;?NIngoZ2oci zba=82{EU20c(UccCf^&LY(Dgk0vQO9t)Pd5LG{4{uSxDJoMoeIoAfNUN9DL)IIZ2l|xIq+ng z&@uTkc(UdDu84dE^Wn+n&jE)YT2vswh7~$r9V+3;*5Ok5DtNN_%jB2BldaB3`DO5A z%fCr}<=Hs?*|5NE3amy4vK5*kUky*T{4#nkz80+S7xQttE9T?$SHyf&zC+Bz`13I1 z^Jn8HHd1km)i%O5@Hx8AkA)}Oz)A9P@MO!sKt2JUZ26bVC&H7>kG6*voe&t!fX)Zk zsY5b6**e@Ip9W7hKU+Q>o@{j%$oGUNTmCBfP;Ug-u)qrnWWbZH&@1wp@MOz>Up^b2 zZ2n*JIq+nw^R;{~JQ&yix&l6}Kpp~Q^KFJlzM6b^vK4ACUjR?G{9f|o;mPK+}@cZuv5JvgLm%KOa8Ch6Ro(P=Ns13Z0U#geP0RpU;7C__e{h zwU~c}N)o4Foh9ZUn1+gZ#N8a>Q26k>j}3ehhcN)z23{h66rOAYKP7)0o^1JllW&G6 zTmDY@Q}AT-?~lOu&w*PIc%K0se*aPj=N#<4Q5{am`{Bt}=(KzcJlX2B(F3bkc(UcE z$j5~cV8a5v6i9$4TcIrZM0m30kCX2NPd0y(d@?-Q>f9!u22T!IhjInd5g?miB;OOB zY=u_H_l751{)_S%@MQDb;`SL~ZWXmt4$5C?=);EUK z;NM*D6!UMci^TkU>SJOaHZ@WFAsIXGRt!M4fxnTjg(usY<{4896Z_TgsxB^0Rggg zm>{1BPc}bAz7ssz3Qdzwh9_J89D3~S0ghSyM1GXr@Kl;Ba=HC9#DE@(r zPhu(tAltyfF%drvo@@hmke>lhw)|B2S@5ZRXl)&`6qthm+58CkGI+8T8Ye#=o^1KI z$ydOW&EG9w2~Q5!;qh0lKotUH>##z8DLmQyTKQ%0WSh_y`IYcw%YRpXH9Xn;N8s@F ze>DPZSfS6nY z1Lf=B$(BD>eiuC1`~>-Wc(T3MP4)zP5|FFk0fW7o?tnU)@t&@e~MOeQpeh=$^ zi1|3aiHsey2}Q|49KKvyl*1QLg80Y!+^NqKCt;l!QiE@oB#V1sohr_P&md!fgBXBp z?>bIU4&P*XO1uE;55#q;AghG7vC8!4f>d{urw@5A!a}qttD0CEs z$W~~G{Bd})y~BDXJqEZ9>s!QpJ?369|48!GSf2lp#J^;`s{mhjX%zF7m=oeJu?``| zeEv10T#T1}oae}xTni>aws%-xlINQxWP646U3q^zzJE4s$7xU?1|7)u68yLH82Edv zkBJu*;7JD=1IHqt9K;K?T-qVVe7;VTD&}{eF6OH>eaXE3k3(lR>?6HgNqo=dD)DVt zmqhsrGWsT z0dLnp0b*~tlNtl5XU(t1&(91-CbjswdJ^0Xje!e%6^S0V>vCUrPqzCj+TQG9_m1Vh z9(ein%8wClM)(beOWh~Y_Ewd+ZSm%+r{4XJ;ff@W`{xx1H@Jg8L3=6MFS1?bK7w{2 WXO82Hay?J@QUl}h{{e>IZ2dpkD%JV` diff --git a/main/component.mk b/main/component.mk index 8ea865c5..54594f7b 100644 --- a/main/component.mk +++ b/main/component.mk @@ -2,13 +2,14 @@ # "main" pseudo-component makefile. # # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) -CFLAGS += -O3 -DPOSIX -DLINKALL -DLOOPBACK -DNO_FAAD -DRESAMPLE -DEMBEDDED -DTREMOR_ONLY -DBYTES_PER_FRAME=4 \ +CFLAGS += -O3 -DPOSIX -DLINKALL -DLOOPBACK -DNO_FAAD -DRESAMPLE16 -DEMBEDDED -DTREMOR_ONLY -DBYTES_PER_FRAME=4 \ -I$(COMPONENT_PATH)/../components/codecs/inc \ -I$(COMPONENT_PATH)/../components/codecs/inc/mad \ -I$(COMPONENT_PATH)/../components/codecs/inc/alac \ -I$(COMPONENT_PATH)/../components/codecs/inc/helix-aac \ -I$(COMPONENT_PATH)/../components/codecs/inc/vorbis \ -I$(COMPONENT_PATH)/../components/codecs/inc/soxr \ + -I$(COMPONENT_PATH)/../components/codecs/inc/resample16 \ -I$(COMPONENT_PATH)/../components/platform_esp32 LDFLAGS += -s diff --git a/main/main.c b/main/main.c index 8ad3baf9..ac354ea5 100644 --- a/main/main.c +++ b/main/main.c @@ -111,6 +111,10 @@ static void usage(const char *argv0) { " \t\t\t stopband_start = number in percent (Aliasing/imaging control. > passband_end),\n" " \t\t\t phase_response = 0-100 (0 = minimum / 50 = linear / 100 = maximum)\n" #endif +#if RESAMPLE16 + " -R -u [params]\tResample, params = (i|m)[:i],\n" + " \t\t\t i = linear interpolation, m = 13 taps filter, i = interpolate filter coefficients\n" +#endif #if DSD #if ALSA " -D [delay][:format]\tOutput device supports DSD, delay = optional delay switching between PCM and DSD in ms\n" @@ -132,7 +136,7 @@ static void usage(const char *argv0) { #if LINUX || FREEBSD || SUN " -z \t\t\tDaemonize\n" #endif -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 " -Z \t\tReport rate to server in helo as the maximum sample rate we can support\n" #endif " -t \t\t\tLicense terms\n" @@ -183,6 +187,9 @@ static void usage(const char *argv0) { #if RESAMPLE " RESAMPLE" #endif +#if RESAMPLE16 + " RESAMPLE16" +#endif #endif #if FFMPEG " FFMPEG" @@ -339,7 +346,7 @@ int main(int argc, char **argv) { * only allow '-Z ' override of maxSampleRate * reported by client if built with the capability to resample! */ -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 "Z" #endif , opt) && optind < argc - 1) { @@ -349,7 +356,7 @@ int main(int argc, char **argv) { #if ALSA "LX" #endif -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 "uR" #endif #if DSD @@ -531,7 +538,7 @@ int main(int argc, char **argv) { exit(0); break; #endif -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 case 'u': case 'R': if (optind < argc && argv[optind] && argv[optind][0] != '-') { @@ -783,7 +790,7 @@ else if(strstr(output_device,"DAC")!=NULL || strstr(output_device,"dac")!=NULL){ decode_init(log_decode, include_codecs, exclude_codecs); -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 if (resample) { process_init(resample); } diff --git a/main/process.c b/main/process.c index 7c2cf94f..af3457d3 100644 --- a/main/process.c +++ b/main/process.c @@ -39,7 +39,7 @@ extern struct codec *codec; // macros to map to processing functions - currently only resample.c // this can be made more generic when multiple processing mechanisms get added -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 #define SAMPLES_FUNC resample_samples #define DRAIN_FUNC resample_drain #define NEWSTREAM_FUNC resample_newstream diff --git a/main/resample.c b/main/resample.c index d01b5e4d..5466321c 100644 --- a/main/resample.c +++ b/main/resample.c @@ -323,8 +323,8 @@ bool resample_init(char *opt) { r->scale = pow(10, -1.0 / 20); // override recipe derived values with user specified values r->q_precision = 0; - r->q_passband_end = 0; - r->q_stopband_begin = 0; + r->q_passband_end = 0.75; + r->q_stopband_begin = 1.25; if (recipe && recipe[0] != '\0') { if (strchr(recipe, 'v')) r->q_recipe = SOXR_VHQ; diff --git a/main/resample16.c b/main/resample16.c new file mode 100644 index 00000000..f86ac798 --- /dev/null +++ b/main/resample16.c @@ -0,0 +1,163 @@ +/* + * Squeezelite - lightweight headless squeezebox emulator + * + * (c) Adrian Smith 2012-2015, triode1@btinternet.com + * Ralph Irving 2015-2017, ralph_irving@hotmail.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +// upsampling using libsoxr - only included if RESAMPLE set + +#include "squeezelite.h" + +#if RESAMPLE16 + +#include + +extern log_level loglevel; + +struct resample16 { + struct resample16_s *resampler; + bool max_rate; + bool exception; + bool interp; + resample16_filter_e filter; +}; + +static struct resample16 r; + +void resample_samples(struct processstate *process) { + ssize_t odone; + + odone = resample16(r.resampler, (HWORD*) process->inbuf, process->in_frames, (HWORD*) process->outbuf); + + if (odone < 0) { + LOG_INFO("resample16 error"); + return; + } + + process->out_frames = odone; + process->total_in += process->in_frames; + process->total_out += odone; +} + +bool resample_drain(struct processstate *process) { + process->out_frames = 0; + + LOG_INFO("resample track complete"); + + resample16_delete(r.resampler); + r.resampler = NULL; + + return true; +} + +bool resample_newstream(struct processstate *process, unsigned raw_sample_rate, unsigned supported_rates[]) { + unsigned outrate = 0; + int i; + + if (r.exception) { + // find direct match - avoid resampling + for (i = 0; supported_rates[i]; i++) { + if (raw_sample_rate == supported_rates[i]) { + outrate = raw_sample_rate; + break; + } + } + // else find next highest sync sample rate + while (!outrate && i >= 0) { + if (supported_rates[i] > raw_sample_rate && supported_rates[i] % raw_sample_rate == 0) { + outrate = supported_rates[i]; + break; + } + i--; + } + } + + if (!outrate) { + if (r.max_rate) { + // resample to max rate for device + outrate = supported_rates[0]; + } else { + // resample to max sync sample rate + for (i = 0; supported_rates[i]; i++) { + if (supported_rates[i] % raw_sample_rate == 0 || raw_sample_rate % supported_rates[i] == 0) { + outrate = supported_rates[i]; + break; + } + } + } + if (!outrate) { + outrate = supported_rates[0]; + } + } + + process->in_sample_rate = raw_sample_rate; + process->out_sample_rate = outrate; + + if (r.resampler) { + resample16_delete(r.resampler); + r.resampler = NULL; + } + + if (raw_sample_rate != outrate) { + + LOG_INFO("resampling from %u -> %u", raw_sample_rate, outrate); + r.resampler = resample16_create((float) outrate / raw_sample_rate, RESAMPLE16_SMALL, false); + + return true; + + } else { + + LOG_INFO("disable resampling - rates match"); + return false; + } +} + +void resample_flush(void) { + if (r.resampler) { + resample16_delete(r.resampler); + r.resampler = NULL; + } +} + +bool resample_init(char *opt) { + char *filter = NULL, *interp = NULL; + + r.resampler = NULL; + r.max_rate = false; + r.exception = false; + + if (opt) { + filter = next_param(opt, ':'); + interp = next_param(NULL, ':'); + } + + if (filter) { + if (*filter == 'm') r.filter = RESAMPLE16_SMALL; + else r.filter = RESAMPLE16_FAST; + } + + if (interp && *interp == 'i') { + r.interp = true; + } + + LOG_INFO("Resampling with filter %d %s", r.filter, r.interp ? "(interpolated)" : ""); + + return true; +} + +#endif // #if RESAMPLE16 diff --git a/main/squeezelite.h b/main/squeezelite.h index a20fb306..59ced6e4 100644 --- a/main/squeezelite.h +++ b/main/squeezelite.h @@ -132,6 +132,10 @@ #undef RESAMPLE #define RESAMPLE 1 // resampling #define PROCESS 1 // any sample processing (only resampling at present) +#elif defined(RESAMPLE16) +#undef RESAMPLE16 +#define RESAMPLE16 1 +#define PROCESS 1 #else #define RESAMPLE 0 #define PROCESS 0 @@ -647,7 +651,7 @@ unsigned process_newstream(bool *direct, unsigned raw_sample_rate, unsigned supp void process_init(char *opt); #endif -#if RESAMPLE +#if RESAMPLE || RESAMPLE16 // resample.c void resample_samples(struct processstate *process); bool resample_drain(struct processstate *process); diff --git a/main/vorbis.c b/main/vorbis.c index 1326c441..0c35eb50 100644 --- a/main/vorbis.c +++ b/main/vorbis.c @@ -348,7 +348,7 @@ struct codec *register_vorbis(void) { static struct codec ret = { 'o', // id "ogg", // types - 2048, // min read + 4096, // min read 20480, // min space vorbis_open, // open vorbis_close, // close