Example #1
0
def _instantiate_library():
    'Initialize Portmidi library'
    global SINGLETON
    SINGLETON = ffi.new('PortMidiStream **')
    num = lib.Pm_Initialize()
    if num:
        raise MidiException(errno=num)
Example #2
0
    def write_many(self, events):
        num = len(events)
        cdata = ffi.new('PmEvent []', num)
        for i, e in enumerate(events):
            cdata[i].message, cdata[i].timestamp = e.message, e.timestamp

        ret = lib.Pm_Write(self.stream, cdata, num)
        try:
            assert(ret == 0)
        except AssertionError:
            raise MidiException('Error writing PmEvents to stream')
Example #3
0
    def write_one(self, event):
        cdata = ffi.new('PmEvent []', 1)
        cdata[0].message = event.message
        cdata[0].timestamp = event.timestamp

        ret = lib.Pm_Write(self.stream, cdata, 1)
        try:
            assert(ret == 0)
        except AssertionError:
            raise MidiException(
                'Error writing PmEvent to stream: {}'.format(ret))
Example #4
0
 def open_stream(self):
     pp_stream = ffi.new('PortMidiStream **')
     try:
         err = lib.Pm_OpenInput(pp_stream,
                                self.device_id,
                                self.PNULL,
                                self.buffer_size,
                                self.PNULL,
                                self.PNULL)
         self.stream = pp_stream[0]
         assert(err == 0)
     except AssertionError:
         self.stream = None
         raise MidiException(text='Invalid Device ID')
Example #5
0
    def __init__(self, device_id, buffer_size=4096):
        '''Initialize a new MIDI Input Stream and open it
        If the stream fails to open a MidiException will be raised.
        :param device_id
        :param buffer_size is the num of PmEvents that can be stored at a time
        '''
        if not _is_instantiated():
            _instantiate_library()

        self.buffer_size = buffer_size
        self.buffer = ffi.new('PmEvent []', buffer_size)
        self.device_id = device_id
        self.stream = None
        self.open_stream()
Example #6
0
 def open_stream(self):
     'Open portmidi Output Stream and assert that everything went well'
     pp_stream = ffi.new('PortMidiStream **')
     try:
         err = lib.Pm_OpenOutput(pp_stream,
                                 self.device_id,
                                 self.PNULL,
                                 self.buffer_size,
                                 self.PNULL,
                                 self.PNULL,
                                 0)
         self.stream = pp_stream[0]
         assert(err == 0)
     except AssertionError:
         self.stream = None
         raise MidiException(text='Invalid Device ID')