Skip to main content

音声クローニング

録音をアップロードして音声を作成し、Qwen-Omni または Qwen-Omni-Realtime の会話で使用できます。このガイドでは、対応言語、音声の要件、クローニング手順、課金、音声の管理について説明します。

リクエストパラメーター、レスポンス、エラーについては、音声クローニング API リファレンス を参照してください。
このドキュメントでは、Qwen-Omni と Qwen-Omni-Realtime の音声クローニング API について説明します。音声合成モデルについては、音声クローニングユーザーガイド を参照してください。
中国(北京)およびシンガポールリージョンでは、ワークスペース固有のドメインを使用できます。これらのドメインは推論のパフォーマンスと安定性を向上させます。次のドメインへの移行を推奨します。
  • 中国 (北京):https://dashscope.aliyuncs.com から https://WorkspaceId.cn-beijing.maas.aliyuncs.com
  • シンガポール:https://dashscope-intl.aliyuncs.com から https://WorkspaceId.ap-southeast-1.maas.aliyuncs.com
WorkspaceId は、Alibaba Cloud Model Studio コンソールの Workspace Details ページで確認できます。従来のドメインも引き続き使用できます。

音声の要件

録音の品質はクローニングの結果に影響します。 システム音声と音声クローニングでは、対応する方言が異なります。次の表は、音声クローニングに対応する言語と方言を示します。システム音声については、音声一覧 を参照してください。

項目

要件

対応形式

WAV(16 ビット)、MP3、M4A

長さ

10~20 秒を推奨します。最大: 60 秒。

ファイルサイズ

< 10 MB

サンプルレート

>= 24 kHz

チャンネル数

モノラル

内容

背景音のない、連続した明瞭な発話を少なくとも 3 秒間含めてください。残りの部分には短い間(<=2 秒)を含めることができます。音声全体を通じて、BGM、ノイズ、他の人の声を避けてください。通常の話し声を入力として使用し、楽曲や歌唱音声はアップロードしないでください。

言語

中国語(zh)、英語(en)、ドイツ語(de)、イタリア語(it)、ポルトガル語(pt)、スペイン語(es)、日本語(ja)、韓国語(ko)、フランス語(fr)、ロシア語(ru)、タイ語(th)、インドネシア語(id)、アラビア語(ar)、チェコ語(cs)、デンマーク語(da)、オランダ語(nl)、フィンランド語(fi)、ヘブライ語(he)、ヒンディー語(hi)、アイスランド語(is)、マレー語(ms)、ノルウェー語(no)、ペルシャ語(fa)、ポーランド語(pl)、スウェーデン語(sv)、タガログ語(tl)、トルコ語(tr)、ウルドゥー語(ur)、ベトナム語(vi)

中国語の方言: Dongbei、Shannxi、Sichuan、Henan、Changsha、Tianjin、Hangzhou、Liaoning、Shenyang、Anshan

クイックスタート

図

1. ワークフロー

音声を作成してから、モデル呼び出しで使用します。
  1. 音声の作成 音声の作成 API を呼び出し、音声クリップをアップロードします。システムは音声を分析し、カスタムのクローン音声を作成します。この手順では、音声を使用する omni モデルを指定するために、target_model を必ず設定してください。 すでに音声を作成している場合は、この手順をスキップして次に進めます。音声の一覧取得 API を呼び出すと、既存の音声を確認できます。
  2. 会話で音声を使用する 作成した音声を指定して、Omni API(リアルタイムまたは非リアルタイム)を呼び出します。Omni モデルは target_model と一致する必要があります。

2. モデルの設定と前提条件

モデルを選択し、前提条件を満たしてください。

モデルの設定

音声クローニングには、次の 2 つのモデルが必要です。
  • 音声クローニングモデル:qwen-voice-enrollment
  • 音声を使用する Omni モデル:
    • qwen3.8-omni-flash-realtime
    • qwen3.5-omni-plus-realtime
    • qwen3.5-omni-flash-realtime
    • qwen3.5-omni-plus
    • qwen3.5-omni-flash

