読者です 読者をやめる 読者になる 読者になる

aa develop

開発と成長

Pure Dataで正弦波/のこぎり波を切り替えるパッチ

Pure Data

Pure Dataを始めました。 まずは、モジュラーシンセサイザーっぽいものの作成を目指しながら、Pure Dataでのプログラミングを学習したいと思います。

モジュラーシンセ作成の手始めとして音が出る部分のVCOを作ります。 Pure Dataでは正弦波とのこぎり波は最初から用意されていますが、三角波矩形波はのこぎり波から作るようです。 今回は、簡単に鳴らすことができる正弦波とのこぎり波のどちらを鳴らすかをラジオボタンで選択でき、周波数をスライダーで選択できるパッチを作ってみました。

f:id:aa_debdeb:20160816001556p:plain

仕組みは正弦波「osc~」とのこぎり波「phasor~」を常に鳴らしておき、ラジオボタンによってそれぞれの音量を「0」または「1」に制御してどちらかだけがなるようにしているだけです。

「tabwrite~」で作成した簡易オシロスコープで波形を確認できます。

「loadbang」はパッチが起動したときに、「bang」を送るオブジェクトです。これにより起動してすぐに音が鳴るようになります。

以下がソースコード。コピペして保存すれば動くはず。

#N canvas 530 89 619 452 10;
#X obj -163 197 phasor~ 440;
#X text -112 61 saw-tooth wave;
#X text -112 45 sine wave;
#X text -274 35 frequency;
#X obj -134 47 vradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144
-1 -1 1;
#X obj -342 197 osc~ 440;
#X obj -105 273 *~;
#X obj -282 272 *~;
#X msg -264 197 0;
#X msg -219 197 1;
#X msg -70 196 0;
#X msg -25 197 1;
#X obj -194 324 +~;
#X obj -258 384 output~;
#N canvas 0 22 450 278 (subpatch) 0;
#X array wave 100 float 3;
#A 0 0.665426 0.682174 0.698922 0.71567 0.732418 0.749165 0.765913
0.782661 0.799409 0.816157 0.832905 0.849653 0.866401 0.883149 0.899897
0.916645 0.933392 0.95014 0.966888 0.983636 0.000384063 0.017132 0.0338799
0.0506278 0.0673757 0.0841236 0.100872 0.117619 0.134367 0.151115 0.167863
0.184611 0.201359 0.218107 0.234855 0.251603 0.268351 0.285098 0.301846
0.318594 0.335342 0.35209 0.368838 0.385586 0.402334 0.419082 0.43583
0.452578 0.469325 0.486073 0.502821 0.519569 0.536317 0.553065 0.569813
0.586561 0.603309 0.620057 0.636805 0.653552 0.6703 0.687048 0.703796
0.720544 0.737292 0.75404 0.770788 0.787536 0.804284 0.821032 0.837779
0.854527 0.871275 0.888023 0.904771 0.921519 0.938267 0.955015 0.971763
0.988511 0.00525847 0.0220064 0.0387543 0.0555022 0.0722501 0.088998
0.105746 0.122494 0.139242 0.15599 0.172738 0.189485 0.206233 0.222981
0.239729 0.256477 0.273225 0.289973 0.306721 0.323469;
#X coords 0 1 99 -1 200 140 1;
#X restore 1 259 graph;
#X obj -136 394 tabwrite~ wave;
#X obj -77 310 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
#X obj -298 58 hsl 128 15 200 2000 0 0 empty empty empty -2 -8 0 10
-262144 -1 -1 3800 1;
#X floatatom -274 115 5 0 0 0 - - -;
#X obj -156 120 select 0 1;
#X obj -104 350 metro 100;
#X obj -134 16 loadbang;
#X obj -72 280 loadbang;
#X connect 0 0 6 0;
#X connect 4 0 19 0;
#X connect 5 0 7 0;
#X connect 6 0 12 0;
#X connect 7 0 12 0;
#X connect 8 0 7 1;
#X connect 9 0 7 1;
#X connect 10 0 6 1;
#X connect 11 0 6 1;
#X connect 12 0 13 0;
#X connect 12 0 13 1;
#X connect 12 0 15 0;
#X connect 16 0 20 0;
#X connect 17 0 18 0;
#X connect 18 0 5 0;
#X connect 18 0 0 0;
#X connect 19 0 9 0;
#X connect 19 0 10 0;
#X connect 19 1 8 0;
#X connect 19 1 11 0;
#X connect 20 0 15 0;
#X connect 21 0 4 0;
#X connect 22 0 16 0;