WARNS?= 6
Z_STOPBAND ?= 100
#############
#
# -96 db stop
#
Z_PRESET_96_1 = 96:8
Z_PRESET_96_2 = 96:18
Z_PRESET_96_3 = 96:28:0.7687
Z_PRESET_96_4 = 96:38:0.8326
Z_PRESET_96_5 = 96:48:0.8692 #96:48:0.8691
Z_PRESET_96_6 = 96:58:0.8924
Z_PRESET_96_7 = 96:68:0.9088
Z_PRESET_96_8 = 96:78:0.9217
Z_PRESET_96_9 = 96:88:0.9305 #96:88:0.9304
Z_PRESET_96_10 = 96:98:0.9374
Z_PRESET_96_11 = 96:108:0.9433
Z_PRESET_96_12 = 96:118:0.9480 #96:118:0.9481
Z_PRESET_96_13 = 96:128:0.9521
Z_PRESET_96_14 = 96:138:0.9557
Z_PRESET_96_15 = 96:148:0.9587
Z_PRESET_96_16 = 96:158:0.9618
Z_PRESET_96_17 = 96:168:0.9639
Z_PRESET_96_18 = 96:178:0.9658
Z_PRESET_96_19 = 96:188:0.9676
Z_PRESET_96_20 = 96:198:0.9692
Z_PRESET_96_21 = 96:208:0.9706
Z_PRESETS_96_LOW = $(Z_PRESET_96_1) $(Z_PRESET_96_2)
Z_PRESETS_96_MEDIUM = $(Z_PRESET_96_3) $(Z_PRESET_96_4) \
$(Z_PRESET_96_5)
Z_PRESETS_96_HIGH = $(Z_PRESET_96_7) $(Z_PRESET_96_9) \
$(Z_PRESET_96_13) $(Z_PRESET_96_17)
#
# pow2 coeff table, -96 db stop
#
Z_PRESET_96_P2_1 = 96:8
Z_PRESET_96_P2_2 = 96:16
Z_PRESET_96_P2_3 = 96:32:0.8010
Z_PRESET_96_P2_4 = 96:64:0.9034 #96:64:0.9033
Z_PRESET_96_P2_5 = $(Z_PRESET_96_13)
Z_PRESETS_96_P2 = $(Z_PRESET_96_P2_1) \
$(Z_PRESET_96_P2_2) \
$(Z_PRESET_96_P2_3) \
$(Z_PRESET_96_P2_4) \
$(Z_PRESET_96_P2_5)
##############
#
# -100 db stop
#
Z_PRESET_100_1 = 100:8
Z_PRESET_100_2 = 100:18
Z_PRESET_100_3 = 100:28:0.7599 #100:28:0.7598
Z_PRESET_100_4 = 100:38:0.8260 #100:38:0.8259
Z_PRESET_100_5 = 100:48:0.8635
Z_PRESET_100_6 = 100:58:0.8877
Z_PRESET_100_7 = 100:68:0.9047
Z_PRESET_100_8 = 100:78:0.9180
Z_PRESET_100_9 = 100:88:0.9271
Z_PRESET_100_10 = 100:98:0.9346 #100:98:0.9345
Z_PRESET_100_11 = 100:108:0.9406
Z_PRESET_100_12 = 100:118:0.9456 #100:118:0.9455
Z_PRESET_100_13 = 100:128:0.9499
Z_PRESET_100_14 = 100:138:0.9536
Z_PRESET_100_15 = 100:148:0.9566
Z_PRESET_100_16 = 100:158:0.9598 #100:158:0.9599
Z_PRESET_100_17 = 100:168:0.9621
Z_PRESET_100_18 = 100:178:0.9640 #100:178:0.9641
Z_PRESET_100_19 = 100:188:0.9661
Z_PRESET_100_20 = 100:198:0.9675 #100:198:0.9676
Z_PRESET_100_21 = 100:208:0.9691
Z_PRESETS_100_LOW = $(Z_PRESET_100_1) $(Z_PRESET_100_2)
Z_PRESETS_100_MEDIUM = $(Z_PRESET_100_3) $(Z_PRESET_100_4) \
$(Z_PRESET_100_5)
Z_PRESETS_100_HIGH = $(Z_PRESET_100_7) $(Z_PRESET_100_9) \
$(Z_PRESET_100_13) $(Z_PRESET_100_17)
#
# pow2 coeff table, -100 db stop
#
Z_PRESET_100_P2_1 = 100:8
Z_PRESET_100_P2_2 = 100:16
Z_PRESET_100_P2_3 = 100:32:0.7929 #100:32:0.7927
Z_PRESET_100_P2_4 = 100:64:0.8990
Z_PRESET_100_P2_5 = $(Z_PRESET_100_13)
Z_PRESETS_100_P2 = $(Z_PRESET_100_P2_1) \
$(Z_PRESET_100_P2_2) \
$(Z_PRESET_100_P2_3) \
$(Z_PRESET_100_P2_4) \
$(Z_PRESET_100_P2_5)
Z_PRESETS_SPEEX_UP = kaiser:6:8:0.86 \
kaiser:6:16:0.88 \
kaiser:6:32:0.91 \
kaiser:8:48:0.917 \
kaiser:8:64:0.94 \
kaiser:10:80:0.94 \
kaiser:10:96:0.945 \
kaiser:10:128:0.95 \
kaiser:10:160:0.96 \
kaiser:12:192:0.968 \
kaiser:12:256:0.975
Z_PRESETS_SPEEX_DOWN = kaiser:6:8:0.83 \
kaiser:6:16:0.85 \
kaiser:6:32:0.882 \
kaiser:8:48:0.895 \
kaiser:8:64:0.921 \
kaiser:10:80:0.922 \
kaiser:10:96:0.940 \
kaiser:10:128:0.95 \
kaiser:10:160:0.96 \
kaiser:12:192:0.968 \
kaiser:12:256:0.975
# 4 4 8 16 16 32 32
Z_PRESETS_GRC3=
.if defined(Z_EMUL_GRC3_EXACT)
Z_EMUL_GRC3= true
Z_PRESETS_GRC3 += OVERSAMPLING_FACTOR:10
#Z_PRESETS_GRC3 += INTERPOLATOR:LINEAR
.endif
Z_PRESETS_GRC3 += 66:4:1.0 66:8:1.0 66:16:1.0 66:32:1.0
.if defined(Z_EMUL_SPEEX_DOWN)
Z_PRESETS_SPEEX = $(Z_PRESETS_SPEEX_DOWN)
.else
Z_PRESETS_SPEEX = $(Z_PRESETS_SPEEX_UP)
.endif
Z_PRESETS_SPEEX_16 = $(Z_PRESETS_SPEEX)
#Z_PRESETS_SPEEX_16 = 60:8:0.86 \
# 60:16:0.88 \
# 60:32:0.91 \
# 80:48:0.917 \
# 80:64:0.94 \
# 96:80:0.94 \
# 96:96:0.945 \
# 96:128:0.95 \
# 96:160:0.96 \
# 96:192:0.986 \
# 96:256:0.975
Z_PRESETS_RABBIT = 100.3:36 122:88 160:284
Z_PRESETS_RABBIT_16 = 96:36 116.769690927218:88 153.140578265204:284 #96:39 96:92 96:286
Z_PRESETS_SOX = 100:36 100:132 125:164 175:236 175:1164
Z_PRESETS_SOX_16 = $(Z_PRESETS_SOX)#96:45:0.80 96:75:0.875 96:149:0.94
Z_PRESETS_SOX_STEEP = OVERSAMPLING_FACTOR:8 $(Z_PRESETS_SOX)
.if defined(Z_EMUL_SPEEX) || defined(Z_EMUL_SPEEX_DOWN) || defined(Z_EMUL_SPEEX_UP)
.if defined(Z_16)
Z_PRESETS= $(Z_PRESETS_SPEEX_16)
.else
Z_PRESETS= $(Z_PRESETS_SPEEX)
.endif
.elif defined(Z_EMUL_RABBIT)
.if defined(Z_16)
Z_PRESETS= $(Z_PRESETS_RABBIT_16)
.else
Z_PRESETS= $(Z_PRESETS_RABBIT)
.endif
.elif defined(Z_EMUL_SOX)
.if defined(Z_16)
Z_PRESETS= $(Z_PRESETS_SOX_16)
.else
Z_PRESETS= $(Z_PRESETS_SOX)
.endif
.elif defined(Z_EMUL_SOX_STEEP)
Z_PRESETS= $(Z_PRESETS_SOX_STEEP)
.elif defined(Z_EMUL_GRC3)
Z_PRESETS= $(Z_PRESETS_GRC3)
.endif
#.if !defined(Z_PRESETS)
#.if defined(Z_NYQUIST_HOVER)
#Z_PRESETS += NYQUIST_HOVER:$(Z_NYQUIST_HOVER)
#.endif
#.if defined(Z_PRESETS_AUTO)
#.for l in 8 16 32 64 128
#Z_PRESETS += $(Z_STOPBAND):$(l)
#.endfor
#.else
#.if defined(Z_PRESETS_96) || (defined(Z_STOPBAND) && $(Z_STOPBAND) == 96)
#Z_PRESETS += $(Z_PRESETS_96_P2)
#.else
#Z_PRESETS += $(Z_PRESETS_100_P2)
#.endif
#.endif
#.endif
.if defined(Z_SPEEX) || defined(Z_SPEEX_FIXED)
PROG= speex-zresampler
.elif defined(Z_GRC3)
PROG= grc3-zresampler
.elif defined(Z_GRC3_OPENSOLARIS)
PROG= grc3-opensolaris-zresampler
.else
PROG= zresampler
.endif
AWK?= /usr/bin/awk
#RUBY?= /usr/local/bin/ruby
CFLAGS+= -DSND_MULTICHANNEL
.if defined(Z_COEFF_INTERP_QUADRATIC)
CFLAGS+= -DZ_COEFF_INTERP_QUADRATIC
.elif defined(Z_COEFF_INTERP_HERMITE)
CFLAGS+= -DZ_COEFF_INTERP_HERMITE
.elif defined(Z_COEFF_INTERP_BSPLINE_3)
CFLAGS+= -DZ_COEFF_INTERP_BSPLINE_3
.elif defined(Z_COEFF_INTERP_BSPLINE_5)
CFLAGS+= -DZ_COEFF_INTERP_BSPLINE_5
.elif defined(Z_COEFF_INTERP_BSPLINE)
CFLAGS+= -DZ_COEFF_INTERP_BSPLINE
.elif defined(Z_COEFF_INTERP_OPT32X)
CFLAGS+= -DZ_COEFF_INTERP_OPT32X
.elif defined(Z_COEFF_INTERP_OPT16X)
CFLAGS+= -DZ_COEFF_INTERP_OPT16X
.elif defined(Z_COEFF_INTERP_OPT8X)
CFLAGS+= -DZ_COEFF_INTERP_OPT8X
.elif defined(Z_COEFF_INTERP_OPT4X)
CFLAGS+= -DZ_COEFF_INTERP_OPT4X
.elif defined(Z_COEFF_INTERP_OPT2X)
CFLAGS+= -DZ_COEFF_INTERP_OPT2X
.elif defined(Z_COEFF_INTERP_LINEAR)
CFLAGS+= -DZ_COEFF_INTERP_LINEAR
.elif defined(Z_COEFF_INTERP_ZOH)
CFLAGS+= -DZ_COEFF_INTERP_ZOH
.endif
.if $(MACHINE_ARCH) == "i386"
CFLAGS+= -ansi -Werror -finline-limit=8000 -fno-common
.if !defined(WITH_GCC3)
CFLAGS+= -mno-align-long-strings
.endif
CFLAGS+= -mpreferred-stack-boundary=2
CFLAGS+= -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall
CFLAGS+= -Wredundant-decls -Wnested-externs -Wstrict-prototypes
CFLAGS+= -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual
.if !defined(WITH_GCC3)
CFLAGS+= -fformat-extensions
.endif
CFLAGS+= -std=c99
.elif $(MACHINE_ARCH) == "amd64"
CFLAGS+= -ansi -Werror -finline-limit=8000 -fno-common
CFLAGS+= -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone
CFLAGS+= -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow
CFLAGS+= -fno-asynchronous-unwind-tables -ffreestanding -Wall
CFLAGS+= -Wredundant-decls -Wnested-externs -Wstrict-prototypes
CFLAGS+= -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual
.if !defined(WITH_GCC3)
CFLAGS+= -fformat-extensions
.endif
CFLAGS+= -std=c99
.endif
.if defined(Z_HP)
CFLAGS+= -DSND_FEEDER_RATE_HP
.endif
.if !defined(Z_NO_64)
CFLAGS+= -DSND_PCM_64
.endif
.if defined(Z_DIAGNOSTIC)
CFLAGS+= -DSND_DIAGNOSTIC
.endif
.if defined(Z_STRESS_TEST)
CFLAGS+= -DZ_STRESS_TEST
.endif
.if defined(Z_CLIP_CHECK)
CFLAGS+= -DFEEDEQ_ERR_CLIP=1
.endif
.if !defined(Z_BASIC_MULTIFORMAT)
.if defined(Z_MULTIFORMAT)
CFLAGS+= -DSND_FEEDER_MULTIFORMAT
.else
CFLAGS+= -DSND_FEEDER_FULL_MULTIFORMAT
.endif
.endif
.if defined(Z_SCALE_UINT)
CFLAGS+= -DZ_SCALE_UINT
.endif
.if !defined(Z_NO_USE_ALPHADRIFT)
CFLAGS+= -DZ_USE_ALPHADRIFT
.endif
.if defined(Z_SYS)
.if defined(FEEDER_RATE_PRESETS)
Z_RATE_PRESETS?= $(FEEDER_RATE_PRESETS)
.endif
.if defined(FEEDER_EQ_PRESETS)
Z_EQ_PRESETS?= $(FEEDER_EQ_PRESETS)
.endif
.endif
.if defined(Z_TEST)
Z_RATE_PRESETS?= 100:8:0.86 100:32:0.92 100:128:0.98
.endif
.if !defined(Z_DEFAULT)
Z_RATE_PRESETS?= $(Z_PRESETS)
.endif
.if defined(Z_EQ_EXTREME)
Z_EQ_PRESETS?= 16000,0.25:62,0.25:-12,12,0.1:44100,48000,88200,96000,176400,192000
.else
Z_EQ_PRESETS?= 16000,0.25:62,0.25:-9,9,1.0:44100,48000,88200,96000,176400,192000
.endif
CLEANFILES+= feeder_rate_gen.h feeder_eq_gen.h snd_fxdiv_gen.h
#g711.h
.if defined(Z_SPEEX) || defined(Z_SPEEX_FIXED) || defined(Z_GRC3) || defined(Z_GRC3_OPENSOLARIS)
feeder_rate_gen.h:
touch $(.TARGET)
.else
feeder_rate_gen.h: feeder_rate_mkfilter.awk
$(AWK) -f feeder_rate_mkfilter.awk -- $(Z_RATE_PRESETS) > $(.TARGET)
.endif
feeder_eq_gen.h: feeder_eq_mkfilter.awk
$(AWK) -f feeder_eq_mkfilter.awk -- $(Z_EQ_PRESETS) > $(.TARGET)
snd_fxdiv_gen.h: snd_fxdiv_gen.awk
$(AWK) -f snd_fxdiv_gen.awk -- > $(.TARGET)
#g711.h: g711.rb
# $(RUBY) g711.rb > $(.TARGET)
showconfig:
@grep -B1 -A8 'ty =' feeder_rate_gen.h
feeder_main.o: feeder_compat.h feeder_format.c feeder_main.c \
feeder_rate.c feeder_stdio.c feeder_rate_gen.h g711.h \
oss_compat.h pcm.h waveutil.h intpcm.h feeder_matrix.c \
matrix.h feeder_volume.c feeder_eq.c feeder_eq_gen.h \
feeder_rate_multi.c feeder_rate_32.c \
feeder_rate_dynamic.c intpcm_simple.h \
intpcm_full.h version.h feeder_chain.c snd_fxdiv_gen.h \
feeder_rate_speex.c feeder_rate_grc3.c \
feeder_rate_grc3_opensolaris.c \
feeder_rate_16.c matrix_map.h
SRCS= feeder_main.c feeder_rate_gen.h g711.h oss_compat.h waveutil.c \
waveutil.h feeder_eq_gen.h snd_fxdiv_gen.h
.if defined(Z_32)
CFLAGS+= -DZ_32
.elif defined(Z_16)
CFLAGS+= -DZ_16
.elif defined(Z_DYNAMIC)
CFLAGS+= -DZ_DYNAMIC
.elif defined(Z_SPEEX) || defined(Z_SPEEX_FIXED)
.PATH: $(.CURDIR)/speex
CFLAGS+= -I$(.CURDIR) -DZ_SPEEX -DOUTSIDE_SPEEX -DRANDOM_PREFIX="speexfx"
.if defined(Z_SPEEX_FIXED)
CFLAGS+= -DFIXED_POINT
.else
CFLAGS+= -DFLOATING_POINT
.endif
SRCS+= resample.c
.elif defined(Z_GRC3)
CFLAGS+= -I$(.CURDIR)/grc3 -DZ_GRC3
.elif defined(Z_GRC3_OPENSOLARIS)
.PATH: $(.CURDIR)/grc3_opensolaris
CFLAGS+= -I$(.CURDIR)/grc3_opensolaris -DZ_GRC3_OPENSOLARIS
SRCS+= audio_grc3.c audio_fltdata.c
.endif
.if ${MACHINE_ARCH} == "i386"
SRCS+= quad.h qdivrem.c udivdi3.c
.endif
MAN1=
$(PROG)_remove:
rm -f $(PROG) feeder_main.o waveutil.o qdivrem.o udivdi3.o resampler.o
remake: $(PROG)_remove $(PROG)
remake_all: realclean $(PROG)
clean_all: clean
rm -f *.raw *.wav a.out *.s *.o a.out zresampler speex-zresampler grc3-zresampler grc3-opensolaris-zresampler
rm -f *.png
rm -rf html spectrogram
sine16.wav:
sox -t null -c 1 -r 96000 -s -2 /dev/null -t wavpcm $(.TARGET) \
synth 8 sine create 0+48000 vol -6dB
sine.wav:
sox -t null -c 1 -r 96000 -s -4 /dev/null -t wavpcm $(.TARGET) \
synth 8 sine create 0+48000 vol -6dB
sine48k.wav:
sox -t null -c 1 -r 48000 -s -4 /dev/null -t wavpcm $(.TARGET) \
synth 8 sine create 0+24000 vol -6dB
sine44k.wav:
sox -t null -c 1 -r 44100 -s -4 /dev/null -t wavpcm $(.TARGET) \
synth 8 sine create 0+22050 vol -6dB
sineclip.wav:
sox -t null -c 1 -r 44100 -s -4 /dev/null -t wavpcm sineclip.wav \
synth 8 sine create 0+22050
realclean: clean_all
html:
@mkdir -p html
@for x in Makefile *.awk *.[ch] *.sh ; do \
gvim -f +'TOhtml' +'w!' +'q!' +'q!' "$$x"; \
mv -f "$$x".html html/; \
done
IBegin.wav:
ruby -e 'STDOUT.write([1 << 14].pack("s")) ; \
STDOUT.write([0].pack("s") * 44099)' | \
sox -t raw -c 1 -s -2 -r 44100 - $(.TARGET)
IEnd.wav:
ruby -e 'STDOUT.write([0].pack("s") * 44099) ; \
STDOUT.write([1 << 14].pack("s"))' | \
sox -t raw -c 1 -s -2 -r 44100 - $(.TARGET)
IBoth.wav:
ruby -e 'STDOUT.write([1 << 14].pack("s")); \
STDOUT.write([0].pack("s") * 44098) ; \
STDOUT.write([1 << 14].pack("s"))' | \
sox -t raw -c 1 -s -2 -r 44100 - $(.TARGET)
I.wav:
ruby -e '1.upto(44100) do |i| \
STDOUT.write([(i % 2 != 0) ? 1 << 14 : 0].pack("s")) end' \
| sox -t raw -c 1 -s -2 -r 44100 - -t wavpcm $(.TARGET)
.if defined(Z_SPEEX) || defined(Z_SPEEX_FIXED)
LDADD+= -lm
.endif
.include <bsd.prog.mk>