Flutter音频裁剪插件flutter_audio_trimmer的使用
Flutter音频裁剪插件flutter_audio_trimmer的使用
修剪音频文件意味着从文件的开头或结尾剪切一部分音频,或者从中间移除某些部分。
Dart API
该库提供了几种处理音频修剪相关操作的方法:
Future<File?> trim({
required File inputFile, // 输入音频文件
required Directory outputDirectory, // 输出目录
required String fileName, // 输出文件名
required AudioFileType fileType, // 音频文件类型
required AudioTrimTime time, // 剪切时间范围
}){...};
运行示例应用
- 导航到示例文件夹
cd example
- 安装依赖项
flutter pub get
贡献
您可以帮助我们改进这个项目,请随时打开一个新的问题或提交一个拉取请求。
示例代码
以下是一个完整的示例应用程序,展示了如何使用flutter_audio_trimmer
插件来选择和修剪音频文件。
import 'dart:io';
import 'package:flutter_audio_trimmer/flutter_audio_trimmer.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.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 const MaterialApp(home: MyHomePage());
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File? _file; // 存储选择的音频文件
File? _outputFile; // 存储修剪后的音频文件
// 选择音频文件
Future<void> _onPickAudioFile() async {
try {
Permission permission =
Platform.isAndroid ? Permission.storage : Permission.photos;
if (await permission.request().isGranted) {
FilePickerResult? result = await FilePicker.platform.pickFiles(
allowMultiple: false,
type: FileType.any,
);
if (result != null && result.files.isNotEmpty) {
setState(() {
_file = File(result.files.first.path ?? '');
});
}
}
} catch (e) {
_showSnackBar(e.toString());
}
}
// 修剪音频文件
Future<void> _onTrimAudioFile() async {
try {
if (_file != null) {
Directory directory = await getApplicationSupportDirectory();
File? trimmedAudioFile = await FlutterAudioTrimmer.trim(
inputFile: _file!, // 输入文件
outputDirectory: directory, // 输出目录
fileName: DateTime.now().millisecondsSinceEpoch.toString(), // 文件名
fileType: Platform.isAndroid ? AudioFileType.mp3 : AudioFileType.m4a, // 文件类型
time: AudioTrimTime( // 时间范围
start: const Duration(seconds: 50), // 开始时间
end: const Duration(seconds: 100), // 结束时间
),
);
setState(() {
_outputFile = trimmedAudioFile; // 更新输出文件
});
} else {
_showSnackBar('请选择要修剪的音频文件');
}
} on AudioTrimmerException catch (e) {
_showSnackBar(e.message);
} catch (e) {
_showSnackBar(e.toString());
}
}
// 显示提示信息
void _showSnackBar(String message) {
SnackBar snackBar = SnackBar(content: Text(message));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('插件示例应用')),
body: Padding(
padding: const EdgeInsets.all(20),
child: Center(
child: Column(
children: [
if (_file != null) Text(_file?.path ?? ''), // 显示选择的文件路径
ElevatedButton(
onPressed: _onPickAudioFile, // 按钮点击事件:选择音频文件
child: const Text('选择音频文件'),
),
const SizedBox(height: 20),
if (_outputFile != null) Text(_outputFile?.path ?? ''), // 显示修剪后的文件路径
ElevatedButton(
onPressed: _onTrimAudioFile, // 按钮点击事件:修剪音频文件
child: const Text('修剪音频'),
),
],
),
),
),
);
}
}
更多关于Flutter音频裁剪插件flutter_audio_trimmer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复