[PATCH] us428control support for mixxx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch allow to change the mapping of the us428, the new mapping is used with mixxx.
To use the new mapping:
./us428control -m mixxx

I already posted an older version on the bug tracker, but I had'nt have response for it.
thanks.

Signed-off-by: Cedric GESTES <goctaf@xxxxxxxxx>


diff -r 7f7a0bf510a4 us428control/Cus428Midi.h
--- a/us428control/Cus428Midi.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428Midi.h	Sat Sep 30 18:05:42 2006 +0200
@@ -87,14 +87,23 @@ class Cus428Midi {
 		return Err;
 	}
 
-	int SendMidiControl(char Param, char Val){
-		snd_seq_ev_set_controller(&Ev, 15, Param, Val & 0x7F);
+	int SendMidiControl(char Channel, char Param, char Val){
+		snd_seq_ev_set_controller(&Ev, Channel, Param, Val & 0x7F);
 		SubMitEvent();
 		return 0;
-	} 
+	}
 
-	int SendMidiControl(Cus428State::eKnobs K, bool Down){
-		return SendMidiControl(KnobParam[K - Cus428State::eK_RECORD], Down ? 0x7F : 0);
+	int SendMidiNote(char Channel, char Note, char Val){
+    if (!Val)
+      snd_seq_ev_set_noteoff(&Ev, Channel, Note, Val & 0x7F);
+    else
+      snd_seq_ev_set_noteon(&Ev, Channel, Note, Val & 0x7F);
+		SubMitEvent();
+		return 0;
+	}
+
+	int SendMidiControl(char Channel, Cus428State::eKnobs K, bool Down){
+		return SendMidiControl(Channel, KnobParam[K - Cus428State::eK_RECORD], Down ? 0x7F : 0);
 	}
 
 	// To parse and dispatch input MIDI events.
diff -r 7f7a0bf510a4 us428control/Cus428State.cc
--- a/us428control/Cus428State.cc	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428State.cc	Sat Sep 30 18:05:42 2006 +0200
@@ -46,7 +46,6 @@ void Cus428State::InitDevice(void)
 		SliderChangedTo(eFaderM, ((unsigned char*)(us428ctls_sharedmem->CtlSnapShot + us428ctls_sharedmem->CtlSnapShotLast))[eFaderM]);
 }
 
-
 int Cus428State::LightSend()
 {
 	int Next = us428ctls_sharedmem->p4outLast + 1;
@@ -57,6 +56,11 @@ int Cus428State::LightSend()
 	return us428ctls_sharedmem->p4outLast = Next;
 }
 
