Chirp 3: voz personalizada instantânea

Testar a voz personalizada instantânea no Vertex AI Studio Testar no Colab Ver o notebook no GitHub

Com o recurso de voz personalizada instantânea do Chirp 3, é possível criar modelos de voz personalizados treinando um modelo com gravações de áudio de alta qualidade. A voz personalizada instantânea pode gerar rapidamente vozes pessoais, que podem ser usadas para sintetizar áudio usando a API Cloud Text-to-Speech, compatível com streaming e textos longos.

Detalhes técnicos

Idiomas disponíveis Veja os idiomas disponíveis
Disponibilidade por região global, us, eu, asia-southeast1, asia-northeast1, europe-west2
Formatos de saída disponíveis
  • streaming: LINEAR16 (padrão), ALAW, MULAW, OGG_OPUS, PCM
  • batch: LINEAR16 (padrão), ALAW, MULAW, OGG_OPUS, PCM
Formatos de codificação compatíveis LINEAR16, PCM, MP3, M4A
Recursos compatíveis
  • Comandos baseados em texto: use pontuação, pausas e disfluência para adicionar fluxo e ritmo naturais.
  • Pausar tags: (experimental) introduza pausas sob demanda no áudio sintetizado.
  • Controle de ritmo: ajuste a velocidade do áudio sintetizado de 0,25x a 2x.
  • Controle de pronúncia: (experimental) pronúncias personalizadas de palavras ou frases usando a codificação fonética IPA ou X-SAMPA.
  • Transferências de idioma: as chaves de clonagem de voz com a localidade en-US podem sintetizar a saída nas seguintes localidades: de-DE, es-US, es-ES, fr-CA, fr-FR, pt-BR

Idiomas disponíveis

A voz personalizada instantânea está disponível nos seguintes idiomas:

Idioma Código BCP-47 Declaração de consentimento
Árabe (XA) ar-XA .أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي
Bengali (Índia) bn-IN আমি এই ভয়েসের মালিক এবং আমি একটি সিন্থেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে সম্মতি দিচ্ছি।
Chinês (China) cmn-CN 我是此声音的拥有者并授权谷歌使用此声音创建语音合成模型
Inglês (Austrália) en-AU I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
Inglês (Índia) en-IN I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
Inglês (Reino Unido) en-GB I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
Inglês (EUA) en-US I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model.
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 (França) 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ão (Alemanha) de-DE Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet.
Gujarati (Índia) gu-IN હું આ વોઈસનો માલિક છું અને સિન્થેટિક વોઈસ મોડલ બનાવવા માટે આ વોઈસનો ઉપયોગ કરીને google ને હું સંમતિ આપું છું
Hindi (Índia) hi-IN मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं
Indonésio (Indonésia) id-ID Saya pemilik suara ini dan saya menyetujui Google menggunakan suara ini untuk membuat model suara sintetis.
Italiano (Itália) it-IT Sono il proprietario di questa voce e acconsento che Google la utilizzi per creare un modello di voce sintetica.
Japonês (Japão) ja-JP 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成 モデルを作成することを承認します。
Canarês (Índia) kn-IN ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ.
Coreano (Coreia) ko-KR 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
Malaiala (Índia) ml-IN ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്‌ಸ್ മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്‌ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു."
Marathi (Índia) mr-IN मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो
Holandês (Holanda) 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.
Polonês (Polônia) 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 Eu sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética.
Russo (Rússia) ru-RU Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтетического голоса.
Tamil (Índia) ta-IN நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன்.
Telugu (Índia) te-IN నేను ఈ వాయిస్ యజమానిని మరియు సింతటిక్ వాయిస్ మోడల్ ని రూపొందించడానికి ఈ వాయిస్ ని ఉపయోగించడానికి googleకి నేను సమ్మతిస్తున్నాను.
Tailandês (Tailândia) th-TH ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสังเคราะห์
Turco (Turquia) tr-TR Bu sesin sahibi benim ve Google'ın bu sesi kullanarak sentetik bir ses modeli oluşturmasına izin veriyorum.
Vietnamita (Vietnã) 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.
Espanhol (Espanha) 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.
Espanhol (EUA) 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 a voz personalizada instantânea

