Chirp 3: voz personalizada instantânea

A voz personalizada instantânea na conversão de texto em voz permite aos utilizadores criar modelos de voz personalizados através da preparação de um modelo com as suas próprias gravações de áudio de alta qualidade. Permite a geração rápida de vozes pessoais, que podem ser usadas para sintetizar áudio através da API Cloud TTS, suportando streaming e texto longo.

Experimente um bloco de notas do Colab Ver bloco de notas no GitHub

Idiomas disponíveis

A voz personalizada instantânea é suportada 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 Sou o proprietário desta voz e consinto que a Google utilize esta voz para criar um modelo de voz sintética.
Inglês (Índia) en-IN Sou o proprietário desta voz e consinto que a Google utilize esta voz para criar um modelo de voz sintética.
Inglês (RU) en-GB Sou o proprietário desta voz e consinto que a Google utilize esta voz para criar um modelo de voz sintética.
Inglês (EUA) en-US Sou o proprietário desta voz e consinto que a Google utilize esta voz para criar um 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 (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.
Guzerate (Índia) gu-IN હું આ વોઈસનો માલિક છું અને સિન્થેટિક વોઈસ મોડલ બનાવવા માટે આ વોઈસનો ઉપયોગ કરીને google ને હું સંમતિ આપું છું
Hindi (Índia) hi-IN मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं
Indonésio (Indonesia) 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がこの音声を使用して音声合成モデルを作成することを承認します。
Canarim (Índia) kn-IN ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ.
Coreano (Coreia) ko-KR 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다.
Malaiala (Índia) ml-IN ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്‌സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്‌ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു."
Marati (Índia) mr-IN मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो
Neerlandês (Países Baixos) 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 (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 на использование этого голоса для создания модели синтетического голоса.
Tâmil (Í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 (Vietname) 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.

Disponibilidade regional

A voz personalizada instantânea está disponível nas seguintes Google Cloud regiões:

Google Cloud Zona Método suportado Disposição para o lançamento
global Criação e síntese Pré-visualização privada
us Síntese Pré-visualização privada
eu Síntese Pré-visualização privada
asia-southeast1 Síntese Pré-visualização privada

Formatos de saída suportados

O formato de resposta predefinido é LINEAR16, mas outros formatos suportados incluem:

Método da API Formato
streaming ALAW, MULAW, OGG_OPUS e PCM
batch ALAW, MULAW, MP3, OGG_OPUS e PCM

Suporte de funcionalidades e limitações

Funcionalidade Apoio técnico Descrição
SSML Não Etiquetas SSML para personalizar o áudio sintético.
Comandos baseados em texto Sim Use pontuação, pausas e hesitações para adicionar um fluxo e um ritmo naturais à conversão de texto em voz.
Indicações de tempo Não Indicações de tempo ao nível da palavra.
Pausar etiquetas Experimental Introduzir pausas a pedido no áudio sintetizado.
Controlo do ritmo Sim Ajuste a velocidade do áudio sintetizado de 0,25x a 2x.
Controlo da pronúncia Experimental Pronúncias personalizadas de palavras ou expressões com codificação fonética IPA ou X-SAMPA.

Use o Chirp 3: voz personalizada instantânea

As secções seguintes exploram como usar o Chirp 3: Capacidades de voz personalizadas instantâneas na API Text-to-Speech.

  1. Grave a declaração de consentimento: para agir em conformidade com as diretrizes legais e éticas para a voz personalizada instantânea, grave a declaração de consentimento necessária como um ficheiro de áudio de canal único no idioma adequado e numa codificação de áudio suportada, com uma duração máxima de 10 segundos. (Sou o proprietário desta voz e consinto que a Google utilize esta voz para criar um modelo de voz sintética.)

  2. Grave áudio de referência: use o microfone do computador para gravar até 10 segundos de áudio como um ficheiro de áudio de canal único numa codificação de áudio suportada. Não deve haver ruído de fundo durante a gravação. Registe o consentimento e faça referência ao áudio no mesmo ambiente.

  3. Armazenar ficheiros de áudio: guarde os ficheiros de áudio gravados numa localização de armazenamento na nuvem designada.

Diretrizes para produzir áudio de referência de alta qualidade

  • O áudio deve ter o mais próximo possível de 10 segundos, com o mínimo de ruído. No entanto, o áudio deve incluir pausas e ritmo naturais, em vez de encaixar demasiadas palavras nesses 10 segundos.
  • O modelo replica a qualidade do microfone, por isso, se a gravação tiver um som distorcido, o resultado também terá um som distorcido.
  • A voz deve ser dinâmica e um pouco mais expressiva do que o som do resultado final. A voz também deve ter a cadência que quer que a voz clonada tenha. Por exemplo, se o áudio de referência não tiver pausas naturais nem interrupções, a voz clonada não vai ser boa a fazer pausas.
  • Um bom comando é mais entusiasmado e enérgico do que monótono e aborrecido, para que o modelo receba indicações para replicar esta energia.

Codificações de áudio suportadas

São suportadas as seguintes codificações de áudio de entrada:

  • LINEAR16
  • PCM
  • MP3
  • M4A

Crie uma voz personalizada instantânea com 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.

Aspetos importantes a ter em consideração

Seguem-se alguns aspetos importantes que deve saber sobre a criação de uma voz personalizada:

  • Não existe limite para o número de chaves de clonagem de voz que pode criar, porque as chaves de clonagem de voz são armazenadas no lado do cliente e fornecidas por pedido.
  • A mesma chave de clonagem de voz pode ser usada por vários clientes ou dispositivos em simultâneo.
  • Pode criar 10 chaves de clonagem de voz por minuto por projeto. Para mais informações, consulte o artigo Limite de pedidos.
  • Não pode usar um script de consentimento personalizado em vez do predefinido. Tem de usar o script de consentimento fornecido em Disponibilidade de idiomas.
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}")

Faça a síntese com uma voz personalizada instantânea através da API REST

Use a chave de clonagem de voz para sintetizar áudio através da 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}")

Faça a síntese com uma voz personalizada instantânea através da biblioteca cliente Python

Este exemplo usa a biblioteca cliente Python para realizar a síntese de voz personalizada instantânea, usando uma chave de clonagem de voz que foi guardada no ficheiro voice_cloning_key.txt. Para gerar uma chave de clonagem de voz, consulte o artigo Crie uma voz personalizada instantânea com 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,
  )

