chanjing-tts について
Chanjing TTS Open API を使って音声を生成するスキルです。中国語と英語の読み上げに対応し、音声の選択、タスクの状態確認と音声のダウンロードを行い、結果には文単位のタイムスタンプも含まれます。
主な機能
- 01利用可能な音声の一覧表示
- 02音声合成タスクの作成
- 03状態確認と音声のダウンロード
- 04読み上げ速度の調整
- 05文単位のタイムスタンプ出力
活用シーン
- 01中国語テキストの音声化
- 02英語テキストの音声化
- 03音声を選んで読み上げ速度を調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ chanjing-ai/ chan-skills --skill chanjing-ttsインストール後、Claude Code で/chanjing-ttsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlscripts/_auth.pycreate_task.pylist_voices.pypoll_task.py詳細
Chanjing TTS
機能の説明
蝉镜 TTS Open API を呼び出します。音声一覧の取得、合成タスクの作成、ステータスのポーリング、API から返された URL を使った音声のダウンロードを行います。スクリプトは ffmpeg/ffprobe に依存しません。
実行に必要なもの
- python3 と同じリポジトリ内の
scripts/*.py - ffmpeg/ffprobe によるゲートチェックはありません
環境変数と機械可読な宣言
- 環境変数のキー名と説明:
manifest.yaml(environmentセクション)および本文 - 変数、認証情報、コンプライアンス
permissions、clientPermissions、agentPolicy:manifest.yaml
実行コマンド
- ClawHub(slug はレジストリに準拠):
clawhub run chanjing-tts - このリポジトリ:
python skills/chanjing-tts/scripts/create_task.py …(本文の How to Use を参照)
登録と審査(唯一の情報源)
主な認証情報、ダウンロードの動作、primaryEnv の省略などについては、**manifest.yaml**を正とします。本書の How to Use 以降は API の手順説明です。
このスキルを使用するタイミング
ユーザーがテキストから音声を生成する必要がある場合に、このスキルを使用します。
Chanjing TTS は以下をサポートします。
- 中国語と英語の両方
- 複数のシステム音声
- 話速の調整
- 結果内の文単位のタイムスタンプ
このスキルの使用方法
前提条件(権限の検証):このスキルを実行する前に、chanjing-credentials-guard を使用して AK/SK と Token の検証を完了する必要があります。このスキルと guard は同じ認証情報(~/.chanjing/credentials.json)を使用します。認証情報がない場合、スクリプトは**open_login_page.py スクリプトを実行**し、既定のブラウザーで AK/SK の登録/ログインページを開いて、設定コマンドを案内します。認証情報と審査内容の照合については manifest.yaml を参照してください。
セキュリティと認証情報(参照)
詳しくは manifest.yaml の credentials と clientPermissions(およびコンプライアンス関連のトップレベル permissions)を参照してください。
複数の API を呼び出す必要があります。すべて同じドメインを使用します:「https://open-api.chanjing.cc」。 すべてのリクエストは json を使用して通信します。 このタスク全体を通して、テキストのエンコードとデコードには utf-8 を使用してください。
- 後続のすべての API 呼び出しに必要な
access_tokenを取得します - すべての音声 ID を一覧表示し、使用するものを選択します
- Create Speech API を呼び出し、
task_idを記録します - Query Speech Status API を成功するまでポーリングし、その後、レスポンス内の URL を使って生成された音声ファイルをダウンロードします
AccessToken を取得する
~/.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 日です。以前の Token は無効になります | |
| expire_in | Token の有効期限 |
レスポンスステータスコードの説明
| コード | 説明 |
|---|---|
| 0 | 成功 |
| 400 | 無効なパラメーター形式 |
| 40000 | パラメーターエラー |
| 50000 | システム内部エラー |
音声 ID を選択する
API を使って利用可能なすべての音声 ID を取得し、目的に合ったものを選択します。 音声名から方言/アクセントを推測できます。
GET /open/v1/list_common_audio
access_token: {{access_token}}
次のリクエスト本文を使用します。
{
"page": 1,
"size": 100
}
Response example:
```json
{
"trace_id": "25eb6794ffdaaf3672c25ed9efbe49c6",
"code": 0,
"msg": "success",
"data": {
"list": [
{
"id": "f9248f3b1b42447fb9282829321cfcf2",
"grade": 0,
"name": "带货小芸",
"gender": "female",
"lang": "multilingual",
"desc": "",
"speed": 1,
"pitch": 1,
"audition": "https://res.chanjing.cc/chanjing/res/upload/ms/2025-06-05/7945e0474b8cb526e884ee7e28e4af8d.wav"
},
{
"id": "f5e69c1bbe414bec860da3294e177625",
"grade": 0,
"name": "方言口音老奶奶",
"gender": "female",
"lang": "multilingual",
"desc": "",
"speed": 1,
"pitch": 1,
"audition": "https://res.chanjing.cc/chanjing/res/upload/ms/2025-04-30/1b248ad05953028db5a6bcba9a951164.wav"
},
...
],
"page_info": {
"page": 1,
"size": 100,
"total_count": 98,
"total_page": 1
}
}
}
レスポンスフィールドの説明:
| 第 1 階層のフィールド | 第 2 階層のフィールド | 第 3 階層のフィールド | 説明 |
|---|---|---|---|
| code | レスポンスステータスコード | ||
| message | レスポンスメッセージ | ||
| data | レスポンスデータ | ||
| list | List data | 公開音声 - リストデータ | |
| id | 音声 ID | ||
| name | 音声名。地名が含まれる場合、生成される音声は方言です | ||
| gender | 性別 | ||
| lang | 言語 | ||
| desc | 説明 | ||
| speed | 話速 | ||
| pitch | ピッチ | ||
| audition | 試聴リンク | ||
| grade | グレード |
レスポンスステータスコードの説明:
| コード | 説明 |
|---|---|
| 0 | レスポンス成功 |
| 10400 | AccessToken の検証に失敗しました |
| 40000 | パラメーターエラー |
| 50000 | システム内部エラー |
| 51000 | システム内部エラー |
音声作成 API
音声作成タスクを送信します。後でポーリングするためのタスク ID が返されます。
POST /open/v1/create_audio_task
access_token: {{access_token}}
Content-Type: application/json
リクエストボディの例:
{
"audio_man": "89843d52ccd04e2d854decd28d6143ce ",
"speed": 1,
"pitch": 1,
"text": {
"text": "Hello, I am your AI assistant."
}
}
リクエストフィールドの説明:
| パラメーター名 | 型 | ネストされたキー | 必須 | 例 | 説明 |
|---|---|---|---|---|---|
| audio_man | string | はい | 89843d52ccd04e2d854decd28d6143ce | 音声 ID | |
| speed | number | はい | 1 | 音声の速度:0.5(遅い)~2(速い) | |
| pitch | number | はい | 1 | 1 に設定してください | |
| text | object | text | はい | Hello, I am your AI assistant. | リッチテキスト。長さは 4000 文字未満である必要があります |
| aigc_watermark | bool | いいえ | false | 音声に可視のウォーターマークを追加するかどうか。デフォルトは false です |
レスポンスの例:
{
"trace_id": "dd09f123a25b43cf2119a2449daea6de",
"code": 0,
"msg": "success",
"data": {
"task_id": "88f635dd9b8e4a898abb9d4679e0edc8"
}
}
レスポンスフィールドの説明:
| フィールド | 説明 |
|---|---|
| code | レスポンスステータスコード |
| msg | レスポンスメッセージ |
| task_id | 後続のポーリング手順で使用するタスク ID |
レスポンスステータスコードの説明:
| code | 説明 |
|---|---|
| 0 | レスポンス成功 |
| 400 | 無効なパラメーター形式 |
| 10400 | AccessToken の検証に失敗しました |
| 40000 | パラメーターエラー |
| 40001 | QPS 制限を超えています |
| 40002 | 生成時間が上限に達しました |
| 50000 | システム内部エラー |
音声ステータスのポーリングクエリ API
音声が生成されるまで、以下の API をポーリングします。
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 | 字幕テキスト |
レスポンスステータスコードの説明:
| code | 説明 |
|---|---|
| 0 | レスポンス成功 |
| 10400 | AccessToken の検証に失敗しました |
| 40000 | パラメーターエラー |
| 50000 | システム内部エラー |
スクリプト
この Skill にはスクリプト(skills/chanjing-tts/scripts/)が用意されています。権限検証付きで、chanjing-credentials-guard と同じ設定ファイルを使用します。AK/SK がない場合は、guard の open_login_page.py スクリプトを実行し、ブラウザーで登録/ログインページを開いて、設定コマンドを案内します。
| スクリプト | 説明 |
|---|---|
list_voices.py | 公開音声を一覧表示します。デフォルトでは id/name の表を出力し、--json を指定すると全データを出力します |
create_task.py | TTS タスクを作成し、task_id を出力します |
poll_task.py | タスクが完了するまでポーリングし、音声のダウンロード URL(full.url)を出力します |
例(プロジェクトのルートまたは skill ディレクトリで実行):
# 1. 列出可用声音,选取一个 id
python skills/chanjing-tts/scripts/list_voices.py
# 2. 创建合成任务
TASK_ID=$(python skills/chanjing-tts/scripts/create_task.py \
--audio-man "f9248f3b1b42447fb9282829321cfcf2" \
--text "Hello, I am your AI assistant.")
# 3. 轮询到完成,得到音频下载链接
python skills/chanjing-tts/scripts/poll_task.py --task-id "$TASK_ID"