readFile static method

Future<UMediaMetadata> readFile(
  1. String path
)

Implementation

static Future<UMediaMetadata> readFile(String path) async {
  RandomAccessFile? handle;
  try {
    handle = await File(path).open();
    final int length = await handle.length();
    if (length < 16) return const UMediaMetadata();
    final _Window window = _Window(handle, length);
    final Uint8List head = await window.read(0, 16);
    if (head.length < 12) return const UMediaMetadata();

    if (head[0] == 0x49 && head[1] == 0x44 && head[2] == 0x33) {
      final UMediaMetadata id3 = await _readId3v2(window, path);
      final UMediaMetadata v1 = await _readId3v1(window);
      return v1.merge(id3);
    }
    if (head[0] == 0x66 && head[1] == 0x4C && head[2] == 0x61 && head[3] == 0x43) return await _readFlac(window, path);
    if (head[0] == 0x4F && head[1] == 0x67 && head[2] == 0x67 && head[3] == 0x53) return await _readOgg(window);
    if (head[4] == 0x66 && head[5] == 0x74 && head[6] == 0x79 && head[7] == 0x70) return await _readMp4(window, path);
    if (head[0] == 0x52 && head[1] == 0x49 && head[2] == 0x46 && head[3] == 0x46) return await _readWav(window);
    return await _readId3v1(window);
  } on FileSystemException {
    return const UMediaMetadata();
  } on UMediaParseException {
    return const UMediaMetadata();
  } finally {
    await handle?.close();
  }
}