キース・エマーソンみたいに弾けないので、無限にシンセソロを弾き続けるアプリをClaude Fable 5に作ってもらった。(CloseBox)

テクノロジー AI
松尾公也

テクノエッジ編集部 シニアエディター / コミュニティストラテジスト @mazzo

特集

プログレって知ってますか?

プログレッシブ・ロック。1960年代の終わりから70年代にかけて隆盛を極め、その後はマニアのみが集う、ロックのジャンルです。そこにはいわゆる3大プログレバンド、4大プログレバンド、5大……とか有名なバンドがあるのですが、そこにYesと一緒に必ず入ってくるのが、ELP(エマーソン、レイク&パーマー)なのです。

ELPは何といってもキース・エマーソンのシンセサイザープレイが素晴らしくカッコよくて、ジミ・ヘンドリックスやピート・タウンゼントの暴力的なパフォーマンスをキーボードで実現するだけでなく、さらには巨大なモジュラーシンセサイザーのパッチをリアルタイムでやりながら無機質なソロを次々と繰り出し、Hammondオルガンを倒したり反対側から弾いたりナイフを突き立てたりと、まあやり放題だったわけです。

そんなELPですが、キースとグレッグ・レイクは相次いで他界し、今はドラマーのカール・パーマーがひとり、ELPの再演ライブをやっています。筆者は最後のELP日本公演を見ることができて本当に良かった……。

そのキース・エマーソンのシンセサイザーソロ手法を学べないか、再現できないか、というのが今回の主題です。ここからスタートしたい。

機材はある。腕がない

シンセは増えていくばかり。でも腕のほうはさっぱり向上しません。

実は「エマーソンの音」を出す機材の側は、すでに揃っています。

大学1年生(1978年)に最初に買ったパッチができる初心者向けシンセサイザーKORG MS-10のシリーズはMS-20、MS-20 mini、Legacy CollectionのMS-20 MIDIコントローラーとたくさんありますし、Roland System-100もあります。

最近ではベリンガーのMoogモジュラークローンSystem 55を購入。MinimoogクローンのModel Dもあります。本家Moogも、Motherシリーズのような手の届く価格帯のものなら持っています。あ、ARP 2600クローンもあります。

問題は、人前で弾けるほどの技量がないことです。単独でソロを取るなんてもってのほか。

ましてやエマーソンのあの、sus4を撒き散らしながら駆け上がり、ポルタメントで絶叫域まで滑り上がって、ホイールでねっとり揺らすようなフレーズは、100年練習しても指から出てくる気がしません。

周りには、それができる人がいるんですよね。初期からVOCALOID楽曲なのにプログレテイストの良曲を量産し、今でもDTM関連情報を発信している、その名も、いーえるP @ TinySymphonyさん。

新しいシンセを紹介するときにキース・エマーソンっぽいフレーズを軽々と弾いている、あんな感じのことやりたい。

YesのRoundaboutのカバーでボーカルを担当したとき、リック・ウェイクマンのMinimoogソロを弾いてくれた堀越功さんは、キース・エマーソンの奥さんから連絡をもらったほどの腕を持つキーボーディストです。

あの手法を学びたいし、再現したいのです。それも、ありもののMIDIループやサンプルパックではなく、誰も弾いたことのない、しかし確かにエマーソンっぽいフレーズとして。

弾けないなら、手法そのものを分解して、機械に弾かせればいい。そしてやってみて分かったのですが、この「分解」の過程こそが、エマーソンのソロ手法をいちばん深く学ぶ方法でした。というわけで、Claude Fable 5に「キース・エマーソン風Moogソロ無限生成マシン」を組んでもらいました。最終的にこの機械は、ベースとドラムを従えたトリオになり、演奏の途中でハモンドオルガンに持ち替えるところまで行きました。今回はその開発記です。

最初の依頼:sus4と速弾きとポルタメントと深いリバーブ

最初の依頼はこうです。「キース・エマーソンがMoogでソロをとるときのフレージング。たぶんsus4とかを多用してると思うんだけど、それをシンセサウンドとともに自動生成したい。とにかくかっこいいやつ。速弾きもあり。ポルタメントやモジュレーションを使って、深いリバーブをかけて、単独で成立するようなものを無限に生成できるようにしたい」

