【发布时间】:2018-12-28 18:18:47
【问题描述】:
我开始使用 mingus 来尝试在 python 中重现一些笔记。根据answered here,我尝试过:
from mingus.midi import fluidsynth
fluidsynth.init('/home/btc/Escritorio/SinestesiaRCB/gfx/ViolinsLong.sf2',"alsa")
fluidsynth.play_Note(64,0,100)
#Also tried with Note("C-5") and so forth
使用one of this sf2 files。但后来我得到了错误:
fluidsynth:警告:无法将线程设置为高优先级
fluidsynth:警告:在通道 9 [bank=128 prog=0] 上找不到预设
研究了一下,this answer said:
为了通用 MIDI 兼容性,默认声音字体乐器 分配是银行 0,程序 0(“原声三角钢琴”) 通道 0–8 和 10–15,以及库 128,程序 0(“默认鼓组”) 对于通道 9。显然,您的声音字体没有后者。 如果您的 MIDI 文件不采用通用 MIDI,这无关紧要 兼容的乐器,并且不会尝试在通道上播放鼓声 9.
但除此之外,这可能会让事情变得更清楚一些,我仍然不知道如何解决它。
另外,如果我使用same file 作为第一个链接的答案,那么我得到的错误就是这个(也不知道如何解决):
fluidsynth:警告:无法将线程设置为高优先级
fluidsynth:警告:无法将样本数据固定到 RAM;可以交换。
更新
以 sudo 权限运行程序会消除此错误,但它听起来并不。这样,我得到的错误是:
QStandardPaths: XDG_RUNTIME_DIR 未设置,默认为 '/tmp/runtime-root'
我认为这可能是fluidsynth 驱动程序中选择的驱动程序模式有问题,但我已经尝试了所有这些(alsa、oss 等),结果相同。为了完整起见,我在虚拟机中运行它,它内部的其他声音在我的主机扬声器中正确再现。
但是基于this answer,我猜应该通过将正确的声音环境变量传递给它来解决。我不知道。我试过了:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY python3 /home/btc/Escritorio/SinestesiaRCB/SinestesiaRCB.py
需要文件的完整路径,因为这需要 sudo 权限并更改其工作目录,最后出现相同的错误:XDG_RUNTIME_DIR。
更新 2
如果我使用sudo -E 选项运行它,错误将被替换为新错误:
QStandardPaths:运行时目录 /run/user/1000 的所有权错误,1000 而不是 0
我正在阅读in some webs,1000 用户应该是默认用户而不是 root。
因此,我做了一个:
sudo chown root:root /run/user/1000
只是试一试,然后应用程序运行没有失败,但仍然没有声音。
更新 3
基于this example 和this Q&A,我尝试了多次使用时间睡眠,并在执行play_note 之后(也是之前)使用raw_input,但它仍然没有声音。
【问题讨论】:
标签: python audio-player