Probar un notebook de Colab
|
Ver el notebook en GitHub
|
La función de voz personalizada instantánea en Text-to-Speech permite a los usuarios crear modelos de voces personalizadas entrenando un modelo con sus grabaciones de audio de alta calidad. La voz personalizada instantánea puede generar, con rapidez, voces personales que luego se pueden usar para sintetizar audio con la API de Cloud Text-to-Speech, la cual admite la transmisión y texto de formato largo.
Para explorar y experimentar con la voz personalizada instantánea en la Google Cloud consola, consulta Media Studio.
Prueba la voz personalizada instantánea en Vertex AI Studio
Disponibilidad de idiomas
La voz personalizada instantánea es compatible con 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 | 我是此声音的拥有者并授权谷歌使用此声音创建语音合成模型 |
| inglés (Australia) | 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 (India) | 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. |
| English (US) | 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 (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 | ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ. |
| Coreano (Corea) | ko-KR | 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다. |
| Malabar (India) | ml-IN | ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു." |
| Maratí (India) | mr-IN | मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो |
| Holandé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 | Eu 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 (Türkiye) | 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. |
Disponibilidad regional
La voz personalizada instantánea está disponible en las siguientes Google Cloudregiones:
| Google Cloud Zona | Método admitido | Preparación para el lanzamiento |
|---|---|---|
global |
Creación y síntesis | Vista previa privada |
us |
Síntesis | Vista previa privada |
eu |
Síntesis | Vista previa privada |
asia-southeast1 |
Creación y síntesis | Vista previa privada |
asia-northeast1 |
Creación y síntesis | Vista previa privada |
europe-west2 |
Creación y síntesis | Vista previa privada |
Formatos de resultado compatibles
El formato de respuesta predeterminado es LINEAR16, pero se incluyen otros formatos compatibles, como los siguientes:
| Método de API | Formato |
|---|---|
streaming |
ALAW, MULAW, OGG_OPUS y PCM |
batch |
ALAW, MULAW, MP3, OGG_OPUS y PCM |
Compatibilidad y limitaciones de las funciones
| Función | Asistencia | Descripción |
|---|---|---|
| SSML | No | Etiquetas SSML para personalizar el audio sintético. |
| Instrucciones basadas en texto | Sí | Usa puntuación, pausas y disfluencias para agregar un ritmo y un flujo natural a la función de Text-to-Speech. |
| Marcas de tiempo | No | Marcas de tiempo a nivel de la palabra. |
| Etiquetas de pausa | Experimental | Ingresa pausas a pedido en el audio sintetizado. |
| Control de ritmo | Sí | Ajusta la velocidad del audio sintetizado desde 0.25x hasta 2x. |
| Control de pronunciación | Experimental | Pronunciaciones personalizadas de palabras o frases con codificación fonética IPA o X-SAMPA. |
Usa Chirp 3: Voz personalizada instantánea
En las siguientes secciones, se explora cómo usar las funciones de Chirp 3: Voz personalizada instantánea en la API de Text-to-Speech.
Graba el consentimiento y el audio de referencia
Graba el estado de consentimiento: Para cumplir con los lineamientos legales y éticos de la voz personalizada instantánea, graba el estado de consentimiento requerido como un archivo de audio de un solo canal en el idioma adecuado y en una codificación de audio compatible, de hasta 10 segundos de duración. (Soy el propietario de esta voz y doy mi consentimiento para que Google la utilice para crear un modelo de voz sintética.)
Graba el audio de referencia: Usa el micrófono de la computadora para grabar hasta 10 segundos como un archivo de audio de un solo canal en una codificación compatible. No debe haber ruido de fondo durante la grabación. Graba el consentimiento y el audio de referencia en el mismo entorno.
Almacena los archivos de audio: Guarda los archivos de audio grabados en una ubicación designada de Cloud Storage.
Lineamientos para producir audios de referencia y consentimiento de alta calidad
Sigue estos lineamientos para producir audios de referencia y consentimiento de alta calidad:
- Los audios deben durar alrededor de 10 segundos, tener el menor ruido posible y contener pausas y un ritmo naturales. Los audios deben durar cerca de 10 segundos y tener el menor ruido posible. Evita incluir demasiadas palabras en los 10 segundos.
- Los audios deben grabarse con codificación LINEAR16 y un archivo WAV mono con una tasa de muestreo de 24 kHz. Asegúrate de que no haya ruido de fondo durante la grabación.
- El modelo replica la calidad del micrófono, por lo que, si la grabación suena poco clara, la salida también sonará así.
- La voz debe ser dinámica y un poco más expresiva de lo que debería sonar el resultado final. La voz también debe tener la cadencia que deseas que tenga la voz clonada. Por ejemplo, si el audio de referencia no tiene pausas o interrupciones naturales, la voz clonada tampoco tendrá buenas pausas.
- Una buena instrucción es más entusiasta y enérgica que monótona y aburrida, por lo que el modelo tomará indicadores para replicar esta energía.
Codificaciones de audio compatibles
Se admiten las siguientes codificaciones de audio de entrada:
LINEAR16PCMMP3M4A
Crea una voz personalizada instantánea usando la API de REST
Una voz personalizada instantánea toma la forma de una clave de clonación de voz, que es una representación de la cadena de texto de tus datos de voz.
Aspectos clave que debes tener en cuenta
A continuación, se incluyen algunos aspectos clave que debes saber para crear una voz personalizada:
- No hay límite para la cantidad de claves de clonación de voz que puedes crear, ya que estas se almacenan del 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 un texto personalizado para solicitar consentimiento en lugar del predeterminado. Debes usar el texto para solicitar consentimiento que se proporciona en Disponibilidad 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}")
Sintetiza con una voz personalizada instantánea usando la API de REST
Usa la clave de clonación de voz para sintetizar audio con la API de 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}")
Sintetiza con una voz personalizada instantánea usando la biblioteca cliente de Python
En este ejemplo, se usa la biblioteca cliente de Python para realizar la síntesis de voz personalizada instantánea
con una clave de clonación de voz que se guardó en el archivo
voice_cloning_key.txt. Para generar una clave de clonación de voz, consulta
Crea una voz personalizada instantánea con la API de 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,
)
Sintetiza la transmisión con una voz personalizada instantánea usando la biblioteca cliente de Python
En este ejemplo, se usa la biblioteca cliente de Python para realizar la síntesis de transmisión
de voz personalizada instantánea con una clave de clonación de voz guardada en voice_cloning_key.txt.
Para generar una clave de clonación de voz, consulta
Crea una voz personalizada instantánea con la API de 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,
)
Usa Chirp 3: Controles por voz en HD
La voz personalizada instantánea admite las mismas funciones de control de ritmo, control de pausas y pronunciación personalizada que Chirp 3: Voces en HD. Para obtener más información sobre Chirp 3: Controles por voz en HD, consulta Chirp 3: Controles por voz en HD.
Las tres funciones se pueden habilitar para la voz personalizada instantánea ajustando
SynthesizeSpeechRequest o StreamingSynthesizeConfig de la misma manera que
se hace para la voz personalizada instantánea.
Disponibilidad de idiomas para los controles por voz
El control de ritmo está disponible en todos los parámetros de configuración regionales.
El control de pausa está disponible en todos los parámetros de configuración regionales.
Las pronunciaciones personalizadas están disponibles en todos los parámetros de configuración regionales, excepto en
bn-IN,gu-IN,th-THyvi-VN.
Habilita la transferencia multilingüe
La voz personalizada instantánea admite la transferencia multilingüe para
los pares de parámetros de configuración regionales especificados. Esto significa que, dada una clave de clonación de voz generada
con un código de idioma determinado, como en-US, la clave se puede usar para sintetizar
un idioma en otro, como es-ES.
En esta muestra de código, se enseña la configuración de SynthesizeRequest para sintetizar es-ES con
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 con
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,
),
)
Disponibilidad de idiomas para la transferencia multilingüe
La voz personalizada instantánea admite las siguientes transferencias de idiomas:
Las claves de clonación de voz con la configuración regional
en-USpueden sintetizar la salida en los siguientes parámetros de configuración regionales:de-DEes-USes-ESfr-CAfr-FRpt-BR
Probar un notebook de Colab
Ver el notebook en GitHub