イベントBGMのために、8 Deckの再生アプリを自作した
進行が読めないイベントのBGMオペレーションは、2 Deckでは回りません。8 Deckにした理由、EQもSYNCも載せなかった判断、2系統出力の同期で詰まった点まで、macOS用アプリOctaQの開発記録をまとめます。
文 / YKC(イベント配信エンジニア / SynQNow 開発者)
運動会や社内イベントでPAを回していると、BGMのオペレーションはこうなります。Deck 1で入場曲を流しながら、裏でDeck 2に競技BGMを仕込む。競技が終わりそうなので、空いたほうに退場曲を用意する。ところが競技が予定より3分伸びる。仕込んだ退場曲は行き場を失い、同じDeckの中で頭出しして繋ぐ羽目になります。
常に「次に空くDeckはどっちか」を計算しながら手を動かしている状態です。そしてイベントの進行は読めないので、その計算はしょっちゅう崩れます。
8 Deckあれば、先を読んで仕込む余裕が生まれます。 そう考えて作ったのが、macOS用のBGM再生アプリ OctaQ(オクタキュー) です。名前は Octa(8 Deck)と Q(Cue/次を仕込む)から取りました。この記事では、なぜ2 Deckでは足りないのか、何を載せて何を載せなかったのか、そして技術的にどこで詰まったのかを書きます。

2 Deckでは足りない理由は、「曲の伸縮」にある
このアプリがいちばん支えたい操作は、競技の進行に合わせて曲を伸ばしたり縮めたりすることです。結婚式でも同じことをします。
延長したいときは、曲の後半を再生しながら、別のDeckに載せた同じ曲の前半へ繋ぎます。2番のサビのタイミングで1番のサビに戻る、という具合です。短縮したいときは逆に、前半を流しながら後半へ飛びます。
つまり同じ曲を2 Deckに載せて行き来する操作です。ここで2本使ってしまうと、次の展開を仕込む場所が残りません。8 Deckあるということは、行き来のための2本を確保したうえで、その先を用意できるということです。
運動会では幕間のBGMを含めて100曲以上を流します。1競技あたり8 Deckでちょうど足りるくらいなので、8 Deckは「保管場所」ではなく常に入れ替え続ける作業領域という位置づけです。
幕間のBGMも、これまではアプリの外に追い出していました。DJアプリとは別にVLCでループ再生し、別デバイスへ出して物理ミキサーでクロスフェードする。本番中にアプリとVLCと卓の3つを同時に見ていたわけです。Repeat機能を持つDeckを1本置けば、これがアプリの中に収まります。
既存のツールは、どれも「別目的のツールの流用」だった
作る前に、既存のソフトで代替できないかを一通り試しました。
| 製品 | 何のために作られたか | 合わなかった点 |
|---|---|---|
| QLab | 舞台の決まった進行の再生 | 進行が動くイベントに対応しにくい |
| Ableton Live | 楽曲制作 | IN/OUTの設定が制作向けで冗長 |
| DJay Pro | DJプレイ(スクラッチを含む) | 不要な機能が事故を生む。Deck数も足りない |
いずれも優れたソフトです。ただ、「進行が変動するイベントのBGMオペレーション」のために作られたものが、探した限り見つかりませんでした。
載せなかった機能のほうに、時間を使った
EQ、フィルター、SYNC、テンポ、FX、キー表示は載せていません。「まだ作っていない」のではなく「載せない」と決めたものです。
理由は単純で、BGMオペレーションには要らないうえに事故の元だからです。DJアプリを使っていてジョグに手が触れ、スクラッチしてしまう。あれを本番でやると取り返しがつきません。
同じ理由で、独立した停止ボタンを物理コントローラに割り当てられないようにしています。フェーダーを下げれば実質的に停止なので、誤操作で音が消える事故を構造から消せます。STARTボタンは2度押しで停止するトグルにして、物理ボタン1つで開始と停止をまかないます。停止は即断せず短くフェードします。再生中の音を即座に切ると、PAから「ボツッ」と鳴るからです。
一方で、音楽的な判断は自動化しませんでした。 開発中に「1 Deckの中でサビ1とサビ2を自動で繋ぐ」機能を検討して、却下しています。繋ぎ位置は「小節線で繋ぐよりドラムのフィルの手前が自然」「曲によってはクロスフェードよりカット」といった、オペレーターの腕が出る領域です。ここを機械が奪うと、使えない道具になります。
自動化するのは判断ではなく、判断を支える情報の提示です。波形の抑揚、IN/OUT点の試聴、ラウドネスの自動調整。決めるのは人間、という線引きにしました。

