Gjenerimi i të folurit (tekst në fjalim)

Gemini API mund të transformojë hyrjen e tekstit në audio me një altoparlant të vetëm ose me shumë altoparlantë duke përdorur aftësitë e gjenerimit të tekstit në të folur (TTS). Gjenerimi i tekstit në të folur (TTS) është i kontrollueshëm , që do të thotë se mund të përdorni gjuhën natyrore për të strukturuar ndërveprimet dhe për të drejtuar stilin , theksin , ritmin dhe tonin e audios.

Aftësia TTS ndryshon nga gjenerimi i të folurit i ofruar përmes Live API , i cili është projektuar për hyrje dhe dalje audio interaktive, të pastrukturuar dhe multimodale. Ndërsa API Live shkëlqen në kontekstet dinamike të bisedës, TTS përmes API-së Gemini është përshtatur për skenarë që kërkojnë recitim të saktë teksti me kontroll të hollësishëm mbi stilin dhe tingullin, si p.sh. gjenerimi i podkasteve ose librave audio.

Ky udhëzues ju tregon se si të gjeneroni audio me një altoparlant dhe me shumë altoparlantë nga teksti.

Para se të filloni

Sigurohuni që të përdorni një variant modeli Gemini 2.5 me aftësi origjinale të tekstit në të folur (TTS), siç është renditur në seksionin Modelet e mbështetura . Për rezultate optimale, merrni parasysh se cili model i përshtatet më mirë rastit tuaj specifik të përdorimit.

Mund t'ju duket e dobishme të provoni modelet Gemini 2.5 TTS në AI Studio përpara se të filloni ndërtimin.

Tekst në fjalim me një folës të vetëm

Për të kthyer tekstin në audio me një altoparlant të vetëm, vendosni modalitetin e përgjigjes në "audio" dhe kaloni një objekt SpeechConfig me grupin VoiceConfig . Do t'ju duhet të zgjidhni një emër zëri nga zërat e parandërtuar në dalje .

Ky shembull ruan audion e daljes nga modeli në një skedar valë:

Python

from google import genai
from google.genai import types
import wave

# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
   with wave.open(filename, "wb") as wf:
      wf.setnchannels(channels)
      wf.setsampwidth(sample_width)
      wf.setframerate(rate)
      wf.writeframes(pcm)

client = genai.Client()

response = client.models.generate_content(
   model="gemini-2.5-flash-preview-tts",
   contents="Say cheerfully: Have a wonderful day!",
   config=types.GenerateContentConfig(
      response_modalities=["AUDIO"],
      speech_config=types.SpeechConfig(
         voice_config=types.VoiceConfig(
            prebuilt_voice_config=types.PrebuiltVoiceConfig(
               voice_name='Kore',
            )
         )
      ),
   )
)

data = response.candidates[0].content.parts[0].inline_data.data

file_name='out.wav'
wave_file(file_name, data) # Saves the file to current directory

JavaScript

import {GoogleGenAI} from '@google/genai';
import wav from 'wav';

async function saveWaveFile(
   filename,
   pcmData,
   channels = 1,
   rate = 24000,
   sampleWidth = 2,
) {
   return new Promise((resolve, reject) => {
      const writer = new wav.FileWriter(filename, {
            channels,
            sampleRate: rate,
            bitDepth: sampleWidth * 8,
      });

      writer.on('finish', resolve);
      writer.on('error', reject);

      writer.write(pcmData);
      writer.end();
   });
}

async function main() {
   const ai = new GoogleGenAI({});

   const response = await ai.models.generateContent({
      model: "gemini-2.5-flash-preview-tts",
      contents: [{ parts: [{ text: 'Say cheerfully: Have a wonderful day!' }] }],
      config: {
            responseModalities: ['AUDIO'],
            speechConfig: {
               voiceConfig: {
                  prebuiltVoiceConfig: { voiceName: 'Kore' },
               },
            },
      },
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   const fileName = 'out.wav';
   await saveWaveFile(fileName, audioBuffer);
}
await main();

PUSHIMI

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "contents": [{
          "parts":[{
            "text": "Say cheerfully: Have a wonderful day!"
          }]
        }],
        "generationConfig": {
          "responseModalities": ["AUDIO"],
          "speechConfig": {
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Kore"
              }
            }
          }
        },
        "model": "gemini-2.5-flash-preview-tts",
    }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
          base64 --decode >out.pcm
# You may need to install ffmpeg.
ffmpeg -f s16le -ar 24000 -ac 1 -i out.pcm out.wav

Tekst në fjalim me shumë altoparlantë

Për audio me shumë altoparlantë, do t'ju duhet një objekt MultiSpeakerVoiceConfig me secilin altoparlant (deri në 2) të konfiguruar si SpeakerVoiceConfig . Do t'ju duhet të përcaktoni çdo speaker me të njëjtët emra të përdorur në kërkesën :

