From 55e3cf636669a28ffdfeb303e9052eba6f951bad Mon Sep 17 00:00:00 2001 From: drowe67 Date: Mon, 15 Nov 2010 00:58:23 +0000 Subject: [PATCH] added c2demo program git-svn-id: https://svn.code.sf.net/p/freetel/code@224 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2/src/Makefile.am | 12 ++++-- codec2/src/Makefile.in | 26 +++++++++---- codec2/src/c2demo.c | 86 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 11 deletions(-) create mode 100644 codec2/src/c2demo.c diff --git a/codec2/src/Makefile.am b/codec2/src/Makefile.am index 8451899d..6a937891 100644 --- a/codec2/src/Makefile.am +++ b/codec2/src/Makefile.am @@ -61,16 +61,20 @@ nlp.h \ postfilter.h \ sine.h -bin_PROGRAMS = c2dec c2enc c2sim +bin_PROGRAMS = c2demo c2enc c2dec c2sim -c2dec_SOURCES = c2dec.c -c2dec_LDADD = $(lib_LTLIBRARIES) -c2dec_LDFLAGS = $(LIBS) +c2demo_SOURCES = c2demo.c +c2demo_LDADD = $(lib_LTLIBRARIES) +c2demo_LDFLAGS = $(LIBS) c2enc_SOURCES = c2enc.c c2enc_LDADD = $(lib_LTLIBRARIES) c2enc_LDFLAGS = $(LIBS) +c2dec_SOURCES = c2dec.c +c2dec_LDADD = $(lib_LTLIBRARIES) +c2dec_LDFLAGS = $(LIBS) + c2sim_SOURCES = c2sim.c c2sim_LDADD = $(lib_LTLIBRARIES) c2sim_LDFLAGS = $(LIBS) diff --git a/codec2/src/Makefile.in b/codec2/src/Makefile.in index 13b95b55..b1d51071 100644 --- a/codec2/src/Makefile.in +++ b/codec2/src/Makefile.in @@ -39,7 +39,8 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = generate_codebook$(EXEEXT) -bin_PROGRAMS = c2dec$(EXEEXT) c2enc$(EXEEXT) c2sim$(EXEEXT) +bin_PROGRAMS = c2demo$(EXEEXT) c2enc$(EXEEXT) c2dec$(EXEEXT) \ + c2sim$(EXEEXT) subdir = src DIST_COMMON = $(library_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -74,6 +75,9 @@ am_c2dec_OBJECTS = c2dec.$(OBJEXT) c2dec_OBJECTS = $(am_c2dec_OBJECTS) am__DEPENDENCIES_1 = libcodec2.la c2dec_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_c2demo_OBJECTS = c2demo.$(OBJEXT) +c2demo_OBJECTS = $(am_c2demo_OBJECTS) +c2demo_DEPENDENCIES = $(am__DEPENDENCIES_1) am_c2enc_OBJECTS = c2enc.$(OBJEXT) c2enc_OBJECTS = $(am_c2enc_OBJECTS) c2enc_DEPENDENCIES = $(am__DEPENDENCIES_1) @@ -94,10 +98,11 @@ LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libcodec2_la_SOURCES) $(c2dec_SOURCES) $(c2enc_SOURCES) \ - $(c2sim_SOURCES) generate_codebook.c -DIST_SOURCES = $(libcodec2_la_SOURCES) $(c2dec_SOURCES) \ +SOURCES = $(libcodec2_la_SOURCES) $(c2dec_SOURCES) $(c2demo_SOURCES) \ $(c2enc_SOURCES) $(c2sim_SOURCES) generate_codebook.c +DIST_SOURCES = $(libcodec2_la_SOURCES) $(c2dec_SOURCES) \ + $(c2demo_SOURCES) $(c2enc_SOURCES) $(c2sim_SOURCES) \ + generate_codebook.c library_includeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(library_include_HEADERS) ETAGS = etags @@ -256,12 +261,15 @@ nlp.h \ postfilter.h \ sine.h -c2dec_SOURCES = c2dec.c -c2dec_LDADD = $(lib_LTLIBRARIES) -c2dec_LDFLAGS = $(LIBS) +c2demo_SOURCES = c2demo.c +c2demo_LDADD = $(lib_LTLIBRARIES) +c2demo_LDFLAGS = $(LIBS) c2enc_SOURCES = c2enc.c c2enc_LDADD = $(lib_LTLIBRARIES) c2enc_LDFLAGS = $(LIBS) +c2dec_SOURCES = c2dec.c +c2dec_LDADD = $(lib_LTLIBRARIES) +c2dec_LDFLAGS = $(LIBS) c2sim_SOURCES = c2sim.c c2sim_LDADD = $(lib_LTLIBRARIES) c2sim_LDFLAGS = $(LIBS) @@ -365,6 +373,9 @@ clean-noinstPROGRAMS: c2dec$(EXEEXT): $(c2dec_OBJECTS) $(c2dec_DEPENDENCIES) @rm -f c2dec$(EXEEXT) $(LINK) $(c2dec_LDFLAGS) $(c2dec_OBJECTS) $(c2dec_LDADD) $(LIBS) +c2demo$(EXEEXT): $(c2demo_OBJECTS) $(c2demo_DEPENDENCIES) + @rm -f c2demo$(EXEEXT) + $(LINK) $(c2demo_LDFLAGS) $(c2demo_OBJECTS) $(c2demo_LDADD) $(LIBS) c2enc$(EXEEXT): $(c2enc_OBJECTS) $(c2enc_DEPENDENCIES) @rm -f c2enc$(EXEEXT) $(LINK) $(c2enc_LDFLAGS) $(c2enc_OBJECTS) $(c2enc_LDADD) $(LIBS) @@ -382,6 +393,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c2dec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c2demo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c2enc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c2sim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_codebook.Po@am__quote@ diff --git a/codec2/src/c2demo.c b/codec2/src/c2demo.c new file mode 100644 index 00000000..efa8d644 --- /dev/null +++ b/codec2/src/c2demo.c @@ -0,0 +1,86 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2demo.c + AUTHOR......: David Rowe + DATE CREATED: 15/11/2010 + + Encodes and decodes a file of raw speech samples using Codec 2. + Demonstrates use of Codec 2 function API. + + Note to convert a wave file to raw and vice-versa: + + $ sox file.wav -r 8000 -s -2 file.raw + $ sox -r 8000 -s -2 file.raw file.wav + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. 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 Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" + +#include +#include +#include +#include + +#define BITS_SIZE ((CODEC2_BITS_PER_FRAME + 7) / 8) + +int main(int argc, char *argv[]) +{ + void *codec2; + FILE *fin; + FILE *fout; + short buf[CODEC2_SAMPLES_PER_FRAME]; + unsigned char bits[BITS_SIZE]; + + if (argc != 3) { + printf("usage: %s InputRawSpeechFile OutputRawSpeechFile\n", argv[0]); + exit(1); + } + + if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + /* Note only one set of Codec 2 states is required for an encoder + and decoder pair. */ + + codec2 = codec2_create(); + + while(fread(buf, sizeof(short), CODEC2_SAMPLES_PER_FRAME, fin) == + CODEC2_SAMPLES_PER_FRAME) { + codec2_encode(codec2, bits, buf); + codec2_decode(codec2, buf, bits); + fwrite(buf, sizeof(short), CODEC2_SAMPLES_PER_FRAME, fout); + } + + codec2_destroy(codec2); + + fclose(fin); + fclose(fout); + + return 0; +} -- 2.25.1