前提条件

  1. API キーの取得:API キーの取得 を参照してください。セキュリティのため、API キーは環境変数に設定してください。
  2. SDK のインストール:最新の DashScope SDK のインストール を参照してください。
  3. クローニング用の音声の準備:音声の要件 を満たす音声を用意してください。

3. エンドツーエンドの例

この例では、音声をクローニングし、その音声を会話で使用します。 重要な原則:クローニング時に指定した target_model は、その後の Omni API 呼び出しで指定するモデルと一致する必要があります。一致しない場合、合成は失敗します。サンプルファイル voice.mp3 を自分の音声に置き換えてください。
  • リアルタイム
  • 非リアルタイム
Qwen-Omni-Realtime モデルに適用されます。Qwen-Omni-Realtime を参照してください。
Python
# Requirements: dashscope >= 1.26.5, pyaudio
import os
import requests
import base64
import pathlib
import time
import pyaudio
from dashscope.audio.qwen_omni import MultiModality, OmniRealtimeCallback, OmniRealtimeConversation
import dashscope
# 中国(北京)リージョン。サンプルにワークスペース ID を入力してください。URL はリージョンによって異なります。
dashscope.base_http_api_url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"

# ======= Configuration =======
DEFAULT_TARGET_MODEL = "qwen3.8-omni-flash-realtime"  # Must be the same model for cloning and conversation
DEFAULT_PREFERRED_NAME = "guanyu"
DEFAULT_AUDIO_MIME_TYPE = "audio/mpeg"
VOICE_FILE_PATH = "voice.mp3"  # Path to the local audio file for voice cloning

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:
    """
    Create a custom voice and return the voice parameter.
    """
    # API keys differ between the Singapore and Beijing regions. Get an API key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you haven't set an environment variable, replace the following line with: 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"Audio file not found: {file_path}")

    base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
    data_uri = f"data:{audio_mime_type};base64,{base64_str}"

    # シンガポールリージョンの URL です。サンプルにワークスペース ID を入力してください。URL はリージョンによって異なります。
    url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/tts/customization"
    payload = {
        "model": "qwen-voice-enrollment",
        "parameters": {"voice_clone_mode": "normal"},
        "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"Failed to create voice: {resp.status_code}, {resp.text}")

    try:
        return resp.json()["output"]["voice"]
    except (KeyError, ValueError) as e:
        raise RuntimeError(f"Failed to parse voice response: {e}")

class SimpleCallback(OmniRealtimeCallback):
    def __init__(self, pya):
        self.pya = pya
        self.out = None
    def on_open(self):
        self.out = self.pya.open(
            format=pyaudio.paInt16,
            channels=1,
            rate=24000,
            output=True
        )
    def on_event(self, response):
        if response['type'] == 'response.audio.delta':
            self.out.write(base64.b64decode(response['delta']))
        elif response['type'] == 'conversation.item.input_audio_transcription.completed':
            print(f"[User] {response['transcript']}")
        elif response['type'] == 'response.audio_transcript.done':
            print(f"[LLM] {response['transcript']}")

if __name__ == '__main__':
    # If you haven't set an environment variable, replace the following line with: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
    # シンガポールリージョンの URL です。サンプルにワークスペース ID を入力してください。URL はリージョンによって異なります。
    url = "wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime"

    # Step 1: Clone a voice
    voice = create_voice(VOICE_FILE_PATH)
    print(f"Voice cloning complete. Voice: {voice}")

    # Step 2: Start a real-time conversation with the cloned voice
    pya = pyaudio.PyAudio()
    callback = SimpleCallback(pya)
    conv = OmniRealtimeConversation(model=DEFAULT_TARGET_MODEL, callback=callback, url=url)
    conv.connect()
    conv.update_session(
        output_modalities=[MultiModality.AUDIO, MultiModality.TEXT],
        voice=voice  # Use the cloned voice
    )
    mic = pya.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True)
    print("Conversation started. Speak into your microphone (Ctrl+C to exit)...")
    try:
        while True:
            audio_data = mic.read(3200, exception_on_overflow=False)
            conv.append_audio(base64.b64encode(audio_data).decode())
            time.sleep(0.01)
    except KeyboardInterrupt:
        conv.close()
        mic.close()
        callback.out.close()
        pya.terminate()
        print("\nConversation ended")

