niszetの日記

10年目エンジニアが最近勉強したことを忘れないようにメモをする

(R進捗)rsound/csound関係進捗(追記)

あまり進捗ないですけど…

csoundと、rsoundと、rcppと…と調べることが広範囲にわたるのであまり進捗がないです。 とりあえず、進んだ分はメモ。

windows版だけかもしれないですが…

先日、rsoundの方でwaveでのファイル出力が出来ることに気づきました。その際、生成したファイルのヘッダにはちゃんとファイルサイズに関する情報が含まれていました。

Csound側で同じコードを実行してもファイルサイズは含まれていなかったで、何かの設定(の抜け)を疑いましたが見つからず。rsoundはcsound APIを呼んでいる形だから、Qtが悪いのでは…と思っています。
RStudio、nvimに続き、CsoundもQtで悩まされるのか…

rsoundで変数を渡す方法

rsoundの方、パラメータをどうやって渡すのかを悩んでいました。csound()は中でas.characterを読んでいるので、その中身を取り出して色々見ていましたが、たとえば周波数440Hzを入力する際に、パラメータとして渡したければ、下記のように`kkk=“=440"とやると良いです。変数名=値の形で与えると、csoundに渡すときに代入文にならないので、=を付けてあげればよいのでした。

orc <- create_orchestra( sr    = 44100,
                         ksmps = 32,
                         nchnls = 2,
                         `0dbfs` = 1,
                         instrument = list(
                             create_instrument(kkk="=440",aout = "vco2 0.5, kkk", outs = "aout, aout"))
)

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

csound_impl(as.character(orc),as.character(sco),paste0("-o","test.wav"))

同様に、これも動きます。

orc <- create_orchestra( sr    = 44100,
                         ksmps = 32,
                         nchnls = 2,
                         `0dbfs` = 1,
                         instrument = list(
                             create_instrument(aout = "vco2 0.5, p4", outs = "aout, aout"))
)

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

csound_impl(as.character(orc),as.character(sco),paste0("-o","test.wav"))

しかしまだ、f系の音が出せていません。うーむ…まだ仕様がわからないのでした。

今後に期待

とりあえず、コードいじらなくてもまだ色々できそうなので、ちょっと試していこうと思っています。csound側の仕様を理解しないといけませんが…。
しかし…日曜にR触ってないで、お料理教室に行った方が…

追記

下記のように記述することで、foscilのサンプルも動きました。力尽きたので、csound()を経由するのはまた後日…?

foscil

eeee <- "0dbfs = 1\nksmps = 32\nnchnls = 2\nsr = 44100\n\ninstr 1\nkcps = 440\nkcar = 1\nkmod = p4\nkndx line 0, p3, 20\naout foscil .5, kcps, kcar, kmod, kndx, 1\nouts aout, aout\nendin"

ssss <- "f 1 0 16384 10 1\n\ni 1 0  9 .01\ni 1 10 .  1\ni 1 20 . 1.414\ni 1 30 5 2.05\ne"

csound_impl(eeee,ssss,paste0("-o","test.wav"))