Flutter音频录制插件internal_audio_recorder的使用

Flutter音频录制插件internal_audio_recorder的使用

Flutter 插件用于在 Android 设备上捕获内部音频。

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  internal_audio_recorder: ^1.0.0

使用

以下是使用 internal_audio_recorder 插件进行音频录制的基本示例。

示例代码

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:internal_audio_recorder/internal_audio_recorder.dart';
import 'package:internal_audio_recorder/model/audioformat.dart';
import 'package:path_provider/path_provider.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _internalAudioRecorderPlugin = InternalAudioRecorder();

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              MaterialButton(
                color: Colors.green,
                onPressed: () async {
                  // 获取临时目录
                  var document = await getTemporaryDirectory();
                  // 创建文件路径
                  var storagePath = "${document.path}/opm.pcm";
                  // 创建文件
                  var file = File(storagePath);
                  await file.create();

                  // 开始录音
                  var responce = await _internalAudioRecorderPlugin.startCapturing(
                      file.path, AudioFormat.encodingPCM16BIT, 44200,
                      delay: 1);

                  // 监听录音事件
                  _internalAudioRecorderPlugin.listen().listen((event) {
                    debugPrint("BYTE: $event");
                  });
                },
                child: const Text("开始录音"),
              ),
              MaterialButton(
                color: Colors.green,
                onPressed: () async {
                  // 停止录音
                  var responce = await _internalAudioRecorderPlugin.stopCapturing();

                  print("响应: $responce");
                },
                child: const Text("停止录音"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


internal_audio_recorder 是一个用于在 Flutter 应用中录制内部音频的插件。它可以捕获设备内部音频流,而不是通过麦克风录制外部音频。这在某些场景下非常有用,比如录制系统声音或应用内的音频。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  internal_audio_recorder: ^1.0.0  # 请使用最新的版本号

然后运行 flutter pub get 来安装插件。

使用插件

1. 导入插件

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

import 'package:internal_audio_recorder/internal_audio_recorder.dart';

2. 初始化录音器

在开始录制之前,你需要初始化录音器:

InternalAudioRecorder recorder = InternalAudioRecorder();

3. 开始录制

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

await recorder.start();

4. 停止录制

使用 stop() 方法停止录制并保存音频文件:

String filePath = await recorder.stop();
print("Audio saved to: $filePath");

5. 获取录音时长

你可以使用 getDuration() 方法获取当前录制的时长:

int duration = await recorder.getDuration();
print("Recording duration: $duration ms");

6. 暂停和恢复录制

你可以使用 pause()resume() 方法来暂停和恢复录制:

await recorder.pause();
await recorder.resume();

7. 释放资源

在不再需要录音器时,释放资源:

await recorder.release();

完整示例

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

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

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  InternalAudioRecorder recorder;
  bool isRecording = false;
  String filePath;

  [@override](/user/override)
  void initState() {
    super.initState();
    recorder = InternalAudioRecorder();
  }

  void startRecording() async {
    await recorder.start();
    setState(() {
      isRecording = true;
    });
  }

  void stopRecording() async {
    filePath = await recorder.stop();
    setState(() {
      isRecording = false;
    });
    print("Audio saved to: $filePath");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Internal Audio Recorder'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: isRecording ? null : startRecording,
                child: Text('Start Recording'),
              ),
              ElevatedButton(
                onPressed: isRecording ? stopRecording : null,
                child: Text('Stop Recording'),
              ),
              if (filePath != null)
                Text(
                  'Audio saved to: $filePath',
                  style: TextStyle(fontSize: 16),
                ),
            ],
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    recorder.release();
    super.dispose();
  }
}
回到顶部