# 提出手順 — 音声整音・ノイズ除去（依頼主の作業）

開発側でできるところ（MSIX・掲載文・スクリーンショット・プライバシーポリシー案・聞き比べの目安）は済んでいる（DEVLOG「M3 リリース準備」）。
ここに書いたのは、Partner Center のアカウントと**依頼主自身の声・部屋**が要るため、依頼主にしかできない作業。
**名前はまだ予約していない**（手順 1）。identity・store_id は仮の値のままなので、予約後に手順 2 で差し替えて MSIX を作り直す。

## 0. 手元にあるもの
| もの | 場所 |
|---|---|
| MSIX（未署名・Store が署名する。**identity は仮**） | `apps/audio-post/dist/AudioPost_1.0.0.0_x64.msix`。2026-11-10 の M3 版：138,809,513 バイト、SHA256 `32D39D8D6A3814DEBA9DBE300CF0056BE902A621F3831F0F440AA080C3A8F23F`（確かめ方：`Get-FileHash apps\audio-post\dist\AudioPost_1.0.0.0_x64.msix`。手順 2 で作り直すと値は変わるので、そのときは DEVLOG に新しい値を書く） |
| 掲載文（日本語・英語） | `store/listing-ja.md`・`store/listing-en.md` |
| スクリーンショット 5 枚（1366×768。架空のファイル名・TTS の声＋合成雑音） | `store/screenshots/01〜05.png`（作り直し：`tests/store_shots.py`。手順 2 の末尾） |
| プライバシーポリシー案 | `store/privacy-policy.md` |
| 聞き比べの目安（数値） | この文書の手順 3（素材は `tests/make_listening.py` で作り直せる） |

## 1. 名前を予約する（Partner Center）
1. Partner Center → アプリとゲーム → 新しい製品 → MSIX または PWA アプリ。
2. 名前：**音声整音・ノイズ除去**（2026-11-09 に空きを確認済み。`docs/ms-store-apps/name-availability-2026-11-09.md`）。取られていたら別名を決め、下の差し替えをその名前で行う。
3. 英語の掲載名を別に持つなら、同じ製品に「Audio Cleanup & Noise Reduction」も予約する（任意。予約しない場合は英語の掲載にも日本語の名前を使う）。
4. 製品 → 製品 ID（Product identity）の画面で次をメモする：
   - Package/Identity/Name（例 `imoninja.1234ABCD5678`）
   - Package/Identity/Publisher（`CN=ECF78C6D-…` — transcriber と同じはず）
   - Package Family Name（PFN、例 `imoninja.1234ABCD5678_gytd433ssh6vj`）
   - Store ID（12 文字、例 `9ABCDEFGHIJK`）

## 2. 予約した値に差し替える（開発側に頼んでもよい・5 分）
| ファイル | 項目 | 今の値（仮） | 入れる値 |
|---|---|---|---|
| `apps/audio-post/msix.json` | `identity.name` | `imoninja.AudioPostDev` | Package/Identity/Name |
| 同 | `identity.publisher` | `CN=ECF78C6D-7A8E-415A-BEC7-4C853385A7DE` | Package/Identity/Publisher（同じなら変更なし） |
| 同 | `display_name` | `音声整音・ノイズ除去` | 予約した名前（完全に同じ文字。中黒「・」も全角で） |
| 同 | `_note` | 「仮」の説明 | 消すか「予約済み（日付）」に |
| `apps/audio-post/main.py` | `INFO.store_id` | `""`（空＝購入ボタンで案内文を出す） | Store ID |
| 同 | `INFO.name["ja"]` / `["en"]` | `音声整音・ノイズ除去` / `Audio Cleanup & Noise Reduction` | 予約した名前（英語名を予約しなかったら en はそのままでよい） |
| `store/privacy-policy.md` | §4 の保存先 | `%LOCALAPPDATA%\Packages\<本アプリ>\LocalState` | そのままでもよい（PFN を書くなら `<本アプリ>` を PFN に） |
| `apps/audio-post/DEVLOG.md` | — | — | 差し替えたこと・新しい SHA256 を一行 |

