Rubyは楽器だ!(Rubyでリアルタイム作曲)
Lightweight Languageを使ってクラブで即興演奏・作曲シリーズ。
とうとう?やっとRubyだ。これからよろしく。
まずRubyでJavaの音楽クラス(Jsyn)を利用するために、名前の通りRjb(Ruby Java Brige)を。即興プログラミングがテーマなので、Rubyで 対話プログラミングする方法を模索。irbと言うのがあるのでとりあえずこれを使用する、他にもあるかもしれないが。
さて毎度サイン波を鳴らすだけじゃ面白くないので、今回はホワイトノイズを(ドン・デリーロのホワイトノイズを読まなきゃ、最近ロールスロイス小説の コズモポリスを読んだので、、、脱線)バンドパス・フィルタに通してその中心周波数をエンベロープで時間的に動かし、波っぽい音を。jsynの細かいことは後々書く。
まずruby irbで対話プログラミングへ。
require 'rjb'
Synth = Rjb::import('com.softsynth.jsyn.Synth')
SynthEnvelope = Rjb::import('com.softsynth.jsyn.SynthEnvelope')
EnvelopePlayer = Rjb::import('com.softsynth.jsyn.EnvelopePlayer')
WhiteNoise = Rjb::import('com.softsynth.jsyn.WhiteNoise')
BandPass = Rjb::import('com.softsynth.jsyn.Filter_BandPass')
LineOut = Rjb::import('com.softsynth.jsyn.LineOut')
frq=[0.2,3000.0,0.7,400.0,1.0,0.0]
q=[0.2,20.0,0.7,50.0,0.1,10.0]
#シンセエンジンの起動
Synth.startEngine(0)
envData = SynthEnvelope.new(frq)
envPlayer = EnvelopePlayer.new
envDataQ = SynthEnvelope.new(q)
envPlayerQ = EnvelopePlayer.new
noise = WhiteNoise.new
bp = BandPass.new
lineOut = LineOut.new
#ユニットジェネレータを接続
noise.output.connect(bp.input)
envPlayer.output.connect(bp.frequency)
envPlayerQ.output.connect(bp.Q)
bp.output.connect(0,lineOut.input,0)
bp.output.connect(0,lineOut.input,1)
#ユニットジェネレータを起動
envPlayer.start()
envPlayerQ.start()
noise.start()
bp.start()
lineOut.start()
envPlayer.envelopePort.queueLoop(envData)
envPlayerQ.envelopePort.queueLoop(envDataQ)
これで音が鳴ります。「rubysample1.mp3」
しかしすぐ飽きて他の音が聞きたくなるものです。そこで、次をタイプ。
frq=[0.2,300.0,0.7,4000.0,1.0,0.0]
envData = SynthEnvelope.new(frq)
envPlayer.envelopePort.queueLoop(envData)
配列の値を変えると音の個性を変えられる。
ここら辺がクラブにパソコン持ち込んでプログラミングしてライブする醍醐味だと思われる?。queueLoopを使えばwhileやforを使わなくても音を変えることができるのでいいのかと。
なにせ今日からRubyを使い始めたので、もっと勉強していい感じにしていきたいな~。実際にクラブで演奏してRubyって楽器だったのねとギャルに言われたい。
ちなみにサイン波を鳴らすだけのソース


Comments