Chirp 3: voce personalizzata istantanea

Prova Voce personalizzata istantanea in Vertex AI Studio Prova in Colab Visualizza il notebook su GitHub

La funzionalità Voce personalizzata istantanea di Chirp 3 ti consente di creare modelli di voce personalizzata, addestrati sulla base di registrazioni audio personali di alta qualità. Voce personalizzata istantanea può generare rapidamente voci personali, che possono poi essere utilizzate per sintetizzare l'audio con l'API Cloud Text-to-Speech, che supporta lo streaming e il testo in formato lungo.

Dettagli tecnici

Lingue disponibili Consulta Lingue disponibili
Disponibilità per regione global, us, eu, asia-southeast1, asia-northeast1, europe-west2
Formati di output supportati
  • streaming: LINEAR16 (predefinito), ALAW, MULAW, OGG_OPUS, PCM
  • batch: LINEAR16 (predefinito), ALAW, MULAW, OGG_OPUS, PCM
Formati di codifica supportati LINEAR16, PCM, MP3, M4A
Funzionalità supportate
  • Prompt basati su testo: utilizza punteggiatura, pause e disfluenze per aggiungere un flusso e un ritmo naturali alla sintesi vocale.
  • Tag di pausa: (sperimentale) introduci pause on demand nell'audio sintetizzato.
  • Controllo del ritmo: regola la velocità dell'audio sintetizzato da 0,25x a 2x.
  • Controllo della pronuncia: (sperimentale) personalizzate di parole o locuzioni utilizzando la codifica fonetica IPA o X-SAMPA.
  • Trasferimenti multilingue: le chiavi di clonazione della voce con impostazioni internazionali en-US possono sintetizzare l'output nelle lingue impostazioni internazionali: de-DE, es-US, es-ES, fr-CA, fr-FR, pt-BR

Lingue disponibili

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 我是此声音的拥有者并授权谷歌使用此声音创建语音合成模型
Inglese (Australia) en-AU I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
Inglese (India) en-IN I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
Inglese (Regno Unito) en-GB I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
Inglese (USA) en-US I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
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 Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet.
Gujarati (India) gu-IN હું આ વોઈસનો માલિક છું અને સિન્થેટિક વોઈસ મોડલ બનાવવા માટે આ વોઈસનો ઉપયોગ કરીને google ને હું સંમતિ આપું છું
Hindi (India) hi-IN मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं
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 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成モデルを作成することを承認します。
Kannada (India) kn-IN ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ.
Coreano (Corea) ko-KR 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
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 Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтетического голоса.
Tamil (India) ta-IN நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன்.
Telugu (India) te-IN నేను ఈ వాయిస్ యజమానిని మరియు సింతటిక్ వాయిస్ మోడల్ ని రూపొందించడానికి ఈ వాయిస్ ని ఉపయోగించడానికి googleకి నేను సమ్మతిస్తున్నాను.
Thailandese (Thailandia) th-TH ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสังเคราะห์
Turco (Turchia) tr-TR Bu sesin sahibi benim ve Google'ın bu sesi kullanarak sentetik bir ses modeli oluşturmasına izin veriyorum.
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 Soy el propietario de esta voz y doy mi consentimiento para que Google la utilice para crear un modelo de voz sintética.
Spagnolo (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.

Utilizza la voce personalizzata istantanea

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

  1. Registra la dichiarazione di consenso: per rispettare le linee guida legali ed etiche di 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 l'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 i file audio: salva i file audio registrati in un percorso di Cloud Storage designato.

Segui queste linee guida per produrre audio di riferimento e di consenso di alta qualità:

  • L'audio deve avere una durata il più possibile vicina a 10 secondi.
  • L'audio deve includere pause e ritmo naturali.
  • L'audio deve avere un rumore di fondo minimo.
  • Per ulteriori informazioni, vedi Codifiche audio supportate. È possibile utilizzare qualsiasi frequenza di campionamento.
  • Il modello replica la qualità del microfono, quindi se la registrazione è poco chiara, lo sarà anche l'output.
  • La voce deve essere dinamica e un po' più espressiva di come dovrebbe essere l'output finale. Inoltre, la voce deve avere la stessa cadenza che vuoi per la voce clonata. Ad esempio, se l'audio di riferimento non contiene pause naturali, la voce clonata non sarà in grado di inserire correttamente le pause.
  • Un buon prompt è entusiasta ed energico, non monotono e annoiato; in questo modo, il modello prenderà spunto per replicare la stessa energia.

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 stringhe di testo dei tuoi dati vocali.

Aspetti importanti da tenere in considerazione

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

  • Non sono previsti limiti al numero di chiavi di clonazione della voce che puoi creare, perché queste 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 della voce al minuto per progetto. Per saperne di più, consulta Limiti per le richieste.
  • Non puoi utilizzare uno script personalizzato per il consenso al posto di quello predefinito. Devi utilizzare lo script della dichiarazione di consenso fornito per la lingua che hai scelto.
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}")

Sintetizza 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 con una voce personalizzata istantanea, utilizzando una chiave di clonazione della voce salvata nel file voice_cloning_key.txt. Per generare una chiave di clonazione della voce, 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,
  )

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

Questo esempio utilizza la libreria client Python per eseguire la sintesi con una voce personalizzata istantanea in streaming, utilizzando una chiave di clonazione della voce salvata in voice_cloning_key.txt. Per generare una chiave di clonazione della voce, 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,
  )

Utilizza i controlli di Chirp 3: voci in HD

Voce personalizzata istantanea supporta le stesse funzionalità di controllo del ritmo e delle pause e pronuncia personalizzata supportate da Chirp 3: voci in HD. Per saperne di più sui controlli di Chirp 3: voci in HD, consulta Controlli di Chirp 3: voci in HD.

Tutte e tre le funzionalità possono essere attivate per Voce personalizzata istantanea regolando SynthesizeSpeechRequest o StreamingSynthesizeConfig nello stesso modo in cui viene fatto per Voce personalizzata istantanea.

Lingue in cui sono disponibili i controlli vocali

  • Il controllo del ritmo è disponibile in tutte le lingue.

  • Il controllo delle pause è disponibile in tutte le lingue.

  • Le pronunce personalizzate sono disponibili in tutte le lingue, tranne: bn-IN, gu-IN, th-TH e vi-VN.

Abilita il trasferimento multilingue

Voce personalizzata istantanea supporta il trasferimento multilingue per coppie di lingue specificate. Ciò significa che, data una chiave di clonazione della voce 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 della voce 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,
    ),
)