# Frescobaldi捉虫记录
嗯……这里要怎么发带标题的博文呢?正好写这篇文章测试一下。
这两天study break的时候在玩Frescobaldi,因为其中几个插件都比较老了,有一些虫需要捉。这里就把捉虫的一些心得写下来。对于遇到类似问题的人希望能抛砖引玉;对于对此类细节没有太多兴趣的人,也可以看个开心吧。
记得Frescobaldi是当年修音乐史专业课时,巴洛克时期讲的第一个人。我对LiliPond这个Latex与打谱软件的结合其实已经瞻望很久了,而看到竟然有一个软件的名字在玩如此合我口味的梗,我就下载了。
(我的配置是AMD 4000 series以及PopOS 20.10。PopOS官方商店里竟然就有Frescobaldi,当时装系统的时候就开心地下载了,不过半年以后才有时间来玩它。此时Frescobaldi的版本号是3.1.2。)
## 界面与基本操作
刚打两行谱就受不了了——系统默认的color scheme里的高亮让我根本看不见原文。所幸这个问题很好解决,随便搜一下就找到了一个[GitHub Repo](https://github.com/frescobaldi/frescobaldi-themes),里面分享了许多常见theme。我随便下了一个nord。
之后发现预览出来的乐谱不是白纸了,变成深蓝了……于是找到设置(Edit → Preferences),在Fonts & Colors → Base colors → Preview background 找了一个比较接近与白色、又不会对比度太大的颜色。
然后开始学习打谱。软件自带的User Guide很好用,大多数东西都说得很清楚。然而写完两句想听一下的时候,遇到了前所未有的困难。
## Playback与需要的许多插件
我找到了playback窗口,但是点击播放的时候虽然显示在一个小节一个小节地走,却完全没有声音。升级到PopOS 20.10以后,我的声卡其实经常断断续续不能识别(Zoom的时候别提有多乌龙了…)。于是我最开始以为是声卡的老毛病犯了。今天早上先花了半个小时确定声卡没有问题,然后才开始慢慢查MIDI播放的问题。
首先在AskUbuntu之类的网站上能看到许多类似的问题,但都是2014,甚至2008年左右提出的。稍微试了一下,好像也完全不能解决我的问题。后来发现Frescobaldi的wiki上专门有[一篇](https://github.com/frescobaldi/frescobaldi/wiki/MIDI-playback-on-Linux)讲MIDI Playback的:于是我也去装了libportmidi0,fluidsynth,qsynth和timidity(均为`sudo apt-get install`)。它们之间的关系:
> QSynth is a GUI of FluidSynth. They are both more actively maintained than timidity. (Note: the wiki page seems to say that either FluidSynth or Timidity would work, but based on [this](https://www.reddit.com/r/Ubuntu/comments/255lrj/frescobaldi_midi_player/) and what ended up working for me, both are probably necessary.)
>
> Timidity (and probably FluidSynth) is an external midi synthesizer.
接着要把他们启动起来。
```bash
cp /usr/share/applications/qsynth.desktop ~/.config/autostart
```
这行可以让QSynth开机的时候自动启动。(后来想想,我并不想在下次声卡不识别、反复重启修声卡驱动的时候每次都要关QSynth……之后有时间写个脚本让它在我用Frescobaldi之前运行就可以了。)
我最开始以为有QSynth就不需要Timidity了,绕了不少远路。后来发现Timidity也要,所以也要启动它一下。这个稍微有些麻烦了,因为有点兼容性的问题,不过按照[这个](https://askubuntu.com/questions/1237960/how-to-use-timidity-in-ubuntu-18-04)网页所指导的那样。我把相关的部分在这里也存个档:
> To start TiMidity in daemon mode once, you can use the following command:
```
timidity -iA
```
> To do so, write a timidity.service file in ~/.config/systemd/user/ like that one :
```
sudo nano /etc/systemd/user/timidity.service
```
> Add the following lines to timidity.service
```
[Unit]
Description=TiMidity++ Daemon
After=sound.target
[Service]
ExecStart=/usr/bin/timidity -iA -Os
[Install]
WantedBy=default.target
```
> Then enable the service with:
```
sudo systemctl --user enable timidity.service
```
如果直接输入 `sudo /etc/init.d/timidity start` ,会显示 `sudo: /etc/init.d/timidity: command not found`。类似地如果直接输入 `systemctl --user start timidity` 也会显示 `Failed to start timidity.service: Unit timidity.service not found.` 。所以照着上面的方法建立一个`.service` file还是必要的。之后 `systemctl --user start timidity` 就可以成功运行了。最后输入 `timidity -iA`,这个窗口就被这个进程占着了。
然后去调试QSynth。最开始它的log如图一。
我没有意识到这背后的问题,照着这个error message搜了半天……现在点击Setup → Audio。Audio driver那里应该选的是jack。把它改成alsa。然后点击Restart。
现在回到Frescobaldi(可能需要重新打开一下Frescobaldi),再进入设置→ MIDI Settings。
【见图二】
把Player output改成如图所示(可能需要先点击Refresh)。其它的一些接口可能也可以,我之后再试着玩。
然后回到文件,可能需要重新compile一下(Ctrl+M)。之后MIDI Playback就有声音啦~
## 后记
呵呵,现在Export Audio(把MIDI转换成wav)还是会报错,说`Could not start timidity`。我什么时候再继续捉虫吧。
最初想装Linux系统的时候一大犹豫就是Sibelius用不成了。现在我已经欢快地用代码打起了谱。这里再废话几句用了Linux小半年的一些感慨。
曾经听一人说“Linux is great if you don't care about your time”。我最开始开始使用Linux的时候心下还惴惴,但越来越觉得Linux是需要一个学习的过程。长期来看,这样的投资也会回报越来越多,因为长久发展的趋势大概是会对Linux的生态越来越好的,电脑上比较新的、现在还兼容不是很好的配件,到了之后也会越来越支持;而像windows和mac就恰恰相反,Outlook如果有个奇怪的bug就只能祈祷它尽快修复、苹果要是出了新系统并对旧系统停止支持就只能去买新机器。反正我是很享受这一波Mac换M1芯片,我不用继续追求它新发布的产品了。
所以我直到我的电脑下次声卡坏掉之前都是很满意的。
另:买新电脑其实并不是一个很好的换Linux的契机,因为顶配的一些东西太新了(要不就是太proprietary了),会不支持,还搜不到这个解决方案。我要是当时知道这个,可能能省去现在的许多麻烦。不过长远看来,这也算是投资吧。
## 其它
不记得是在安装jack还是Qsynth的时候了,有一个东西会要求确认给不给它realtime priority。我只查到一个[这个](https://askubuntu.com/questions/29318/can-it-be-harmful-to-grant-jackd-realtime-priority),当时就给了(尤其是我的电脑也只有我一个人用),后来有看到有人说其实不用给也不应该给的。总之这个就留作一个亟待解决的问题了,万一未来的某一天我电脑因为这个死机了的话,我会回来更新的。
围棋煮酒到天明。