From 932d2ab1c55530f8d02ac74068d0cec8261cbb53 Mon Sep 17 00:00:00 2001 From: Baozhu Zuo Date: Sat, 30 Sep 2017 16:01:18 +0800 Subject: [PATCH] add some helper function --- ac108_plugin/ac108_help.c | 77 +++++++++++++++++++++ ac108_plugin/ac108_help.h | 11 +++ ac108_plugin/libasound_module_pcm_ac108.so | Bin 32668 -> 41116 bytes 3 files changed, 88 insertions(+) create mode 100644 ac108_plugin/ac108_help.c create mode 100644 ac108_plugin/ac108_help.h diff --git a/ac108_plugin/ac108_help.c b/ac108_plugin/ac108_help.c new file mode 100644 index 0000000..cb5fd81 --- /dev/null +++ b/ac108_plugin/ac108_help.c @@ -0,0 +1,77 @@ +#include "ac108_help.h" + +void generate_sine(const snd_pcm_channel_area_t *areas, + snd_pcm_uframes_t offset, + int count, double *_phase) +{ + snd_pcm_format_t format = SND_PCM_FORMAT_S32; /* sample format */ + unsigned int rate = 16000; /* stream rate */ + unsigned int channels = 4; /* count of channels */ + unsigned int buffer_time = 500000; /* ring buffer length in us */ + unsigned int period_time = 100000; /* period time in us */ + double freq = 160; /* sinusoidal wave frequency in Hz */ + int verbose = 0; /* verbose flag */ + int resample = 1; /* enable alsa-lib resampling */ + int period_event = 0; /* produce poll event after each period */ + + static double max_phase = 2. * M_PI; + double phase = *_phase; + double step = max_phase*freq/(double)rate; + unsigned char *samples[channels]; + int steps[channels]; + unsigned int chn; + int format_bits = snd_pcm_format_width(format); + unsigned int maxval = (1 << (format_bits - 1)) - 1; + int bps = format_bits / 8; /* bytes per sample */ + int phys_bps = snd_pcm_format_physical_width(format) / 8; + int big_endian = snd_pcm_format_big_endian(format) == 1; + int to_unsigned = snd_pcm_format_unsigned(format) == 1; + int is_float = (format == SND_PCM_FORMAT_FLOAT_LE || + format == SND_PCM_FORMAT_FLOAT_BE); + + /* verify and prepare the contents of areas */ + for (chn = 0; chn < channels; chn++) { + if ((areas[chn].first % 8) != 0) { + printf("areas[%i].first == %i, aborting...\n", chn, areas[chn].first); + exit(EXIT_FAILURE); + } + samples[chn] = /*(signed short *)*/(((unsigned char *)areas[chn].addr) + (areas[chn].first / 8)); + if ((areas[chn].step % 16) != 0) { + printf("areas[%i].step == %i, aborting...\n", chn, areas[chn].step); + exit(EXIT_FAILURE); + } + steps[chn] = areas[chn].step / 8; + samples[chn] += offset * steps[chn]; + } + /* fill the channel areas */ + while (count-- > 0) { + union { + float f; + int i; + } fval; + int res, i; + if (is_float) { + fval.f = sin(phase); + res = fval.i; + } else + res = sin(phase) * maxval; + if (to_unsigned) + res ^= 1U << (format_bits - 1); + for (chn = 0; chn < channels; chn++) { + /* Generate data in native endian format */ + if (big_endian) { + for (i = 0; i < bps; i++) + *(samples[chn] + phys_bps - 1 - i) = (res >> i * 8) & 0xff; + } else { + for (i = 0; i < bps; i++) + *(samples[chn] + i) = (res >> i * 8) & 0xff; + } + samples[chn] += steps[chn]; + } + phase += step; + if (phase >= max_phase) + phase -= max_phase; + } + *_phase = phase; +} + diff --git a/ac108_plugin/ac108_help.h b/ac108_plugin/ac108_help.h new file mode 100644 index 0000000..97adb84 --- /dev/null +++ b/ac108_plugin/ac108_help.h @@ -0,0 +1,11 @@ +#include +#include +#include +#include +#include +#include +#include + +void generate_sine(const snd_pcm_channel_area_t *areas, + snd_pcm_uframes_t offset, + int count, double *_phase); diff --git a/ac108_plugin/libasound_module_pcm_ac108.so b/ac108_plugin/libasound_module_pcm_ac108.so index 68ee4847015ae9a25e4d5e6fdab956a3dba9676e..fc527856cdf315d08b485edde2368407ca49f2cb 100755 GIT binary patch literal 41116 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