雑な依頼です。ですがClaudeはここからエマーソン語法を「フレーズ型」として分解してきました。1-4-5-8-11のsus4語彙をシンコペで並べるSUS4 STATEMENT、4度堆積を駆け下りるQUARTAL CASCADE、16分のFAST RUN、4音セルをずらして上昇する古典的なSEQUENCE RUN、同音連打から跳躍するMACHINE GUN、長大ポルタメントで最高音域へ跳ぶSCREAM GLISS(Lucky Manのアレです)、TRILL、そして意図的な休符のBREATH。これらを重み付きで無限に紡いでいきます。

音源はTone.jsのMonoSynth。fatsawtoothを3基重ね、24dB/octのローパスにフィルターエンベロープを深くかけ、ポルタメントはフレーズ型ごとに可変です(速弾きは4ms、グリスは最大420ms)。長音にはディレイド・ビブラートが自動でかかります。

ひとつ実務的なメモを。最初はReactアーティファクトとして作ったのですが、依存パッケージの取得でタイムアウトすることがあり、cdnjsからTone.jsを直接読む単一HTMLに切り替えました。これならブラウザでダブルクリックしても、ローカルのViteに置いても動きます。長期戦になるプロジェクトでは、最初からこの形にしておくのが正解だと思います。

デュアルボイスと「ねちっこいベンド」

一発目を聴いて、追加の注文を出しました。デュアルボイスです。エルトン・ジョンの「Funeral for a Friend」の荘厳なハモリ、レインボーのトニー・ケイリーが「Tarot Woman」のイントロで聴かせる、デチューンした2声がうねうねとベンドするあの感じです。

実装は2基のMonoSynthをデチューンして左右へ薄くパンし、合流後に共通のビブラートをかける構成になりました。合流後にかけるのがポイントで、2声が同じホイール操作で揺れる実機的な挙動になります。ボイシングはフレーズ型ごとに自動切替。絶叫系は太いユニゾン、sus4ステートメントでは4度・5度ハモリ、走句ではオクターブ重ねが出ます。

新フレーズ型「CRY BEND → RUN」は、半音~全音下からスクープインした長音を数発、途中で全音ベンドして泣きながら戻し、直後に16分バーストで駆け上がります。まさに「ねちっこいベンドと速弾きの組み合わせ」で、これが生成器の骨格になりました。のちに「ピッチ到達後に深いビブラートをかける」処理も足しました。ベンド中はビブラートをほぼ止めておいて、到達した瞬間にうねり始める。ホイールワークの定石そのものです。

Moog IIIc的パッチシステムと、凶暴化していく演奏

「シンセのサウンドにエグさが不足している。Moog IIIcでたくさんパッチを使ったような重厚かつ変化のあるサウンドにしてほしい」という注文には、パッチシステムで応えてきました。FAT SAW STACK、PWM SCREAMER(パルス幅変調+レゾナンス+サブオシレータ)、SYNC GROWL(FMによる疑似オシレータシンク)、RESONANT WASP(自己発振寸前のQ7を超低速LFOで掃引)、AM METALの5種を、2~4フレーズごとに自動で組み替えます。

フレーズは2部構成に伸ばし(駆け上がり→頂点で溜め→折り返し、のような起承転結)、そのうえで「FURY」システムを入れました。演奏が進むにつれて凶暴度が上がり、テンポ・歪み・フィルターの開き・パッチ選択までが連動して過激化していきます。個人的にPWM SCREAMERに切り替わった瞬間からが最高だったので、「ここのちょっと前から始めて、さらにエスカレートするように」と注文したところ、開始点がBOIL(沸騰前)に引き上げられ、MELTDOWNの先に「BERSERK」という段階が新設されました。BERSERK中はパッチが凶暴組の2択に固定され、息継ぎフレーズが消滅します。

画面そのものをIIIcにする

仕上げに、画面をMoog IIIcにしてもらいました。921オシレータバンク、911エンベロープ、904-Aローパスフィルター、902 VCA、907フィクスドフィルターバンクをキャンバスに描画し、パッチが切り替わるたびにパッチケーブルの配線が掛け替わります(だいぶ省略されていますが)。

SYNC GROWLならOSC1の出力がOSC2のMODジャックへ、PWM SCREAMERならLFOがフィルターのCTLへ。冒頭で触れた「パッチをリアルタイムでやりながらソロを繰り出す」あのパフォーマンスを、機械が自分でやっているわけです。ノブは目標値へぬるっと回り、DRIVEノブだけは実際の歪み量をライブ参照しているので、FURYが上がるにつれてじわじわ這い上がっていきます。その前面に波形が半透明で重なり、下段にはリアルタイム鍵盤表示が出ます。

