The ELAN source tree is one of the modules in the larger TLA – MPI software repository. Maven is used to build the software and the source distribution now includes a Maven build file (this used to be an Ant build script with necessary libraries).

ELAN once started as a RMI based client-server system. The RMI stuff has been removed but traces can still be found in the package structure. The mpi.eudico.client.* packages mainly contain classes for the application’s frontend, user interface, media handling and so on. Classes in the mpi.eudico.server.* packages mainly deal with the internal data structures, like transcription, tiers, annotations and so forth.

The sources can be used freely in any non-commercial project. We would appreciate to receive a notification of the release of any software that re-uses parts of our code.

December 21, 2015: Release 4.9.2

Some code and libraries have been removed from the project. In the first place the classes related to the (demo) P2P collaborative annotation functionality have been removed; this feature was never implemented completely enough to be part of the production releases. The jxta.jar library is no longer required and has been removed from the Maven build file.
Secondly the SVG/2D annotation related source code and library have been removed. The implementation of the 2D graphic annotation feature depended on editing facilities of old QuickTime libraries which have been deprecated for a long time. The batik.jar library has been removed from the build path.

July 15, 2015: Release 4.9.1

The source distribution now also includes the source code of a little native library that emulates the sendpraat functionality. This has been part of ELAN distributions for some time already, it removed the requirement of installing the sendpraat executable separately.

There has been another minor change in the Recognizer API (concerning updating the locale). The demo package for Recognizer extensions, including the documentation, has now been updated. It is no longer necessary to include the elan.jar in the classpath, there is now a small recognizer-api.jar instead.

May 27, 2015: Release 4.9.0

The source code distribution now includes the source code for the “native” media players: this concerns non-Java, platform specific code written in C, C++ and or Objective-C. Building these native sources might require a bit more configuration efforts than building the main source tree of ELAN; brief instructions are included in READ ME files.
A considerable amount of refactoring has been performed in the main, Java source tree of ELAN, such as the use of Generics in many places. There have also been many changes in the eudico.server.* packages, the classes that represent the “annotation document”. Several interfaces like Transcription, Tier, Annotation etc. hadn’t been updated consistently over the years; this has now been corrected, at least to some extent, leading to many changes all over the source tree.

There has been a minor change in the Recognizer API concerning “live” logging display. The demo package for Recognizer extensions still has to be updated.

December 05, 2014: Release 4.8.0

The source code is now distributed with a Maven pom.xml file for compiling and packaging instead of an Ant build file. So from this version on Maven needs to be installed to build ELAN from source. The libraries needed for building ELAN are no longer part of the distribution because Maven downloads them from a repository. Instead of some 27 Mb the distribution zip file is now 5 or 6 Mb.
The Maven command mvn compile compiles the sources, mvn package creates a jar and executes ELAN. Packaging without launching ELAN can look like this mvn package -P !win or mvn package -P -mac (or -linux) and running ELAN can be done with this command mvn test.

May 21, 2013: Release 4.6.0

In this release the media player identified as “Native Windows Media Player” has been removed. All dependencies on the JNIWrapper libraries are now gone.
From the ELAN code base the package mpi.eudico.client.annotator.nativemedia.quartztypelib has been removed, as well as all references to it (or to classes in this package).
Apart from that, some old, unused interfaces and classes were removed from several packages in mpi.eudico.server.corpora. Some existing interfaces had to be adapted slightly for this code clean up.

December 20, 2012: Release 4.5.0

For this release both the user interface and the API for Recognizer extensions have changed. One of the main changes is in the way input for the recognizers in the form of selections or tiers is dealt with; in the user interface there is now, per parameter, the choice between manual selections, a tier or a file. The list of linked media files has also moved to the parameter panel.
The API for the (Java) recognizers changed a bit, both the mpi.eudico.client.annotator.recognizer.api.Recognizer and the mpi.eudico.client.annotator.recognizer.api.RecognizerHost interface have been modified such that it breaks backward compatibility (unfortunately). Although these are only small changes, existing extensions will have to be recompiled. Recognizers that implement their own parameter panel can obtain the above mentioned selections panel from the recognizer host and thus allow users to add manual selections, a tier or a file.
Apart from that support has been added for new features that are part of the AVATecH Component Interface specifications (to be updated). Recognizers can include help or documentation, accessible to the user via a “Help” button, and there is now support for xml tier files containing multiple, independently aligned tiers. Furthermore there can now be more than one .cmdi files (i.e. recognizers) per folder, the name “recognizer.cmdi” is no longer mandatory.
The package containing the new API can be downloaded here:
Recognizer API V3

