Changeset 77d8df8 in buchla-emu for emu/mid.c


Ignore:
Timestamp:
01/05/2018 04:35:58 PM (6 years ago)
Author:
Alexander Heinrich <alex.heinrich@…>
Branches:
master
Children:
9ddbf3e
Parents:
379ffd9
Message:

Add CLI option for selecting MIDI ports.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • emu/mid.c

    r379ffd9 r77d8df8  
    4747int32_t mid_verbose = 0;
    4848
    49 struct RtMidiWrapper* midiin;
     49struct RtMidiWrapper* mid_in;
    5050
    5151static void xmit(int32_t un)
     
    105105}
    106106
    107 static void midi_callback(double timeStamp, const unsigned char* message, size_t size, void *userData) {
     107static void mid_callback(double timeStamp, const unsigned char* message, size_t size, void *userData) {
    108108        (void) size;
    109109        (void) userData;
     
    121121        ver("mid init");
    122122
    123         midiin = rtmidi_in_create_default();
    124         ver2("%p", midiin->ptr);
     123        mid_in = rtmidi_in_create_default();
     124        ver2("%p", mid_in->ptr);
    125125        // check if null
    126         uint32_t portcount = rtmidi_get_port_count(midiin);
    127         ver2("%d", midiin->ok);
    128 
     126
     127        uint32_t portcount = rtmidi_get_port_count(mid_in);
    129128        if (portcount == 0) {
    130                 midiin = NULL;
    131                 ver2("no midi ports\n");
    132                 return;
    133         }
    134 
    135         for (uint32_t i = 0; i < portcount; i++) {
    136                 ver2("Port %d: %s", i, rtmidi_get_port_name(midiin, i));
    137         }
    138 
    139         rtmidi_open_port(midiin, 0, rtmidi_get_port_name(midiin, 0));
    140         if(!midiin->ok) {
    141                 fail("Failed to open Midi port");
    142         }
    143 
    144         rtmidi_in_set_callback(midiin, midi_callback, midiin->data);
    145         if(!midiin->ok) {
    146                 fail("Failed to set Midi Callback");
     129                mid_in = NULL;
     130                ver2("No MIDI ports\n");
     131                return;
     132        }
     133
     134        if (mid_port > portcount) {
     135                mid_in = NULL;
     136                ver2("Selected MIDI port larger than number of midi ports");
     137                return;
     138        }
     139
     140        rtmidi_open_port(mid_in, mid_port, rtmidi_get_port_name(mid_in, mid_port));
     141
     142        if(mid_in->ok == 0) {
     143                fail("Failed to open MIDI port");
     144        }
     145
     146        ver2("Using MIDI port %u", mid_port);
     147
     148        rtmidi_in_set_callback(mid_in, mid_callback, mid_in->data);
     149
     150        if(mid_in->ok == 0) {
     151                fail("Failed to set MIDI Callback");
    147152        }
    148153}
     
    150155void mid_quit(void)
    151156{
    152         if(midiin) {
    153                 rtmidi_close_port(midiin);
    154                 rtmidi_in_free(midiin);
     157        if(mid_in) {
     158                rtmidi_close_port(mid_in);
     159                rtmidi_in_free(mid_in);
    155160        }
    156161
     
    231236        }
    232237}
     238
     239void mid_list(void) {
     240        mid_in = rtmidi_in_create_default();
     241
     242        uint32_t portcount = rtmidi_get_port_count(mid_in);
     243
     244        if (portcount == 0) {
     245                mid_in = NULL;
     246                ver2("no MIDI ports\n");
     247                return;
     248        }
     249
     250        fprintf(stdout, "the following MIDI ports are available:\n");
     251
     252        for (uint32_t i = 0; i < portcount; i++) {
     253                fprintf(stdout, "port %d: %s\n", i, rtmidi_get_port_name(mid_in, i));
     254        }
     255
     256        rtmidi_in_free(mid_in);
     257}
Note: See TracChangeset for help on using the changeset viewer.