A funcionalidade de voz personalizada instantânea do Chirp 3 permite-lhe criar modelos de voz personalizados através da preparação de um modelo com as suas gravações de áudio de alta qualidade. A voz personalizada instantânea pode gerar rapidamente vozes pessoais, que podem ser usadas para sintetizar áudio através da API Cloud TTS, que suporta streaming e texto longo.
Detalhes técnicos
| Idiomas disponíveis | Consulte os idiomas disponíveis |
|---|---|
| Disponibilidade regional | global, us, eu, asia-southeast1, asia-northeast1, europe-west2
|
| Formatos de saída suportados |
|
| Formatos de codificação suportados | LINEAR16, PCM, MP3, M4A |
| Funcionalidades suportadas |
|
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ético. |
| 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ético. |
| 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ético. |
| 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ético. |
| 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. |
Use a voz personalizada instantânea
As secções seguintes exploram como usar o Chirp 3: capacidades de voz personalizada instantânea na API Text-to-Speech.
Grave o consentimento e o áudio de referência
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 dou o meu consentimento para que a Google a utilize para criar um modelo de voz sintética.")
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. Grave o consentimento e faça referência ao áudio no mesmo ambiente.
Armazenar ficheiros de áudio: guarde os ficheiros de áudio gravados numa localização de armazenamento na nuvem designada.
Diretrizes para produzir áudios de referência e consentimento de alta qualidade
Siga estas diretrizes para produzir áudios de referência e consentimento de alta qualidade:
- O áudio deve ter o mais próximo possível de 10 segundos.
- O áudio deve incluir pausas e ritmo naturais.
- O áudio deve ter o mínimo de ruído de fundo possível.
- Para mais informações, consulte o artigo Codificações de áudio compatíveis. Pode usar qualquer taxa de amostragem.
- O modelo replica a qualidade do microfone, por isso, se a gravação tiver um som distorcido, a saída também terá um som distorcido.
- A voz deve ser dinâmica e um pouco mais expressiva do que o 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, 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.
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 a ter em conta ao criar 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.
- Vários clientes ou dispositivos podem usar a mesma chave de clonagem de voz ao mesmo tempo.
- Pode criar 10 chaves de clonagem de voz por minuto por projeto. Para mais informações, consulte o Limite de pedidos.
- Não pode usar um script de consentimento personalizado em vez do predefinido. Tem de usar o script da declaração de consentimento fornecido para o 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}")
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 do ritmo, controlo de pausa e pronúncia personalizada que o Chirp 3: HD voices suporta. Para mais informações sobre o Chirp 3: controlos de voz HD, consulte o artigo Chirp 3: controlos de voz HD.
Pode ativar as três funcionalidades para a voz personalizada instantânea ajustando o SynthesizeSpeechRequest ou o StreamingSynthesizeConfig da mesma forma que o faz 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-THevi-VN.
Ative a transferência multilingue
A voz personalizada instantânea suporta a transferência multilingue para pares de localidades 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. As chaves de clonagem de voz com a região en-US
podem sintetizar a saída nas seguintes regiões: de-DE,
es-US, es-ES, fr-CA, fr-FR e pt-BR.
Este exemplo de código demonstra a configuração do SynthesizeRequest para sintetizar es-ES através de uma
en-US chave de clonagem de voz:
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,
),
)