February 03, 2012: Release 4.2.0

In this release a new utility class has been added for the creation of file dialogs. By default on Mac OS it creates a “native” file dialog, with a sidebar, a search field and recent places list. The class is:
The packages for the single file search, in, are now part of the ELAN source tree. Therefore the mdsearchapplet.jar is no longer needed in the classpath.

June 01, 2011: Release 4.1.1

In this release some changes in the structure of the source distribution have been made.
All jars are now directly in the lib directory except for the JMF jars. The JMF jars as well as all native libraries are now in a per-platform subfolder (windows, mac or linux). The Ant build file has been simplified slightly because of these changes. At the MPI Maven is now used as the preferred build tool and upcoming source releases might contain a Maven build file as well.
The source files for one of the media players on Windows (“Native Windows Media Player”) that require the commercial JNIWrapper software for compilation, are no longer part of the source distribution. These are only available as a binary now (sources available on request). Some jars are new (mpi-util, mdsearchapplet), replacing older jars, as a result of the restructuring of the larger MPI source tree.
Classes that used to be in the mpi.util packages are now in nl.mpi.util packages.

December 23, 2010: Release 4.0.0

This release contains a new in-house developed media player for Windows, identified as Java – DirectShow (JDS) player. It is similar to the Native Windows Media Player but the JDS player has been implemented without using the (commercial) jniwrapper libraries. Instead, most of its functionality has been developed “natively” in C/C++. There is now a Java package nl.mpi.jds and the native code is in the file DSPlayer.dll in the lib folder (the native C/C++ sources or not part of the distribution).
Other changes in this release:

  • new version of the EAF schema to accommodate external controlled vocabularies and links to lexicon services
  • the lexicon component for LEXUS has been implemented and added as an extension. The intention is to publish an API for lexicon extensions so that other solutions can be added as well. This is not yet the case.
  • a number of (widely used) files have been moved from the package mpi.util to mpi.eudico.util. Other classes of mpi.util are now in a separate jar, the sources are no longer part of the ELAN distribution (due to changes in the structure of the MPI SVN repository).
  • similar for the package, the sources are currently no part of the ELAN distribution

May 07, 2010: Release 3.9.0

This release contains important changes to the Recognizer API. In the ELAN user interface a Video Recognizer tab has been added, input segments can have a label, complete tiers can be selected as input to recognizers, saving and loading of parameter settings is introduced and recognizers can provide a report of the process. The recognizer interface has changed such that recognizers have to be recompiled in order to be compatible with the current version.
Recognizer extensions now need to be installed in a separate folder within the extensions folder and need to be accompanied bij a CMDI component metadata file (more information here). Java libraries should be in one or more jar files, native libraries should be in the same folder and they can be loaded in the usual way. The api package contains updated source files, documentation and example cmdi files, download it here.

August 26, 2009: Release 3.8.0

To accommodate the introduction of user definable keyboard shortcuts, a lot of CommandAction classes have been changed. A new utility class has been added containing much of the new functionality: mpi.eudico.client.annotator.commands.ShortcutsUtil.

The sources of this release also contain the preliminary, rough and sparsely documented source files of the Cocoa-QuickTime player solution.

April 01, 2009: Release 3.7.2

This release introduces an in-house developed media solution for the Mac, based on Cocoa and QuickTime. Currently it is only available in compiled form in the source distribution.

January 29, 2009: Release 3.7.0

Main changes in release 3.7.0:

In this release a viewer has been added that can display metadata that are relevant to the annotation document. The viewer resides in the tabpane. There is built-in support for IMDI metadata files, but extensions can be added to support other formats. The approach is similar to the one chosen for the Audio Recognizer and the Timeseries viewer (see notes on previous releases).
A new package has been added which contains a subpackage and a few default components. The package contains an interface MDServiceProvider that should be implemented by any other metadata provider. The methods to implement are only documented in the Javadoc comments of the methods.
A jar containing an implementation of the MDServiceProvider interface can be placed in ELAN’s “extensions” folder.

August 14, 2008: Release 3.6.0

