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; }
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; }
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 }
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; }
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(); }
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; }
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; }