Chirp 3: Voz personalizada instantánea

Probar Voz personalizada instantánea en Vertex AI Studio Probar en Colab Ver cuaderno en GitHub

La función Voz personalizada instantánea de Chirp 3 te permite crear modelos de voz personalizados entrenando un modelo con grabaciones de audio de alta calidad. Voz personalizada instantánea puede generar rápidamente voces personales que se pueden usar para sintetizar audio con la API Cloud TTS, que admite tanto streaming como texto largo.

Información técnica

Available languages Consulta los idiomas disponibles.
Disponibilidad regional global, us, eu, asia-southeast1, asia-northeast1 y europe-west2
Formatos de salida admitidos
  • streaming: LINEAR16 (predeterminada), ALAW, MULAW, OGG_OPUS, PCM
  • batch: LINEAR16 (predeterminada), ALAW, MULAW, OGG_OPUS, PCM
Formatos de codificación admitidos LINEAR16, PCM, MP3, M4A
Funciones compatibles
  • Peticiones basadas en texto: usa signos de puntuación, pausas y disfluencias para añadir un ritmo y un flujo naturales.
  • Etiquetas de pausa: (experimental) introduce pausas a petición en el audio sintetizado.
  • Control del ritmo: ajusta la velocidad del audio sintetizado de 0,25 a 2 veces.
  • Control de pronunciación: (experimental) pronunciaciones personalizadas de palabras o frases mediante la codificación fonética IPA o X-SAMPA.
  • Transferencias de idioma: las claves de clonación de voz con la configuración regional en-US pueden sintetizar resultados en las siguientes configuraciones regionales: de-DE, es-US, es-ES, fr-CA, fr-FR y pt-BR.

Available languages

La función Voz personalizada instantánea está disponible en los siguientes idiomas:

Idioma Código BCP-47 Declaración de consentimiento
Árabe (XA) ar-XA .أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي
Bengalí (India) bn-IN আমি এই ভয়েসের মালিক এবং আমি একটি সিন্থেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে সম্মতি দিচ্ছি।
Chino (China) cmn-CN 我是此声音的所有者,并授权 Google 使用此声音创建语音合成模型
Inglés (Australia) en-AU Soy el propietario de esta voz y doy mi consentimiento para que Google la use para crear un modelo de voz sintética.
Inglés (India) en-IN Soy el propietario de esta voz y doy mi consentimiento para que Google la use para crear un modelo de voz sintética.
Inglés (Reino Unido) en-GB Soy el propietario de esta voz y doy mi consentimiento para que Google la use para crear un modelo de voz sintética.
inglés (EE. UU.) en-US Soy el propietario de esta voz y doy mi consentimiento para que Google la use para crear un modelo de voz sintética.
Francés (Canadá) 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.
Francés (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.
Alemán (Alemania) de-DE Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet.
Guyaratí (India) gu-IN હું આ અવાજનો માલિક છું અને સિન્થેટિક અવાજ મોડેલ બનાવવા માટે આ અવાજનો ઉપયોગ કરીને Google ને હું સંમતિ આપું છું
Hindi (India) hi-IN मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं
Indonesio (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.
Japonés (Japón) ja-JP 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成 モデルを作成することを承認します。
Canarés (India) kn-IN ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲೀಕನಾಗಿದ್ದು, ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಲು Google ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ.
Coreano (Corea) ko-KR 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
Malayalam (India) ml-IN ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്‌സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്‌ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു."
Maratí (India) mr-IN मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो
Neerlandés (Países Bajos) 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.
Polaco (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.
Portugués (Brasil) pt-BR Sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética.
Ruso (Rusia) ru-RU Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтетического голоса.
Tamil (India) ta-IN நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன்.
Telugu (India) te-IN నేను ఈ వాయిస్ యజమానిని మరియు సింథటిక్ వాయిస్ మోడల్ను రూపొందించడానికి ఈ వాయిస్ను ఉపయోగించడానికి Googleకి నేను సమ్మతిస్తున్నాను.
Tailandés (Tailandia) th-TH ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสังเคราะห์
Turco (Turquía) 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.
Español (España) 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.
Español (EE. UU.) 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.

Usar Voz personalizada al instante

En las siguientes secciones se explica cómo usar las funciones de voz personalizada instantánea de Chirp 3 en la API Text-to-Speech.

  1. Graba la declaración de consentimiento: para cumplir las directrices legales y éticas de la voz personalizada instantánea, graba la declaración de consentimiento obligatoria como un archivo de audio de un solo canal en el idioma correspondiente y con una codificación de audio compatible. La grabación puede durar hasta 10 segundos. "Soy el propietario de esta voz y doy mi consentimiento para que Google la use con el fin de crear un modelo de voz sintética".

  2. Grabar audio de referencia: usa el micrófono de tu ordenador para grabar hasta 10 segundos de audio como un archivo de audio de un solo canal en una codificación de audio compatible. No debe haber ruido de fondo durante la grabación. Graba el consentimiento y el audio de referencia en el mismo entorno.

  3. Almacenar archivos de audio: guarda los archivos de audio grabados en una ubicación de Cloud Storage designada.

Sigue estas directrices para producir audios de referencia y de consentimiento de alta calidad:

  • El audio debe durar unos 10 segundos.
  • El audio debe incluir pausas y un ritmo naturales.
  • El audio debe tener el mínimo ruido de fondo posible.
  • Para obtener más información, consulta Codificaciones de audio admitidas. Se puede usar cualquier frecuencia de muestreo.
  • El modelo replica la calidad del micrófono, por lo que, si la grabación suena borrosa, la salida también lo hará.
  • La voz debe ser dinámica y un poco más expresiva que el resultado final. La voz también debe tener la cadencia que quieras que tenga la voz clonada. Por ejemplo, si el audio de referencia no tiene pausas ni interrupciones naturales, la voz clonada no será buena a la hora de hacer pausas.
  • Una buena petición es más entusiasta y enérgica que monótona y aburrida, por lo que el modelo tomará pistas para replicar esa energía.

Crear una voz personalizada instantánea con la API REST

Una voz personalizada instantánea toma la forma de una clave de clonación de voz, que es una representación de cadena de texto de tus datos de voz.

Aspectos importantes que debes tener en cuenta

Estos son algunos aspectos clave que debes tener en cuenta al crear una voz personalizada:

  • No hay límite en el número de claves de clonación de voz que puedes crear, ya que se almacenan en el lado del cliente y se proporcionan por solicitud.
  • Varios clientes o dispositivos pueden usar la misma clave de clonación de voz al mismo tiempo.
  • Puedes crear 10 claves de clonación de voz por minuto y por proyecto. Para obtener más información, consulta Límite de solicitudes.
  • No puedes usar una secuencia de comandos de consentimiento personalizada en lugar de la predeterminada. Debes usar la secuencia de comandos de la declaración de consentimiento proporcionada para el idioma que hayas elegido.
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}")

Sintetizar con una voz personalizada instantánea mediante la API REST

Usa la clave de clonación de voz para sintetizar audio mediante la 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}")

Sintetizar con una voz personalizada instantánea mediante la biblioteca de cliente de Python

En este ejemplo se usa la biblioteca de cliente de Python para realizar una síntesis de voz personalizada instantánea con una clave de clonación de voz que se ha guardado en el archivo voice_cloning_key.txt. Para generar una clave de clonación de voz, consulta Crear una voz personalizada al instante con la 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,
  )

