Max/MSPでミュージックシーケンサーを作ろう
Author:kuma:Dkuma:D.icon
/icons/hr.icon
昨年から1年間所属研究室にてMax/MSPを学びました!
本記事では「Max/MSP」を用いてミュージックシーケンサーを制作した過程を示していきたいと思います。
目次
1. Max/MSPとは?
https://scrapbox.io/files/655affba9c66a2001b994469.png
まずはじめに、そもそもMax/MSPって何???という話を簡単に説明していきます。
Max/MSPとはCycling '74という会社が開発・運営している、音楽とマルチメディアに特化したビジュアルプログラミングソフトウェアです。現在は作曲家やメディアアーティストを中心に幅広く利用されています。
プログラミング言語はこの世にたくさん存在していて、それぞれ特徴があるかと思います。
Max/MSPでは大きく2つほど特徴があります。
まず1つは、ビジュアルプログラミングということで、視覚的・直感的にプログラムを制作することができるという点です。
Max/MSPでは、オブジェクトと呼ばれる箱とパッチコードと呼ばれる線を繋いでいくことでコードを書いていきます。
つまり、箱を線で繋いでいくだけでプログラムが動くのです。
https://scrapbox.io/files/655b11f7962399001c77bf88.png
上記は加算演算のプログラムです。
1番の箱(ナンバーボックス)に任意の数値を入力すると、2番の箱の「5を足す」という命令を通じて、3番の箱にその結果である数値が出力されます。このプログラムは3つの箱を2本の線で順番に繋いだだけで作ることができます。
簡単でしょ?こんな感じで視覚的に分かりやすくプログラムを組むことができちゃうんです。
2つ目の特徴は先程も言ったように、音楽とマルチメディアに特化したプログラミング言語であるという点です。
Max/MSPには音楽に関連したオブジェクトや命令がデフォルトでたくさん用意されています。
https://scrapbox.io/files/655d8587290bd3001cf96fd8.png
例えば上記の画像のように鍵盤型のオブジェクト(kslider)があったり、sin波を生成する命令(cycle)があったりと他のプログラミング言語ではあまり無いような、音響関連のものが用意されています。
また、映像に関連するオブジェクトも用意されているため、メディアアートなどの制作にも役に立ちます。
プログラミングの可能性は無限大なので、思考と技術次第ではなんでも作れてしまいますが、よく使われる用途としては、シンセサイザーの制作、電子音響音楽の制作などが挙げられます。
Max/MSPって大体こんな感じのプログラミングの開発環境です!
(※かなり噛み砕いて説明しているので細かい部分は間違っているかもしれませんがご了承ください)
2. ミュージックシーケンサーとは?
まあこちらは知っている人も多いと思うので簡単に説明します。
ミュージックは音楽。シーケンサーは機器の自動制御をする際に事前に設定しておく動作順序。(※sequence : 連続。連続して起こる順序。)つまるところ、自動演奏装置です。(詳しくはWikipedia等参照) 今回は事前にドラムだけの音源を複数用意し、その音源をループさせ、その上にリアルタイムで音を鳴らしていく形式の半自動演奏装置のようなものを制作しました。次の項から制作過程を紹介していきます。
3. 作ってみる
では実際に作っていくぞ~~~~!!!!!!!!!
https://scrapbox.io/files/655cab133a0268001cc3a193.png
まずは5パターンの*BPM(100, 128, 150, 180, 200)のドラムパターン音源と停止用のSubDropという音を用意します。今回はStudio One 5というDAWを用いて簡単にドラムパターンを制作しました。
*BPM : テンポのこと。Beat Per Minute.
https://scrapbox.io/files/655cb41eb1d753001b2cf876.png
それぞれのBPMのメッセージオブジェクトを用意しそれを押すと該当の音源が流れるように繋ぎます。さらにtempoというオブジェクトにも繋いで値を変えられるようにします。tempoオブジェクトは与えられた値のBPMに沿ってカウントをしていき、定期的に数値を出力します。
https://scrapbox.io/files/655cd149fddd38001c6f1afe.png
tempoオブジェクトの下にselオブジェクトで0~15の16個の数値を与えます。selはselectの略称でよく使われるオブジェクトなので省略形でも使用できるようになっています。selオブジェクトは特定の値が来たときに処理を行うオブジェクトです。
上記の画像ではtempoオブジェクトにより0~15の16個の数値が100BPMのテンポで出力されていきます。selオブジェクトの下にはbangオブジェクトというボタンのオブジェクトがそれぞれ16個用意されていて、0が来たら1番左のbangが、1が来たら左から2番目のbangが、・・・といった感じの出力が100BPMでされていきます。
正直文章だけだと少し分かりづらいと思うのでこの後にある完成品を見ていただければなんとなく理解できるかと思います。
https://scrapbox.io/files/655cd33b71ff1d001ba40d8c.png
bangオブジェクトの下には、それぞれdialオブジェクトを16個用意します。その後にはmtofオブジェクトを置いていてそれぞれのdialから繋がっています。
https://scrapbox.io/files/655cd3af985405001cf8e4aa.png
dialオブジェクトは見た目のままで、ダイアルを動かすと針の場所によって値が出力されるオブジェクトです。
今回は0~127の値が出力される設定にしています。
https://scrapbox.io/files/655cd43af156d2001bb3b908.png
mtofオブジェクトはMIDI note number to frequencyの略称でMIDIノートナンバーをフリークエンシー、つまり周波数に変換するオブジェクトです。
MIDI note numberの値は一般的に0~127と決まっています。なので上のdialで出力される値を0~127に限定したのです。この値に準じて音が出るようにこの下にさらに作っていきます。
https://scrapbox.io/files/655cd52cd394ca001ded8ce7.png
mtofオブジェクトの下にcycle~オブジェクトを設置して送られてきた周波数に応じたsin波が生成されるようにします。
ちなみにcycleの後に~がついていますが、説明すると少し長くなるのでここでは割愛します。
https://scrapbox.io/files/655cd593fee4d3001b5fe34a.png
あとはその下にdac~オブジェクトを用意してほぼ完成です。
dacにつなぐことで音がアウトプットされるようになります。
あとはランダムにpanを振る機構なども作りましたが説明していると記事がかな~~~~~~り長くなるし、自分でもうまく説明できる自信がないので割愛します。
https://scrapbox.io/files/655cd70bfee4d3001b5ff1ad.png
Max/MSPにはプレゼンテーションモードというモードが存在します。
完成したパッチのうち、ユーザーが操作する必要があるオブジェクトだけ選択してプレゼンテーションモードに移行すると、上記画像のように必要最低限のオブジェクトしか表示されないようになります。
あとはパネルなど装飾専用のオブジェクトを追加して、いい感じに配置していきます。今回はミュージックシーケンサーということで円状に配置して4小節の経過を視覚的に分かりやすくなるようにしてみました。
プレゼンテーションモードはごちゃごちゃな配線も隠れてくれるので良い感じですね。
あとは動作確認をしてちゃんと動けば完成!!やった~~~!!
4. 完成品
ついに完成です!作品名は気まぐれにツマミをいじって音楽が演奏されるので「気まぐれミュージック」としましょう!
完成したので動作の様子を録画しました。ぜひご覧ください。
気まぐれミュージック
https://youtu.be/Ef_WKkzRLHg?si=zLQEAHmL4hX1yuK6
いい感じですね~まだまだ使いきれていない色々な要素があるので改善の余地もありそうですが今回は良しとしましょう。
5. おわりに
ここまで読んでくださりありがとうございます!
今回はMax/MSPを用いてミュージックシーケンサーを制作しました。
Max/MSPは有料ソフトなので少し手が出しにくいかもしれませんが、30日間無料で利用できるはずなので今回の記事を読んで興味が出た、自分も色々作ってみたい!という方は是非ダウンロードしてみてください!
それではまたどこかで。さようなら!