Python

from google import genai
from google.genai import types
import wave

# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
   with wave.open(filename, "wb") as wf:
      wf.setnchannels(channels)
      wf.setsampwidth(sample_width)
      wf.setframerate(rate)
      wf.writeframes(pcm)

client = genai.Client()

prompt = """TTS the following conversation between Joe and Jane:
         Joe: How's it going today Jane?
         Jane: Not too bad, how about you?"""

response = client.models.generate_content(
   model="gemini-2.5-flash-preview-tts",
   contents=prompt,
   config=types.GenerateContentConfig(
      response_modalities=["AUDIO"],
      speech_config=types.SpeechConfig(
         multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
            speaker_voice_configs=[
               types.SpeakerVoiceConfig(
                  speaker='Joe',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Kore',
                     )
                  )
               ),
               types.SpeakerVoiceConfig(
                  speaker='Jane',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Puck',
                     )
                  )
               ),
            ]
         )
      )
   )
)

data = response.candidates[0].content.parts[0].inline_data.data

file_name='out.wav'
wave_file(file_name, data) # Saves the file to current directory

JavaScript

import {GoogleGenAI} from '@google/genai';
import wav from 'wav';

async function saveWaveFile(
   filename,
   pcmData,
   channels = 1,
   rate = 24000,
   sampleWidth = 2,
) {
   return new Promise((resolve, reject) => {
      const writer = new wav.FileWriter(filename, {
            channels,
            sampleRate: rate,
            bitDepth: sampleWidth * 8,
      });

      writer.on('finish', resolve);
      writer.on('error', reject);

      writer.write(pcmData);
      writer.end();
   });
}

async function main() {
   const ai = new GoogleGenAI({});

   const prompt = `TTS the following conversation between Joe and Jane:
         Joe: How's it going today Jane?
         Jane: Not too bad, how about you?`;

   const response = await ai.models.generateContent({
      model: "gemini-2.5-flash-preview-tts",
      contents: [{ parts: [{ text: prompt }] }],
      config: {
            responseModalities: ['AUDIO'],
            speechConfig: {
               multiSpeakerVoiceConfig: {
                  speakerVoiceConfigs: [
                        {
                           speaker: 'Joe',
                           voiceConfig: {
                              prebuiltVoiceConfig: { voiceName: 'Kore' }
                           }
                        },
                        {
                           speaker: 'Jane',
                           voiceConfig: {
                              prebuiltVoiceConfig: { voiceName: 'Puck' }
                           }
                        }
                  ]
               }
            }
      }
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   const fileName = 'out.wav';
   await saveWaveFile(fileName, audioBuffer);
}

await main();

PUSHIMI

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
  "contents": [{
    "parts":[{
      "text": "TTS the following conversation between Joe and Jane:
                Joe: Hows it going today Jane?
                Jane: Not too bad, how about you?"
    }]
  }],
  "generationConfig": {
    "responseModalities": ["AUDIO"],
    "speechConfig": {
      "multiSpeakerVoiceConfig": {
        "speakerVoiceConfigs": [{
            "speaker": "Joe",
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Kore"
              }
            }
          }, {
            "speaker": "Jane",
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Puck"
              }
            }
          }]
      }
    }
  },
  "model": "gemini-2.5-flash-preview-tts",
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
    base64 --decode > out.pcm
# You may need to install ffmpeg.
ffmpeg -f s16le -ar 24000 -ac 1 -i out.pcm out.wav

Kontrollimi i stilit të të folurit me udhëzime

Ju mund të kontrolloni stilin, tonin, theksin dhe ritmin duke përdorur kërkesat e gjuhës natyrore për TTS me një dhe me shumë altoparlantë. Për shembull, në një kërkesë me një altoparlant të vetëm, mund të thoni:

Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"

Në një kërkesë me shumë altoparlantë, jepni modelit emrin e secilit folës dhe transkriptin përkatës. Ju gjithashtu mund të jepni udhëzime për secilin folës individualisht:

Make Speaker1 sound tired and bored, and Speaker2 sound excited and happy:

Speaker1: So... what's on the agenda today?
Speaker2: You're never going to guess!

Provoni të përdorni një opsion zëri që korrespondon me stilin ose emocionin që dëshironi të përcillni, për ta theksuar edhe më shumë. Në kërkesën e mëparshme, për shembull, frymëmarrja e Enceladus -it mund të theksojë "të lodhur" dhe "të mërzitur", ndërsa toni optimist i Puck -ut mund të plotësojë "të emocionuar" dhe "të lumtur".

Gjenerimi i një kërkese për ta kthyer në audio

Modelet TTS nxjerrin vetëm audio, por ju mund të përdorni modele të tjera për të gjeneruar fillimisht një transkript dhe më pas ia kaloni atë transkript modelit TTS për ta lexuar me zë të lartë.

