今日、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回目にすらすら回答できればええんや…。

curry化

今日から少しずつ、FP in Scalaを最初からもう一度読み進めている。
勉強会は正直全然ついていけていないのだけど、勉強会が最後まで読み進めてしまう前に追いつきたい所存であります。

とりあえずパートⅠの第Ⅱ章まではなんとか理解。
この辺は前もぼんやり理解出来ていたように思っていたけど、今回はきっちりと。

FP in Scala Exercise 2.3〜2.5

[code lang=”scala”]
import java.awt.Robot
import java.awt.print.Book
object Lesson {
def main(args: Array[String]) {
//curry化
//A,Bの2つの型の値を受け取ってCを返す関数を引数に、Aの型の引数を受け取って「Bを引数にCを返す関数」を返す。(とシグネチャが宣言している)
//実際には、A型のaの値を受けとると、「B型のbの値を受け取って、最初に受け取った『A型のaの値とB型のbの値を引数受け取ってC型を返す関数』に適用させたものを返す関数」を返す。
def curry[A, B, C](f: (A, B) => C) : A => (B => C) = a => b => f(a, b)

val func = curry((x: Int , y: Float) => x.toString() + y.toString())
val func2 = func(10)
val func3 = func2(10.0f)
println(func3)

}

def uncurry[A, B, C](f: A => B => C) : (A, B) => C = (a, b) => f(a)(b)

def compose[A, B, C](f: B => C, g: A => B) : A => C = a => f(g(a))
}[/code]

そもそも前にこの辺読んだ時には型の事もオブジェクト指向の事もぼんやりとしか解っていなかったし、高階関数の事も微妙だったのでcurry化自体は「なんとなく理解できていたつもり」だったけど、それ以前の事がぼやぼやだった。
今の所順調なので、このペースをキープしたいけど、いつまでもつかな…?

収録

今日は、今度プラネタリウムで上映していただく曲の断片を作ったり、17日のための収録に行ったりした。

未だにCubase5を使っていたら、(まずそれがおかしいのだけど)、windows10にきちんと対応しなくなっていて、散々迷った末にCubase 8.5を購入した。
EastWestのHollywood系音源を使っているのだけど(composer cloudでね)、最初リズムが崩れるのはその所為だと思い込んでいて、タイミングをいじったり色々やっていたのだけど、Cubase側のバグ(というかwindows10に未対応)だと解って終了。もっと早く確認しておくべきだった。
その他にも、音量メータが動かないのと、インサート周りのGUIが動かなかった。
痛い出費ではあるけど、まあ必要経費…。

その後、かしやまさんとさくらちゃんと共に栄の某練習スタジオで収録を行おうとしたのだけど、音漏れがひどすぎて40分くらいで離脱して、結局かしやまさんのお宅で収録した。
もうばっちり何の曲かわかるくらいに、隣のスタジオで練習していたレッチリの曲が録音にまでのっていた。逆にすごい。個人宅のほうが静か。

ここのところ時々scalaの勉強をしていて、勉強と言っても、そもそもあんまりプログラミングの事をよくわかっていないので(こんなサイト作っておいてアレだけど)、まず前提条件をきちんとしておこうと思って

これを読んだ。
とってもライトな感じの日本語でオブジェクト指向の部分だけ書かれた電子書籍で、もやっとしていた部分がそこそこクリアになった。
オブジェクト指向の本は後何冊か、もうちょっと高度なやつを読まないとと思った。
次に、同じ感じでこれも読んだ。

全体的にめちゃめちゃ優しい感じなので、ほぼ知っている事をもう一度読んでいる感じだったけど、これまたちょっと知らなかった事もあったりして良かった。
FP in Scalaとかコップ本とかがちょっと読みやすくなった感じ。コンパニオンオブジェクトとかのきちんとした意味解ってなかったんだなぁ…と思った。
師は良書を7度読めと仰ったので、この辺は寄り道で勉強という感じではないかも知れないけど、まあ読み物として面白かったし良しかなと。

あんまり良くわかってなくて不便なので、次はDockerとデータベース系の本をいくつかちゃんと読みたいのだけど、FP in Scalaをちゃんと理解してから…とか言ってると永遠に読めなさそうなので、またちょっとずつ読み進めたい。