2017年7月16日日曜日

clojureで曲が作れそうなovertoneを動かしてみました


overtoneとは、clojureで動く、ライブコーディング可能な音に関するライブラリです。
wavファイルを作るにあたり、いくつか詰まりどころがあったので、メモを兼ねて共有します。

使った環境

  • PC (Ubuntu 16.10)
  • leininnge 2.7.1

プロジェクトの準備

プロジェクトを作って、project.cljのdependenciesにovertoneを追加します。
lein new audio-practice

project.clj
[overtone "0.10.1"]

project.cljにovertoneを追加できたら、lein depsでovertoneをダウンロードします。
lein deps

注意
lein depsで取得しようとするscsynthとscsynth-extraのダウンロードに凄く(30分位)時間がかかります。
lein depsで止まっているように見えますが、裏側では動いていることがあります。(自分の場合はそうでした。)
進捗を知りたい方は、m2のダウンロード先のディレクトリをlsで参照すると、止まっていないことが分かって、安心して待てます。
ls -la ~/.m2/repository/overtone/scsynth/3.5.7.0
ls -la ~/.m2/repository/overtone/scsynth-extras/3.5.7.0/

overtone実行の準備

overtoneのプロジェクトを作り、leplを立ち上げて(use 'overtone.live)を実行してみます。
すると、自分の環境では下記のエラーが出てovertoneが立ち上がらなかったり、立ち上がっても音が出なかったりしました。
これは、overtoneが音に関するライブラリなので、OSの設定が必要なためです。
*** ERROR: open directory failed '/home/asuki/.local/share/SuperCollider/synthdefs'
Cannot connect to server socket err = そのようなファイルやディレクトリはありません
Cannot connect to server request channel
Cannot connect to server socket err = そのようなファイルやディレクトリはありません
Cannot connect to server request channel
Cannot connect to server socket err = そのようなファイルやディレクトリはありません
Cannot connect to server request channel
Cannot connect to server socket err = そのようなファイルやディレクトリはありません
Cannot connect to server request channel
Cannot connect to server socket err = そのようなファイルやディレクトリはありません
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for 4294967295, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for 4294967295, skipping unlock
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f0995aba0dc, pid=3974, tid=0x00007f09882ef700
#
# JRE version: OpenJDK Runtime Environment (8.0_131-b11) (build 1.8.0_131-8u131-b11-0ubuntu1.16.10.2-b11)
# Java VM: OpenJDK 64-Bit Server VM (25.131-b11 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libscsynth.so+0x220dc] SC_UdpInPort::SC_UdpInPort(World*, int)+0x9c
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/asuki/gitprojects/audio-video-practice/hs_err_pid3974.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
could not initialize audio.
SocketException The transport's socket appears to have lost its connection to the nREPL server

ubuntu16.04でovertoneを使うために、自分は下記の対応を行いました。
関連するプログラムをインストール
sudo apt install supercollider-dev alsaplayer-jack pluseaudio-module-jack

audio関連の機能が使えるように、自分をaudioグループに追加
sudo adduser ${USER} audio

pulseaudioの設定を変更
overtoneで使うjackdは、音量調節を行うpulseaudioと共存できないらしいです。
そのため、pulseaudioを止めてjackdを起動します。
pulseaudio --kill
jackd -R -d alsa -d hw:1

以上の設定でovertoneが動くと思います。

overtoneを実行

replで起動して、演奏をwavファイルに保存します。
lein repl

(use 'overtone.live)
(use 'overtone.inst.piano)
(recording-start "overtone.wav")
(piano)
(piano 70)
(piano 80)
(recording-stop)

実際の音はこちらです。

overtone実行後

overtoneでの試行錯誤が終わったら下記のコマンドでpulseaudioを起動します。
pulseaudio --start

これをしないと、PCのボリューム制御ができないままになります。

まとめ

scsynthのダウンロードに時間がかかったり、OSのオーディオ設定が必要でしたが、overtoneを動かしてwavファイルを作れました。
sonic piのように音を変化させる方法をまだ見つけられてないので、「新しい音を作る」ことは出来ないのかもしれませんが、既に作られている音源(wavファイルなど)を組み合わせて音楽を作ることは出来そうです。

参考

Overtone, clojure, jackd, alsa in ubuntu 14.10

0 件のコメント :