[alsa-devel] [PATCH] BAT: Change maximum number of channels from 2 to 64
Caleb Crome
caleb at crome.org
Fri Oct 23 00:05:24 CEST 2015
commit 23521f2e04df7ae39ccdbc7b4a9aa59220b56495
Author: Caleb Crome <ccrome at gmail.com>
Date: Tue Oct 20 20:57:57 2015 +0000
Change maximum number of channels from 2 to 64.
Added a round-robbin frequency assignment from the command line so that
if you specify -F 100:200:250 on the command line, then all subsequent
channels will get assigned frequencies like this first set. So by
specifying
-c 6 -F 100:200:250
the resulting frequencies for the 6 channels will be the same as if you
specified
-c 6 -F 100:200:250:100:200:250
diff --git a/bat/bat.c b/bat/bat.c
index 56cfaf6..57c9db8 100644
--- a/bat/bat.c
+++ b/bat/bat.c
@@ -72,16 +72,31 @@ err_exit:
static void get_sine_frequencies(struct bat *bat, char *freq)
{
- char *tmp1;
-
- tmp1 = strchr(freq, ':');
- if (tmp1 == NULL) {
- bat->target_freq[1] = bat->target_freq[0] = atof(optarg);
- } else {
- *tmp1 = '\0';
- bat->target_freq[0] = atof(optarg);
- bat->target_freq[1] = atof(tmp1 + 1);
+ char *tmp0, *tmp1;
+ int ncolons;
+ int nfreqs;
+ int i;
+
+ ncolons = 0;
+ tmp1 = freq;
+ while ((tmp1 = strchr(tmp1, ':'))) {
+ tmp1++;
+ ncolons ++;
}
+ nfreqs = ncolons+1;
+
+ tmp0 = freq;
+ tmp1 = strchr(tmp0, ':');
+ for (i = 0; i < MAX_CHANNELS && i < nfreqs; i++) {
+ if (i+1 < nfreqs)
+ *tmp1 = '\0';
+ bat->target_freq[i] = atof(tmp0);
+ tmp0 = tmp1+1;
+ if (i+1 < nfreqs)
+ tmp1 = strchr(tmp0, ':');
+ }
+ for (i = nfreqs; i < MAX_CHANNELS; i++)
+ bat->target_freq[i] = bat->target_freq[i % nfreqs];
}
static void get_format(struct bat *bat, char *optarg)
@@ -301,6 +316,7 @@ _("Usage: bat [-options]...\n"
static void set_defaults(struct bat *bat)
{
+ int i;
memset(bat, 0, sizeof(struct bat));
/* Set default values */
@@ -312,8 +328,9 @@ static void set_defaults(struct bat *bat)
bat->convert_float_to_sample = convert_float_to_int16;
bat->convert_sample_to_double = convert_int16_to_double;
bat->frames = bat->rate * 2;
- bat->target_freq[0] = 997.0;
- bat->target_freq[1] = 997.0;
+ for (i = 0; i < MAX_CHANNELS; i++) {
+ bat->target_freq[i] = 997.0;
+ }
bat->sigma_k = 3.0;
bat->playback.device = NULL;
bat->capture.device = NULL;
diff --git a/bat/common.h b/bat/common.h
index c04452d..6d5e46e 100644
--- a/bat/common.h
+++ b/bat/common.h
@@ -30,7 +30,7 @@
#define WAV_DATA COMPOSE('d', 'a', 't', 'a')
#define WAV_FORMAT_PCM 1 /* PCM WAVE file encoding */
-#define MAX_CHANNELS 2
+#define MAX_CHANNELS 64
#define MIN_CHANNELS 1
#define MAX_PEAKS 10
#define MAX_FRAMES (10 * 1024 * 1024)
More information about the Alsa-devel
mailing list