はじめに
Opusそのものについては, 別に記事があるのでそちらに譲ります.
音楽ファイルが96kbpsになる日――Opus音声コーデックの実力
ソフトウェアで扱う場合は, 公式Opus Codecのライブラリを使用することが普通と思います. コーデックライブラリlibopus
では少し扱い辛いため, Oggコンテナをとおして読み書きしやすくした opusfile
とともに使うと楽です.
大した理由はないのですが, Oggコンテナを使わない方法を考えてみます.
音質について
技術的に, 汎用とスピーチ向けの圧縮技術を用いています. そのせいか最大ビットレートを下げていった場合に, 大きく音質が切り替わる点があります. また, Vorbis等に比べ可聴域の範囲で高音域が残りやすいように感じます. スピーチでは, 母音が残っていればそれなりに聞き取れるからだと思っています.
Opusのエンコーダ・デコーダ
Opus documentationにAPIのドキュメントがあります. 重要なのは, 処理はサイズが決まったフレーム単位で行うことです. Wavのように全ての圧縮データをひとつなぎにしてしまうと, デコード時にフレームの切れ目がわからなくなりうまく処理できません.
Oggコンテナ
コンテナの仕様は, RFC3533 - The Ogg Excapsulation Format Version 0になります. Oggコンテナではページ単位でデータの塊を管理し, 同じストリームIDのページ群が仮想ストリームを作ります. 次はRFC3533からの引用ですが, これは2つのルールを表現しています. 仮想ストリームの始まり(bos)は, 全仮想ストリームで連続していなければならない. 全ての仮想ストリームの終了(eos)が出現するまで, 次の仮想ストリームの始まりが出現してはならない, というルールです.
RFC3533
-------------------------------------------------------------
|*A*|*B*|*C*|A|A|C|B|A|B|#A#|C|...|B|C|#B#|#C#|*D*|D|...|#D#|
-------------------------------------------------------------
bos bos bos eos eos eos bos eos
Ogg-Opus
RFC7845 - Ogg Encapsulation for the Opus Audio Codecに仕様があります. Opus自体は最大2チャンネルまでの圧縮しかできませんが, Oggの仮想ストリームを利用して256チャンネルまで対応できるように設計されています. フレームの切れ目問題もページの単位を利用すれば解決できます.
まとめ
役に立たない知識ですが, ミドルウェアに頼れない状況で, できるだけ低遅延・高品質に音を再生したい場合に必要になるかもしれません.