# Text-to-Speech (TTS) और Speech-to-Text (STT) का उपयोग कैसे करें

> किसी पाठ को ज़ोर से बोलें और उपयोगकर्ता की वाणी को पाठ में लिप्यंतरित करें, locale/गति की कॉन्फ़िगरेशन के साथ।

Source: https://crossfly.dev/hi/docs/cookbook/device/tts-stt — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Text-to-Speech (TTS) और Speech-to-Text (STT) का उपयोग कैसे करें

**उद्देश्य।** डिवाइस से किसी पाठ को **बुलवाना** (TTS) और उपयोगकर्ता की वाणी को पाठ में
**लिप्यंतरित** करना (STT)। समर्थन: Android और iOS।

## उपयोग की गई APIs
- `Device.textToVoice(String text)` — `text` को वाणी के रूप में संश्लेषित करके चलाता है। **वही स्ट्रिंग** अल्पविराम से अलग किए गए `chave:valor` युग्मों के माध्यम से इंजन को **कॉन्फ़िगर करने के लिए भी काम आती है**।
  - `locale:por_BRA` — भाषा कोड (उदा.: `por_BRA`, `eng_USA_f00`)।
  - `speech:0.75` — गति गुणक (`1.0` = सामान्य, `0.5` = धीमा, `2.0` = तेज़)।
  - `languages` — logcat में उपलब्ध भाषाओं की सूची देता है (डिबग)। `quit` — TTS इंजन बंद कर देता है।
- `Device.voiceToText(VoiceToTextListener listener)` — वाणी की पहचान शुरू करता है; परिणाम कॉलबैक के माध्यम से आते हैं।
- `Device.VoiceToTextListener` — `onStart()`, `onFinish()`, `onResult(String text)`, `onError(int code, String msg)`।
- `Device.soundToSpeechTimeout` (स्थैतिक, ms, डिफ़ॉल्ट `5000`) — पहचान का टाइमआउट।

> **हाँ, `textToVoice` कॉन्फ़िगरेशन स्ट्रिंग स्वीकार करता है।** पहला कॉल
> `locale`/`speech` को कॉन्फ़िगर कर सकता है (उदा.: `"locale:por_BRA,speech:0.75"`); सामान्य पाठ वाले अगले कॉल
> सामग्री बोलते हैं। `voiceToText` के कॉलबैक **paint thread के बाहर** आते हैं → UI अपडेट करते समय `Component.onUI(...)`
> का उपयोग करें। Android पर पहली बार चलाने में HD भाषा पैकेज
> इंस्टॉल करने के लिए कहा जा सकता है।

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)

```java
package com.exemplo;

import dev.crossfly.ui.*;                   // Window, Component, Button, Label
import dev.crossfly.ui.layout.*;            // VerticalLayout
import dev.crossfly.device.*;               // Device, Device.VoiceToTextListener

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label resultado = new Label("");
      add(LAY_AUTO, resultado);

      Button falar = new Button("Falar (TTS)");
      falar.onAction(c ->
      {
         // TTS — भाषा/गति कॉन्फ़िगर करें और फिर बोलें
         Device.textToVoice("locale:por_BRA,speech:0.9");     // कॉन्फ़िगरेशन (वैकल्पिक, पहली बार)
         Device.textToVoice("Olá! Bem-vindo ao aplicativo.");  // टेक्स्ट बोलता है
         resultado.setText("Falando...");
      });
      add(LAY_AUTO, falar);

      Button ouvir = new Button("Transcrever (STT)");
      ouvir.onAction(c ->
      {
         // STT — उपयोगकर्ता के भाषण को ट्रांसक्राइब करें (callbacks paint thread के बाहर)
         Device.voiceToText(new Device.VoiceToTextListener()
         {
            public void onStart()  { Component.onUI(() -> resultado.setText("Ouvindo...")); }
            public void onFinish() { Component.onUI(() -> resultado.setText("Pronto")); }
            public void onResult(String text)
            {
               Component.onUI(() -> resultado.setText("Reconhecido: " + text));
            }
            public void onError(int code, String msg)
            {
               Component.onUI(() -> resultado.setText("Erro: " + msg));
            }
         });
      });
      add(LAY_AUTO, ouvir);
   }
}
```

> नीचे दिया गया अंश **केवल मुख्य भाग** दिखाता है। चलाने के लिए, इसे ऊपर दिए गए `MainWindow` ढांचे में रखें।

## न्यूनतम अंश

```java
// स्रोत में सत्यापित: Device.java (textToVoice पंक्ति 387, voiceToText पंक्ति 340, VoiceToTextListener पंक्ति 397)
import dev.crossfly.device.*;              // Device, Device.VoiceToTextListener
import dev.crossfly.ui.*;                  // Component (onUI)

// 1) TTS — भाषा/गति कॉन्फ़िगर करें और फिर बोलें
Device.textToVoice("locale:por_BRA,speech:0.9");   // कॉन्फ़िगरेशन (वैकल्पिक, पहली बार)
Device.textToVoice("Olá! Bem-vindo ao aplicativo."); // टेक्स्ट बोलता है

// 2) STT — उपयोगकर्ता के भाषण को ट्रांसक्राइब करें (callbacks paint thread के बाहर)
Device.voiceToText(new Device.VoiceToTextListener() {
   public void onStart()  { Component.onUI(() -> mostrarStatus("Ouvindo...")); }
   public void onFinish() { Component.onUI(() -> mostrarStatus("Pronto")); }
   public void onResult(String text) {
      Component.onUI(() -> preencherCampo(text));   // पहचाना गया टेक्स्ट
   }
   public void onError(int code, String msg) {
      Component.onUI(() -> mostrarErro(msg));
   }
});
```

## और गहराई से जानें
- ध्वनि और विविध गाइड: [ध्वनि और विविध](/docs/data-and-services/device-sound-and-misc)
- संबंधित रेसिपी: [vibrar-beep-clipboard.md](/docs/cookbook/device/vibrar-beep-clipboard)
