# SONA 音声エンジン：ライセンスとソース

この配布物は FFmpeg / libav を含まず、実行もしません。以下のライブラリをローカルな静的ファイルとして配布します。通常の音声生成では外部 CDN やサーバーへ音声データを送信しません。

| 用途 | 配布ライブラリ | 内部エンジン | ライセンス |
|---|---|---|---|
| MP3 | wasm-media-encoders 0.7.0 | LAME 3.100 | JS / C wrapper: MIT、LAME: LGPL v2 以降 |
| Ogg Vorbis | wasm-media-encoders 0.7.0 | libvorbis 1.3.7、libogg 1.3.4 | MIT、BSD |
| FLAC | libflacjs 5.6.0 | libFLAC 1.3.4、libogg 1.3.6 | wrapper: MIT、libraries: BSD |
| Ogg Opus | libopus-wasm 0.4.0 | libopus 1.6.1 | wrapper: MIT、library: BSD |
| M4A container | mp4-muxer 5.2.2 | JavaScript MP4 muxer | MIT |
| AAC-LC | ブラウザーの WebCodecs AudioEncoder | OS が提供する AAC エンコーダー | ライブラリバイナリーをこのサイトから配布しません |
| WAV / PCM、Ogg framing、ADTS framing | SONA | JavaScript | プロジェクトのソースに含まれます |

LAME を含む MP3 の WASM は独立したファイルです。利用者は自由にソースを取得し、変更・再ビルドした互換モジュールへ置き換えられます。このライブラリの変更をデバッグするためのリバースエンジニアリングを制限しません。

## ライセンス本文

- [wasm-media-encoders: MIT](licenses/wasm-media-encoders-MIT.txt)
- [LAME: GNU Library General Public License v2](licenses/LAME-LGPL-2.0.txt)
- [libvorbis: BSD](licenses/libvorbis-BSD.txt)
- [libogg 1.3.4: BSD](licenses/libogg-BSD.txt)
- [libflacjs: MIT](licenses/libflacjs-LICENSE.txt)
- [libFLAC: BSD](licenses/libFLAC-BSD.txt)
- [libogg 1.3.6: BSD](licenses/libogg-1.3.6-BSD.txt)
- [libopus-wasm: MIT](licenses/libopus-wasm-MIT.txt)
- [libopus: BSD](licenses/libopus-BSD.txt)
- [mp4-muxer: MIT](licenses/mp4-muxer-MIT.txt)

## 対応するソースコード

すべて同じ公開サイトからダウンロードできます。ライブラリ本体の変更はありません。WAV、メタデータ、タイミングタグ、Ogg / ADTS コンテナーのアプリ側処理は `engine/` の読める JavaScript として提供します。

- [wasm-media-encoders wrapper、Makefile、lockfile](sources/wasm-media-encoders-4a45333.tar.gz) — revision `4a45333baadbab312d1cc0911151dfad23157c51`
- [LAME の正確な対応ソース](sources/lame-98db548.tar.gz) — revision `98db548e8e851defbba3184125ce10725355c332`
- [libogg 1.3.4 の正確な対応ソース](sources/libogg-bada457.tar.gz) — revision `bada45718453ac27b56773ae663f7e65112f6a6e`
- [libvorbis の正確な対応ソース](sources/libvorbis-0657aee.tar.gz) — revision `0657aee69dec8508a0011f47f3b69d7538e9d262`
- [libflacjs wrapper とビルド手順](sources/libflacjs-4c1bce7.tar.gz) — revision `4c1bce76806d947de53af271c9dbb851913a633d`
- [libFLAC 1.3.4](sources/flac-1.3.4.tar.xz)
- [libogg 1.3.6](sources/libogg-1.3.6.tar.xz)
- [libopus-wasm 0.4.0 wrapper とビルド手順](sources/libopus-wasm-v0.4.0.tar.gz)
- [libopus 1.6.1](sources/opus-1.6.1.tar.gz)
- [mp4-muxer の正確な対応ソース](sources/mp4-muxer-48cfeb8.tar.gz)

wrapper アーカイブから `.yarn/cache/` 内のダウンロード済みビルドツールだけを除外しています。全ソース、ビルド設定、依存関係 lockfile、テストを保持しています。依存関係は `yarn install` で再取得できます。元アーカイブの SHA-256、配布アーカイブの SHA-256、npm 配布物の SHA-512、実行ファイルの SHA-256 は [manifest.json](manifest.json) に記録しています。

## LAME / Vorbis の変更と再ビルド

以下は開発者向けです。Web ツールの利用者がインストールやビルドを行う必要はありません。

1. wrapper アーカイブを展開し、LAME アーカイブの内容を `src/wasm/lame/lame-src/` に、libogg 1.3.4 を `src/wasm/vorbis/ogg-src/` に、libvorbis を `src/wasm/vorbis/vorbis-src/` に配置します（アーカイブの最上位ディレクトリーを一段取り除きます）。
2. wrapper に同梱した `.devcontainer/` の開発環境または同梱 README の Emscripten 2.0.8、Node 20、Yarn 環境を使います。Makefile の `wasm-metadce` パスは `/emsdk/upstream/bin/wasm-metadce` です。
3. `yarn install`、`make prod` を実行します。Makefile と lockfile は取得元のままです。
4. 出力された `wasm/mp3.wasm`、`wasm/ogg.wasm`、`dist/umd/WasmMediaEncoder.min.js` をサイトの `vendor/wasm-media-encoders/` にコピーします。JS と WASM の対応バージョンを揃えます。
5. サイトを HTTP(S) で配信して、MP3 / Vorbis の生成・読み取りを確認します。生成エンジンはこの独立モジュールをファイルパスで読み込みます。

FLAC と Opus の再ビルド手順・コンパイラー設定はそれぞれの source archive の README、Makefile、`scripts/build-libopus-wasm.mjs` に含まれます。Opus のビルドには同梱した `opus-1.6.1.tar.gz` と、FLAC のビルドには同梱した FLAC / Ogg source archive を使用できます。

## 取得元

固定バージョンの npm registry と、作者・Xiph.Org の HTTPS 配布元から取得しました。詳細 URL とハッシュは manifest を参照してください。開発用 `scripts/vendor-codecs.py` で npm integrity を検証して同じ配布物を再作成できます。