Main changes in release 3.6.0:

In this version an extensible framework has been implemented for Audio Recognizers. An API has been defined that allows developers to create and add their own audio recognizers to ELAN. An example project for such a recognizer is available for download here.
The package contains documentation in a “read me” file, source files for a demo implementation, an Ant build file and the Java interface files that constitute the API. An implementation of the API must be packaged in a jar and copied to the new “extensions” folder in the ELAN install folder.
When a Recognizer has correctly been loaded and identified by ELAN it is added to the list of recognizers in the Audio Recognizer tab. When the host (ELAN) hands the media file(s) to the recognizer it should state whether it can handle the file. It should also state whether or not example selections should be passed to the recognizer before it starts the recognition process. ELAN has an area available for a panel that a recognizer can provide e.g. containing control elements for that recognizer. If the constraints for the Segmentation and Segment objects are met, the Segmentations can be converted to tiers and annotations by ELAN’s segments-to-tiers function.

Jars containing a TSServiceProvider (Timeseries Service Provider) can from now on also be placed in the extensions folder.
There is no longer a need for the META_INF/services folder and the mpi.eudico.client.annotator.timeseries.spi.TSServiceProvider file in the jar.


  • a new package has been added mpi.eudico.client.annotator.recognizer, containing the sources of the implementation of the Audio Recognizer API.
  • an example implementation of the API including documentation can be downloaded here
  • ELAN can now load extensions from an “extensions” folder in the install folder
  • TSServiceProviders can be placed in this extensions folder as well

May 19, 2008: Release 3.5.0

