I am starting to program a CTRL interface for my Tascam controller....
I found two documents regarding midi implementation.
One i understand because it hold midimessages.
https://tascam.com/content/downloads/products/229/native_mode_protocol_e_1_60.pdf
The other i am not quite sure what is about, could someone explain, i think it is about messages but unsure howto interpretate the columns
Especially the # column is it program value and their respective note on/off, to set buttons LCD's?
https://tascam.com/downloads/tascam/229/default_midi_control_values_1_00.pdf
Now i wrote some functions for Tascam FW1884 midicontrol host -> FW1884 over firewire midiport.
I use HTML checkboxes "onChange function" and pass ID and checkbox value "true/false" to the function that then send a message to the FW1884 that should lighup a led to show that mute changed.
However "nothing happens for any of the functions NO LEDS LIGHT UP".. .
Maybe i send to the wrong port or my messages malformed?
Or the Tascam device must be in a certain "mode" to receive the messages?
Anyone familiar with the Tascam FW1884?
function getPortIndex(){
var e = parent.document.getElementById("out_portsel");
for (var i=0;i<parent.out_portsel.length;i++){
if (e.options.value=="FW1884 Control"){ctrlportindex=i; break;};
}
}
function T1884Rec(Rid,Rval){
getPortIndex();
if (Rid=="T1884Rec1") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x00,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x00,0x00,0xF7];
}
}
else if (Rid=="T1884Rec2") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x01,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x01,0x00,0xF7];
}
}
else if (Rid=="T1884Rec3") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x02,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x02,0x00,0xF7];
}
}
else if (Rid=="T1884Rec4") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x03,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x03,0x00,0xF7];
}
}
else if (Rid=="T1884Rec5") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x04,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x04,0x00,0xF7];
}
}
else if (Rid=="T1884Rec6") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x05,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x05,0x00,0xF7];
}
}
else if (Rid=="T1884Rec7") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x06,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x06,0x00,0xF7];
}
}
else if (Rid=="T1884Rec8") {
if (Rval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x07,0x07F,0xF7];
}
else if (Rval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x04,0x07,0x00,0xF7];
}
}
parent.outportarr[ctrlportindex].send(settingChange);
}
function T1884Sel(Selid,Selval){
getPortIndex();
if (Selid=="T1884Sel1") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x00,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x00,0x00,0xF7];
}
}
else if (Selid=="T1884Sel2") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x01,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x01,0x00,0xF7];
}
}
else if (Selid=="T1884Sel3") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x02,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x02,0x00,0xF7];
}
}
else if (Selid=="T1884Sel4") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x03,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x03,0x00,0xF7];
}
}
else if (Selid=="T1884Sel5") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x04,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x04,0x00,0xF7];
}
}
else if (Selid=="T1884Sel6") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x05,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x05,0x00,0xF7];
}
}
else if (Selid=="T1884Sel7") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x06,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x06,0x00,0xF7];
}
}
else if (Selid=="T1884Sel8") {
if (Selval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x07,0x07F,0xF7];
}
else if (Selval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x03,0x07,0x00,0xF7];
}
}
parent.outportarr[ctrlportindex].send(settingChange);
}
function T1884Mute(Mid,Mval){
getPortIndex();
if (Mid=="T1884Mute1") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x00,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x00,0x00,0xF7];
}
}
else if (Mid=="T1884Mute2") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x01,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x01,0x00,0xF7];
}
}
else if (Mid=="T1884Mute3") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x02,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x02,0x00,0xF7];
}
}
else if (Mid=="T1884Mute4") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x03,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x03,0x00,0xF7];
}
}
else if (Mid=="T1884Mute5") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x04,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x04,0x00,0xF7];
}
}
else if (Mid=="T1884Mute6") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x05,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x05,0x00,0xF7];
}
}
else if (Mid=="T1884Mute7") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x06,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x06,0x00,0xF7];
}
}
else if (Mid=="T1884Mute8") {
if (Mval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x07,0x07F,0xF7];
}
else if (Mval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x02,0x07,0x00,0xF7];
}
}
parent.outportarr[ctrlportindex].send(settingChange);
}
function T1884Solo(Sid,Sval){
getPortIndex();
if (Sid=="T1884Solo1") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x00,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x00,0x00,0xF7];
}
}
else if (Sid=="T1884Solo2") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x01,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x01,0x00,0xF7];
}
}
else if (Sid=="T1884Solo3") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x02,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x02,0x00,0xF7];
}
}
else if (Sid=="T1884Solo4") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x03,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x03,0x00,0xF7];
}
}
else if (Sid=="T1884Solo5") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x04,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x04,0x00,0xF7];
}
}
else if (Sid=="T1884Solo6") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x05,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x05,0x00,0xF7];
}
}
else if (Sid=="T1884Solo7") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x06,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x06,0x00,0xF7];
}
}
else if (Sid=="T1884Solo8") {
if (Sval=true){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x07,0x07F,0xF7];
}
else if (Sval=false){
settingChange=[0xF0,0x4E,0x00,0x12,0x13,0x07,0x00,0xF7];
}
}
parent.outportarr[ctrlportindex].send(settingChange);
}
JT
Making a CTRL surface in javascript is a breeze what is a hard is interpretate the manuals. and the functionality...
Sorry suddenly saw the problem 0x07F, the danger of copy paste and being sloppy....
"RESOLVED"
I got alot of functionality working both ways control strip and leds, now i try to fix fader_position but the cryptics of the midi manual.....
I do not have a clue about what they want or mean below, i formatted message
settingChange=[0xBF,0x4F,0x7F,0x5F,0x70];
Channel 1 but complaint no valid message.,
Could someone decrypt a valid message frow "midi manual" below
1. FADER_POSITION: BF 4x vv 5x ww x = [F, 1, 2, 3, 4, 5, 6, 7], (channel, except
for the first channel which is mapped to “F”)
vv = [0..7F] (7 MSB’s)
ww = [00,10,20,30,40,50,60,or 70]
(3 LSB’s of fader ADC shift left)
"7 MSB, 3 LSB WHAT DO THEY MEAN?"
[quotePost id=11437]It’s pretty worth enough for me. Thanks[/quotePost]
I uploaded, it is just transport play, rec , pause, stop that works and the functionality for select, rec, mute and solo.
I want the motorised faders? sliders to work, but i can't decrypt their documentation.
So i think it will be pan to start with.
Reading the midi manual about the "fader controlled?" encodings "buttons to the left", i can not see there is messages from host to set the pan.
"Actually i am clueless howto pan channels "from the device" altogether."
But maybe the pan setting within a subset of the message to set the faders, but the manual doesn't tell?