- 名前を変えた場合は、スクリーンショットのヘッダーにアプリ名が写っているので撮り直す（素材の作り方は DEVLOG「M3 リリース準備」の「ストア素材」）：
  ```
  set LOCALAPPDATA=%TEMP%\ap-shots
  set IMOSHELL_LICENSE=purchased
  set QT_QPA_PLATFORM=windows
  apps\audio-post\.venv\Scripts\python apps\audio-post\tests\store_shots.py apps\audio-post\store\screenshots <素材フォルダー>
  ```
- 差し替えたら MSIX を作り直す（アプリのフォルダーで）：`powershell -ExecutionPolicy Bypass -File ..\..\common\build\build.ps1`
  → `dist\AudioPost_1.0.0.0_x64.msix`。`build\licenses\index.json` は差し替えで変わらない（中身は同じ）。

## 3. 自分の声で確かめる（リリース基準・提出前に必ず。30 分〜1 時間）
仕様 07 §10 のリリース基準は「**自分の声＋エアコン音のサンプルで、ノイズ低減と音量均一化が耳で分かること**」。開発側は TTS の声と合成した雑音でしか
確かめていない（下の「目安」）。**依頼主の声・部屋・マイクで一度通す。**

### 3-1. 開発側の目安（TTS＋合成雑音。耳ではなく数値）
素材：Windows の TTS（OneCore の Haruka・Ichiro）で読んだ架空の動画ナレーション 44 秒（段落の間に 2 秒黙る）に、合成した雑音を足したもの。
`1 エアコン`＝送風音＋ゆっくりした揺れ（声に対して SNR 12 dB）、`2 PC ファン＋キーボード`＝ファン（SNR 18 dB）＋打鍵（声と重なる所・黙った所の両方）、
`3 全部入り`＝エアコン 15 dB＋ファン 20 dB＋打鍵。アプリと同じ処理（YouTube -14 LUFS / -1 dBTP）に通して測った（2026-11-10、`tests/make_listening.py`）。

| 雑音 | 設定 | 雑音の減り | 打鍵の減り |
|---|---|---|---|
| 1 エアコン | 軽量 弱 / 中 / 強 | +5.7 / +10.8 / +14.8 dB | — |
| 1 エアコン | AI 弱 / 中 / 強 | +10.7 / +22.4 / **+47.6 dB**（ほぼ無音） | — |
| 2 PC ファン＋キーボード | 軽量 弱 / 中 / 強 | +4.3 / +6.2 / +6.8 dB | +0.7 / +0.9 / +1.0 dB（**ほぼ消えない**） |
| 2 PC ファン＋キーボード | AI 弱 / 中 / 強 | +10.3 / +17.0 / +18.8 dB | +9.4 / +12.2 / +12.5 dB |
| 3 全部入り | 軽量 弱 / 中 / 強 | +4.9 / +7.9 / +9.3 dB | +0.7 / +1.0 / +1.1 dB |
| 3 全部入り | AI 弱 / 中 / 強 | +10.4 / +19.0 / +22.5 dB | +9.4 / +12.2 / +12.5 dB |

- 雑音の減り＝黙っている所の雑音が、声に対して何 dB 下がったか（10 dB で「半分くらいの大きさに聞こえる」、20 dB で「かなり小さい」、40 dB 超は「ほぼ聞こえない」の目安）。打鍵の減り＝黙っている所の打鍵のピーク。
- 声への影響（雑音の無い声だけを通したときの元の声との近さ、SI-SDR）：AI 弱 38.3 / 中 36.3 / 強 35.7 dB、軽量は 60 dB 以上（30 dB 以上はほぼ聞き分けられない目安。
  ただし軽量は雑音が無いと何もしない作りなので、雑音がある所での声への影響はこの数字では分からない）。音量は全設定で -14.1〜-14.2 LUFS にそろった。
