florian_lennon Posted June 30, 2007 Report Posted June 30, 2007 Hi,I have a Fostex G16S Tape Recorder, wich is a quite nice machine, I think, but it has one big problem:it dosn't understand MMC command, only the old Fostex Sysex commands.The newest sequencer software I know that sends these is Logic 5, wich is obviously not the most up to date version.After days of searching on the net I managed to find the an implementation chart for the most basic Fostex commands and now I want to write an application, that reads MMC and outputs the Fostex commands to my G16S.I'd appreciate if someone could help me, as I'm not the toughest in writing C.Regards, Florian Quote
florian_lennon Posted June 30, 2007 Author Report Posted June 30, 2007 Best would be the application. ;Di would be like the cc to nprn conversion, I think.what I want to do:for example, the sequencer sends a MMC play command [tt]F0 7F 7F 06 02 F7[/tt] and I want it have converted to a Fostex play command [tt]F0 51 7F 11 15 F7[/tt] Quote
stryd_one Posted June 30, 2007 Report Posted June 30, 2007 Well I don't think anyone is going to do it for you, but I'll give you advice if you want to DIY :) Quote
florian_lennon Posted July 2, 2007 Author Report Posted July 2, 2007 Do you think I am on the right way with this beginning:[tt]void MPROC_NotifyReceivedEvnt(unsigned char evnt0, unsigned char evnt1, unsigned char evnt2, unsigned char evnt3, unsigned char evnt4, unsigned char evnt5) __wparam{if(evnt0 == 0xF0 & evnt1 == 0x7F) //Only if SysEx & MMC{ evnt1 = 0x51; //Conversion MMC to Fostex evnt2 = 0x7F; evnt3 = 0x11; if(evnt4 != 0x44) //NOT Goto-Message { switch(evnt4) { case 0x01: evnt4 = 0x12; //Stop case 0x02: evnt4 = 0x15; //Play case 0x04: evnt4 = 0x19; //FFW case 0x05: evnt4 = 0x1A; //REW } } else //Goto-Message { evnt3 = 0x12; evnt4 = 0x18; evnt5 = 0x42; MIOS_MIDI_TxBufferPut(evnt0); MIOS_MIDI_TxBufferPut(evnt1); MIOS_MIDI_TxBufferPut(evnt2); MIOS_MIDI_TxBufferPut(evnt3); MIOS_MIDI_TxBufferPut(evnt4); MIOS_MIDI_TxBufferPut(evnt5);}[/tt] Quote
stryd_one Posted July 6, 2007 Report Posted July 6, 2007 Well yes and no... The thing is that NotifyReceivedEvnt only has three bytes, not 6... Because sysex strings can be different lengths, it's not practical to have a function to handle them in such a way.What this means is that you need to monitor every byte with NotifyReceivedByte, and if you get F0, you know a sysex string is beginning, and you can monitor the following bytes; until you get F7, and you know the sysex has ended. The bytes in the middle can be handled in different ways according to your needs, similarly to what you have posted above. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.