カテゴリー: 日記

夏のイベント

この夏の怒涛のイベント群が終わったので、記録を兼ねて久々に日記を書いてみようと思いました。

テラ

まず最初は8月の11日にあった、恩師の研究室のイベント「テラ」
このイベントは瀬戸内トリエンナーレの協賛イベントで、香川県のホールで複合表現(音楽、映像、演技)を用いたコンサートとオペラの中間のような作品でした。
僕はこの作品に舞台監督という名目で参加させていただいたのですが、あまり舞台監督の事が解っていなかったのもあって、進行にちょっと詳しいステージマネージャー的な立ち回りでした。

女木島に久しぶりに1泊して、本番の前日は香川のホテルに泊まりました。
後輩たちと先生方の作品を字幕やセリフで繋いで一連のストーリーに仕立てていたのですが、構成といいそれぞれの作品の質といいとても良い物になっていました。

まにまに合宿

その後8月13日に、所属している「まにまに」という
・女優(朗読・演技担当)
・デザイナ(ストーリー・舞台構成担当)
・デザイナ(絵・時々演技担当)
・自分(音楽・プログラミング担当)
で構成されている不思議な団体で合宿を行って、海を観たりなどしました。蒲郡市の?ファンタジー館がとっても良かった。
%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab_000

森羅

そして9月に入ると母校である愛知県立芸術大学の50周年企画「芸術は森から始まる」という展示企画が始まりました。
その中の「森羅」というコンサートイベントで、「孤独部」のかしやまさんと、かしやまさんの主催する劇団「あたらしいまち」の柳瀬さんと共に、「星を捕る人」という作品を上演させていただきました。
この作品は50周年にちなむ50個のキャンドルライトを使った演出と、惑星の位置から人生における時間軸を把握する「地球暦」というギミックを使った演出を組み合わせた、音楽と朗読と演劇とのちょうど中間を狙った作品でした。
個人的にはかなり上手くいったかな、と思っていますが、映像がないし,
全編ほぼ真っ暗なのでちゃんと映像に残すことが難しい…。
%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab_002
こういうアプリを作って、キャンドルを消すと星が増える→音が増えて曲が華やかになっていく。というギミックを作りました。

WAVE

森羅が終わった2週間後、WAVEという名前の展示が始まりました。
こっちにも作品を出させていただいていて、タイトルは「Composing」
音楽のフレーズが1小節分2パターン提示されて、お客さんに気に入った方を選んで貰う→選ばれた方を繋げていって1曲にするという、僕の好みのメロディーを作るアルゴリズム+お客さんの好み = 僕もお客さんも好きなメロディ?
という仮定に基づいた作品でした。
個人的には技術的なチャレンジが結構あったのですが、そのチャレンジの所為で作品としての仕上がりは中途半端になってしまったかな…という印象でした。が、自分にとってはとても有意義でした。
展示が始まった次の週にはこの展示企画の中でコンサートも行いました。
自分はこのComposingで出来たメロディに伴奏とビジュアルを自動生成したものをつけて流しました。

プラネタリウム

10月の14,15日に、名古屋市科学館にて行われた「宇宙の音、星の音」という特別上映イベントに、コンサートという体で曲を1つ書き、使っていただきました。
アメリカの宇宙探査機voyager1号が惑星間を飛行していくという映像に、ちょっと派手目の冒険活劇っぽい音楽(?)をつけました。
他にも、宇宙に関するデータを可聴化するアイデアがいくつか出ていたので、シリーズ化されてまた関われると嬉しいなぁ。

オアシス21

こちらは結構恒例ですが、今年もオアシス21のライトを使ってイベントを行いました。
今まで通り僕が作ったLEDの発光パターンをシーケンスするアプリに加えて、今年はピアノの音(音程)によってLEDの発行する場所と色をコントロールするアプリも作ったので、その「音→光」という関係性を持った作品群を上演しました。

シーケンサーの動画
カホンの音を光に変換する動画(変換って言っても、リニアな変換じゃなくてトリガーというのが多分正しい)

シーケンサ自体がもう古いバージョンのProcessingで作られていて、重い上に内部のコードが本当に酷い状態なので、そろそろ作り直したいという気持ちもありつつ、どうせならもっと使いやすいものにしたいという欲望があるのでなかなか進まないですよね…(?)

と、いう感じでした!
今年の夏は長かったなぁ。

最後になりましたが、恩師であり半分以上のイベントの企画者である寺井先生と、相談に乗って頂いたり手伝ってくださった大河内先生、かしやまさんと柳瀬さん、名古屋市科学館の毛利さん、まにまにの皆、オアシス21の企画に誘ってくださった水津先生と林先生、トイピアノを貸してくださった萠先輩、在学中の後輩達と関さん、そして同居人にとっても感謝しています。

この感じで行きたいですな。

展示

10月1日~10月9日まで、愛知県立芸術大学の芸術資料館にて展示をさせていただいております。

僕は
「音楽を1小節自動生成して、観覧者にAパターンとBパターンのうち好きな方を選んでもらう→楽曲に加える」
という方法でどんどん音楽が出来ていく、という作品です。

音楽と言っても単旋律の簡単なメロディだけなので、全然アルゴリズムとしては大したことはやっていません。
ただ、今回は初めてScalaで作ったまともな?プログラムなので、個人的には結構大きな意義があって、結構収穫があったなぁという感じでした。

