このPythonスクリプト `add_voice_pptx.py` は、PowerPointプレゼンテーションの各スライドに記述されたノートを音声ファイルに変換し、その音声をプレゼンテーション内の対応するスライドに自動再生設定付きでリンクするツールです。

---

### 1) プログラムの動作

このプログラムは、以下の手順で動作します。

1.  **コマンドライン引数の解析**:
    *   入力となるPowerPointファイルパス (`input.pptx`)。
    *   生成される音声ファイルを保存するディレクトリパス (`audio_dir`)。
    *   音声リンクと自動再生設定が追加された新しいPowerPointファイルパス (`output.pptx`)。
    *   オプションで、音声合成の読み上げ速度 (`speak_rate`) を指定できます（デフォルトは150）。

2.  **音声ファイルの生成 (`generate_audio_files` 関数)**:
    *   指定された入力PowerPointファイルを開きます。
    *   PowerPointの各スライドを順番に処理します。
    *   スライドの「ノート」欄にテキストが記述されているか確認します。
    *   ノートがある場合、そのテキストを `pyttsx3` ライブラリ（内部的にはOSに依存した音声合成エンジン、Windowsの場合はSAPI）を使って音声に変換します。デフォルトでは日本語のHarukaボイス (`TTS_MS_JA_JP_HARUKA_11.0`) を使用します。
    *   生成された音声は `.wav` 形式のファイルとして、指定された `audio_dir` に `slide1.wav`, `slide2.wav` のようにスライド番号に対応するファイル名で保存されます。
    *   ノートがないスライドはスキップされます。
    *   全ての音声合成が完了すると、PowerPointは閉じられます。

3.  **PowerPointへの音声リンクと自動再生設定の追加 (`link_audio_autoplay` 関数)**:
    *   再度、入力PowerPointファイルを開きます。
    *   `generate_audio_files` 関数で生成された音声ファイルとそれに対応するスライドの情報 (`audio_tasks`) を使用します。
    *   各スライドに対して、生成された `.wav` ファイルをメディアオブジェクトとして追加します。
        *   音声ファイルはPowerPointに埋め込まれるのではなく、外部ファイルとしてリンクされます (`LinkToFile=True`, `SaveWithDocument=False`)。
        *   スライドの右下隅に、小さなスピーカーアイコンとして配置されます。
    *   追加されたメディアオブジェクトに対して、以下の自動再生設定を適用します。
        *   スライドが表示されたときに自動的に音声が再生される (`PlayOnEntry = True`)。
        *   スライド表示時に即座に再生が開始されるように、アニメーションのトリガーを設定します (`msoAnimTriggerWithPrevious`)。
    *   全ての処理が完了した後、変更が加えられたプレゼンテーションを、指定された `output_pptx` という新しいファイル名で保存し、PowerPointを閉じます。

### 2) 必要な非標準ライブラリとインストールコマンドとインストール方法

このプログラムは、以下の非標準ライブラリを使用しています。

*   **`pyttsx3`**: PythonでText-to-Speech (TTS) エンジンを操作するためのライブラリです。
*   **`pywin32` (または `pypiwin32`)**: Windows COM (Component Object Model) オブジェクトにアクセスするためのライブラリで、Microsoft Officeアプリケーション（PowerPointなど）をPythonから制御するために必要です。

**インストールコマンド:**

コマンドプロンプトまたはターミナルを開き、以下のコマンドを実行してインストールします。

```bash
pip install pyttsx3
pip install pywin32
```

**インストール方法:**

1.  Pythonがインストールされていることを確認してください。
2.  コマンドプロンプト（Windows）またはターミナル（macOS/Linux）を開きます。
3.  上記 `pip install` コマンドをそれぞれ実行します。
4.  `pywin32` のインストール後、一部の環境では追加のセットアップスクリプトの実行を促されることがあります。その場合は、指示に従って追加のセットアップを実行してください（例: `python -m post_install -install`）。

### 3) 必要な入力ファイル

*   **`input.pptx`**: 音声化したいノートが記述されたPowerPointプレゼンテーションファイル。
    *   各スライドの「ノート」セクションに、そのスライドで読み上げさせたいテキストが入力されている必要があります。ノートがないスライドはスキップされます。

### 4) 実行後に生成される出力ファイル

*   **`output_dir` (ディレクトリ)**: コマンドラインで指定されたディレクトリ。
    *   このディレクトリ内に、各スライドのノートから生成された `.wav` 形式の音声ファイルが保存されます（例: `slide1.wav`, `slide2.wav` など）。
*   **`output.pptx`**: 音声ファイルがリンクされ、自動再生設定が追加された新しいPowerPointプレゼンテーションファイル。
    *   このファイルを開くと、各スライドが表示されると同時に、対応する音声が自動的に再生されます。音声のスピーカーアイコンはスライドの右下隅に表示されます。

### 5) コマンドラインでの使用例 (Usage)

```bash
python add_voice_pptx.py <入力PowerPointファイル> <音声出力ディレクトリ> <出力PowerPointファイル> [読み上げ速度]
```

**例1: 基本的な使用法**

`my_presentation.pptx` を処理し、`audio_files` ディレクトリに音声ファイルを生成し、`my_presentation_with_voice.pptx` を出力します。

```bash
python add_voice_pptx.py my_presentation.pptx audio_files my_presentation_with_voice.pptx
```

**例2: 読み上げ速度を指定**

上記と同じ処理に加えて、読み上げ速度を180 words per minute (WPM) に設定します。

```bash
python add_voice_pptx.py my_presentation.pptx audio_files my_presentation_with_voice.pptx 180
```

**注意点:**

*   このスクリプトはWindows環境でのみ動作します。`win32com.client` はWindows固有のCOMインターフェースを使用するためです。
*   実行時にはPowerPointアプリケーションがインストールされている必要があります。
*   `audio_dir` は実行前に存在しない場合でも、スクリプトが自動的に作成します。