Python Can';I don’我不和明格斯弹奏一个音符
我开始使用mingus来尝试用python重现一些注释。根据过去的情况,我尝试了: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
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
秒,以便让它完全播放音符