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