【MIDI/音ゲー】Linux Mint/UbuntuのWineHQでWindowsアプリSynthesiaを起動する

Linux Mint 20.3 / Ubuntu Studio 20.04 でMIDIを鳴らすことができたのでSynthesiaで遊びます。ついでに、Synthesiaを簡単に起動できるようシェルスクリプトを作成し、シンボリックリンク（ショートカット）をデスクトップにおいてみました。

# 短く言うと

:::note info
「WineHQ（Synthesia）」→「TiMidity++」→「PulseAudio」→「ALSA」→発音
となるように設定します。
:::

[「Download Synthesia」][21]からzip版のSynthesiaをダウンロードして/opt ディレクトリに展開します。

[21]: https://synthesiagame.com/download

次にTiMidity++がWineHQ(Synthesia)からのMIDIデータを受け取れるように起動/設定します。

```:Terminal
timidity -iAD -B2,8 -Os1l -A100 -s 44100 -x'soundfont /usr/share/sounds/sf2/default-GM.sf2 order=1'
```
WineHQでSynthesiaを起動します。

```:Terminal
wine /opt/Synthesia-10.8/Synthesia.exe 
```

※ちなみに、SynthesiaをWineHQから削除するには

```:Terminal
wine uninstaller 
```


# はじめに

※省略

# 今回の環境

* NEC LaVie LS350/A
* Linux Mint 20.3 Cinnamon または Ubuntu Studio 20.04.4
* WineHQ 7.0
[「【WineHQ】Linux Mint 20.3とUbuntu Studio 20.04にターミナルでWineHQをインストール/日本語表示」][41]に従ってインストール済

[41]: https://qiita.com/johnnystg/items/fc386b786e5f58a4f0e8

* TiMidity++
[「【Linuxで音ゲーを実行#5】WineHQでMIDI出力アプリがフリーズ/音が出なかった」][42]に従ってインストール済

[42]: https://qiita.com/johnnystg/items/891ad5e9d85627b37a8e


# Synthesiaをダウンロード

:::note info
zip版「Synthesia 10.8 for Windows(zip package）」をダウンロードします。
:::

:::note warn
今回はinstaller版を使用しません。
:::

※installer版で自動生成される「Synthesia.desktop[^51]」のExecが複雑すぎるため。

[^51]: [Desktop Entry]
Name=Synthesia
Exec=env WINEPREFIX="/home/piano/.wine" wine C:\\\\users\\\\Public\\\\Desktop\\\\Synthesia.lnk
Type=Application
StartupNotify=true
Path=/home/piano/.wine/dosdevices/c:/Program Files (x86)/Synthesia
Icon=84DD_Synthesia.0
StartupWMClass=synthesia.exe


[「Download Synthesia」][52]からzip版のSynthesia（Synthesia-10.8.zip）をダウンロードして/opt ディレクトリに展開します。

[52]: https://synthesiagame.com/download

```:Terminal
sudo unzip ~/Downloads/Synthesia-10.8.zip -d /opt/
```

lsコマンドを使うと以下のように表示されます。

```:Terminal
ls /opt/Synthesia-10.8/
```
```
Synthesia.exe  bassmidi.dll  readme.html      vcruntime140.dll
bass.dll       msvcp140.dll  vccorlib140.dll  win10-midi.dll
```

# TiMidity++を起動

:::note info
コマンドを用い、TiMidity++をデーモンモードで起動/設定します。
:::

以下のコマンドでTiMidity++を起動/設定し、WineHQ（Synthesia）からのMIDIデータを受け取れるようにします。

```:Terminal
timidity -iAD -B2,8 -Os1l -A100 -s 44100 -x'soundfont /usr/share/sounds/sf2/default-GM.sf2 order=1'
```
# WineHQでSynthesiaを起動

:::note info
コマンドを用い、WineHQでSynthesiaを起動します。
:::

```:Terminal
wine /opt/Synthesia-10.8/Synthesia.exe 
```

# シェルスクリプトを作成

:::note info
「TiMidity++起動」→「Synthesia起動」をシェルスクリプトにします。
:::
:::note info
完成したシェルスクリプトを自動開始させれば、ログイン直後にSynthesiaが立ち上がります。
:::

[「サービス・プロセスの起動確認するシェルスクリプト」][81]を参考にして作ったシェルスクリプト[^82]を修正して「play_synthesia.sh」を作成します。

[81]: https://ex1.m-yabe.com/archives/3263

[^82]: https://qiita.com/johnnystg/items/891ad5e9d85627b37a8e#%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B

```:Terminal
sudo vi /opt/Synthesia-10.8/play_synthesia.sh
```
```
#!/bin/bash

ProcessName=timidity
SynthVersion=10.8
MIDIVolume=100
# MIDIVolume=800,100a

# timidity++が起動していない→起動 / 起動している→そのまま次に進む

count=`ps -ef | grep $ProcessName | grep -v grep | wc -l`
if [ $count = 0 ]; then
  echo "!!!!!!!!!!!!!!!!!"
  echo "$ProcessName is dead."
  echo "!!!!!!!!!!!!!!!!!"
  timidity -iAD -B2,8 -Os1l -A$MIDIVolume -s 44100 -x'soundfont /usr/share/sounds/sf2/default-GM.sf2 order=1'

else
  echo "$ProcessName is alive."
fi

# Synthesiaを起動する

wine /opt/Synthesia-$SynthVersion/Synthesia.exe

```

作成したファイルを実行可能にします。

```:Terminal
sudo chmod 755 /opt/Synthesia-10.8/play_synthesia.sh
```

完成したシェルスクリプトを実行します。

```:Terminal
sh /opt/Synthesia-10.8/play_synthesia.sh
```

ログイン時に自動開始させるには、
* Linux Mint の場合：「設定」→「自動開始させるアプリ」→「＋」→「カスタムコマンド」→
* Ubuntu Studio の場合：「設定」→「セッションと起動」→「自動開始アプリケーション」→「＋追加」→「アプリケーションの追加」→「コマンド」→

```:「コマンド」
/opt/Synthesia-10.8/play_synthesia.sh
```


# デスクトップエントリを作成

:::note info
デスクトップにデスクトップエントリ（シンボリックリンク / ショートカット）を作ります。
:::
:::note warn
あらかじめ「Synthesia.png」を/opt/Synthesia-10.8 に置いてください。
:::

~/Download/ディレクトリにSynthesia.pngがあったとして、

```:Terminal
sudo cp ~/Downloads/Synthesia.png /opt/Synthesia-10.8/
```

```:Terminal
vi ~/play_synthesia_sh.desktop
```
```
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=true
Exec=/opt/Synthesia-10.8/play_synthesia.sh
Name=Synthesia
Comment=start Timidity++ daemon and Synthesia10.8
Icon=/opt/Synthesia-10.8/Synthesia.png
Terminal=true
Categories=Audio;AudioVideo;Midi;
Keywords=Audio;MIDI;ALSA;timidity;Synthesia;
```
```:Terminal
chmod 755 ~/play_synthesia_sh.desktop
```
```:Terminal
mv ~/play_synthesia_sh.desktop ~/Desktop/
```

さらに、デスクトップのアイコンをランチャーに移動するには

```:Terminal
mv ~/Desktop/play_synthesia_sh.desktop ~/.local/share/applications/
```


# おわりに

※省略