Btc*_*ces 5 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
Run Code Online (Sandbox Code Playgroud)
使用其中一个sf2文件.但后来我得到了错误:
fluidsynth:warning:无法将线程设置为高优先级
fluidsynth:警告:在通道9上找不到预设[bank = 128 prog = 0]
研究了一下,这个答案说:
对于通用MIDI兼容性,默认声音字体乐器分配为0至0道和10-15的0区,0级("Acoustic Grand Piano")和9频道的0级("默认鼓组")显然,你的声音字体没有后者.如果您的MIDI文件不采用通用MIDI兼容乐器并且不尝试在通道9上播放鼓声,则无关紧要.
但除此之外,这可能会让事情变得更加清晰,我仍然不知道如何解决它.
另外,如果我使用与第一个链接的答案相同的文件,那么我得到的错误是这个(并且不知道如何解决它):
fluidsynth:warning:无法将线程设置为高优先级
fluidsynth:警告:无法将样本数据固定到RAM; 交换是可能的.
更新
使用sudo权限运行程序会删除此错误,但它不会发出声音.这样,我得到的错误是:
QStandardPaths:未设置XDG_RUNTIME_DIR,默认为'/ tmp/runtime-root'
我认为在fluidsynth
驱动程序中选择的驱动程序模式可能存在问题,但我已尝试使用相同的结果(alsa,oss等).为了完整起见,我在VM中运行它,其中的其他声音在我的主机扬声器中正确再现.
但是根据这个答案,我想它应该通过传递给它正确的声音环境变量来解决.我不知道.我尝试过:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY python3 /home/btc/Escritorio/SinestesiaRCB/SinestesiaRCB.py
Run Code Online (Sandbox Code Playgroud)
在需要文件的完整路径的地方,因为这需要sudo权限并更改其工作目录,最后出现同样的错误:XDG_RUNTIME_DIR
.
更新2
如果我使用sudo -E
选项运行它,则错误将替换为新错误:
QStandardPaths:运行时目录/ run/user/1000上的错误所有权,1000而不是0
我正在读一些网页,1000
用户应该是默认用户而不是root用户.
因此,我做了一个:
sudo chown root:root /run/user/1000
Run Code Online (Sandbox Code Playgroud)
只是尝试,然后应用程序运行没有失败,但它仍然没有响.
更新3
基于这个例子和这个Q&A,我已经尝试了两次使用时间睡眠,并且raw_input
在播放play_note之后(也在之前)使用它,但它仍然没有发出声音.
我将回答我自己的问题,但调试/解决过程的很大一部分是通过更新完成的问题本身。
最后一部分是让它发出声音,即使等待也无法sleep
使其工作。甚至在函数之前和之后都不做play_note
。我可以说这个函数总是返回True
,所以这个音符从一开始就应该发出声音。问题是,SF2 文件(几乎 150MB)已成功加载,或者至少看起来是这样,因为它True
也返回了,并且速度肯定相当快。
解决方案
让我们在执行脚本时达到没有打印错误的程度后继续(就在问题中的更新 3 之前)。
我想检查我的脚本的 CPU 使用率,因此我top
在 Linux 终端上使用并发现pulseaudio
几天前正在运行:
杀死这个进程让它终于发出声音。不过,我必须说的是,在该函数后面添加了一个time.sleep()
大约秒数的函数,以便让它完整地播放该音符。0.25
play_Note()
归档时间: |
|
查看次数: |
326 次 |
最近记录: |