Browse Source

Fix updating the number of installed voices after installing them within the activity.

master
Reece H. Dunn 11 years ago
parent
commit
8f82baa646

+ 6
- 0
android/src/com/reecedunn/espeak/SpeechSynthesis.java View File

private final String mDatapath; private final String mDatapath;


private boolean mInitialized = false; private boolean mInitialized = false;
private static int mVoiceCount = 0;


public SpeechSynthesis(Context context, SynthReadyCallback callback) { public SpeechSynthesis(Context context, SynthReadyCallback callback) {
// First, ensure the data directory exists, otherwise init will crash. // First, ensure the data directory exists, otherwise init will crash.
return nativeGetVersion(); return nativeGetVersion();
} }


public static int getVoiceCount() {
return mVoiceCount;
}

public int getSampleRate() { public int getSampleRate() {
return nativeGetSampleRate(); return nativeGetSampleRate();
} }
public List<Voice> getAvailableVoices() { public List<Voice> getAvailableVoices() {
final List<Voice> voices = new LinkedList<Voice>(); final List<Voice> voices = new LinkedList<Voice>();
final String[] results = nativeGetAvailableVoices(); final String[] results = nativeGetAvailableVoices();
mVoiceCount = results.length / 4;


for (int i = 0; i < results.length; i += 4) { for (int i = 0; i < results.length; i += 4) {
final String name = results[i]; final String name = results[i];

+ 5
- 0
android/src/com/reecedunn/espeak/TtsService.java View File

*/ */
@SuppressLint("NewApi") @SuppressLint("NewApi")
public class TtsService extends TextToSpeechService { public class TtsService extends TextToSpeechService {
public static final String ESPEAK_INITIALIZED = "com.reecedunn.espeak.ESPEAK_INITIALIZED";

private static final String TAG = TtsService.class.getSimpleName(); private static final String TAG = TtsService.class.getSimpleName();
private static final boolean DEBUG = false; private static final boolean DEBUG = false;




mEngine = new SpeechSynthesis(this, mSynthCallback); mEngine = new SpeechSynthesis(this, mSynthCallback);
mAvailableVoices = mEngine.getAvailableVoices(); mAvailableVoices = mEngine.getAvailableVoices();

final Intent intent = new Intent(ESPEAK_INITIALIZED);
sendBroadcast(intent);
} }


@Override @Override

+ 16
- 9
android/src/com/reecedunn/espeak/eSpeakActivity.java View File

package com.reecedunn.espeak; package com.reecedunn.espeak;


import android.app.Activity; import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
} }


private State mState; private State mState;
private ArrayList<String> mVoices;
private TextToSpeech mTts; private TextToSpeech mTts;
private List<Pair<String,String>> mInformation; private List<Pair<String,String>> mInformation;
private InformationListAdapter mInformationView; private InformationListAdapter mInformationView;
private EditText mText; private EditText mText;


private final BroadcastReceiver mOnEspeakInitialized = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
populateInformationView();
}
};

@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
((ListView)findViewById(R.id.properties)).setAdapter(mInformationView); ((ListView)findViewById(R.id.properties)).setAdapter(mInformationView);
mText = (EditText)findViewById(R.id.editText1); mText = (EditText)findViewById(R.id.editText1);


final IntentFilter filter = new IntentFilter(TtsService.ESPEAK_INITIALIZED);
registerReceiver(mOnEspeakInitialized, filter);

setState(State.LOADING); setState(State.LOADING);
checkVoiceData(); checkVoiceData();


public void onStop() { public void onStop() {
super.onStop(); super.onStop();


unregisterReceiver(mOnEspeakInitialized);

if (mTts != null) { if (mTts != null) {
mTts.shutdown(); mTts.shutdown();
} }
} }


final String availableVoices = getString(R.string.available_voices); final String availableVoices = getString(R.string.available_voices);
if (mVoices == null) {
mInformation.add(new Pair<String,String>(availableVoices, "0"));
} else {
mInformation.add(new Pair<String,String>(availableVoices, Integer.toString(mVoices.size())));
}
mInformation.add(new Pair<String,String>(availableVoices, Integer.toString(SpeechSynthesis.getVoiceCount())));


final String version = getString(R.string.tts_version); final String version = getString(R.string.tts_version);
mInformation.add(new Pair<String,String>(version, SpeechSynthesis.getVersion())); mInformation.add(new Pair<String,String>(version, SpeechSynthesis.getVersion()));
if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
Log.e(TAG, "Voice data check failed (error code: " + resultCode + ")."); Log.e(TAG, "Voice data check failed (error code: " + resultCode + ").");
setState(State.ERROR); setState(State.ERROR);
} else {
mVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
} }


initializeEngine(); initializeEngine();
populateInformationView();
} }


/** /**

Loading…
Cancel
Save