音声のクォータと自動削除

総数の上限:1 アカウントあたり 1,000 件の音声です。
この API には、音声数を取得するエンドポイントはありません。音声の一覧取得 API を呼び出して音声数を数えてください。
自動削除:1 年間使用されなかった音声は自動的に削除されます。

課金

音声クローニングとモデル呼び出しは、個別に課金されます。
  • 音声クローニング:音声の作成 は、1 件あたり $0.01 です。作成リクエストが失敗した場合は課金されません。
    無料クォータ(中国サイトの北京リージョンおよび国際サイトのシンガポールリージョンのみ):
    • Model Studio の有効化から 90 日以内は、1,000 件の音声を無料で作成できます。
    • 作成に失敗した場合、無料クォータは消費されません。
    • 音声を削除しても、無料クォータは回復しません。
    • 無料クォータを使い切るか、90 日の有効期間が終了すると、音声の作成は 1 件あたり $0.01 で課金されます。
  • クローン音声を使用した会話は、モデルのトークン使用量に基づいて課金されます。モデル推論の料金 を参照してください。

著作権と法令遵守

提供する音声の権利保有と適法な使用については、お客様が責任を負います。サービス契約 をお読みください。

録音ガイド

録音機器

ノイズキャンセリングマイクを使用するか、静かな環境でスマートフォンを口元に近づけて録音してください。

録音環境

場所

  • 10 平方メートル以下の、小さく閉じられた空間で録音してください。
  • 吸音フォーム、カーペット、カーテンなど、音を吸収する素材がある部屋を選んでください。
  • 残響の大きい広いホール、会議室、教室は避けてください。

ノイズの抑制

  • 屋外の騒音:ドアと窓を閉めて、交通、工事、その他の外部の音を遮断してください。
  • 室内の騒音:エアコン、扇風機、蛍光灯の安定器の電源を切ってください。
  • スマートフォンで環境音を録音し、大きな音量で再生して、気づきにくい騒音源を確認してください。

残響の抑制

  • 残響があると、音声がこもり、明瞭さが低下します。
  • 滑らかな表面からの反射を減らしてください。カーテンを閉め、クローゼットの扉を開け、机や棚を衣服や毛布で覆います。
  • 本棚や布張りの家具など、形が不規則な物を利用して音を拡散反射させてください。

録音原稿の準備

  • 原稿は、対象のユースケースに合わせて作成してください。たとえば、カスタマーサービス向けなら、接客会話のスタイルを使用します。
  • 政治、ポルノ、暴力に関する内容など、センシティブまたは違法な内容を原稿に含めないでください。これらが含まれていると、クローニングは失敗します。
  • 「こんにちは」や「はい」などの短いフレーズは避けてください。完全な文章を使用してください。
  • 意味のつながりを保ち、読み上げ時に頻繁に間を空けないでください。少なくとも 3 秒間、途切れずに発話することを推奨します。
  • 親しみやすさや真剣さなど、目的の感情を表現できます。自然な口調を保ち、過度な演技は避けてください。

推奨手順

一般的な寝室を例にすると、次の手順になります。
  1. ドアと窓を閉めて、外部の騒音を遮断します。
  2. エアコン、扇風機、その他の電化製品の電源を切ります。
  3. カーテンを閉めて、ガラス面からの反射を減らします。
  4. 机の表面を衣服や毛布で覆い、机からの反射を減らします。
  5. 原稿を練習し、キャラクターの口調を決めて、自然に話します。
  6. 破裂音によるひずみや信号の低下を防ぐため、録音機器から約 10 cm の距離を保ってください。