midikeyboard gibt seltsame daten permanent aus ???

Dieses Thema im Forum "Controller & MIDI" wurde erstellt von kl~ak, 5. Mai 2011.

  1. kl~ak

    kl~ak -

    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 :cool:
     
  2. Nоrdcore

    Nоrdcore deaktiviert

    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.

    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!)
     
  3. kl~ak

    kl~ak -

    nur cracks am start :mrgreen:

    :nihao: :nihao: :nihao: :nihao: :nihao: :nihao:


    mal sehen wie es weiterläuft .... danke jaash
     

Diese Seite empfehlen