RからCsoundで音を鳴らす

NASAの科学者はデータを「聴く」らしいです。

www.nasa.gov

こういうのを一般に「data sonification」というらしいです。

Sonification - Wikipedia, the free encyclopedia

なんかよく分からないけどかっこいいのでやってみたい。ということでパッケージをつくろうとしています。まだほとんど動かないんですけど。。

github.com

背景

自分でつくろうと思う前に調べてみると、それっぽいパッケージはありました。

playitbyr: Data through Sound

このパッケージの手にかかると、なんということでしょう、あの味気なかったirisのデータが、こんないい感じの音に変貌しています!

soundcloud.com

これはすてき。

だがしかし!

そうは問屋が卸しません。playitbyrは、今はCRANにはありません。playitbyr依存しているcsoundパッケージが、最新のCsoundに対応していなくてCRANから削除されてしまったためです。

cran/csound · GitHub

ということで、パッケージをつくろうと思うに至りました。

インストール

※今のところまだLinuxでしか動作を確かめてません。

devtools::install_github("yutannihilation/rsound")

使い方

Csoundは、ざっくりいうとOrchestra(どういう音か)とScore(どういうメロディーか)で成り立っています。

これの記法がさっぱりわからないので使い方を説明できないんですけど(涙)、とりあえずに載ってるのをこのパッケージでやるとどうか、やってみます。

library(rsound)

orc <- 'instr 1
aSin      oscils    0dbfs/4, 440, 0
          out       aSin
endin'

sco <- 'i 1 0 1'

csound(orc, sco)

デフォルト(output = "dac")だと、直接オーディオ出力に音を吐き出すはずです。ファイルに書き出すには、ファイル名を指定します。データ形式は、Csoundが対応しているものなら拡張子から推測してくれます。

csound(orc, sco, output = "/tmp/test1.wav")

ということで、直接文字列を渡せばまあそれは動くわけですが、もうちょっとRでラップしようと試みていて、こんな感じの書き方もできます。

orc <- create_orchestra(instrument = list(
                           create_instrument(aSin = "oscils 0dbfs/4, 440, 0",
                                             outs = "aSin")
                        ))

sco <- create_score(sections = list(
                      list(score_i(1, 0, 1))
                    ))

csound(orc, sco, output = "/tmp/test1.wav")

課題

課題山盛りなんですけど、何よりCsoundの使い方を知らないとこれより先には進めないなーという感じです。たぶんこの辺で挫折して諦めちゃう予感がしたのでブログに書き留めている次第です。。