# Audifora 2.0 — 音声エンジン、ライセンス、対応ソース

公開アプリはFFmpeg / libavを含みません。すべてのエンジンを同じサイトの静的ファイルとして読み込み、利用者のブラウザー内で処理します。FFmpegは開発時の比較検証にだけ使用します。

| 用途 | 使用する実装 | ライセンス |
|---|---|---|
| MP3 | LAME 3.100 + AudiforaのWasmブリッジ | LAME: LGPL 2以降、ブリッジ: MIT |
| FLAC | libFLAC 1.5.0 + Wasmブリッジ | BSD、ブリッジ: MIT |
| Vorbis | libvorbis 1.3.7 / libogg 1.3.6 + Wasmブリッジ | BSD、ブリッジ: MIT |
| Opus | libopus 1.6.1 + Wasmブリッジ | BSD、ブリッジ: MIT |
| ALAC生成 | @audio/encode-alac 1.0.0 | Apache 2.0 |
| ALAC検証・読み込み | Apple ALAC reference decoder + Wasmブリッジ | Apache 2.0、ブリッジ: MIT |
| ALACのMP4格納 | @audio/encode-mp4 1.0.0のmuxer | MIT |
| AACのMP4格納 | mp4-muxer 5.2.2 | MIT |
| AAC-LC | WebCodecs AudioEncoder / AudioDecoder | ブラウザー・OSが提供。このサイトからAACエンジンを配布しません |
| WAV・AIFF・ADPCM・G.711、タグ、コンテナー、リサンプリング | Audiforaの読めるJavaScript | MIT |

## ライセンス本文

- [Audifora独自コードとブリッジ — MIT](../LICENSE.txt)
- [LAME — LGPL 2](licenses/LAME-LGPL-2.0.txt)
- [libFLAC 1.5.0 — BSD](licenses/libFLAC-1.5.0-BSD.txt)
- [libvorbis — BSD](licenses/libvorbis-BSD.txt)
- [libogg 1.3.6 — BSD](licenses/libogg-1.3.6-BSD.txt)
- [libopus — BSD](licenses/libopus-BSD.txt)
- [Apple ALAC — Apache 2.0](licenses/Apple-ALAC-Apache-2.0.txt)
- [@audio/encode-alac — Apache 2.0](licenses/alac-js-Apache-2.0.txt)
- [@audio/encode-mp4 — MIT](licenses/mp4-audio-MIT.txt)
- [mp4-muxer — MIT](licenses/mp4-muxer-MIT.txt)

## 再ビルド・変更・差し替え

[対応ソースと再ビルドキット](sources/audifora-codecs-build-kit.tar.gz) に、ネイティブ5エンジンの正確な元ソース、AudiforaのC/C++ブリッジ、Wasm向け設定ヘッダー、ビルドスクリプト、LAMEの変更パッチを同梱しています。外部のライブラリソースを探し直す必要はありません。ビルドキットを別ディレクトリーへ展開して全5エンジンを再ビルドできることを確認しています。

開発者がエンジンを変更する場合の手順です。Webツールの利用者によるインストールは不要です。

1. Emscripten SDK **4.0.15** とPython 3.12以降、`patch` を用意します。
2. キットを展開して `python3 prepare.py` を実行します。
3. `python3 scripts/build-native-codecs.py /absolute/path/to/emsdk sources` を実行します。macOS/Linuxで実行できます。Windowsでビルドする開発者はWSLなどの開発環境を使用してください。
4. 出力の `dist/vendor/audifora-codecs/<codec>.mjs` と `<codec>.wasm` を、サイトの `vendor/audifora-codecs/` に両方コピーします。
5. HTTP(S)で配信し、変更したエンジンの生成物を独立に検証します。

LAMEは独立したモジュールファイルとして読み込まれます。改変版への差し替え、およびその変更のデバッグに必要なリバースエンジニアリングを制限しません。サイトの独自コードもMITで公開しています。

ビルド設定は、ESM、Wasmメモリ拡張（初期16 MiB・上限512 MiB）、2 MiBスタック、スタック検査、ファイルシステムなしです。端末固有のアセンブリやSIMDを必要としません。ソース中のassert用ファイルパスがWasmに含まれるため、異なるディレクトリーからの再ビルドは必ずしもバイト一致しません。

### 加えた変更

- LAME: 低ビットレートでも標準のInfo/LAME遅延・余白情報を保存できるよう、**音声ではない先頭情報フレーム**の格納領域を確保するパッチを適用。音声フレームは指定CBRを維持します。LAME自身がフレームヘッダーとCRCを生成します。パッチ全文はキットの `scripts/wasm/lame-lowrate-tag.patch`。
- ALAC用MP4 muxer: ALACの設定を正しいFullBoxで格納し、多チャンネルの `chan` ボックスを追加。65,535 Hzを超える場合は、16.16固定小数点の格納欄を0にしてALAC設定に正確なレートを保持します。`scripts/wasm/mp4-audio.patch` に変更を収録。
- そのほかのネイティブライブラリのアルゴリズム本体に変更はありません。独自のWasmブリッジ・区間読み込み・メタデータ処理はキットまたは `engine/` の読めるソースに含まれます。

## 個別の元ソース

- [LAME 3.100](sources/lame-98db548.tar.gz)
- [libFLAC 1.5.0](sources/flac-1.5.0.tar.xz)
- [libvorbis 1.3.7](sources/libvorbis-0657aee.tar.gz)
- [libogg 1.3.6](sources/libogg-1.3.6.tar.xz)
- [libopus 1.6.1](sources/opus-1.6.1.tar.gz)
- [Apple ALAC reference](sources/alac-reference.tar.gz)
- [@audio/encode-alac 1.0.0](sources/audio-encode-alac-1.0.0.tgz)
- [@audio/encode-mp4 1.0.0](sources/audio-encode-mp4-1.0.0.tgz)
- [mp4-muxer 5.2.2](sources/mp4-muxer-48cfeb8.tar.gz)

配布ファイル・元ソースのSHA-256と出所は [manifest.json](manifest.json)。ALACとMP4のJavaScriptは `alac-js/`、`mp4-audio/` にも収録しています。

## 先行版の保管ファイル

`wasm-media-encoders/`、`libflacjs/`、`libopus-wasm/` は先行版との比較記録のために残しているファイルです。2.0の生成処理では読み込みません。対応するソースと [MIT](licenses/wasm-media-encoders-MIT.txt)、[libflacjs](licenses/libflacjs-LICENSE.txt)、[libopus-wasm](licenses/libopus-wasm-MIT.txt)、[旧libFLAC](licenses/libFLAC-BSD.txt)、[旧libogg](licenses/libogg-BSD.txt) の許諾文も同梱しています。これらの取得時のハッシュはmanifestに保持しています。
