התכונה 'קול מותאם אישית מיידי' של Chirp 3 מאפשרת ליצור תבניות קול מותאמות אישית על ידי אימון מודל עם הקלטות אודיו באיכות גבוהה. התכונה 'קול מותאם אישית מיידי' מאפשרת ליצור במהירות קולות אישיים, שאחר כך אפשר להשתמש בהם כדי לסנתז אודיו באמצעות Cloud Cloud TTS API, שתומך בסטרימינג ובטקסט ארוך.
פרטים טכניים
| השפות הזמינות | השפות הזמינות |
|---|---|
| הזמינות באזור | global, us, eu, asia-southeast1, asia-northeast1, europe-west2
|
| פורמטים נתמכים של פלט |
|
| פורמטים נתמכים של קידוד | LINEAR16, PCM, MP3, M4A |
| תכונות נתמכות |
|
השפות הזמינות
אפשר להשתמש בתכונה 'Instant Custom Voice' בשפות הבאות:
| שפה | קוד BCP-47 | הצהרת הסכמה |
|---|---|---|
| ערבית (XA) | ar-XA | .أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي |
| בנגלית (הודו) | bn-IN | আমি এই ভয়েসের মালিক এবং আমি একটি সিন্থেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে সম্মতি দিচ্ছি। |
| סינית (סין) | cmn-CN | 我拥有此声音并授权 Google 使用此声音创建语音合成模型 |
| אנגלית (אוסטרליה) | en-AU | אני הבעלים של הקול הזה ואני מסכים/ה ש-Google תשתמש בקול הזה כדי ליצור תבנית קול סינתטית. |
| אנגלית (הודו) | en-IN | אני הבעלים של הקול הזה ואני מסכים/ה ש-Google תשתמש בקול הזה כדי ליצור תבנית קול סינתטית. |
| אנגלית (בריטניה) | en-GB | אני הבעלים של הקול הזה ואני מסכים/ה ש-Google תשתמש בקול הזה כדי ליצור תבנית קול סינתטית. |
| אנגלית (ארה"ב) | en-US | אני הבעלים של הקול הזה ואני מסכים/ה ש-Google תשתמש בקול הזה כדי ליצור תבנית קול סינתטית. |
| צרפתית (קנדה) | 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. |
| צרפתית (צרפת) | 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. |
| גרמנית (גרמניה) | de-DE | Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet. |
| גוג'ראטית (הודו) | gu-IN | હું આ વોઈસનો માલિક છું અને સિન્થેટિક વોઈસ મોડલ બનાવવા માટે આ વોઈસનો ઉપયોગ કરીને google ને હું સંમતિ આપું છું |
| הינדית (הודו) | hi-IN | मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए Google को इस आवाज का उपयोग करने की सहमति देता हूं |
| אינדונזית (אינדונזיה) | id-ID | Saya pemilik suara ini dan saya menyetujui Google menggunakan suara ini untuk membuat model suara sintetis. |
| איטלקית (איטליה) | it-IT | Sono il proprietario di questa voce e acconsento che Google la utilizzi per creare un modello di voce sintetica. |
| יפנית (יפן) | ja-JP | 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成 モデルを作成することを承認します。 |
| קאנדה (הודו) | kn-IN | ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷಿತ ಧ್ವನಿ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ. |
| קוריאנית (קוריאה) | ko-KR | 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다. |
| מליאלאם (הודו) | ml-IN | ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വോയ്സ് മോഡൽ സൃഷ്ടിക്കാൻ ഈ ശബ്ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു." |
| מראטהית (הודו) | mr-IN | मी या आवाजाचा मालक आहे आणि सिंथेटिक व्हॉइस मॉडेल तयार करण्यासाठी हा आवाज वापरण्यासाठी मी Google ला संमती देतो |
| הולנדית (הולנד) | 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. |
| פולנית (פולין) | 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. |
| פורטוגזית (ברזיל) | pt-BR | Eu sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética. |
| רוסית (רוסיה) | ru-RU | Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтетического голоса. |
| טמילית (הודו) | ta-IN | நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரல் மாதிரியை உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன். |
| טלוגו (הודו) | te-IN | Googleకి నా వాయిస్ యజమానిగా ఉన్నాను మరియు సింథటిక్ వాయిస్ మోడల్ను రూపొందించడానికి నా వాయిస్ను ఉపయోగించడానికి Googleకి నా సమ్మతిని తెలియజేస్తున్నాను. |
| תאית (תאילנד) | th-TH | ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสังเคราะห์ |
| טורקית (טורקיה) | tr-TR | Bu sesin sahibi benim ve Google'ın bu sesi kullanarak sentetik bir ses modeli oluşturmasına izin veriyorum. |
| וייטנאמית (וייטנאם) | 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. |
| ספרדית (ספרד) | 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. |
| ספרדית (ארצות הברית) | 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. |
שימוש ב-Instant Custom Voice
בקטעים הבאים מוסבר איך להשתמש ב-Chirp 3: יכולות Custom Voice מיידי ב-API של טקסט לדיבור.
הקלטת הסכמה ואודיו להשוואה
הקלטת הצהרת ההסכמה: כדי לעמוד בהנחיות המשפטיות והאתיות לשימוש בתכונה 'Custom Voice מיידי', צריך להקליט את הצהרת ההסכמה הנדרשת כקובץ אודיו חד-ערוצי בשפה המתאימה ובקידוד אודיו נתמך, באורך של עד 10 שניות. ("אני הבעלים של הקול הזה, ואני מסכים/ה ש-Google תשתמש בקול הזה כדי ליצור תבנית קול סינתטית")
הקלטת אודיו להשוואה: שימוש במיקרופון של המחשב כדי להקליט אודיו באורך של עד 10 שניות כקובץ אודיו חד-ערוצי בקידוד אודיו נתמך. במהלך ההקלטה לא אמור להיות רעש רקע. הקלטת ההסכמה והאודיו של ההפניה באותה סביבה.
אחסון קובצי אודיו: שמירת קובצי האודיו שהוקלטו במיקום ייעודי ב-Cloud Storage.
הנחיות ליצירת אודיו באיכות גבוהה של הפניה והסכמה
כדי ליצור אודיו של הפניה והסכמה באיכות גבוהה, חשוב לפעול לפי ההנחיות הבאות:
- קובץ האודיו צריך להיות באורך של 10 שניות ככל האפשר.
- האודיו צריך לכלול הפסקות וקצב טבעיים.
- רעשי הרקע באודיו צריכים להיות מינימליים.
- מידע נוסף זמין במאמר בנושא קידודים נתמכים של אודיו. אפשר להשתמש בכל קצב דגימה.
- המודל משכפל את איכות המיקרופון, כך שאם ההקלטה נשמעת לא ברורה, גם הפלט יישמע לא ברור.
- הקול צריך להיות דינמי וקצת יותר הבעתי ממה שפלט הסופי צריך להישמע. בנוסף, לקול צריך להיות הקצב שרוצים שיהיה לקול המשוכפל. לדוגמה, אם באודיו של ההפניה אין הפסקות או מעברים טבעיים, הקול המשוכפל לא ידע לעשות הפסקות.
- הנחיה טובה היא כזו שמשדרת התלהבות ואנרגיה, ולא משעממת ומונוטונית, כדי שהמודל יקבל רמזים לשכפל את האנרגיה הזו.
יצירת קול מותאם אישית מיידי באמצעות API בארכיטקטורת REST
קול של סלב שנוצר באופן מיידי הוא מפתח לשכפול קול, שהוא ייצוג של נתונים שנאספים בזיהוי קולי כמחרוזת טקסט.
דברים חשובים שכדאי לזכור
ריכזנו כאן כמה דברים חשובים שכדאי לדעת על יצירת קול מותאם אישית:
- אין הגבלה על מספר המפתחות לשכפול קול שאפשר ליצור, כי המפתחות לשכפול קול מאוחסנים בצד הלקוח ומסופקים לכל בקשה.
- כמה לקוחות או מכשירים יכולים להשתמש באותו מפתח לשכפול קול בו-זמנית.
- אפשר ליצור 10 מפתחות שיבוט קול לדקה לכל פרויקט. מידע נוסף זמין במאמר בנושא מגבלת הבקשות.
- אי אפשר להשתמש בסקריפט הסכמה מותאם אישית במקום בסקריפט ברירת המחדל. חובה להשתמש בסקריפט של הצהרת ההסכמה שסופק בשפה שבחרתם.
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}")
סינתזה עם קול מותאם אישית מיידי באמצעות API בארכיטקטורת REST
משתמשים במפתח לשכפול קול כדי לסנתז אודיו באמצעות ה-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}")
סינתזה באמצעות קול מותאם אישית מיידי באמצעות ספריית הלקוח של Python
בדוגמה הזו נעשה שימוש בספריית הלקוח של Python כדי לבצע סינתזה מיידית של קול מותאם אישית, באמצעות מפתח שיבוט קול שנשמר בקובץ voice_cloning_key.txt. במאמר יצירת קול מותאם אישית מיידי באמצעות 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,
)
סינתזה של סטרימינג עם קול מותאם אישית מיידי באמצעות ספריית הלקוח של Python
בדוגמה הזו נעשה שימוש בספריית הלקוח של Python כדי לבצע סינתזה של סטרימינג קולי מותאם אישית באופן מיידי, באמצעות מפתח שיבוט קולי שנשמר ב-voice_cloning_key.txt.
במאמר יצירת קול מותאם אישית מיידי באמצעות 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,
)
שימוש ב-Chirp 3: שליטה קולית באיכות HD
התכונה 'Instant Custom Voice' תומכת באותן תכונות של שליטה בקצב, שליטה בהשהיה והגייה מותאמת אישית שבהן תומכת התכונה 'Chirp 3: קולות באיכות HD'. מידע נוסף על Chirp 3: אמצעי בקרה של קול באיכות HD זמין במאמר בנושא Chirp 3: אמצעי בקרה של קול באיכות HD.
אפשר להפעיל את כל שלוש התכונות האלה כדי ליצור קול מותאם אישית מיידי. כדי לעשות זאת, משנים את ההגדרה SynthesizeSpeechRequest או StreamingSynthesizeConfig באותו אופן שבו משנים את ההגדרה של קול מותאם אישית מיידי.
השפות שבהן אפשר להשתמש בפקודות קוליות
התכונה 'שליטה בקצב הצגת המודעות' זמינה בכל האזורים.
הפעלת ההשהיה זמינה בכל האזורים.
התכונה 'הגדרת הגייה מותאמת אישית' זמינה בכל הלוקאלים, למעט:
bn-IN,gu-IN,th-THו-vi-VN.
הפעלת העברה רב-לשונית
Instant Custom Voice תומך בהעברה רב-לשונית עבור זוגות ספציפיים של לוקאלים. המשמעות היא שאם יש מפתח לשכפול קול שנוצר עם קוד שפה מסוים, כמו en-US, אפשר להשתמש במפתח הזה כדי לבצע סינתזה של שפה בשפה אחרת, כמו es-ES. מפתחות לשכפול קול עם לוקאל en-US יכולים לסנתז פלט בלוקאלים הבאים: de-DE, es-US, es-ES, fr-CA, fr-FR, pt-BR.
בדוגמת הקוד הזו אפשר לראות איך מגדירים את SynthesizeRequest כדי ליצור סינתזה של es-ES באמצעות מפתח שיבוט קול 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,
),
)
דוגמה להגדרת StreamingSynthesizeConfig כדי לבצע סינתזה של es-ES באמצעות מפתח שיבוט קולי של 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,
),
)