Chirp 3: Benutzerdefinierte Stimme für sofortige Nutzung

Mit Instant Custom Voice in Text-to-Speech können Nutzer personalisierte Sprachmodelle erstellen, indem sie ein Modell mit ihren eigenen hochwertigen Audioaufnahmen trainieren. Mit dem Tool lassen sich schnell personalisierte Stimmen generieren, die dann mit der Cloud TTS API zur Audiosynthese verwendet werden können. Dabei werden sowohl Streaming als auch lange Texte unterstützt.

Colab-Notebook ausprobieren Notebook auf GitHub ansehen

Verfügbare Sprachen

Instant-Custom Voices werden in den folgenden Sprachen unterstützt:

Sprache BCP-47-Code Einwilligungserklärung
Arabisch (XA) ar-XA .أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي
Bengalisch (Indien) bn-IN আমি এই ভয়েসের মালিক এবং আমি একটি সিন্থেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে সম্মতি দিচ্ছি।
Chinesisch (China) cmn-CN 我是此声音的拥有者并授权谷歌使用此声音创建语音合成模型
Englisch (Australien) en-AU Ich bin der Eigentümer dieser Stimme und erkläre mich damit einverstanden, dass Google ein Sprachsynthesemodell mit dieser Stimme erstellt.
Englisch (Indien) en-IN Ich bin der Eigentümer dieser Stimme und erkläre mich damit einverstanden, dass Google ein Sprachsynthesemodell mit dieser Stimme erstellt.
Englisch (Vereinigtes Königreich) en-GB Ich bin der Eigentümer dieser Stimme und erkläre mich damit einverstanden, dass Google ein Sprachsynthesemodell mit dieser Stimme erstellt.
Englisch (USA) en-US Ich bin der Eigentümer dieser Stimme und erkläre mich damit einverstanden, dass Google ein Sprachsynthesemodell mit dieser Stimme erstellt.
Französisch (Kanada) fr-CA Je suis le propriétaire de cette voix et j'autorise Google à utiliser cette voix pour créer un modèle de voix synthétique.
Französisch (Frankreich) fr-FR Je suis le propriétaire de cette voix et j'autorise Google à utiliser cette voix pour créer un modèle de voix synthétique.
Deutsch (Deutschland) de-DE Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet.
Gujarati (Indien) gu-IN હું આ વોઈસનો માલિક છું અને સિન્થેટિક વોઈસ મોડલ બનાવવા માટે આ વોઈસનો ઉપયોગ કરીને google ને હું સંમતિ આપું છું
Hindi (Indien) hi-IN मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं
Indonesisch (Indonesien) id-ID Saya pemilik suara ini dan saya menyetujui Google menggunakan suara ini untuk membuat model suara sintetis.
Italienisch (Italien) it-IT Sono il proprietario di questa voce e acconsento che Google la utilizzi per creare un modello di voce sintetica.
Japanisch (Japan) ja-JP 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成モデルを作成することを承認します。
Kannada (Indien) kn-IN ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ.
Koreanisch (Korea) ko-KR 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
Malayalam (Indien) ml-IN ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്‌സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്‌ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു."
Marathi (Indien) mr-IN मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो
Niederländisch (Niederlande) nl-NL Ik ben de eigenaar van deze stem en ik geef Google toestemming om deze stem te gebruiken om een synthetisch stemmodel te maken.
Polnisch (Polen) pl-PL Jestem właścicielem tego głosu i wyrażam zgodę na wykorzystanie go przez Google w celu utworzenia syntetycznego modelu głosu.
Portugiesisch (Brasilien) pt-BR Eu sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética.
Russisch (Russland) ru-RU Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтетического голоса.
Tamil (Indien) ta-IN நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன்.
Telugu (Indien) te-IN నేను ఈ వాయిస్ యజమానిని మరియు సింతటిక్ వాయిస్ మోడల్ ని రూపొందించడానికి ఈ వాయిస్ ని ఉపయోగించడానికి googleకి నేను సమ్మతిస్తున్నాను.
Thailändisch (Thailand) th-TH ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสังเคราะห์
Türkisch (Türkei) tr-TR Bu sesin sahibi benim ve Google'ın bu sesi kullanarak sentetik bir ses modeli oluşturmasına izin veriyorum.
Vietnamesisch (Vietnam) vi-VN Tôi là chủ sở hữu giọng nói này và tôi đồng ý cho Google sử dụng giọng nói này để tạo mô hình giọng nói tổng hợp.
Spanisch (Spanien) es-ES Soy el propietario de esta voz y doy mi consentimiento para que Google la utilice para crear un modelo de voz sintética.
Spanisch (USA) es-US Soy el propietario de esta voz y doy mi consentimiento para que Google la utilice para crear un modelo de voz sintética.

