Chirp 3: Suara kustom instan

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.

  1. 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.)

  2. 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.

  3. Menyimpan file audio: Simpan file audio yang direkam di lokasi Cloud Storage yang ditentukan.

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:

  • LINEAR16
  • PCM
  • MP3
  • M4A

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, dan vi-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-US dapat menyintesis output dalam lokalitas berikut:

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