1

テキスト読み上げアプリケーションを開発しています。すべてのコードは、Android 4.0 アイス クリーム サンドイッチ以降で正常に動作します。しかし、Android 2.3 ジンジャーブレッドでは、エラーなしで音声が来ません。エミュレーターでは音声が聞こえますが、電話では聞こえません。2 つのハンドセットでアプリを確認しました。

  1. Xperia x10と
  2. ジンジャーブレッドを持つギャラクシーポップミニ。

これが私のコードです:

import java.util.Locale;
import android.view.ViewGroup;
import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class TTS extends Activity implements OnInitListener{

    Context context;
    private TextToSpeech tts;
    private ImageButton playTTS,stopTTS,clearTTS;
    private EditText textTTS;
    private Spinner selectVoices;
    public static int spinnerPos;
    private String spinnerList[] = {"...Select Voices..."," Voice 1"," Voice 2"," Voice 3"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tts);

        tts = new TextToSpeech(this, this);

        selectVoices = (Spinner) findViewById(R.id.spinner);

        playTTS = (ImageButton) findViewById(R.id.b_playTTS);
        stopTTS = (ImageButton) findViewById(R.id.b_stopTTS);
        clearTTS = (ImageButton) findViewById(R.id.b_clearTTS);

        textTTS = (EditText) findViewById(R.id.et_entertext);

        Typeface  mFace = Typeface.createFromAsset(this.getAssets(),"mvboli.ttf");
        textTTS.setTypeface(mFace);

        ArrayAdapter<String> aa = new ArrayAdapter<String>(TTS.this, R.layout.spinnerlayout, spinnerList){

            public View getView(int position, View convertView, ViewGroup parent) {
                    View v = super.getView(position, convertView, parent);

                    Typeface externalFont=Typeface.createFromAsset(getAssets(), "mvboli.ttf");
                    ((TextView) v).setTypeface(externalFont);

                    return v;
            }


            public View getDropDownView(int position,  View convertView,  ViewGroup parent) {
                     View v =super.getDropDownView(position, convertView, parent);

                    Typeface externalFont=Typeface.createFromAsset(getAssets(), "mvboli.ttf");
                    ((TextView) v).setTypeface(externalFont);

                    return v;
            }
    };
        selectVoices.setAdapter(aa);

        // spinner on item click event
        selectVoices.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub
                spinnerPos = position;
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

        // button on click event
        playTTS.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                switch (spinnerPos) {
                case 0:
                    Toast.makeText(getBaseContext(), "please choose a voice type !", Toast.LENGTH_SHORT).show();
                    break;

                case 1:
                    tts.setPitch(1.0f);
                    speakOut();
                    Log.d("TextToSpeech","in the onclick1");
                    break;

                case 2:
                    tts.setPitch(0.2f);
                    speakOut();
                    Log.d("TextToSpeech","in the onclick2");
                    break;

                case 3:
                    //pitch = 0.2f;
                    tts.setPitch(2.0f);
                    speakOut();
                    Log.d("TextToSpeech","in the onclick3");
                    break;

                default:
                    break;
                }
            }

        });

        // clear button click event
        stopTTS.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                tts.stop();

            }
        });

        // back button click event
        clearTTS.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                textTTS.setText("");            }
        });
    }

    @Override
    public void onDestroy() {
        // Don't forget to shutdown tts!
        if (tts != null) {
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }


    private void speakOut() {

        String text = textTTS.getText().toString();
        Log.d("TextToSpeech","in the spkout");

        tts.speak(text,tts.QUEUE_FLUSH,null);
    }

    @Override
    public void onInit(int status) {
        // TODO Auto-generated method stub
        if (status == TextToSpeech.SUCCESS) {

            int result = tts.setLanguage(Locale.getDefault());

            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "This Language is not supported");
            } 
            else{
                if (tts.isLanguageAvailable(Locale.getDefault()) == TextToSpeech.LANG_AVAILABLE || tts.isLanguageAvailable(Locale.getDefault()) == TextToSpeech.LANG_COUNTRY_AVAILABLE)
                    tts.setLanguage(Locale.getDefault());
            }

        } else {
            Log.e("TTS", "Initilization Failed!");
        }
    }



}

助けてください。

4

1 に答える 1