Regionale Verfügbarkeit

Instant-Custom Voice ist in den folgenden Google CloudRegionen verfügbar:

Google Cloud Zone Unterstützte Methode Einführungsreife
global Erstellung, Synthese Private Vorschau
us Synthese Private Vorschau
eu Synthese Private Vorschau
asia-southeast1 Synthese Private Vorschau

Unterstützte Ausgabeformate

Das Standardantwortformat ist LINEAR16. Folgende weitere Formate werden unterstützt:

API-Methode Format
streaming ALAW, MULAW, OGG_OPUS und PCM
batch ALAW, MULAW, MP3, OGG_OPUS und PCM

Funktionsunterstützung und Einschränkungen

Funktion Support Beschreibung
SSML Nein SSML-Tags zum Personalisieren von synthetischem Audio
Textbasierte Prompts Experimentell Verwenden Sie Satzzeichen, Pausen und Füllwörter, um der Sprachausgabe einen natürlichen Fluss und ein natürliches Tempo zu verleihen.
Zeitstempel Nein Zeitstempel auf Wortebene
Tags pausieren Nein Pausen in synthetisierte Audioinhalte einfügen
Tempo-Kontrolle Nein Sie können die Geschwindigkeit der synthetisierten Audioinhalte zwischen 0, 25-facher und 2-facher Geschwindigkeit anpassen.
Aussprachesteuerung Nein Benutzerdefinierte Aussprache von Wörtern oder Wortgruppen mit IPA- oder X-SAMPA-Lautschrift

Chirp 3: Instant-Custom Voice verwenden

In den folgenden Abschnitten wird erläutert, wie Sie Chirp 3 verwenden können: Funktionen für sofortige benutzerdefinierte Stimmen in der Text-to-Speech API.

  1. Einwilligungserklärung aufzeichnen: Um die rechtlichen und ethischen Richtlinien für die sofortige benutzerdefinierte Stimme einzuhalten, müssen Sie die erforderliche Einwilligungserklärung als Mono-WAV-Datei mit LINEAR16-Codierung und einer Abtastrate von 24 kHz in der entsprechenden Sprache aufzeichnen. (Ich bin der Eigentümer dieser Stimme und erkläre mich damit einverstanden, dass Google ein Sprachsynthesemodell mit dieser Stimme erstellt.)

  2. Referenz-Audio aufnehmen: Nehmen Sie mit dem Mikrofon Ihres Computers bis zu 10 Sekunden Audio als LINEAR16-codierte Mono-WAV-Datei mit einer Abtastrate von 24 kHz auf. Während der Aufnahme sollten keine Hintergrundgeräusche zu hören sein. Nehmen Sie die Einwilligung und das Referenz-Audio in derselben Umgebung auf.

  3. Audiodateien speichern: Die aufgezeichneten Audiodateien werden an einem bestimmten Cloud Storage-Speicherort gespeichert.

Instant-Custom Voice mit der REST API erstellen

Eine Instant-Custom Voice wird in Form eines Schlüssels für das Klonen von Stimmen erstellt, der eine Textstring-Darstellung Ihrer Sprachdaten ist.

Wichtige Hinweise

Hier sind einige wichtige Informationen zum Erstellen einer benutzerdefinierten Stimme:

  • Die Anzahl der Schlüssel zum Klonen der Stimme, die Sie erstellen können, ist nicht begrenzt, da sie clientseitig gespeichert und pro Anfrage bereitgestellt werden.
  • Derselbe Schlüssel für das Klonen von Stimmen kann von mehreren Clients oder Geräten gleichzeitig verwendet werden.
  • Sie können pro Projekt und Minute 10 Schlüssel zum Klonen der Stimme erstellen. Weitere Informationen finden Sie unter Anfragelimit.
  • Sie können kein benutzerdefiniertes Einwilligungsskript anstelle des Standardskripts verwenden. Sie müssen das Einwilligungs-Script verwenden, das unter Sprachverfügbarkeit bereitgestellt wird.
import requests, os, json

def create_instant_custom_voice_key(
    access_token, project_id, reference_audio_bytes, consent_audio_bytes
):
    url = "https://texttospeech.googleapis.com/v1beta1/voices:generateVoiceCloningKey"

    request_body = {
        "reference_audio": {
            "audio_config": {"audio_encoding": "LINEAR16", "sample_rate_hertz": 24000},
            "content": reference_audio_bytes,
        },
        "voice_talent_consent": {
            "audio_config": {"audio_encoding": "LINEAR16", "sample_rate_hertz": 24000},
            "content": consent_audio_bytes,
        },
        "consent_script": "I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.",
        "language_code": "en-US",
    }

    try:
        headers = {
            "Authorization": f"Bearer {access_token}",
            "x-goog-user-project": project_id,
            "Content-Type": "application/json; charset=utf-8",
        }

        response = requests.post(url, headers=headers, json=request_body)
        response.raise_for_status()

        response_json = response.json()
        return response_json.get("voiceCloningKey")

    except requests.exceptions.RequestException as e:
        print(f"Error making API request: {e}")
    except json.JSONDecodeError as e:
        print(f"Error decoding JSON response: {e}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Mit einer sofortigen benutzerdefinierten Stimme über die REST API synthetisieren

Mit dem Schlüssel für das Klonen von Stimmen können Sie Audio mithilfe der REST API synthetisieren.

import requests, os, json, base64
from IPython.display import Audio, display

def synthesize_text_with_cloned_voice(access_token, project_id, voice_key, text):
    url = "https://texttospeech.googleapis.com/v1beta1/text:synthesize"

    request_body = {
        "input": {
            "text": text
        },
        "voice": {
            "language_code": "en-US",
            "voice_clone": {
                "voice_cloning_key": voice_key,
            }
        },
        "audioConfig": {
            "audioEncoding": "LINEAR16",
            "sample_rate_hertz": 24000
        }
    }

    try:
        headers = {
            "Authorization": f"Bearer {access_token}",
            "x-goog-user-project": project_id,
            "Content-Type": "application/json; charset=utf-8"
        }

        response = requests.post(url, headers=headers, json=request_body)
        response.raise_for_status()

        response_json = response.json()
        audio_content = response_json.get("audioContent")

        if audio_content:
            display(Audio(base64.b64decode(audio_content), rate=24000))
        else:
            print("Error: Audio content not found in the response.")
            print(response_json)

    except requests.exceptions.RequestException as e:
        print(f"Error making API request: {e}")
    except json.JSONDecodeError as e:
        print(f"Error decoding JSON response: {e}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Mit einer sofortigen benutzerdefinierten Stimme synthetisieren – Python-Clientbibliothek

In diesem Beispiel wird die Python-Clientbibliothek verwendet, um die sofortige benutzerdefinierte Sprachausgabe mit einem Sprachklonierungsschlüssel durchzuführen, der in der Datei voice_cloning_key.txt gespeichert wurde. Informationen zum Generieren eines Schlüssels für das Klonen von Stimmen finden Sie unter Instant Custom Voice mit der REST API erstellen.

from google.cloud import texttospeech
from google.cloud.texttospeech_v1beta1.services.text_to_speech import client


def perform_voice_cloning(
    voice_cloning_key: str,
    transcript: str,
    language_code: str,
    synthesis_output_path: str,
    tts_client: client.TextToSpeechClient,
) -> None:
  """Perform voice cloning and write output to a file.

  Args:
    voice_cloning_key: The voice cloning key.
    transcript: The transcript to synthesize.
    language_code: The language code.
    synthesis_output_path: The synthesis audio output path.
    tts_client: The TTS client to use.
  """
  voice_clone_params = texttospeech.VoiceCloneParams(
      voice_cloning_key=voice_cloning_key
  )
  voice = texttospeech.VoiceSelectionParams(
      language_code=language_code, voice_clone=voice_clone_params
  )
  request = texttospeech.SynthesizeSpeechRequest(
      input=texttospeech.SynthesisInput(text=transcript),
      voice=voice,
      audio_config=texttospeech.AudioConfig(
          audio_encoding=texttospeech.AudioEncoding.LINEAR16,
          sample_rate_hertz=24000,
      ),
  )
  response = tts_client.synthesize_speech(request)
  with open(synthesis_output_path, 'wb') as out:
    out.write(response.audio_content)
    print(f'Audio content written to file {synthesis_output_path}.')


if __name__ == '__main__':
  client = texttospeech.TextToSpeechClient()
  with open('voice_cloning_key.txt', 'r') as f:
    key = f.read()
  perform_voice_cloning(
      voice_cloning_key=key,
      transcript='Hello world!',
      language_code='en-US',
      synthesis_output_path='/tmp/output.wav',
      tts_client=client,
  )

Streaming-Synthese mit einer sofortigen benutzerdefinierten Stimme mit der Python-Clientbibliothek

In diesem Beispiel wird die Python-Clientbibliothek verwendet, um die Streaming-Synthese mit einer benutzerdefinierten Stimme durchzuführen. Dazu wird ein in voice_cloning_key.txt gespeicherter Schlüssel zum Klonen von Stimmen verwendet. Informationen zum Generieren eines Schlüssels für das Klonen von Stimmen finden Sie unter Instant Custom Voice mit der REST API erstellen.

import io
import wave
from google.cloud import texttospeech
from google.cloud.texttospeech_v1beta1.services.text_to_speech import client


def perform_voice_cloning_with_simulated_streaming(
    voice_cloning_key: str,
    simulated_streamed_text: list[str],
    language_code: str,
    synthesis_output_path: str,
    tts_client: client.TextToSpeechClient,
) -> None:
  """Perform voice cloning for a given reference audio, voice talent consent, and consent script.

  Args:
    voice_cloning_key: The voice cloning key.
    simulated_streamed_text: The list of transcripts to synthesize, where each
      item represents a chunk of streamed text. This is used to simulate
      streamed text input and is not meant to be representative of real-world
      streaming usage.
    language_code: The language code.
    synthesis_output_path: The path to write the synthesis audio output to.
    tts_client: The TTS client to use.
  """
  voice_clone_params = texttospeech.VoiceCloneParams(
      voice_cloning_key=voice_cloning_key
  )
  streaming_config = texttospeech.StreamingSynthesizeConfig(
      voice=texttospeech.VoiceSelectionParams(
          language_code=language_code, voice_clone=voice_clone_params
      ),
      streaming_audio_config=texttospeech.StreamingAudioConfig(
          audio_encoding=texttospeech.AudioEncoding.PCM,
          sample_rate_hertz=24000,
      ),
  )
  config_request = texttospeech.StreamingSynthesizeRequest(
      streaming_config=streaming_config
  )

  # Request generator. Consider using Gemini or another LLM with output
  # streaming as a generator.
  def request_generator():
    yield config_request
    for text in simulated_streamed_text:
      yield texttospeech.StreamingSynthesizeRequest(
          input=texttospeech.StreamingSynthesisInput(text=text)
      )

  streaming_responses = tts_client.streaming_synthesize(request_generator())
  audio_buffer = io.BytesIO()
  for response in streaming_responses:
    print(f'Audio content size in bytes is: {len(response.audio_content)}')
    audio_buffer.write(response.audio_content)

  # Write collected audio outputs to a WAV file.
  with wave.open(synthesis_output_path, 'wb') as wav_file:
    wav_file.setnchannels(1)
    wav_file.setsampwidth(2)
    wav_file.setframerate(24000)
    wav_file.writeframes(audio_buffer.getvalue())
    print(f'Audio content written to file {synthesis_output_path}.')


if __name__ == '__main__':
  client = texttospeech.TextToSpeechClient()
  with open('voice_cloning_key.txt', 'r') as f:
    key = f.read()
  perform_voice_cloning_with_simulated_streaming(
      voice_cloning_key=key,
      simulated_streamed_text=[
          'Hello world!',
          'This is the second text chunk.',
          'This simulates streaming text for synthesis.',
      ],
      language_code='en-US',
      synthesis_output_path='streaming_output.wav',
      tts_client=client,
  )