As seções a seguir mostram como usar os recursos de voz personalizada instantânea do Chirp 3 na API Text-to-Speech.

  1. Gravar a declaração de consentimento: para obedecer às diretrizes legais e éticas da voz personalizada instantânea, grave a declaração de consentimento obrigatória como um arquivo de áudio de canal único no idioma apropriado e em uma codificação de áudio compatível com até 10 segundos de duração. ("Eu sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética.")

  2. Gravar áudio de referência: use o microfone do computador para gravar até 10 segundos de áudio como um arquivo de áudio de canal único em uma codificação de áudio compatível. Não pode haver ruído de fundo durante a gravação. Grave o áudio de consentimento e de referência no mesmo ambiente.

  3. Armazenar arquivos de áudio: salve os arquivos de áudio gravados em um local designado do Cloud Storage.

Siga estas diretrizes para produzir áudios de referência e consentimento de alta qualidade:

  • O áudio precisa ter no máximo 10 segundos, se possível.
  • O áudio precisa incluir pausas e ritmo naturais.
  • O áudio precisa ter o mínimo de ruído de fundo possível.
  • Para mais informações, consulte Codificações de áudio compatíveis. Qualquer taxa de amostragem pode ser usada.
  • O modelo replica a qualidade do microfone. Portanto, se a gravação estiver distorcida, a saída também vai estar.
  • A voz precisa ser dinâmica e um pouco mais expressiva do que a da saída final. A voz também precisa ter a cadência que você quer que a voz clonada tenha. Por exemplo, se o áudio de referência não tiver pausas ou interrupções naturais, a voz clonada não será boa em fazer pausas.
  • Um bom comando é mais animado e energético do que monótono e entediado, para que o modelo receba pistas para replicar essa energia.

Criar uma voz personalizada instantânea usando a API REST

Uma voz personalizada instantânea assume a forma de uma chave de clonagem de voz, que é uma representação de string de texto dos seus dados de voz.

Observações importantes

Confira algumas informações importantes sobre a criação de uma voz personalizada:

  • Não há limite para o número de chaves de clonagem de voz que podem ser criadas, porque elas são armazenadas no lado do cliente e fornecidas por solicitação.
  • A mesma chave de clonagem de voz pode ser usada por vários clientes ou dispositivos ao mesmo tempo.
  • É possível criar 10 chaves de clonagem de voz por minuto e projeto. Para mais informações, consulte Limite de solicitações.
  • Não é possível usar um script de consentimento personalizado em vez do padrão. Você precisa usar o script de declaração de consentimento fornecido no idioma escolhido.
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 com uma voz personalizada instantânea usando a API REST

Use a chave de clonagem de voz para sintetizar áudio usando a 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 com uma voz personalizada instantânea usando a biblioteca de cliente do Python

Este exemplo usa a biblioteca de cliente do Python para realizar a síntese de voz personalizada instantânea usando uma chave de clonagem de voz salva no arquivo voice_cloning_key.txt. Para gerar uma chave de clonagem de voz, consulte Criar uma voz personalizada instantânea usando a 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íntese por streaming com uma voz personalizada instantânea usando a biblioteca de cliente do Python

Neste exemplo, usamos a biblioteca de cliente do Python para realizar a síntese de voz personalizada instantânea por streaming, usando uma chave de clonagem de voz salva em voice_cloning_key.txt. Para gerar uma chave de clonagem de voz, consulte Criar uma voz personalizada instantânea usando a 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 o Chirp 3: controles de voz em alta definição

A Voz Personalizada Instantânea é compatível com os mesmos recursos de controle de ritmo, controle de pausa e pronúncia personalizada do Chirp 3: vozes em alta definição. Para mais informações sobre os controles de voz em alta definição do Chirp 3, consulte Chirp 3: controles de voz em alta definição.

Os três recursos podem ser ativados para a voz personalizada instantânea ajustando o SynthesizeSpeechRequest ou StreamingSynthesizeConfig da mesma forma que é feito para a voz personalizada instantânea.

Disponibilidade de idiomas para controles de voz

  • O controle de ritmo está disponível em todas as localidades.

  • O controle de pausa está disponível em todas as localidades.

  • As pronúncias personalizadas estão disponíveis em todas as localidades, exceto: bn-IN, gu-IN, th-TH e vi-VN.

Ativar a transferência multilíngue

A voz personalizada instantânea oferece suporte à transferência multilíngue para pares de localidades especificados. Isso significa que, com uma chave de clonagem de voz gerada com um determinado código de idioma, como en-US, é possível sintetizar idiomas diferentes, como es-ES.

Este exemplo de código demonstra a configuração de SynthesizeRequest para sintetizar es-ES usando uma chave de clonagem de voz de 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,
  ),
)

Exemplo de configuração de StreamingSynthesizeConfig para sintetizar es-ES usando uma chave de clonagem 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,
    ),
)