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
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)
$(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)
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:
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)
@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@
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;
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;
/* 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;
}
PaError err = paNoError;
paTestData data;
int i;
- int totalFrames;
- int numSamples;
- int numBytes;
- SAMPLE max, val;
- double average;
int numSecs;
if (argc != 3) {
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;
&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 );