Ejemplo n.º 1
0
int main()
{
	RtMidiOut *midiout = new RtMidiOut();
	std::vector<unsigned char> message;

	// Check available ports.
	unsigned int nPorts = midiout->getPortCount();
	if ( nPorts == 0 ) 
	{
		std::cout << "No ports available!\n";
		delete midiout;
		return -1;
	}

	// Open first available port.
	midiout->openPort( 0 );

	// Send out a series of MIDI messages.

	// Program change: 192, 5
	message.push_back( 192 );
	message.push_back( 5 );
	midiout->sendMessage( &message );
	
	usleep( 500000 );

	// Control Change: 176, 7, 100 (volume)
	message[0] = 176;
	message[1] = 7;
	message.push_back( 100 );
	midiout->sendMessage( &message );
	
	usleep( 500000 );

	// Note On: 144, 64, 90
	message[0] = 144;
	message[1] = 64;
	message[2] = 90;
	midiout->sendMessage( &message );

	usleep( 500000 ); // Platform-dependent ... see example in tests directory.

	// Note Off: 128, 64, 40
	message[0] = 128;
	message[1] = 64;
	message[2] = 40;
	midiout->sendMessage( &message );
	
	usleep( 500000 );

	return 0;
}
Ejemplo n.º 2
0
	FREObject sendMIDIMessage(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
	{

		
		int pointer = 0;
		int status = 0;
		int data1 = 0;
		int data2 = 0;

		FREGetObjectAsInt32(argv[0],&pointer);
		FREGetObjectAsInt32(argv[1],&status);
		FREGetObjectAsInt32(argv[2],&data1);
		FREGetObjectAsInt32(argv[3],&data2);

		RtMidiOut* out = (RtMidiOut *)pointer;

		//printf("Send Message : %i %i %i %i\n",out,status,data1,data2);
		
		outMessage[0] = (unsigned char)status;
		outMessage[1] = (unsigned char)data1;
		outMessage[2] = (unsigned char)data2;

		bool sendResult = false;
		try
		{
			if(out->isPortOpen()) out->sendMessage(&outMessage);
		}catch(std::exception e)
		{
			printf("Error sending message : %s\n",e.what());
		}

		FREObject result;
		FRENewObjectFromBool(sendResult,&result);
		return result;
	}
Ejemplo n.º 3
0
int rtmidi_out_send_message (RtMidiOutPtr device, const unsigned char *message, int length)
{
#if defined(__NO_EXCEPTIONS__)
    RtMidiOut* rtm = (RtMidiOut*) device->ptr;
    rtm->resetError();
    rtm->sendMessage (message, length);
    if (rtm->isError()) {
        device->ok  = false;
        device->msg = rtm->getError().what ();
        return -1;
    }
    return 0;
#else
    try {
        ((RtMidiOut*) device->ptr)->sendMessage (message, length);
        return 0;
    }
    catch (const RtMidiError & err) {
        device->ok  = false;
        device->msg = err.what ();
        return -1;
    }
    catch (...) {
        device->ok  = false;
        device->msg = "Unknown error";
        return -1;
    }
#endif
}
Ejemplo n.º 4
0
int midi_send(lua_State* L)
{
    double status = lua_tonumber(L, -3);
    double data1  = lua_tonumber(L, -2);
    double data2  = lua_tonumber(L, -1);
    std::vector<unsigned char> message(3);
    message[0] = static_cast<unsigned char>(status);
    message[1] = static_cast<unsigned char>(data1);
    message[2] = static_cast<unsigned char>(data2);
    midi.sendMessage(&message);
    return 0;
}
Ejemplo n.º 5
0
value rtmidi_out_sendmessage(value obj, value msg) {
  RtMidiOut *midiout = (RtMidiOut *)(intptr_t)val_float(obj);

  std::vector<unsigned char> message;

  int size = val_array_size(msg);
  for (int i = 0; i < size; ++i) {
    message.push_back(val_int(val_array_i(msg, i)));
  }

  midiout->sendMessage(&message);
  return alloc_null();
}
Ejemplo n.º 6
0
 virtual void Run()    {
     cout << "Thread " << threadnum << " running." << endl;
     while(SequencerRunning)    {
         for(unsigned int eventnum=lastevent;eventnum<track->events.size();eventnum++)    {
             Event *tmp = &track->events[eventnum];
             if(tmp->tick > tickcount)
                 break;
             if(!tmp->played)    {
                 if(tmp->statusmsg != 0xFF )    {
                     if(tmp->statusmsg >= 0x80)    {
                           message.push_back(tmp->statusmsg);
                         if(tmp->data.size() >= 1)
                             message.push_back(tmp->data[0]);
                           if(tmp->data.size() == 2)
                             message.push_back(tmp->data[1]);
                          midiout->sendMessage( &message );
                         message.erase(message.begin(),message.end());
                         message.resize(0);
                         message.clear();
                         cout << "Tick: " << tickcount << " - Out (0x" << hex << static_cast<int>(tmp->statusmsg) << ")" << endl;
                     }
                 }else{
                     switch(tmp->data[0])    {
                         case 0x51:
                             parser.bpm = tmp->data[1];
                             tickspersecond = ( (parser.bpm / 30.0) * ( parser.tpb));    
                             cout << "BPM Changed to " << parser.bpm << " - Ticks per second: " << tickspersecond << endl;
                             break;
                         case 0x58:
                             int numerador, denominador, clocks, notated;
                             numerador     =     tmp->data[1];
                             denominador =     tmp->data[2];
                             clocks        =    tmp->data[3];
                             notated        =    tmp->data[4];
                             cout << "Metronome: " << numerador << "/" << denominador << " - Clocks: " << clocks << " Notated: " << notated << endl;
                             break;
                         default:
                             cout << "Sem handler" << endl;
                     }    
                 }
                 tmp->played = true;
                 lastevent = eventnum;                            
             }
         }
     }
     delete  midiout;
     cout << "Thread " << threadnum << " closed." << endl;
 }
Ejemplo n.º 7
0
int main() 
{
  std::vector<unsigned char> message;
  RtMidiOut *midiout = new RtMidiOut();
  // Check available ports.
  unsigned int nPorts = midiout->getPortCount();
  if ( nPorts == 0 ) {
    std::cout << "No ports available!\n";
    goto cleanup;
  }
  cout<<"sending messages"<<endl;
  // Open first available port.
  midiout->openPort( 0 );
  // Send out a series of MIDI messages.
  // Program change: 192, 5
  message.push_back( 192 );
  message.push_back( 5 );
  midiout->sendMessage( &message );
  // Control Change: 176, 7, 100 (volume)
  message[0] = 176;
  message[1] = 7;
  message.push_back( 100 );
  midiout->sendMessage( &message );
  // Note On: 144, 64, 90
  message[0] = 144;
  message[1] = 64;
  message[2] = 90;
  midiout->sendMessage( &message );
sleep(1);
  message[0] = 144;
  message[1] = 64;
  message[2] = 90;
  midiout->sendMessage( &message );
sleep(3);
cout<<"inside"<<endl;
	int bend;
while(1){
cin>>bend;
if (!bend) break;
			message[0] = 224;
			message[1] = 0;
			message[2] = bend;
			midiout->sendMessage( &message );
}
  // Note Off: 128, 64, 40
  message[0] = 128;
  message[1] = 64;
  message[2] = 40;
  midiout->sendMessage( &message );
  // Clean up
 cleanup:
  delete midiout;
}