本文整理汇总了C++中RtMidiIn类的典型用法代码示例。如果您正苦于以下问题:C++ RtMidiIn类的具体用法?C++ RtMidiIn怎么用?C++ RtMidiIn使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了RtMidiIn类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rtmidi_in_cancel_callback
void rtmidi_in_cancel_callback (RtMidiInPtr device)
{
#if defined(__NO_EXCEPTIONS__)
RtMidiIn* rtm = (RtMidiIn*) device->ptr;
rtm->resetError();
rtm->cancelCallback ();
if (rtm->isError()) {
device->ok = false;
device->msg = rtm->getError().what ();
}
else {
delete (CallbackProxyUserData*) device->data;
device->data = 0;
}
#else
try {
((RtMidiIn*) device->ptr)->cancelCallback ();
delete (CallbackProxyUserData*) device->data;
device->data = 0;
} catch (const RtMidiError & err) {
device->ok = false;
device->msg = err.what ();
}
#endif
}
示例2: main
int main()
{
// Create an api map.
std::map<int, std::string> apiMap;
apiMap[RtMidi::MACOSX_CORE] = "OS-X CoreMidi";
apiMap[RtMidi::WINDOWS_MM] = "Windows MultiMedia";
apiMap[RtMidi::UNIX_JACK] = "Jack Client";
apiMap[RtMidi::LINUX_ALSA] = "Linux ALSA";
apiMap[RtMidi::RTMIDI_DUMMY] = "RtMidi Dummy";
std::vector< RtMidi::Api > apis;
RtMidi :: getCompiledApi( apis );
std::cout << "\nCompiled APIs:\n";
for ( unsigned int i=0; i<apis.size(); i++ )
std::cout << " " << apiMap[ apis[i] ] << std::endl;
RtMidiIn *midiin = 0;
RtMidiOut *midiout = 0;
try {
// RtMidiIn constructor ... exception possible
midiin = new RtMidiIn();
std::cout << "\nCurrent input API: " << apiMap[ midiin->getCurrentApi() ] << std::endl;
// Check inputs.
unsigned int nPorts = midiin->getPortCount();
std::cout << "\nThere are " << nPorts << " MIDI input sources available.\n";
for ( unsigned i=0; i<nPorts; i++ ) {
std::string portName = midiin->getPortName(i);
std::cout << " Input Port #" << i+1 << ": " << portName << '\n';
}
// RtMidiOut constructor ... exception possible
midiout = new RtMidiOut();
std::cout << "\nCurrent output API: " << apiMap[ midiout->getCurrentApi() ] << std::endl;
// Check outputs.
nPorts = midiout->getPortCount();
std::cout << "\nThere are " << nPorts << " MIDI output ports available.\n";
for ( unsigned i=0; i<nPorts; i++ ) {
std::string portName = midiout->getPortName(i);
std::cout << " Output Port #" << i+1 << ": " << portName << std::endl;
}
std::cout << std::endl;
} catch ( RtMidiError &error ) {
error.printMessage();
}
delete midiin;
delete midiout;
return 0;
}
示例3: enablePort
bool MidiInputController::enablePort(int portNumber) {
if(portNumber < 0)
return false;
try {
MidiInputCallback *callback = new MidiInputCallback;
RtMidiIn *rtMidiIn = new RtMidiIn;
cout << "Enabling MIDI port " << portNumber << " (" << rtMidiIn->getPortName(portNumber) << ")\n";
rtMidiIn->openPort(portNumber); // Open the port
rtMidiIn->ignoreTypes(true, true, true); // Ignore sysex, timing, active sensing
callback->controller = this;
callback->midiIn = rtMidiIn;
callback->inputNumber = portNumber;
rtMidiIn->setCallback(MidiInputController::rtMidiStaticCallback, callback);
activePorts_[portNumber] = callback;
}
catch(...) {
return false;
}
return true;
}
示例4: openInputDevice
FREObject openInputDevice(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
int index = 0;
FREGetObjectAsInt32(argv[0],&index);
//printf("Native MIDI :: open input device %i\n",index);
int pointer = -1;
try {
RtMidiIn* in = new RtMidiIn();
in->openPort(index);
openMidiIn.push_back(in);
pointer = (int)in;
printf("Open midi pointer : %i (%s), num open devices : %i\n",pointer,in->getPortName(index).c_str(),openMidiIn.size());
// Don't ignore sysex, timing, or active sensing messages.
midiin->ignoreTypes( false, false, false );
}
catch ( RtMidiError &error ) {
error.printMessage();
}
FREObject result;
FRENewObjectFromInt32(pointer,&result);
return result;
}
示例5: lazyInstance
bool MidiInRt::getPortList(QVector<QString> &ports)
{
RtMidiIn *midiin = lazyInstance();
#if (QT_VERSION < 0x050000) && defined(_WIN32)
RtMidi::Api api = midiin->getCurrentApi();
#endif
m_errorSignaled = false;
unsigned count = midiin->getPortCount();
if(m_errorSignaled)
return false;
ports.resize(count);
for(unsigned i = 0; i < count; ++i)
{
m_errorSignaled = false;
#if (QT_VERSION < 0x050000) && defined(_WIN32)
if(api == RtMidi::WINDOWS_MM)
{
MIDIINCAPSA deviceCaps;
midiInGetDevCapsA(i, &deviceCaps, sizeof(MIDIINCAPSA));
ports[i] = QString::fromLocal8Bit(deviceCaps.szPname);
}
else
#endif
{
std::string name = midiin->getPortName(i);
if(m_errorSignaled)
return false;
ports[i] = QString::fromStdString(name);
}
}
return true;
}
示例6: probeMidiIn
//-----------------------------------------------------------------------------
// name: probeMidiIn()
// desc: ...
//-----------------------------------------------------------------------------
void probeMidiIn()
{
RtMidiIn * min = NULL;
try {
min = new RtMidiIn;;
} catch( RtMidiError & err ) {
EM_error2b( 0, "%s", err.getMessage().c_str() );
return;
}
// get num
t_CKUINT num = min->getPortCount();
EM_error2b( 0, "------( chuck -- %i MIDI inputs )------", num );
EM_reset_msg();
std::string s;
for( t_CKUINT i = 0; i < num; i++ )
{
try { s = min->getPortName( i ); }
catch( RtMidiError & err )
{ err.printMessage(); return; }
EM_error2b( 0, " [%i] : \"%s\"", i, s.c_str() );
EM_reset_msg();
}
}
示例7: setInputDevicesStatus
void RtMidiDriver::start(const QList<bool> &deviceStatuses){
setInputDevicesStatus(deviceStatuses);
if(!hasInputDevices()){
return;
}
stop();
for(int deviceIndex=0; deviceIndex < inputDevicesEnabledStatuses.size(); deviceIndex++) {
if(deviceIndex < midiStreams.size()){
RtMidiIn* stream = midiStreams.at(deviceIndex);
if(stream && inputDevicesEnabledStatuses.at(deviceIndex)){//device is globally enabled?
if(!stream->isPortOpen()){
try{
qCInfo(jtMidi) << "Starting MIDI in " << QString::fromStdString(stream->getPortName(deviceIndex));
stream->openPort(deviceIndex);
}
catch(RtMidiError e){
qCCritical(jtMidi) << "Error opening midi port " << QString::fromStdString(e.getMessage());
}
}
else{
qCCritical(jtMidi) << "Port " << QString::fromStdString(stream->getPortName(deviceIndex)) << " already opened!";
}
}
}
}
}
示例8: EM_error2
t_CKBOOL MidiInManager::open( MidiIn * min, t_CKINT device_num )
{
// see if port not already open
if( device_num >= (t_CKINT)the_mins.capacity() || !the_mins[device_num] )
{
// allocate the buffer
CBufferAdvance * cbuf = new CBufferAdvance;
if( !cbuf->initialize( BUFFER_SIZE, sizeof(MidiMsg) ) )
{
if( !min->m_suppress_output )
EM_error2( 0, "MidiIn: couldn't allocate CBuffer for port %i...", device_num );
delete cbuf;
return FALSE;
}
// allocate
RtMidiIn * rtmin = new RtMidiIn;
try {
rtmin->openPort( device_num );
rtmin->setCallback( cb_midi_input, cbuf );
} catch( RtError & err ) {
if( !min->m_suppress_output )
{
// print it
EM_error2( 0, "MidiIn: couldn't open MIDI port %i...", device_num );
err.getMessage();
// const char * e = err.getMessage().c_str();
// EM_error2( 0, "...(%s)", err.getMessage().c_str() );
}
delete cbuf;
return FALSE;
}
// resize?
if( device_num >= (t_CKINT)the_mins.capacity() )
{
t_CKINT size = the_mins.capacity() * 2;
if( device_num >= size ) size = device_num + 1;
the_mins.resize( size );
the_bufs.resize( size );
}
// put cbuf and rtmin in vector for future generations
the_mins[device_num] = rtmin;
the_bufs[device_num] = cbuf;
}
// set min
min->min = the_mins[device_num];
// found
min->m_buffer = the_bufs[device_num];
// get an index into your (you are min here) own buffer,
// and a free ticket to your own workshop
min->m_read_index = min->m_buffer->join( (Chuck_Event *)min->SELF );
min->m_device_num = (t_CKUINT)device_num;
// done
return TRUE;
}
示例9: showEvent
////////////////////////////////////////////////////////////////////////////////
// SetupDialog::showEvent()
////////////////////////////////////////////////////////////////////////////////
///\brief Message handler for the window show event.
///\param [in] e: Description of the event.
////////////////////////////////////////////////////////////////////////////////
void SetupDialog::showEvent(QShowEvent* /*e*/)
{
// Lock UI:
blocked = true;
// Get MIDI in properties:
RtMidiIn midiIn;
unsigned int portCnt = midiIn.getPortCount();
if (portCnt > 0)
{
int selItem = -1;
// Loop through MIDI ports:
for (unsigned int i = 0; i < portCnt; i++)
{
// Get name of the port:
QString name(midiIn.getPortName(i).c_str());
// Does this match the currently selected option?
if (name == inputName)
selItem = i;
// Add item to the combo box:
ui->inputComboBox->addItem(name);
}
// Select current item, if any:
ui->inputComboBox->setCurrentIndex(selItem);
}
// Get MIDI out properties:
RtMidiOut midiOut;
portCnt = midiOut.getPortCount();
if (portCnt > 0)
{
int selItem = -1;
// Loop through MIDI ports:
for (unsigned int i = 0; i < portCnt; i++)
{
// Get name of the port:
QString name(midiOut.getPortName(i).c_str());
// Does this match the currently selected option?
if (name == outputName)
selItem = i;
// Add item to the combo box:
ui->outputComboBox->addItem(name);
}
// Select current item, if any:
ui->outputComboBox->setCurrentIndex(selItem);
}
// Unlock UI:
blocked = false;
}
示例10: rtmidi_in_cancelcallback
value rtmidi_in_cancelcallback(value obj) {
RtMidiIn *midiin = (RtMidiIn *)(intptr_t)val_float(obj);
midiin->cancelCallback();
if (callback_root) {
delete callback_root;
callback_root = NULL;
}
return alloc_null();
}
示例11: open
t_CKBOOL MidiInManager::open( MidiIn * min, Chuck_VM * vm, const std::string & name )
{
t_CKINT device_num = -1;
try
{
RtMidiIn * rtmin = new RtMidiIn;
t_CKINT count = rtmin->getPortCount();
for(t_CKINT i = 0; i < count; i++)
{
std::string port_name = rtmin->getPortName( i );
if( port_name == name)
{
device_num = i;
break;
}
}
if( device_num == -1 )
{
// search by substring
for(t_CKINT i = 0; i < count; i++)
{
std::string port_name = rtmin->getPortName( i );
if( port_name.find( name ) != std::string::npos )
{
device_num = i;
break;
}
}
}
}
catch( RtMidiError & err )
{
if( !min->m_suppress_output )
{
// print it
EM_error2( 0, "MidiOut: error locating MIDI port named %s", name.c_str() );
err.getMessage();
// const char * e = err.getMessage().c_str();
// EM_error2( 0, "...(%s)", err.getMessage().c_str() );
}
return FALSE;
}
if(device_num == -1)
{
EM_error2( 0, "MidiOut: error locating MIDI port named %s", name.c_str() );
return FALSE;
}
t_CKBOOL result = open( min, vm, device_num );
return result;
}
示例12: RtMidiIn
// ******************************************
void shruthiEditorSettings::getDeviceInfo() {
// ******************************************
RtMidiIn *midiin = 0;
RtMidiOut *midiout = 0;
QString name;
// Input ports:
try {
midiin = new RtMidiIn();
}
catch ( RtError &error ) {
error.printMessage();
exit( EXIT_FAILURE );
}
unsigned int numdev = midiin->getPortCount();
std::cout << numdev << " midi input devices found.\n";
for (unsigned int i=0; i < numdev; i++) {
try {
name = QString::fromStdString(midiin->getPortName(i));
}
catch ( RtError &error ) {
error.printMessage();
goto cleanup;
}
midi_input_device->addItem(name,i);
}
// Output ports:
try {
midiout = new RtMidiOut();
}
catch ( RtError &error ) {
error.printMessage();
exit( EXIT_FAILURE );
}
numdev = midiout->getPortCount();
std::cout << numdev << " midi output devices found.\n";
for (unsigned int i=0; i < numdev; i++) {
try {
name = QString::fromStdString(midiout->getPortName(i));
}
catch ( RtError &error ) {
error.printMessage();
goto cleanup;
}
midi_output_device->addItem(name,i);
}
cleanup:
delete midiin;
delete midiout;
}
示例13: main
int main(int argc, char** argv)
{
if (argc != 2) {
printf("Usage: synth file.sf2\n");
exit(0);
}
LightFluidSynth *usynth;
usynth = new LightFluidSynth();
usynth->loadSF2(argv[1]);
// usynth->loadSF2("tim.sf2");
RtMidiIn *midiIn = new RtMidiIn();
if (midiIn->getPortCount() == 0) {
std::cout << "No MIDI ports available!\n";
}
midiIn->openPort(0);
midiIn->setCallback( &midiCallback, (void *)usynth );
midiIn->ignoreTypes( false, false, false );
// RtAudio dac(RtAudio::LINUX_PULSE);
RtAudio dac;
RtAudio::StreamParameters rtParams;
// Determine the number of devices available
unsigned int devices = dac.getDeviceCount();
// Scan through devices for various capabilities
RtAudio::DeviceInfo info;
for ( unsigned int i = 0; i < devices; i++ ) {
info = dac.getDeviceInfo( i );
if ( info.probed == true ) {
std::cout << "device " << " = " << info.name;
std::cout << ": maximum output channels = " << info.outputChannels << "\n";
}
}
// rtParams.deviceId = 3;
rtParams.deviceId = dac.getDefaultOutputDevice();
rtParams.nChannels = 2;
unsigned int bufferFrames = FRAME_SIZE;
RtAudio::StreamOptions options;
options.flags = RTAUDIO_SCHEDULE_REALTIME;
dac.openStream( &rtParams, NULL, AUDIO_FORMAT, SAMPLE_RATE, &bufferFrames, &audioCallback, (void *)usynth, &options );
dac.startStream();
printf("\n\nPress Enter to stop\n\n");
cin.get();
dac.stopStream();
delete(usynth);
return 0;
}
示例14: midiInfo
void midiInfo()
{
cout << "MIDI INFO port = " << portopt << endl;
std::vector<unsigned char> message;
double stamp;
int nBytes;
int i;
#ifdef MARSYAS_MIDIIO
RtMidiIn *midiin = NULL;
try {
midiin = new RtMidiIn();
}
catch (RtError3 &error) {
error.printMessage();
exit(1);
}
try {
midiin->openPort(portopt);
}
catch (RtError3 &error) {
error.printMessage();
exit(1);
}
// Don't ignore sysex, timing, or active sensing messages.
midiin->ignoreTypes( false, false, false );
while(1)
{
stamp = midiin->getMessage( &message );
nBytes = message.size();
if (nBytes >0)
{
for ( i=0; i<nBytes; i++ )
std::cout << "Byte " << i << " = " << (int)message[i] << ", ";
if ( nBytes > 0 )
std::cout << "stamp = " << stamp << '\n';
}
usleep(10);
}
#endif
}
示例15: rtmidi_in_getmessage
value rtmidi_in_getmessage(value obj) {
RtMidiIn *midiin = (RtMidiIn *)(intptr_t)val_float(obj);
std::vector<unsigned char> message;
double stamp = midiin->getMessage(&message);
// ignore stamp for now
value ret = alloc_array(message.size());
for (int i = 0; i < message.size(); ++i) {
val_array_set_i(ret, i, alloc_int(message[i]));
}
return ret;
}