getAudioDuration method

Future<Duration?> getAudioDuration(
  1. String filePath
)

获取音频时长

Implementation

Future<Duration?> getAudioDuration(String filePath) async {
  try {
    // 临时播放器用于获取时长
    final tempPlayer = AudioPlayer();
    await tempPlayer.setSource(DeviceFileSource(filePath));

    // 等待时长加载
    Duration? duration;
    final completer = Completer<Duration?>();

    tempPlayer.onDurationChanged.listen((d) {
      if (!completer.isCompleted) {
        completer.complete(d);
      }
    });

    // 设置超时
    Timer(const Duration(seconds: 3), () {
      if (!completer.isCompleted) {
        completer.complete(null);
      }
    });

    duration = await completer.future;
    await tempPlayer.dispose();

    return duration;
  } catch (e) {
    print('获取音频时长失败: $e');
    return null;
  }
}