Unity Library

flareOpus

ロイヤリティフリーの Opus で、フルボイスを同等品質の MP3 比 約 1/3〜1/4.6 に。
Unity 6+ 向けのオーディオデコード・再生プラグイン。

Screenshots

サンプルアプリ

動作確認用のサンプルアプリを iPhone で実行した画面です。画像をクリックすると拡大表示します。

flareOpus サンプルアプリの聴き比べ画面

同じ 100 秒の音源を WAV / MP3 / Opus プリセットで聴き比べ。フルデコード時の AudioClip サイズと、ストリーミング再生時のメモリ削減率を並べて表示

Concept

ボイスデータの肥大化問題に、オープンな解を

フルボイスのゲームでは、ボイスデータが容量の大半を占めがちです。Opus は IETF 標準 (RFC 6716) のロイヤリティフリー・コーデックで、VBR + DTX により「無音区間をほぼ 0 バイト」に圧縮可能。libopus は BSD ライセンスで、出荷本数や売上に関係なくコーデック使用料は発生しません。flareOpus(旧称 OpusPlay)は libopus を Unity から呼べる薄い C# ラッパで、async/await ベースのシンプルな API と UPM 対応で「とりあえず入れて使える」状態を目指しています。

flareOpus 本体は ソースコード込みで提供します。ネイティブのビルドスクリプト、テスト一式、PESQ-WB の実測スクリプトまでリポジトリに同梱しており、組み込み前に挙動を読んで・改造して・自前ビルドできる構成。BSD-3-Clause ライセンスなので、受け取ったソースを社内プロジェクトの監査要件に合わせて改変することも自由です。リポジトリはデフォルト非公開のため、利用をご希望の方は お問い合わせ ください。

圧縮プリセットはすべて PESQ-WB(ITU-T P.862.2、音声品質の MOS 相当指標、1.04〜4.64)で実測したうえで設計。同じ PESQ ライン(≈ 4.3:透明感あり)を達成するのに、MP3 は 64k で 3.1 倍・96k で 4.6 倍、AAC-LC は 96k で 4.6 倍のサイズを要します。低ビットレート帯では特に差が開きます。

Size

同じ音質で、この容量差

音声品質を同じライン(PESQ-WB ≈ 4.3、透明感あり)に揃えたとき、100 秒のボイス 1 本に必要なファイルサイズです。フルボイスのゲームを想定して 10 時間分に換算した値も添えました。ボイスの容量が、そのままダウンロードサイズとアップデート容量の差になります。

Silence

セリフの「間」は、ほとんど 0 バイト

同じ 100 秒の原音を、同じ音質ラインの MP3 96k と flareOpus の VoiceLow プリセット (Opus 24k、DTX 有効) でエンコードし、1 秒ごとに使ったバイト数を並べました。MP3 は黙っている間も喋っているときと同じだけ消費しますが、Opus は 32〜36 秒の 4.5 秒の沈黙で 1 秒あたり約 100 バイトまで落ちます。

MP3 96k と Opus 24k (DTX) の 1 秒あたりバイト数 同じ 100 秒の音源を MP3 96k と Opus 24k VoiceLow プリセットでエンコードしたときの 1 秒ごとのバイト数。MP3 は常に約 12 KB/秒で一定。Opus は発話中で約 2〜3 KB/秒、32〜36 秒の沈黙では約 100 バイト/秒まで下がる。 沈黙 4.5 秒 0 4 KB 8 KB 12 KB 0 20 40 60 80 100 秒 MP3 96k:常に約 12 KB/秒(合計 1.1 MB) Opus 24k · DTX:発話中 2〜3 KB/秒、沈黙中 約 0.1 KB/秒(合計 249 KB) MP3 96k Opus 24k VoiceLow (DTX)
同じ TTS ボイス音源 (100 秒) を ffmpeg + libopus で VoiceLow プリセットの設定 (24 kbps、VOIP、VBR、DTX 有効、16 kHz mono) にエンコードし、パケットごとのサイズを 1 秒単位で合計した実測値。この音源は間が短いため合計サイズの差は数 % ですが、会話劇やチュートリアルのように間の長い音源では、沈黙の長さがそのまま容量削減になります。
Benchmarks