MIDIの割り当ては、SCANを押してつまみを動かすだけです。コントローラは8chが物理的に同じ並びのことが多いので、Deck 1の割り当てを2〜8へ写す機能を用意しました。SCANを40回押す作業が8回で済みます。
PC本体とコントローラが離れた場所に置かれることもあるため、手元だけで一周できることを重視しています。曲一覧をジョグで送り、ボタンでDeckに載せ、STARTを押す。ここまでコントローラだけで完結します。
2系統出力は、定番の構成では動かなかった
客席へ出す音と、ヘッドフォンで聴く音を、物理的に別のデバイスへ出す必要があります。ここが技術的にいちばん時間を使った部分でした。
Webで調べると出てくるのは MediaStreamDestination を経由する構成ですが、これは採用できませんでした。モニタ側の再生速度が不安定になり、ピッチが揺れたためです。
最終的に採ったのはミラー方式です。本線はAudioContextを1つ用意して setSinkId() で出力先を指定し、モニタは専用の2つ目のAudioContextを作って、同じ音声データを同じ位置から同期再生します。「1つのContextの出力を分岐する」のではなく「デバイス1台につきContext 1つ」が結論でした。
8 Deckすべてにモニタ用のミラーが付く構成なので、本当に同期が保てるのかを、実装に入る前に検証しました。結果は本線とモニタのずれが中央値0.01ミリ秒、範囲は±0.12ミリ秒(自社実測)。Deck数を1から8に増やしても、Deck間の差は測定の分解能では見えませんでした。
この検証で分かった大事なことがあります。2つのContextの currentTime を引き算しても、同期は測れません。 クロックが別物なので、その差はずれの大きさを表していないからです。測り方を間違えていた期間があり、そのあいだ「ずれている」という誤った結論を持っていました。
なお、モニタ側の先行時間を長めに取ると精度はむしろ悪化します。余裕を持たせるつもりで数字を上げると裏目に出る、という関係でした。
表示が嘘をついていた話
リリース前に第三者視点のレビューを入れたところ、画面でいちばん大きい数字が嘘をついていることが見つかりました。
各Deckに大きく出ている残り時間が、OUT点を無視して曲の終わりまでを表示していたのです。OUT点を0分19秒に打った曲が「−2:08」と出る。実際には13秒後に止まります。
まずいのは、ずれが常に「まだ余裕がある」方向だったことです。事故は必ず「気づいたら曲が終わっていた」という形で出ます。しかもこのアプリはIN点とOUT点を詰めて使う前提なので、使い込むほど表示が実態から離れていく性質を持っていました。
同じレビューで、STOPボタンを緑で塗っていたことも直しました。この画面の緑は一貫して「鳴っている」を意味しているのに、同じ緑で「押すと止まる」ボタンを塗ると、色が状態を、文字が動作を指して逆を向きます。暗い会場から視線を戻したとき、先に目に届くのは色のほうです。
入手について
OctaQは4,800円(税込)の買い切りです。サブスクリプションではありません。
| 対応OS | macOS 12以降(Apple Silicon搭載Mac) |
| 対応音源 | mp3 / wav / aiff / m4a / flac / ogg、音楽CD |
| 対応MIDI | Web MIDI対応のコントローラ(想定機種は KORG nanoKONTROL2 / nanoKONTROL Studio) |
| 推奨構成 | 本線とモニタを物理的に別のオーディオ出力へ(USBオーディオ付きのDJコントローラ + 本体のヘッドフォン端子など) |
ご希望の方はお問い合わせフォームの「OctaQ(BGM再生アプリ)の購入について」からご連絡ください。折り返しお支払い方法をご案内し、確認後にインストーラをお送りします。
なお、このアプリはこれから現場に入れる段階です。設計の判断は20年分の現場から来ていますが、OctaQ自体を本番で回した実績はまだありません。使ってみての気づきは、あらためて書きます。
まとめ
- 進行が読めないイベントのBGMオペレーションでは、曲を伸縮させる操作に2 Deckを使います。先を仕込む余裕を作るために8 Deckにしました
- 既存のツールはどれも別目的のもので、この用途のために作られたものが見つかりませんでした
- EQもSYNCもFXも載せていません。載せないと決めたもので、誤操作の事故を構造から消すための判断です
- 音楽的な判断は自動化しません。自動化するのは、判断を支える情報の提示までです
- 2系統出力は「1つのContextを分岐」ではなく「デバイス1台につきContext 1つ」で成立しました。同期のずれは自社実測で中央値0.01ミリ秒です
- レビューで見つかった不具合は、表示が常に「余裕がある」方向へずれるという質のものでした。数字が大きく出ている場所ほど、疑う価値があります
現場の音まわりの話は、配信のマイナスワン(n-1)とはでも書いています。同じ「本番で音を出す側の都合」から来た記事です。
- #BGM
- #イベント音響
- #PA
- #音楽再生アプリ
- #macOS
- #OctaQ
この記事を書いた人
YKC
イベント配信エンジニア / SynQNow 開発者
イベント制作の現場に25年、映像配信に20年近く携わってきました。オンライン配信が当たり前になるより前から、拠点間中継やライブ配信の現場に立っています。
- イベント制作の現場に入り、以来25年にわたって本番運営に携わる
- 映像配信に軸足を移し、20年近く配信オペレーションと技術設計を担当
- オンライン配信が一般化する以前から、拠点間中継・遠隔中継の現場を手掛ける
- 株主総会をはじめとする、失敗が許されない配信の現場を数多く経験
- 現場で繰り返し直面した課題をそのまま設計に落とし、SynQNowを開発
- ライブ配信
- 超低遅延配信
- WebRTC
- HLS
- RTMP
- SRT
- 拠点間中継
- 株主総会配信
- IR・決算説明会配信
- 社内配信
- イベント音響・映像オペレーション
あわせて読みたい
OctaQ 1.1 — 拍線は出す、小節頭は出さないことにしました
イベントBGM用の8 Deck再生アプリOctaQを1.1に更新しました。HOT CUE、拍線の表示、客席に音を出さずに仕込める操作系、同一オーディオI/Fでの2系統出力。そして小節頭の自動判定を、測ったうえでやめた話を書きます。
- #新機能
- #BGM
- #イベント音響
- #PA
- #音楽再生アプリ
- #macOS
- #OctaQ
配信の音が小さいと言われる理由 — PAの音は、そのまま流せない
PA卓の音をそのまま配信に流すと「小さい」と言われます。原因はレベルではなくダイナミクスレンジ。ラウドネスで測る方法、音楽とプレゼンでの違い、プラグインで整える順番、PCが落ちても音を止めないDanteの構成まで書きます。
- #音声
- #ラウドネス
- #PA
- #イベント音響
- #プラグイン
- #Dante
- #現場対応
ボンディングルーターとは — 回線を束ねる仕組みと2つの種類
複数の携帯回線を束ねて配信用の安定した経路を作るボンディングルーター。パケットを分散して対向で束ね直す仕組み、配信エンコーダ内蔵型とインターネットアクセス専用型の違い、超低遅延の配信につなぐときの注意点を解説します。
- #ボンディングルーター
- #回線
- #冗長化
- #5G
- #LTE
- #リモートプロダクション