Fazer stream de síntese com uma voz personalizada instantânea através da biblioteca cliente Python

Este exemplo usa a biblioteca cliente Python para realizar a síntese de streaming de voz personalizada instantânea, usando uma chave de clonagem de voz guardada em voice_cloning_key.txt. Para gerar uma chave de clonagem de voz, consulte o artigo Crie uma voz personalizada instantânea com 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,
  )

Use o Chirp 3: controlos de voz HD

A voz personalizada instantânea suporta as mesmas funcionalidades de controlo de ritmo, controlo de pausa e pronúncia personalizada que o Chirp 3: HD voices suporta para a síntese de sincronização, mas não para a síntese de streaming. Para mais informações sobre o Chirp 3: controlos de voz HD, consulte o artigo Chirp 3: controlos de voz HD.

Pode ativar todas as três funcionalidades para a voz personalizada instantânea ajustando o SynthesizeSpeechRequest da mesma forma que para a voz personalizada instantânea.

Idiomas disponíveis para controlos de voz

  • O controlo do ritmo está disponível em todas as localizações.

  • O controlo de pausa está disponível em todas as localizações.

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

Ative a transferência multilingue

A voz personalizada instantânea suporta a transferência multilingue para pares de locais especificados. Isto significa que, dada uma chave de clonagem de voz gerada com um determinado código de idioma, como en-US, a chave pode ser usada para sintetizar o idioma num idioma diferente, como es-ES.

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

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

Idiomas disponíveis para a transferência multilingue

A voz personalizada instantânea suporta as seguintes transferências de idiomas:

  • As chaves de clonagem de voz com o local en-US podem sintetizar a saída nos seguintes locais:

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