詳しく:サイズ × 音質の散布図

上の比較を、ビットレートを変えた全設定に広げたのがこの散布図です。同じ TTS ボイス音源 (100 秒、24kHz mono PCM 4.6MB) を Opus と MP3 / AAC-LC / HE-AAC / Vorbis で複数設定エンコードし、ファイルサイズと PESQ-WB スコアでプロット。左上ほど「小さく・高音質」で優秀です。

Opus と他コーデックの サイズ × PESQ-WB 散布図 同一の TTS ボイス音源 (100 秒、24kHz mono PCM 4.6MB) を Opus / MP3 / AAC-LC / HE-AAC / Vorbis / IMA ADPCM の各種設定でエンコードしたファイルサイズと PESQ-WB スコアをプロットした散布図。Opus は同一音質ライン (PESQ-WB ≈ 4.3) で MP3 比 約 1/3〜1/4.6、AAC-LC 比 約 1/4.6 のサイズで済む。IMA ADPCM は 96 kbps もありながら PESQ 3.5 と Opus 12k (144K) と同等品質。 0 200 400 600 800 1000 1200 ファイルサイズ (KB) → 3.0 3.5 4.0 4.5 PESQ-WB → ↖ 小さく・高音質ほど優秀 → AAC-LC 96k は 2.0MB (画面外、PESQ 4.41) ↓ HE-AAC 24k は PESQ 2.76 (画面外) Opus VoiceUltra 12k Opus VoiceLow 24k ★ Opus VoiceHigh 32k Opus Music 96k MP3 32k MP3 64k MP3 96k AAC-LC 32k AAC-LC 64k HE-AAC 48k Vorbis q=2 IMA ADPCM 96k Opus (flareOpus) MP3 / AAC-LC / HE-AAC / Vorbis / IMA ADPCM
同じ TTS ボイス音源 (100 秒、24kHz mono PCM 4.6MB、感情起伏の大きいスクリプト) の実測値。PESQ-WB は ITU-T P.862.2 準拠の音声品質スコア (1.04〜4.64)。Opus は同一品質ライン (PESQ-WB ≈ 4.3) で MP3 比 約 1/3〜1/4.6、AAC-LC 比 約 1/4.6 のサイズで済みます。
Listen & Compare

限界圧縮 Opus を、その耳で

同じ TTS ボイス音源 (100 秒、感情起伏の大きいスクリプト) を異なるコーデック・ビットレートで圧縮した結果を、ブラウザ上で直接聴き比べできます。Opus 24k は元の 4.6MB ソースを 256KB まで圧縮しても透明感ラインに届き、MP3 で同等品質を出すには約 4.6 倍のサイズが必要です。

サンプル サイズ PESQ-WB 再生
リファレンス(原音)
PCM 24kHz mono · 配信は FLAC ロスレス
4.6 MB —
Opus 12k VoiceUltra · 限界圧縮
16kHz mono · VBR · VOIP · Wideband
144 KB 原音比 3.0% 3.48
Opus 24k VoiceLow · 透明感ライン ★
16kHz mono · VBR · VOIP · Wideband
256 KB 原音比 5.4% 4.30
MP3 32k LAME
mono · Opus 12k の 2.7 倍サイズで PESQ は僅差 (+0.25)
392 KB Opus 12k の 2.72 倍 3.73
MP3 96k LAME
mono · Opus 24k と同等 PESQ を出すのに必要なサイズ
1.1 MB Opus 24k の 4.59 倍 4.52

Opus サンプルは .webm コンテナにロスレス再パッケージして配信しています(libopus のフレーム自体は無変換、ファイルサイズ表記は元の .opus ストリーム実体ベース)。再生はブラウザネイティブの <audio> 要素のみで、外部スクリプト・解析タグ・Cookie は使用していません。

Features

主な機能

「容量・品質・実装コスト」のバランスを Opus に任せる。

🆓

ロイヤリティフリーの Opus

Opus は IETF 標準 (RFC 6716)、Xiph.Org が patent grant により完全にロイヤリティフリーを宣言。出荷本数・タイトル・プラットフォームに関係なく、コーデック使用料は発生しません。商用ゲームでも追加コストなく Opus を出荷できます。

