Flutter语音消息录制插件voice_message_recorder的使用

Flutter语音消息录制插件voice_message_recorder的使用

插件简介

voice_message_recorder 是一个用于在 Flutter 应用中实现语音消息录制功能的插件。它提供了简单的 API 来启动和停止录音,并支持多种音频编码格式。


Demo

以下是该插件的一个简单演示:


使用步骤

以下是一个完整的示例,展示如何在 Flutter 应用中集成 voice_message_recorder 插件。

1. 添加依赖

在项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  voice_message_recorder: ^版本号

然后运行 flutter pub get 来安装依赖。


2. 初始化插件

在应用的入口文件中初始化插件并设置上下文环境。

import 'package:flutter/material.dart';
import 'package:voice_message_recorder/audio_encoder_type.dart';
import 'package:voice_message_recorder/recorderSize.dart';
import 'package:voice_message_recorder/screen/voice_message_recorder.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized(); // 确保 Flutter 绑定完成
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    RecorderSize().init(context); // 初始化录音尺寸
    return const MaterialApp(
      debugShowMaterialGrid: false,
      debugShowCheckedModeBanner: false,
      home: SingleChatScreen(), // 启动主屏幕
    );
  }
}

3. 集成语音录制组件

在主屏幕中集成 VoiceMessageRecorder 组件,并为相关回调函数提供实现逻辑。

class SingleChatScreen extends StatelessWidget {
  const SingleChatScreen({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: buildAppBar(),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          VoiceMessageRecorder(
            functionStartRecording: () {
              // 开始录音时调用
              print('开始录音');
            },
            functionStopRecording: (time) {
              // 停止录音时调用,返回录音时间
              print('录音已停止,录音时间为: $time 秒');
            },
            functionSendVoice: (soundFile, time) {
              // 发送录音文件时调用
              print("录音文件路径: ${soundFile.path}, 录音时间: $time 秒");
            },
            encode: AudioEncoderType.AAC, // 设置音频编码格式为 AAC
            functionRecorderStatus: (bool isRecording) {
              // 录音状态变化时调用
              print('录音状态: $isRecording');
            },
            functionSendTextMessage: (String text) {
              // 发送文本消息时调用
              print('发送文本消息: $text');
            },
            functionDataCameraReceived: (String data) {
              // 接收摄像头数据时调用
              print('接收到摄像头数据: $data');
            },
          ),
        ],
      ),
    );
  }

  AppBar buildAppBar() {
    return AppBar(
      automaticallyImplyLeading: false,
      actions: [
        IconButton(
          icon: const Icon(Icons.local_phone),
          onPressed: () {},
        ),
        IconButton(
          icon: const Icon(Icons.videocam),
          onPressed: () {},
        ),
        SizedBox(width: RecorderSize.x20 / 2),
      ],
    );
  }
}

4. 运行效果

运行应用后,您将看到一个带有录音按钮的界面。点击按钮可以开始和停止录音,并且可以通过回调函数处理录音文件和状态。


注意事项

  1. 权限配置
    在 Android 平台上,确保在 AndroidManifest.xml 中添加录音权限:

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    
  2. iOS 配置
    在 iOS 上,需要在 Info.plist 文件中添加麦克风权限说明:

    <key>NSMicrophoneUsageDescription</key>
    <string>我们需要访问您的麦克风来录制语音消息。</string>
    

更多关于Flutter语音消息录制插件voice_message_recorder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


在Flutter应用中,如果你想实现语音消息的录制功能,可以使用 voice_message_recorder 插件。这个插件提供了简单的API来实现语音录制、播放、暂停等功能。下面是如何使用 voice_message_recorder 插件的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 voice_message_recorder 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  voice_message_recorder: ^0.0.1 # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

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

import 'package:voice_message_recorder/voice_message_recorder.dart';

3. 使用 VoiceMessageRecorder

VoiceMessageRecorder 是一个Widget,你可以直接将它添加到你的UI中。

class VoiceRecorderScreen extends StatefulWidget {
  [@override](/user/override)
  _VoiceRecorderScreenState createState() => _VoiceRecorderScreenState();
}

class _VoiceRecorderScreenState extends State<VoiceRecorderScreen> {
  VoiceMessageRecorderController _controller = VoiceMessageRecorderController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Voice Recorder'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            VoiceMessageRecorder(
              controller: _controller,
              onRecordingComplete: (String filePath) {
                print("Recording saved at: $filePath");
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.startRecording();
              },
              child: Text('Start Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.stopRecording();
              },
              child: Text('Stop Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.playRecording();
              },
              child: Text('Play Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.pauseRecording();
              },
              child: Text('Pause Recording'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的Flutter应用,并使用 VoiceMessageRecorder 来录制、播放、暂停语音消息。

5. 处理录制完成后的文件

onRecordingComplete 回调中,你可以获取到录制文件的路径,并根据需要进行处理,比如上传到服务器或保存到本地。

onRecordingComplete: (String filePath) {
  print("Recording saved at: $filePath");
  // 你可以在这里处理文件,比如上传到服务器
},

6. 其他功能

voice_message_recorder 插件可能还提供了其他功能,比如设置音频质量、录制时长限制等。你可以查看插件的文档来了解更多信息。

7. 注意事项

  • 确保你已经在 AndroidManifest.xmlInfo.plist 中添加了录音权限。
  • 在iOS上,你需要在 Info.plist 中添加如下权限:
<key>NSMicrophoneUsageDescription</key>
<string>We need access to your microphone to record voice messages.</string>

AndroidManifest.xml 中添加:

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

8. 示例代码

完整的示例代码如下:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VoiceRecorderScreen(),
    );
  }
}

class VoiceRecorderScreen extends StatefulWidget {
  [@override](/user/override)
  _VoiceRecorderScreenState createState() => _VoiceRecorderScreenState();
}

class _VoiceRecorderScreenState extends State<VoiceRecorderScreen> {
  VoiceMessageRecorderController _controller = VoiceMessageRecorderController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Voice Recorder'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            VoiceMessageRecorder(
              controller: _controller,
              onRecordingComplete: (String filePath) {
                print("Recording saved at: $filePath");
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.startRecording();
              },
              child: Text('Start Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.stopRecording();
              },
              child: Text('Stop Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.playRecording();
              },
              child: Text('Play Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _controller.pauseRecording();
              },
              child: Text('Pause Recording'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部