Haskell:Euterpea PortMidi警告:get_free_output_buffer()等待在1000毫秒后超时

时间:2019-03-01 23:21:45

标签: haskell euterpea

您好,我尝试用Euterpea弹钢琴曲,但是播放了几秒钟后,它给了我错误消息msg:

PortMidi warning: get_free_output_buffer() wait timed out after 1000ms. 
反复

直到我中断程序。我使用的是Windows,根据他们网站上的快速教程,我不需要安装任何其他程序即可使用该库。这段代码足以获取错误消息:

let caChord = chord [c 3 qn, a 2 qn]
    doubleCa = times 2 caChord
    lowerHand = line [f 2 qn, doubleCa]
in play $ chord [line [times 3 (line [e 5 en, f 5 en]),times 3 (line [d 5 en, f 5 en]),times 3 (line [c 5 en, f 5 en]),times 3 (line [bf 4 en, f 5 en])], times 4 lowerHand] 

貌似,考虑到我还没有找到关于它的任何帖子,但是在没有进行大量尝试的情况下遇到了此错误,这应该是一个显而易见的问题。

1 个答案:

答案 0 :(得分:0)

https://github.com/PortMidi/PortMidi/blob/master/portmidi/pm_win/pmwinmm.c#L421:L462处的PortMidi源代码可能会为您提供解决方案。

根据源代码的注释,警告的某些可能原因可能是对PortMidi的调用未生成任何消息,MIDI驱动程序挂起或内存不足。无论如何,PortMidi的实现都会继续循环并生成警告,直到缓冲区中出现消息为止。

基于此评论https://github.com/PortMidi/PortMidi/issues/4#issuecomment-250340390,似乎不再开发或更新PortMidi以支持新的OS API:

  

我不再开发该库

     

可悲的是,也不再开发原始的C库,并且随着OS逐渐淘汰旧的API,它肯定已经过时了。目前,我没有任何优质替代品的提示。