Flutter音频录制插件flutter_plugin_record_new的使用

使用Flutter实现 仿微信录音的插件

插件支持Android 和iOS。

插件提供的功能

录制

  1. 录制语音,
  2. 播放录音,
  3. 录制声音大小的监听
  4. 提供录制时长的监听
  5. 提供类似微信的录制组件
  6. 提供播放音频结束的监听
  7. 提供根据传递的路径进行语音录制
  8. 提供录制wav, mp3格式 具体可参考example

播放

  1. 提供播放指定路径的音频文件
  2. 提供播放指定URL地址的wav, MP3格式文件
  3. 提供播放完成的回调监听
  4. 提供暂停和继续播放的功能
  5. 提供停止播放的功能

1. 引入

pubspec.yaml文件上引入如下配置:

# 引入方式1(引入最新的版本)
dependencies:
  flutter_plugin_record:
    git:
      url: https://github.com/yxwandroid/flutter_plugin_record.git

# 引入方式2 (引入指定某次commit)
dependencies:
  flutter_plugin_record:
    git:
      url: https://github.com/yxwandroid/flutter_plugin_record.git
      ref: 29c02b15835907879451ad9f8f88c357149c6085
      
# 引入方式3 (引入Flutter仓库的library)
dependencies:
  flutter_plugin_record: ^1.0.1

2. 使用

初始化录制

2.1 初始化录制(wav)

可以在页面初始化的时候进行初始化比如: 在initState方法中进行初始化

// 实例化对象 
FlutterPluginRecord recordPlugin = new FlutterPluginRecord();
// 初始化
recordPlugin.init();
2.2 初始化录制(mp3)

可以在页面初始化的时候进行初始化比如: 在initState方法中进行初始化

// 实例化对象 
FlutterPluginRecord recordPlugin = new FlutterPluginRecord();
// 初始化
recordPlugin.initRecordMp3();

开始录制

recordPlugin.start();

停止录制

recordPlugin.stop();

播放

1. 播放
recordPlugin.play();
2. 暂停和继续播放
recordPlugin.pausePlay();
3. 停止播放
recordPlugin.stopPlay();

根据传递的路径进行语音录制

recordPlugin.startByWavPath(wavPath);

根据传递的路径或则Url进行语音播放

///
/// 参数 path  播放音频的地址
///
/// path 为 url类型对应的在线播放地址   https://linjuli-app-audio.oss-cn-hangzhou.aliyuncs.com/audio/50c39c768b534ce1ba25d837ed153824.wav
/// path 对应本地文件路径对应的是本地文件播放肚子   /sdcard/flutterdemo/wiw.wav
/// 参数  type
/// 当path 为url   type为 url
/// 当path 为本地地址 type为 file
///
Future playByPath(String path, String type) async {
  return await _invokeMethod('playByPath', <String, String>{
    "play": "play",
    "path": path,
    "type": type,
  });
}

释放资源

可以在页面退出的时候进行资源释放 比如在 dispose 方法中调用如下代码

recordPlugin.dispose();

回调监听

1. 初始化回调监听

/// 初始化方法的监听
recordPlugin.responseFromInit.listen((data) {
  if (data) {
    print("初始化成功");
  } else {
    print("初始化失败");
  }
});

2. 开始录制停止录制监听

/// 开始录制或结束录制的监听
recordPlugin.response.listen((data) {
  if (data.msg == "onStop") {
    /// 结束录制时会返回录制文件的地址方便上传服务器
    print("onStop  " + data.path);
  } else if (data.msg == "onStart") {
    print("onStart --");
  }
});

3. 录制声音大小回调监听

/// 录制过程监听录制的声音的大小 方便做语音动画显示图片的样式
recordPlugin.responseFromAmplitude.listen((data) {
  var voiceData = double.parse(data.msg);
  var tempVoice = "";
  if (voiceData > 0 && voiceData < 0.1) {
    tempVoice = "images/voice_volume_2.png";
  } else if (voiceData > 0.2 && voiceData < 0.3) {
    tempVoice = "images/voice_volume_3.png";
  } else if (voiceData > 0.3 && voiceData < 0.4) {
    tempVoice = "images/voice_volume_4.png";
  } else if (voiceData > 0.4 && voiceData < 0.5) {
    tempVoice = "images/voice_volume_5.png";
  } else if (voiceData > 0.5 && voiceData < 0.6) {
    tempVoice = "images/voice_volume_6.png";
  } else if (voiceData > 0.6 && voiceData < 0.7) {
    tempVoice = "images/voice_volume_7.png";
  } else if (voiceData > 0.7 && voiceData < 1) {
    tempVoice = "images/voice_volume_7.png";
  }
  setState(() {
    voiceIco = tempVoice;
    if(overlayEntry!=null){
      overlayEntry.markNeedsBuild();
    }
  });

  print("振幅大小   " + voiceData.toString() + "  " + voiceIco);
});

