You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用如何实现时长超过一分钟的音频录制?

如何在Flutter应用中实现时长超过一分钟的音频录制

要实现无时长限制(支持超过一分钟)的音频录制,推荐使用成熟的第三方音频库,比如flutter_sound或record,这两个库都没有默认的录制时长限制,下面以flutter_sound为例给出完整实现方案:

1. 添加依赖

在项目的pubspec.yaml中加入依赖:

dependencies:
  flutter_sound: ^9.2.13  # 可替换为最新版本
  permission_handler: ^10.2.0  # 用于申请权限

执行flutter pub get安装依赖。

2. 配置系统权限

Android端

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

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 可选,用于保存录制文件到本地 -->

iOS端

在ios/Runner/Info.plist中添加麦克风权限说明:

<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风进行音频录制</string>

3. 实现录制逻辑

封装一个音频录制工具类:

import 'package:flutter_sound/flutter_sound.dart';
import 'package:permission_handler/permission_handler.dart';

class AudioRecorder {
  FlutterSoundRecorder? _recorder;
  String? _recordedFilePath;

  // 初始化录制器
  Future<void> init() async {
    _recorder = FlutterSoundRecorder();
    // 申请麦克风权限
    final micPermission = await Permission.microphone.request();
    if (micPermission != PermissionStatus.granted) {
      throw Exception('未获取麦克风权限,无法录制音频');
    }
    await _recorder!.openRecorder();
  }

  // 开始录制
  Future<void> start() async {
    // 用时间戳作为文件名,避免重复
    _recordedFilePath = '${DateTime.now().millisecondsSinceEpoch}.aac';
    await _recorder!.startRecorder(
      toFile: _recordedFilePath,
      codec: Codec.aacADTS, // 选择合适的编码格式
    );
  }

  // 停止录制,返回文件路径
  Future<String?> stop() async {
    await _recorder!.stopRecorder();
    return _recordedFilePath;
  }

  // 释放资源
  void dispose() {
    _recorder?.closeRecorder();
    _recorder = null;
  }
}

4. 在页面中使用录制功能

import 'package:flutter/material.dart';

class LongRecordingPage extends StatefulWidget {
  const LongRecordingPage({super.key});

  @override
  State<LongRecordingPage> createState() => _LongRecordingPageState();
}

class _LongRecordingPageState extends State<LongRecordingPage> {
  final AudioRecorder _audioRecorder = AudioRecorder();
  bool _isRecording = false;

  @override
  void initState() {
    super.initState();
    _audioRecorder.init();
  }

  @override
  void dispose() {
    _audioRecorder.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('长时间音频录制')),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            if (_isRecording) {
              final filePath = await _audioRecorder.stop();
              setState(() => _isRecording = false);
              print('录制完成,文件路径:$filePath');
              // 这里可以添加文件上传、播放等后续逻辑
            } else {
              await _audioRecorder.start();
              setState(() => _isRecording = true);
            }
          },
          child: Text(_isRecording ? '停止录制' : '开始录制'),
        ),
      ),
    );
  }
}

注意事项

  • 录制格式可根据需求调整,flutter_sound支持aacADTS、mp3、wav等多种编码格式
  • 长时间录制需注意设备存储空间,建议在录制前检查剩余空间
  • 如果选择record库,实现逻辑类似,核心都是申请权限后调用start/stop方法,同样支持无限制时长录制

内容的提问来源于stack exchange,提问作者Hossam Aboud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:09