概要
まずTidalCyclesは何かというと、リアルタイムにコードを書いて音楽を生成するという、ライブコーディングをするための環境です。また、AtomやVSCode等のエディタでコードを入力していくスタイルなのですが、vim-tidalというプラグインを導入することで、Vim環境でライブコーディングができるようです。
そこで、実践Vimでインプットした操作テクニックを、TidalCycles + vim-tidal環境で音楽を作りながらアウトプットすれば、楽しみながらテクニックが身に付くので、いいことだらけなのでは?と気づいたのです。
そういうわけで、今回はUbuntuにTidalCycles + vim-tidal環境を構築していきます。
環境
TidalCylesで音を出すためには、以下のプログラムが必要です。
Git | githubから色々とダウンロードするため。 |
Haskell | TidalCyclesはHaskellで実装されているため。 |
TidalCycles | テキスト形式でリズムパターンを生成する。 SuperColliderと連携して音が生成される。 |
SuperCollider | 音響合成用プログラミング環境&言語。 |
sc3-plugin | 使えるシンセの音が増える(必須ではなく推奨)。 |
SuperDirt | シンセ, 効果音などがプリセットされているサンプラー。 Haskellから呼び出されてサウンドを生成。 |
Editor + Tidal用Plugin | コードの入力インターフェースとして使用するため。 今回はVim。 |
ここからの手順は、基本Linux installation – TidalCycles userbaseを参考に進めていますが、英語なので自分なりに追記しながらまとめていきます。
前提条件
これから進めていくにあたって、以下の基本的なプログラムをインストールしておきます。gitは自分の場合すでにインストールしていたので省きます。
$ sudo apt-get install build-essential cabal-install git jackd2
パッケージ | 説明 |
build-essential | ビルドする際に不可欠なツールを提供 |
cabal-install | cabalというコマンドラインツールを提供 cabal = Haskellのパッケージシステム |
jackd2 | JACKサウンドサーバを提供 TidalとDirtの連携に必要 |
SuperCollider
まず、githubからスクリプトをダウンロードし、実行することでSuperColliderのビルドが完了します。
$ git clone https://github.com/lvm/build-supercollider
$ cd build-supercollider
$ sh build-supercollider.sh
$ sh build-sc3-plugins.sh
あまりにもさくっと終わったので、せっかくなのでスクリプトの中身をみて、何をしているのか自分なりにまとめました。
$ less build-supercollider.sh
#!/bin/sh
# 変数定義
INSTALL_DIR=/tmp
SUPERCOLLIDER_VER=3.11
SUPERCOLLIDER_DIR=$INSTALL_DIR/supercollider
SUPERCOLLIDER_BUILD_DIR=$SUPERCOLLIDER_DIR/build
# パッケージ一覧を更新
sudo apt update
# これからビルドするにあたって必要なライブラリ等をインストール
sudo apt install -yq \
build-essential pkg-config cmake subversion git \
libjack-jackd2-dev libudev-dev libsndfile1-dev libasound2-dev \
libavahi-client-dev libicu-dev libreadline6-dev libfftw3-dev \
libxt-dev libcwiid-dev libqt5webkit5-dev libqt5sensors5-dev \
qt5-default qt5-qmake qttools5-dev qttools5-dev-tools \
qtdeclarative5-dev qtpositioning5-dev libqt5opengl5-dev \
qtwebengine5-dev libqt5svg5-dev libqt5websockets5-dev emacs
# /tmp/supercolliderディレクトリの作成
mkdir -p $SUPERCOLLIDER_DIR
# SuperColliderのソースをダウンロード
git clone --recursive --branch $SUPERCOLLIDER_VER \
https://github.com/supercollider/supercollider.git $SUPERCOLLIDER_DIR
# ビルドを行うディレクトリの作成
mkdir -p $SUPERCOLLIDER_BUILD_DIR
# ビルドしていく
cd $SUPERCOLLIDER_BUILD_DIR && \
cmake -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/ \
-DBUILD_TESTING=OFF -DSC_ED=OFF -DSC_EL=OFF \
-DSC_VIM=ON -DSC_IDE=ON .. && \
make -j4 && \
sudo make install && \
sudo ldconfig
$ less build-sc3-plugins.sh
#!/bin/sh
# 変数定義
INSTALL_DIR=/tmp
SUPERCOLLIDER_VER=3.10
SC3PLUGINS_DIR=$INSTALL_DIR/sc3-plugins
SC3PLUGINS_BUILD_DIR=$SC3PLUGINS_DIR/build
SC3_DIRECTORY=/usr/local/share/SuperCollider
SC3_EXT_DIRECTORY=/usr/local/share/SuperCollider/Extensions
# パッケージ一覧を更新
sudo apt update
# これからビルドするにあたって必要なライブラリ等をインストール
sudo apt install -yq \
build-essential pkg-config cmake subversion git \
libjack-jackd2-dev libudev-dev libsndfile1-dev libasound2-dev \
libavahi-client-dev libicu-dev libreadline6-dev libfftw3-dev \
libxt-dev libcwiid-dev libqt5webkit5-dev libqt5sensors5-dev \
qt5-default qt5-qmake qttools5-dev qttools5-dev-tools \
qtdeclarative5-dev qtpositioning5-dev
# /tmp/sc3-pluginsディレクトリを作成
mkdir -p $SC3PLUGINS_DIR
# SCのプラグインをインストール
git clone --recursive --branch $SUPERCOLLIDER_VER \
https://github.com/supercollider/sc3-plugins.git $SC3PLUGINS_DIR
# ビルドを実行するディレクトリを作成
mkdir -p $SC3PLUGINS_BUILD_DIR
sudo mkdir -p $SC3_EXT_DIRECTORY
# ビルドしていく
cd $SC3PLUGINS_BUILD_DIR && \
cmake -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/ \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DSC_PATH=/tmp/supercollider/ \
-DBUILD_TESTING=OFF -DQUARKS=ON -DSUPERNOVA=ON .. && \
make -j4 && \
sudo make install && \
sudo ldconfig && \
sudo mv $SC3_DIRECTORY/SC3plugins $SC3_EXT_DIRECTORY/SC3plugins
TidalCycles
では以下のコマンドでTidalCyclesをインストールします。これだけです。
# cabal update
# cabal install tidal
SuperDirt
次にサンプラーのSuperDirtをインストールしていきます。scideでSuperColliderを起動します。
# scide
画面が開いたら、以下のコマンドを左のエディタにコピペします。そして、カーソルを入力した行に合わせ、shift + Enterを押します。
Quarks.checkForUpdates(); Quarks.install("SuperDirt", "v1.0")

