Bc2000 (for the BCF2000 & BCR2000) group photo

Yahoo Groups archive

Bc2000 (for the BCF2000 & BCR2000)

Index last updated: 2026-04-28 23:16 UTC

Message

Re: B-Control Nano BCN 44 Latency Issues

2012-12-12 by sghookings@tiscali.co.uk

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.
>

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.