midikeyboard gibt seltsame daten permanent aus ???

hallo

ich habe ein hier ganz einfaches midikeyboard. das ist für alle anwendungen zum ansteuern analoger synths benutz wird und dafür reicht mir das spielgefühl auch aus.

mein problem sieht so aus:

ich habe gerade probehalber ein midigerät angeschlossen, welches mit meinem keyboard nicht klarkommt. (ist ein midi2cv-converter in der entstehungsphase) das heißt es liegt wahrscheinlich an dem gerät aber mir ist dabei aufgefallen, das mein keyboard permanent daten sendet. soetwas wie eine clock ca. 80bpm würde ich schätzen. ich habe mir ein anderes geborg und das hat den gleichen effekt !!! und gibt auch die gleichen seltsamen daten aus ....

mit dem a190 ist alles ok und die daten kommen sauber an. kann also nichts wirklich dramatisches sein aber der controller, den ich gerade anteste scheint mit eben diesen signal vermutlich problemezu haben. noteo/off wird stark verzögert ausgegeben und notenwerte irgendwann in der zukunft :roll: _ ich habe dann einen rechner dazwischen gehangen und alles funktioniert einwandfrei! auch wenn ich die mpc dazwischenhänge ist alles ok! nur direkt funktioniert es nicht.

ich würde gerne wissen, was das für ein signal ist un dwelchen grund es haben könnte, dass der converter nicht damit klarkommt. ziel ist nicht die konfiguration dem converter anzupassen, sondern den converter so zu konzipieren, damit dieser mit jederart keyboard funktioniert ....

jemand ne idee

mein keyboard ist ein: pkb m1 49D _ nicht auslachen es macht was es soll 8)
 
Kriegst du da vielleicht Active Sense?
Das wirft (vor allem, aber nicht nur) so manches Bastelinterfaces aus der Bahn. Obwohl das völlig harmlos ist, bei einer Real-Time Message mitten im Note-On (völlig legal) wirft es dann noch weit mehr Kandidaten.

jaash schrieb:
(ist ein midi2cv-converter in der entstehungsphase)
Der Midi-Automat ist nicht so kompliziert (ich hab knapp 120 Zeilen C gebraucht, s.u.) - aber man *muss* ihn *vollständig* implementieren.
Code:
/* Code has GNU-GPL License */

static unitMidiChannel;  // current Midi Adress - internal value (=counted from 0 to 15, user *has* to see 1...16) 

#define NOTE_ON         0b10010000
#define NOTE_OFF        0b10000000
#define PITCH           0b11100000          // pitch wheel command              0xEn
#define AFTERTOUCH      0b11010000          // after touch command              0xDn
#define CHAN_MODE       0b10110000          // Mode command (Midi CC)           0xBn
#define CHAN_PRES	    0b11010000          // Channel Pressure command         0xDn

void process_midi()
{
	static unsigned char runningStatus;	// Midi runnig status
	static unsigned char msgByteCnt;    // number of current midi-message byte received 
	static unsigned char midi_byte1;	// holds first data byte 

	unsigned char byte;
	char channel;

	byte=getMidiChar();

	if (byte > 0x7F)	                // have we had a command byte (MSB set)
	{
		if(byte>= 0xF8)  				//  real-time msg 
		{
			if (byte == 0xFC)			// if its MIDI STOP
				midi_stop();			// clear gates
			return ; 					// rest ignored  
		}

		runningStatus = 0;				// just status bytes left, so running status is lost

		if(byte >0xF0) 					// System Common Category message
		{
			/* may be evaluated here */
			return ; 					//  all ignored 
		}

		// only channel messages left here ... 
		channel=byte & 0xf; 	 
		if ( channel == unitMidiChannel)        		// if MIDI channel matches,
		{
			byte &= 0xF0;				// remove channel from message number 
			runningStatus = byte;		// set running status 
			msgByteCnt = 0;
		}
		return; 
	}
	else
	{
		switch (runningStatus)		    // Have we had a valid byte?
		{
		case (NOTE_ON):				// if we've had a note on byte
			if (msgByteCnt)		 	// if counter = 1
			{ 			   			// then we've just received a velocity byte
				msgByteCnt = 0;	 	// msg complete - reset char count 
				if (byte == 0)		// is it a note off (velo = 0) ?
					note_off(midi_byte1,byte);  
				else 					// NOTE ON
					note_on(midi_byte1, byte);  // ... and do what the note on has told us 
			}
			else					// first data byte 
			{
				midi_byte1 = byte;	// save it 
				msgByteCnt = 1;     // set counter to get 2nd data byte
				return;
			}
			break;
		case (NOTE_OFF): 	        // if we've had a note off byte
			if (msgByteCnt)	 	 	// is second data byte ? 
			{ 					 	
				msgByteCnt = 0;	 	// reset char count
				note_off(midi_byte1,byte); // switch note off
			}
			else
			{
				midi_byte1 = byte;
				msgByteCnt = 1; 	// set counter to get 2nd byte
				return;
			}
			break;
		case (PITCH):		        // PITCH BEND command
			if (msgByteCnt)   	 	// second data byte (MSB) 
			{ 						
				msgByteCnt = 0;	 	// reset char count
				pitch_bend(midi_byte1, byte);
			}
			else
			{
				midi_byte1 = byte;
				msgByteCnt = 1;  // set counter ready to get 3rd byte
				return;
			}
			break;
		case (CHAN_MODE):	             // CC Message (channel mode message ) 
			if (msgByteCnt)		 // if we've had first byte
			{
				msgByteCnt = 0;	 // reset char count
				  channel_mode(midi_byte1, byte);
			}
			else
			{
			  midi_byte1 = byte;
			  msgByteCnt = 1; 	 // set counter ready to get 3rd byte
			  return; 
			}
			break;
		case (CHAN_PRES):	         // if we've had a channel pressure byte
			channel_pressure (byte); // set Aftertouch 
		default:
			return; 
		}
	}
	// this is the reason, why we have sometimes "return" in the code above and sometimes not: 
	// just *complete* *recocnized* messages for *our* channel should go here: 
	flashWithMidiLed();  // set Midi Lamp on (goes off after a while, done by a timer) 
}
Semi-getestest (hier auf das relevante gekürzt, das "Original" läuft!)
 


Neueste Beiträge

News

Zurück
Oben