Flutter音频文件读取插件audiofilereader的使用
Flutter音频文件读取插件audiofilereader的使用
audiofilereader
是一个用于音频播放的 Flutter 插件。它支持多种功能,包括从项目资产、本地文件、字节数组和远程 URL 中读取音频数据,同时提供了许多实用的功能如跳转到特定位置、回调通知、循环播放、音量控制等。
支持的功能
- 从 Flutter 项目资产、本地文件、字节数组和远程 URL 加载音频数据。
- 支持跳转到指定位置。
- 提供加载音频时长、当前播放位置和播放完成的回调。
- 支持循环播放。
- 支持音量调节。
- 支持暂停/恢复播放。
- 支持多个音频播放器,并具有内存管理功能。
- 支持后台音频播放。
- 设置操作系统显示的媒体操作和元数据。
- 自定义 Android 通知栏按钮。
开始使用
1. 添加依赖
在 pubspec.yaml
文件中添加 audiofilereader
作为依赖项:
dependencies:
audiofilereader: ^版本号
然后运行以下命令以更新依赖项:
flutter pub get
示例代码
以下是使用 audiofilereader
的完整示例代码,展示如何实现不同场景下的音频播放。
import 'dart:io' show Directory, Platform;
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:audiofilereader/audiofileplayer.dart';
import 'package:audiofilereader/audio_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AudioPlayerExample(),
);
}
}
class AudioPlayerExample extends StatefulWidget {
@override
_AudioPlayerExampleState createState() => _AudioPlayerExampleState();
}
class _AudioPlayerExampleState extends State<AudioPlayerExample> {
Audio _audio;
@override
void initState() {
super.initState();
// 加载音频文件
_audio = Audio.load('assets/audio/sample.mp3');
}
@override
void dispose() {
// 释放资源
_audio.dispose();
super.dispose();
}
void _playAudio() {
_audio.play();
}
void _pauseAudio() {
_audio.pause();
}
void _resumeAudio() {
_audio.resume();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Player Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _playAudio,
child: Text('播放音频'),
),
ElevatedButton(
onPressed: _pauseAudio,
child: Text('暂停音频'),
),
ElevatedButton(
onPressed: _resumeAudio,
child: Text('继续播放'),
),
],
),
),
);
}
}
使用说明
1. 从资产加载音频
Audio audio = Audio.load('assets/audio/sample.mp3');
audio.play(); // 播放音频
audio.pause(); // 暂停音频
audio.dispose(); // 释放资源
2. 使用回调获取信息
Audio audio = Audio.load('assets/audio/sample.mp3',
onComplete: () => print('音频播放完成!'),
onDuration: (double durationSeconds) => print('音频时长为 $durationSeconds 秒'),
onPosition: (double positionSeconds) => print('当前播放位置为 $positionSeconds 秒'));
3. 后台音频播放
iOS 配置
在 Info.plist
文件中添加以下配置:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Android 配置
在 AndroidManifest.xml
中添加以下权限和服务:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<service
android:name="com.google.flutter.plugins.audiofileplayer.AudiofileplayerService"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
<receiver android:name="androidx.media.session.MediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
在代码中启用后台播放:
Audio backgroundAudio = Audio.load('assets/audio/sample.mp3', playInBackground: true);
注意事项
-
iOS 远程音频加载
如果加载非 HTTPS 的远程音频 URL,需要在Info.plist
中添加以下配置:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
-
Android 小图标
如果通知栏图标显示为白色方块,需要在AndroidManifest.xml
中指定透明背景的小图标:<meta-data android:name="ic_audiofilereader" android:value="drawable/notification_icon" />
更多关于Flutter音频文件读取插件audiofilereader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频文件读取插件audiofilereader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
audiofilereader
是一个用于读取音频文件并提取其原始 PCM 数据的 Flutter 插件。它可以帮助你从音频文件中获取原始音频数据,以便进行进一步的处理或分析。以下是使用 audiofilereader
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 audiofilereader
插件的依赖:
dependencies:
flutter:
sdk: flutter
audiofilereader: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 audiofilereader
插件:
import 'package:audiofilereader/audiofilereader.dart';
3. 读取音频文件
使用 AudioFileReader
类来读取音频文件。以下是一个简单的示例,展示如何读取音频文件并获取其 PCM 数据:
import 'package:flutter/material.dart';
import 'package:audiofilereader/audiofilereader.dart';
import 'package:flutter/services.dart' show rootBundle;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: AudioReaderExample(),
);
}
}
class AudioReaderExample extends StatefulWidget {
[@override](/user/override)
_AudioReaderExampleState createState() => _AudioReaderExampleState();
}
class _AudioReaderExampleState extends State<AudioReaderExample> {
List<int>? pcmData;
Future<void> readAudioFile() async {
try {
// 加载音频文件
ByteData data = await rootBundle.load('assets/audio.wav');
Uint8List bytes = data.buffer.asUint8List();
// 读取音频文件
AudioFileReader reader = AudioFileReader();
pcmData = await reader.readAudioFile(bytes);
setState(() {});
} catch (e) {
print("Error reading audio file: $e");
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio File Reader Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: readAudioFile,
child: Text('Read Audio File'),
),
if (pcmData != null)
Text('PCM Data Length: ${pcmData!.length}'),
],
),
),
);
}
}