Как приостановить сеанс Nuance - PullRequest
0 голосов
/ 08 марта 2019

Я работаю над приложением, которое использует Nuance tts sdk.

В основном упражнении мое приложение будет воспроизводить аудиофайл, вызывая метод синтеза в другом классе. Когда пользователь покидает основное занятие, я хочу остановить сеанс (звук), но не могу понять, как это сделать

Из моей основной деятельности я вызываю метод в классе

            illustrate.startSynthesize();

мой класс, который реализует SDK:

 package com.example.illuminate_me;

    import android.content.Context;

import com.nuance.speechkit.Audio;
import com.nuance.speechkit.AudioPlayer;
import com.nuance.speechkit.Language;
import com.nuance.speechkit.Session;
import com.nuance.speechkit.Transaction;
import com.nuance.speechkit.TransactionException;
import com.nuance.speechkit.Voice;

public class Illustrate implements  AudioPlayer.Listener{
    private Session speechSession;
    private Transaction ttsTransaction;
    private Illustrate.State state = Illustrate.State.IDLE;
    private String voice ="Tarik";
    private Context context;
    private String text;


    public Illustrate(String tts, Context context) {
    this.context=context;
    this.text=tts;

        //Create a session
        speechSession = Session.Factory.session(context, Configuration.SERVER_URI, Configuration.APP_KEY);
        speechSession.getAudioPlayer().setListener(this);

        setState(Illustrate.State.IDLE);
      //  startSynthesize();
    }

    public void startSynthesize() {
       toggleTTS();
    }


    private void toggleTTS() {
        switch (state) {
            case IDLE:
                if(ttsTransaction == null) {
                    synthesize();
                }
                //Otherwise lets attempt to cancel that transaction
                else {
                    cancel();
                }
                break;
            case PLAYING:
                speechSession.getAudioPlayer().pause();
                setState(Illustrate.State.PAUSED);
                break;
            case PAUSED:
                speechSession.getAudioPlayer().play();
                setState(Illustrate.State.PLAYING);
                break;
        }
    }

    public void synthesize() {
        //Setup our TTS transaction options.
        Transaction.Options options = new Transaction.Options();
        options.setLanguage(new Language(Configuration.LANGUAGE));

        options.setVoice(new Voice(voice)); 
        ttsTransaction = speechSession.speakString(text, options, new Transaction.Listener() {
            @Override
            public void onAudio(Transaction transaction, Audio audio) {

                ttsTransaction = null;
            }

            @Override
            public void onSuccess(Transaction transaction, String s) {

            }

            @Override
            public void onError(Transaction transaction, String s, TransactionException e) {

                ttsTransaction = null;
            }
        });
    }


    /**
     * Cancel the TTS transaction.
     * This will only cancel if we have not received the audio from the server yet.
     */
    private void cancel() {
        ttsTransaction.cancel();
    }

    @Override
    public void onBeginPlaying(AudioPlayer audioPlayer, Audio audio) {

        setState(Illustrate.State.PLAYING);
    }

    @Override
    public void onFinishedPlaying(AudioPlayer audioPlayer, Audio audio) {    
        setState(Illustrate.State.IDLE);
    }




    private enum State {
        IDLE,
        PLAYING,
        PAUSED
    }

    /**
     * Set the state and update the button text.
     */
    private void setState(Illustrate.State newState) {
        state = newState;
        switch (newState) {
            case IDLE:
                // Next possible action is speaking
                break;
            case PLAYING:
                // Next possible action is pausing
                break;
            case PAUSED:
                // Next possible action is resuming the speech
                // toggleTTS.setText(getResources().getString(R.string.speak_string));
                break;
        }
    }  
}

Любая помощь очень ценится. Это документация, если кто-то хочет взглянуть на это Речевой синтез (TTS)

...