Python

from google import genai
from google.genai import types

client = genai.Client()

transcript = client.models.generate_content(
   model="gemini-2.0-flash",
   contents="""Generate a short transcript around 100 words that reads
            like it was clipped from a podcast by excited herpetologists.
            The hosts names are Dr. Anya and Liam.""").text

response = client.models.generate_content(
   model="gemini-2.5-flash-preview-tts",
   contents=transcript,
   config=types.GenerateContentConfig(
      response_modalities=["AUDIO"],
      speech_config=types.SpeechConfig(
         multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
            speaker_voice_configs=[
               types.SpeakerVoiceConfig(
                  speaker='Dr. Anya',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Kore',
                     )
                  )
               ),
               types.SpeakerVoiceConfig(
                  speaker='Liam',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Puck',
                     )
                  )
               ),
            ]
         )
      )
   )
)

# ...Code to stream or save the output

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {

const transcript = await ai.models.generateContent({
   model: "gemini-2.0-flash",
   contents: "Generate a short transcript around 100 words that reads like it was clipped from a podcast by excited herpetologists. The hosts names are Dr. Anya and Liam.",
   })

const response = await ai.models.generateContent({
   model: "gemini-2.5-flash-preview-tts",
   contents: transcript,
   config: {
      responseModalities: ['AUDIO'],
      speechConfig: {
         multiSpeakerVoiceConfig: {
            speakerVoiceConfigs: [
                   {
                     speaker: "Dr. Anya",
                     voiceConfig: {
                        prebuiltVoiceConfig: {voiceName: "Kore"},
                     }
                  },
                  {
                     speaker: "Liam",
                     voiceConfig: {
                        prebuiltVoiceConfig: {voiceName: "Puck"},
                    }
                  }
                ]
              }
            }
      }
  });
}
// ..JavaScript code for exporting .wav file for output audio

await main();

Opsionet e zërit

Modelet TTS mbështesin 30 opsionet e mëposhtme të zërit në fushën e voice_name :

Zephyr -- Bright Puck -- optimist Charon -- Informative
Kore -- Firma Fenrir -- Eksitim Leda -- Rinor
Orus -- Firma Aoede -- Breezy Callirrhoe -- I qetë
Autonoe -- Bright Enceladus -- Frymëmarrje Iapetus -- I qartë
Umbriel -- I qetë Algieba -- I qetë Despina -- E qetë
Erinome -- E qartë Algenib -- Zhavorr Rasalgethi -- Informative
Laomedeia -- optimist Achernar -- I butë Alnilam -- Firma
Schedar -- Edhe Gacrux -- I pjekur Pulcherrima -- Përpara
Achird -- Miqësore Zubenelgenubi -- I rastësishëm Vindemiatrix -- I butë
Sadachbia -- E gjallë Sadaltager -- I ditur Sulafat -- I ngrohtë

Mund të dëgjoni të gjitha opsionet e zërit në AI Studio .

Gjuhët e mbështetura

Modelet TTS zbulojnë automatikisht gjuhën e hyrjes. Ata mbështesin 24 gjuhët e mëposhtme:

Gjuha Kodi i PKK-47 Gjuha Kodi i PKK-47
Arabisht (Egjiptian) ar-EG gjermanisht (Gjermani) de-DE
Anglisht (SHBA) en-US Spanjisht (SHBA) es-US
Frëngjisht (Francë) fr-FR Hindi (Indi) hi-IN
Indonezisht (Indonezi) id-ID italisht (Itali) it-IT
japoneze (Japoni) ja-JP Koreane (Korea) ko-KR
Portugeze (Brazil) pt-BR Rusisht (Rusi) ru-RU
Hollandisht (Holandë) nl-NL polake (Poloni) pl-PL
Thai (Tajlandë) th-TH turqisht (Turqi) tr-TR
Vietnamisht (Vietnam) vi-VN rumanisht (Rumani) ro-RO
ukrainase (Ukrainë) uk-UA Bengalisht (Bangladesh) bn-BD
anglisht (Indi) Paketa en-IN dhe hi-IN Marathi (Indi) mr-IN
Tamile (Indi) ta-IN telugu (Indi) te-IN

Modelet e mbështetura

Model Altoparlant i vetëm Shumë altoparlantë
Gemini 2.5 Flash Preview TTS ✔️ ✔️
Gemini 2.5 Pro Preview TTS ✔️ ✔️

Kufizimet

  • Modelet TTS mund të marrin vetëm hyrje teksti dhe të gjenerojnë dalje audio.
  • Një seancë TTS ka një kufi të dritares së kontekstit prej 32 mijë shenjash.
  • Rishikoni seksionin e Gjuhëve për mbështetje gjuhësore.

Çfarë është më pas