Flutter中如何使用flutter_sound_record插件进行录音

我在Flutter项目中使用flutter_sound_record插件进行录音时遇到了问题。插件安装后,按照文档调用start()方法开始录音,但设备没有声音反馈,也没有生成录音文件。请问:

  1. 需要额外配置权限吗?Android和iOS分别需要哪些权限?
  2. 录音文件默认保存在什么路径?可以自定义保存位置吗?
  3. 有没有完整的示例代码展示录音开始、暂停和保存的全流程?
  4. 如何监听录音状态变化?比如开始录音、录音出错等回调要怎么处理?

调试时控制台没有报错信息,但功能就是不生效,不知道是哪里遗漏了配置?

2 回复

使用flutter_sound_record录音步骤:

  1. 添加依赖到pubspec.yaml
  2. 初始化录音器:FlutterSoundRecorder().openAudioSession()
  3. 请求录音权限
  4. 开始录音:await recorder.startRecorder()
  5. 停止录音:await recorder.stopRecorder()

记得处理权限和异常,录音文件默认保存为临时文件。

更多关于Flutter中如何使用flutter_sound_record插件进行录音的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用flutter_sound_record插件进行录音,可以按照以下步骤实现:

1. 添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_sound_record: ^2.0.0

运行 flutter pub get 安装插件。

2. 配置权限

Android

android/app/src/main/AndroidManifest.xml 中添加权限:

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

iOS

ios/Runner/Info.plist 中添加权限描述:

<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限进行录音</string>

3. 基本使用代码

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

class RecordingPage extends StatefulWidget {
  @override
  _RecordingPageState createState() => _RecordingPageState();
}

class _RecordingPageState extends State<RecordingPage> {
  final FlutterSoundRecord _record = FlutterSoundRecord();
  bool _isRecording = false;
  String? _audioPath;

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

  Future<void> _initRecord() async {
    // 初始化录音器
    await _record.init();
  }

  Future<void> _startRecording() async {
    if (await _record.hasPermission()) { // 检查权限
      await _record.start();
      setState(() => _isRecording = true);
    }
  }

  Future<void> _stopRecording() async {
    String? path = await _record.stop();
    setState(() {
      _isRecording = false;
      _audioPath = path; // 保存录音文件路径
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _isRecording ? null : _startRecording,
              child: Text('开始录音'),
            ),
            ElevatedButton(
              onPressed: _isRecording ? _stopRecording : null,
              child: Text('停止录音'),
            ),
            if (_audioPath != null) Text('录音文件: $_audioPath'),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _record.dispose(); // 释放资源
    super.dispose();
  }
}

关键说明:

  • 权限处理:使用 hasPermission() 检查权限,首次使用会自动请求。
  • 文件路径:停止录音后返回文件路径(默认保存在临时目录)。
  • 资源释放:在 dispose() 中调用 _record.dispose() 避免内存泄漏。

注意事项:

  • 确保真机测试,模拟器可能无法录音。
  • 支持配置录音格式(如WAV/AAC),具体参数参考插件文档。

这样即可实现基本的录音功能。如需更多高级功能(如实时音频流、自定义格式),请查阅插件的官方文档。

回到顶部