すると、インストールが開始されるのですが、完了後に以下のようなエラーが発生していました。
Couldn't set realtime scheduling priority 1: Operation not permitted
Linux installation – TidalCycles userbaseの一番下をみると、このエラーの解決策が書かれていたので、順番に実行していきます。
まずはjackd2の再設定をするようです。
# sudo dpkg-reconfigure jackd2
このコマンドを実行すると以下の画面が表示されます。

先程のエラーは、操作が許可されていないという意味だったので、「はい」を選択し、audioグループに属しているユーザに、リアルタイム優先度での動作を許可させます。
次はそのaudioグループに、実行ユーザ名を追加します。
# sudo addgroup ユーザ名 audio
これでうまく動作すると思ったのですが、エラーログは出たままです。
ここでqjackctlという詳細設定ツールを開き、以下のask ubuntuを参考に設定していきます。
jackd does not work, aplay -l shows two instances of the same card (Ubuntu 13.04, HDMI audio only)

どうやら、出力デバイスが(default)のままだとjackサーバがうまく起動できないとのことで、デフォルトからhw:PCH,0に変更しています。デフォルトだとHDMIの方を見に行っているからなのでしょうか?
なかなか原因が突き止められないので、分かり次第追記していこうと思います。
非常に気になりますがエラーは解消できたので次に進みます。
vim-tidal
vim-tidalプラグインを使用すれば、AtomやVSCode等を使用せずとも、VimからTidalCyclesを動かすことができます。
ここからの手順はvim-tidalに沿って進めています。
tmux
vim-tidalはtmuxという、一つの画面の中に複数のウィンドウを作成するソフトウェアを使用して動作するため、インストールしていきます。
# sudo apt-get install tmux
vim-plug
vim-plugは、プラグインマネージャで、vimrcへの記述が少なくて済むといった利点があります。様々なプラグインマネージャがありますが、手順書ではvim-plugを使用しているため、合わせていこうと思います。
vim-plugのインストール手順はvim-plugを参考にしています。
#curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
自分の場合、~/.vimrcで何も設定していなかったので、新しく作成し、設定を追記していきます。
vim-plugの書き方では、call plug#bigin()とcall plug#end()の間に、取り込みたいプラグインを記述するように決められています。
vim-tidal
このように記述して、一度保存して終了します。
# vi ~/.vimrc
call plug#begin()
Plug 'tidalcycles/vim-tidal'
call plug#end()
:wq!
またviで開き、:PlugInstallと入力し、Enterを押します。
# vi ~/.vimrc
call plug#begin()
Plug 'tidalcycles/vim-tidal'
call plug#end()
:PlugInstall
これによってvim-tidalプラグインがインストールされ、以下の画面が表示されると思います。
Updated. Elapsed time: 2.278117 sec.
[=]
- Finishing ... Done!
- vim-tidal: remote: Total 85 (delta 34), reused 54 (delta 12), pack-reused 0
~
~
最後に、~/.vim/plugged/vim-tidal上で、sudo make installを行うことで、tidalvimコマンドが使用できるようになります。
$ cd ~/.vim/plugged/vim-tidal
$ sudo make install
動作確認
一通り準備が整ったので、動作確認をしていきます。
まずは、sclangコマンドでSuperColliderにアクセスし、sc3>というプロンプトが表示されると思います。そこでSuperDirt.startと実行します。
# sclang
-----------(省略)----------------
*** Welcome to SuperCollider 3.11.2-rc1. *** For help type ctrl-c ctrl-h (Emacs) or :SChelp (vim) or ctrl-U (sced/gedit).
sc3> SuperDirt.start
-----------(省略)---------------
SuperDirt: listening to Tidal on port 57120
これで音を鳴らす準備が整ったので、tidalvimコマンドを入力します。
# tidalvim
すると、このように画面分割されて表示されます。これは上画面にコードを入力していくのですが、そこで入力した内容が下画面のtidalに渡され、SuperColliderと連携し音が鳴るようになっています。

Tutorial – TidalCycles userbaseを参考にし、よくありそうなドラムパターンを作ってみました。
d1 $ sound "[bd:6 sn:2]*2"
d2 $ sound "[~ hh]*4"
実はこれを入力しただけではtidalに入力されないので、d1とd2、それぞれの行でカーソルを合わせ、ctrl + eを押します。これで音が鳴るようになります。
簡単に上のコードを解説すると、bd=バスドラ、sn=スネア, hh=ハイハットというように対応付けられていて、d1とd2の二つの行を同時に鳴らすことができます。詳しくはチュートリアルに書いてあるのでぜひご覧になってください。
これで、TidalCycles + vim-tidal環境の構築は完了です。音を鳴らして楽しみながら、実践Vimのテクニックをアウトプットしていこうと思います。
Comments