[linux-audio-dev] Basic MIDI question

Jens M Andreasen jens.andreasen at chello.se
Tue Jul 25 23:55:33 UTC 2006


On Tue, 2006-07-25 at 21:55 +0200, Jacob wrote:
> Hmmm, does this really work? I don't think so.
> 
> Example:
> 
>    1. status: note on   (-> thisByte -> runningStatus)
>    2. data:   key       (-> thisByte, ignored)
>    3. data:   vel       (-> thisByte, checked against 0, checked againt 0x80)
>    4. status: note off  (read as key !!!)
>    5. data:   key       (read as vel, checked against 0x80 !!!)
>    6. data:   vel       (read as key !!!)
>    7. status: note on   (read as vel, checked against 0x80 !!!)
> 
> The Problem is, that the second data byte is used for the running status
> byte test.
> 
> Yours,
> 
> Jacob

Ehmm ... Right! Just checking if you were awake :-D 

Furthermore, it did not do the single byte SysRt either. But there ought
to be a small, reasonable solution out there somewhere ... Giving it one
more try:

  
  for(;;)
    {
      thisByte = nextByte(); 
      
      if(thisByte & 0x80)  // got new status 
	runningStatus = thisByte, count = 0; 
      
      if(runningStatus == NOTE_ON || runningStatus == NOTE_OFF)
	{
	  while(count < 2) // we need data1 and data2
	    {
	      thisByte = nextByte();
	      // filter out single byte SysRt
	      count += !(thisByte & 0x80);
	    }

	  if(thisByte == 0 || runningStatus == NOTE_OFF)
	    setLed(NOTE_OFF);
	  else
	    setLed(NOTE_ON);  
	  
	  // assume we will keep runningStatus
	  count = 1;
	}
    }
  


> On Tue, Jul 25, 2006 at 07:00:54PM +0200, Jens M Andreasen wrote:
> > Bzzzt ... My wrong!
> > 
> > 
> > thisByte = nextByte();
> > 
> > for(;;)
> > {
> > 
> >   if(thisByte & 0x80)
> >      runningStatus = thisByte;
> > 
> >   //... after which we get that:
> > 
> >   if(runningStatus == NOTE_ON || runningStatus == NOTE_OFF)
> >   {
> >     thisByte = nextByte();
> >     thisByte = nextByte();
> > 
> >     // note_on with zero velocity is note_off
> >     if(thisByte == 0 || runningStatus == NOTE_OFF)
> >       setLed(NOTE_OFF);
> >     else
> >       setLed(NOTE_ON);   
> >   }
> >   else
> >     thisByte = nextByte();
> > }
> > > > Lee
> > > > 
> > -- 
> > 
-- 




More information about the Linux-audio-dev mailing list