2011-12-19 21 views
6

Ho sviluppato le mie app TTS in Android. Esiste un modo per distribuire il mio motore TTS nel sistema operativo invece di eseguire le app TTS, in modo che altre app possano chiamare il mio TTS? Qualcosa come SAPI in MS Window. SVOX può impacchettare il motore come apk e dopo l'installazione aggiunge nuovi motori al sistema operativo Andorid, non so come posso fare lo stesso.aggiungi il mio motore TTS a Android TTS Serivce come SAPI

risposta

4

Per visualizzare il motore di sintesi vocale nell'elenco dei servizi disponibili, è necessario aggiungere le attività appropriate e le voci manifest.

Per API 14 e sopra, è necessario estendere TextToSpeechService e avete bisogno di aggiungere quanto segue al vostro manifesto:

<service 
     android:name=".MyTextToSpeechService" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.TTS_SERVICE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.speech.tts" 
      android:resource="@xml/tts_engine" /> 
    </service> 

Questa riferimenti res/xml/tts_engine.xml, che dovrebbe assomigliare a questo:

<?xml version="1.0" encoding="utf-8"?> 
<tts-engine xmlns:android="http://schemas.android.com/apk/res/android" 
    android:settingsActivity="com.example.MyTtsSettingsActivity" /> 

Avrete anche bisogno di aggiungere una varietà di attività di supporto. Ecco quello che verrà aggiunta al vostro manifesto:

<activity 
     android:name=".DownloadVoiceData" 
     android:theme="@android:style/Theme.Dialog" > 
     <intent-filter> 
      <action android:name="android.speech.tts.engine.INSTALL_TTS_DATA" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".CheckVoiceData" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.speech.tts.engine.CHECK_TTS_DATA" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".GetSampleText" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.speech.tts.engine.GET_SAMPLE_TEXT" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".TtsSettingsActivity" 
     android:label="@string/tts_settings_label" > 
     <intent-filter> 
      <action android:name="android.speech.tts.engine.CONFIGURE_ENGINE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

    <!-- Legacy code for pre-ICS compatibility. --> 
    <activity 
     android:name=".MyTtsEngine" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.START_TTS_ENGINE" /> 
     </intent-filter> 
    </activity> 

    <provider 
     android:name="com.googlecode.eyesfree.espeak.providers.SettingsProvider" 
     android:authorities="com.googlecode.eyesfree.espeak.providers.SettingsProvider" /> 

Se avete in programma di supportare le versioni pre-ICS di Android, avrete anche bisogno di una libreria condivisa che è conforme ad una specifica API.

Non voglio entrare nei dettagli della realizzazione di ogni attività qui, o nel API pre-ICS, ma si possono trovare esempi di codice sorgente per il porto di Android motore Espeak TTS: http://code.google.com/p/eyes-free/source/browse/trunk/tts/espeak-tts/

Problemi correlati