4. 播放声音完成的监听监听

recordPlugin.responsePlayStateController.listen((data){
  print("播放路径   " + data.playPath );
  print("播放状态   " + data.playState );
});

2. 录制组件的使用

组件使用效果

Android效果

iOS效果

1. 在使用的页面进行导入package

import 'package:flutter_plugin_record/index.dart';

2. 在使用的地方引入VoiceWidget组件

VoiceWidget(),

VoiceWidget({startRecord: Function, stopRecord: Function}) {

startRecord 开始录制的回调

stopRecord 停止录制的回调 返回的path是录制成功之后文件的保存地址

iOS配置注意事项

iOS集成的时候需要在info.plist添加

<key>NSMicrophoneUsageDescription</key>
<string>打开话筒</string>

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

iOS release 打包失败配置注意事项

Android配置注意事项

Android集成的时候需要在application标签下添加

tools:replace="android:label"

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

1 回复

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


flutter_plugin_record_new 是一个用于在 Flutter 应用中录制音频的插件。它提供了简单的 API 来开始、停止和播放音频录制。以下是如何使用 flutter_plugin_record_new 插件的步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 flutter_plugin_record_new 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_plugin_record_new: ^1.0.0  # 请使用最新版本

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

2. 导入插件

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

import 'package:flutter_plugin_record_new/flutter_plugin_record.dart';

3. 初始化插件

在使用插件之前,需要先初始化它:

FlutterPluginRecord recordPlugin = FlutterPluginRecord();

4. 请求权限

在开始录制之前,确保你已经请求了录音权限。你可以使用 permission_handler 插件来请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermission() async {
  if (await Permission.microphone.request().isGranted) {
    // 权限已授予
  } else {
    // 权限被拒绝
  }
}

5. 开始录制

使用 start() 方法开始录制音频:

void startRecording() async {
  await recordPlugin.start();
}

6. 停止录制

使用 stop() 方法停止录制音频:

void stopRecording() async {
  await recordPlugin.stop();
}

7. 播放录制的音频

使用 play() 方法播放录制的音频:

void playRecording() async {
  await recordPlugin.play();
}

8. 获取录制的文件路径

你可以通过 getFilePath() 方法获取录制的音频文件路径:

void getFilePath() async {
  String filePath = await recordPlugin.getFilePath();
  print("录制的文件路径: $filePath");
}

9. 释放资源

在不需要使用插件时,释放资源:

void dispose() {
  recordPlugin.dispose();
}

完整示例

以下是一个完整的示例,展示了如何使用 flutter_plugin_record_new 插件进行音频录制:

import 'package:flutter/material.dart';
import 'package:flutter_plugin_record_new/flutter_plugin_record.dart';
import 'package:permission_handler/permission_handler.dart';

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

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

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

class _AudioRecorderState extends State<AudioRecorder> {
  FlutterPluginRecord recordPlugin = FlutterPluginRecord();

  [@override](/user/override)
  void initState() {
    super.initState();
    requestPermission();
  }

  Future<void> requestPermission() async {
    if (await Permission.microphone.request().isGranted) {
      // 权限已授予
    } else {
      // 权限被拒绝
    }
  }

  void startRecording() async {
    await recordPlugin.start();
  }

  void stopRecording() async {
    await recordPlugin.stop();
  }

  void playRecording() async {
    await recordPlugin.play();
  }

  void getFilePath() async {
    String filePath = await recordPlugin.getFilePath();
    print("录制的文件路径: $filePath");
  }

  [@override](/user/override)
  void dispose() {
    recordPlugin.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('音频录制示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: startRecording,
              child: Text('开始录制'),
            ),
            ElevatedButton(
              onPressed: stopRecording,
              child: Text('停止录制'),
            ),
            ElevatedButton(
              onPressed: playRecording,
              child: Text('播放录制'),
            ),
            ElevatedButton(
              onPressed: getFilePath,
              child: Text('获取文件路径'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部