dartEDFLib

Features

A wrapper library around EDFLib v1.23 inspired by pyEDFlib v0.1.28 to read/write EDF+ files. The definition of the EDF/EDF+/BDF/BDF+ format can be found under edfplus.info.

This package uses dart:ffi to call libEDF's C APIs, which implies that libEDF must be bundled to or deployed with the host application.

Installation

Make sure that you have installed/compiled EDFLib on your computer, and that it can be found by dylib. For example, you can set EDFLIB_PATH to the full path of the dynamic library (.dll/.so/.dylib), or to the folder where it can be found. (e.g. EDFLIB_PATH=C:\edflib\edflib.dll).

Add dartedflib to pubspec.yaml:

dependencies:
  dartedflib: ^0.1.0

Compiling EDFLib

Install gcc on your computer.

# windows
gcc -Wall -Wextra -Wshadow -Wformat-nonliteral -Wformat-security -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -shared edflib.c -o edflib.dll

# linux
gcc -Wall -Wextra -Wshadow -Wformat-nonliteral -Wformat-security -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -shared edflib.c -o libedflib.so

Usage

import 'package:edflib/edflib.dart';

final writer = EdfWriter(fileName: filePath, numberOfChannels: 1);
try {
  final channelInfo = {
    'label': 'ECG1',
    'dimension': 'mV',
    'sample_frequency': measurement.deviceConfig!.ecgSampleRate!,
    'physical_max': 10.0,
    'physical_min': -10.0,
    'prefilter': '',
  };
  writer.setSignalHeaders(channelInfo);
  final data = List<num>.filled(500, 0.1);
  writer.writeSamples([data]);
} finally {
  // don't forget to close it!
  writer.close();
}

Additional information

This package is currently developed by Praxa Sense.

Tests

To run the unit tests via vs code, add the dynamic library to the root folder of this repo, because settings.json contains a reference to EDFLIB_PATH:

"dart.env": {
    "EDFLIB_PATH": "."
},

The .edf-files found in test/data are direct copies from pyedflib/tests/data.

Regenerating bindings.dart

Make sure you have installed LLVM as described in ffigen.

In tasks.json there is a task to generate bindings.dart. It's important to notice that the edflib.h file in the root folder is taken for that. If you want to upgrade to a later version of EDFLib, replace edflib.h with a newer version and run the task.

Libraries

dartedflib
Wrapper around edflib by Teuniz.