音声クローニングは、10~20 秒の音声サンプルから、モデルトレーニング不要で非常にリアルなカスタム音声を作成する機能です。
概要
音声クローニングを使用すると、パーソナライズされた音声アシスタント、ブランド化された音声ブロードキャスト、カスタムナレーションを構築できます。
Model Studio は、次のモデルファミリーを通じて音声クローニングをサポートしています。
-
CosyVoice: DashScope SDK または HTTP API を通じて音声を作成します。リアルタイムの音声合成をサポートします。中国 (北京) およびシンガポールリージョンで利用可能です。
-
Qwen-TTS: HTTP API を通じて音声を作成します。リアルタイムおよび非リアルタイムの音声合成の両方をサポートします。中国 (北京) およびシンガポールリージョンで利用可能です。
モデルファミリーの選択に関する詳細な比較とガイダンスについては、「音声合成」をご参照ください。
前提条件
-
API キーを設定し、それを環境変数として設定します。
-
DashScope SDK を通じて API を呼び出す場合は、最新の SDK をインストールします。
-
音声の要件を満たす音声ファイルを準備します。
クイックスタート
音声クローニングには 3 つのステップがあります。
-
音声の準備: 音声の要件を満たす音声ファイルを準備します。
-
音声の作成: 音声クローニング API を呼び出して音声をアップロードし、音声を作成します。
target_modelパラメーターで、音声にバインドする音声合成モデルを指定します。 -
音声の合成: 音声合成 API を呼び出し、音声作成時に返された音声 ID を渡します。
CosyVoice 音声クローニング
CosyVoice 音声クローニングは、中国 (北京) リージョン (v3.5、v3、v2、v1 シリーズ) およびシンガポールリージョン (v3 シリーズのみ) で利用可能です。
ステップ 1: 音声の作成
音声クローニング API を呼び出して音声ファイルをアップロードし、音声を作成します。url パラメーターは音声ファイルのアクセス可能な URL で、prefix は音声名のプレフィックスを設定します。
中国 (北京) リージョンの URL。URL はリージョンによって異なります。
シンガポールリージョンの URL。WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/tts/customization' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "voice-enrollment",
"input": {
"action": "create_voice",
"target_model": "cosyvoice-v3-plus",
"prefix": "myvoice",
"url": "https://your-audio-url.wav"
}
}'
ステップ 2: クローン音声での音声合成
次のコードの voice_id を、前のステップで返された値に置き換えます。
# coding=utf-8
import dashscope
from dashscope.audio.tts_v2 import *
import os
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 環境変数が設定されていない場合は、次の行をご利用の Model Studio API キーに置き換えてください: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
# シンガポールリージョンの URL。WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'
# 音声クローニングと音声合成の両方に同じモデルを使用します
model = "cosyvoice-v3-plus"
# voice パラメーターを、クローニングによって生成されたカスタム音声に置き換えます
voice = "voice_id"
# model と voice パラメーターを使用して SpeechSynthesizer インスタンスを作成します
synthesizer = SpeechSynthesizer(model=model, voice=voice)
# 合成するテキストを送信し、バイナリ音声を取得します
audio = synthesizer.call("How is the weather today?")
# 最初の呼び出しでは、WebSocket 接続を確立するために追加のレイテンシーが発生します
print('[Metric] requestId: {}, first packet latency: {} ms'.format(
synthesizer.get_last_request_id(),
synthesizer.get_first_package_delay()))
# 音声をローカルファイルに保存します
with open('output.mp3', 'wb') as f:
f.write(audio)
Qwen-TTS 音声クローニング
この例では、ローカル音声ファイル voice.mp3 を使用します。コードを実行する前に、voice.mp3 をご利用の音声ファイルのパスに置き換えてください。
音声作成時に設定した target_model は、音声合成に使用するモデルと完全に一致する必要があります。一致しない場合、合成は失敗します。
Python
import os
import requests
import base64
import pathlib
import dashscope
# ======= 定数 =======
DEFAULT_TARGET_MODEL = "qwen3-tts-vc-2026-01-22" # 音声クローニングと音声合成の両方に同じモデルを使用します
DEFAULT_PREFERRED_NAME = "guanyu"
DEFAULT_AUDIO_MIME_TYPE = "audio/mpeg"
VOICE_FILE_PATH = "voice.mp3" # 音声クローニングに使用するローカル音声ファイルへの相対パス
def create_voice(file_path: str,
target_model: str = DEFAULT_TARGET_MODEL,
preferred_name: str = DEFAULT_PREFERRED_NAME,
audio_mime_type: str = DEFAULT_AUDIO_MIME_TYPE) -> str:
"""
カスタム音声を作成し、voice パラメーターを返します。
"""
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# 環境変数が設定されていない場合は、次の行をご利用の Model Studio API キーに置き換えてください: api_key = "sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
file_path_obj = pathlib.Path(file_path)
if not file_path_obj.exists():
raise FileNotFoundError(f"音声ファイルが見つかりません: {file_path}")
base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
data_uri = f"data:{audio_mime_type};base64,{base64_str}"
# シンガポールリージョンの URL。WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/tts/customization"
payload = {
"model": "qwen-voice-enrollment", # この値は変更しないでください
"input": {
"action": "create",
"target_model": target_model,
"preferred_name": preferred_name,
"audio": {"data": data_uri}
}
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
resp = requests.post(url, json=payload, headers=headers)
if resp.status_code != 200:
raise RuntimeError(f"音声の作成に失敗しました: {resp.status_code}, {resp.text}")
try:
return resp.json()["output"]["voice"]
except (KeyError, ValueError) as e:
raise RuntimeError(f"音声応答の解析に失敗しました: {e}")
if __name__ == '__main__':
# シンガポールリージョンの URL。WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
text = "How is the weather today?"
response = dashscope.MultiModalConversation.call(
model=DEFAULT_TARGET_MODEL,
api_key=os.getenv("DASHSCOPE_API_KEY"),
text=text,
voice=create_voice(VOICE_FILE_PATH), # voice パラメーターを、クローニングによって生成されたカスタム音声に置き換えます
stream=False
)
print(response)
cURL
data を、ご利用の音声ファイルの実際のパスに置き換えます。
中国 (北京) リージョンの URL。URL はリージョンによって異なります。
ステップ 1: 音声の作成
シンガポールリージョンの URL。WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/tts/customization' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen-voice-enrollment",
"input": {
"action": "create",
"target_model": "qwen3-tts-vc-2026-01-22",
"preferred_name": "guanyu",
"audio": {
"data": "https://xxx.wav"
}
}
}'
ステップ 2: クローン音声での音声合成
YOUR_VOICE_ID を、前のステップの応答の voice の値に置き換えます。
中国 (北京) リージョンの URL。URL はリージョンによって異なります。
シンガポールリージョンの URL。WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-tts-vc-2026-01-22",
"input": {
"text": "How is the weather today?",
"voice": "YOUR_VOICE_ID"
}
}'
音声の要件
入力音声の品質は、クローニング結果に直接影響します。各モデルファミリーには異なる音声要件があります。ターゲットモデルの要件に従って音声サンプルを準備してください。
CosyVoice
|
項目 |
要件 |
|
サポートされているフォーマット |
WAV (16-bit)、MP3、M4A |
|
長さ |
10~20 秒を推奨。最大 60 秒。 |
|
ファイルサイズ |
10 MB 以下 |
|
サンプルレート |
16 kHz 以上 |
|
チャンネル |
モノラルまたはステレオ。ステレオ音声の場合、最初のチャンネルのみが処理されます。最初のチャンネルに有効な音声が含まれていることを確認してください。 |
|
コンテンツ |
音声には、少なくとも 5 秒間の連続したクリアな音声が含まれている必要があります。残りの部分の短い無音区間は 2 秒を超えてはなりません。BGM、環境ノイズ、または他の音声は避けてください。通常の速度で話された音声を使用し、歌や歌唱をアップロードしないでください。 |
|
サポート言語 |
|
MiniMax
|
項目 |
要件 |
|
サポートされているフォーマット |
MP3、M4A、WAV |
|
期間 |
10 秒以上。最大 5 分。 |
|
ファイルサイズ |
20 MB 以下 |
|
コンテンツ |
音声には、背景音のない連続したクリアな音声が含まれている必要があります。無音区間は 2 秒を超えてはなりません。録音全体を通して、BGM、環境ノイズ、または他の音声を避けてください。通常の速度で話された音声を使用してください。歌や歌唱の録音をアップロードしないでください。 |
|
サポート言語 |
制限なし |
Qwen-TTS
|
項目 |
要件 |
|
サポートされているフォーマット |
WAV (16-bit)、MP3、M4A |
|
長さ |
10~20 秒を推奨。最大 60 秒。 |
|
ファイルサイズ |
10 MB 未満 |
|
サンプルレート |
24 kHz 以上 |
|
チャンネル |
モノラル |
|
コンテンツ |
音声には、少なくとも 3 秒間の連続したクリアな音声が含まれている必要があります。残りの部分の短い無音区間は 2 秒を超えてはなりません。BGM、環境ノイズ、または他の音声は避けてください。通常の速度で話された音声を使用し、歌や歌唱をアップロードしないでください。 |
|
サポート言語 |
中国語、英語、ドイツ語、イタリア語、ポルトガル語、スペイン語、日本語、韓国語、フランス語、ロシア語 |
最良のクローニング結果を得るために、音声サンプルを準備する際は録音のヒントに従ってください。
録音のヒント
高品質の入力音声は、より良いクローニング結果を生み出します。
録音機材
スマートフォン、デジタルボイスレコーダー、またはプロ仕様の録音デバイスを使用します。最良の結果を得るには、サンプルレートが 24 kHz 以上のデバイスを使用してください。
録音環境
場所
-
10 平方メートル以下の小さな密閉空間で録音します。
-
吸音フォーム、カーペット、カーテンなどの吸音材がある部屋が望ましいです。
-
広いホール、会議室、教室など、残響の多い空間は避けてください。
ノイズコントロール
-
屋外のノイズ: ドアや窓を閉めて、交通音、工事音、その他の外部の音を遮断します。
-
屋内のノイズ: エアコン、扇風機、蛍光灯の安定器、その他の電化製品の電源を切ります。隠れたノイズ源を特定するには、数秒間の環境音を録音し、音量を上げて再生します。
残響コントロール
-
残響は音をぼやかし、明瞭度を低下させます。
-
滑らかな表面からの反射を減らす: カーテンを閉め、クローゼットのドアを開け、机やキャビネットに衣類や毛布をかけます。
-
本棚や布張りの家具など、不規則な形状のオブジェクトを使用して音を拡散させます。
録音スクリプト
-
特定のコンテンツ制限はありません。可能な場合は、スクリプトをターゲットのユースケースに合わせます。
-
「こんにちは」や「はい」などの短いフレーズは避け、完全な文章を使用します。
-
コンテンツに一貫性を持たせ、頻繁な間を避けます。中断なく少なくとも 3 秒間の連続した発話を目指します。
-
録音中は一貫したペースを維持します。最初や最後で話すのが速すぎると、合成された音声に途切れが生じる可能性があります。
-
暖かさ、親しみやすさ、真剣さなど、自然な感情表現を含めます。ロボットのような話し方は避けてください。
-
政治的、性的、または暴力的な内容など、デリケートなコンテンツは含めないでください。これらはクローニングリクエストの失敗の原因となります。
録音ワークフロー
次の例では、一般的な寝室を録音スペースとして使用します。上記のノイズリダクションと残響コントロールの手順を完了してから、次の手順を実行します。
-
スクリプトを確認し、トーンとペルソナを決定してから、自然に録音します。
-
破裂音による歪みや信号の弱さを避けるため、口から約 10 cm 離して録音デバイスを持ちます。
カスタム音声の管理
Qwen-TTS または CosyVoice で音声を作成した後、API を通じて音声のクエリと管理ができます。
-
音声のリスト表示: アカウント配下のすべてのカスタム音声のリストを取得します。
-
音声詳細の取得: 作成時刻やバインドされた音声合成モデルなど、特定の音声の詳細を表示します。
-
音声の削除: 不要になったカスタム音声を削除して、クォータを解放します。
API エンドポイントとパラメーターの詳細については、「API リファレンス」をご参照ください。
クォータと課金
音声クォータと自動クリーンアップ
合計音声制限: 各 Alibaba Cloud Model Studio アカウントには、CosyVoice 用に 1,000、Qwen-TTS 用に 1,000 のカスタム音声の上限が個別に設定されています。2 つのクォータは独立してカウントされます。
自動クリーンアップ: 音声が 1 年間、どの音声合成リクエストでも使用されない場合、システムは自動的にその音声を削除します。
課金ルール
-
CosyVoice: 音声作成は無料です。
-
Qwen-TTS: 音声作成ごとに0.01 USDがかかります。作成に失敗した場合は課金されません。
無料クォータ (シンガポールリージョンのみ):
-
Alibaba Cloud Model Studio をアクティベートしてから最初の 90 日間に、1,000 回の無料音声作成が提供されます。
-
作成に失敗しても無料クォータは消費されません。
-
音声を削除しても無料クォータは復元されません。
-
無料クォータを使い切るか、90 日間の期間が終了すると、音声作成は 1 音声あたり0.01 USDで課金されます。
-
サポートされるモデルとリージョン
シンガポール
次のモデルを呼び出す際は、シンガポールリージョンの API キーを使用してください。
-
CosyVoice: cosyvoice-v3-plus, cosyvoice-v3-flash
-
Qwen-TTS:
-
Qwen3-TTS-VC-Realtime: qwen3-tts-vc-realtime-2026-01-15 (最新スナップショット), qwen3-tts-vc-realtime-2025-11-27 (スナップショット)
-
Qwen3-TTS-VC: qwen3-tts-vc-2026-01-22 (最新スナップショット)
-
中国 (北京)
以下のモデルを呼び出す際は、中国 (北京) リージョンの API キー を使用します。
-
CosyVoice: cosyvoice-v3.5-plus, cosyvoice-v3.5-flash, cosyvoice-v3-plus, cosyvoice-v3-flash, cosyvoice-v2
-
Qwen-TTS:
-
Qwen3-TTS-VC-Realtime: qwen3-tts-vc-realtime-2026-01-15 (最新スナップショット), qwen3-tts-vc-realtime-2025-11-27 (スナップショット)
-
Qwen3-TTS-VC: qwen3-tts-vc-2026-01-22 (最新スナップショット)
-
API リファレンス
よくある質問
Q: 作成した音声を、異なる音声合成モデルで使用できますか?
いいえ。音声は作成時に target_model パラメーターを介して特定の音声合成モデルにバインドされるため、モデル間で使用することはできません。同じ録音音声を複数のモデルで使用するには、モデルごとに個別の音声を作成する必要があります。
Q: クローン音声の有効期間はどのくらいですか?
Qwen-TTS と CosyVoice で作成された音声は、デフォルトで無期限に有効です。音声が 1 年間使用されない場合、システムは自動的にその音声を削除します。詳細については、「音声クォータと自動クリーンアップ」をご参照ください。音声 ID を保存し、クエリ API を使用して音声がまだ利用可能かどうかを確認してください。
Q: 音声品質が悪いと、クローニング結果に影響しますか?
はい。入力音声の品質は、クローニング結果に直接影響します。BGM、残響、重なった音声はすべて、クローン音声の類似度と自然さを低下させます。音声サンプルを準備する際は、音声の要件と録音のヒントに従ってください。