มันเป็นโครงการที่แปลงข้อความเป็นเสียงโดยใช้คลาส texttospeech ที่จัดทำโดย Google
มันเป็น TextToSpeech(Context context, TextToSpeech.OnInitListener listener) ตัวสร้าง มีตัวสร้างที่สามารถตั้งค่าเครื่องยนต์ TTS ได้ แต่ฉันตัดสินใจที่จะละเว้น
InitListener จะอธิบายไว้ด้านล่าง
private TextToSpeech textToSpeech;
@Override
protected void onCreate(Bundle savedInstanceState) {
textToSpeech = new TextToSpeech(this, initListener);
}
//음성 재생 상태에 대한 callback을 받을 수 있는 추상 클래스
private UtteranceProgressListener progressListener = new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) { // 음성이 재생되었을 때
}
@Override
public void onDone(String utteranceId) { // 제공된 텍스트를 모두 음성으로 재생한 경우
}
@Override
public void onError(String utteranceId) { // ERROR!
}
};
textToSpeech.setOnUtteranceProgressListener(progressListener);
เมธอด setLanguage() ด้านล่างสามารถตั้งค่าภาษาพูดได้ คุณสามารถเลือกเสียงที่ต้องการตามสถานการณ์เช่น locale.english, locale.canada
//음성 관련 초기화 상태에 대한 callback을 받을 수 있는 인터페이스
private TextToSpeech.OnInitListener initListener = new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR)
textToSpeech.setLanguage(Locale.KOREAN); // 한글로 설정
}
};
ก่อนที่จะอธิบาย 'SutthanceId' หมายถึงค่า ID สำหรับเสียงที่กำลังเล่นอยู่ ดูเหมือนว่าจะมีประโยชน์เมื่อควบคุมเสียงหลายเสียง
วิธี speak(String text, int queueMode, HashMap<String, String> params) ได้รับการเลิกจ้างจาก API ระดับ 21 ดังนั้นสอดคล้องกับระดับ API ให้ใช้วิธี speak(CharSequence text, int queueMode, Bundle params, String utteranceId) ใหม่
String text = editText.getText.toString();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
String myUtteranceID = "myUtteranceID";
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, myUtteranceID);
}
else {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "myUtteranceID");
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, hashMap);
}
เพียงใช้วิธีการเช่น textToSpeech.stop() สำหรับการหยุดเสียงที่กำลังเล่นอยู่
texttospeech เริ่มต้นทันทีผ่านเครื่องมือพูดต้องถูกยกเลิกอย่างสมบูรณ์ผ่าน textToSpeech.shutDown() หรือ SeviceConnection ... ฉันมีข้อยกเว้น
อดีต. ในกรณีของกิจกรรมดังที่แสดงด้านล่างคุณสามารถโทร shutDown() เพื่อให้ตรงกับวงจรชีวิต
@Override
protected void onDestroy() {
if(textToSpeech != null)
textToSpeech.shutDown();
super.onDestroy();
}
โครงการสร้างคลาส TTS และทำให้ใช้งานง่ายขึ้น หลังจากนั้นโครงการจะถูกเพิ่มเข้าไปในโครงการ
