Chirp 3: Suara Kustom Instan

Coba Suara Kustom Instan di Vertex AI Studio Coba di Colab Lihat notebook di GitHub

Fitur Suara Kustom Instan Chirp 3 memungkinkan Anda membuat model suara yang dipersonalisasi dengan melatih model menggunakan rekaman audio berkualitas tinggi. Suara Kustom Instan dapat menghasilkan suara pribadi dengan cepat, yang kemudian dapat digunakan untuk menyintesis audio menggunakan Cloud Text-to-Speech API, yang mendukung streaming dan teks panjang.

Detail teknis

Bahasa yang tersedia Lihat Bahasa yang tersedia
Ketersediaan region global, us, eu, asia-southeast1, asia-northeast1, europe-west2
Format output yang didukung
  • streaming: LINEAR16 (default), ALAW, MULAW, OGG_OPUS, PCM
  • batch: LINEAR16 (default), ALAW, MULAW, OGG_OPUS, PCM
Format encoding yang didukung LINEAR16, PCM, MP3, M4A
Fitur yang didukung
  • Perintah berbasis teks: Menggunakan tanda baca, jeda, dan ketakfasihan untuk menambahkan alur dan tempo yang natural.
  • Jeda tag: (Eksperimental) Memunculkan jeda sesuai permintaan pada audio hasil sintesis.
  • Kontrol tempo: Menyesuaikan kecepatan audio hasil sintesis dari 0,25x hingga 2x.
  • Kontrol pengucapan: (Eksperimental) Pengucapan kustom kata atau frasa menggunakan encoding fonetik IPA atau X-SAMPA.
  • Transfer bahasa: 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

Bahasa yang tersedia

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 (Britania) 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.

Menggunakan Suara Kustom Instan

Bagian berikut menjelaskan cara menggunakan kapabilitas Chirp 3: Suara Kustom Instan di Text-to-Speech API.

  1. Merekam pernyataan izin: Guna mematuhi pedoman hukum dan etika untuk Suara Kustom Instan, rekam pernyataan izin 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 yang berdurasi 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 referensi di lingkungan yang sama.

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

Ikuti panduan berikut untuk menghasilkan audio referensi dan persetujuan berkualitas tinggi:

  • Audio harus berdurasi sedekat mungkin dengan 10 detik.
  • Audio harus menyertakan jeda dan kecepatan yang natural.
  • Audio harus memiliki tingkat suara bising di latar belakang yang minimal.
  • Untuk mengetahui informasi selengkapnya, lihat Encoding audio yang didukung. Semua frekuensi sampel dapat digunakan.
  • 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 yang natural, suara hasil kloning tidak akan bagus dalam menjeda.
  • Perintah yang baik menggunakan kata-kata yang lebih bersemangat dan penuh energi, alih-alih monoton dan membosankan, sehingga model akan mengambil isyarat untuk mereplikasi energi ini.

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 disediakan sesuai 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 persetujuan kustom sebagai pengganti skrip persetujuan default. Anda harus menggunakan skrip pernyataan persetujuan yang disediakan untuk bahasa pilihan Anda.
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}")

Melakukan sintesis 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}")

Melakukan sintesis 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 tempo, kontrol jeda, dan fitur pengucapan kustom yang sama dengan yang didukung oleh Chirp 3: Kontrol suara HD. Untuk mengetahui informasi selengkapnya tentang Chirp 3: Kontrol suara HD, lihat Chirp 3: Kontrol suara HD.

Ketiga fitur tersebut 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 tempo 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, misalnya 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,
    ),
)