見出し画像

音楽・ビジュアルにおけるプログラミングとはなんなのか (MaxMSPチュートリアル-1: Algorithmic Composition)

こんにちは。今日こそは、音楽についてお話ししたいことを書き始めたいと思います。あまりにもたくさんお話ししたいことはありますが、その第一歩として、今回はMaxMSPについて、です。


MaxMSPとは?

MaxMSPは、主に音楽・音のライブプロセッシングのために開発されたプログラミング言語と、その言語を実行するためのソフトウェアの総称です。同じような目的のプログラミング・ソフトウェアには、Pure Data、C Sound、SuperColliderなどが存在しますが、現時点ではMaxMSPが最も幅広いユーザー層に使われ、アップデートやドキュメンテーションも充実している、言わば音楽プログラミング界のiPhoneです(??) ここまでカタカナばかりで、もう既にバックスペースを押したくなった方もいらっしゃるでしょうか。今回は、中高6年間みっちり文系選択のわたしが、できる限りわかりやすく・かつ楽しくMaxMSPを紹介していきたいと思いますので、どうか最後までお付き合いください。
まずは、MaxMSPでどんなことができるのか、いくつか例を紹介したいと思います。

MaxMSPでの私の成果物(一例として)

一つ目は以前の投稿でデモンストレーションとして使ったVocoderという電子音楽技術のexample。これは15分くらいで作れるお手軽なコードです。(ここに至るまでの勉強時間は含めないものとする)ヘッドフォンを使っていらっしゃれば、右耳からは私の声が、左耳からは私の声を元にした機械音声が聞こえてくるはずです。


次は少し前に作ったpitch & envelope generator。今度病院に慰問演奏しに行くのですけど、そこで使おうかなと思ってアイデアのベースを作ったものです。お手軽なショート動画ですのでどうぞ聴いてみてください。全ての音が、MaxMSP内でリアルタイムで生成されています。


これは2年前に作ったパッチで、メトロノームの音を使ったアンビエント音楽を即興的に作っている動画です。今回紹介するために動画を撮りました。メトロノームって、音楽家にとっては一種の悪夢でもありますけど、一方で規則的なパルスっていうのは心臓の鼓動なんかとリンクしたりして、心地よく感じることもあるんですよね。アンビエントですので、ぜひ、静かなところで聴いてみてください!


こちらはもう少しハイテクというか今風な、機械学習を応用した子音・母音判別機とそれを用いた音づくりの一例を紹介している動画です。こんなこともできるのか〜くらいに見ていただければ幸いです。台本なしで(ワイン片手に)英語解説に臨んだ結果、ところどころ変な英語使ってますけど…


こちらは自作のヴァーチャル・シンセサイザー。MIDIキーボードを繋げて演奏することで、楽器のシンセサイザーと同じように、自分が作った音を鳴らすことができます。音のexampleは用意してないですが、以前投稿したHanatabaのカバー演奏の中で、リード楽器として使っていましたので、気になる方はぜひ以前の投稿をチェックしてみてください。

最後は音楽・音ではなくヴィジュアルエフェクトの紹介。ビデオカメラからキャプチャーした映像を、MaxMSPを使ってミリセカンド単位で正確にdelay(タイムラグ)させています。Zoom会議での回線の遅れを皆さん経験したことがあるかと思いますが、それを意図的に引き起こすことを目的としたプログラムを作りました。

勝手にリンクを載せたりしていいかわからないので、自分の作ったものだけを紹介しましたが、ネットで検索するとcoolなチュートリアルやプロジェクトが大量に出てきます。オーディオにせよヴィジュアルにせよ、面白い・かっこいいものがたくさんありますので、ぜひ調べてみてください。年々MaxMSPは機能拡張されていて、Java scriptをMaxMSPのコード内に書き込めるようになったのはもう随分昔のことで、今は例えばAbleton LiveというDAWの中でMaxMSPを使うこともできますし、自分だけのオーディオ・プラグインを書いて他のソフトウェアで使うこともできます。

ライブプロセッシング?

MaxMSPはライブプロセッシングのプログラミングだと書きましたが、ライブプロセッシング、live processingとは何を意味するのか。それは文字通りリアルタイムで、つまりある時間軸の中で正確なタイミングで、コンピューターの処理・演算が実行されるということです。音楽は時間芸術ですから、音楽のためのプログラミングといっても、ただ計算できればいいわけではなく、時間という単位と紐づいた処理がなされなければならないのは、なんとなく感覚的にわかりますよね。もし例えばですけど、あなたがエンジニアだったとして、音楽家にこう頼まれたとします。