特に、後悔している点があって、それはListを諦めてArrayを使ってしまった事と、Int4つ持ってるデータ構造に、classではなくIntのArrayを使ってしまった事。
そもそも今考えればそのオブジェクトのListで全然良かったのに、何故あのときIntのArrayのArrayを選択してしまったのか?
そんな構造で作り始めてしまったがために、後半ものすごく苦労することになり、結果、生産性が低く、可読性が低く、応用力が全くない、三拍子揃ったゴミみたいなプログラムになってしまった……。

まあただ、Processingをライブラ的に利用したScalaでもちゃんとjarにビルドして普通に動かすことが出来る事がわかったし、Scalaの素敵さは身に沁みたし、やってみてよかったなあという感じ。(p5用のライブラリもちゃんと動いた)
展示の質は下がっちゃったけど。
(多分普通にProcessingでやってれば3倍位早く出来て、1.5倍位いいものが出来ていたとは思う。自動伴奏も普通に作れたかも。1つ何かする毎に、調べたり考えたりにとんでもない時間を費やした…。)

お時間あれば曲の続きを作りに来てください!

今日、Composer CloudのHollywood Stringsを使用して曲を作っていたところ、ストリングスの駆け上がりで必ず音が伸ばしっぱなしになる症状が出た。
ちなみに環境は64bit windowsのcubase 8.5で、Play.vstは対応しているはず。

原因はバッファサイズ

で、色々調べた結果、どうもAsioのバッファサイズを2048にしているとこの症状が出る、と言っている人が某巨大掲示板に散見されたので、バッファサイズを減らしてみたら症状が出なくなった。
理由はわからないのでちょっと気持ち悪いけれど、同じ症状で困っている人も居るかもしれないし、ここに書いておく。

昔はSpdeとかいうのがあったっぽいのですが、今ProcessingをScalaから使おうと思うと、普通にライブラリっぽい感じでimportしてあげる必要があるみたい。

1.まず、
processing-3.x.x/core/library/core.jar
Processingのフォルダの中にある、core.jarをExternal Librariesの中にコピーしてあげて、import文をちょっと書いてあげる。

2.シングルトンオブジェクトを普通に作って、def mainの中でPApplet.main(Array[String)(“クラス名”)
として、適当に作ったクラス名を呼び出してあげる。

3.クラスを作って、settings()と、setup()と、draw()をオーバーライドする。
settingsにはレンダラの指定だけしてあげる。
レンダラも、FX2Dみたいな短縮名が定義されていないので、レンダラの指定は
JAVA2D なら “processing.awt.PGraphicsJava2D”
P2D なら “processing.opengl.PGraphics2D”
P3D なら “processing.opengl.PGraphics3D”

としてやってあげるか、PConstants.FX2Dのように定義されているクラスを指定して呼び出してあげるようにすればOK。
下記のソースは、

Processing from Java and Scala, 3-steps tutorial (2016)


このサイトを参考にさせて貰って、fullScreenでFX2Dモードのレンダラを使えるようにちょっとだけ書き換えました。
深く考えずにテンプレとして使って良いと思います。

[code lang=”scala”]

import processing.core._
object Composing {
def main(args: Array[String]) {
PApplet.main(Array[String]("ScalaProcessingExample"))
}
}

class ScalaProcessingExample extends PApplet {
override def settings() {
fullScreen("processing.javafx.PGraphicsFX2D")

}

override def setup() {
background(0)
smooth()
}

override def draw() {
stroke(255)
if (mousePressed) {
line(mouseX, mouseY, pmouseX, pmouseY)

}
}
}[/code]

別のクラスを作って、その中でProcessingのメソッドを使いたい場合には

[code lang=”scala”]
import processing.core._
object Composing {
def main(args: Array[String]) {
PApplet.main(Array[String]("ScalaProcessingExample"))
}
}

class ScalaProcessingExample extends PApplet {

override def settings() {
fullScreen("processing.javafx.PGraphicsFX2D")

}

override def setup() {
background(0)
}

override def draw() {
stroke(255)

val b = new Balls(10,10)
b.dispBall()
}

class Balls(var x: Float,var y: Float ) {

def dispBall(){
ellipse(100,100,50,50)
}

}
}
[/code]

こんな感じに、PAppletを継承したクラス内にクラス内クラスとして作成する必要があるみたい。
別のclassファイルを作って、そこでPAppletを継承した別のクラスを作って呼び出してもエラーが起きてしまうので注意。

ただ、僕はまだモナドをあんまりちゃんと理解できないので、scalaで使えるようになってもこの手のオブジェクトの中身はvarだらけになるだろうし、状態も持ちまくりだしで、しばらくは「ちょっと便利なprocessing」的なノリを脱せない感…。

勉強せねば。

作業日

今日は1日自由に作業出来る奇跡のような日だったのだけど、頓挫。
結局上手くやる方法が見つからず、うじうじ考えた挙句、最終的に力技でなんとかする、という結論に。
もう少し具体的に言えば、Processingのプログラムを動画に書きだしてナレーションを当てはめようとしていたのだけど、諸々どうやっても時間がかかりすぎる上にあまり効果的でない気がして、結局Processingの画面を出来る限り自由にコントロール出来るようにした上で、ナレーションを手で出す感じにした。

Scalaの勉強もまあまあしている。(これやってる時が一番楽しい)
答え見まくってますけどね!
7回目にすらすら回答できればええんや…。