📬

ソースコード込みで提供

flareOpus 本体はソースコード一式(C# ラッパ・ネイティブビルドスクリプト・テスト・ベンチマーク)ごと提供します。ブラックボックスではなく「中で何をしているか」を確認した上で組み込めます。リポジトリは非公開のため、利用はお問い合わせから。

🎛️

汎用ツールでカリカリ調整

Opus は IETF 標準コーデックなので、エンコード側は ffmpeg や opus-tools などのオープンソースツールでフル制御できます。ビットレート / VBR モード / MaxBandwidth / フレーム長 / DTX をプロジェクトに合わせて追い込めば、用途ごとに最適なサイズ・品質バランスが作れます。Unity 専用エンコーダや専用 SDK は不要です。プリセットから ffmpeg のコマンドラインを生成する API も用意しているので、そこを起点に追い込めます。

📦

高い圧縮率

同じ音声品質 (PESQ-WB ≈ 4.3) を出すのに、MP3 は 3.1〜4.6 倍、AAC-LC は 4.6 倍のサイズを要します。実用ボイス帯 (PESQ ≈ 3.9) でも AAC-LC 比 4.6 倍、限界圧縮帯 (PESQ ≈ 3.5) では IMA ADPCM 比 8.4 倍。低ビットレート帯の優位が大きく、フルボイスでも配信サイズに収まります。

🤫

VBR + DTX で無音 0 バイト

セリフ間の無音区間をほぼ 0 バイトに。会話劇・実況・チュートリアルなど「間」の多い音源で特に効きます。

📏

音質を PESQ-WB で実測

全プリセットを ITU-T P.862.2 準拠の PESQ-WB スコアで計測。VoiceLow (24k) で MOS 相当 4.30、Music (96k) で 4.54 と、数値で品質を担保しています。

⚙️

全プラットフォームで同一挙動

デコードは libopus のソフトウェアデコードで完結。OS 提供のコーデックに依存しないため、iOS / Android / Windows / macOS で同じバイト列から同じ PCMが得られます。端末やOSバージョンによる音の差異や、対応可否の調査が不要です。

🎚️

用途別エンコードプリセット

VoiceUltra / VoiceLow / VoiceHigh / BgmLight / BgmStandard / Music の 6 種。すべて PESQ-WB で実測済みのレシピで、ToFfmpegCommand() でそのまま ffmpeg のコマンドラインを生成できます。ビットレートや帯域は Opus ファイルに焼き込まれる値なので、これらはエンコード側の設定です。

📡

ストリーミング再生

長尺の BGM は AudioClip.PCMReaderCallback 経由のストリーミング再生に対応。100 秒のボイスなら常駐 18.3 MB → 約 325 KB まで下げられます。Seek(TimeSpan) でのシークにも対応。

🧵

async/await ベース

すべての非同期 API が CancellationToken 対応。シーン遷移やキャラ切替でも素直にキャンセルできます。

🔐

byte[] からのロード

ファイルパスだけでなく byte[] からの直接ロードに対応。AssetBundle / 暗号化済みカスタム配信からも安全に渡せます。

📂

.opus をそのままインポート

.opus をプロジェクトに入れるだけで OpusAsset としてインポートされ、Inspector から参照できます。絶対パスを書く必要はありません。Opus として解釈できないファイルはインポート時にエラーになるため、実行時まで問題を持ち越しません。

🧩

パケット単位デコード

Ogg コンテナを経由せず、独自コンテナや暗号化配信から取り出した生 Opus パケット 1 個を直接 PCM に変換する API を用意。自前のサウンドストリーム基盤に組み込めます。

📊

フォーマット情報とメモリ量を取得

デコードせずヘッダだけを読んで、コーデックモード / 帯域幅 / ビットレート / 圧縮率を取得できます。全展開とストリーミングそれぞれのメモリ消費量も算出できるため、どちらで再生するかを数値で判断できます。

📥

UPM 対応

Unity Package Manager 対応。提供されたリポジトリを Git URL またはローカルパッケージとして manifest.json に 1 行追加するだけで使い始められます。

🎼

サンプル 4 種を音源ごと同梱

Basic Playback / Streaming Playback / Packet Decode / Format Comparison の 4 サンプルに、権利クリアな合成音源と完成済みシーンを同梱。Package Manager からインポートすればすぐ再生して挙動を確かめられます。Format Comparison では各プリセットと MP3 のサイズ・PESQ・メモリ消費量を並べて比較できます。

📖

利用ガイドと API リファレンス

英語の利用ガイドと API リファレンスをパッケージに同梱。Package Manager の Documentation リンクから開けます。スレッド制約(ストリーミング再生の公開メンバーはメインスレッド専用、パケットデコーダは 1 インスタンス 1 スレッド)もここに明記しています。

🧪

往復検証で品質担保

WAV → ffmpeg エンコード → flareOpus デコード → PESQ-WB 比較の往復検証 26 件に加え、ネイティブ単体テスト 28 件(AddressSanitizer 付きでも実行)、Unity EditMode テスト 169 件を make test で一括実行し、push 前に必ず通しています。さらに 4 プラットフォームの実機で同じ自己検証 10 項目を走らせ、デコード結果がバイト単位で一致することを確認しています。

Platforms

対応プラットフォーム

主要 4 プラットフォームは実機で自己検証済み(デコード結果は全プラットフォームで完全一致)。コンソールは個別対応。

📱

iOS

iOS 13 以降 (arm64)。device / simulator を含む xcframework を同梱。iPhone 17 / iOS 26.6 で実機検証済み。

🤖

Android

API 25 (Android 7.1) 以降、arm64-v8a。Pixel 5a / Android 11 で実機検証済み。

🪟

Windows

Windows 10 x64。MSVC + 静的 CRT でビルドした DLL のため追加ランタイムは不要(依存は KERNEL32.dll のみ)。Windows 11 Standalone Player で実機検証済み。

🖥️

macOS

macOS 11 以降 (Universal: arm64 + x86_64)。Editor / Standalone 両対応で、Apple Silicon の Standalone Player で実機検証済み。

🎮

コンソール(個別契約)

PlayStation 5 / PlayStation 4 / Nintendo Switch / Xbox Series X|S / Xbox One。各プラットフォーム SDK はユーザー側で用意が必要です。

🛠️

Unity Editor

macOS / Windows の Editor 上での開発確認に対応。EditMode テスト 169 件も両 Editor で通しており、実機ビルド前のイテレーションを短縮できます。

Licensing

ライセンス

Opus コーデック自体はロイヤリティフリー。プラグイン本体も BSD-3-Clause ライセンスで完全無料です。個人・法人、売上規模を問わず、商用タイトルにもそのまま組み込めます。詳細は提供パッケージに同梱の LICENSE.md を参照してください。

🆓

完全無料(個人・商用問わず)

個人の趣味プロジェクトから法人の商用タイトルまで、売上規模に関係なく無料。ライセンス費・ロイヤリティは一切発生しません。ソースコードの改変・再配布・派生物の作成も許可。

📋

条件は著作権表示のみ

再配布時に著作権表示とライセンス文を同梱すること、著作者名を無断で派生製品の宣伝に使わないこと(BSD-3-Clause の標準条件)だけが条件です。ライセンス上の個別契約は不要です(提供自体はお問い合わせベース)。

📜

依存ライブラリ

libopus / libopusfile / libogg(いずれも flareOpus 本体と同じ BSD-3-Clause, Xiph.Org Foundation)に依存。依存ライブラリは CMake の FetchContent で libopus 1.5.2 / libogg 1.3.5 / opusfile 0.12 にバージョン固定して取得しており、各ライブラリの著作権表示は同梱の LICENSE.md に収録しています。ネイティブの公開シンボルは flareopus_* の 11 個に限定し、静的リンクした依存ライブラリのシンボルは外に出しません。

Availability

提供はお問い合わせから

flareOpus のリポジトリはデフォルト非公開です。利用をご希望の方は、利用予定のプロジェクトと対象プラットフォームを添えて [email protected] までご連絡ください。コンソールプラットフォーム対応のご相談も同じ窓口で受け付けています。