こぶろぉぐコンテンツへスキップるこぶろぉぐ我輩はるこである。多角形シンセを作ってみるamcjの「多角形シンセの魔力」講座で多角形シンセというものの存在を知り、面白かったので自分なりに理解した内容のまとめと、SuperColliderで実装するにはどうしたらよいのか実験してみました。Hollyhockを使ってみる2前回躓いたとこ前回、wavを直接Grid画面に貼り付けるとプチノイズが出るんだよな~、と悩んでいたのですが、普通に貼り付けたwav波形が途中で切れちゃってたのでそこでクリッピング起こしてたという初歩的な原因でした。初心者だからこういうこともある。Hollyhockっていう面白そうなのがあるよ、と教えていただき、いっちょ気合入れてやってみるか!と有償版を購入したのが去年の秋。そこから何もやらずに半年が経ちました。生成音楽」をテーマにした番組が面白かった。(配信が2021/1/30までだったので今はもう見れない)AbelteonとMAXを使ったアルゴリズム作曲の基礎を実践しつつ、自動生成音楽の歴史とか、作るときの考え方についての話もたっぷり聞けて親切な内容だった。中でも、「どう禁則を作るか」というところに創作性が発生するというのは何か作るときのとっかかりとして心に留めておきたい。Compositionのページを発見。マルコフ連鎖を使って3つのノートを鳴らす参考コードがあったので、ここから発展させて、任意のスケール内の音を鳴らすコードを作ってみることにした。}).add;)wchooseメソッドは、リスト内からどの値を選択するかに確率をつけることができる。0.4]);のようにすると1〜4の中で大きい数字ほど選ばれる確率を高くすることができる。マルコフ連鎖的な仕組みのためには「今の状態からどの状態に推移するかを確率的に決めたい」ので、推移する状態の数ぶんの確率リストのテーブル(matrix)を作成し、現在の値によってどの確率リストを採用するか決めている。]/10(合計1にするために/10している)の確率によって次の値が選ばれるので、0が選ばれる確率は0、2か6が選ばれる確率が高いことになる。レクチャーの中では既存の楽曲のMIDIデータから確率テーブルを生成する仕組みも自動でやっていたが、そこまでやるのは大変そうだったのでここでは手動で確率を書いていってる。一応、連続した値が選ばれず、隣り合った値に推移する確率が高い、という設計にしてみたけれど、より”音楽的”にするためにはもうちょっと確率の値を考える必要がありそう。);上の部分で選ばれたstateの値(0〜6)をmidiノートに変換している。degreeToKeyメソッドに度数(ただし0はじまりで数える)として値を与えると、任意のスケール内で何番目の値になるか返してくれる。マイナースケールだったら、2を与えると3(減三度は0番目から数えて3番目)を返す。そこに基準のキーを加算してmidiノートとしてシンセに与えている。map)を使った音生成というのも紹介されていたのでちょっと試してみる。aのところに適当な値を入れるとカオスっぽい結果が得られる、っていうのを利用するアルゴリズムのようだ。})m.plotというわけでaの値で結果が全然違う。3〜3.5あたりまでは規則的に振動していて、3.5から4に近づくとカオス度が上がっていくっぽい。4を超すと値がinfになっちゃうので注意。mapで得た値を音階に変換してメロディーを生成するテスト。SynthとLogisticというのがあった。Logisticのほうは任意の周波数でロジスティックス写像を用いたノイズを信号として出力できるみたいだ。Synthのほうはinputしたシグナルを解析してマルコフ連鎖を生成してくれるっぽい?のでなんか凝ったことができそう(ただサンプル単位の値の推移を読むっぽいので音階の推移を解析するより使い方が複雑かも?)このへんは後でまたちゃんと試してみたい。最近ロバートグラスパーの曲が好きで良く聴いていたんですが、youtubeに「ロバートグラスパーみたいな、”ネオ・ソウル”っぽいコード進行ってどうやって出来ているのか?」を解説するチュートリアル動画が結構あって、面白そうだったので勉強がてらまとめてみようとおもいました。※ちなみにわたしは「スケールとかコードとか、原理はなんとなくわかるけど全然身にはついてない」というレベルです。※参考にしている動画は鍵盤で解説していますが、わたしの身近にある楽器はギターなのでギターに引き付けて考えてみてます。ネオソウルっぽさってうのはこのキーボードのパッドっぽいかんじのソフトな音色によるところがでかいんじゃないかなという気がする。これそのままギターで弾いてもなかなかこのイキフンが出ない。次に、「クラスター・コード」っていう重要っぽい観念が出てくる。これは、ネオソウルっていうのは大体全部のコードにばちばちにテンションを散らしているが、テンション音を高音域の方に重ねていくんじゃなくて、コードの基本形の中に置いちゃって、隣接した音をいっぱい弾いて響きをわざと「濁らす」「ダーティな音にする」ってことらしい。そもそもギターだと隣接する音を同時に沢山鳴らすって難しいので、やっぱりこれもイキフンが出にくい。素直に鍵盤でやるべきか。思うも、ギターのコードフォームとか一緒に覚えたいので(いまだに指板のどこにその音があるのかうろ覚え)、無理やり頑張っていきたい。Butterfliesのコードを学ぶ動画の20分辺りから、マイケルジャクソンの『Butterflies』(原曲はこちら)のコード進行を解説しているので今回はそこをじっくり見ていく。基本的なコード進行:Ab⇒C#m⇒E⇒A7コードの構成音2番目のC#mは、本来であればメジャー(ダイアトニックコードでIVはメジャー)のはずだけど、ここで「モードチェンジ」してコードのクオリティを変化させて雰囲気を変えている、と言っていた。keyがBに変わった、と考えることができて、Bに対するEはIVなのでEメジャーが使えるという二通りの考え方ができるらしい。♭II7というのはV7の「裏コード」というものらしく、ドミナントの代わりによく使われることがあるらしい。今日のところは深追いせずに「そうかあ」とおもっておく。エクステンションを追加テンションを加えてコードにバリエーションを付ける。AbMaj9(13)⇒C#m9(11)⇒EMaj9⇒GMaj7(b5#5)⇒Ab6/9コードの構成音A7だったところがGMaj7(b5#5)になっているが、これはA9(13)11#のルートを弾かない(ルートレス)でGから積み上げていっている。ルートレスもネオソウルによく出てくる弾き方ということ。最後に戻ってくるときにAb6/9とかバリエーションつけるとネオソウルっぽくてかっこいい。ギターに置き換えるとこんな感じかな?AMaj9(13)C#m9(11)EMaj9GMaj7(b5#5)うーん、どうなんでしょう。全部の音を詰め込もうとしないほうがこなれ感がでるのかもしれません。最後のコードは怪しい響きでかっこいい。TableシンセとGuiの連携(2)今度は複数のウェーブテーブルを作って、波形を動かしてみる。2020ひとつのウェーブテーブルを作成して音を鳴らすまでは前回の記事に。複数スライダーのGuiを作成する今回は波形を描く用のスライダーを3つ作成する。MulthSliderViewを3つ分作って変数mに格納し、そのあとcollectでm配列のアイテム(各スライダー)ごとに描画の設定をしている。Pen.stroke;})};Bufferの確保サイズ2048のBufferを3つぶん作成。allocConsecutiveを使うと連続したbufnumのBufferを作成できて便利。ここではbufnum:0から2までのBufferを作成している。前回はButtonクラスのアクションファンクションに直接書いていたが、見た目がごちゃっとするので今回は分けてみた。やっている中身は単ウェーブテーブルの時と一緒だが、今回はbに格納されているBufferそれぞれに処理をしている。buf.loadCollection(env);})}関数fを実行するためのボタンを作成する。//関数fを実行するバッファーのポジションを指定するためのスライダーを作る今回は複数のバッファーに格納された複数ウェーブテーブルを混ぜて使う(使用するウェーブテーブルが入っているbufnumが0と1の場合、0.5を指定すれば0と1のウェーブテーブルがブレンドされたような波形になる⇒スムーズに波形から波形をトランスフォームさせることが可能)今回はEZSliderクラスを使う。ControlSpecの部分でバッファーのポジションの範囲を設定している(今回はスライダーが3つなので、0~2の範囲)が、上限を2にすると何故か音が止まっちゃうので(原因はよくわからない。)1.99までにしている。アクションファンクションでSynthを格納するxにスライダーの値をセットしている。action)UGenを作る複数ウェーブテーブルを使用するにはVOscを使用する。引数posでEZSliderからバッファーのポジションを受け取る。↓こういうのを作るのの覚書。Guiでお絵かきした波形を鳴らすやつ。2020まず、supercolliderでのWaveTableシンセの作成方法。2048);ウェーブテーブルで使う波形データ(Signal)のサイズは1024ぐらいがちょうどいい解像度とのこと。Tableフォーマットに変換する必要があり、変換後はデータ量が2倍になるので、Bufferを確保するサイズは2048に指定。(2)波形データを作成Bufferクラスのsin3メソッドでデータを作成(加算合成が簡単)Envをシグナルに変換(波形から作りたい場合)多分他にも色々やり方はあるがこの2パターンをよく使う。以下は、Guiと連携させてみたもの。スライダーとボタンのGuiを作成。2019https://adventar.org/calendars/437512月3日エントリー記事です。イントロ英語圏において、ツイッターやblog系サービスよりもインスタグラムがポピュラリティを獲得してしまったことの悪い点は、それで誰も文字を書かなくなってしまったということだ。いうのが、深夜三時に、カオサン通り沿いの安宿のベッドでわたしが考えていたことだった。そのベッドは自宅から約4600km離れていて、そんなに遠くで眠ったのはその時が初めてだった。平たく言えば、わたしは人生初の海外旅行に来ていて、それはバンコクの音楽フェスに出演するザ・ホラーズというバンドを追っかけてきた為なのだ。Love」までなんでもござれ......を爆音で演奏し、人々は道路の真ん中に集まって絶え間なく合唱している。わたしはその健康的すぎる猥雑さを既に愛し始めていたが、そんな喧騒の中でさえ、インスタのフィードを手繰る指の動きはマシンのように合理的だった。わたしの親指はほぼ無意識のうちに、しかしハイエナのごとくハッシュタグ#TheHorrorsをつけ回し、偶然、熱心な地元のファンが街中でバンドメンバーに遭遇したという投稿を発見する。そこには確かに、ホラーズの面々とラッキーなファンが笑顔で写っており、それは微笑ましく、見ているこちらも嬉しくなった。