搜尋套件、儲存庫與 APP 分類

套件詳情v4.2.5

flutter_tts

一個用於文字轉語音的 Flutter 插件。此插件支援 iOS、macOS、Android、Web 與 Windows。

AndroidiOSWebmacOSWindows
近 30 天下載
72.1萬
喜歡數
1610
Pub 分數
150

安裝套件

flutter pub add flutter_tts

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Flutter TTS 是一個跨平台外掛程式,可在 Flutter 應用中實現文字轉語音功能。它支援多個平台,包括 Android、iOS、Web、macOS 和 Windows,讓開發者能輕鬆將語音輸出整合至其應用程式中。該外掛程式提供簡單的 API,可將文字轉換為語音音訊,非常適合用於無障礙功能、語音助理與互動式學習工具。它利用各平台的原生語音合成引擎,確保效能穩定且語音自然流暢。

適用情境

  • 無障礙功能
  • 語音導航
  • 教育類應用程式
  • 互動式聊天機器人
  • 音頻反饋系統

主要特色

  • 跨平台支援
  • 簡單 API 結合
  • 原生語音引擎使用
  • 可自訂的語音參數
  • 即時文字播放

適合對象

  • 開發無障礙應用程式的開發者
  • 教育軟體創作者
  • 語音助手整合
  • 需要音頻反饋的應用程式

使用建議

  • 需要移動平台的特定權限
  • 語音可用性因設備而異
  • 網頁上的自訂選項有限
  • 性能取決於原生引擎
  • 可能需要在 iOS 和 Android 上取得使用者權限

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Text To Speech

pub package

A flutter text to speech plugin (Swift,Kotlin)

Features

  • [x] Android, iOS, Web, Windows & macOS
    • [x] speak
    • [x] stop
    • [x] get languages
    • [x] set language
    • [x] set speech rate
    • [x] set speech volume
    • [x] set speech pitch
    • [x] get voices
    • [x] set voice
  • [x] Android, iOS, Web & macOS
    • [x] is language available
  • [x] Android, iOS, Web
    • [x] speech marks (requires iOS 7+, Android 26+, and default voice engine for web)
  • [x] Android, iOS
    • [x] synthesize to file (requires iOS 13+)
  • [x] Android, iOS, Web, & Windows
    • [x] pause
  • [x] Android
    • [x] set silence
    • [x] is language installed
    • [x] are languages installed
    • [x] get engines
    • [x] set engine
    • [x] get default engine
    • [x] get default voice
    • [x] set queue mode
    • [x] get max speech input length
  • [x] iOS
    • [x] set shared instance
    • [x] set audio session category

Usage

macOS

OSX version: 10.15

Example App from the macOS_app branch

Web

Website from the example directory.

Progress updates on Web

Progress updates are only supported for native speech synsthesis. Use the default engine to ensure support for progress updates. Chromium#41195426

Android

Change the minimum Android sdk version to 21 (or higher) in your android/app/build.gradle file.

minSdkVersion 21

Update the Kotlin Gradle Plugin Version

Change the verision of the Kotlin Gradle plugin to 1.9.10.
If your project was created with a version of Flutter before 3.19, go to the android/build.gradle file and update the ext.kotlin_version:

ext.kotlin_version = '1.9.10'

Otherwise go to android/settings.gradle and update the verion of the plugin org.jetbrains.kotlin.android:

id "org.jetbrains.kotlin.android" version "1.9.10" apply false

Apps targeting Android 11 that use text-to-speech should declare TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE in the queries elements of their manifest.

<queries>
  <intent>
    <action android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>
Pausing on Android

Android TTS does not support the pause function natively, so we have implemented a work around. We utilize the native onRangeStart() method to determine the index of start when pause is invoked. We use that index to create a new text the next time speak is invoked. Due to using onRangeStart(), pause works on SDK versions >= 26. Also, if using start and end offsets inside of setProgressHandler(), you'll need to keep a track of them if using pause since they will update once the new text is created when speak is called after being paused.

await flutterTts.pause()

iOS

There's a known issue with integrating plugins that use Swift into a Flutter project created with the Objective-C template. Flutter#16049

Example

To use this plugin :

  dependencies:
    flutter:
      sdk: flutter
    flutter_tts:
  • instantiate FlutterTts
FlutterTts flutterTts = FlutterTts();

To set shared audio instance (iOS only):

await flutterTts.setSharedInstance(true);

To set audio category and options with optional mode (iOS only). The following setup allows background music and in-app audio session to continue simultaneously:

await flutterTts.setIosAudioCategory(IosTextToSpeechAudioCategory.ambient,
     [
          IosTextToSpeechAudioCategoryOptions.allowBluetooth,
          IosTextToSpeechAudioCategoryOptions.allowBluetoothA2DP,
          IosTextToSpeechAudioCategoryOptions.mixWithOthers
     ],
     IosTextToSpeechAudioMode.voicePrompt
);

To await speak completion.

await flutterTts.awaitSpeakCompletion(true);

To await synthesize to file completion.

await flutterTts.awaitSynthCompletion(true);
speak, stop, getLanguages, setLanguage, setSpeechRate, getVoices, setVoice, setVolume, setPitch, isLanguageAvailable, setSharedInstance
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();
Listening for platform calls
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;
  });
});

Getting Started

For help getting started with Flutter, view our online documentation.

For help on editing plugin code, view the documentation.

所屬分類

原始碼儲存庫

使用此套件的專案