+void Cus428State::SliderSend(int S)
+{
+	Midi.SendMidiControl(15, 0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
+}
+
 void Cus428State::SendVolume(usX2Y_volume &V)
 {
 	int Next = us428ctls_sharedmem->p4outLast + 1;
@@ -67,22 +71,100 @@ void Cus428State::SendVolume(usX2Y_volum
 	us428ctls_sharedmem->p4outLast = Next;
 }
 
+void Cus428State::UserSliderChangedTo(int S, unsigned char New)
+{
+  SliderSend(S);
+}
+
 void Cus428State::SliderChangedTo(int S, unsigned char New)
 {
-	if (StateInputMonitor() && S <= eFader3
-	    || S == eFaderM) {
+	if (StateInputMonitor() && S <= eFader3 || S == eFaderM) {
 		usX2Y_volume &V = Volume[S >= eFader4 ? eFader4 : S];
 		V.SetTo(S, New);
 		if (S == eFaderM || !LightIs(eL_Mute0 + S))
 			SendVolume(V);
 	}
-	else SliderSend(S);
-}
-
-void Cus428State::SliderSend(int S)
-{
-	Midi.SendMidiControl(0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
-}
+	else
+    UserSliderChangedTo(S, New);
+}
+
+void Cus428State::UserKnobChangedTo(eKnobs K, bool V)
+{
+		switch (K) {
+		case eK_STOP:
+			if (verbose > 1)
+				printf("Knob STOP now %i\n", V);
+			if (V) TransportToggle(T_STOP);
+			Midi.SendMidiControl(15, K, V);
+			break;
+		case eK_PLAY:
+			if (verbose > 1)
+				printf("Knob PLAY now %i", V);
+			if (V) TransportToggle(T_PLAY);
+			if (verbose > 1)
+				printf(" Light is %i\n", LightIs(eL_Play));
+			Midi.SendMidiControl(15, K, V);
+			break;
+		case eK_REW:
+			if (verbose > 1)
+				printf("Knob REW now %i", V);
+			if (V) TransportToggle(T_REW);
+			if (verbose > 1)
+				printf(" Light is %i\n", LightIs(eL_Rew));
+			Midi.SendMidiControl(15, K, V);
+			break;
+		case eK_FFWD:
+			if (verbose > 1)
+				printf("Knob FFWD now %i", V);
+			if (V) TransportToggle(T_F_FWD);
+			if (verbose > 1)
+				printf(" Light is %i\n", LightIs(eL_FFwd));
+			Midi.SendMidiControl(15, K, V);
+			break;
+		case eK_RECORD:
+			if (verbose > 1)
+				printf("Knob RECORD now %i", V);
+			if (V) TransportToggle(T_RECORD);
+			if (verbose > 1)
+				printf(" Light is %i\n", LightIs(eL_Record));
+			Midi.SendMidiControl(15, K, V);
+			break;
+		case eK_SET:
+			if (verbose > 1)
+				printf("Knob SET now %i", V);
+			bSetLocate = V;
+			break;
+		case eK_LOCATE_L:
+			if (verbose > 1)
+				printf("Knob LOCATE_L now %i", V);
+			if (V) {
+				if (bSetLocate)
+					aWheel_L = aWheel;
+				else {
+					aWheel = aWheel_L;
+					LocateSend();
+				}
+			}
+			break;
+		case eK_LOCATE_R:
+			if (verbose > 1)
+				printf("Knob LOCATE_R now %i", V);
+			if (V) {
+				if (bSetLocate)
+					aWheel_R = aWheel;
+				else {
+					aWheel = aWheel_R;
+					LocateSend();
+				}
+			}
+			break;
+		default:
+			if (verbose > 1)
+				printf("Knob %i now %i\n", K, V);
+			Midi.SendMidiControl(15, K, V);
+		}
+}
+
 
 void Cus428State::KnobChangedTo(eKnobs K, bool V)
 {
@@ -109,121 +191,36 @@ void Cus428State::KnobChangedTo(eKnobs K
 		}
 		break;
 	default:
-		switch (K) {
-		case eK_STOP:
-			if (verbose > 1)
-				printf("Knob STOP now %i\n", V);
-			if (V) TransportToggle(T_STOP);
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_PLAY:
-			if (verbose > 1)
-				printf("Knob PLAY now %i", V);
-			if (V) TransportToggle(T_PLAY);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_Play));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_REW:
-			if (verbose > 1)
-				printf("Knob REW now %i", V);
-			if (V) TransportToggle(T_REW);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_Rew));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_FFWD:
-			if (verbose > 1)
-				printf("Knob FFWD now %i", V);
-			if (V) TransportToggle(T_F_FWD);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_FFwd));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_RECORD:
-			if (verbose > 1)
-				printf("Knob RECORD now %i", V);
-			if (V) TransportToggle(T_RECORD);
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_Record));
-			Midi.SendMidiControl(K, V);
-			break;
-		case eK_SET:
-			if (verbose > 1)
-				printf("Knob SET now %i", V);
-			bSetLocate = V;
-			break;
-		case eK_LOCATE_L:
-			if (verbose > 1)
-				printf("Knob LOCATE_L now %i", V);
-			if (V) {
-				if (bSetLocate)
-					aWheel_L = aWheel;
-				else {
-					aWheel = aWheel_L;
-					LocateSend();
-				}
-			}
-			break;
-		case eK_LOCATE_R:
-			if (verbose > 1)
-				printf("Knob LOCATE_R now %i", V);
-			if (V) {
-				if (bSetLocate)
-					aWheel_R = aWheel;
-				else {
-					aWheel = aWheel_R;
-					LocateSend();
-				}
-			}
-			break;
-		case eK_InputMonitor:
-			if (verbose > 1)
-				printf("Knob InputMonitor now %i", V);
-			if (V) {
-				if (StateInputMonitor()) {
-					SelectInputMonitor = Light[0].Value;
-					MuteInputMonitor = Light[2].Value;
-				} else {
-					Select = Light[0].Value;
-					Mute = Light[2].Value;
-				}
-				LightSet(eL_InputMonitor, ! StateInputMonitor());
-				Light[0].Value = StateInputMonitor() ? SelectInputMonitor : Select;
-				Light[2].Value = StateInputMonitor() ? MuteInputMonitor : Mute;
-				LightSend();
-			}
-			if (verbose > 1)
-				printf(" Light is %i\n", LightIs(eL_InputMonitor));
-			break;
-		default:
-			if (verbose > 1)
-				printf("Knob %i now %i\n", K, V);
-			Midi.SendMidiControl(K, V);
-		}
+	  if (K == eK_InputMonitor)
+      {
+        if (verbose > 1)
+          printf("Knob InputMonitor now %i", V);
+        if (V) {
+          if (StateInputMonitor()) {
+            SelectInputMonitor = Light[0].Value;
+            MuteInputMonitor = Light[2].Value;
+          } else {
+            Select = Light[0].Value;
+            Mute = Light[2].Value;
+          }
+          LightSet(eL_InputMonitor, ! StateInputMonitor());
+          Light[0].Value = StateInputMonitor() ? SelectInputMonitor : Select;
+          Light[2].Value = StateInputMonitor() ? MuteInputMonitor : Mute;
+          LightSend();
+        }
+        if (verbose > 1)
+          printf(" Light is %i\n", LightIs(eL_InputMonitor));
+      }
+    else
+      UserKnobChangedTo(K, V);
 	}
 }
 