- 数字から言えること（耳では確かめていない）：**エアコン・ファンの「サー」「ブーン」は軽量でも中以上で分かる程度に減り、AI は中で大きく減る。キーボードの打鍵は軽量ではほぼ残り、AI でも半分強**。
  AI 強はエアコンを消しきるぶん、実際の声では語尾や息が不自然に切れる恐れがある（合成の素材では出にくい）。既定は「軽量・中」。
- 聞いてみたいときは `apps\audio-post\.venv\Scripts\python apps\audio-post\tests\make_listening.py <出力フォルダー>`（約 5 分）で、処理前（`<素材>.wav`）と各設定の処理後（`<素材>_AI中.wav` など）が出る。

### 3-2. 手順
1. 開発者モードで入れる：アプリのフォルダーで `powershell -ExecutionPolicy Bypass -File ..\..\common\build\build.ps1 -DevInstall`（スタートメニューに「音声整音・ノイズ除去」が出る）。
   開発版の試用は 3 ファイルまでなので、足りなければ開発版を `set IMOSHELL_LICENSE=purchased` → `.venv\Scripts\python main.py` で起動してもよい（処理は同じ）。
2. 録る（いつものマイク・いつもの部屋で。スマホのボイスメモでも可）。各 30〜60 秒、**話の途中に 2〜3 秒黙る所を作る**（雑音だけの所で効きが分かる）：
   - A：エアコン（または換気扇・空気清浄機）を**つけて**話す
   - B：PC ファンが回る状態で、話しながら・黙っている間にキーボードを打つ
   - C：静かな部屋で、マイクから少し離れて小さめの声で話す（音量の均一化の確認用）
   - D（任意）：A と同じ内容を、エアコンを**切って**話す（比べる基準）
3. アプリに A〜C を入れ、試聴カードで ▶処理前 ／ ▶処理後 を聞き比べる。ノイズ除去を 軽量・AI、強さを 弱・中・強 と切り替える（設定を変えると試聴が作り直される）。
   無音カットも一度オンにして、橙色の区間（カット予定）が黙った所に出るか見る。
4. 良さそうな設定で「一括処理を開始」→ できた「名前_整音.拡張子」を、普段使う再生環境（イヤホン・スピーカー）で聞く。可能なら YouTube に限定公開で上げて、
   他の自分の動画と音量が揃っているかも聞く。
5. 下の記録用紙を埋めて、DEVLOG に貼るか開発側に渡す。

### 3-3. 記録用紙（コピーして使う）
```
日付：      マイク／録音機器：            部屋（エアコンの機種・距離など）：
PC：（CPU・メモリ）

[A エアコン]  元の雑音の大きさ（主観）：小 ／ 中 ／ 大
| 設定      | 雑音の減り（◎○△×） | 声の自然さ（◎○△×） | 気づいたこと（こもる・ゆらぐ・語尾が切れる・息が消える 等） |
| 軽量 弱   |  |  |  |
| 軽量 中   |  |  |  |
| 軽量 強   |  |  |  |
| AI 弱     |  |  |  |
| AI 中     |  |  |  |
| AI 強     |  |  |  |
使うならどれ：          理由：

[B PC ファン＋キーボード]  同じ表（打鍵の音が消えるか／残るか も書く）

[C 小さい声]  処理前と処理後の音量差は耳で分かるか：はい／いいえ
              ほかの動画と並べて音量は揃っているか：はい／いいえ／分からない
              音割れ・ポンピング（音量がふわふわ上下する）：なし／あり（どこで）

[無音カット]  黙った所が詰まったか：はい／いいえ　　話の途中（言葉の頭・語尾）が切れた所：なし／あり（何秒あたり）
[処理時間]    ファイルの長さ：   分   設定：     → かかった時間：   分   秒（一括処理カードの表示と比べて）
[落ちた・固まった操作]：
[総合]  リリース基準（ノイズ低減と音量の均一化が耳で分かる）：満たす ／ 満たさない
        既定の設定（ノイズ除去＝軽量・中）を変えたほうがよいか：そのまま ／ AI 中に ／ その他
```
- 満たさない・既定を変えたい場合は、記録用紙と（差し支えなければ）録音を開発側へ。プリセットの強さは `engine/presets.py`（AI の減衰上限
  `AI_ATTEN_LIMIT_DB`）と `engine/spectral.py`（軽量のゲイン下限 `FLOOR_DB`）で調整する。
