glintReadWav function
Read a WAV buffer (PCM 8/16/24/32, IEEE float 32/64, A-law, mu-law, EXTENSIBLE) into interleaved float PCM. Throws StateError on malformed or unsupported input.
Implementation
GlintDecodedAudio glintReadWav(Uint8List data) {
if (data.isEmpty) throw StateError('empty WAV');
final lib = _loadLibrary();
final fn = lib.lookupFunction<_WavReadNative, _WavRead>('glint_wav_read');
final free = lib.lookupFunction<_FreeNative, _Free>('glint_free');
final inPtr = calloc<Uint8>(data.length);
inPtr.asTypedList(data.length).setAll(0, data);
final sr = calloc<Int32>();
final ch = calloc<Int32>();
final fr = calloc<Int32>();
try {
final ptr = fn(inPtr, data.length, sr, ch, fr);
if (ptr == nullptr || ch.value <= 0) {
throw StateError('WAV read failed (unsupported format?)');
}
final total = fr.value * ch.value;
final pcm = Float32List.fromList(ptr.asTypedList(total));
free(ptr.cast<Void>());
return GlintDecodedAudio(pcm, sr.value, ch.value);
} finally {
calloc.free(inPtr);
calloc.free(sr);
calloc.free(ch);
calloc.free(fr);
}
}