CosyVoice 音声クローンサービスは、大規模な生成音声モデルを使用して、従来のトレーニングを必要とせず、わずか 10〜20 秒の音声サンプルから、非常に類似性の高い自然なカスタムボイスを作成します。音声クローンと音声合成は、連続した 2 つのステップです。このドキュメントでは、音声クローンの API パラメーターと詳細について説明します。音声合成については、「リアルタイム音声合成 - CosyVoice/Sambert」をご参照ください。
このドキュメントは、中国 (北京) リージョンにのみ適用されます。モデルを使用するには、中国 (北京) リージョンの API キーを使用する必要があります。
ユーザーガイド:モデルの紹介と選択方法については、「リアルタイム音声合成 - CosyVoice/Sambert」をご参照ください。
音声の要件
高品質なクローン結果を得るためには、高品質な入力音声が不可欠です。
項目 | 要件 |
サポート形式 | WAV (16-bit)、MP3、M4A |
音声の長さ | 推奨:10〜20 秒。最大:60 秒。 |
ファイルサイズ | 10 MB 以下 |
サンプリングレート | 16 kHz 以上 |
サウンドチャンネル | モノラル / ステレオ。ステレオ音声の場合、最初のチャンネルのみが処理されます。最初のチャンネルに有効な人間の音声が含まれていることを確認してください。 |
コンテンツ | 音声には、バックグラウンドサウンドのない、5 秒以上の連続したクリアな読み上げが含まれている必要があります。音声の残りの部分には、短い無音 (2 秒以下) のみを含めることができます。コアとなる読み上げコンテンツの品質を確保するため、音声クリップ全体にバックグラウンドミュージック、ノイズ、または他の音声が含まれていないようにしてください。通常の話し言葉の音声をインプットとして使用してください。クローンされた音声の精度と実用性を確保するため、歌や歌唱の音声はアップロードしないでください。 |
言語 | 音声を駆動する音声合成モデル (
|
はじめに:クローンから合成まで
1. ワークフロー
音声クローンと音声合成は、密接に関連していますが、異なる 2 つのステップです。プロセスは「作成してから使用する」というフローに従います:
音声の作成
音声の作成 API を呼び出し、音声クリップをアップロードします。システムが音声を分析し、一意のクローン音声を作成します。このステップでは、作成した音声で使用する音声合成モデルを選択するために、
target_model/targetModelを指定する必要があります。すでに音声を作成している場合は、このステップをスキップできます。音声リストのクエリ API を呼び出して、既存の音声を確認します。
音声合成に音声を使用
音声合成 API を呼び出し、前のステップで取得した音声 ID を渡します。このステップで指定する音声合成モデルは、前のステップで指定した
target_model/targetModelと同じでなければなりません。
2. モデル構成と事前準備
適切なモデルを選択し、必要な準備を完了します。
モデル構成
音声をクローンする際に、次の 2 つのモデルを指定します:
音声クローンモデル:voice-enrollment
音声で使用する音声合成モデル:
最良の結果を得るには、リソースと予算が許す限り
cosyvoice-v3-plusを使用してください。バージョン
シナリオ
cosyvoice-v3-plus
十分な予算で最高の音質と表現力を求める場合。
cosyvoice-v3-flash
パフォーマンスとコストのバランスを取り、高い価値を提供する場合。
cosyvoice-v2
古いバージョンとの互換性や、要件が低いシナリオの場合。
事前準備
API キーの作成:API キーを作成します。セキュリティ上の理由から、API キーを環境変数としてエクスポートしてください。
SDK のインストール:DashScope SDK の最新バージョンがインストールされていることを確認してください。
音声 URL の準備:音声の要件を満たす音声ファイルを、Object Storage Service (OSS) などの一般公開されている場所にアップロードします。
3. エンドツーエンドの例:クローンから合成まで
次の例は、音声クローンによって生成されたカスタムボイスを音声合成で使用して、元の音声に酷似した出力を生成する方法を示しています。
主要な原則:音声をクローンする際、
target_model(音声で使用する音声合成モデル) は、音声合成 API を呼び出すときに指定する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。例の
AUDIO_URLを実際の音声 URL に置き換えることを忘れないでください。
import os
import time
import dashscope
from dashscope.audio.tts_v2 import VoiceEnrollmentService, SpeechSynthesizer
# 1. 環境の準備
# API キーを環境変数として設定します。
# export DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
if not dashscope.api_key:
raise ValueError("DASHSCOPE_API_KEY 環境変数が設定されていません。")
# 2. クローンパラメーターの定義
TARGET_MODEL = "cosyvoice-v3-plus"
# 音声に意味のあるプレフィックスを付けます。
VOICE_PREFIX = "myvoice" # 数字と小文字のみ使用可能、10 文字未満。
# 一般公開されている音声 URL
AUDIO_URL = "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/cosyvoice/cosyvoice-zeroshot-sample.wav" # 例の URL です。ご自身の URL に置き換えてください。
# 3. 音声の作成 (非同期タスク)
print("--- ステップ 1: 音声登録の作成 ---")
service = VoiceEnrollmentService()
try:
voice_id = service.create_voice(
target_model=TARGET_MODEL,
prefix=VOICE_PREFIX,
url=AUDIO_URL
)
print(f"音声登録が正常に送信されました。リクエスト ID: {service.get_last_request_id()}")
print(f"生成された音声 ID: {voice_id}")
except Exception as e:
print(f"音声作成中にエラーが発生しました: {e}")
raise e
# 4. 音声ステータスのポーリング
print("\n--- ステップ 2: 音声ステータスのポーリング ---")
max_attempts = 30
poll_interval = 10 # 秒
for attempt in range(max_attempts):
try:
voice_info = service.query_voice(voice_id=voice_id)
status = voice_info.get("status")
print(f"試行 {attempt + 1}/{max_attempts}: 音声ステータスは '{status}' です")
if status == "OK":
print("音声は合成の準備ができています。")
break
elif status == "UNDEPLOYED":
print(f"音声処理がステータス: {status} で失敗しました。音声の品質を確認するか、サポートに連絡してください。")
raise RuntimeError(f"音声処理がステータス: {status} で失敗しました")
# "DEPLOYING" などの途中ステータスの場合、待機を続行します。
time.sleep(poll_interval)
except Exception as e:
print(f"ステータスのポーリング中にエラーが発生しました: {e}")
time.sleep(poll_interval)
else:
print("ポーリングがタイムアウトしました。数回の試行後も音声の準備ができていません。")
raise RuntimeError("ポーリングがタイムアウトしました。数回の試行後も音声の準備ができていません。")
# 5. クローンした音声を使用して音声を合成
print("\n--- ステップ 3: 新しい音声で音声を合成 ---")
try:
synthesizer = SpeechSynthesizer(model=TARGET_MODEL, voice=voice_id)
text_to_synthesize = "おめでとうございます、ご自身の音声を正常にクローンして合成しました!"
# call() メソッドはバイナリ音声データを返します。
audio_data = synthesizer.call(text_to_synthesize)
print(f"音声合成に成功しました。リクエスト ID: {synthesizer.get_last_request_id()}")
# 6. 音声ファイルの保存
output_file = "my_custom_voice_output.mp3"
with open(output_file, "wb") as f:
f.write(audio_data)
print(f"音声が {output_file} に保存されました")
except Exception as e:
print(f"音声合成中にエラーが発生しました: {e}")API リファレンス
異なる API を使用する場合、すべての操作が同じアカウントで実行されていることを確認してください。
音声の作成
クローン用の音声ファイルをアップロードして、カスタムボイスを作成します。
Python SDK
API の説明
def create_voice(self, target_model: str, prefix: str, url: str, language_hints: List[str] = None) -> str:
'''
新しいカスタムボイスを作成します。
param: target_model 音声を駆動する音声合成モデル。後で音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。推奨モデルは cosyvoice-v3-flash または cosyvoice-v3-plus です。
param: prefix 音声の分かりやすい名前 (数字、大文字と小文字のアルファベット、アンダースコアのみ使用可能、10 文字まで)。ロールやシナリオに関連する識別子を使用してください。このキーワードはクローンされた音声名に表示されます。生成される音声名の形式は model_name-prefix-unique_identifier です。例:cosyvoice-v3-plus-myvoice-xxxxxxxx。
param: url 音声クローン用の音声ファイルの URL。URL は一般公開されている必要があります。
param: language_hints ターゲットの音声特徴を抽出するために使用されるサンプル音声の言語を指定します。このパラメーターは cosyvoice-v3-flash および cosyvoice-v3-plus モデルにのみ適用されます。
モデルがサンプル音声 (元の参照音声) の言語を識別し、音声特徴をより正確に抽出し、クローン結果を向上させるのに役立ちます。
指定された言語ヒントが実際の音声言語と一致しない場合 (例:中国語の音声ファイルに 'en' を設定)、システムはヒントを無視し、音声コンテンツから言語を自動的に検出します。
有効値:zh (デフォルト)、en、fr、de、ja、ko、ru。このパラメーターは配列ですが、現在のバージョンでは最初の要素のみが処理されます。1 つの値のみを渡してください。
return: voice_id 音声 ID。音声合成 API の voice パラメーターに直接使用できます。
'''target_model:音声を駆動する音声合成モデル。これは、音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。language_hints:ターゲットの音色特徴を抽出するために使用されるサンプル音声の言語を指定します。このパラメーターは cosyvoice-v3-flash および cosyvoice-v3-plus モデルにのみ適用されます。説明:このパラメーターは、モデルがサンプル音声 (元の参照音声) の言語を識別し、音声特徴をより正確に抽出し、クローン結果を向上させるのに役立ちます。指定された言語ヒントが実際の音声言語と一致しない場合 (例:中国語の音声ファイルに
enを設定)、システムはヒントを無視し、音声コンテンツから言語を自動的に検出します。有効値:
zh:(デフォルト)
en:英語
fr:フランス語
de:ドイツ語
ja:日本語
ko:韓国語
ru:ロシア語
注:このパラメーターは配列ですが、現在のバージョンでは最初の要素のみが処理されます。1 つの値のみを渡してください。
リクエスト例
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
# 頻繁な呼び出しは避けてください。各呼び出しで新しい音声が作成されます。クォータ制限に達すると、それ以上音声を作成できなくなります。
voice_id = service.create_voice(
target_model='cosyvoice-v3-plus',
prefix='myvoice',
url='https://your-audio-file-url',
language_hints=['en']
)
print(f"リクエスト ID: {service.get_last_request_id()}")
print(f"音声 ID: {voice_id}")Java SDK
API の説明
/**
* 新しいカスタムボイスを作成します。
*
* @param targetModel 音声を駆動する音声合成モデル。後で音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。推奨モデルは cosyvoice-v3-flash または cosyvoice-v3-plus です。
* @param prefix 音声の分かりやすい名前 (数字、大文字と小文字のアルファベット、アンダースコアのみ使用可能、10 文字まで)。ロールやシナリオに関連する識別子を使用してください。このキーワードはクローンされた音声名に表示されます。生成される音声名の形式は model_name-prefix-unique_identifier です。例:cosyvoice-v3-plus-myvoice-xxxxxxxx。
* @param url 音声クローン用の音声ファイルの URL。URL は一般公開されている必要があります。
* @param customParam カスタムパラメーター。ここで languageHints を指定できます。
* languageHints は、ターゲットの音声特徴を抽出するために使用されるサンプル音声の言語を指定します。このパラメーターは cosyvoice-v3-flash および cosyvoice-v3-plus モデルにのみ適用されます。
* モデルがサンプル音声 (元の参照音声) の言語を識別し、音声特徴をより正確に抽出し、クローン結果を向上させるのに役立ちます。
* 指定された言語ヒントが実際の音声言語と一致しない場合 (例:中国語の音声ファイルに 'en' を設定)、システムはヒントを無視し、音声コンテンツから言語を自動的に検出します。
* 有効値:zh (デフォルト)、en、fr、de、ja、ko、ru。このパラメーターは配列ですが、現在のバージョンでは最初の要素のみが処理されます。1 つの値のみを渡してください。
* @return Voice 新しく作成された音声。Voice オブジェクトの getVoiceId メソッドを使用して音声 ID を取得できます。ID は音声合成 API の voice パラメーターに直接使用できます。
* @throws NoApiKeyException API キーが空の場合。
* @throws InputRequiredException 必須パラメーターが空の場合。
*/
public Voice createVoice(String targetModel, String prefix, String url, VoiceEnrollmentParam customParam) throws NoApiKeyException, InputRequiredExceptiontargetModel:音声を駆動する音声合成モデル。これは、音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。languageHints:ターゲットの音色特徴を抽出するために使用されるサンプル音声の言語を指定します。このパラメーターは cosyvoice-v3-flash および cosyvoice-v3-plus モデルにのみ適用されます。説明:このパラメーターは、モデルがサンプル音声 (元の参照音声) の言語を識別し、音声特徴をより正確に抽出し、クローン結果を向上させるのに役立ちます。指定された言語ヒントが実際の音声言語と一致しない場合 (例:中国語の音声ファイルに
enを設定)、システムはヒントを無視し、音声コンテンツから言語を自動的に検出します。有効値:
zh:(デフォルト)
en:英語
fr:フランス語
de:ドイツ語
ja:日本語
ko:韓国語
ru:ロシア語
注:このパラメーターは配列ですが、現在のバージョンでは最初の要素のみが処理されます。1 つの値のみを渡してください。
リクエスト例
import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentParam;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
String apiKey = System.getenv("DASHSCOPE_API_KEY");
String targetModel = "cosyvoice-v3-plus";
String prefix = "myvoice";
String fileUrl = "https://your-audio-file-url";
String cloneModelName = "voice-enrollment";
try {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
Voice myVoice = service.createVoice(
targetModel,
prefix,
fileUrl,
VoiceEnrollmentParam.builder()
.model(cloneModelName)
.languageHints(Collections.singletonList("en")).build());
logger.info("音声作成が送信されました。リクエスト ID: {}", service.getLastRequestId());
logger.info("生成された音声 ID: {}", myVoice.getVoiceId());
} catch (Exception e) {
logger.error("音声の作成に失敗しました", e);
}
}
}RESTful API
基本情報
URL | |
リクエストメソッド | POST |
リクエストヘッダー | |
メッセージ本文 | すべてのリクエストパラメーターを含むメッセージ本文は次のとおりです。必要に応じてオプションのフィールドを省略できます: 重要
|
リクエストパラメーター
パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
model | string | - | はい | 音声クローンモデル。値は |
action | string | - | はい | 操作タイプ。値は |
target_model | string | - | はい | 音声を駆動する音声合成モデル。推奨モデルは cosyvoice-v3-flash または cosyvoice-v3-plus です。 これは、音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。 |
prefix | string | - | はい | 音声の分かりやすい名前 (数字、大文字と小文字のアルファベット、アンダースコアのみ使用可能、10 文字まで)。ロールやシナリオに関連する識別子を使用してください。 このキーワードはクローンされた音声名に表示されます。生成される音声名の形式は |
url | string | - | はい | 音声クローン用の音声ファイルの URL。URL は一般公開されている必要があります。 |
language_hints | array[string] | - | いいえ | ターゲットの音声特徴を抽出するために使用されるサンプル音声の言語を指定します。このパラメーターは cosyvoice-v3-flash および cosyvoice-v3-plus モデルにのみ適用されます。 説明:このパラメーターは、モデルがサンプル音声 (元の参照音声) の言語を識別し、音声特徴をより正確に抽出し、クローン結果を向上させるのに役立ちます。指定された言語ヒントが実際の音声言語と一致しない場合 (例:中国語の音声ファイルに 有効値:
注:このパラメーターは配列ですが、現在のバージョンでは最初の要素のみが処理されます。1 つの値のみを渡してください。 |
レスポンスパラメーター
パラメーター | タイプ | 説明 |
voice_id | string | 音声 ID。音声合成 API の |
音声リストのクエリ
ページングクエリを使用して、作成された音声のリストを取得します。
Python SDK
API の説明
def list_voices(self, prefix=None, page_index: int = 0, page_size: int = 10) -> List[dict]:
'''
作成されたすべての音声をクエリします。
param: prefix 音声のカスタムプレフィックス。数字と小文字のみ使用可能、10 文字まで。
param: page_index クエリのページインデックス。
param: page_size クエリのページサイズ。
return: List[dict] 音声のリスト。各音声の ID、作成時間、変更時間、ステータスが含まれます。形式:[{'gmt_create': '2025-10-09 14:51:01', 'gmt_modified': '2025-10-09 14:51:07', 'status': 'OK', 'voice_id': 'cosyvoice-v3-myvoice-xxx'}]
音声ステータスは 3 種類あります:
DEPLOYING:審査中
OK:承認済み、使用可能
UNDEPLOYED:未承認、使用不可
'''リクエスト例
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
# プレフィックスでフィルタリングするか、None に設定してすべてをクエリします。
voices = service.list_voices(prefix='myvoice', page_index=0, page_size=10)
print(f"リクエスト ID: {service.get_last_request_id()}")
print(f"見つかった音声: {voices}")レスポンス例
[
{
"gmt_create": "2024-09-13 11:29:41",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
},
{
"gmt_create": "2024-09-13 13:22:38",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 13:22:38",
"status": "OK"
}
]レスポンスパラメーター
パラメーター | タイプ | 説明 |
voice_id | string | 音声 ID。 |
gmt_create | string | 音声が作成された時間。 |
gmt_modified | string | 音声が変更された時間。 |
status | string | 音声ステータス:
|
Java SDK
API の説明
// 音声ステータスは 3 種類あります:
// DEPLOYING:審査中
// OK:承認済み、使用可能
// UNDEPLOYED:未承認、使用不可
/**
* 作成されたすべての音声をクエリします。デフォルトのページインデックスは 0、デフォルトのページサイズは 10 です。
*
* @param prefix 音声のカスタムプレフィックス。数字と小文字のみ使用可能、10 文字まで。null も可。
* @return Voice[] Voice オブジェクトの配列。Voice オブジェクトは、音声 ID、作成時間、変更時間、ステータスをカプセル化します。
* @throws NoApiKeyException API キーが空の場合。
* @throws InputRequiredException 必須パラメーターが空の場合。
*/
public Voice[] listVoice(String prefix) throws NoApiKeyException, InputRequiredException
/**
* 作成されたすべての音声をクエリします。
*
* @param prefix 音声のカスタムプレフィックス。数字と小文字のみ使用可能、10 文字まで。
* @param pageIndex クエリのページインデックス。
* @param pageSize クエリのページサイズ。
* @return Voice[] Voice オブジェクトの配列。Voice オブジェクトは、音声 ID、作成時間、変更時間、ステータスをカプセル化します。
* @throws NoApiKeyException API キーが空の場合。
* @throws InputRequiredException 必須パラメーターが空の場合。
*/
public Voice[] listVoice(String prefix, int pageIndex, int pageSize) throws NoApiKeyException, InputRequiredExceptionリクエスト例
サードパーティライブラリ com.google.gson.Gson をインポートする必要があります。
import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // 環境変数を設定していない場合は、API キーに置き換えてください。
private static String prefix = "myvoice"; // 実際の値に置き換えてください。
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
// 音声をクエリします。
Voice[] voices = service.listVoice(prefix, 0, 10);
logger.info("リスト取得に成功しました。リクエスト ID: {}", service.getLastRequestId());
logger.info("音声の詳細: {}", new Gson().toJson(voices));
}
}レスポンス例
[
{
"gmt_create": "2024-09-13 11:29:41",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
},
{
"gmt_create": "2024-09-13 13:22:38",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 13:22:38",
"status": "OK"
}
]レスポンスパラメーター
パラメーター | タイプ | 説明 |
voice_id | string | 音声 ID。 |
gmt_create | string | 音声が作成された時間。 |
gmt_modified | string | 音声が変更された時間。 |
status | string | 音声ステータス:
|
RESTful API
基本情報
URL | |
リクエストメソッド | POST |
リクエストヘッダー | |
メッセージ本文 | すべてのリクエストパラメーターを含むメッセージ本文は次のとおりです。必要に応じてオプションのフィールドを省略できます: 重要
|
リクエストパラメーター
パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
model | string | - | はい | 音声クローンモデル。値は |
action | string | - | はい | 操作タイプ。値は |
prefix | string | null | いいえ | 音声のカスタムプレフィックス。数字と小文字のみ使用可能、10 文字まで。 |
page_index | integer | 0 | いいえ | ページ番号のインデックス。0 から始まります。 |
page_size | integer | 10 | いいえ | 1 ページあたりのデータエントリ数。 |
レスポンスパラメーター
パラメーター | タイプ | 説明 |
voice_id | string | 音声 ID。 |
gmt_create | string | 音声が作成された時間。 |
gmt_modified | string | 音声が変更された時間。 |
status | string | 音声ステータス:
|
特定の音声のクエリ
特定の音声の詳細を取得します。
Python SDK
API の説明
def query_voice(self, voice_id: str) -> List[str]:
'''
特定の音声の詳細をクエリします。
param: voice_id クエリする音声の ID。
return: List[str] 音声の詳細。ステータス、作成時間、音声リンクなどが含まれます。
'''リクエスト例
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
voice_id = 'cosyvoice-v3-plus-myvoice-xxxxxxxx'
voice_details = service.query_voice(voice_id=voice_id)
print(f"リクエスト ID: {service.get_last_request_id()}")
print(f"音声の詳細: {voice_details}")レスポンス例
{
"gmt_create": "2024-09-13 11:29:41",
"resource_link": "https://yourAudioFileUrl",
"target_model": "cosyvoice-v3-plus",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
}レスポンスパラメーター
パラメーター | タイプ | 説明 |
resource_link | string | クローンされた音声の URL。 |
target_model | string | 音声を駆動する音声合成モデル。推奨モデルは cosyvoice-v3-flash または cosyvoice-v3-plus です。 これは、音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。 |
gmt_create | string | 音声が作成された時間。 |
gmt_modified | string | 音声が変更された時間。 |
status | string | 音声ステータス:
|
Java SDK
API の説明
/**
* 特定の音声の詳細をクエリします。
*
* @param voiceId クエリする音声の ID。
* @return Voice 音声の詳細。ステータス、作成時間、音声リンクなどが含まれます。
* @throws NoApiKeyException API キーが空の場合。
* @throws InputRequiredException 必須パラメーターが空の場合。
*/
public Voice queryVoice(String voiceId) throws NoApiKeyException, InputRequiredExceptionリクエスト例
サードパーティライブラリ com.google.gson.Gson をインポートする必要があります。
import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // 環境変数を設定していない場合は、API キーに置き換えてください。
private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // 実際の値に置き換えてください。
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
Voice voice = service.queryVoice(voiceId);
logger.info("クエリに成功しました。リクエスト ID: {}", service.getLastRequestId());
logger.info("音声の詳細: {}", new Gson().toJson(voice));
}
}レスポンス例
{
"gmt_create": "2024-09-13 11:29:41",
"resource_link": "https://yourAudioFileUrl",
"target_model": "cosyvoice-v3-plus",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
}レスポンスパラメーター
パラメーター | タイプ | 説明 |
resource_link | string | クローンされた音声の URL。 |
target_model | string | 音声を駆動する音声合成モデル。推奨モデルは cosyvoice-v3-flash または cosyvoice-v3-plus です。 これは、音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。 |
gmt_create | string | 音声が作成された時間。 |
gmt_modified | string | 音声が変更された時間。 |
status | string | 音声ステータス:
|
RESTful API
基本情報
URL | |
リクエストメソッド | POST |
リクエストヘッダー | |
メッセージ本文 | すべてのリクエストパラメーターを含むメッセージ本文は次のとおりです。必要に応じてオプションのフィールドを省略できます: 重要
|
リクエストパラメーター
パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
model | string | - | はい | 音声クローンモデル。値は |
action | string | - | はい | 操作タイプ。値は |
voice_id | string | - | はい | クエリする音声の ID。 |
レスポンスパラメーター
パラメーター | タイプ | 説明 |
resource_link | string | クローンされた音声の URL。 |
target_model | string | 音声を駆動する音声合成モデル。推奨モデルは cosyvoice-v3-flash または cosyvoice-v3-plus です。 これは、音声合成 API を呼び出すときに使用する音声合成モデルと同じでなければなりません。そうでない場合、合成は失敗します。 |
gmt_create | string | 音声が作成された時間。 |
gmt_modified | string | 音声が変更された時間。 |
status | string | 音声ステータス:
|
音声の更新
既存の音声を新しい音声ファイルで更新します。
Python SDK
API の説明
def update_voice(self, voice_id: str, url: str) -> None:
'''
音声を更新します。
param: voice_id 音声の ID。
param: url 音声クローン用の音声ファイルの URL。
'''リクエスト例
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
service.update_voice(
voice_id='cosyvoice-v3-plus-myvoice-xxxxxxxx',
url='https://your-new-audio-file-url'
)
print(f"更新が送信されました。リクエスト ID: {service.get_last_request_id()}")Java SDK
API の説明
/**
* 音声を更新します。
*
* @param voiceId 更新する音声。
* @param url 音声クローン用の音声ファイルの URL。
* @throws NoApiKeyException API キーが空の場合。
* @throws InputRequiredException 必須パラメーターが空の場合。
*/
public void updateVoice(String voiceId, String url)
throws NoApiKeyException, InputRequiredExceptionリクエスト例
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // 環境変数を設定していない場合は、API キーに置き換えてください。
private static String fileUrl = "https://your-audio-file-url"; // 実際の値に置き換えてください。
private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // 実際の値に置き換えてください。
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
// 音声を更新します。
service.updateVoice(voiceId, fileUrl);
logger.info("更新が送信されました。リクエスト ID: {}", service.getLastRequestId());
}
}RESTful API
基本情報
URL | |
リクエストメソッド | POST |
リクエストヘッダー | |
メッセージ本文 | すべてのリクエストパラメーターを含むメッセージ本文は次のとおりです。必要に応じてオプションのフィールドを省略できます: 重要
|
リクエストパラメーター
パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
model | string | - | はい | 音声クローンモデル。値は |
action | string | - | はい | 操作タイプ。値は |
voice_id | string | - | はい | 更新する音声の ID。 |
url | string | - | はい | 音声を更新するための音声ファイルの URL。URL は一般公開されている必要があります。 音声の録音方法については、「録音ガイド」をご参照ください。 |
音声の削除
不要になった音声を削除して、クォータを解放します。この操作は元に戻せません。
Python SDK
API の説明
def delete_voice(self, voice_id: str) -> None:
'''
音声を削除します。
param: voice_id 削除する音声。
'''リクエスト例
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
service.delete_voice(voice_id='cosyvoice-v3-plus-myvoice-xxxxxxxx')
print(f"削除が送信されました。リクエスト ID: {service.get_last_request_id()}")Java SDK
API の説明
/**
* 音声を削除します。
*
* @param voiceId 削除する音声。
* @throws NoApiKeyException API キーが空の場合。
* @throws InputRequiredException 必須パラメーターが空の場合。
*/
public void deleteVoice(String voiceId) throws NoApiKeyException, InputRequiredException リクエスト例
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // 環境変数を設定していない場合は、API キーに置き換えてください。
private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // 実際の値に置き換えてください。
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
// 音声を削除します。
service.deleteVoice(voiceId);
logger.info("削除が送信されました。リクエスト ID: {}", service.getLastRequestId());
}
}RESTful API
基本情報
URL | |
リクエストメソッド | POST |
リクエストヘッダー | |
メッセージ本文 | すべてのリクエストパラメーターを含むメッセージ本文は次のとおりです。必要に応じてオプションのフィールドを省略できます: 重要
|
リクエストパラメーター
パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
model | string | - | はい | 音声クローンモデル。値は |
action | string | - | はい | 操作タイプ。値は |
voice_id | string | - | はい | 削除する音声の ID。 |
音声クォータと自動クリーンアップルール
合計制限:アカウントごとに 1,000 音声
この API は、音声の総数をクエリする機能を提供していません。音声リストのクエリ API を呼び出し、レスポンス内の音声数をカウントできます。
自動クリーンアップ:過去 1 年間に音声合成リクエストで使用されなかった音声は、システムによって自動的に削除されます。
課金
音声クローン:音声の作成、クエリ、更新、削除は無料です。
カスタムボイスを使用した音声合成:テキスト文字数に基づいて課金されます。詳細については、「リアルタイム音声合成 - CosyVoice/Sambert」をご参照ください。
著作権と合法性
提供する音声の所有権と使用に関する法的権利を確保する責任は、お客様にあります。利用規約をお読みください。
エラーコード
エラーが発生した場合は、「エラーメッセージ」でトラブルシューティング情報をご確認ください。
よくある質問
特徴
Q:カスタムボイスの話速と音量を調整するにはどうすればよいですか?
A:プロセスはプリセット音声と同じです。音声合成 API を呼び出す際に、必要なパラメーターを渡すことができます。例えば、話速を調整するには speech_rate (Python) または speechRate (Java) を、音量を調整するには volume を使用できます。詳細については、音声合成 API のドキュメント (Java SDK / Python SDK / WebSocket API) をご参照ください。
Q:Go、C#、Node.js などの他の言語で呼び出しを行うにはどうすればよいですか?
A:音声管理には、このドキュメントで提供されている RESTful API を使用できます。音声合成には、WebSocket API を使用し、voice パラメーターをクローンプロセスから取得した voice_id に設定します。
トラブルシューティング
コードエラーが発生した場合は、「エラーコード」でトラブルシューティング情報をご確認ください。
Q:VoiceEnrollmentService クラスが見つからないのはなぜですか?
A:このエラーは、SDK のバージョンが古いために発生します。SDK の最新バージョンをインストールしてください。
Q:音声クローンの結果が悪い、ノイズが多い、または不明瞭な場合はどうすればよいですか?
A:この問題は通常、入力音声の品質が低いことが原因です。「録音ガイド」を参照して、音声を再録音し、アップロードしてください。