#!/bin/sh BUILDDIR=build_stripped DESTDIR=codec2lite LIBSRC="codebook.c codebookd.c codebookge.c codebookjvm.c codebooknewamp1.c codebooknewamp1_energy.c codec2.c codec2_fft.c interp.c kiss_fft.c kiss_fftr.c lpc.c lsp.c mbest.c newamp1.c newamp2.c nlp.c pack.c phase.c postfilter.c quantise.c sine.c" LIBGENSRC="codebooklspmelvq.c codebookmel.c codebooknewamp2.c codebooknewamp2_energy.c" LIBINC="_kiss_fft_guts.h comp_prim.h lpc.h os.h bpf.h lsp.h phase.h bpfb.h defines.h machdep.h postfilter.h mbest.h quantise.h codec2_fft.h interp.h newamp1.h sine.h codec2_internal.h kiss_fft.h newamp2.h comp.h kiss_fftr.h nlp.h" LIBGENINC="version.h" EMPTYINC="c2wideband.h dump.h" rm -rf "${BUILDDIR}" "${DESTDIR}" mkdir "${BUILDDIR}" "${DESTDIR}" # copy LICENSE cp COPYING "${DESTDIR}"/ # copy static sources for file in ${LIBSRC} ${LIBINC}; do cp src/"${file}" "${DESTDIR}"/ done # fixup one include sed s:\:\"version.h\": src/codec2.h > "${DESTDIR}"/codec2.h cat > "${DESTDIR}"/debug_alloc.h <<'EOF' #define FREE free #define MALLOC malloc EOF for file in ${EMPTYINC}; do touch "${DESTDIR}"/"${file}" done cd ${BUILDDIR} cmake .. make tnewamp1 # copy generated files for file in ${LIBGENSRC}; do cp src/"${file}" ../"${DESTDIR}"/ done for file in ${LIBGENINC}; do cp codec2/"${file}" ../"${DESTDIR}"/ done cd .. rm -r "${BUILDDIR}" cat > "${DESTDIR}"/Makefile <<'EOF' CFLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -I. -lm CFLAGS += -DHORUS_L2_RX -DINTERLEAVER -DRUN_TIME_TABLES -DSCRAMBLER -Dcodec2_EXPORTS CFLAGS += -Wno-incompatible-pointer-types-discards-qualifiers LIBSRC=codebook.c codebookd.c codebookge.c codebookmel.c codebooklspmelvq.c codebookjvm.c \ codebooknewamp1.c codebooknewamp1_energy.c codebooknewamp2.c codebooknewamp2_energy.c \ codec2.c codec2_fft.c interp.c kiss_fft.c kiss_fftr.c lpc.c lsp.c mbest.c \ newamp1.c newamp2.c nlp.c pack.c phase.c postfilter.c quantise.c sine.c all: main main: main.c $(LIBSRC) clang $(CFLAGS) -o $@ $^ .PHONY: clean clean: rm -f main EOF cat > "${DESTDIR}"/main.c <<'EOF' #include #include #include "codec2.h" int main() { struct timespec tstart={0,0}, tend={0,0}; short input[976692]; FILE * recoded = fopen("count-recoded.raw", "w+"); FILE * f = fopen("count.raw", "r"); void * codec2 = codec2_create(CODEC2_MODE_700C); int nsam = codec2_samples_per_frame(codec2); int nbit = codec2_bits_per_frame(codec2); int off = 0; unsigned char bits[128]; fread(input, 976692, 1, f); fclose(f); clock_gettime(CLOCK_MONOTONIC, &tstart); while (off < 976692 / 2) { codec2_encode(codec2, bits, input + off); codec2_decode(codec2, input + off, bits); off += 320; } clock_gettime(CLOCK_MONOTONIC, &tend); printf("%lf\n", ((double)tend.tv_sec + 1.0e-9*tend.tv_nsec) - ((double)tstart.tv_sec + 1.0e-9*tstart.tv_nsec)); fwrite(input, 976692, 1, recoded); codec2_destroy(codec2); } EOF cat > ${DESTDIR}/README <<'EOF' This project is meant to generate a subset of the amazing codec2 library containing only the actual speech codec and having no further dependencies than a C99 compiler. The generate a stripped down version of codec2 that does not need CMake etc, just copy the stripdown.sh file to your codec2 directory and run it. This will generate the directory you see here. Codec 2 is an open source (LGPL 2.1) low bit rate speech codec: http://rowetel.com/codec2.html EOF