Skip to main content

Qwen-Audio と CosyVoice の音声クローニング Java SDK リファレンス

DashScope Java SDK を使用して Qwen-Audio と CosyVoice の音声をクローンし、管理します。

サービスエンドポイント

SDK は、デフォルトで China (Beijing) エンドポイントを使用します。別のリージョンに切り替えるには、初期化の前に Constants.baseHttpApiUrl を変更します。
  • API キーはリージョンごとに異なります。対象リージョンに対応する API キーを使用してください。
  • リージョン設定はグローバルに適用され、すべての DashScope SDK API コールに影響します。
  • Singapore
  • China (Beijing)
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1{WorkspaceId} は、実際の ワークスペース ID に置き換えてください。
Alibaba Cloud Model Studio は、中国 (北京) およびシンガポールの各リージョン向けにワークスペース固有ドメインをリリースしました。これらの新しい専用ドメインにより、推論リクエストのパフォーマンスと安定性が向上します。以下の新しいドメインへの移行を推奨します:
  • 中国 (北京):dashscope.aliyuncs.com から {WorkspaceId}.cn-beijing.maas.aliyuncs.com へ
  • シンガポール:dashscope-intl.aliyuncs.com から {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com へ

VoiceEnrollmentService クラス

パッケージ: com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService 目的:Qwen-Audio-TTS、Qwen-Audio-Realtime、CosyVoice のクローン音色のライフサイクル (作成、照会、更新、削除) を管理します。

コンストラクター

public VoiceEnrollmentService(String apiKey)
パラメーター:
パラメータータイプ説明
apiKeyStringAPI キー

createVoice() - 音声の作成

メソッドシグネチャ:
public Voice createVoice(String targetModel, String prefix, String url, VoiceEnrollmentParam customParam) throws NoApiKeyException, InputRequiredException
パラメーター:
パラメータータイプ必須説明
targetModelStringはい音色を使用する対象モデル。後続のリクエストでその音色を使用するモデルと一致する必要があります。一致しない場合、リクエストは失敗します。
prefixStringはい音声名のプレフィックス。英数字のみが許可され、最大長は 10 文字です。結果として得られる音声名は、{target_model}-{prefix}-{unique_id} のフォーマットに従います。
urlStringはい音声クローニングに使用する参照音声。公開アクセス可能な URL または data:audio/wav;base64,... 形式の Base64 Data URI を指定できます。
customParamVoiceEnrollmentParamいいえlanguageHints や maxPromptAudioLength などのカスタムパラメーター。
戻り値:Voice オブジェクトを返します。getVoiceId() を呼び出して音声 ID を取得します。

listVoice() - 音声の一覧取得

メソッドシグネチャ:
public Voice[] listVoice(String prefix, int pageIndex, int pageSize) throws NoApiKeyException, InputRequiredException
パラメーター:
パラメータータイプ必須説明
prefixStringいいえ音声名のプレフィックスで音声をフィルタリングします。
pageIndexintいいえページインデックス。0 から始まります。
pageSizeintいいえ1 ページあたりのレコード数。
戻り値:Voice[] 配列を返します。

queryVoice() - 音声詳細の取得

メソッドシグネチャ:
public Voice queryVoice(String voiceId) throws NoApiKeyException, InputRequiredException
パラメーター:
パラメータータイプ必須説明
voiceIdStringはい取得する音声の ID。
戻り値:音声詳細を含む Voice オブジェクトを返します。

updateVoice() - 音声の更新

メソッドシグネチャ一覧:
public void updateVoice(String voiceId, String url) throws NoApiKeyException, InputRequiredException
public void updateVoice(String voiceId, String url, VoiceEnrollmentParam customParam) throws NoApiKeyException, InputRequiredException
パラメーター:
パラメータータイプ必須説明
voiceIdStringはい更新する音声 ID。
urlStringはい新しい参照音声。公開アクセス可能な URL または data:audio/wav;base64,... 形式の Base64 Data URI を指定できます。
customParamVoiceEnrollmentParamいいえカスタムパラメーター。

deleteVoice() - 音声の削除

メソッドシグネチャ:
public void deleteVoice(String voiceId) throws NoApiKeyException, InputRequiredException
パラメーター:
パラメータータイプ必須説明
voiceIdStringはい削除する音声 ID。

VoiceEnrollmentParam クラス

パッケージ: com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentParam ビルダーパターンを使用してパラメーターオブジェクトを構築します。
メソッドタイプ説明
model(String)String音声クローニングモデル。値は "voice-enrollment" である必要があります。
languageHints(List<String>)List<String>モデルがサンプル音声の言語を識別し、音声特徴をより正確に抽出し、クローニング品質を向上させるのに役立ちます。指定された言語が実際の音声言語と一致しない場合 (たとえば、音声が中国語なのに en を設定した場合)、システムはこの値を無視し、言語を自動的に検出します。このパラメーターは配列で、要素数は 1 である必要があります。
対象モデル:qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash、qwen-audio-3.1-realtime-plus、qwen-audio-3.0-realtime-plus、qwen-audio-3.0-realtime-flash、cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-plus、cosyvoice-v3-flash。
  • qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash、qwen-audio-3.1-realtime-plus、qwen-audio-3.0-realtime-plus、qwen-audio-3.0-realtime-flash:
    • zh: 中国語
    • en: 英語
    • fr: フランス語
    • de: ドイツ語
    • ja: 日本語
    • ko: 韓国語
    • ru: ロシア語
    • pt: ポルトガル語
    • th: タイ語
    • id: インドネシア語
    • vi: ベトナム語
    • it: イタリア語
    • es: スペイン語
    • ms: マレーシア語
    • fil: フィリピン語
    • ar: アラビア語
  • cosyvoice-v3-plus:
    • zh: 中国語
    • en: 英語
    • fr: フランス語
    • de: ドイツ語
    • ja: 日本語
    • ko: 韓国語
    • ru: ロシア語
  • cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-flash:
    • zh: 中国語
    • en: 英語
    • fr: フランス語
    • de: ドイツ語
    • ja: 日本語
    • ko: 韓国語
    • ru: ロシア語
    • pt: ポルトガル語
    • th: タイ語
    • id: インドネシア語
    • vi: ベトナム語
デフォルト: ["zh"]。
maxPromptAudioLength(Float)Float前処理後の参照音声の最大持続時間 (秒)。有効な値: [3.0, 30.0]。デフォルト: 10.0。
対象モデル:qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash、qwen-audio-3.1-realtime-plus、qwen-audio-3.0-realtime-plus、qwen-audio-3.0-realtime-flash、cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-flash。
parameter(String, Object)Objectparameter("language_hints", Arrays.asList("en"))、parameter("max_prompt_audio_length", 10.0f)、parameter("enable_preprocess", false)、parameter("enable_volume_normalization", "false") などのカスタムパラメーターを設定します。

追加パラメーター

パラメータータイプ必須説明
enable_preprocessbooleanいいえ音声前処理 (ノイズリダクション、音声強調、音量正規化) を有効にするかどうか。バックグラウンドノイズのある録音の場合はこれを有効にします。静かな環境での録音の場合は、元の音声特性を保持するために無効にします。デフォルト: false。
対象モデル:qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash、qwen-audio-3.1-realtime-plus、qwen-audio-3.0-realtime-plus、qwen-audio-3.0-realtime-flash、cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-flash。
enable_volume_normalizationStringいいえ音声クローニングに使用されるサンプル音声の音量を正規化するかどうかを指定します。有効な値は "true" と "false" です。このパラメーターを有効にすると、生成される音声の音量が、無効にした場合と異なることがあります。デフォルト: "false"。

サンプルコード

音声の作成

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 com.alibaba.dashscope.utils.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        // 以下ではシンガポールリージョンを使用します。 {WorkspaceId} を実際のワークスペース ID に置き換えてください。他のリージョンについては、それに応じて URL を変更してください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        String targetModel = "qwen-audio-3.1-tts-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)
                            .parameter("language_hints", Arrays.asList("en"))
                            // .parameter("max_prompt_audio_length", 10.0f)
                            // .parameter("enable_preprocess", false)
                            // .parameter("enable_volume_normalization", "false")
                            .build());

            logger.info("音声作成リクエストを送信しました。リクエスト ID:{}", service.getLastRequestId());
            logger.info("生成された音声 ID:{}", myVoice.getVoiceId());
        } catch (Exception e) {
            logger.error("音声の作成に失敗しました", e);
        }
    }
}
ローカルの WAV ファイルを使用する場合は、上記の try ブロック内で createVoice を呼び出す前に、以下の代入を追加します。音声の更新時も、Data URI を updateVoice の url パラメーターに指定します。sample.wav をローカル音声ファイルのパスに置き換えてください。
fileUrl = "data:audio/wav;base64," + java.util.Base64.getEncoder().encodeToString(
        java.nio.file.Files.readAllBytes(java.nio.file.Paths.get("sample.wav")));