Síntesis de voz en streaming con una voz personalizada instantánea mediante la biblioteca de cliente de Python

En este ejemplo se usa la biblioteca de cliente de Python para realizar una síntesis de voz personalizada instantánea en streaming con una clave de clonación de voz guardada en voice_cloning_key.txt. Para generar una clave de clonación de voz, consulta Crear una voz personalizada al instante con la 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,
  )

Usar los controles de voz de Chirp 3: voces en HD

Voz personalizada instantánea admite las mismas funciones de control de ritmo, control de pausa y pronunciación personalizada que Chirp 3: voces en HD. Para obtener más información sobre los controles de voz en HD de Chirp 3, consulta Controles de voz en HD de Chirp 3.

Las tres funciones se pueden habilitar para la voz personalizada instantánea ajustando el SynthesizeSpeechRequest o el StreamingSynthesizeConfig de la misma forma que se hace con la voz personalizada instantánea.

Idiomas disponibles para los controles de voz

  • El control del ritmo está disponible en todas las configuraciones regionales.

  • El control de pausa está disponible en todas las configuraciones regionales.

  • La función de pronunciaciones personalizadas está disponible en todas las configuraciones regionales, excepto en bn-IN, gu-IN, th-TH y vi-VN.

Habilitar la transferencia multilingüe

Voz personalizada instantánea admite la transferencia multilingüe para pares de configuraciones regionales específicos. Esto significa que, dada una clave de clonación de voz generada con un código de idioma concreto, como en-US, la clave se puede usar para sintetizar el idioma en otro idioma, como es-ES. Las claves de clonación de voz con la configuración regional en-US pueden sintetizar la salida en las siguientes configuraciones regionales: de-DE, es-US, es-ES, fr-CA, fr-FR y pt-BR.

En este código de ejemplo se muestra la configuración de SynthesizeRequest para sintetizar es-ES mediante una clave de clonación de voz 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,
  ),
)

Ejemplo de configuración de StreamingSynthesizeConfig para sintetizar es-ES mediante una clave de clonación de voz 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,
    ),
)