Hi Mark
I replied to a BCN44 thread earlier but I probably didnt make myself clear.
These Yamaha for sure send 0xF8 and/or 0xFE (and a FF if they dont get enough FEs) interspersed in midi message.
And like I said, this is totally midi spec.
As you mention, Windows is a bad way to try to "see" this because it collates the info together ... you almost will never see it,
But Arduino dont ... so I had to write code to deal with it
...
// realtime message
byte MIDI_STREAM::SYSEX_MTC_QUARTER_FRAME_MESSAGE = 0xF1;
byte MIDI_STREAM::SYSEX_MIDI_SONG_POSITION_POINTER = 0xF2;
byte MIDI_STREAM::SYSEX_MIDI_SONG_SELECT = 0xF3;
byte MIDI_STREAM::SYSEX_MIDI_TUNE_REQUEST = 0xF6;
byte MIDI_STREAM::SYSEX_MIDI_CLOCK = 0xF8;
byte MIDI_STREAM::SYSEX_MIDI_START = 0xFA;
byte MIDI_STREAM::SYSEX_MIDI_CONTINUE = 0xFB;
byte MIDI_STREAM::SYSEX_MIDI_STOP = 0xFC;
byte MIDI_STREAM::SYSEX_ACTIVE_SENSE = 0xFE;
byte MIDI_STREAM::SYSEX_RESET = 0xFF;
byte MIDI_STREAM::MIDIRetryCount = 8; // tidy this up
...
// Given the readByte, determine it's MIDI state
// Return it's running status, 0 if it isnt a top bit set.
// CAREFUL the system realtime (0xF8--0xFF) should not change the
// status
byte MIDI_STREAM::getState(byte &runningStatus, byte readByte, bool debug)
{
// STEP 0 - set the runningStatus as the readByte UNLESS we are the realtime
if (readByte > 0xF7) {
}
else if (readByte >= 0xF0) {
runningStatus = 0;
}
else if ((readByte & 0x80) == 0x80) {
runningStatus = readByte;
}
else {
runningStatus = 0;
}
// STEP 1 - get the top nybble of the readByte
// After this transform the values of interest are in 8, 9, A ... F
byte topNybble = (readByte & 0xF0) >> 4;
// STEP 2 - get rid of anything < 8 ...
if (topNybble < 8) return 0; // we are to be ignored outside of a CMD
if (topNybble == 0xF) {
// We are a MIDI Sysex ... just return me ... else get my state
if (readByte == SYSEX_MTC_QUARTER_FRAME_MESSAGE) {
}
else if (readByte == SYSEX_MIDI_SONG_POSITION_POINTER) {
}
else if (readByte == SYSEX_MIDI_SONG_SELECT) {
}
else if (readByte == SYSEX_MIDI_TUNE_REQUEST) {
}
else if (readByte == SYSEX_MIDI_CLOCK) {
if (debug) Serial.println(F("FOUND MIDI CLOCK"));
}
else if (readByte == SYSEX_MIDI_START) {
}
else if (readByte == SYSEX_MIDI_CONTINUE) {
}
else if (readByte == SYSEX_MIDI_STOP) {
}
else if (readByte == SYSEX_ACTIVE_SENSE) {
if (debug) Serial.println(F("FOUND MIDI ACTIVE SENSE"));
}
else if (readByte == SYSEX_RESET) {
}
return readByte;
}
else {
// STEP 3 - set our state value (our model, not a midi standard).
return MIDI_STREAM::midiTypes[topNybble - 8 + 1].state;
}
}
so basically for now I ignore it,
But I am soon going to re-handle this and make the midi clock an active part of my MiniakTransform
Simply to say without my hardware I couldnt reliably use the Yamaha but with the message filter I can use it with BCR.
Regards
Steve H
--- In bc2000@yahoogroups.com, "Mark v.d. Berg" <markwinvdb@...> wrote:
>
> --- In bc2000@yahoogroups.com, "mosquito710" <mosquito710@> wrote:
> > My wife and I just got a BCN44 last week and had the same problem. Luckily it only occurred on a keyboard we were borrowing temporarily, and was completely fixed by switching to another keyboard.
> >
> > This probably doesn't tell you anything you don't already know
>
> Actually it tells me a lot:
> It virtually proves that electron8000's individual BCN44 isn't defective.
>
> I've looked at the MIDI specs of your Yamaha P-95: like electron8000's PSR310, it sends Timing Clock (F8) and Active Sensing (FE) messages, so I'm standing by my suspicion that these Yamaha keyboards send F8 and/or FE "within" channel messages such as Note On/Off.
> But I'm still not sure how I could prove this hypothesis, since Windows doesn't (easily) allow mimicking this behavior. Maybe I'd have to resort to my old DOS machine with an old Roland MPU interface...
> In any case it seems very unlikely that the problem as such can be fixed: the BCN's firmware would have to be reprogrammed.
> So the only "fix" seems to be your solution: use a different master keyboard.
>
> > Another thing I noticed is that the Casio is labeled as being "General MIDI" compliant. I don't really know a lot about MIDI messages, but from what I understand that means it complies to a standardized specification. So that could have something to do with why it interfaces properly with the BCN44.
>
> "General MIDI" is very limited: it assigns standard meanings to particular Program Change messages, i.e. it specifies which type of sound a receiving synth/sound module should produce upon reception of a particular Program Change message.
> So I can't see how this could affect the BCN44.
>
> Thanks!
> Mark.
>Message
Re: B-Control Nano BCN 44 Latency Issues
2012-12-12 by sghookings@tiscali.co.uk
Attachments
- No local attachments were found for this message.