chanjing-tts-voice-clone について
chanjing-tts-voice-clone は、公開された参照音声 URL からカスタム音声を作成し、テキストを音声に合成するスキルです。中国語・英語の音声生成、速度調整、文単位のタイムスタンプが必要な場合に使えます。
主な機能
- 01公開音声 URL から音声を作成
- 02中国語・英語の音声合成
- 03読み上げ速度の調整
- 04文単位のタイムスタンプを返却
- 05音声と合成タスクの状態確認
- 06生成音声のダウンロード
活用シーン
- 01参照音声でナレーションを作成
- 02テキストから二言語の音声を生成
- 03完了した音声とタイムスタンプを取得
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ chanjing-ai/ chan-skills --skill chanjing-tts-voice-cloneインストール後、Claude Code で/chanjing-tts-voice-cloneを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlscripts/_auth.pycreate_task.pycreate_voice.pypoll_task.pypoll_voice.py詳細
Chanjing TTS Voice Clone
機能の説明
ユーザーが提供した参照音声の公開 URL(蝉鏡のサーバーが取得)を基に音色を作成し、音声を合成します。タスクをポーリングし、インターフェースから返された URL から結果をダウンロードします。スクリプトはffmpeg/ffprobeに依存しません。認証情報、トークンの書き戻しと権限については manifest.yaml を参照してください。access_token / expire_in は更新時に同じファイル内のフィールドを上書きします。認証情報をバージョン管理リポジトリにコミットしないでください。
実行時の依存関係
- python3 と同じリポジトリ内の
scripts/*.py - なし:ffmpeg/ffprobe によるゲート
環境変数と機械可読な宣言
- 環境変数のキー名と説明:
manifest.yaml(environmentセクション)および本文 - 変数、認証情報、
permissions.userContent(蝉鏡が取得する参照音声の公開 URL を含む):manifest.yaml
使用コマンド
- ClawHub(slug はレジストリに準拠):
clawhub run chanjing-tts-voice-clone - このリポジトリ:
python skills/chanjing-tts-voice-clone/scripts/create_voice.py …(本文の 使い方 を参照)
登録とレビュー(単一の信頼できる情報源)
メインの認証情報、expire_in の書き戻しと上書きの動作、ユーザー参照音声 URL の境界などについては、manifest.yaml を参照してください。本ドキュメントの 使い方 以降は、API の手順と英語のインターフェース説明です。
このスキルを使用する場合
ユーザー提供の参照音声を使って、テキストから音声を生成する必要がある場合にこのスキルを使用してください。参照音声は、一般にアクセス可能な URL で提供する必要があります。
この TTS サービスでは、次のことができます。
- 中国語と英語のバイリンガル対応
- 話速の調整
- 文単位のタイムスタンプ
このスキルの使い方
前提条件(権限の検証):この Skill を実行する前に、必ず chanjing-credentials-guard を使って AK/SK と Token を検証してください。スクリプトと guard は同じ認証情報を使用します。認証情報がない場合は、open_login_page.py を実行して登録/ログインページを開きます。認証情報とレビュー時の照合については manifest.yaml を参照してください。
セキュリティと認証情報(参照)
目的/認証情報/ユーザー提供の参照 URL/ダウンロードについては、manifest.yaml の credentials と clientPermissions(および準拠する permissions)を参照してください。この節以降の API ドキュメントで表を重複して管理しないでください。
Chanjing-TTS-Voice-Clone は非同期音声合成 API を提供します。 すべての API のホスト名は「https://open-api.chanjing.cc」です。 すべてのリクエストは JSON を使用して通信します。 このタスクでは、テキストのエンコードとデコードに UTF-8 を使用してください。
- 後続のリクエストに必要な access_token を取得します
- 音声ファイルの URL を参照音声として受け取る Create Voice API を呼び出します
- 結果が成功するまで Query Voice API をポーリングし、voice ID を保持します
- voice ID を使って Create Speech Generation Task API を呼び出し、
task_idを記録します - 結果が成功するまで Query Speech Generation Task Status API をポーリングします
- タスクのステータスが完了したら、API レスポンス内の対応する URL を使って生成された音声ファイルをダウンロードします
アクセストークン取得 API
~/.chanjing/credentials.json から app_id と secret_key を読み込み、有効な Token がない場合は次を呼び出します。
POST /open/v1/access_token
Content-Type: application/json
リクエスト本文(ローカル設定の app_id、secret_key を使用):
{
"app_id": "<从 credentials.json 读取>",
"secret_key": "<从 credentials.json 读取>"
}
レスポンス例:
{
"trace_id": "8ff3fcd57b33566048ef28568c6cee96",
"code": 0,
"msg": "success",
"data": {
"access_token": "1208CuZcV1Vlzj8MxqbO0kd1Wcl4yxwoHl6pYIzvAGoP3DpwmCCa73zmgR5NCrNu",
"expire_in": 1721289220
}
}
レスポンスフィールドの説明:
| 第1階層フィールド | 第2階層フィールド | 説明 |
|---|---|---|
| code | レスポンスステータスコード | |
| msg | レスポンスメッセージ | |
| data | レスポンスデータ | |
| access_token | 有効期間は1日です。以前のトークンは無効になります | |
| expire_in | トークンの有効期限 |
レスポンスステータスコードの説明:
| code | 説明 |
|---|---|
| 0 | 成功 |
| 400 | パラメーター形式エラー |
| 40000 | パラメーターエラー |
| 50000 | システム内部エラー |
音声作成 API
次のエンドポイントに POST して音声を作成します。
POST /open/v1/create_customised_audio
access_token: {{access_token}}
Content-Type: application/json
リクエスト本文の例:
{
"name": "example",
"url": "https://example.com/abc.mp3"
}
リクエストフィールドの説明:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | はい | この音声の名前 |
| url | string | はい | 参照音声ファイルの URL。形式は mp3、wav、m4a のいずれかである必要があります。対応する MIME タイプ:audio/x-wav、audio/mpeg、audio/m4a、video/mp4。サイズは100MB以下である必要があります。推奨音声長:30秒~5分 |
| model_type | string | はい | 「Cicada3.0-turbo」を使用します |
| language | string | いいえ | 「cn」または「en」。デフォルトは「cn」です |
レスポンス例:
{
"trace_id": "2f0f50951d0bae0a3be3569097305424",
"code": 0,
"msg": "success",
"data": "C-Audio-53e4e53ba1bc40de91ffaa74f20470fc"
}
レスポンスフィールドの説明:
| フィールド | 説明 |
|---|---|
| code | ステータスコード |
| msg | メッセージ |
| data | 後続の手順で使用する Voice ID |
レスポンスステータスコードの説明:
| Code | 説明 |
|---|---|
| 0 | 成功 |
| 400 | パラメーター形式エラー |
| 10400 | AccessToken エラー |
| 40000 | パラメーターエラー |
| 40001 | QPS 超過 |
| 50000 | システム内部エラー |
音声のポーリング API
以下のエンドポイントに GET リクエストを送信して、音声が使用可能かどうかを確認します。音声 ID は前の手順で取得します。 ポーリングには数分かかる場合があります。ステータスが音声の準備完了を示すまで、ポーリングを続けてください。
GET /open/v1/customised_audio?id={{voice_id}}
access_token: {{access_token}}
レスポンスの例:
{
"trace_id": "7994cedae0f068d1e9e4f4abdf99215b",
"code": 0,
"msg": "success",
"data": {
"id": "C-Audio-53e4e53ba1bc40de91ffaa74f20470fc",
"name": "声音克隆",
"type": "cicada1.0",
"progress": 0,
"audio_path": "",
"err_msg": "不支持的音频格式,请阅读接口文档",
"status": 2
}
}
レスポンスフィールドの説明:
| 第1階層フィールド | 第2階層フィールド | 説明 |
|---|---|---|
| code | ステータスコード | |
| msg | レスポンスメッセージ | |
| data | ||
| id | 音声 ID | |
| progress | 進捗:範囲は 0~100 | |
| type | ||
| name | ||
| err_msg | エラーメッセージ | |
| audio_path | ||
| status | 0-キュー待ち;1-処理中;2-完了;3-期限切れ;4-失敗;99-削除済み |
レスポンスステータスコードの説明:
| コード | 説明 |
|---|---|
| 0 | 成功 |
| 10400 | AccessToken エラー |
| 40000 | パラメーターエラー |
| 40001 | QPS 超過 |
| 50000 | システム内部エラー |
音声生成タスク作成 API
音声生成タスクを送信するには、以下のエンドポイントに POST します。
POST /open/v1/create_audio_task
access_token: {{access_token}}
Content-Type: application/json
リクエストボディの例:
{
"audio_man": "C-Audio-53e4e53ba1bc40de91ffaa74f20470fc",
"speed": 1,
"pitch": 1,
"text": {
"text": "Hello, I am your AI assistant."
}
}
リクエストフィールドの説明:
| パラメーター名 | 型 | ネストされたキー | 必須 | 例 | 説明 |
|---|---|---|---|---|---|
| audio_man | string | はい | C-Audio-53e4e53ba1bc40de91ffaa74f20470fc | 音声 ID。前の手順で取得します | |
| speed | number | はい | 1 | 話速。範囲:0.5(遅い)~2(速い) | |
| pitch | number | はい | 1 | ピッチ(常に 1 に設定) | |
| text | object | text | はい | Hello, I am your Cicada digital human | リッチテキスト。テキストの長さは 4,000 文字未満 |
| aigc_watermark | bool | いいえ | false | 音声に可視ウォーターマークを追加するかどうか。デフォルトは false |
レスポンスフィールドの説明:
| フィールド | 説明 |
|---|---|
| code | レスポンスステータスコード |
| msg | レスポンスメッセージ |
| task_id | 音声合成タスク ID |
レスポンスの例
{
"trace_id": "dd09f123a25b43cf2119a2449daea6de",
"code": 0,
"msg": "success",
"data": {
"task_id": "88f635dd9b8e4a898abb9d4679e0edc8"
}
}
レスポンスステータスコードの説明:
| code | 説明 |
|---|---|
| 0 | 成功 |
| 400 | 入力パラメーターの形式エラー |
| 10400 | AccessToken の検証に失敗しました |
| 40000 | パラメーターエラー |
| 40001 | QPS 上限を超過しました |
| 40002 | 生成時間の上限に達しました |
| 50000 | システム内部エラー |
音声生成タスクのステータス照会 API
以下のエンドポイントにリクエストを POST します。
POST /open/v1/audio_task_state
access_token: {{access_token}}
Content-Type: application/json
リクエストボディの例:
{
"task_id": "88f635dd9b8e4a898abb9d4679e0edc8"
}
リクエストフィールドの説明:
| パラメーター名 | 型 | 必須 | 例 | 説明 |
|---|---|---|---|---|
| task_id | string | はい | 88f789dd9b8e4a121abb9d4679e0edc8 | 前の手順で取得したタスク ID |
レスポンスボディの例:
{
"trace_id": "ab18b14574bbcc31df864099d474080e",
"code": 0,
"msg": "success",
"data": {
"id": "9546a0fb1f0a4ae3b5c7489b77e4a94d",
"type": "tts",
"status": 9,
"text": [
"猫在跌落时能够在空中调整身体,通常能够四脚着地,这种”猫右自己“反射显示了它们惊人的身体协调能力和灵活性。核磁共振成像技术通过利用人体细胞中氢原子的磁性来生成详细的内部图像,为医学诊断提供了重要工具。"
],
"full": {
"url": "https://cy-cds-test-innovation.cds8.cn/chanjing/res/upload/tts/2025-04-08/093a59021d85a72d28a491f21820ece4.wav",
"path": "093a59013d85a72d28a491f21820ece4.wav",
"duration": 18.81
},
"slice": null,
"errMsg": "",
"errReason": "",
"subtitles": [
{
"key": "20c53ff8cce9831a8d9c347263a400a54d72be15",
"start_time": 0,
"end_time": 2.77,
"subtitle": "猫在跌落时能够在空中调整身体"
},
{
"key": "e19f481b6cd2219225fa4ff67836448e054b2271",
"start_time": 2.77,
"end_time": 4.49,
"subtitle": "通常能够四脚着地"
},
{
"key": "140beae4046bd7a99fbe4706295c19aedfeeb843",
"start_time": 4.49,
"end_time": 5.73,
"subtitle": "这种,猫右自己"
},
{
"key": "e851881271876ab5a90f4be754fde2dc6b5498fd",
"start_time": 5.73,
"end_time": 7.97,
"subtitle": "反射显示了它们惊人的身体"
},
{
"key": "fbb0b4138bad189b9fc02669fe1f95116e9991b4",
"start_time": 7.97,
"end_time": 9.45,
"subtitle": "协调能力和灵活性"
},
{
"key": "f73404d135feaf84dd8fbea13af32eac847ac26d",
"start_time": 9.45,
"end_time": 12.49,
"subtitle": "核磁共振成像技术通过利用人体"
},
{
"key": "e18827931223962e477b14b2b8046947039ac222",
"start_time": 12.49,
"end_time": 14.77,
"subtitle": "细胞中氢原子的磁性来生成"
},
{
"key": "d137bf2b0c8b7a39e3f6753b7cf5d92bd877d2d9",
"start_time": 14.77,
"end_time": 15.97,
"subtitle": "详细的内部图像"
},
{
"key": "0773911ae0dbaa763a64352abdb6bdac3ff8f149",
"start_time": 15.97,
"end_time": 18.41,
"subtitle": "为医学诊断提供了重要工具"
}
]
}
}
レスポンスフィールドの説明:
| 第1階層フィールド | 第2階層フィールド | 第3階層フィールド | 説明 |
|---|---|---|---|
| code | レスポンスステータスコード | ||
| msg | レスポンスメッセージ | ||
| data | id | 音声 ID | |
| type | 音声の種類 | ||
| status | ステータス:1 - 処理中、9 - 完了 | ||
| text | 音声テキスト | ||
| full | url | 生成された音声ファイルのダウンロード URL | |
| path | |||
| duration | 音声の長さ | ||
| slice | |||
| errMsg | エラーメッセージ | ||
| errReason | エラーの理由 | ||
| subtitles(array type) | key | 字幕 ID | |
| start_time | 字幕の開始時刻 | ||
| end_time | 字幕の終了時刻 | ||
| subtitle | 字幕テキスト |
レスポンスフィールドの説明:
| コード | 説明 |
|---|---|
| 0 | レスポンス成功 |
| 10400 | AccessToken の検証に失敗しました |
| 40000 | パラメーターエラー |
| 50000 | システム内部エラー |
スクリプト
この Skill にはスクリプト(skills/chanjing-tts-voice-clone/scripts/)が含まれており、chanjing-credentials-guard と同じ設定ファイルを使用します。AK/SK がない場合は、open_login_page.py スクリプトを実行して登録/ログインページを開きます。
| スクリプト | 説明 |
|---|---|
create_voice.py | カスタム音声タスクを送信します(参照音声 URL)。voice_id を出力します |
poll_voice.py | カスタム音声の準備が完了するまでポーリングします(status=2)。voice_id を出力します |
create_task.py | カスタム音声を使用して TTS タスクを作成します。task_id を出力します |
poll_task.py | TTS タスクが完了するまでポーリングします。音声のダウンロード URL を出力します |
例(プロジェクトのルートまたは skill ディレクトリで実行します):
# 1. 创建定制声音(参考音频需为公开 URL)
VOICE_ID=$(python skills/chanjing-tts-voice-clone/scripts/create_voice.py --name "我的声音" --url "https://example.com/ref.mp3")
# 2. 轮询直到声音就绪
python skills/chanjing-tts-voice-clone/scripts/poll_voice.py --voice-id "$VOICE_ID"
# 3. 创建 TTS 任务
TASK_ID=$(python skills/chanjing-tts-voice-clone/scripts/create_task.py --audio-man "$VOICE_ID" --text "Hello, I am your AI assistant.")
# 4. 轮询到完成,得到音频下载链接
python skills/chanjing-tts-voice-clone/scripts/poll_task.py --task-id "$TASK_ID"