pickAudio method

Future<void> pickAudio()

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);
  }
}