I figured out the input preamps and output volume controls as well as the various switches:Be. wrote: ↑Wed Apr 20, 2022 8:34 am I am also struggling to figure out how the input preamp gains and output level controls work. I see USB control transfer output messages when manipulating these, but I have not figured out how to make sense of the data. For the preamp gains, each change sends 5 control messages. 4 of them seem to stay constant and the other goes up and down when the gain is only moving in one direction. For the outputs, 2 control messages are sent, but I haven't figured out how the level is represented. For the mixing matrix, the levels are simply 16 bit unsigned integers.
Code: Select all
// preamp gain
// wValue gain is in units of 0.5 dB
// mic preamps 0 - 1 go up to +60 dB (wValue 180)
// instrument preamps go up to +9 dB (wValue 18)
// wIndex is the same as the matrix index for the channel
device.write_control(0x40, 26, 18, 2, &[], Duration::from_millis(10)).unwrap();
// output level
// wValue is 0 - 255 up to +6 dB, 0 dB is 243
// wIndex is 4 + the matrix index for the channel
device.write_control(0x40, 26, 243, 4 + 0, &[], Duration::from_millis(10)).unwrap();
device.write_control(0x40, 26, 243, 4 + 0, &[], Duration::from_millis(10)).unwrap();
// TotalMix FX also sends another output with value 0 - 16384, with 0 dB at 8192,
// like the mixing matrix. However, sending these doesn't seem to do anything??
// wIndex starts at 992
// device.write_control(0x40, 18, 0x2000, 992 + 0, &[], Duration::from_millis(10)).unwrap();
// // phantom power 1 on
// device.write_control(0x40, 23, 0, 1, &[], Duration::from_millis(10)).unwrap();
// // phantom power 1 off
// device.write_control(0x40, 23, 0, 0, &[], Duration::from_millis(10)).unwrap();
// // phantom power 2 on
// device.write_control(0x40, 23, 2, 2, &[], Duration::from_millis(10)).unwrap();
// // phantom power 2 off
// device.write_control(0x40, 23, 0, 2, &[], Duration::from_millis(10)).unwrap();
//
// // pad 1 on
// device.write_control(0x40, 23, 16, 16, &[], Duration::from_millis(10)).unwrap();
// // pad 1 off
// device.write_control(0x40, 23, 0, 16, &[], Duration::from_millis(10)).unwrap();
// // pad 2 on
// device.write_control(0x40, 23, 32, 32, &[], Duration::from_millis(10)).unwrap();
// // pad 2 off
// device.write_control(0x40, 23, 0, 32, &[], Duration::from_millis(10)).unwrap();
//
// // instrument 1 (input 3) +4 dBu
// device.write_control(0x40, 23, 4, 4, &[], Duration::from_millis(10)).unwrap();
// // instrument 1 (input 3) -10 dBV
// device.write_control(0x40, 23, 0, 4, &[], Duration::from_millis(10)).unwrap();
// // instrument 2 (input 4) +4 dBu
// device.write_control(0x40, 23, 8, 8, &[], Duration::from_millis(10)).unwrap();
// // instrument 2 (input 4) -10 dBV
// device.write_control(0x40, 23, 0, 8, &[], Duration::from_millis(10)).unwrap();
//
// // clock source automatic
// device.write_control(0x40, 23, 3, 3, &[], Duration::from_millis(10)).unwrap();
// // clock source internal
// device.write_control(0x40, 23, 0, 3, &[], Duration::from_millis(10)).unwrap();
//
// // SPIDF
// device.write_control(0x40, 23, 1024, 1024, &[], Duration::from_millis(10)).unwrap();
// // ADAT
// device.write_control(0x40, 23, 0, 1024, &[], Duration::from_millis(10)).unwrap();
// Do these do anything on the Babyface Pro??
// // SPIDF emph on
// device.write_control(0x40, 23, 256, 256, &[], Duration::from_millis(10)).unwrap();
// // SPDIF emph off
// device.write_control(0x40, 23, 0, 256, &[], Duration::from_millis(10)).unwrap();
//
// // SPIDF pro on
// device.write_control(0x40, 23, 128, 128, &[], Duration::from_millis(10)).unwrap();
// // SPDIF pro off
// device.write_control(0x40, 23, 0, 128, &[], Duration::from_millis(10)).unwrap();