Flutter语音唤醒插件flutter_wake_word的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter语音唤醒插件flutter_wake_word的使用

关于此插件

flutter_wake_word 是一个用于Flutter的“唤醒词”插件。唤醒词是指像“Hey Siri”或“OK Google”这样的关键词,它们可以激活您的设备。此外,它还提供了**语音到意图(Speech to Intent)**功能。

什么是语音到意图?

语音到意图指的是能够识别出一个说出的单词或短语,并直接将其与应用程序中的特定操作关联起来。与通常用来激活或唤醒应用程序的唤醒词不同,语音到意图进一步通过识别语音背后的意图来实现复杂交互和功能。例如,唤醒词如“Hey App”可能会激活应用程序,而语音到意图可以处理诸如“播放我最喜欢的歌曲”或“订购一杯咖啡”的短语来执行相应的任务。

安装步骤

  1. 在您的 pubspec.yaml 文件中添加以下内容:

    dependencies:
      flutter_wake_word: ^x.y.z # 替换为最新版本号
    
  2. 执行以下命令以获取包:

    flutter pub get
    

Android 配置

在您的 android/build.gradle 文件中添加以下配置:

allprojects {
    repositories {
        maven { url "${project.projectDir}/libs" } // 插件的本地库目录
        maven { url "${project(":flutter_wake_word").projectDir}/libs" }
        maven { url("${project(':flutter_wake_word').projectDir}/libs") } 
        maven {
            url("${project(':flutter_wake_word').projectDir}/libs")
        }
        mavenLocal()
        // ... 您的其他行...
    }
}

示例代码

下面是一个简单的示例演示如何使用 flutter_wake_word 插件进行唤醒词检测:

创建一个新的Flutter项目

如果您还没有创建Flutter项目,请先创建一个:

flutter create wake_word_demo
cd wake_word_demo

修改 main.dart

lib/main.dart 修改如下:

import 'package:flutter/material.dart';
import 'package:flutter_wake_word/flutter_wake_word.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _wakeWord = '未检测到唤醒词';

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 初始化平台状态
  Future<void> initPlatformState() async {
    await FlutterWakeWord.initialize(
      onWakeWordDetected: (String detectedWord) {
        setState(() {
          _wakeWord = detectedWord;
        });
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Wake Word Demo'),
        ),
        body: Center(
          child: Text('检测到的唤醒词: $_wakeWord\n'),
        ),
      ),
    );
  }
}

运行应用

确保您已经正确设置了Android部分的依赖项后,运行您的应用:

flutter run

更多关于Flutter语音唤醒插件flutter_wake_word的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter语音唤醒插件flutter_wake_word的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用flutter_wake_word插件来实现语音唤醒功能的代码示例。这个插件允许你的应用通过特定的唤醒词来启动或触发某些操作。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加flutter_wake_word依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_wake_word: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 配置Android权限

由于语音唤醒功能需要访问麦克风,你需要在AndroidManifest.xml中添加相应的权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <application
        ... >
        ...
    </application>
</manifest>

3. 实现语音唤醒功能

在你的Flutter项目中,你可以按照以下步骤实现语音唤醒功能:

3.1 导入插件

在你的Dart文件中导入flutter_wake_word插件:

import 'package:flutter_wake_word/flutter_wake_word.dart';

3.2 初始化插件并设置唤醒词

你需要在应用启动时初始化插件并设置唤醒词。例如,在MainActivity.kt(对于Kotlin)或MainActivity.java(对于Java)中初始化插件(如果需要),然后在Dart代码中配置唤醒词。

注意flutter_wake_word插件的初始化可能需要在原生代码中进行一些配置,具体请参考插件的官方文档。

以下是一个简单的Dart代码示例,展示了如何在Flutter中配置和使用语音唤醒功能:

import 'package:flutter/material.dart';
import 'package:flutter_wake_word/flutter_wake_word.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WakeWordScreen(),
    );
  }
}

class WakeWordScreen extends StatefulWidget {
  @override
  _WakeWordScreenState createState() => _WakeWordScreenState();
}

class _WakeWordScreenState extends State<WakeWordScreen> {
  String? wakeWord = "hello"; // 设置你的唤醒词
  bool isListening = false;

  @override
  void initState() {
    super.initState();
    initWakeWord();
  }

  void initWakeWord() async {
    // 检查权限
    bool hasPermission = await FlutterWakeWord.checkPermission();
    if (!hasPermission) {
      // 请求权限
      bool permissionGranted = await FlutterWakeWord.requestPermission();
      if (permissionGranted) {
        // 初始化并设置唤醒词
        FlutterWakeWord.startListening(
          wakeWord: wakeWord!,
          onWakeWordDetected: () {
            // 唤醒词被检测到时执行的回调
            setState(() {
              isListening = false; // 可以选择停止监听
              print("Wake word detected!");
            });
          },
          onError: (error) {
            // 处理错误
            print("Error: $error");
          },
        );

        setState(() {
          isListening = true;
        });
      } else {
        print("Permission denied.");
      }
    } else {
      // 已经有权限,直接初始化并设置唤醒词
      FlutterWakeWord.startListening(
        wakeWord: wakeWord!,
        onWakeWordDetected: () {
          // 唤醒词被检测到时执行的回调
          setState(() {
            isListening = false; // 可以选择停止监听
            print("Wake word detected!");
          });
        },
        onError: (error) {
          // 处理错误
          print("Error: $error");
        },
      );

      setState(() {
        isListening = true;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flutter Wake Word Example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text("Is Listening: $isListening"),
            ElevatedButton(
              onPressed: () {
                if (isListening) {
                  // 停止监听
                  FlutterWakeWord.stopListening();
                  setState(() {
                    isListening = false;
                  });
                } else {
                  // 初始化并监听(在initState中已经调用,这里只是为了演示按钮)
                  initWakeWord();
                }
              },
              child: Text("Toggle Listening"),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 确保在销毁时停止监听
    FlutterWakeWord.stopListening();
    super.dispose();
  }
}

这个示例展示了如何初始化插件、检查并请求权限、设置唤醒词以及处理唤醒词被检测到的回调。请注意,实际使用时,你可能需要根据具体需求调整代码,例如处理不同的错误情况、优化用户交互等。

注意:由于flutter_wake_word插件的具体实现和API可能会随着版本更新而变化,因此建议查阅插件的官方文档和示例代码以获取最新和最准确的信息。

回到顶部