Skip to content

Add progress callback for long-running conversions #16

Description

@sjoenk

Problem

Long-running audio conversions (especially on older/slower devices) provide no feedback to the caller. Users have no way of knowing whether the conversion is 10% or 90% complete, leading to a poor user experience.

Proposed Solution

Add an optional progress callback that reports decoding progress as a percentage (0.0 to 1.0):

Dart API

await AudioDecoder.convertToWav(
  inputPath,
  outputPath,
  onProgress: (double progress) {
    print('${(progress * 100).toStringAsFixed(0)}%');
  },
);

Implementation Approach

  • Use MediaExtractor.getSampleTime() relative to the total duration (from MediaFormat.KEY_DURATION) to calculate progress
  • Report progress via an EventChannel or periodic method channel callbacks
  • Throttle updates to avoid excessive cross-platform communication (e.g., report every 1-5%)

Expected Impact

  • Better UX — users see that the conversion is progressing
  • Low implementation effort — duration and current position are already available from the Android media APIs

Affected Files

  • lib/audio_decoder.dart (add onProgress parameter)
  • lib/audio_decoder_platform_interface.dart (platform interface update)
  • lib/audio_decoder_method_channel.dart (EventChannel or callback handling)
  • android/src/main/kotlin/nl/silversoft/audio_decoder/AudioDecoderPlugin.kt (progress reporting)
  • ios/Classes/AudioDecoderPlugin.swift (progress reporting)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions