Chirp 3: voce personalizzata istantanea

La voce personalizzata istantanea in Text-to-Speech consente agli utenti di creare modelli vocali personalizzati addestrando un modello con le proprie registrazioni audio di alta qualità. Consente la generazione rapida di voci personali, che possono poi essere utilizzate per sintetizzare l'audio utilizzando l'API Cloud TTS, supportando lo streaming e il testo in formato lungo.

Prova un notebook Colab Visualizza il blocco note su GitHub

Lingue disponibili

La voce personalizzata istantanea è supportata nelle seguenti lingue:

Lingua Codice BCP-47 Dichiarazione di consenso
Arabo (XA) ar-XA .أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي
Bengalese (India) bn-IN আমি এই ভয়েসের মালিক এবং আমি একটি সিন্থেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে সম্মতি দিচ্ছি।
Cinese (Cina) cmn-CN Sono il proprietario di questa voce e autorizzo Google a utilizzarla per creare un modello di sintesi vocale
Inglese (Australia) en-AU Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di sintesi vocale.
Inglese (India) en-IN Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di sintesi vocale.
Inglese (UK) en-GB Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di sintesi vocale.
Inglese (USA) en-US Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di sintesi vocale.
Francese (Canada) 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.
Francese (Francia) 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.
Tedesco (Germania) de-DE Sono il proprietario di questa voce e acconsento all'utilizzo da parte di Google per la creazione di un modello vocale sintetico.
Gujarati (India) gu-IN Sono il proprietario di questa voce e acconsento a Google di utilizzare questa voce per creare un modello di voce sintetica
Hindi (India) hi-IN Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di voce sintetica
Indonesiano (Indonesia) id-ID Saya pemilik suara ini dan saya menyetujui Google menggunakan suara ini untuk membuat model suara sintetis.
Italiano (Italia) it-IT Sono il proprietario di questa voce e acconsento che Google la utilizzi per creare un modello di voce sintetica.
Giapponese (Giappone) ja-JP Sono il proprietario di questo audio e autorizzo Google a utilizzarlo per creare un modello di sintesi vocale.
Kannada (India) kn-IN ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲೀಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ.
Coreano (Corea) ko-KR Sono il proprietario di questa voce e autorizzo Google a utilizzarla per creare un modello di sintesi vocale.
Malayalam (India) ml-IN ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്‌സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്‌ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു."
Marathi (India) mr-IN मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो
Olandese (Paesi Bassi) 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.
Polacco (Polonia) 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.
Portoghese (Brasile) pt-BR Eu sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética.
Russo (Russia) ru-RU Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di voce sintetica.
Tamil (India) ta-IN நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன்.
Telugu (India) te-IN నేను ఈ వాయిస్ యజమానిని మరియు సింథటిక్ వాయిస్ మోడల్‌ను రూపొందించడానికి ఈ వాయిస్‌ను ఉపయోగించడానికి Googleకి నేను సమ్మతిస్తున్నాను.
Thailandese (Thailandia) th-TH Sono il proprietario di questa voce e acconsento all'utilizzo da parte di Google per creare un modello di voce sintetica
Turco (Turchia) tr-TR Sono il proprietario di questa voce e autorizzo Google a utilizzarla per creare un modello vocale sintetico.
Vietnamita (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.
Spagnolo (Spagna) es-ES Sono il proprietario di questa voce e acconsento al suo utilizzo da parte di Google per creare un modello di voce sintetica.
Spagnolo (USA) es-US Sono il proprietario di questa voce e acconsento al suo utilizzo da parte di Google per creare un modello di voce sintetica.

Disponibilità regionale

La voce personalizzata istantanea è disponibile nelle seguenti Google Cloud regioni:

Google Cloud Zona Metodo supportato Preparazione al lancio
global Creazione, sintesi Anteprima privata
us Sintesi Anteprima privata
eu Sintesi Anteprima privata
asia-southeast1 Sintesi Anteprima privata

Formati di output supportati

Il formato di risposta predefinito è LINEAR16, ma sono supportati anche altri formati, tra cui:

Metodo API Formato
streaming ALAW, MULAW, OGG_OPUS e PCM
batch ALAW, MULAW, MP3, OGG_OPUS e PCM

Supporto e limitazioni delle funzionalità

Funzionalità Assistenza Descrizione
SSML No Tag SSML per personalizzare l'audio sintetico
Prompt basati su testo Sperimentale Utilizza punteggiatura, pause e disfluenze per aggiungere un flusso e un ritmo naturali a Text-to-Speech.
Timestamp No Timestamp a livello di parola
Mettere in pausa i tag No Introduzione di pause on demand nell'audio sintetizzato
Controllo andatura No Regola la velocità dell'audio sintetizzato, da 0,25x a 2x.
Controllo della pronuncia No Pronunce personalizzate di parole o frasi utilizzando la codifica fonetica IPA o X-SAMPA

Utilizzare Chirp 3: voce personalizzata istantanea

Le sezioni seguenti esplorano come utilizzare Chirp 3: Funzionalità di voce personalizzata istantanea nell'API Text-to-Speech.

  1. Registra la dichiarazione di consenso: per rispettare le linee guida legali ed etiche per la voce personalizzata istantanea, registra la dichiarazione di consenso richiesta come file audio a un solo canale nella lingua appropriata e in una codifica audio supportata, della durata massima di 10 secondi. (Sono il proprietario di questa voce e acconsento all'utilizzo di questa voce da parte di Google per creare un modello di sintesi vocale.)

  2. Registra audio di riferimento: utilizza il microfono del computer per registrare fino a 10 secondi di audio come file audio a un solo canale in una codifica audio supportata. Non deve esserci rumore di fondo durante la registrazione. Registra il consenso e l'audio di riferimento nello stesso ambiente.

  3. Archivia file audio: salva i file audio registrati in una posizione Cloud Storage designata.

Linee guida per la produzione di audio di riferimento di alta qualità

  • L'audio deve durare il più vicino possibile a 10 secondi e deve essere presente un rumore minimo. Tuttavia, l'audio deve includere pause e ritmo naturali, anziché inserire troppe parole in 10 secondi.
  • Il modello replica la qualità del microfono, quindi se la registrazione è indistinta, anche l'output sarà indistinto.
  • La voce deve essere dinamica e un po' più espressiva di quella che dovrebbe essere l'output finale. La voce deve anche avere la cadenza che vuoi che abbia la voce clonata. Ad esempio, se l'audio di riferimento non contiene pause naturali, la voce clonata non sarà in grado di fare pause.
  • Un buon prompt è più entusiasta ed energico che monotono e annoiato, in modo che il modello prenda spunto per replicare questa energia.

Codifiche audio supportate

Sono supportate le seguenti codifiche audio di input:

  • LINEAR16
  • PCM
  • MP3
  • M4A

Crea una voce personalizzata istantanea utilizzando l'API REST

Una voce personalizzata istantanea assume la forma di una chiave di clonazione della voce, ovvero una rappresentazione di stringa di testo dei tuoi dati vocali.

Aspetti importanti da tenere a mente

Di seguito sono riportati alcuni aspetti fondamentali da sapere sulla creazione di una voce personalizzata:

  • Non esiste un limite al numero di chiavi di clonazione vocale che puoi creare, perché le chiavi di clonazione vocale vengono archiviate lato client e fornite per richiesta.
  • La stessa chiave di clonazione della voce può essere utilizzata da più client o dispositivi contemporaneamente.
  • Puoi creare 10 chiavi di clonazione vocale al minuto per progetto. Per ulteriori informazioni, consulta la sezione Limite di richieste.
  • Non puoi utilizzare uno script di consenso personalizzato al posto di quello predefinito. Devi utilizzare lo script per il consenso fornito in Disponibilità delle lingue.
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": {
            # Supported audio_encoding values are LINEAR16, PCM, MP3, and M4A.
            "audio_config": {"audio_encoding": "LINEAR16"},
            "content": reference_audio_bytes,
        },
        "voice_talent_consent": {
            # Supported audio_encoding values are LINEAR16, PCM, MP3, and M4A.
            "audio_config": {"audio_encoding": "LINEAR16"},
            "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}")

Sintetizzare con una voce personalizzata istantanea utilizzando l'API REST

Utilizza la chiave di clonazione della voce per sintetizzare l'audio utilizzando l'API REST.

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": {
            # Supported audio_encoding values are LINEAR16, PCM, MP3, and M4A.
            "audioEncoding": "LINEAR16",
        }
    }

    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}")

Sintetizza con una voce personalizzata istantanea utilizzando la libreria client Python

Questo esempio utilizza la libreria client Python per eseguire la sintesi vocale personalizzata istantanea, utilizzando una chiave di clonazione della voce salvata nel file voice_cloning_key.txt. Per generare una chiave di clonazione vocale, consulta Crea una voce personalizzata istantanea utilizzando l'API REST.

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,
  )

Sintesi in streaming con una voce personalizzata istantanea utilizzando la libreria client Python

Questo esempio utilizza la libreria client Python per eseguire la sintesi vocale personalizzata istantanea in streaming, utilizzando una chiave di clonazione della voce salvata in voice_cloning_key.txt. Per generare una chiave di clonazione vocale, consulta Crea una voce personalizzata istantanea utilizzando l'API REST.

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,
  )

Utilizzare Chirp 3: controlli vocali HD

La voce personalizzata istantanea supporta le stesse funzionalità di controllo del ritmo, controllo della pausa e pronuncia personalizzata supportate da Chirp 3: voci in HD. Per ulteriori informazioni su Chirp 3: controlli vocali HD, vedi Chirp 3: controlli vocali HD.

Tutte e tre le funzionalità possono essere attivate per la voce personalizzata istantanea regolando SynthesizeSpeechRequest o StreamingSynthesizeConfig nello stesso modo di Voce personalizzata istantanea.

Lingue in cui sono disponibili i controlli vocali

  • Il controllo del ritmo è disponibile in tutte le impostazioni internazionali.

  • Il controllo della pausa è disponibile in tutte le impostazioni internazionali.

  • Le pronunce personalizzate sono disponibili in tutti i paesi, ad eccezione di: bn-IN, gu-IN, th-TH e vi-VN.

Abilitare il trasferimento multilingue

La voce personalizzata istantanea supporta il trasferimento multilingue per coppie di impostazioni internazionali specificate. Ciò significa che, data una chiave di clonazione vocale generata con un determinato codice di lingua, ad esempio en-US, la chiave può essere utilizzata per sintetizzare la lingua in un'altra lingua, ad esempio es-ES.

Questo esempio di codice mostra la configurazione di SynthesizeRequest per sintetizzare es-ES utilizzando una chiave di clonazione della voce en-US:

voice_clone_params = texttospeech.VoiceCloneParams(
    voice_cloning_key=en_us_voice_cloning_key
)
request = texttospeech.SynthesizeSpeechRequest(
  input=texttospeech.SynthesisInput(text=transcript),
  voice=texttospeech.VoiceSelectionParams(
      language_code='es-ES', voice_clone=voice_clone_params
  ),
  audio_config=texttospeech.AudioConfig(
      audio_encoding=texttospeech.AudioEncoding.LINEAR16,
      sample_rate_hertz=24000,
  ),
)

Esempio di configurazione di StreamingSynthesizeConfig per sintetizzare es-ES utilizzando una chiave di clonazione vocale en-US:

voice_clone_params = texttospeech.VoiceCloneParams(
    voice_cloning_key=en_us_voice_cloning_key
)
streaming_config = texttospeech.StreamingSynthesizeConfig(
    voice=texttospeech.VoiceSelectionParams(
        language_code='es-ES', voice_clone=voice_clone_params
    ),
    streaming_audio_config=texttospeech.StreamingAudioConfig(
        audio_encoding=texttospeech.AudioEncoding.PCM,
        sample_rate_hertz=24000,
    ),
)

Lingue disponibili per il trasferimento multilingue

La voce personalizzata istantanea supporta i seguenti trasferimenti di lingua:

  • Le chiavi di clonazione della voce con le impostazioni internazionali en-US possono sintetizzare l'output nelle seguenti impostazioni internazionali:

    • de-DE
    • es-US
    • es-ES
    • fr-CA
    • fr-FR
    • pt-BR