Main changes in release 3.5.0:

  • new EAF schema, version 2.6, that adds an element EXTERNAL_REF to accommodate references to a data category in the ISO Data Category Registry (DCR).
  • added a new package mpi.dcr containing the DCR connector and related classes.
  • the language files for the search user interface elements have been renamed from ( to

March 04, 2008: Release 3.4.0

The source distribution contains new JavaHelp related libraries to make everything compile, but the ELAN help files themselves are not included. If necessary they can be copied from an installed ELAN (
A new TSServiceProvider has been developed to add support for timeseries data stored in a .csv or tab-delimited text file.

December 13, 2007: Release 3.3.0

Main changes in release 3.3.0:

  • new EAF schema, version 2.5, that adds a relative path attribute to media descriptors.
  • introduction of ACMTranscriptionStore.getCurrentTranscriptionStore() to get the latest version of the loading and saving utility.

October 04, 2007: Release 3.2.0

Main changes in release 3.2.0:

  • the distribution now comes with a precompiled jar for the Windows native media based player. The source tree can now be build without obtaining a JNIWrapper license. However, the target "copy-native" in the Ant build file copies the relevant sources back to the main tree and, after manually adjusting the classpath in the build file, it is still possible to use and change all sources (if one does have a license).
  • TimeSeriesViewer: the second parameter of the setTracksForPanel method has been changed from a String array to a (Array)List of Strings
  • TimeSeriesViewer: the return type of the getTracksForPanel method has been changed from String array to a (Array)List of Strings
  • several utility classes have been moved or removed
  • annotation ID’s are now maintained over successive save
    actions. Once an annotation has an id it will always keep that id and
    an id, once used, will never be reused for an other annotation.

May 07, 2007: Release 3.1.0

Main changes in release 3.1.0:

  • the distribution now comes with ComfyJ 2.3 (includes JNIWrapper 3.5) libraries as the default. Developers should either obtain a ComfyJ license or change the build script and some classes (see notes on release 2.6), if they wish to continue to use an older JNIWrapper version.
  • the mpi.library package no longer exists. Most classes have been moved to mpi.util

February 07, 2007: Release 3.0

Main changes in release 3.0:

  • there is a new main class: mpi.eudico.client.annotator.ELAN
    ElanFrame2 still has a main method but it is advised to use the new main method.
  • a FrameManager has been introduced, keeping track of open windows and updating the ‘Window’ and ‘Recent Files’ menus.
  • a number of methods have been moved from ElanFrame2 to a new type of Actions that are not associated with a particular Transcription
    (in package
  • The ControlledVocabulary and CVEntry classes have been moved from
    mpi.eudico.server.corpora.clomimpl.type to mpi.util.
  • the length of the array of arguments of the NewAnnotationCommand has been reduced to 2; the ViewerManager has been removed as an argument.
  • a new EAF Schema, EAFv2.4.xsd, has been released; ELAN now writes eaf files according to this new schema. An ANNOTATOR attribute has been added to the TIER
    element, a PROPERTY element has been added to the ANNOTATION_DOCUMENT element and some ID/IDREF pairs have been replaced by xsd:key/xsd:keyref pairs.
  • Linux: in case an LD_PRELOAD environment variable needs to be exported, only a few lines in the ELAN launch script need to be uncommented. This export fails on some systems when there is a space character in the path to the JRE directory.

May 31, 2006: Release 2.6.1

There are only a few changes of interest to developers in this release.

  • TimeSlots are now added in one single operation to TimeOrderImpl when an .eaf is loaded. This improves the performance significantly.
  • memory management: when an ELAN window is closed only part of the used memory seems to be freed. Some methods have been added (ElanFrame2, ViewerManager,
    ElanLayoutManager etc) to make objects reachable for the garbage collector. This remains a point of concern.
  • when secondary linked files (like time series files) are missing this is handled in a way similar to missing media files.

See the ELAN release notes for further information on changes.

April 05, 2006: Release 2.6

As always the new features in ELAN 2.6 are described in the ELAN release notes.
A new viewer for timeseries data has been (partially) implemented: the TimeSeries Viewer. Currently there is support for just two file types, one of which is a MPI proprietary .log file containing data from a “Cyberglove”. Each sample can consist of approx. 100 measurement values. The other supported file type is a plain text file (.txt) containing time – value pairs on each line, separated by a whitespace or a tab. It is assumed that it is a continuous rate sample file (i.e. a constant time increment between sample).
The time information can be in milliseconds or in format.
For example:

0.010  nnnn
0.020 nnnn
0.030 nnnn

There doesn’t seem to be standard for timeseries data and the above format certainly isn’t.
There are two ways to use your own data in the time series viewer.

  • convert your file(s) to the above format
  • implement an import module for your file type and either add it to the
    ELAN source tree or register it as a so called “service provider” (see below)

Most source files involved in this viewer can be found in the package:


In this package there is a package spi containing the interface TSServiceProvider. An implementing class could be placed in a .jar on the classpath.
The jar should contain a folder META_INF/services, containing a file named mpi.eudico.client.annotator.timeseries.spi.TSServiceProvider, containing a single line which should be the fully-qualified name of your implementing class. (All according to the Java documentation, this has not been tested yet.)

If any user interaction is needed to configure the track(s) from your files, the provider’s isConfigurable() should return true and the getConfigPanel() should return a Component that can be placed in a JDialog. (Example in the glove package.)

Track data are stored in a mpi.eudico.client.annotator.timeseries.TimeSeriesTrack implementor; the only one available yet is ContinuousRateTSTrack, storing the track
data in a single float array.
In order to be able to store configuration properties of source files and tracks, a source file object is wrapped in a mpi.eudico.client.annotator.timeseries.config.TSSourceConfiguration object and a track object is wrapped in a mpi.eudico.client.annotator.timeseries.config.TSTrackConfiguration object.

Known issue:

  • The distribution comes with jniwrapper 2.x. If you only have a license key for a jniwrapper
    3.x version, you should replace the jniwrapper libraries and edit one mpi source file:


    Change the line

    mediaControl = FilgraphManager.create(new ClsCtx(ClsCtx.CLSCTX_INPROC_SERVER));


    mediaControl = FilgraphManager.create(ClsCtx.INPROC_SERVER);

November 02, 2005: Release 2.5

The new features in ELAN 2.5 are described in the ELAN release notes.
Most changes can be found in classes in the
mpi.eudico.client.annotator.* packages.
For developers mainly interested in the media playback solution, it may
be of interest that the class “IBasicVideoImpl” in package
“mpi.eudico.client.annotator.nativemedia.quartztypelib.impl” has been
extended with a method getCurrentImage2( Parameter[] p). This
method has been introduced for succesful grabbing of a video

The Ant file has been slightly changed in the definition of the classpath.
The source tree now also compiles against Java 1.5.

August, 2005: Release 2.4.2

This is the first (snapshot) source release with an Ant build file, libraries etc.
Also the first release after a thorough refactoring of the package structure
and the removal of the RMI related constructs.

Last modified: 01 June 2011