pickAudio method
Implementation
Future<void> pickAudio() async {
_setProcessing(true);
try {
final result = await FilePicker.platform.pickFiles(
allowMultiple: true,
type: FileType.audio,
);
if (result == null) return;
int counter = 0;
final List<VideoEditorAudioTrack> newTracks = [];
for (final pickedFile in result.files) {
if (pickedFile.path == null) continue;
final file = File(pickedFile.path!);
final duration = await _getAudioDuration(file);
final id = '${DateTime.now().microsecondsSinceEpoch}_${counter++}';
// Music longer than the video would run past its end: stop it there
// (the end handle can still be dragged out again).
final start = _currentGlobalTime.value;
final room = totalDuration - start;
final end = room > const Duration(milliseconds: 500) && room < duration
? room
: duration;
newTracks.add(VideoEditorAudioTrack(
id: id,
file: file,
duration: duration,
startTime: Duration.zero,
endTime: end,
projectStartTime: start,
volume: 0.5,
));
}
audioController.addAudioTracks(newTracks);
_error = null;
_saveState();
notifyListeners();
} catch (e) {
_setError('Failed to pick audio: $e');
} finally {
_setProcessing(false);
}
}