- 録音は自分のフォルダーにだけ置き、リポジトリ（tests/ など）には入れない。
- 終わったら登録を外す：`Get-AppxPackage -Name imoninja.AudioPostDev | Remove-AppxPackage`（設定・試用の記録も消える。書き出したファイルは残る）。

## 4. プライバシーポリシーを公開する
1. `store/privacy-policy.md` の「最終更新日」を公開日にし、内容を確認する。
2. 公開場所（transcriber・receipt-prep と同じ置き場所）に置き、URL を控える。

## 5. 提出前に一度読むもの（法的な最終確認ではない）
- アプリの「ヘルプ」→「バージョン情報」で、一覧の上の **「Qt 6 / PySide6 / Shiboken6」の表示文**（LGPL v3、差し替えの方法、ソースの入手先）と
  **DeepFilterNet3** の欄（出典・MIT）を読む（手順 3 のついでに）。common TODO-M2 §17.3 の注のとおり、表示文は人が一度読むこと。

## 6. Partner Center で提出する
1. **価格と使用可能状況**：市場＝日本（任意で全市場。英語の掲載文と一部英語の画面はある）、価格 **¥2,480**、
   無料試用＝**「期限なし」（Trial never expires）**（アプリ側で累計 3 ファイルに制限している。試用を「なし」にすると購入前に入れられず、
   期限付きにすると期限後に起動できなくなって 3 ファイルの制限と二重になる）。セール価格：なし。公開日：「認定後すぐに公開」か「手動で公開」。
2. **プロパティ**：カテゴリ＝**写真とビデオ（Photo & video）**（仕様 07 §8「マルチメディア（写真＆ビデオ／音楽）」。音楽を選ぶなら「音楽」）。
   プライバシーポリシーの URL（手順 4）。サポート連絡先 imoninja@gmail.com。
   「このアプリは個人情報にアクセス・収集・送信しますか？」→ **いいえ**（外部送信しない。音声・動画は端末内で処理し、インターネットに接続しない）。
   システム要件（推奨として）：メモリ 8 GB 以上、x64、空き容量 約 0.5 GB（アプリ）＋書き出すファイルの分＋処理中の一時領域（1 時間のステレオで約 3 GB）。
3. **年齢区分**：IARC の質問票（暴力・性的表現等なし、ユーザー同士のやり取りなし、位置情報なし、個人情報の共有なし、アプリ内購入なし、ブラウザー機能なし）→ 全年齢（3+）になるはず。
4. **パッケージ**：手順 2 で作り直した `.msix` をアップロード。対象：Windows 10/11 デスクトップだけ（Xbox・HoloLens 等は外す）。
   エラーが出たら：identity・publisher・display_name の不一致がほとんど（予約情報と 1 文字でも違うと弾かれる）。
5. **ストア登録情報（日本語）**：`listing-ja.md` を貼る。スクリーンショット 5 枚を番号順に（キャプションは listing の表）。アイコンはパッケージのもの。
   **英語**：`listing-en.md`。パッケージが ja-JP と en-US を宣言しているので両方の登録情報が求められる。
6. **申請オプション**：
   - 制限付き機能 `runFullTrust` の理由（英語で貼る）：
     > Desktop (Win32) app packaged as MSIX (Python/Qt). runFullTrust is required to run the desktop executable and the bundled
     > FFmpeg (LGPL build) that decodes and encodes the user's audio/video files locally. The app has no network access and
     > does not send user files or data anywhere.
   - 認定の注意事項（Notes for certification、英語で貼る）：
     > Batch noise reduction and loudness normalization for speech audio/video, fully offline (the AI model DeepFilterNet3 is bundled;
     > no network access). To test: Queue > Add files > choose any wav/mp3/m4a/mp4/mov with speech > the preview card shows
     > before/after waveforms (play buttons) > Start batch. Output is saved next to the original as "name_整音.ext" (originals are
     > not modified). Trial: the Store trial allows 3 processed files in total (in-app counter); the full version has no limit.
     > The default language is Japanese; English UI is partially available (Settings > General > Language).