音声の一覧表示

この例では、サードパーティライブラリ 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.alibaba.dashscope.utils.Constants;
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 {
        // 以下ではシンガポールリージョンを使用します。 {WorkspaceId} を実際のワークスペース ID に置き換えてください。他のリージョンについては、それに応じて URL を変更してください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        // 音声の一覧表示
        Voice[] voices = service.listVoice(prefix, 0, 10);
        logger.info("一覧の取得に成功しました。リクエスト ID:{}", service.getLastRequestId());
        logger.info("音声の詳細:{}", new Gson().toJson(voices));
    }
}

特定の音声の取得

この例では、サードパーティライブラリ 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.alibaba.dashscope.utils.Constants;
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 = "qwen-audio-3.1-tts-plus-myvoice-xxx"; // 実際の値に置き換えてください
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        // 以下ではシンガポールリージョンを使用します。 {WorkspaceId} を実際のワークスペース ID に置き換えてください。他のリージョンについては、それに応じて URL を変更してください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        Voice voice = service.queryVoice(voiceId);

        logger.info("クエリに成功しました。リクエスト ID:{}", service.getLastRequestId());
        logger.info("音声の詳細:{}", new Gson().toJson(voice));
    }
}

音声の更新

import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
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 = "qwen-audio-3.1-tts-plus-myvoice-xxx"; // 実際の値に置き換えてください
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        // 以下ではシンガポールリージョンを使用します。 {WorkspaceId} を実際のワークスペース ID に置き換えてください。他のリージョンについては、それに応じて URL を変更してください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        // 音声を更新
        service.updateVoice(voiceId, fileUrl);
        logger.info("更新リクエストを送信しました。リクエスト ID:{}", service.getLastRequestId());
    }
}

音声の削除

import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
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 = "qwen-audio-3.1-tts-plus-myvoice-xxx"; // 実際の値に置き換えてください
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        // 以下ではシンガポールリージョンを使用します。 {WorkspaceId} を実際のワークスペース ID に置き換えてください。他のリージョンについては、それに応じて URL を変更してください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        // 音声を削除
        service.deleteVoice(voiceId);
        logger.info("削除リクエストを送信しました。リクエスト ID:{}", service.getLastRequestId());
    }
}