「この楽譜のこのタイミングでリバーブをガッとかけて、その後このレの音に反応してドラムの音を鳴らし、それがこのシの音が始まる時にはフェードアウトして欲しいんだけど、それを機械が自動的にやってくれるようプログラミングで書ける?」(だいたいこんな感じで音楽家の要望というのは抽象的なことがほとんどです笑)

このプログラミングをあなたが一から作るとして、まあ色々な手が考えられるかとは思いますが、私的に一番直感的に思いつくアイデアは、演奏中に、自動的に楽譜を追いかけてくれるプログラムを書ければ、全て解決するんじゃない?というものです。しかし、残念ながら、2024年現時点で、これを効率的に・またあらゆるスタイルの音楽で実行できるプログラムは実現していません。
代わりにMiller Puckette (MaxMSPの開発者)が考えたのが、

「まず、あるタイミングでエンジニアがプログラムにA(リバーブ)という処理を実行するよう指示する

その後レの音に反応してプログラムがB(ドラムを鳴らす)という処理を起こすための信号を送る

その信号がタイマーを連鎖的に起動

最終的にC(フェードアウト)という処理をx秒後に実行する」

これで晴れて音楽家の要求に応えられました。この、「信号を送って」「それが連鎖的に他の処理に作用する」というのが、MaxMSPの肝となるコンセプトです。
これが、CやPythonのようないわゆる汎用プログラミング言語とは重視する発想の方向性が異なるポイントになり、またMaxMSPが独自のプログラミング言語を構築しなくてはならない理由でもありました。ですので、汎用言語で慣れ親しんだlistやfor ~ 構文といったものは、MaxMSPでは同じ形では存在せず、またソフトウェアの見た目(UI)も、パッと見てわかるように、そうした他の汎用プログラミングとは大きく異なるわけです。MaxMSPは日本語では「ビジュアル・プログラミング・ソフトウェア」なんて呼ばれることもありますが、これはこのUIの特徴を指しているわけですね。

ビジュアル・プログラミング

MaxMSPのUI

こんな外観の「ビジュアル・プログラミング」ことMaxMSPの見た目ですが、ここまでの説明でなぜこうしたUIが必要だったのか、お分かりいただけるのではないでしょうか。「信号が連鎖的に他の処理に作用する」というのを、オブジェクト同士を繋ぐラインで、感覚的に表現しているわけです。基本的にMaxMSPの処理は上から下(そして右から左)に流れていくのですが、一番上のマイクのオブジェクト("ezadc")から送られる信号が"*~"という掛け算のオブジェクトと、音量調整のフェーダー("gain")オブジェクトに連鎖して流れ、最終的にスピーカーのオブジェクト("ezdac")に作用します。そしてこの「上から下」の流れは、クラシックなオーディオエンジニアにとって非常に馴染みのあるロジックでもあります。

Yamaha アナログミキサー MG16XU

これはYamahaのアナログミキサーの画像ですが、上から順番に、mic input --> gain --> effects --> pan --> fader --> outputという風にオーディオ信号が流れていくのがわかります。このハードウェアにおける信号の流れがまさに、上で紹介したMaxMSPのUIで再現されているわけですね。

MaxとMSP

さて、ここで少しMaxMSPの歴史についてなのですが、もともとMaxとMSPというのは別のプログラミング技術でした。最初に開発されたのはMaxの方で、これは先ほどお話ししたように、いかに音楽のライブ演奏に最適化したプログラミング言語を作れるか、という発想のもと作られました。特定のタイミングで送られる"クリック"のような信号(これを"bang"とMiller Pucketteは命名しています)、そしてそこから実行されるtiming-specificな処理の数々。あえて一言で言うのであれば、これがMaxが扱う処理の全てです。これだけ聞くとシンプルですけど、この発想と技術が電子音楽と即興演奏の世界を大きく変えました。

一方MSPというのは、どちらかといえば1990年代以前の電子音楽スタジオに起源があります。特に1960年代にスタジオでの"音"の研究と実験は全盛期を経験し(こうした実験から、今カラオケで使われているエコーも、Youtubeの倍速機能も、音に関わるありとあらゆる技術が生み出されました)、時代を経て、今度はそれを家庭用のコンピューターの中でできないか、という発想に至ったわけです。これが、MSPという技術を生み出すきっかけになりました。ですからMSPが扱うデータというのは音声データが中心で、いかにコンピューターの中だけで音声をデジタル処理できるか、ということが肝要になります。こちらもやはりMiller Pucketteが、彼が独立して開発したプログラム言語 "Pure Data" において実現させ、その後Maxの権利を所有するCycling '74がそれを導入・合体させる形で、MaxMSPが誕生しました。(Miller Pucketteの制作物の権利をめぐるトラブルがあったらしいのは、想像に難くありません。)