## 7. 公開後すぐ（2 週間は夜間チェック：ロードマップの共通基準 4）
「手動で公開」や限定公開にしておけば、一般に出す前にここを確かめられる。ログは `%LOCALAPPDATA%\Packages\<PFN>\LocalState\logs\app.log`。
- [ ] Store から試用版をインストール → ヘッダーが「試用 残り 3 ファイル」。1 ファイル処理すると減る。ログに `store license: active=True trial=True`。
- [ ] 同じアカウントで購入 → アプリに戻るか再起動 → 「製品版」。ログに `store license: active=True trial=False`。購入ボタンで Store のページが開く（store_id が入っているか）。
- [ ] **オフライン**（common TODO-M2 §18.2。オフラインが売りなので必ず）：購入した PC で一度ネットありで起動 →「製品版」を確認して閉じる →
      機内モードで起動 →「製品版」のままか・1 ファイル処理できるか。ログに `store license: active=True trial=False` か
      `store license failed -> using last known state purchased`（`timeout`・`inactive` のこともある）が出れば正常。機内モードを戻す。
- [ ] 処理中に×→「中止して終了」で閉じて、もう一度起動できる（開発側で 10 回以上確認済み。DEVLOG）。
- [ ] 評価・レビューと imoninja@gmail.com を毎晩見る。音質の問い合わせには「どの雑音か・マイク・設定（軽量/AI・強さ）」を聞く（音声は送ってもらわなくてよい、と掲載文に書いた）。

## 未確認のまま提出することになる点（知っておいてほしいこと）
- 実際の声・実際の部屋の雑音での効き（手順 3 で確認）。プリセットの強さは合成雑音の数値で決めたまま。
- 速度はアイドル状態の PC で測っていない（開発中は他の作業と CPU を取り合っていた。掲載文の「10 分で軽量 約 1.5 分・AI 約 3 分」はその条件の値）。
- 1 時間を超える長い動画・4K の動画（無音カット時の映像の再エンコードの画質・時間）。
- Windows 10、Windows N エディション（Media Feature Pack なし。無音カット時の映像の再エンコードが h264_mf → openh264 → mpeg4 に落ちる）。
- Store 経由の購入・試用・オフライン判定の実反映（公開後にしか確かめられない）。

## プライバシーポリシーの URL（2026-11-10 公開済み）
https://audio-cleanup-noise-reduction.pages.dev/ （Cloudflare Pages。更新手順は ms-store-apps/privacy-site/README.md）。Partner Center の「プライバシー ポリシーの URL」にこれを入れる。

## 提出用の最終 MSIX（2026-11-10、名前の予約後）

**これより前に書いた MSIX の大きさ・SHA256 は古い。提出にはこれを使う。**

- `apps/audio-post/dist/AudioPost_1.0.0.0_x64.msix`：138818516 バイト
- SHA256 `F123772462E8D8B7517CCE1EBCDD3C4897417E20139FB034CC267700E4016B34`
- Identity/Name `imoninja.40412DE081394`、Store ID `9N26RQ9XR3PB`、Publisher `CN=ECF78C6D-7A8E-415A-BEC7-4C853385A7DE`
- 含むもの：BOM 付き JSON の読み込み（common §22・アプリ側 utf-8-sig）、ライセンス収集の改善（§23）、左メニューの UIA（§23）、ビルド時の PATH 固定（§24：Git の OpenSSL DLL 混入なし）
- この PC にも同じレイアウトを開発者モードで登録済み（動作確認用）
