Skip to content

About

アンビエント / ミニマル / ドローン音楽を自動生成

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Elevator One

自動生成のアンビエント / ミニマル / ドローン音楽を鳴らすシングルファイルの楽器。 依存パッケージもビルド工程もなく、index.html をブラウザで開けばそれだけで動く。

最新版: v1.5 — 変更点は CHANGELOG.md を参照。動かしているバージョンはヘッダーのタイトルの右にも出る。配信版ではタグの隣に7桁のコミット番号が付く (スマホ幅では隠れる)。

使い方

最新版は https://elevator-noise.com/ に置いてある。まずはここにアクセスすればよい。

操作説明は about.html にまとめてある (日本語のあとに英語版)。

手元のファイルで動かす場合は、index.html をダブルクリックして Safari か Chrome で開く。ブラウザの自動再生ポリシーにより読み込んだだけでは音が出ないので、XYパッドの中央にある大きな再生ボタン (▶) を押すと鳴りはじめる。このボタンは再生が始まると消え、止めるとまた出る。ボタンの真下には解説ページ about.html への入口「あそびかた」(英語表示では READ ME FIRST) があり、ボタンと一緒に出し入れされる。ヘッダー右上の再生ボタン (▶) でも鳴りはじめ、隣の一時停止ボタン (⏸) で止まる (スペースキーでもトグルできる)。いまの状態の側が点灯するので、鳴っているかどうかは一目で分かる。▶ と ⏸ はアイコンだけの同じ大きさのボタンで、名称は読み上げ用の aria-label とツールチップに入れてある。iOS のロック画面に出るボタンと同じ並び。放置しておくと自動的に変化し続ける。ネットワークには一切接続しない。

iPhone / iPad のような狭い画面では、ヘッダーの下にタブ (雰囲気 / XYパッド / 音作り) が出て、1画面に1セクションずつ表示される。ページ自体はスクロールしない。

ヘッダーのタイトル左にあるアイコンは、ひとつ上の階層 (../) へ戻るリンク。

いま鳴っている雰囲気 (mood) の名前は、ヘッダーのバージョンの右・ブラウザのタイトル・ロック画面 / CarPlay の再生情報の3か所に出る。スライダーやXYパッドで値を手で変えたあとは、末尾に (edit) が付く。

ヘッダーの再生ボタンの左にある「解説」(英語表示では manual) は、操作説明のページ about.html へのリンク。表示言語に合わせて日本語版 / 英語版の位置へ飛ぶ。

VJ ウィンドウ (?vjw)

