FoxDotによるLiveCoding方法 実践編2

[基礎編](https://qiita.com/snafkinliberty/items/2ae72d94a2e91f932625)、[実践編1](https://qiita.com/snafkinliberty/items/c9e2829fd496d5f0b89e)の続きです。

#ドラムをスピーディーにCodingしたい
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/344c357d-18d5-d42e-a071-bcab498ca033.jpeg)
　通常、ドラムはパート別やある程度まとめて書いたりしますが、1行で書く方法があります。例の4行目にありますが、1パ－トずつ**<>**でくくることで1行で書けます。d1,d2,d3,d4を同時に鳴らすのと同じです。この1行で書く書き方のいいところは、まとめてpanなど設定できるところもあります。テンポが速い曲とか、早くCodingしないといけない場合など役立ちそうです。

#ピアノを鳴らしたい
ピアノはprint(SynthDefs)で探してもありません。そこで、Windowsの場合、midiを使うこと鳴らす方法があります。まずはSuperColliderで
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/afed3e8b-efb8-6f62-6eb0-3397f967347e.jpeg)
**FoxDot.midi**を実行し、次いで、**MIDIClient**を実行する。
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/e9d6abfe-4a6f-c419-8c6b-94fc0c782e18.jpeg)
そうすると、Microsoft GS wavetable Synthを使えるようになります。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/3e21f5e0-0419-18d0-f1e5-84dcabb84be8.jpeg)
そこで、FoxDotで**MidiOut**によりピアノを鳴らせます。

#コードに合わせてメロディーを変化させたい
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/a929a107-da94-b827-f976-dd82e0d48f5e.jpeg)
　実践編1でルート弾きでもやりましたが、**ch = var([5,2,3,0],[4,2,2,8])**とするとコードを作れますが、これをベースで鳴らしつつ、メロディをp1で作り、ここでは[0,2,0,4]としましたが、これに**+ch**とするだけで、コード上でメロディーが変化します。例ではshuffle()を加えて、実行するたびにコードが変わるようにしています。

#4小節目でメロディーを変化させたい
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/add5f3ef-b074-dc58-65df-0a28abf62f80.jpeg)
　〇回目で変化させるには、**every()**が有効です。例えばP[0,1,2,4].every(2,"shuffle")とすると。0,1,2,4,2,1,0,4などと2 回目でshuffle されます。P[0,1,2,4].every(3,"shuffle")の場合は0,1,2,4,0,1,2,4,2,1,0,4などと3回目でshuffleされます。では4回目で変えたいなら、3を4にすればといいと思いますが、この場合、実際は5回目にshuffleされます。それならばと、2と3を組み合わせればどうだと、P[0,1,2,4].every(P[2,3],"shuffle")にしたら4回目でshuffleになりました。shuffleの代わりに、mirrorなども使えます。これは一般によく曲で使われるメロディーの展開方法なので、多用しそうです。

#メロディーで音を抜きたい
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/ab9f2dbd-abea-29e9-99ba-9a9f80f955eb.jpeg)
　アルペジオで音を連続的に鳴らすと単調なので、休符を盛り込みたいところですが、休符はamp=0で音を消すことで作ります。特にランダムに休符を入れたい場合は**PRand()**が使えます。例えば、PRand(0,1)[:5]であれば、0,1,1,0,1など0と1がランダムに選ばれ、[:5]で5つ作れます。これをamp=(PRand(0,1)[:5])にすることで、アルペジオで連続していた音がランダムに休符で抜かれてパターンを変化させることができます。

#音に厚みをつける
　音に厚みをつける方法として、ギターでよくやるオクターブ奏法があります。これは、先のピアノの例で、**oct=(5,6)**とすることで、oct=5と6でオクターブ違いで2音鳴らします。主旋律などに特に使えるかと思います。基礎編でも書いたように、最後に+(0,2)などで和音にすることで厚みがでます。
![111.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/8b3f587e-bad9-a118-eb94-1242df1b93e0.jpeg)
　他にはエフェクトでダブリングのような効果を**chop**と**sus**の合わせ技で表現できます。これら2つを聴き比べると、chop,susがある方が、印象的なのはよくわかると思います。ただし、これだとchop=4,sus=2だと4分音符が8分音符になります。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/5f279190-183f-8aeb-a3ce-f0d69bf95c57.jpeg)
　音の長さはそのままで、同様な効果を狙うなら、**spread()**をつけても似たイメージになります。

#曲に変化をつける①フェードアウト
　どうしてもLiveCodingで曲を作ると、ループベースなので、同じ音が続きますが、大きく変化をつけようとすると、グループ化して一気に止めて、別に書いておいた音を鳴らすなどのアプローチもできますが、音を聴かずに準備しておくのは、経験を積まないと難しいところです。
　そこで、徐々に変化させていくパターンになるかと思います。まずはリード系の音を徐々に音を下げます。これは例えば、**amp=var([0.8,0.6,0.4,0.2,0],[16,16,16,16,64])**、または**amp=linvar([1,0],128)**で実現できます。十分長い時間を設定するか、途中でstop()かければ良いです。
　フェードアウト（デクレッシェンド）の効果をこれで実現でき、クレッシェンドも逆に音を大きくしていけば同様にできます。
　この間に、リズムパターンやコードを変えていくことで、曲に変化をつけることができます。

#曲に変化をつける②ソロからの元の演奏
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/eb808b64-6ca5-b4af-fce9-b7cbc00825b9.jpeg)
一度、ソロにしてから、他全部を鳴らすアプローチもよくありますが、これは例えば、**b1.solo()**として演奏しておいて、**nextBar(lambda:b1.solo(0))**と書くと、次の小節始まりからソロにする前の状態で鳴るようになります。lambdaのところは**λ**でも良いです。ソロから戻りたい場合はこの書き方は覚えておくと良いです。

#曲に変化をつける③転調
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/25f776f0-ece7-7edb-f082-f2365016cb4c.jpeg)
　最後のサビの繰り返しで転調するのは、POPSの定番ですが、曲のキーを変えるのは、**Root.default=1**で数値を指定して変えれます。これは実行して即変わるので、タイミングよく実行しましょう。

　このくらい知識がつけば、あとはYouTubeなどでFoxDotで検索し、うまい人のパフォーマンスに学び、実践していけば、どんどん身につくと思います。

　役立ちそうな技は随時追加、更新していきます。