Flutter音频波形展示插件general_audio_waveforms的使用

Flutter音频波形展示插件general_audio_waveforms的使用

General Audio Waveforms 是一个用于在 Flutter 应用中添加音频波形的 UI 包。该包是对 pub.dev 上的 flutter_audio_waveforms 包的定制。

特性

  • 曲线多边形波形
  • 多边形波形
  • 脉冲波形
  • 矩形波形
  • 波浪形波形

你可以从以下选项中选择波形的来源:

  • 音频文件源(AudioFileSource)
  • 网络音频源(AudioNetworkSource)
  • 资源音频源(AudioAssetSource)
  • 数据源(AudioDataSource)

该包还提供了缩放选项来调整波形中显示的数据点数量。你可以使用平均或中位数缩放器根据实际数据大小和所需大小创建桶。每个桶的平均值或中位数将作为最终波形的代表。

开始使用

要开始使用 General Audio Waveforms 包,请按照以下步骤操作:

  1. pubspec.yaml 文件中添加该包:
dependencies:
  general_audio_waveforms: ^0.0.10
  1. 在 Dart 代码中导入该包:
import 'package:general_audio_waveforms/general_audio_waveforms.dart';

使用方法

以下是一个简单的示例,展示了如何在应用中使用 General Audio Waveforms 包:

GeneralAudioWaveform(
  scalingAlgorithmType: ScalingAlgorithmType.average,
  source: AudioAssetSource(path: "assets/sample.mp3"),
  maxSamples: 20,
  waveformType: WaveformType.pulse,
  maxDuration: maxDuration,
  elapsedDuration: elapsedTime,
  elapsedIsChanged: (d) {
    setState(() {
      elapsedTime = d;
    });
  },
),

完整示例代码

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:general_audio_waveforms/general_audio_waveforms.dart';
import 'package:permission_handler/permission_handler.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'General Audio Waveform',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'General Audio Waveforms'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  Duration elapsedTime = const Duration(seconds: 0);
  Duration maxDuration = const Duration(seconds: 150);

  String path = "/storage/emulated/0/Download/file_example_MP3_700KB.mp3";

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

  Future<void> requestPermissions() async {
    await [
      Permission.storage,
      Permission.manageExternalStorage,
      Permission.mediaLibrary,
    ].request();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            GeneralAudioWaveform(
              scalingAlgorithmType: ScalingAlgorithmType.average,
              source: AudioAssetSource(path: "assets/sample.mp3"),
              maxSamples: 100,
              waveformType: WaveformType.pulse,
              maxDuration: maxDuration,
              elapsedDuration: elapsedTime,
              waveformStyle: WaveformStyle(
                activeColor: Colors.red
              ),
              elapsedIsChanged: (d) {
                setState(() {
                  elapsedTime = d;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}
1 回复

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


当然,下面是一个关于如何在Flutter项目中使用general_audio_waveforms插件来展示音频波形的示例代码。这个插件允许你从音频文件中生成并显示波形图。

首先,确保你的Flutter项目已经添加了对general_audio_waveforms插件的依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  general_audio_waveforms: ^最新版本号  # 请替换为当前最新版本号

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

接下来,你可以在你的Flutter应用中使用这个插件来显示音频波形。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Audio Waveform Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AudioWaveformScreen(),
    );
  }
}

class AudioWaveformScreen extends StatefulWidget {
  @override
  _AudioWaveformScreenState createState() => _AudioWaveformScreenState();
}

class _AudioWaveformScreenState extends State<AudioWaveformScreen> {
  final String audioFilePath = 'assets/audio/sample.mp3'; // 请确保此音频文件已添加到你的assets中
  late AudioWaveformController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AudioWaveformController(audioFilePath);
    _controller.initialize().then((_) {
      setState(() {}); // 更新UI以显示波形
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Waveform Demo'),
      ),
      body: Center(
        child: _controller.value.isInitialized
            ? AudioWaveform(
                controller: _controller,
                styles: AudioWaveformStyles(
                  backgroundColor: Colors.grey[200],
                  waveColor: Colors.blue,
                  progressColor: Colors.red,
                ),
              )
            : CircularProgressIndicator(), // 在波形加载时显示加载指示器
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _controller.playOrPause();
        },
        tooltip: _controller.value.isPlaying ? 'Pause' : 'Play',
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事情:

  1. 添加依赖:在pubspec.yaml文件中添加了general_audio_waveforms依赖。
  2. 初始化控制器:在AudioWaveformScreeninitState方法中,我们创建并初始化了AudioWaveformController,并传递了音频文件的路径。
  3. 显示波形:在build方法中,我们使用AudioWaveform小部件来显示波形图。在波形加载完成之前,我们显示一个CircularProgressIndicator
  4. 播放控制:我们添加了一个浮动操作按钮(FAB)来控制音频的播放和暂停。

注意

  • 确保音频文件(如示例中的sample.mp3)已添加到你的Flutter项目的assets目录中,并在pubspec.yaml文件中正确配置。
  • 根据需要调整AudioWaveformStyles中的样式参数,以匹配你的应用设计。

这个示例提供了一个基本的框架,你可以根据需要进行扩展和自定义。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!