Closed trogdoro closed 10 years ago
I had the same issue when using a combination of midi controllers (Yamaha P120 and Behringer FCB1010). I was able to fix it by making a small change to the ffi-coremidi gem:
/your.gems.folder/ffi-coremidi-0.2.0/lib/coremidi/source.rb#gets
def gets
until queued_messages?
sleep(0.0001) # <-- patch to prevent 100% CPU issue with some midi controllers
end
msgs = queued_messages
@pointer = @buffer.length
msgs
end
The issue was that 'queued_messages?' was always returning false, this slight delay seems to fix the problem without introducing any latency.
You can certainly submit a patch to ffi-coremidi ! If not I'll try and get around to it soon
Thanks
Wound up adding the patch here: https://github.com/arirusso/ffi-coremidi/commit/05200fbbdf90fdb2065e17270074e0bb37006d8a#diff-d41d8cd98f00b204e9800998ecf8427e
Is it normal for the CPU to go to 99% when input.gets is waiting? That's happening for me on OSX Lion with ruby 1.9.3.
It happens when running the input example code: https://github.com/arirusso/unimidi/blob/master/examples/input.rb
Also, it seems like it misses some events, and gets them on a slight delay.