【问题标题】:Can't play a note with mingus无法使用 mingus 弹奏音符
【发布时间】: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 webs1000 用户应该是默认用户而不是 root。

因此,我做了一个:

sudo chown root:root /run/user/1000

只是试一试,然后应用程序运行没有失败,但仍然没有声音

更新 3

基于this examplethis Q&A,我尝试了多次使用时间睡眠,并在执行play_note 之后(也是之前)使用raw_input,但它仍然没有声音。

【问题讨论】:

    标签: python audio-player


    【解决方案1】:

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

    最后一部分是让它发声,甚至不用等待sleep 就能让它工作。甚至在 play_note 函数之前和之后都没有这样做。我可以说这个函数总是返回True,所以这个音符从一开始就应该发出声音。问题是,SF2 文件(将近 150MB)已成功加载,或者至少看起来是这样,因为它也返回了 True,而且速度肯定非常快。

    解决方案

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

    我想检查我的脚本使用了多少 CPU 百分比,所以我在我的 Linux 终端上使用了 top,发现 pulseaudio 是几天前运行的:

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

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-21
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多