2012-05-01 5 views
7

Ich möchte Audiodatei in arabischer Sprache speichern. Dafür benutze ich den Code wie folgt.
Ich versuche es, aber ich kann nicht in arabischer Sprache speichern. Es speichert nur in englischer Sprache. bitte helfen Sie mir, DankWie kann ich Text in Speech-Datei als .wav/.mp3-Format in arabischer Sprache in External Storage speichern?

package com.t; 

import java.io.File; 
import java.util.HashMap; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Environment; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class TextToSpeechNewActivity extends Activity { 

Button store, play; 
EditText input; 
String speakTextTxt; 
TextToSpeech mTts; 
HashMap<String, String> myHashRender = new HashMap<String, String>(); 
String tempDestFile ; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    store = (Button) findViewById(R.id.button1); 
    play = (Button) findViewById(R.id.button2); 
    input = (EditText) findViewById(R.id.editText1); 
    store.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      speakTextTxt = input.getText().toString(); 
      Log.v("log", ""+input.getText().toString()); 

      myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,speakTextTxt); 

      String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath(); 
      File appTmpPath = new File(exStoragePath + "/pradip"); 
      appTmpPath.mkdirs(); 
      String tempFilename = input.getText().toString()+".wav"; 
      tempDestFile = appTmpPath.getAbsolutePath() + "/"+ tempFilename; 
      new MySpeech(speakTextTxt); 

     } 
    }); 
} 

class MySpeech implements OnInitListener{ 

      String tts; 

    public MySpeech(String tts) 
    { 
     this.tts = tts; 
     mTts = new TextToSpeech(TextToSpeechNewActivity.this, this); 
    } 

    @Override 
    public void onInit(int status) 
    { 
     Log.v("log", "initi"); 
     mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile); 
    } 
    } 
} 
+1

Dies ist ein wenig offensichtlich klingen, aber Sie explizit die Sprache in einem arabischen 'Locale' versucht haben, Einstellung mit [' setLanguage (...) '] (http://developer.android.com/reference /android/speech/tts/TextToSpeech.html#setLanguage%28java.util.Locale%29)? Sie können möglicherweise auch zuerst prüfen, ob das Gebietsschema verfügbar ist, indem Sie den Rückgabewert von ['isLanguageAvailable (...)'] (http://developer.android.com/reference/android/speech/tts/TextToSpeech) überprüfen. html # isLanguageAvailable% 28java.util.Locale% 29) –

+0

danke ... Ich habe Locale loc = new Locale ("es", "MEX"); \t \t mTts.setLanguage (loc); Dies ist für ma- xico und welchen Code für Arabisch von Saudi Arabien? – pradip

+1

Holen Sie sie aus Wikipedia: [ISO 3166-1] (http://en.wikipedia.org/wiki/ISO_3166-1#Official_assigned_code_elements) und [ISO 639-1] (http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). Beachten Sie, dass die [Locale-Dokumente] (http://developer.android.com/reference/java/util/Locale.html) sagen: * "Die Sprachcodes sind zweibuchstabige ISO-Codes in Kleinbuchstaben (z. B." de ") wie in ISO 639-1 definiert. Die Ländercodes sind ** zweibuchstabige ** Großbuchstaben ISO-Ländercodes (wie" US ") gemäß ISO 3166-1." * –

Antwort

0

Aus früheren Bemerkungen:

Dies ist ein wenig offensichtlich klingen, aber haben Sie versucht, explizit die Sprache in einem arabischen Locale mit setLanguage(...) Einstellung? Sie können möglicherweise auch prüfen zunächst, ob die Locale durch Überprüfung des Rückgabewertes von isLanguageAvailable(...)

Und verfügbar:

Bring sie aus Wikipedia: ISO 3166-1 und ISO 639-1. Beachten Sie, dass die Locale docs sagen: "Die Sprachencodes sind zweibuchstabige Kleinbuchstaben ISO-Codes (wie" en ") wie in ISO 639-1 definiert. Die Ländercodes sind zweibuchstabige Großbuchstaben ISO Ländercodes (z als "US"), wie in ISO 3166-1 definiert. "