Skip to content

feat(darwin): AquesTalkPlayer を宣言して ゆっくり音声を macOS で生成できるようにする - #600

Open
gapul wants to merge 2 commits into
mainfrom
feat/aquestalkplayer
Open

feat(darwin): AquesTalkPlayer を宣言して ゆっくり音声を macOS で生成できるようにする#600
gapul wants to merge 2 commits into
mainfrom
feat/aquestalkplayer

Conversation

@gapul

@gapul gapul commented Sep 11, 2026

Copy link
Copy Markdown
Owner

なにを

ゆっくり音声(AquesTalk)の合成を macOS だけで完結させるため、AquesTalkPlayer を宣言に追加する。Windows / ゆっくりMovieMaker / AviUtl を経由しなくてよくなる。

CLI が -P <プリセット> -F in.txt -W out.wav でウィンドウを出さずに合成するので、台本から一括でナレーション wav を作れる。話速・音程・声質は GUI 側でプリセットとして保存して、CLI からは名前で呼ぶ(れいむ / まりさ は同梱)。

requireFile を使う理由

配布 URL が Cloudflare Turnstile で守られていて、ブラウザ以外は 403 を返す(IPv4/IPv6・UA・Referer・Cookie いずれも通らないことを確認)。したがって fetchurl では取得できない。requireFile にしてハッシュだけを宣言し、実ファイルはバージョン更新時に一度だけ手で store に入れる。

nix-store --add-fixed sha256 ~/Downloads/AquesTalkPlayer-1.0.1.dmg

1.0.1 は 2025-08-29 リリースなので、この手作業はほぼ発生しない。

実装メモ

  • dmg が APFS なので undmg が読めない(only HFS file systems are supported)。vroid-studio / aivisspeech と同じく 7zz で展開する。
  • $out/bin/aquestalkplayer はバンドル内実行ファイルへの symlink ではなく、実パスを exec するラッパー。symlink 経由だとアプリが自分のバンドルを見つけられず exit 15 で死ぬ。makeWrapper も argv[0] を書き換えるので同じ理由で不可。
  • バイナリは arm64 ネイティブ(thin arm64)。Rosetta 不要。
  • ライセンスは個人・非営利のみ無償。収益化する場合は別途商用ライセンスが要る。

検証

  • nix build 成功、aquestalkplayer -P れいむ -T ... -W out.wav が exit 0 で wav を出力(44000Hz mono 16bit)
  • 展開後も codesign -v が通る
  • nixfmt / deadnix / gitleaks 通過
  • just check は本変更なしでも同じ箇所で落ちる既存の失敗(/nix/store/Developer/.../ai-agent-state/claude/settings.json の絶対パス)。本 PR とは無関係。

Windows/ゆっくりMovieMaker/AviUtl を経由せずに ゆっくり音声の wav を作れる
ようにする。CLI (-P/-T/-F/-W) がウィンドウを出さずに合成するので、台本から
ナレーションを一括生成できる。

配布物が Cloudflare Turnstile で守られていて fetchurl が 403 になるため
requireFile を使う。バージョン更新時のみ手で dmg を store に入れる。
VOICEVOX 互換エンジン (~/Developer/github.com/gapul/yukkuri) が読み・
アクセント解析に Open JTalk を使う。標準ライブラリで賄えない唯一の依存
なので宣言に入れ、チェックアウト側で nix build の out-link を持たなくて
よいようにする。

python3 ではなく yukkuri-python という名前で出す。1つのプログラムのため
の環境が、他の全部が使う python を決めてしまわないように。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant