1

嗨,我尝试用 Euterpea 弹一首钢琴曲,但播放几秒钟后,它只会给我错误消息:

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] 

看起来,考虑到我还没有找到任何关于它的帖子,但在没有太多尝试的情况下遇到了这个错误,这应该是一个非常明显的问题。

4

1 回答 1

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 以支持新的操作系统 API :

我不再开发这个库

令人遗憾的是,原来的 C 库也不再被开发,而且随着操作系统逐渐弃用旧的 API,它肯定已经过时了。目前我没有任何优质替代品的指针。

于 2019-03-02T00:40:25.237 回答