[alsa-devel] [PATCH 3/4] alsabat: add a single channel sine wave generator

han.lu at intel.com han.lu at intel.com
Wed Jun 8 21:42:48 CEST 2016


From: "Lu, Han" <han.lu at intel.com>

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 at intel.com>

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;
+}
-- 
2.5.0



More information about the Alsa-devel mailing list