鍵盤表示にはのちにピッチベンドの反映も入れました。シンセの周波数シグナルを毎フレーム直接読んで小数MIDI値に変換し、鍵盤の上を滑る「ベンドカーソル」として描く方式で、MIDIノート番号からではなく音響エンジンの実周波数から描くので、ポルタメントの滑走もベンドのせり上がりもフォールオフの落下も、起きていることが全部そのまま見えます。ホイールを左側に配置することも考えたのですが、こっちの実装の方がいい感じです。

デュアルボイスはアンバーとグリーンの2色で、サブオクターブ時は2つの玉が1オクターブ離れて並走します。最初は同じ色だったのですが、それだと音を追いかけられないので片方の色を変えました。

そしてMIDI書き出しとMP4録画。REC VIDEOボタンを押すと録画待機になり、STARTで演奏と録画が同時に始まります。パネル・ケーブル・波形・鍵盤・FURYメーターが全部映った完パケが1本、同じ演奏からMIDIも落ちます。

トリオにする。グレッグ・レイクのピックベースとカール・パーマーのドラム

ここまでのバッキングは簡素なオスティナートとロックビートでした。せっかくなのでELPにしてもらうことにしました。

ベースはグレッグ・レイク風のピックベースを注文しました。実装は3層で、本体のMonoSynthに-1オクターブのサイン波(弦の胴鳴り)とピックのアタックノイズ(2.5kHz帯、18ms)を重ね、軽い歪みと120Hzのローシェルフブーストで「ズシン」と「ガリッ」を両立させます。ベースラインは固定パターンをやめて生成+変異のシステムになりました。4スタイルから生成したパターンがセクションごとに変異(音の差し替え、休符化、16分割り)し、最大24個のバンクに系譜として蓄積されていきます。演奏が長くなるほどバリエーションが増殖します。

ドラムはカール・パーマー・エンジンと名付けられました。いまもひとりELPの名を背負って叩き続けている当人に、せめてもの敬意です。基本グルーヴにゴーストノート、2小節ごとの小フィル、4小節ごとのタム回し(スネア→ハイ→ミッド→ロー、裏に32分の増打ち)、フィル明けのクラッシュ。SYNTH/BASS/DRUMSの3系統音量スライダーも付けて、ミキサーを触りながら聴けるようにしました。

ドラムマシンっぽさとの戦い

ところが、このドラムがどうにもドラムマシンなのです。「もっと生っぽくするためにはどうしたらいいだろう」と相談したところ、返ってきた分析が腑に落ちました。マシンっぽさの正体は音色そのものより「全打点が同一であること」。生ドラムは一打ごとに音程・音色・減衰が違い、タイミングがグリッドから数ミリ秒揺れ、キックを踏めばスネアの響き線が共鳴し、強く叩くほど明るく長く鳴ります。この4つが欠けると、どんな音でもマシンに聞こえるのです。

対策は全部入りになりました。全打点に音程±1~3%、音量±10%、タイミング±1.5~6msの揺らぎ。キックはタイトに、ハットはルーズに、そしてバックビートのスネアは常に+5ms後ろにもたれます。このレイドバックが効きます。8%の確率でフラム(25ms先行の装飾打)。キックにはビーターの「カツッ」というクリック層、スネアは響き線ノイズと胴のトーンの2層で、打撃強度に応じてノイズの減衰とフィルターの明るさが変わります。ハットは白色ノイズをやめて金属的な非整数倍音(FM合成)を主体に。そしてキックとタムを叩くたびに、スネアの響き線が共鳴する微かなバズが鳴ります。意識には上りませんが「同じ部屋にキットが置いてある」感を作る成分です。

ボキャブラリーを16種に増やす

エンジンが安定したところで、語彙の拡張に取りかかりました。エマーソンの語法を洗い直して、7種を追加。フィドル的にメロディと低音ペダルを交互に打つHOEDOWN SHUFFLE、5音セルの16分オスティナートを4拍子に重ねてアクセントをずらしていくTARKUS OSTINATO、3度を半音下から潰すクラッシュ装飾とb5経過音のBLUES CRUSH(RondoやHonky Tonk Train Bluesの語彙です)、バッハ引用癖を反映したBAROQUE SEQUENZ、「長・短短・4度跳躍・長」の付点リズムで必ず4度か5度でハモるFANFARE(Fanfare for the Common Manそのものです)、鍵盤を掌でなぎ払う32分スイープのKEYBOARD SMEAR、オルガン的ペダルポイントのPEDAL CLIMBです。

