Class: Gemini::TTS
- Inherits:
-
Object
- Object
- Gemini::TTS
- Defined in:
- lib/gemini/tts.rb
Constant Summary collapse
- DEFAULT_MODEL =
"gemini-2.5-flash-preview-tts".freeze
- VOICES =
30 prebuilt voice names available for the prebuiltVoiceConfig
%w[ Zephyr Puck Charon Kore Fenrir Leda Orus Aoede Callirrhoe Autonoe Enceladus Iapetus Umbriel Algieba Despina Erinome Algenib Rasalgethi Laomedeia Achernar Alnilam Schedar Gacrux Pulcherrima Achird Zubenelgenubi Vindemiatrix Sadachbia Sadaltager Sulafat ].freeze
Instance Method Summary collapse
-
#generate(text, voice: nil, multi_speaker: nil, model: DEFAULT_MODEL, speech_config: nil, **parameters) ⇒ Object
Generate speech audio from text.
-
#initialize(client:) ⇒ TTS
constructor
A new instance of TTS.
Constructor Details
#initialize(client:) ⇒ TTS
Returns a new instance of TTS.
13 14 15 |
# File 'lib/gemini/tts.rb', line 13 def initialize(client:) @client = client end |
Instance Method Details
#generate(text, voice: nil, multi_speaker: nil, model: DEFAULT_MODEL, speech_config: nil, **parameters) ⇒ Object
Generate speech audio from text.
text: prompt String (use style cues / bracket tags like [excited] for control,
or "Speaker 1: ... Speaker 2: ..." for multi-speaker).
voice: a single voice name (prebuiltVoiceConfig). Mutually exclusive with multi_speaker. multi_speaker: Array of { speaker:, voice: } Hashes for multi-speaker output. model: TTS preview model name. Defaults to gemini-2.5-flash-preview-tts. speech_config: raw speechConfig Hash override (skips voice/multi_speaker handling).
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/gemini/tts.rb', line 25 def generate(text, voice: nil, multi_speaker: nil, model: DEFAULT_MODEL, speech_config: nil, **parameters) raise ArgumentError, "text is required" if text.nil? || text.to_s.empty? if voice && multi_speaker raise ArgumentError, "voice and multi_speaker are mutually exclusive" end resolved_speech_config = speech_config || build_speech_config(voice: voice, multi_speaker: multi_speaker) raise ArgumentError, "voice, multi_speaker, or speech_config is required" unless resolved_speech_config payload = { contents: [{ parts: [{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: resolved_speech_config } } payload.merge!(parameters) if parameters && !parameters.empty? response = @client.json_post( path: "models/#{normalize_model(model)}:generateContent", parameters: payload ) Gemini::Response.new(response) end |