[{"data":1,"prerenderedAt":298},["ShallowReactive",2],{"content-/fish-audio-free-api-watermark-seed-check":3,"all-pages-for-dir":278,"related-/fish-audio-free-api-watermark-seed-check":279,"og-image-/fish-audio-free-api-watermark-seed-check":297},{"id":4,"title":5,"body":6,"category":257,"concepts":258,"description":259,"extension":260,"meta":261,"navigation":262,"ogImage":258,"path":263,"project_name":264,"published":265,"publishedAt":266,"seo":267,"source":268,"stem":269,"tags":270,"todo":258,"unpublished":265,"updatedAt":258,"__hash__":277},"pages/2026-09/2026-09-25/fish-audio-free-api-watermark-seed-check.md","Fish Audioの無料APIで自分の声を合成し、音声透かしをAudioSealとWavMarkで調べた記録（Irodori-TTSとの比較）",{"type":7,"value":8,"toc":246},"minimark",[9,13,23,26,31,43,51,54,95,98,102,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,191,194,197,200,203,206,209,213,216,219,232,235,238],[10,11,5],"h1",{"id":12},"fish-audioの無料apiで自分の声を合成し音声透かしをaudiosealとwavmarkで調べた記録irodori-ttsとの比較",[14,15,16,17,22],"p",{},"Google タスクの今日の欄に「TTS を試す」が残っていた。\n前日の ",[18,19,21],"a",{"href":20},"/voice-clone-tts-course-narration-research","講座ナレーションを自分の声で作る TTS の調査"," の続きで、今日は実際に音を出す番だった。",[14,24,25],{},"Claude Code にタスクを読ませると、Fish Audio の Drama 3 を試す項目が見つかった。\n準備までは進めてもらったが、先へ進むには私が2点を決める必要があり、そこで止まった。",[27,28,30],"h2",{"id":29},"_11月30日まで無料という告知","11月30日まで無料という告知",[14,32,33,34,42],{},"決める前に、",[18,35,41],{"href":36,"target":37,"rel":38},"https://fish.audio/ja/blog/s2-1-pro-free-api/","_blank",[39,40],"noopener","noreferrer","Fish Audio の無料 API の告知記事"," を Claude Code に渡し、どれだけ無料になるのかを聞いた。",[14,44,45,46,50],{},"答えは、ほぼ使い放題だった。\n",[47,48,49],"code",{},"s2.1-pro-free"," というモデル名を指定すれば、2026年11月30日まで、文字数と回数の上限なしで無料で使える。\nただし、フェアユースポリシーの範囲内という条件が付く。\n無料版の中身は有料版と同じ S2.1 Pro だ、とも Claude Code は説明した。",[14,52,53],{},"私が API キーを 1Password に登録し、Claude Code に叩かせた。\n結果はモデルで分かれた。",[55,56,57,70],"table",{},[58,59,60],"thead",{},[61,62,63,67],"tr",{},[64,65,66],"th",{},"モデル",[64,68,69],{},"結果",[71,72,73,84],"tbody",{},[61,74,75,81],{},[76,77,78,80],"td",{},[47,79,49],{},"（無料）",[76,82,83],{},"通った",[61,85,86,92],{},[76,87,88,91],{},[47,89,90],{},"drama-3-preview","（Drama 3）",[76,93,94],{},"API クレジット不足の HTTP 402 で弾かれた",[14,96,97],{},"この時点では自分の声を送っておらず、既製の声で試しただけである。\n11月末まで無料なら面白い、と思った。\n自分の声を送ることを私が了承すると、Claude Code は合成スクリプトを書き、無料モデルで1回目（23文）を流した。",[27,99,101],{"id":100},"_2回目の合成が-1password-の前で止まる","2回目の合成が 1Password の前で止まる",[14,103,104,105,108,109,112],{},"2回目は、合成に入る前に止まった。\n1Password からキーを読み出す ",[47,106,107],{},"op read"," が、2回続けて ",[47,110,111],{},"authorization timeout"," で失敗したのである。",[14,114,115],{},"10:12 の1回目は通っていた。\nその後に 1Password アプリがロックされたのだろう、というのが Claude Code の見立てだった。\n同じエラーが2回続いたので、プロジェクトのルールどおり issue に記録させた。",[14,117,118],{},"結局、承認ダイアログを出すために Claude Code が合成を流し直し、ダイアログが通ってから2回目も最後まで進んだ。\nグリッド検査も通り、聞き比べページが更新された。",[27,120,121],{"id":121},"聞き比べて浮かんだ透かしへの疑問",[14,123,124],{},"聞き比べると、Irodori-TTS のほうが私の録音した声に近く、Fish のほうが AI 合成に近く聞こえた。",[14,126,127],{},"そこで引っかかったのは、画像生成では勝手に入る識別子のことだった。\nAI の音声にも、合成だと分かる印が入るのだろうか。",[14,129,130],{},"Claude Code に調べさせると、足元から答えが出てきた。\n手元の Irodori の環境に SilentCipher が入っていて、合成のたびに「IRDTS」という識別子を埋め込む作りだった。\n合成したままの音声からは、IRDTS がはっきり読み出せた。\n講座の本番音声は速度を変えてあり、その加工の後では読み出せなかった。\nFish の音声については、入っているとは確認できなかった。",[14,132,133],{},"調べた結果には Gemini の話も含まれていて、それで思い出した。\nGemini は Google のサービスなので、アカウントを BAN されたときなどを考えると面倒だから避けよう、と前に話していたのだった。\nその理由も、Claude Code にメモへ書き足させた。",[14,135,136],{},"今回は Fish の無料版が普通に使えるので、そちらでやるか、とその場では考えた。\n耳は Irodori に寄っているのに、条件は Fish に寄っている。",[27,138,139],{"id":139},"検出器を知らなければ透かしは確かめられない",[14,141,142],{},"Claude Code の説明によると、透かしの有無は原則として、検出する方法（検出器と、多くの場合は秘密の鍵）を知らないと確かめられない。\n耳で聞こえず、統計的にも目立たないように埋め込むのが、透かしの設計目標だからである。\nIrodori の透かしを読み出せたのも、Irodori がソニーの SilentCipher を使っていて、その検出器が公開されているからだった。",[14,144,145],{},"私は AudioSeal と WavMark も試すよう頼んだ。",[14,147,148],{},"Claude Code は AudioSeal（Meta）と WavMark の2つの検出器を当てた。\n検出器が働くかを確かめるため、自分で透かしを入れた音声（陽性）と、私の録音（陰性）も一緒に判定した。",[14,150,151],{},"処理は10分を超えて、バックグラウンドに回った。\n途中で torch の読み込みにつまずき、issue に記録させた。\nGPU 版の torch で読み込めるようになってから、検出器を GPU で動かすようにスクリプトを直してもらった。",[14,153,154],{},"全件の判定が終わった結果は次のとおり。",[55,156,157,170],{},[58,158,159],{},[61,160,161,164,167],{},[64,162,163],{},"音声",[64,165,166],{},"AudioSeal",[64,168,169],{},"WavMark",[71,171,172,182],{},[61,173,174,177,180],{},[76,175,176],{},"Fish",[76,178,179],{},"出なかった",[76,181,179],{},[61,183,184,187,189],{},[76,185,186],{},"Irodori（合成したまま）",[76,188,179],{},[76,190,179],{},[14,192,193],{},"Irodori が使っているのは SilentCipher なので、Irodori から出ないのは想定どおりである。",[27,195,196],{"id":196},"なぜ2回目を作ったのか",[14,198,199],{},"ここで、なぜ2回目を作ったのかが分からなくなり、Claude Code に聞いた。",[14,201,202],{},"Fish で同じ文をもう一度作ると、どのくらい違う音になるか（生成のたびの結果のぶれ）を確かめるためだった。\nGoogle タスクの手順6に「生成のたびの結果のぶれを記録する」と書いてあり、それに合わせて2回作ったという。\nFish の API にはシードを指定する項目がない。\nそのため、同じ台本と同じ参照音声で頼んでも、毎回違う音が返ってくる。",[14,204,205],{},"そう聞いて、Irodori のほうが気になった。\nIrodori は、狙った語だけシード値を変えて音を変え、ほかの部分は全く変えない、ということができるのか。\nだとしたら、切り取って繋げているのか。",[14,207,208],{},"答えは、語単位ではなく文単位だった。\n文ごとに作った音声をつなげている点は、私の推測どおりだった。\nただし切り取っているわけではなく、切れ目は文と文のあいだの無音にしか来ない。",[27,210,212],{"id":211},"fish-に透かしはあるのかもう一度調べる","Fish に透かしはあるのか、もう一度調べる",[14,214,215],{},"検出器2つで出なかったからといって、入っていないとは言えない。\n私は Fish が透かしを入れていないかを、もう少し深く検索するよう頼み、Claude Code からサブエージェントに任せてもらった。",[14,217,218],{},"報告が届くと、要となる2点（運営会社と、ファイルにメタデータが入っていないこと）を Claude Code が自分でも確かめた。\n結論は次のとおり。",[220,221,222,226,229],"ul",{},[223,224,225],"li",{},"メタデータの目印は入っていないと言える",[223,227,228],{},"耳で聞こえない透かしは、公表も検出もなく「不明（入っていない寄り）」",[223,230,231],{},"確実に知るには、Fish Audio に直接問い合わせるしかない",[14,233,234],{},"透かしが見つからないという材料が、Fish の側に一つ増えた。\nこの日はこのあと、Irodori で読み替えが必要だった文を Fish に漢字のまま読ませる比較へ進んだ。",[27,236,237],{"id":237},"学び",[220,239,240,243],{},[223,241,242],{},"音声透かしは、検出器（と多くの場合は鍵）を知らないと確かめられない。Irodori の IRDTS を読み出せたのは、SilentCipher の検出器が公開されていたからだった",[223,244,245],{},"Fish の API にはシード指定がなく、同じ台本と参照音声でも毎回違う音が返る。Irodori の差し替えは語単位ではなく文単位で、切れ目は文と文のあいだの無音に来る",{"title":247,"searchDepth":248,"depth":248,"links":249},"",2,[250,251,252,253,254,255,256],{"id":29,"depth":248,"text":30},{"id":100,"depth":248,"text":101},{"id":121,"depth":248,"text":121},{"id":139,"depth":248,"text":139},{"id":196,"depth":248,"text":196},{"id":211,"depth":248,"text":212},{"id":237,"depth":248,"text":237},"dev",null,"Fish Audioの無料モデル s2.1-pro-free を試し、1Passwordの承認タイムアウトで2回目の合成が止まった経緯、Irodori-TTSに入っていた透かし「IRDTS」、AudioSealとWavMarkによる検出、シード指定の有無と文単位の差し替えを確かめた記録。","md",{},true,"/fish-audio-free-api-watermark-seed-check","misc-dev",false,"2026-09-25T00:00:00.000Z",{"title":5,"description":259},"make-diary","2026-09/2026-09-25/fish-audio-free-api-watermark-seed-check",[271,272,273,274,275,276],"TTS","ボイスクローン","Fish Audio","Irodori-TTS","音声透かし","1Password","TgcSKsJmdYYqvc0RfCvR0NqJrBcZgePfbRX_1r1wK-4",[],[280,283,287,291,294],{"title":281,"path":20,"publishedAt":282},"講座ナレーションを自分の声で作るTTS調査：Irodori-TTSのボイスデザイン、Gemini TTSの制約、Fish Audioの料金とDrama 3","2026-09-24T00:00:00.000Z",{"title":284,"path":285,"publishedAt":286},"Fish Audio S2でボイスクローン - 自分の声でTTS生成する実験記録","/fish-audio-s2-voice-clone","2026-03-17T00:00:00.000Z",{"title":288,"path":289,"publishedAt":290},"2026年3月18日の開発日記 - 教材コンテンツ音声化＆インタラクティブ実装を一気通貫","/2026-03-18-diary","2026-03-18T00:00:00.000Z",{"title":292,"path":293,"publishedAt":290},"Fish Audio v2/v3とElevenLabsで教材ナレーション音声を一括生成した記録","/fish-audio-tts-narration-generation",{"title":295,"path":296,"publishedAt":266},"2026年9月25日の開発日記 - 並行セッションがメモリを取り合い、関数の章をMacへ送った","/2026-09-25-diary","https://log.eurekapu.com/og/blog/fish-audio-free-api-watermark-seed-check.png?v=2026-09-25T00%3A00%3A00.000Z&title=Fish%20Audio%E3%81%AE%E7%84%A1%E6%96%99API%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AE%E5%A3%B0%E3%82%92%E5%90%88%E6%88%90%E3%81%97%E3%80%81%E9%9F%B3%E5%A3%B0%E9%80%8F%E3%81%8B%E3%81%97%E3%82%92AudioSeal%E3%81%A8WavMark%E3%81%A7%E8%AA%BF%E3%81%B9%E3%81%9F%E8%A8%98%E9%8C%B2%EF%BC%88Irodori-TTS%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83%EF%BC%89&author=Kei%20Komatsu&sig=632863dbd84cc0d5",1790469281694]