[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80051":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":13,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":14,"rankGlobal":8,"rankLanguage":8,"license":15,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":18,"hasPages":16,"topics":19,"createdAt":8,"pushedAt":8,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":13,"starSnapshotCount":13,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},80051,"mtg-realtime-translator","nanameru\u002Fmtg-realtime-translator","nanameru",null,"Python",62,11,63,0,40.24,"MIT License",false,"main",true,[],"2026-06-12 04:01:26","# mtg-realtime-translator\n\nOpenAI Realtime Translation API を使った、デスクトップ向けのリアルタイム翻訳アプリ（PySide6 製）。\nマイクから入った音声をその場で翻訳し、テキストと音声で返します。Silero VAD をローカルで走らせて、話し終わった瞬間にサーバへコミットさせるので、レイテンシは数百 ms 台。\n\nリポジトリ: \u003Chttps:\u002F\u002Fgithub.com\u002Fnanameru\u002Fmtg-realtime-translator>\n\n## デモ\n\nこんな感じで動きます👇\n\n\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fnanameru\u002Fmtg-realtime-translator\u002Fraw\u002Fmain\u002Fdocs\u002Fvideos\u002Fdemo.mp4\" controls width=\"720\">\u003C\u002Fvideo>\n\n> 上の動画が再生されない場合は [docs\u002Fvideos\u002Fdemo.mp4](docs\u002Fvideos\u002Fdemo.mp4) から直接ダウンロードしてください。\n\n---\n\n## 必要なもの\n\n- macOS \u002F Windows \u002F Linux （動作確認は macOS）\n- Python 3.10+\n- OpenAI API キー（Realtime API が使えるもの）\n- Zoom \u002F Google Meet で使う場合は **仮想オーディオデバイス**（macOS は [BlackHole](https:\u002F\u002Fexistential.audio\u002Fblackhole\u002F) を推奨）\n\n## セットアップ\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fnanameru\u002Fmtg-realtime-translator.git\ncd mtg-realtime-translator\n\npython3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate          # Windows: .venv\\Scripts\\activate\npip install -r requirements.txt\n\ncp .env.example .env\n# .env を開いて OPENAI_API_KEY=sk-... を入れる\n```\n\n## 起動\n\n```bash\npython app.py\n```\n\nウィンドウが開いたら：\n\n1. **Output language** — 翻訳先の言語を選ぶ\n2. **Input** — マイク（自分の声をそのまま訳すならマイク、相手の声を訳すなら後述の仮想デバイス）\n3. **Output** — 再生先のスピーカー\n4. **Start** を押す → 話す → 翻訳テキストが流れてくる\n\n`.env` を編集する代わりに、シェルで `OPENAI_API_KEY` をエクスポートしてもOK。\n\n---\n\n## Zoom \u002F Google Meet で使うとき\n\nここがこのアプリの本命の使い方です。**「相手が話している言語を、自分側でリアルタイムに翻訳して聞く／読む」** ためのセットアップ。\n\nポイントは 2 つ：\n\n1. **会議アプリ側のスピーカー出力を、仮想オーディオデバイスに切り替える**\n   （Zoom \u002F Meet の音声を、本アプリのマイク入力として横取りするため）\n2. **本アプリの Input をその仮想デバイスにする**\n   （横取りした音声を翻訳エンジンに流し込むため）\n\n> **なぜマイク／スピーカーを変える必要があるのか？**\n> Zoom や Google Meet の音声は、普通はそのままスピーカーから出るだけで、他のアプリからは取れません。\n> [BlackHole](https:\u002F\u002Fexistential.audio\u002Fblackhole\u002F) のような **仮想オーディオデバイス** を間に挟むと、Zoom の出力 → BlackHole → 本アプリの入力、という配線ができ、相手の声を翻訳器に渡せるようになります。\n> 同じ理由で、本アプリが翻訳した **自分の声** を会議の相手に届けたい場合は、Zoom \u002F Meet 側の **マイク入力** を BlackHole に切り替える必要があります。\n\n### 手順（macOS \u002F BlackHole の例）\n\n1. BlackHole 2ch をインストール（`brew install blackhole-2ch` でも可）\n2. 用途に合わせて配線する：\n\n   **A. 相手の声を翻訳して聞く**\n   - Zoom \u002F Meet の **スピーカー** を `BlackHole 2ch` に変更\n   - 本アプリの **Input** を `BlackHole 2ch`、**Output** を実スピーカー（MacBook のスピーカー等）に\n   - そのままだと自分には Zoom の音が聞こえなくなるので、macOS の「Audio MIDI 設定」で **複数出力装置**（実スピーカー + BlackHole 2ch）を作って Zoom の出力先にすると、聞きながら翻訳できる\n\n   **B. 自分の翻訳音声を相手に届ける**\n   - 本アプリの **Output** を `BlackHole 2ch` に\n   - Zoom \u002F Meet の **マイク** を `BlackHole 2ch` に変更\n   - 自分が話す → 翻訳された音声が BlackHole に流れ込み、Zoom がそれを「マイク入力」として相手に送る\n\n### 会議アプリ側でマイクを切り替える画面\n\nZoom の例。マイクの「∧」アイコンから出てくるメニューで `BlackHole 2ch` を選びます（Google Meet も画面右上「設定 → 音声」から同じことができます）。\n\n![Zoom のマイク選択メニューで BlackHole 2ch を選択](docs\u002Fimages\u002Fzoom-mic-blackhole.jpeg)\n\n### 本アプリ側で入出力を切り替える画面\n\n`Input` \u002F `Output` のドロップダウンから、同じ `BlackHole 2ch` を選びます（用途 A なら Input、B なら Output）。\n**Start を押した後でも切り替えられます** — デバイスを変えると裏でストリームを張り直すだけで、セッションは継続します。\n\n![Realtime Translator の Output で BlackHole 2ch を選択](docs\u002Fimages\u002Fapp-output-blackhole.png)\n\n### よくあるハマりどころ\n\n- **自分側に何も聞こえない** → Zoom の出力を BlackHole 単独にしてしまっている。macOS の「Audio MIDI 設定」で「複数出力装置」を作って、実スピーカーと BlackHole を同時に鳴らす。\n- **相手に翻訳音声が届かない** → Zoom 側の **マイク** が BlackHole になっているか確認。スピーカーだけ変えても相手には届かない。\n- **エコーが乗る** → Zoom のマイクと本アプリの Output が同じ BlackHole を共有している場合、自分の声が翻訳ループに戻る。Zoom の「マイクをミュート」または用途 A／B のどちらかに絞る。\n\n---\n\n## 仕組み（短く）\n\n- WebSocket で `wss:\u002F\u002Fapi.openai.com\u002Fv1\u002Frealtime\u002Ftranslations?model=gpt-realtime-translate` に接続\n- マイク音声を 24kHz \u002F 20ms チャンクで送信\n- ローカルの Silero VAD（ONNX）で発話の開始／終了を検出 → 終了時に短い無音を流してサーバ VAD のコミットを誘発\n- 起動と同時に WS をプリウォーム（Start を押した瞬間にハンドシェイクが終わっている状態）\n\n詳しいパラメータは [`app.py`](app.py) 冒頭の定数を参照。\n\n## ライセンス\n\n[MIT License](LICENSE) © 2026 nanameru\n","mtg-realtime-translator 是一个基于 OpenAI 实时翻译 API 的桌面实时翻译应用，使用 PySide6 开发。该应用能够将麦克风输入的语音实时翻译成指定语言，并以文本和语音的形式输出。它利用 Silero VAD 在本地检测语音活动，确保在说话结束后的数百毫秒内完成翻译，从而实现低延迟。适合用于需要跨语言交流的在线会议场景，如 Zoom 或 Google Meet 会议中，用户可以通过配置虚拟音频设备来实现实时翻译功能，无论是听懂他人的发言还是让自己的翻译后的声音被他人听到。",2,"2026-06-11 03:59:02","CREATED_QUERY"]