不能用杂音演奏音符

时间:2018-12-07 14:43:57

标签: python audio-player

我开始使用 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:警告:无法将线程设置为高优先级

     

流体合成器:警告:通道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 examplethis Q&A,我尝试了两次使用时间睡眠,并且在执行play_note之后(也是之前)都使用了raw_input,但是仍然没有声音。

1 个答案:

答案 0 :(得分:1)

我将回答我自己的问题,但是调试/解决过程的很大一部分在于问题本身是通过更新完成的。

最后一部分是使声音发声,甚至没有等到sleep就使声音起作用。在play_note函数之前和之后甚至都没有这样做。我可以说这个函数总是返回True,因此该音符从一开始就应该听起来不错。事实是,SF2文件(将近150MB)已成功加载,或者至少看起来像这样,因为它也返回了True,而且肯定很快。

解决方案

在执行脚本时(在“问题”的Update 3之前)到达没有打印错误的位置之后,让我们继续。

我想检查正在执行脚本的CPU使用率,因此我在Linux终端上使用top,发现pulseaudio从几天前开始运行:

enter image description here

终止此过程后,它终于可以听起来了。但是,我必须说,在time.sleep()函数之后添加了一个0.25秒的play_Note(),以使其完全演奏音符。