UbuntuにTidalCycles + vim-tidalを導入し、Vim練習環境にする

概要

まずTidalCyclesは何かというと、リアルタイムにコードを書いて音楽を生成するという、ライブコーディングをするための環境です。また、AtomやVSCode等のエディタでコードを入力していくスタイルなのですが、vim-tidalというプラグインを導入することで、Vim環境でライブコーディングができるようです。

そこで、実践Vimでインプットした操作テクニックを、TidalCycles + vim-tidal環境で音楽を作りながらアウトプットすれば、楽しみながらテクニックが身に付くので、いいことだらけなのでは?と気づいたのです。

そういうわけで、今回はUbuntuにTidalCycles + vim-tidal環境を構築していきます。

環境

TidalCylesで音を出すためには、以下のプログラムが必要です。

Gitgithubから色々とダウンロードするため。
HaskellTidalCyclesは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-installcabalというコマンドラインツールを提供
cabal = Haskellのパッケージシステム
jackd2JACKサウンドサーバを提供
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

Copied title and URL