URL の末尾に ?vjw を付けて開く (例: https://elevator-noise.com/one/?vjw) と、本体とは別に VJ ウィンドウが開く。真っ黒な背景に等幅フォントで、全パラメータの値、ドローン各声やフィルタの実際の周波数・ゲイン、シーケンサのパターン、コード進行、スペクトラム、波形の16進ダンプ、発音イベントのログなどが毎フレーム書き換わり続ける。VDMX などの VJ ソフトでこのウィンドウをキャプチャして素材に使う想定。音と操作は従来どおり本体のタブで行う。

ブラウザのポップアップブロックで読み込み時に開けなかった場合は、再生ボタンを押した時点で開く。閉じてしまったら、ヘッダーの「解説」の右に出る VJW で開き直せる。VJ ウィンドウの中身は本体が描いているので、本体のタブを閉じる / リロードすると一緒に閉じる。

表示言語は日本語と英語に対応している。初回はブラウザの言語設定で決まり (日本語なら日本語、それ以外は英語)、ヘッダーのバージョン表示の隣にある JA / EN でいつでも切り替えられる。選んだ言語はブラウザに保存され、次に開いたときも保たれる。

構造

音は2つの展開系を持ち、「和声率」でクロスフェードする。

  • ドローン展開 — 5声の持続音。緊張度に応じて音程ベクトルを協和から不協和へ連続的に補間するので、和音は微分音的に移り変わる。ピンクノイズ層と、まばらに鳴るFMベルが乗る
  • 和声展開 — マイナー調の4和音進行。2小節または4小節ごとにポルタメントなしで切り替わる。持続音としても、刻みを伴っても鳴る

これに独立した16ステップのシーケンサが重なる。ノコギリ波+矩形波+サブオシレータをレゾナンスの効いたローパスに通し、1音ごとにカットオフをエンベロープで叩く。左右で時間の異なる2系統のディレイを持つ。

すべてのパラメータは目標値に向かって「推移時間」をかけて滑らかに移動する。演奏中に値を変えると、その場で切り替わるのではなく、徐々に音が移っていく。

操作

XYパッド

横軸が明るさ (brightness)、縦軸が密度 (density)(上が疎、下が密)。ドラッグすると目標が移動し、実際の音は遅れて追いかける。白い十字が目標、琥珀のランプが現在地。

背景の色は現在地から生成される。明るいほど明度が上がり、密なほど濃い青へ、疎なほど淡い青緑へ寄る。漂う粒子は、密なら細かく多数、疎なら大きく少数になる。

パラメータ

名称 (ja / en) 内容
音量 / volume 出力音量(0〜100、既定80)。80 までは従来どおりのレベル、80 を超えるとコンプを深めて持ち上げ、音圧を稼ぐ
重さ / weight 全体の音域を下げ、低音の量を増やす
ゆらぎ / motion LFOの深さと速さ。背景グラデーションの呼吸にも連動
緊張 / tension 和音の音程を協和から不協和へ連続的に変える
空間 / space リバーブとディレイの量
ざらつき / grit 歪み、リングモジュレーション、粉塵ノイズ、微細なグレインを同時に立ち上げる
推移時間 / glide 目標値に追いつくまでの時間(5〜300秒)

シーケンサ

名称 (ja / en) 内容
音量 / level 0にするとドローンだけになる
速度 / tempo 55〜150 BPM
変異 / mutate 1小節ごとに音程・ゲート・オクターブが書き換わる確率
カットオフ / cutoff フィルターの開き具合(110〜3200Hz)
レゾナンス / resonance フィルターのQ
MIDIクロック出力 / MIDI clock output 選んだ出力先へ MIDI クロックと Start / Stop を送る (後述)

展開

名称 (ja / en) 内容
和声率 / harmony 0でドローン展開、1で和声展開。中間は両者が重なる
刻み / chop 0.08未満で持続音。上げると刻みが細かくなり、0.5以上で和音の切り替わりが4小節から2小節ごとになる

その他

  • 雰囲気 / mood — 15種のプリセット。全パラメータを一括で設定する
  • シャッフル / shuffle — 既定でON。雰囲気を一定間隔でランダムに切り替える。切り替えは「推移時間」に従ってクロスフェードする。プリセットを直接選ぶ、スライダーを動かす、XYパッドを操作すると自動的にOFFになる
  • 切り替え間隔 / interval — シャッフルの間隔を10〜120秒で決める (既定30秒)。動かすとその場で次の切り替えに反映され、シャッフルはONのまま
  • 自動漂流 / auto drift — 目標値と根音がゆっくり自然に揺れ続ける
  • シーケンス再生成 / reseed sequence — 16ステップの音程とゲートを引き直す

MIDI クロック

音作り → シーケンサの MIDIクロック出力 (英語表示では MIDI clock output) で出力ポートを選ぶと、 シーケンサのテンポに合わせた MIDI クロック (24 PPQN) を送る。再生を始めた小節の頭で Start、停止で Stop も送る。 テンポは「速度」に従い、推移時間をかけて加減速するのに合わせてクロックの間隔も連続して変わる。 外部の DAW・シーケンサ・ドラムマシンを elevator-one のテンポに同期させられる。 Web MIDI を使うので Chrome / Edge で開く (Safari では欄が出ない)。

macOS から MIDI クロックを出力してなんらかの MIDI デバイスを同期させるには、IAC ドライバを有効にする。

  1. 「Audio MIDI 設定」(アプリケーション → ユーティリティ) を開く
  2. メニューの「ウインドウ → MIDI スタジオを表示」(⌘2)
  3. 「IAC ドライバ」をダブルクリックし、「装置はオンライン」にチェックを入れて「適用」。 ポート名 (既定は「バス 1」) は同じ画面で変えられる
  4. MIDIクロック出力 で 接続… を選び、ブラウザの MIDI の許可を出してから IAC ドライバ バス 1 を選ぶ

選んだポートはブラウザに覚えておき、次に開いたときは許可済みなら自動で選び直す。

実装

Web Audio API のみ。外部ライブラリなし。合成、エフェクト、スケジューリングをすべて index.html 内に持つ。

シーケンサとコード進行は AudioContext.currentTime を基準に約21msごとの先読みでスケジュールしている。MIDI クロックも同じ先読みで、Web MIDI の send() にタイムスタンプ付きで予約する。パラメータの平滑化は100msごとの指数補間で、その値を setTargetAtTime でオーディオグラフに渡す。

iOS で画面をロックしたりブラウザを裏に回しても鳴り続けるよう、出力は <audio> 要素経由にし、スケジューリングの時計は AudioWorklet に置いてある (どちらも iOS が Web Audio とタイマーを止めにくるため)。対応していないブラウザでは従来の経路に自動で戻る。ロック画面には再生/一時停止のボタンが出る。

ただし iPadOS では画面をロックしたまま 50分ほど再生し続けるとページごと落ちる (Issue #23)。音が止まるのではなくタブが終了しており、前面に戻すと読み込み直された状態になるので、再生を押し直す必要がある。アプリ側で作るノードやパラメータ操作を完全にゼロにしても再現するため、こちらで打てる手は見つかっていない。macOS の Safari では6時間連続でも問題ない。

ライセンス

MIT

開発者向け情報

保守・追加開発のための詳細は docs/ を参照。

  • CHANGELOG.md — バージョンごとの変更点
  • docs/ARCHITECTURE.md — オーディオグラフの結線、パラメータの流れ(target→current→AudioParam)、 各サブシステム(質感チェーン・シーケンサ・展開の和声進行)の実装詳細
  • docs/PRESETS.md — 15種のプリセットそれぞれの設計意図と、新規プリセットを作るときの目安
  • docs/TESTING.md — Playwright によるテストの走らせ方と、テストを足すときの指針

About

アンビエント / ミニマル / ドローン音楽を自動生成

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages