コンテンツにスキップ

音声再生機能

吉里吉里Z がサポートする音声再生機能について記載します。

目次

概要

諸元

対応形式

シームレスループ (.sli)

3D 定位 (spatializer)

リップシンク/解析 API

時間伸縮/ピッチシフト

概要

現行の吉里吉里Z は、全ビルドで miniaudio を単一の音声エンジンとして使用します (旧 DirectSound 実装は撤去されています)。

  • WINVER — miniaudio が出力デバイスを所有し、直接デバイスへ出力します。
  • SDL(GENERIC) — miniaudio をデバイス I/O 無効 (no-device) モードで回して PCM を生成し、出力デバイスは SDL3 が所有します。

いずれの系統でもデコード・ミキシング・エフェクト・3D 定位といった音声処理の中核は共通です。

諸元

     
量子化ビット数 整数 : 8bit ~ 32bit
浮動小数点 : 32bit
チャンネル数 1ch, 2ch, 4ch, 6ch(5.1ch)
サンプリング周波数 ソースに依存 (44.1kHz / 48kHz 等)
設定可能値 音量 0 ~ 100000
0 : 完全ミュート
100000 : 100%
設定可能値 音声バランス
(パニング)
-100000 ~ 0 ~ 100000
-100000 : 完全に左
0 : 中央
100000 : 完全に右
設定可能値 再生位置 ミリ秒、サンプル番号

対応形式

WaveSoundBuffer で標準対応する形式は以下の通りです。

形式 拡張子 備考
WAV (RIFF PCM) .wav WAVE_FORMAT_PCM (8~32bit 整数)、WAVE_FORMAT_IEEE_FLOAT (32bit float)、WAVE_FORMAT_EXTENSIBLE (PCM / IEEE_FLOAT サブタイプ) に対応。
Ogg Vorbis .ogg Vorbis デコード。
Opus .opus Opus デコード。

整数 PCM はビット深度を落とさずそのまま再生します ( 8bit = 符号無し / 16・24・32bit = 符号付き。24bit は 3 バイト詰めのまま扱います )。WAVE_FORMAT_EXTENSIBLE で有効ビット数がコンテナ幅より小さい場合 ( 32bit コンテナに 24bit を左詰め、等 ) は、コンテナ幅で読みます。

デコーダ側のアロケーションは SoundAllocator の TLSF プールを経由します。プールサイズは -soundpoolsize で指定でき、既定は 16MB です。

対応形式はプラグインによって拡張することができます。

シームレスループ (.sli)

サウンドループ情報ファイル (.sli ファイル) を用いることで、つなぎめを感じさせないシームレスなループ再生が可能です。ループ位置の指定を含む .sli ファイルは、ループチューナで作成します。

3D 定位 (spatializer)

miniaudio ベースの 3D 定位機能を備えています。

  • WaveSoundBuffer.use3D を有効にすると、そのバッファは 3D 音源として扱われます。
  • 音源側は set3DPosition / set3DVelocity / set3DCone などで位置・速度・指向性を設定します。
  • リスナー側は SoundListener で位置・向き・速度などを制御します。

距離減衰モデルは次の 4 種から選択できます。

モデル 説明
amNone 距離減衰なし
amInverse 逆数減衰
amLinear 線形減衰
amExponential 指数減衰

なお HRTF には対応していないため、前後の区別はつきません。

リップシンク/解析 API

再生中の音声を解析するための API を備えています。リップシンクや音声可視化に利用できます。

API 内容
getSoundLevel RMS / ピークの音量レベルを取得します。
getSoundSpectrum 帯域ごとのスペクトルを取得します。
getVowel 日本語 5 母音の推定重みを取得します。
getVisBuffer 再生位置周辺の生 PCM を取得します。

時間伸縮/ピッチシフト

Phase Vocoder による時間伸縮 (テンポ変更) およびピッチシフトに対応します。WaveSoundBuffer.filters を通じて適用します。