ข้อความ flutter to Speech Plugin (Swift, Kotlin)
OSX version: 10.15ตัวอย่างแอพจากสาขา macos_app
เว็บไซต์จากไดเรกทอรีตัวอย่าง
การอัปเดตความคืบหน้าบนเว็บ
การอัปเดตความคืบหน้าได้รับการสนับสนุนเฉพาะสำหรับคำพูดดั้งเดิม synsthesis ใช้เอ็นจิ้นเริ่มต้นเพื่อให้แน่ใจว่ารองรับการอัปเดตความคืบหน้า โครเมียม#41195426
เปลี่ยนเวอร์ชัน Android SDK ขั้นต่ำเป็น 21 (หรือสูงกว่า) ในไฟล์ android/app/build.gradle ของคุณ
minSdkVersion 21อัปเดตเวอร์ชันปลั๊กอิน Kotlin Gradle
เปลี่ยนความถูกต้องของปลั๊กอิน Kotlin Gradle เป็น 1.9.10
หากโครงการของคุณถูกสร้างขึ้นด้วยรุ่นของ Flutter ก่อน 3.19 ให้ไปที่ไฟล์ android/build.gradle และอัปเดต ext.kotlin_version :
ext . kotlin_version = ' 1.9.10 ' มิฉะนั้นไปที่ android/settings.gradle และอัปเดต verion ของปลั๊กอิน org.jetbrains.kotlin.android :
id " org.jetbrains.kotlin.android " version " 1.9.10 " apply false แอพที่กำหนดเป้าหมาย Android 11 ที่ใช้ข้อความเป็นคำพูดควรประกาศ TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE ในองค์ประกอบ queries ของรายการของพวกเขา
< queries >
< intent >
< action android : name = " android.intent.action.TTS_SERVICE " />
</ intent >
</ queries > Android TTS ไม่รองรับฟังก์ชั่นหยุดชั่วคราวโดยธรรมชาติดังนั้นเราจึงได้ดำเนินการแก้ไข เราใช้วิธีการดั้งเดิม onRangeStart() เพื่อกำหนดดัชนีของการเริ่มต้นเมื่อเรียก pause ชั่วคราว เราใช้ดัชนีนั้นเพื่อสร้างข้อความใหม่ในครั้งต่อไป speak จะถูกเรียกใช้ เนื่องจากการใช้ onRangeStart() หยุดทำงานชั่วคราวกับเวอร์ชัน SDK> = 26 นอกจากนี้หากใช้ start และ end การชดเชยภายใน setProgressHandler() คุณจะต้องติดตามพวกเขาหากใช้ pause เนื่องจากจะอัปเดตเมื่อ speak ใหม่ถูกสร้างขึ้น
await flutterTts. pause ()มีปัญหาที่ทราบกันดีเกี่ยวกับการรวมปลั๊กอินที่ใช้ Swift ลงในโครงการ Flutter ที่สร้างขึ้นด้วยเทมเพลต Objective-C Flutter#16049
ตัวอย่าง
เพื่อใช้ปลั๊กอินนี้:
dependencies :
flutter :
sdk : flutter
flutter_tts : FlutterTts flutterTts = FlutterTts ();
ในการตั้งค่าอินสแตนซ์เสียงที่ใช้ร่วมกัน (iOS เท่านั้น):
await flutterTts. setSharedInstance ( true );ในการตั้งค่าหมวดหมู่เสียงและตัวเลือกด้วยโหมดเสริม (iOS เท่านั้น) การตั้งค่าต่อไปนี้ช่วยให้เพลงพื้นหลังและเซสชันเสียงในแอปสามารถดำเนินการต่อไปพร้อมกัน:
await flutterTts. setIosAudioCategory ( IosTextToSpeechAudioCategory .ambient,
[
IosTextToSpeechAudioCategoryOptions .allowBluetooth,
IosTextToSpeechAudioCategoryOptions .allowBluetoothA2DP,
IosTextToSpeechAudioCategoryOptions .mixWithOthers
],
IosTextToSpeechAudioMode .voicePrompt
);เพื่อรอการพูดเสร็จ
await flutterTts. awaitSpeakCompletion ( true );เพื่อรอการสังเคราะห์เพื่อให้ไฟล์เสร็จสมบูรณ์
await flutterTts. awaitSynthCompletion ( true ); Future _speak () async {
var result = await flutterTts. speak ( "Hello World" );
if (result == 1 ) setState (() => ttsState = TtsState .playing);
}
Future _stop () async {
var result = await flutterTts. stop ();
if (result == 1 ) setState (() => ttsState = TtsState .stopped);
}
List < dynamic > languages = await flutterTts.getLanguages;
await flutterTts. setLanguage ( "en-US" );
await flutterTts. setSpeechRate ( 1.0 );
await flutterTts. setVolume ( 1.0 );
await flutterTts. setPitch ( 1.0 );
await flutterTts. isLanguageAvailable ( "en-US" );
// iOS, Android and Web only
//see the "Pausing on Android" section for more info
await flutterTts. pause ();
// iOS, macOS, and Android only
// The last parameter is an optional boolean value for isFullPath (defaults to false)
await flutterTts. synthesizeToFile ( "Hello World" , Platform .isAndroid ? "tts.wav" : "tts.caf" , false );
// Each voice is a Map containing at least these keys: name, locale
// - Windows (UWP voices) only: gender, identifier
// - iOS, macOS only: quality, gender, identifier
// - Android only: quality, latency, network_required, features
List < Map > voices = await flutterTts.getVoices;
await flutterTts. setVoice ({ "name" : "Karen" , "locale" : "en-AU" });
// iOS, macOS only
await flutterTts. setVoice ({ "identifier" : "com.apple.voice.compact.en-AU.Karen" });
// iOS only
await flutterTts. setSharedInstance ( true );
// Android only
await flutterTts. speak ( "Hello World" , focus : true );
await flutterTts. setSilence ( 2 );
await flutterTts.getEngines;
await flutterTts.getDefaultVoice;
await flutterTts. isLanguageInstalled ( "en-AU" );
await flutterTts. areLanguagesInstalled ([ "en-AU" , "en-US" ]);
await flutterTts. setQueueMode ( 1 );
await flutterTts.getMaxSpeechInputLength;
await flutterTts. setAudioAttributesForNavigation ();flutterTts. setStartHandler (() {
setState (() {
ttsState = TtsState .playing;
});
});
flutterTts. setCompletionHandler (() {
setState (() {
ttsState = TtsState .stopped;
});
});
flutterTts. setProgressHandler (( String text, int startOffset, int endOffset, String word) {
setState (() {
_currentWord = word;
});
});
flutterTts. setErrorHandler ((msg) {
setState (() {
ttsState = TtsState .stopped;
});
});
flutterTts. setCancelHandler ((msg) {
setState (() {
ttsState = TtsState .stopped;
});
});
// Android, iOS and Web
flutterTts. setPauseHandler ((msg) {
setState (() {
ttsState = TtsState .paused;
});
});
flutterTts. setContinueHandler ((msg) {
setState (() {
ttsState = TtsState .continued;
});
});
สำหรับความช่วยเหลือในการเริ่มต้นใช้งาน Flutter ให้ดูเอกสารออนไลน์ของเรา
สำหรับความช่วยเหลือในการแก้ไขรหัสปลั๊กอินให้ดูเอกสารประกอบ