これで全16型。BERSERK中はSMEARとTARKUSがブーストされ、FANFAREは落ち着いた場面に出やすくなっています。緩急の幅が一気に広がりました。

ハモンドに持ち替える

「ときどきHammondが入るというのはどうだろう」と提案してみました。考えてみればエマーソンの本籍はハモンドです。Moogソロの途中でくるっと振り返ってC-3を弾き倒す、あのステージの動線です。

実装は、セクション交代時に一定確率でリードがハモンドに切り替わるというもの。ドローバー相当の倍音を加算合成し、オルガン語法のフレーズ(ブルース、ペダルポイント、ゼクエンツ)に選択が偏り、オルガンにベンドホイールはないのでポルタメントとピッチベンドは封印されます。画面もハモンドセクション中はIIIcパネルからC-3のコンソール描画に丸ごと切り替わります。9本のドローバー(実際に鳴っている倍音構成から引き出し量を逆算、キャップ色も実機準拠)、パーカッションのロッカースイッチ、VIBRATO/CHORUSセレクタ、そして回転するレズリー・ローター。

ところが最初のハモンドは、あまりハモンドっぽくありませんでした。ここで学んだことが今回いちばん面白い知見かもしれません。ハモンドらしさの決め手は倍音構成ではなく、次の3つでした。

第一にハーモニック・パーカッション。打鍵の瞬間に3rd倍音がポンと立って減衰する、あのコツコツした輪郭です。しかも実機は単発トリガーで、レガート中は再トリガーされません。フレーズ頭でだけフルに鳴るこの挙動まで再現して、ようやく「らしく」なりました。第二にキークリック。接点ノイズの「カチッ」が全打鍵に付くこと。速弾きでクリックが並ぶのがトーンホイールの証です。第三に、レズリーの正体は振幅変調だということ。深いピッチビブラートで代用すると、ワブワブした電子音にしかなりません。左右逆相のトレモロを主体にし、ピッチ揺れをうんと浅くしたら「回っている」音になりました。

さらに「オーバードライブありとなしを両方活かしてほしい」という注文で、クリーンなC-3(木質で丸い、ジャズオルガン寄り)と軋んだC-3の2バリアントになりました。静かな場面ではクリーン、荒れた場面ではオーバードライブが選ばれ、FURYによる歪みの自動上乗せもハモンド中は抑えて、クリーンがクリーンのまま保たれます。レズリーはSLOW(0.8Hz)とFAST(6.6Hz)の回転数切替が入り、実機同様スピンアップ0.9秒・スピンダウン1.7秒のランプで変化します。フレーズ境界でときどき切り替わるので、「スローで歌ってからガーッと回す」あの呼吸が出ます。画面のローターも実際の回転状態に追従して加減速します。

うちにも古いHammond(デジタル音源)があるのですが、少しは近づけたかな?

Tone.jsで長時間演奏させたい人へ

さて、本稿の実用パートです。この開発、演奏が止まる事故が通算7件起きました。全部原因が違いました。Tone.jsで長時間動くジェネレーティブ・ミュージックを作る人のために、戦訓を残しておきます。

1件目、フレーズ連鎖の死。生成は「フレーズ末尾で次を予約する」自己連鎖で動いており、例外が1回出ると連鎖が切れて二度と復帰しません。対策はtry/catchと、連鎖の生存を監視して自動蘇生するウォッチドッグです。

2件目、ロングトーン地獄。Transportに予約したコールバックが例外を投げると、クロックが同じイベントで例外を繰り返してトランスポート全体が詰まります。しかもMonoSynthの発音処理は「アタック開始→ピッチランプ→リリース予約」の順なので、途中で例外が出るとアタック済み・リリース未予約の音が永遠に残ります。対策は全コールバックの防護壁化と、発音失敗時の強制リリースです。

3件目、bpm.rampTo()の罠。bpmはTickSignalという特殊なシグナルで、テンポ変化を積分したティック⇔秒の変換テーブルを内部に持ちます。ここにランプを重ね掛けするとテーブルが壊れることがあり、以降の全スケジュールが無効化されます。テンポの自動化はやめ、フレーズ境界ごとの直接代入に変えました。

