Search code examples
androidspeech

Japanese text to speech Android?


I am programming an app which can speech to text in Japanese. However, when I code, I know that Android doesn't support Japanese language. I try to use SVOX. However, it isn't the best solution? Can you help me to solve my problem? Thanks you.

Here is my code after @ErsinGülbahar help :)

package com.example.tts;

import java.io.IOException;
import java.util.Locale;

import org.apache.http.util.LangUtils;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends Activity implements
        TextToSpeech.OnInitListener {
    /** Called when the activity is first created. */
    MediaPlayer mediaPlayer;
    Thread x;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        x = new Thread() {
            public void run() {
                try {
                    String url1 = "http://www.translate.google.com/translate_tts?ie=UTF-8&q="
                            + "Hello".replace(' ', '+').replace('\n', '.')
                            + "%0A&tl=" + "ja" + "&prev=input";
                    String url2 = "http://www.translate.google.com/translate_tts?ie=UTF-8&q=nihongo%0A&tl=ja&prev=input";
                    mediaPlayer = new MediaPlayer();
                    mediaPlayer.reset();
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mediaPlayer.setDataSource(url2);
                    mediaPlayer.prepare(); // might take long! (for buffering,
                                            // etc)
                    mediaPlayer.start();
                } catch (IllegalArgumentException e) {
                    mediaPlayer.reset();
                } catch (IllegalStateException e) {
                    mediaPlayer.reset();
                } catch (IOException e) {
                    mediaPlayer.reset();
                }

                finally {
                }
            }

        };
        ImageButton ibm = (ImageButton) findViewById(R.id.imageButton1);
        ibm.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "Callme", 4).show();
                x.run();
            }
        });

    }

    @Override
    public void onInit(int arg0) {
        // TODO Auto-generated method stub
    }
}

Solution

  • you can define a thread:

    Thread x=new Thread(){  public void run(){
             try{
                 url1="http://www.translate.google.com/translate_tts?ie=UTF-8&q="+word_which_read.replace(' ','+' ).replace('\n','.' )+"%0A&tl="+language+"&prev=input";
    
    
                mediaPlayer=new MediaPlayer();
                mediaPlayer.reset();
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mediaPlayer.setDataSource(url1);
                mediaPlayer.prepare(); // might take long! (for buffering, etc)
                mediaPlayer.start();
                        } catch (IllegalArgumentException e) {
                            mediaPlayer.reset();
                        } catch (IllegalStateException e) {
                            mediaPlayer.reset();
                        } catch (IOException e) {
                            mediaPlayer.reset();
                        } 
    
    
                finally{ 
                //  x.suspend();
                } 
         }
    
        };  
    

    You can call x.run(); In the url you should set language as ja this is japanese. and you should set *word_which_read* as your word