Python Can';I don’我不和明格斯弹奏一个音符

Python Can';I don’我不和明格斯弹奏一个音符,python,audio-player,Python,Audio Player,我开始使用mingus来尝试用python重现一些注释。根据过去的情况,我尝试了: 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 pkexec env DISPL

我开始使用mingus来尝试用python重现一些注释。根据过去的情况,我尝试了:

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
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY python3 /home/btc/Escritorio/SinestesiaRCB/SinestesiaRCB.py
除其他外,使用。但后来我发现了一个错误:

FluidSync:警告:未能将线程设置为高优先级

FluidSync:警告:在通道9上找不到预设[bank=128 prog=0]

研究一下,:

对于一般MIDI兼容性,默认的声音字体工具 作业是银行0,程序0(“原声大钢琴”)为 通道0-8和10-15,以及气缸组128,程序0(“默认鼓组”) 第九频道。显然,您的声音字体没有后者。 如果您的MIDI文件不采用常规MIDI,这并不重要 兼容乐器,不尝试在频道上播放鼓声 九,

但除此之外,这可能会让事情变得更清楚,我仍然不知道如何解决它

另外,如果我使用第一个链接的答案,那么我得到的错误是这个(也不知道如何解决):

FluidSync:警告:未能将线程设置为高优先级

FluidSync:警告:无法将样本数据固定到RAM;交换是可能的

更新

使用sudo权限运行程序会删除此错误,但它听起来不。这样,我得到的错误是:

QStandardPath:XDG_RUNTIME_DIR未设置,默认为“/tmp/RUNTIME root”

我认为在
fluidSync
driver中选择的驱动程序模式可能有问题,但我尝试了所有驱动程序(alsa、oss等),结果都是一样的。为了完整起见,我在虚拟机中运行它,其中的其他声音在主机扬声器中正确再现

然而,基于此,我想应该通过向其传递正确的声音环境变量来解决。我不知道。我试过:

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
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY python3 /home/btc/Escritorio/SinestesiaRCB/SinestesiaRCB.py
其中需要文件的完整路径,因为这需要sudo权限并更改其工作目录,最后出现了相同的错误:
XDG\u RUNTIME\u DIR

更新2

如果我使用
sudo-E
选项运行它,则错误将替换为新错误:

QStandardPath:运行时目录/run/user/1000、1000而不是0上的所有权错误

我读到,
1000
用户应该是默认用户,而不是root用户

因此,我做了一个:

sudo chown root:root /run/user/1000
只是尝试一下,然后应用程序运行,没有失败,但仍然听不到声音

更新3


基于和,我多次尝试使用时间睡眠,并在播放音符之后(也是之前)使用
原始输入
,但仍然听不出声音。

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

最后一部分是让它发出声音,而不是等待
sleep
让它工作。甚至在
play\u note
功能之前和之后都不这样做。我可以说,这个函数总是返回
True
,因此从一开始就应该发出提示音。问题是,SF2文件(几乎150MB)已成功加载,或者至少看起来是这样,因为它也返回了
True
,而且确实非常快

解决方案

在执行脚本时(就在问题中的更新3之前)没有打印错误之后,让我们继续

我想检查脚本的CPU使用率,所以我在Linux终端上使用了
top
,发现几天前运行的
pulseaudio

终止这个过程最终让它发出声音。但是,我必须说,在
play_Note()
函数之后添加了一个
time.sleep()
,大约
0.25
秒,以便让它完全播放音符