電子音楽スタジオで実験をしていた時代は、音をデジタル化させコンピューター処理することはできず、テープを切りはりしていた時代ですから、当時はたった数秒のために何時間何日もかけて行っていた処理が、今ではDAWやプログラミングを使って片手間にできる、そのことを考えると、ここに至るまでの時代の進歩と、先人たちの努力に頭が上がらない思いです。

チュートリアル動画 - 1

さて、ここまでお付き合いいただきありがとうございます!ここで、この記事のために制作したチュートリアル動画を貼っておきます。チュートリアルといっても、0-100まで全部ではなくある程度すっ飛ばしながら説明しているのですが、ここまで書いたプログラミング言語やUIのコンセプトを前提として見ていただければ、納得していただけるように作ったつもりです。この動画の目的は、Maxのオブジェクトの紹介、そしてalgorithmic composition(数学的作曲)のちょっとした導入です。

例えばですが、もしこんな作曲のアイデアが浮かんだとします。「今私が鳴らしている音。これは2/3の確率でピッチが変わるけれど、1/3の確率で変わらない。そして次のピッチをどう選択するかは、一聴すれば不規則に聞こえるようにしたいけど、実際には完全なランダムにはしたくない」もうこの時点でTHE・作曲家的な発想だと思いますけど、これを理系的に解こうとすると、私なんかは余計頭が痛くなってきます。ですが実はヒントは身の周りに転がっていて(そもそもランダムとか周期性とかって自然の産物ですからね)、子供の頃やっていたジャンケンゲームの発想を使えば、同じことができるんじゃない?というのがこの動画の隠れた趣旨です。

私個人的にはalgorithmic composition(一部を除いて)に現状そこまで深い興味があるわけではないですが、Maxが得意とすることの一つではあるので、チュートリアルその1としては良い題材かなと思って紹介させていただきました。ちなみに、Pythonのような他のプログラミングとの組み合わせでさらに力を発揮する分野でもあります。

今回の動画ではシンプルなサイン波をアウトプットとして使いましたが、ここにノコギリ波を使ってもいいし、シンセサイザーを繋げてもいいし、いくらでもここから音を面白くする方法はあります。また、ピッチを表す数字としてMIDI numberを使っていますが、ここで例えば0-11の整数の代わりに0.5や1.5といった数字を使えば、簡単にmicrotone、この場合四分音をピッチ選択の中に含めることもできます。そんな感じで、時間をかければかけるほど、あらゆる可能性が思いつくのが、このパッチワーク。それは実は、パソコンを使わない普段の作曲でも全く同じだったりするのですけどね。

今後のチュートリアル・シリーズについて

先に書いたように私はどちらかというと文系の人間で、プログラミングも数学も本来私の専門分野では全くありません。しかし、プログラミングやオーディオエンジニアリングを勉強してから、私の作曲や音楽に関する考え方は本当に大きく、ポジティブな意味で変わりました。正直、勉強するのに時間がかかるという一点を除けば、作曲をやっている人だけでなく、音楽家なら誰でも勉強する価値があるものだと思っています。いやいや、それもクラシックとか現代音楽の人だけの話でしょ、というとそうでもなく、商業音楽の方でも、オーディオのことを知らずにDAWのEQやらリバーブやらディストーションやらを、ネットの知識を頼りに無秩序に使うことは、私は正直どうかなと思っています。ネットに転がっている知識って、特にオーディオに関しては、全く当てにならないことばかりです。そんな、「なぜ音楽家がオーディオやプログラミングを勉強するのか」そんな話はまた次回、書けたらなと思っています。

今回このチュートリアルを作った一番の理由は、今後の記事で音楽について書くとき、デモンストレーション的にMaxMSPを使って説明したりしたいからなんですよね。だから、なんの説明もなく、はいこれがVocoderです!とか説明するのはちょっと強引かな、と思って、今回のチュートリアルを作るに至りました。また、英語に比べると、日本語でのMaxMSPのチュートリアル記事なんかはまだ充実していないので、自分でちょっとやってみようかな?と思った次第です。

とはいえ、これは自分の商売道具でもありますので、今後このチュートリアルが続いて、もう少し専門的な内容になってきたら、有料記事にするなり、メンバーシップ限定公開するなりしようかな、と考えています。


今回はここまで。動画も文章も、長々とお付き合いいただきありがとうございました!!


この記事が気に入ったらサポートをしてみませんか?