added 48 to 8 kHz donw conversion to pa_rec.c
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 6 Jul 2012 03:00:17 +0000 (03:00 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 6 Jul 2012 03:00:17 +0000 (03:00 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@582 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/unittest/Makefile.am
codec2-dev/unittest/Makefile.in
codec2-dev/unittest/pa_rec.c

index 77d13f0115a0a3a46efbc83355a8c83b9fb44fbf..592442b25c97331f34e3de92d64703038cfda344 100644 (file)
@@ -68,7 +68,7 @@ tlspsens_SOURCES = tlspsens.c ../src/quantise.c ../src/lpc.c ../src/lsp.c ../src
 tlspsens_LDADD = $(lib_LTLIBRARIES) 
 tlspsens_LDFLAGS = $(LIBS)
 
-pa_rec_SOURCES = pa_rec.c
+pa_rec_SOURCES = pa_rec.c ../src/fdmdv.c ../src/kiss_fft.c
 pa_rec_LDADD = $(lib_LTLIBRARIES) -lportaudio
 pa_rec_LDFLAGS = $(LIBS)
 
index 5feb72b6d6bdcf4d33fda72f6659f21c2d416b98..242ae343f2cc45ba088a7a57c12053153bc421e4 100644 (file)
@@ -40,7 +40,8 @@ noinst_PROGRAMS = genres$(EXEEXT) genlsp$(EXEEXT) extract$(EXEEXT) \
        vqtrain$(EXEEXT) vqtrainjnd$(EXEEXT) tnlp$(EXEEXT) \
        tinterp$(EXEEXT) tquant$(EXEEXT) vq_train_jvm$(EXEEXT) \
        scalarlsptest$(EXEEXT) tfdmdv$(EXEEXT) t48_8$(EXEEXT) \
-       lspsync$(EXEEXT) create_interleaver$(EXEEXT) tlspsens$(EXEEXT)
+       lspsync$(EXEEXT) create_interleaver$(EXEEXT) tlspsens$(EXEEXT) \
+       pa_rec$(EXEEXT)
 subdir = unittest
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -73,6 +74,10 @@ am_lspsync_OBJECTS = lspsync.$(OBJEXT) quantise.$(OBJEXT) \
        pack.$(OBJEXT) $(am__objects_1)
 lspsync_OBJECTS = $(am_lspsync_OBJECTS)
 lspsync_DEPENDENCIES =
+am_pa_rec_OBJECTS = pa_rec.$(OBJEXT) fdmdv.$(OBJEXT) \
+       kiss_fft.$(OBJEXT)
+pa_rec_OBJECTS = $(am_pa_rec_OBJECTS)
+pa_rec_DEPENDENCIES =
 am_scalarlsptest_OBJECTS = scalarlsptest.$(OBJEXT) quantise.$(OBJEXT) \
        lpc.$(OBJEXT) lsp.$(OBJEXT) dump.$(OBJEXT) kiss_fft.$(OBJEXT) \
        $(am__objects_1)
@@ -129,16 +134,16 @@ LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 SOURCES = $(create_interleaver_SOURCES) $(extract_SOURCES) \
        $(genlsp_SOURCES) $(genres_SOURCES) $(lspsync_SOURCES) \
-       $(scalarlsptest_SOURCES) $(t48_8_SOURCES) $(tfdmdv_SOURCES) \
-       $(tinterp_SOURCES) $(tlspsens_SOURCES) $(tnlp_SOURCES) \
-       $(tquant_SOURCES) $(vq_train_jvm_SOURCES) $(vqtrain_SOURCES) \
-       $(vqtrainjnd_SOURCES)
+       $(pa_rec_SOURCES) $(scalarlsptest_SOURCES) $(t48_8_SOURCES) \
+       $(tfdmdv_SOURCES) $(tinterp_SOURCES) $(tlspsens_SOURCES) \
+       $(tnlp_SOURCES) $(tquant_SOURCES) $(vq_train_jvm_SOURCES) \
+       $(vqtrain_SOURCES) $(vqtrainjnd_SOURCES)
 DIST_SOURCES = $(create_interleaver_SOURCES) $(extract_SOURCES) \
        $(genlsp_SOURCES) $(genres_SOURCES) $(lspsync_SOURCES) \
-       $(scalarlsptest_SOURCES) $(t48_8_SOURCES) $(tfdmdv_SOURCES) \
-       $(tinterp_SOURCES) $(tlspsens_SOURCES) $(tnlp_SOURCES) \
-       $(tquant_SOURCES) $(vq_train_jvm_SOURCES) $(vqtrain_SOURCES) \
-       $(vqtrainjnd_SOURCES)
+       $(pa_rec_SOURCES) $(scalarlsptest_SOURCES) $(t48_8_SOURCES) \
+       $(tfdmdv_SOURCES) $(tinterp_SOURCES) $(tlspsens_SOURCES) \
+       $(tnlp_SOURCES) $(tquant_SOURCES) $(vq_train_jvm_SOURCES) \
+       $(vqtrain_SOURCES) $(vqtrainjnd_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -298,6 +303,9 @@ create_interleaver_LDFLAGS = $(LIBS)
 tlspsens_SOURCES = tlspsens.c ../src/quantise.c ../src/lpc.c ../src/lsp.c ../src/dump.c ../src/kiss_fft.c ../src/codec2.c ../src/sine.c ../src/nlp.c ../src/pack.c ../src/interp.c ../src/postfilter.c ../src/phase.c $(CODEBOOKS)
 tlspsens_LDADD = $(lib_LTLIBRARIES) 
 tlspsens_LDFLAGS = $(LIBS)
+pa_rec_SOURCES = pa_rec.c ../src/fdmdv.c ../src/kiss_fft.c
+pa_rec_LDADD = $(lib_LTLIBRARIES) -lportaudio
+pa_rec_LDFLAGS = $(LIBS)
 all: all-am
 
 .SUFFIXES:
@@ -353,6 +361,9 @@ genres$(EXEEXT): $(genres_OBJECTS) $(genres_DEPENDENCIES)
 lspsync$(EXEEXT): $(lspsync_OBJECTS) $(lspsync_DEPENDENCIES) 
        @rm -f lspsync$(EXEEXT)
        $(LINK) $(lspsync_LDFLAGS) $(lspsync_OBJECTS) $(lspsync_LDADD) $(LIBS)
+pa_rec$(EXEEXT): $(pa_rec_OBJECTS) $(pa_rec_DEPENDENCIES) 
+       @rm -f pa_rec$(EXEEXT)
+       $(LINK) $(pa_rec_LDFLAGS) $(pa_rec_OBJECTS) $(pa_rec_LDADD) $(LIBS)
 scalarlsptest$(EXEEXT): $(scalarlsptest_OBJECTS) $(scalarlsptest_DEPENDENCIES) 
        @rm -f scalarlsptest$(EXEEXT)
        $(LINK) $(scalarlsptest_LDFLAGS) $(scalarlsptest_OBJECTS) $(scalarlsptest_LDADD) $(LIBS)
@@ -411,6 +422,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lspsync.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/octave.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pa_rec.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phase.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postfilter.Po@am__quote@
index ad87aef894a35502185726ab762935edd24c2850..6ed22d87649a00c3fb9882e1ffcb0d68504087fa 100644 (file)
@@ -3,9 +3,10 @@
    David Rowe
    July 6 2012
 
-   Modified from paex_record.c Portaudio example 
+   Records at 48000 Hz from default sound device to a file.
 
-   Original author author Phil Burk  http://www.softsynth.com
+   Modified from paex_record.c Portaudio example. Original author
+   author Phil Burk http://www.softsynth.com
 
    To Build:
 
 #include <stdio.h>
 #include <stdlib.h>
 #include "portaudio.h"
+#include "fdmdv.h"
 
 #define SAMPLE_RATE       48000
-#define FRAMES_PER_BUFFER 512
-#define NUM_CHANNELS      2       /* I think most sound cards like stereo, we will
-                                    convert to mono as we sample */
+#define N8                160           /* processing buffer size at 8 kHz */
+#define N48               (N8*FDMDV_OS) /* processing buffer size at 48 kHz */
+#define NUM_CHANNELS      2             /* I think most sound cards like stereo, we will
+                                          convert to mono as we sample */
 #define SAMPLE_SILENCE    0
 
-typedef short SAMPLE;
-
 typedef struct {
     FILE               *fout;
     int                 framesLeft;
+    float               in48k[FDMDV_OS_TAPS + N48];
 } paTestData;
 
 
@@ -71,10 +73,11 @@ static int recordCallback( const void *inputBuffer, void *outputBuffer,
     paTestData *data = (paTestData*)userData;
     FILE       *fout = data->fout;
     int         framesToCopy;
-    int         i;
+    int         i, n8;
     int         finished;
-    short       buf[FRAMES_PER_BUFFER];
     short      *rptr = (short*)inputBuffer;
+    float       out8k[N8];
+    short       out8k_short[N8];
 
     (void) outputBuffer; /* Prevent unused variable warnings. */
     (void) timeInfo;
@@ -96,13 +99,24 @@ static int recordCallback( const void *inputBuffer, void *outputBuffer,
     /* just use left channel */
 
     for(i=0; i<framesToCopy; i++,rptr+=2)
-       buf[i] = *rptr; 
+       data->in48k[i+FDMDV_OS_TAPS] = *rptr; 
+
+    /* downsample and update filter memory */
+
+    fdmdv_48_to_8(out8k, &data->in48k[FDMDV_OS_TAPS], N8);
+    for(i=0; i<FDMDV_OS_TAPS; i++)
+       data->in48k[i] = data->in48k[i+framesToCopy];
 
-    /* note Portaudio doc doesn't rec making systems calls in this
-       callback but seems to work OK */
+    /* save 8k to disk  */
 
-    fwrite(buf, sizeof(short), framesToCopy, fout);
+    for(i=0; i<N8; i++)
+       out8k_short[i] = (short)out8k[i];
+
+    /* note Portaudio docs reccomends against making systems calls like
+       fwrite() in this callback but seems to work OK */
     
+    fwrite(out8k_short, sizeof(short), N8, fout);
+
     return finished;
 }
 
@@ -114,11 +128,6 @@ int main(int argc, char *argv[])
     PaError             err = paNoError;
     paTestData          data;
     int                 i;
-    int                 totalFrames;
-    int                 numSamples;
-    int                 numBytes;
-    SAMPLE              max, val;
-    double              average;
     int                 numSecs;
 
     if (argc != 3) {
@@ -135,6 +144,9 @@ int main(int argc, char *argv[])
     numSecs = atoi(argv[2]);
     data.framesLeft = numSecs * SAMPLE_RATE;
 
+    for(i=0; i<FDMDV_OS_TAPS; i++)
+       data.in48k[i] = 0.0;
+
     err = Pa_Initialize();
     if( err != paNoError ) goto done;
 
@@ -155,7 +167,7 @@ int main(int argc, char *argv[])
               &inputParameters,
               NULL,                  /* &outputParameters, */
               SAMPLE_RATE,
-              FRAMES_PER_BUFFER,
+              N48,
               paClipOff,      /* we won't output out of range samples so don't bother clipping them */
               recordCallback,
               &data );