summaryrefslogtreecommitdiff
path: root/bat
diff options
context:
space:
mode:
authorLu, Han <han.lu@intel.com>2016-06-09 03:42:48 +0800
committerTakashi Iwai <tiwai@suse.de>2016-06-08 15:14:06 +0200
commite1b7a5f3769803759c50d1b189160b9f9f03b36e (patch)
tree80b412cb66786387d60756c5480392e07a75b660 /bat
parente0c1c86a90ebefb681c01f5c9571f3157cab5c34 (diff)
downloadalsa-utils-e1b7a5f3769803759c50d1b189160b9f9f03b36e.tar.gz
alsabat: add a single channel sine wave generator
Add function generate_sine_wave_raw_mono(). It serves as a single channel sine wave generator, to provide data for calculation (e.g. for noise analysis). The function is similar to generate_sine_wave(), but a lite revision. It has no dependency on bat channels and target frequency, no malloc inside, no data conversion from float to integer samples, and supports one channel only. Signed-off-by: Lu, Han <han.lu@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'bat')
-rw-r--r--bat/bat-signal.h1
-rw-r--r--bat/signal.c18
2 files changed, 19 insertions, 0 deletions
diff --git a/bat/bat-signal.h b/bat/bat-signal.h
index a295517..3c314a5 100644
--- a/bat/bat-signal.h
+++ b/bat/bat-signal.h
@@ -28,3 +28,4 @@ int sin_generator_init(struct sin_generator *, float, float, float);
float sin_generator_next_sample(struct sin_generator *);
void sin_generator_vfill(struct sin_generator *, float *, int);
int generate_sine_wave(struct bat *, int, void *);
+int generate_sine_wave_raw_mono(struct bat *, float *, float, int);
diff --git a/bat/signal.c b/bat/signal.c
index 2047f53..c9b5c7b 100644
--- a/bat/signal.c
+++ b/bat/signal.c
@@ -183,3 +183,21 @@ exit:
return err;
}
+
+/* generate single channel sine waveform without sample conversion */
+int generate_sine_wave_raw_mono(struct bat *bat, float *buf,
+ float freq, int nsamples)
+{
+ int err = 0;
+ struct sin_generator sg;
+
+ err = sin_generator_init(&sg, 1.0, freq, bat->rate);
+ if (err < 0)
+ return err;
+ sin_generator_vfill(&sg, buf, nsamples);
+
+ /* adjust amplitude and offset of waveform */
+ err = adjust_waveform(bat, buf, nsamples, 1);
+
+ return err;
+}