loadAudio function

Future<ProcessedAudio> loadAudio(
  1. String filePath,
  2. int sampleRate
)

Decodes a WAV file into raw PCM samples (mono), resampled to sampleRate.

Implementation

Future<ProcessedAudio> loadAudio(String filePath, int sampleRate) async {
  final file = File(filePath);
  if (!await file.exists()) {
    throw Exception('Audio file not found at $filePath');
  }

  if (!filePath.toLowerCase().endsWith('.wav')) {
    throw Exception('Unsupported format. Only .wav files are supported.');
  }
  // if (!filePath.toLowerCase().endsWith('.flac')) {
  //   throw Exception('Unsupported format. Only .wav files are supported.');
  // }

  final bytes = await file.readAsBytes();

  final wav = Wav.read(bytes);

  var samples = wav.toMono();

  if (wav.samplesPerSecond <= 0) {
    throw Exception('Invalid sample rate in WAV file: ${wav.samplesPerSecond}');
  }

  if (wav.samplesPerSecond != sampleRate) {
    samples = _resampleLinear(samples, wav.samplesPerSecond, sampleRate);
  }

  return ProcessedAudio(samples, sampleRate);
}