-
-void Cus428State::WheelChangedTo(E_In84 W, char Diff)
+void Cus428State::UserWheelChangedTo(E_In84 W, char Diff)
 {
 	char Param;
 	switch (W) {
 	case eWheelPan:
-		if (StateInputMonitor() && Light[0].Value) {
-			int index = 0;
-
-			while( index < 4 && (1 << index) !=  Light[0].Value)
-				index++;
-
-			if (index >= 4)
-				return;
-
-			Volume[index].PanTo(Diff, us428_ctls->Knob(eK_SET));
-			if (!LightIs(eL_Mute0 + index))
-				SendVolume(Volume[index]);
-			return;
-		}
 		Param = 0x4D;
 		break;
 	case eWheelGain:
@@ -241,7 +238,27 @@ void Cus428State::WheelChangedTo(E_In84 
 		WheelDelta((int) ((unsigned char *) us428_ctls)[W]);
 		break;
 	}
-	Midi.SendMidiControl(Param, ((unsigned char *) us428_ctls)[W]);
+	Midi.SendMidiControl(15, Param, ((unsigned char *) us428_ctls)[W]);
+}
+
+void Cus428State::WheelChangedTo(E_In84 W, char Diff)
+{
+  if (W == eWheelPan && StateInputMonitor() && Light[0].Value)
+    {
+      int index = 0;
+
+      while( index < 4 && (1 << index) !=  Light[0].Value)
+        index++;
+
+      if (index >= 4)
+        return;
+
+      Volume[index].PanTo(Diff, us428_ctls->Knob(eK_SET));
+      if (!LightIs(eL_Mute0 + index))
+        SendVolume(Volume[index]);
+      return;
+    }
+  UserWheelChangedTo(W, Diff);
 }
 
 
@@ -444,3 +461,174 @@ void Cus428State::MmcReset()
 	LocateSend();
 }
 
