splitAudioTrack method

void splitAudioTrack(
  1. dynamic idOrIndex,
  2. Duration projectTime
)

Implementation

void splitAudioTrack(dynamic idOrIndex, Duration projectTime) {
  int index = -1;
  if (idOrIndex is String) {
    index = audioTracks.indexWhere((a) => a.id == idOrIndex);
  } else if (idOrIndex is int) {
    index = idOrIndex;
  }

  if (index == -1 || index >= audioTracks.length) return;

  final audio = audioTracks[index];
  final splitAt = projectTime == Duration.zero ? _currentGlobalTime.value : projectTime;

  if (splitAt <= audio.projectStartTime || splitAt >= audio.projectStartTime + audio.effectiveDuration) {
    return;
  }

  final localSplitPoint = splitAt - audio.projectStartTime;
  final originalFileStart = audio.startTime ?? Duration.zero;
  final fileSplitPoint = originalFileStart + localSplitPoint;
  final originalFileEnd = audio.endTime ?? audio.duration;

  audioController.updateAudioTrim(audio.id, originalFileStart, fileSplitPoint);

  final newAudio = audio.copyWith(
    id: '${audio.id}_split_${DateTime.now().microsecondsSinceEpoch}',
    startTime: fileSplitPoint,
    endTime: originalFileEnd,
    projectStartTime: splitAt,
  );

  audioController.addAudioTracks([newAudio]);
  _saveState();
  notifyListeners();
}