Flutter音频录制插件fepe_record_mp3的使用

Flutter音频录制插件fepe_record_mp3的使用

pub package

使用平台原生API录制MP3文件

依赖安装

添加到你的 pubspec.yaml 文件:

dependencies:
  fepe_record_mp3: ^1.0.1

iOS权限配置

确保在Info.plist中添加以下键:

<key>NSMicrophoneUsageDescription</key>
<string>请允许访问麦克风以便录制音频</string>

示例代码

example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:fepe_record_mp3/record_mp3.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    RecordMp3.instance.initRecording("");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经点击了按钮多少次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
    );
  }
}

录制功能实现

_MyHomePageState 类中,我们可以实现录音功能。首先,在 initState 方法中初始化录音器,并且在需要的地方调用相应的录音方法。

[@override](/user/override)
void initState() {
  super.initState();
  RecordMp3.instance.initRecording("");
}

// 开始录音
void startRecording(String filePath) {
  RecordMp3.instance.start(filePath, (type) {
    // 录音失败回调
    print("录音失败");
  });
}

// 暂停录音
void pauseRecording() {
  RecordMp3.instance.pause();
}

// 恢复录音
void resumeRecording() {
  RecordMp3.instance.resume();
}

// 停止录音并导出文件
void stopRecording() {
  RecordMp3.instance.stop();
}

使用示例

_MyHomePageState 中添加一些按钮来触发这些录音操作:

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text(widget.title),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          const Text(
            '你已经点击了按钮多少次:',
          ),
          Text(
            '$_counter',
            style: Theme.of(context).textTheme.headline4,
          ),
          ElevatedButton(
            onPressed: () {
              startRecording("/path/to/your/recording.mp3");
            },
            child: Text("开始录音"),
          ),
          ElevatedButton(
            onPressed: () {
              pauseRecording();
            },
            child: Text("暂停录音"),
          ),
          ElevatedButton(
            onPressed: () {
              resumeRecording();
            },
            child: Text("恢复录音"),
          ),
          ElevatedButton(
            onPressed: () {
              stopRecording();
            },
            child: Text("停止录音"),
          ),
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(
      onPressed: _incrementCounter,
      tooltip: '增加',
      child: const Icon(Icons.add),
    ),
  );
}

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

1 回复

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


fepe_record_mp3 是一个用于在 Flutter 应用中录制音频并保存为 MP3 格式的插件。以下是使用该插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  fepe_record_mp3: ^最新版本

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

2. 导入插件

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

import 'package:fepe_record_mp3/fepe_record_mp3.dart';

3. 初始化插件

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

FepeRecordMp3.initialize();

4. 开始录音

你可以使用 startRecord 方法来开始录音:

String path = "/path/to/save/recording.mp3";
await FepeRecordMp3.startRecord(path);

path 是你希望保存录音文件的路径。

5. 停止录音

使用 stopRecord 方法来停止录音:

await FepeRecordMp3.stopRecord();

6. 暂停和恢复录音

你还可以暂停和恢复录音:

// 暂停录音
await FepeRecordMp3.pauseRecord();

// 恢复录音
await FepeRecordMp3.resumeRecord();

7. 检查录音状态

你可以通过 isRecordingisPaused 方法来检查当前的录音状态:

bool isRecording = await FepeRecordMp3.isRecording();
bool isPaused = await FepeRecordMp3.isPaused();

8. 获取录音时长

你可以通过 getDuration 方法获取当前录音的时长:

int duration = await FepeRecordMp3.getDuration();

9. 权限处理

在 Android 和 iOS 上,录音需要相应的权限。你需要在 AndroidManifest.xmlInfo.plist 中添加相应的权限声明。

Android

AndroidManifest.xml 中添加以下权限:

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

iOS

Info.plist 中添加以下权限:

<key>NSMicrophoneUsageDescription</key>
<string>We need access to your microphone to record audio</string>

10. 完整示例

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

import 'package:flutter/material.dart';
import 'package:fepe_record_mp3/fepe_record_mp3.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> {
  bool isRecording = false;
  bool isPaused = false;

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

  void _startRecording() async {
    String path = "/path/to/save/recording.mp3";
    await FepeRecordMp3.startRecord(path);
    setState(() {
      isRecording = true;
    });
  }

  void _stopRecording() async {
    await FepeRecordMp3.stopRecord();
    setState(() {
      isRecording = false;
    });
  }

  void _pauseRecording() async {
    await FepeRecordMp3.pauseRecord();
    setState(() {
      isPaused = true;
    });
  }

  void _resumeRecording() async {
    await FepeRecordMp3.resumeRecord();
    setState(() {
      isPaused = false;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Recorder'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (!isRecording)
              ElevatedButton(
                onPressed: _startRecording,
                child: Text('Start Recording'),
              ),
            if (isRecording && !isPaused)
              ElevatedButton(
                onPressed: _pauseRecording,
                child: Text('Pause Recording'),
              ),
            if (isRecording && isPaused)
              ElevatedButton(
                onPressed: _resumeRecording,
                child: Text('Resume Recording'),
              ),
            if (isRecording)
              ElevatedButton(
                onPressed: _stopRecording,
                child: Text('Stop Recording'),
              ),
          ],
        ),
      ),
    );
  }
}
回到顶部