4件目、初回だけ動くバグ。Tone.Draw.scheduleにティック表記の時刻を渡していました。Drawの時刻はAudioContextの絶対秒で解釈されるため、初回再生では偶然ほぼ一致して動くのに、STOP→START後はすべて「過去」と判定されて黙って破棄されます。パッチ表示が固まった原因はこれでした。

5件目、時系列の掟。ドラムのフラム実装で「The time must be greater than or equal to the last scheduled time」が出ました。本打を予約した後から、それより早い時刻に装飾打を差し込んでいたのが原因です。同一シンセへの予約は実時刻順でなければなりません。予約順を装飾打→本打に入れ替えるだけで直りました。ちなみにこのとき、例外は防護壁に捕捉されてエラー行に表示され、演奏は止まりませんでした。2件目の対策が生きた瞬間です。

6件目、オシレータ型変更の事故。ハモンド切替を「Moogと同じオシレータをcustom型に変更する」方式で実装していたところ、ときどき切替後に無音になりました。custom型への切替はパーシャル未設定の瞬間ができると例外で中断され、オシレータが壊れたまま残ります。根治策は、ハモンド専用のシンセペアを起動時に構築して常設し、切替を「どちらのペアを鳴らすか」の選択だけにすること。型変更が一切発生しなくなり、事故の芽が構造的に消えました。

7件目、NaNによる完全沈黙。あるとき映像は動いたまま音だけが完全に止まりました。WebAudioではNaNがどこかのノードに入り込むと内部状態が汚染され、以後永久に無音という死に方をします。しかもノード内部に残留するので、通常の停止・再開では治りません。対策として、マスター出力を3秒周期で監視する番人に無音/NaN検知を追加し、検知したら全ノードを破棄して音声グラフを丸ごと再構築するハードリセットを実装しました。

まとめると、こうなります。コールバックは全部防護壁で包む。同一シンセへの予約は時刻順を守る。bpmとDrawには生の時刻表現を渡さない。オシレータの型は実行中に変更しない。そして最後の砦として、クロックと音声出力を外から監視して自動蘇生させる番人を置く。ここまでやって、ようやく一晩回しっぱなしにできる機械になりました。

弾けないまま、演奏する

完成品を回しっぱなしにして聴いています。BERSERKでSYNC GROWLに切り替わり、マシンガン連打から4度跳躍して泣きベンドが入り、次のセクションで唐突にクリーンなC-3に持ち替えてブルースを一節、レズリーをガーッと回してからまたMoogの絶叫に戻ってくる。思わず声が出ました。これは私が弾いたフレーズではありません。誰が弾いたフレーズでもありません。ですが「かっこいいと思うエマーソン」の私なりの定義を、依頼と注文の積み重ねで注ぎ込んだ機械が弾いたフレーズではあるのです。

System 55のパッチケーブルは今日も触れないまま。私の指は相変わらず動きません。でも、「エマーソンのソロ手法を学べないか」という冒頭の問いには、思わぬ形で答えが出ました。sus4で駆け上がって絶叫域でビブラートするあの快感を、フレーズ型に分解し、重みを付け、注文を重ねて磨いていく——その過程で、エマーソンが何をやっていたのかを、耳で聴くだけの頃より遥かに解像度高く理解してしまったのです。演奏の設計図の側なら、書けるようになりました。エマーソンはハモンドにナイフを突き立てましたが、私はコードにパッチを組みました。楽器を作ることも、たぶん演奏の一部なのです。

現在は、STARTとSTOPボタンを押すしかできませんが、奏法や音色をリアルタイムで切り替えたり、iPhoneやiPadの傾き、カメラで捉えたプレイヤーの表情などに連動する仕組みにするのも面白いかもしれません。

筆者が加入しているClaudeのMaxプランで、Fable 5がサブスク内でずっと使えるようになったので、あまり焦らずに改良していこうと思います。


※この記事は、Claudeとの開発のやりとりを元に原稿のベースを執筆させ、それを筆者が整理・追記したものです。

《松尾公也》

Amazon売れ筋ランキング

松尾公也

テクノエッジ編集部 シニアエディター / コミュニティストラテジスト @mazzo

特集

BECOME A MEMBER

『テクノエッジ アルファ』会員募集中

最新テック・ガジェット情報コミュニティ『テクノエッジ アルファ』を開設しました。会員専用Discrodサーバ参加権やイベント招待、会員限定コンテンツなど特典多数です。