SuperCollider + FoxDot のセットアップ(ubuttu20.04)

# はじめに

今日は音関係のことで、SuperCollider をインストールしたのでメモ。
自分は何をしたいのかわからないが、とりあえず、

- 演奏を録音したい
- 自作自演のピアノ演奏しながら、ドラムとか流したい

というのでまぁ、いじってみるか、ということに。かなり飛躍があるかな。

# インストールした

半日かかりでしたが、できたのでメモ。環境は Linux Ubuntu20.04 (古いVAIO)です。

- SupperCollider
- FoxDot

### FotDot

これはpip でなんの問題もなくインストールされました。

https://foxdot.org/installation/

あとで tkinker がないと言われたので、これも入れました。

```
$ sudo apt install python3-tk
```

### SuperCollider

ソースを持ってきて、cmake でbuildするも、いろいろ足りなくて怒られたので、いろいろインストールしたら最終的に動きました。

https://supercollider.github.io/

Linux Current Version 3.12.12 source tarball for Linux を持ってきました。

- Qt5 のインストール

これはソースファイルの README_LINUX.md にも書いてありますが、必要なので入れます。最初、何も入っていませんでした。

```
$ apt-cache policy qt5-default 
qt5-default:
  インストールされているバージョン: (なし)
  候補:               5.12.8+dfsg-0ubuntu2.1
  バージョンテーブル:
     5.12.8+dfsg-0ubuntu2.1 500
        500 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages
     5.12.8+dfsg-0ubuntu1 500
        500 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
```

そこで、オリャー、と全部入れました。確かREADMEに書いてあったとおりにしています。

```
sudo apt-get install qt5-default qt5-qmake qttools5-dev qttools5-dev-tools qtdeclarative5-dev qtwebengine5-dev libqt5svg5-
  dev libqt5websockets5-dev
```

その結果、無事にQTがインストールされました。

```
$ apt-cache policy qt5-default 
qt5-default:
  インストールされているバージョン: 5.12.8+dfsg-0ubuntu2.1
  候補:               5.12.8+dfsg-0ubuntu2.1
  バージョンテーブル:
 *** 5.12.8+dfsg-0ubuntu2.1 500
        500 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages
        100 /var/lib/dpkg/status
     5.12.8+dfsg-0ubuntu1 500
        500 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
```

- cmake でビルド

ソースをみると、CMakeList.txt があるので、いつものように

```
$ mkdir tmpdir
$ cd tmpdir
$ cmake ..
$ make
$ sudo make install
```

とするのですが、いろいろなくていれます。以下、順に対処しました。

```
$ sudo apt install libsndfile-dev
$ sudo apt install libxt-dev
$ sudo apt install -y libjack-dev
$ sudo apt-get install libasound2-dev
$ sudo apt install libqt5websockets5-dev
```

ときに

```
-- Building the Qt IDE
CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:28 (find_package):
  Could not find a package configuration file provided by "Qt5WebSockets"
  with any of the following names:

    Qt5WebSocketsConfig.cmake
    qt5websockets-config.cmake

  Add the installation prefix of "Qt5WebSockets" to CMAKE_PREFIX_PATH or set
  "Qt5WebSockets_DIR" to a directory containing one of the above files.  If
  "Qt5WebSockets" provides a separate development package or SDK, be sure it
  has been installed.
```
の
```
$ sudo apt install apt-file
$ sudo apt-file update
$ sudo apt-file search Qt5WebSocketsConfig.cmake
$ sudo apt-file search Qt5WebSocketsConfig.cmake
libqt5websockets5-dev: /usr/lib/x86_64-linux-gnu/cmake/Qt5WebSockets/Qt5WebSocketsConfig.cmake
```

で場所を調べることはできました。が、結局は上記のapt install 作戦ですべて対応できたので CMAKE_PREFIX_PATHの設定は使いませんでした。

- SuperCollider 起動

```
$ scide
```

で起動しました。やったと思ったのですが、、、、。

- audio デバイスのライルタイム実行優先度の設定

scide 起動後に、デバイスについてのエラーが出でいた。権限の問題らしい。
（メッセージをメモし忘れた、さんざんググったのに）

```
$ sudo apt-get install -y libjack-jackd2-dev
$ sudo apt install qjackctl
```

で/etc/security/limits.d/audio.conf を作成して、リアルタイム実行優先度
の設定を有効にするか、と聞かれるので「はい」を選択しました。それでも、
音が鳴りません。

いろいろ書かれているが、jack2のためにとりあえずreboot したら、エラーが
出なくなりました。

https://github.com/Arkq/bluez-alsa/issues/369
https://note.com/foxdot_nakaji/n/neba6f98d2d71
https://ymotongpoo.hatenablog.com/entry/2018/05/20/214019

```$ qjackctl```で起動されるGUIでデバイスの設定を確認できます。


- 音を出力するサウンドカードを指定する

それでSuperCollider を起動してFoxDot.startとし、FoxDotを起動すると、ま
たしてもエラーがSuperCollider の方で出る。出力するデバイスを指定するこ
とが必要だったらしい。

```
$ cat /proc/asound/cards
 0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                      HDA Intel HDMI at 0xb2530000 irq 48
 1 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xb2534000 irq 49
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: HDMI [HDA Intel HDMI], デバイス 3: HDMI 0 [HDMI 0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: HDMI [HDA Intel HDMI], デバイス 7: HDMI 1 [HDMI 1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: HDMI [HDA Intel HDMI], デバイス 8: HDMI 2 [HDMI 2]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: HDMI [HDA Intel HDMI], デバイス 9: HDMI 3 [HDMI 3]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: HDMI [HDA Intel HDMI], デバイス 10: HDMI 4 [HDMI 4]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: PCH [HDA Intel PCH], デバイス 0: ALC286 Analog [ALC286 Analog]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
```

２つのデバイスがある。PCHを使いたい。HDMIではなくて。

```
$  jackd -R -d alsa -d hw:1
jackdmp 1.9.12
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2017 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
no message buffer overruns
no message buffer overruns
no message buffer overruns
JACK server starting in realtime mode with priority 10
self-connect-mode is "Don't restrict self connect requests"
audio_reservation_init
Acquire audio card Audio1
creating alsa driver ... hw:1|hw:1|1024|2|48000|0|0|nomon|swmeter|-|32bit
configuring for 48000Hz, period = 1024 frames (21.3 ms), buffer = 2 periods
ALSA: final selected sample format for capture: 32bit integer little-endian
ALSA: use 2 periods for capture
ALSA: final selected sample format for playback: 32bit integer little-endian
ALSA: use 2 periods for playback
JackEngine::XRun: client = SuperCollider was not finished, state = Running
```

この状態のまま、

```
$ scide &
```

でSuperCollider を起動します。そこで、

```
FoxDot.start
```
を行います。エラーができませんでした。


### 音を鳴らす

いざ、```python3 -m FoxDot```でFoxDotを起動し、FoxDotのコンソールで

```
Clock.bpm = 60
p1 >> pluck()
```

と入れると、音がなりました。ヤッター！！^^)/

これ、何に使えるのだろう。。。

# まとめ

Linux Ubuntu20.04 でSuperCollider + FoxDot で音を鳴らすことができた。
録音、リアルタイムのインタラクションでなにか使えるかなー。。


といらえず、古いVAIO上のUbuntu20.04 で動いたのだが、これは、RasPiや
Windows ノートパソコンで使いたいな。設定が面倒そうだ。。。
(2022/04/17)