+Cus428StateMixxx::Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem):Cus428State(Pus428ctls_sharedmem)
+{
+  focus = 0;
+  eq = 0;
+  LightSet(eL_Low, 1);
+  LightSet(eL_LowMid, 0);
+  LightSet(eL_HiMid, 0);
+  LightSet(eL_High, 0);
+  LightSend();
+}
+
+void Cus428StateMixxx::UserKnobChangedTo(eKnobs K, bool V)
+{
+	switch (K) {
+  case eK_BANK_L:
+    if (verbose > 1)
+      printf("Knob BANK_L now %i", V);
+    if (V) LightSet(eL_BankL, !LightIs(eL_BankL));
+    LightSend();
+    Midi.SendMidiNote(0, 51, V ? 127 : 0);
+    break;
+  case eK_BANK_R:
+    if (verbose > 1)
+      printf("Knob BANK_R now %i", V);
+    if (V) LightSet(eL_BankR, !LightIs(eL_BankR));
+    LightSend();
+    Midi.SendMidiNote(1, 51, V ? 127 : 0);
+    break;
+  case eK_REW:
+    if (verbose > 1)
+      printf("Knob REW now %i", V);
+    Midi.SendMidiNote(focus, 60, V ? 127 : 0);
+    break;
+  case eK_FFWD:
+    if (verbose > 1)
+      printf("Knob FFWD now %i", V);
+    Midi.SendMidiNote(focus, 61, V ? 127 : 0);
+    break;
+  case eK_STOP:
+    if (verbose > 1)
+      printf("Knob STOP now %i\n", V);
+    Midi.SendMidiNote(focus, 62, V ? 127 : 0);
+    break;
+  case eK_PLAY:
+    if (verbose > 1)
+      printf("Knob PLAY now %i", V);
+    Midi.SendMidiNote(focus, 63, V ? 127 : 0);
+    break;
+  case eK_RECORD:
+    if (verbose > 1)
+      printf("Knob RECORD now %i", V);
+    Midi.SendMidiNote(focus, 64, V ? 127 : 0);
+    break;
+  case eK_LOW:
+    if (verbose > 1)
+      printf("Knob LOW now %i", V);
+    if (V)
+      {
+        eq = 0;
+        LightSet(eL_Low, 1);
+        LightSet(eL_LowMid, 0);
+        LightSet(eL_HiMid, 0);
+        LightSet(eL_High, 0);
+        LightSend();
+      }
+    break;
+  case eK_LOWMID:
+    if (verbose > 1)
+      printf("Knob LOWMID now %i", V);
+    if (V)
+      {
+        eq = 1;
+        LightSet(eL_Low, 0);
+        LightSet(eL_LowMid, 1);
+        LightSet(eL_HiMid, 0);
+        LightSet(eL_High, 0);
+        LightSend();
+      }
+    break;
+  case eK_HIMID:
+    if (verbose > 1)
+      printf("Knob HIMID now %i", V);
+    if (V)
+      {
+        eq = 2;
+        LightSet(eL_Low, 0);
+        LightSet(eL_LowMid, 0);
+        LightSet(eL_HiMid, 1);
+        LightSet(eL_High, 0);
+        LightSend();
+      }
+    break;
+  case eK_HIGH:
+    if (verbose > 1)
+      printf("Knob HIGH now %i", V);
+    if (V)
+      {
+        eq = 3;
+        LightSet(eL_Low, 0);
+        LightSet(eL_LowMid, 0);
+        LightSet(eL_HiMid, 0);
+        LightSet(eL_High, 1);
+        LightSend();
+      }
+    break;
+  case eK_SET:
+    if (verbose > 1)
+      printf("Knob SET now %i", V);
+    Midi.SendMidiNote(focus, 65, V ? 127 : 0);
+    break;
+  case eK_LOCATE_L:
+    if (verbose > 1)
+      printf("Knob LOCATE_L now %i", V);
+    if (V) {
+      focus = 0;
+    }
+    break;
+  case eK_LOCATE_R:
+    if (verbose > 1)
+      printf("Knob LOCATE_R now %i", V);
+    if (V) {
+      focus = 1;
+    }
+    break;
+  default:
+    if (verbose > 1)
+      printf("Knob %i now %i\n", K, V);
+    Midi.SendMidiNote(0, K, V);
+  }
+}
+
+void Cus428StateMixxx::UserSliderChangedTo(int S, unsigned char New)
+{
+  //  if (verbose > 1)
+  //  printf("Slider : %d - %d - %d\n", S, New, ((unsigned char*)us428_ctls)[S]);
+	Midi.SendMidiControl(0, 0x40 + S, ((unsigned char*)us428_ctls)[S] / 2);
+}
+
+void Cus428StateMixxx::UserWheelChangedTo(E_In84 W, char Diff)
+{
+	char Param;
+  char Value;
+  char Channel;
+  //if (verbose > 1)
+  //  printf("Slider : %d - %d - %d\n", W, Diff, ((unsigned char *) us428_ctls)[W]);
+
+  Channel = 0;
+	switch (W) {
+	case eWheelGain:
+		Param = 0x48 + eq * 4;
+		break;
+	case eWheelFreq:
+		Param = 0x49 + eq * 4;
+		break;
+	case eWheelQ:
+		Param = 0x4A + eq * 4;
+		break;
+	case eWheelPan:
+		Param = 0x4B + eq * 4;
+		break;
+	case eWheel:
+		Param = 0x60;
+    Channel = focus;
+		// Update the absolute wheel position.
+		//WheelDelta((int) ((unsigned char *) us428_ctls)[W]);
+		break;
+	}
+  Value = 64 + Diff;
+	Midi.SendMidiControl(Channel, Param, Value);
+  //	Midi.SendMidiControl(0, Param, ((unsigned char *) us428_ctls)[W]);
+}
diff -r 7f7a0bf510a4 us428control/Cus428State.h
--- a/us428control/Cus428State.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/Cus428State.h	Sat Sep 30 18:05:42 2006 +0200
@@ -84,10 +84,15 @@ class Cus428State: public us428_lights{
 		eK_F3,
 	};
 	void InitDevice(void);
