[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