Coba notebook Colab
|
Lihat notebook di GitHub
|
Suara kustom instan di Text-to-Speech memungkinkan pengguna membuat model suara yang dipersonalisasi dengan melatih model menggunakan rekaman audio berkualitas tinggi milik mereka. Suara kustom instan dapat membuat suara pribadi dengan cepat, yang kemudian dapat digunakan untuk menyintesis audio menggunakan Cloud Text-to-Speech API, yang mendukung streaming dan teks panjang.
Untuk mengeksplorasi dan bereksperimen dengan Suara kustom instan di konsol, lihat Media Studio. Google Cloud
Mencoba Suara kustom instan di (Vertex AI Studio)
Ketersediaan bahasa
Suara kustom instan didukung dalam bahasa berikut:
| Bahasa | Kode BCP-47 | Pernyataan Izin |
|---|---|---|
| Arab (XA) | ar-XA | .أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي |
| Bengali (India) | bn-IN | আমি এই ভয়েসের মালিক এবং আমি একটি সিন্থেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে সম্মতি দিচ্ছি। |
| China (China) | cmn-CN | 我是此声音的拥有者并授权谷歌使用此声音创建语音合成模型 |
| Inggris (Australia) | en-AU | I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model. |
| Inggris (India) | en-IN | I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model. |
| Inggris (Inggris Raya) | en-GB | I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model. |
| Inggris (AS) | en-US | I am the owner of this voice and I consent to Google using this voice to create a synthetic voice model. |
| Prancis (Kanada) | 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. |
| Prancis (Prancis) | 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. |
| Jerman (Jerman) | de-DE | Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet. |
| Gujarati (India) | gu-IN | હું આ વોઈસનો માલિક છું અને સિન્થેટિક વોઈસ મોડલ બનાવવા માટે આ વોઈસનો ઉપયોગ કરીને google ને હું સંમતિ આપું છું |
| Hindi (India) | hi-IN | मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं |
| Indonesia (Indonesia) | id-ID | Saya pemilik suara ini dan saya menyetujui Google menggunakan suara ini untuk membuat model suara sintetis. |
| Italia (Italia) | it-IT | Sono il proprietario di questa voce e acconsento che Google la utilizzi per creare un modello di voce sintetica. |
| Jepang (Jepang) | ja-JP | 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成モデルを作成することを承認します。 |
| Kannada (India) | kn-IN | ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ. |
| Korea (Korea) | ko-KR | 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다. |
| Malayalam (India) | ml-IN | ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു." |
| Marathi (India) | mr-IN | मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो |
| Belanda (Belanda) | 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. |
| Polandia (Polandia) | 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. |
| Portugis (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. |
| Rusia (Rusia) | ru-RU | Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтетического голоса. |
| Tamil (India) | ta-IN | நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன். |
| Telugu (India) | te-IN | నేను ఈ వాయిస్ యజమానిని మరియు సింతటిక్ వాయిస్ మోడల్ ని రూపొందించడానికి ఈ వాయిస్ ని ఉపయోగించడానికి googleకి నేను సమ్మతిస్తున్నాను. |
| Thai (Thailand) | th-TH | ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสังเคราะห์ |
| Turki (Turki) | tr-TR | Bu sesin sahibi benim ve Google'ın bu sesi kullanarak sentetik bir ses modeli oluşturmasına izin veriyorum. |
| Vietnam (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. |
| Spanyol (Spanyol) | 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. |
| Spanyol (AS) | 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. |
Ketersediaan Regional
Suara kustom instan tersedia di wilayah Google Cloud berikut:
| Google Cloud Zona | Metode yang Didukung | Kesiapan Peluncuran |
|---|---|---|
global |
Pembuatan, Sintesis | Pratinjau Pribadi |
us |
Sintesis | Pratinjau Pribadi |
eu |
Sintesis | Pratinjau Pribadi |
asia-southeast1 |
Pembuatan, Sintesis | Pratinjau Pribadi |
asia-northeast1 |
Pembuatan, Sintesis | Pratinjau Pribadi |
europe-west2 |
Pembuatan, Sintesis | Pratinjau Pribadi |
Format output yang didukung
Format respons default adalah LINEAR16, tetapi format lain yang didukung meliputi:
| Metode API | Format |
|---|---|
streaming |
ALAW, MULAW, OGG_OPUS, dan PCM |
batch |
ALAW, MULAW, MP3, OGG_OPUS, dan PCM |
Dukungan dan batasan fitur
| Fitur | Dukungan | Deskripsi |
|---|---|---|
| SSML | Tidak | Tag SSML untuk mempersonalisasi audio sintetis. |
| Perintah berbasis teks | Ya | Menggunakan tanda baca, jeda, dan ketidaklancaran untuk menambahkan alur dan kecepatan alami pada Text-to-Speech. |
| Stempel waktu | Tidak | Stempel waktu tingkat kata. |
| Tag jeda | Eksperimental | Memunculkan jeda sesuai permintaan pada audio hasil sintesis. |
| Kontrol kecepatan | Ya | Menyesuaikan kecepatan audio hasil sintesis dari kecepatan 0,25x hingga 2x. |
| Kontrol pengucapan | Eksperimental | Pengucapan kustom kata atau frasa menggunakan encoding fonetik IPA atau X-SAMPA. |
Menggunakan Chirp 3: suara kustom instan
Bagian berikut menjelaskan cara menggunakan kemampuan Chirp 3: Suara kustom instan di Text-to-Speech API.
Merekam persetujuan dan audio referensi
Merekam pernyataan persetujuan: Untuk mematuhi pedoman hukum dan etika untuk Suara kustom instan, rekam pernyataan persetujuan yang diperlukan sebagai file audio satu saluran dalam bahasa yang sesuai dan dalam encoding audio yang didukung, dengan durasi hingga 10 detik. (Saya adalah pemilik suara ini, dan saya menyetujui Google menggunakan suara ini untuk membuat model suara sintetis.)
Merekam audio referensi: Gunakan mikrofon komputer Anda untuk merekam audio dengan durasi hingga 10 detik sebagai file audio satu saluran dalam encoding audio yang didukung. Tidak boleh ada suara bising di latar belakang selama perekaman. Rekam audio persetujuan dan audio referensi di lingkungan yang sama.
Menyimpan file audio: Simpan file audio yang direkam di lokasi Cloud Storage yang ditentukan.
Pedoman untuk menghasilkan audio referensi dan persetujuan berkualitas tinggi
Ikuti panduan berikut untuk menghasilkan audio referensi dan persetujuan berkualitas tinggi:
- Audio harus berdurasi sekitar 10 detik dengan derau minimal dan harus menyertakan jeda serta kecepatan yang natural. Audio harus berdurasi sedekat mungkin dengan 10 detik, dengan derau minimal. Jangan memasukkan terlalu banyak kata dalam 10 detik.
- Audio harus direkam dengan encoding LINEAR16 dan file WAV mono pada frekuensi sampling 24 kHz. Pastikan tidak ada suara bising di latar belakang selama perekaman.
- Model ini akan mereplikasi kualitas mikrofon, jadi jika rekaman terdengar tidak jelas, outputnya juga akan terdengar tidak jelas.
- Suara harus dinamis dan sedikit lebih ekspresif daripada suara yang dihasilkan pada output akhir. Suara juga harus memiliki irama yang Anda inginkan untuk suara hasil kloning. Misalnya, jika audio referensi tidak memiliki jeda atau putus alami, suara hasil kloning tidak akan bagus dalam menjeda.
- Perintah yang baik menggunakan kata yang lebih bersemangat dan penuh energi, alih-alih monoton dan membosankan, sehingga model akan mengambil isyarat untuk mereplikasi energi ini.
Encoding audio yang didukung
Encoding audio input berikut didukung:
LINEAR16PCMMP3M4A
Membuat suara kustom instan menggunakan REST API
Suara kustom instan berbentuk kunci kloning suara, yang merupakan representasi string teks dari data suara Anda.
Hal penting yang perlu diperhatikan
Berikut beberapa hal penting yang perlu diketahui tentang pembuatan suara kustom:
- Tidak ada batasan jumlah kunci kloning suara yang dapat Anda buat, karena kunci kloning suara disimpan di sisi klien dan diberikan per permintaan.
- Kunci kloning suara yang sama dapat digunakan oleh beberapa klien atau perangkat secara bersamaan.
- Anda dapat membuat 10 kunci kloning suara per menit per project. Untuk mengetahui informasi selengkapnya, lihat Batas permintaan.
- Anda tidak dapat menggunakan skrip izin kustom sebagai pengganti skrip izin default. Anda harus menggunakan skrip izin yang disediakan di Ketersediaan Bahasa.
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}")
Menyintesis dengan suara kustom instan menggunakan REST API
Gunakan kunci kloning suara untuk menyintesis audio menggunakan REST API.
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}")
Menyintesis dengan suara kustom instan menggunakan library klien Python
Contoh ini menggunakan library klien Python untuk menyintesis suara kustom instan,
menggunakan kunci kloning suara yang telah disimpan ke file,
voice_cloning_key.txt. Untuk membuat kunci kloning suara, lihat
Membuat suara kustom instan menggunakan REST API.
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,
)
Sintesis streaming dengan suara kustom instan menggunakan library klien Python
Contoh ini menggunakan library klien Python untuk menyintesis streaming suara kustom instan,
menggunakan kunci kloning suara yang disimpan ke voice_cloning_key.txt.
Untuk membuat kunci kloning suara, lihat
Membuat suara kustom instan menggunakan REST API.
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,
)
Menggunakan Chirp 3: Kontrol suara HD
Suara kustom instan mendukung kontrol kecepatan, kontrol jeda, dan fitur pengucapan kustom yang sama dengan yang didukung oleh Chirp 3: Suara HD. Untuk mengetahui informasi selengkapnya tentang Chirp 3: Kontrol suara HD, lihat Chirp 3: Kontrol suara HD.
Ketiga fitur dapat diaktifkan untuk suara kustom instan dengan menyesuaikan
SynthesizeSpeechRequest atau StreamingSynthesizeConfig dengan cara yang sama seperti
yang dilakukan untuk Suara kustom instan.
Ketersediaan bahasa untuk kontrol suara
Kontrol kecepatan tersedia di semua lokalitas.
Kontrol jeda tersedia di semua lokalitas.
Pengucapan kustom tersedia di semua lokalitas, kecuali:
bn-IN,gu-IN,th-TH, danvi-VN.
Mengaktifkan transfer multibahasa
Suara kustom instan mendukung transfer multibahasa untuk
pasangan lokalitas tertentu. Artinya, jika kunci kloning suara dihasilkan dengan kode bahasa
tertentu seperti en-US, kunci tersebut dapat digunakan untuk menyintesis
bahasa dalam bahasa lain seperti es-ES.
Contoh kode ini menunjukkan konfigurasi SynthesizeRequest untuk menyintesis es-ES menggunakan
kunci kloning suara 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,
),
)
Contoh konfigurasi StreamingSynthesizeConfig untuk menyintesis es-ES menggunakan
kunci kloning suara 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,
),
)
Ketersediaan bahasa untuk transfer multibahasa
Suara kustom instan mendukung transfer bahasa berikut:
Kunci kloning suara dengan lokalitas
en-USdapat menyintesis output dalam lokalitas berikut:de-DEes-USes-ESfr-CAfr-FRpt-BR
Coba notebook Colab
Lihat notebook di GitHub