+
 	void KnobChangedTo(eKnobs K, bool V);
 	void SliderChangedTo(int S, unsigned char New);
+	void WheelChangedTo(E_In84 W, char Diff);
+	virtual void UserSliderChangedTo(int S, unsigned char New);
+	virtual void UserWheelChangedTo(E_In84 W, char Diff);
+  virtual void UserKnobChangedTo(eKnobs K, bool V);
+
 	void SliderSend(int S);
-	void WheelChangedTo(E_In84 W, char Diff);
 	Cus428_ctls *Set_us428_ctls(Cus428_ctls *New) {
 		Cus428_ctls *Old = us428_ctls;
 		us428_ctls = New;
@@ -104,7 +109,7 @@ class Cus428State: public us428_lights{
 	void TransportSend();
 	// Reset internal MMC state.
 	void MmcReset();
- private:
+ protected:
 	void SendVolume(usX2Y_volume &V);
 	struct us428ctls_sharedmem* us428ctls_sharedmem;
 	bool StateInputMonitor() {
@@ -140,6 +145,18 @@ class Cus428State: public us428_lights{
 	int aWheelSpeed;
 };
 
+
+class Cus428StateMixxx: public Cus428State{
+public:
+  Cus428StateMixxx(struct us428ctls_sharedmem* Pus428ctls_sharedmem);
+  void UserKnobChangedTo(eKnobs K, bool V);
+	void UserSliderChangedTo(int S, unsigned char New);
+	void UserWheelChangedTo(E_In84 W, char Diff);
+protected:
+  int focus;
+  int eq;
+};
+
 extern Cus428State* OneState;
 
 #endif
diff -r 7f7a0bf510a4 us428control/us428control.cc
--- a/us428control/us428control.cc	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/us428control.cc	Sat Sep 30 18:05:42 2006 +0200
@@ -61,7 +61,8 @@ static void usage(void)
 {
 	printf("Tascam US-428 Control\n");
 	printf("version %s\n", VERSION);
-	printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device]\n");
+	printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n");
+  printf("mode is one of (native, mixxx)\n");
 }
 /*
  * check the name id of the given hwdep handle
@@ -76,14 +77,14 @@ static int check_hwinfo(snd_hwdep_t *hw,
 		return err;
 	if (strcmp(snd_hwdep_info_get_id(info), id))
 		return -ENODEV;
-	if (usb_dev_name) 
+	if (usb_dev_name)
 		if (strcmp(snd_hwdep_info_get_name(info), usb_dev_name))
 			return -ENODEV;
 
 	return 0; /* ok */
 }
 
-int US428Control(const char* DevName)
+int US428Control(const char* DevName, int mode)
 {
 	snd_hwdep_t		*hw;
 	int			err;
@@ -117,7 +118,11 @@ int US428Control(const char* DevName)
 		return -ENOMEM;
 	}
 	us428ctls_sharedmem->CtlSnapShotRed = us428ctls_sharedmem->CtlSnapShotLast;
-	OneState = new Cus428State(us428ctls_sharedmem);
+  if (mode == 1)
+    OneState = new Cus428StateMixxx(us428ctls_sharedmem);
+  else
+    OneState = new Cus428State(us428ctls_sharedmem);
+
 	OneState->InitDevice();
 
 	while ((pollrc = poll(pfds, npfd, 60000)) >= 0) {
@@ -152,12 +157,13 @@ int main (int argc, char *argv[])
 int main (int argc, char *argv[])
 {
 	int c;
+  int mode = 0;
 	int card = -1;
 	char	*device_name = NULL,
 		*usb_device_name = getenv("DEVICE");
 	char name[64];
 
-	while ((c = getopt(argc, argv, "c:D:u:v:")) != -1) {
+	while ((c = getopt(argc, argv, "c:D:u:v:m:")) != -1) {
 		switch (c) {
 		case 'c':
 			card = atoi(optarg);
@@ -171,6 +177,10 @@ int main (int argc, char *argv[])
 		case 'v':
 			verbose = atoi(optarg);
 			break;
+    case 'm':
+      if (!strcmp(optarg, "mixxx"))
+        mode = 1;
+      break;
 		default:
 			usage();
 			return 1;
@@ -190,18 +200,18 @@ int main (int argc, char *argv[])
 		}
 	}
 	if (device_name) {
-		return US428Control(device_name) != 0;
+		return US428Control(device_name, mode) != 0;
 	}
 	if (card >= 0) {
 		sprintf(name, "hw:%d", card);
-		return US428Control(name) != 0;
+		return US428Control(name, mode) != 0;
 	}
 
 	/* probe the all cards */
 	for (c = 0; c < SND_CARDS; c++) {
 	//	verbose--;
 		sprintf(name, "hw:%d", c);
-		if (! US428Control(name))
+		if (!US428Control(name, mode))
 			card = c;
 	}
 	if (card < 0) {
diff -r 7f7a0bf510a4 us428control/usbus428ctldefs.h
--- a/us428control/usbus428ctldefs.h	Tue Sep 12 15:35:53 2006 +0200
+++ b/us428control/usbus428ctldefs.h	Sat Sep 30 18:05:42 2006 +0200
@@ -64,7 +64,7 @@ struct us428_ctls{
 	unsigned char 	Select;
 	unsigned char   Mute;
 	unsigned char   UNKNOWN;
-	unsigned char   Switch;	     
+	unsigned char   Switch;
 	unsigned char   Wheel[5];
 };
 
@@ -119,7 +119,7 @@ typedef struct usX2Y_volume {
 		if (Grob) {
 			static int GrobVals[] = {-128, -64, 0, 64, 127};
 			int i = 4;
-			while (i >= 0 && GrobVals[i] > Pan) 
+			while (i >= 0 && GrobVals[i] > Pan)
 				i--;
 			if (GrobVals[i] != Pan  &&  RawValue < 0)
 				i++;
@@ -158,7 +158,12 @@ struct us428_lights{
 		eL_FFwd = 29,
 		eL_Play = 30,
 		eL_Record = 31,
-		eL_Null
+    eL_AnalogDigital = 32,
+		eL_Null = 34,
+    eL_Low = 36,
+    eL_LowMid = 37,
+    eL_HiMid = 38,
+    eL_High = 39
 	};
 	bool LightIs(int L){
 		return Light[L / 8].Value & (1 << (L % 8));
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux