BCI2000 Binaries

From BCI2000 Wiki
Revision as of 12:06, 3 October 2022 by Mellinger (talk | contribs) (→‎Non-Windows Operating Systems)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Access to BCI2000 is provided to users who have agreed to the terms of the GNU General Public License (GPL). Thus, you need a user account to download the binary version of BCI2000, and you need to take an extra step and agree to the GPL at https://www.bci2000.org/useradmin/.

Latest Released Build

The latest binary release of BCI2000 is always available at


The latest current release is from 2020.

Building BCI2000 from the current source

A step-by-step tutorial describing the process of building BCI2000 from source may be found here.

Contributed Code

BCI2000 modules from the contribution section are not part of the BCI2000 core distribution. Especially, this is the case for a number of source modules. For convenience, we provide an extended binary distribution that includes binary versions of BCI2000 contributions. This extended distribution is always built from the same source code version as the most recent core distribution, and is available at


NOTE: While we do our best to maintain contributed code, we cannot promise that it is functional, nor provide extensive support. This is especially true in case of contributed source modules which we cannot test for functionality in the absence of the respective hardware. When you experience problems with contributed code, please contact the contributor indicated on the contribution's reference page (accessible through Contributions:Contents).

BCPy2000 Contribution

The extended distribution does not contain the BCPy2000 contribution. Rather, all required executables may be downloaded here.

Non-Windows Operating Systems

BCI2000 runs on both Linux and OS X systems. However, there is no binary distribution for those systems, so it will be necessary to compile BCI2000 before using it (instructions may be found here).

NOTE: Only a minority of source modules support operating systems other than Windows. Generally, source modules that receive data through a TCP connection may work on non-Windows systems (though some tweaks might be required to properly generalize Windows-centric header files). Source modules that directly connect to an amplifier using a vendor-supplied SDK/API will only work under Windows. This includes source modules that connect to consumer headsets (EMOTIV, NeuroSky MindSet).

Version History

August 2020 Version 3.6

Version 3.6 follows directly on Version 3.0.5. The aim with Version 3.6 is to have a well-tested and stable release of high quality.

Version 3.6 with contributions

Version 3.6 without contributions

Version 3.6 with extensions

Source code revision: 6143

Version 3.6 beta Builds

For quite a while, BCI2000 was being provided as a series of beta builds, without resulting in a Version 3.6 release.

March 2018 with contributions

March 2018 without contributions

March 2018 with extensions

Source code revision: 5711

December 2016

December 2016 with extensions

Source code revision: 5590

October 2016

October 2016 with extensions

Source code revision: 5570

Version 3 Builds

July 2012 Version 3.0.5

Source code revision: 4230

New in this version:

  • Extended Operator Scripting: Operator scripting has been extended to provide a basis for cross-platform scripting and testing of BCI2000.
    • Script commands may now modify parameters and states, and send real-time events to be recorded by the source module.
    • IF, WHILE, UNTIL, FOR control constructs are available to write complex scripts.
    • Scripts may be executed as functions with arguments, and a return value.
    • Operator modules may now receive state and signal information from the Application module. This information may be queried by a script.
  • Operator Remote Control
    • A telnet server component inside the OperatorLib accepts connections, and executes script commands when activated.
    • A BCI2000Shell program starts up the Operator module, and executes Operator scripts from the command line.
    • Added a BCI2000 remote control interface that wraps up a telnet connection to the Operator module. This is exported by a BCI2000RemoteLib, and used by a number of contributed components that wrap it up in form of a COM/ActiveX Automation object (BCI2000Automation), a command line tool (BCI2000Command), and a Python module (BCI2000PythonBindings).
  • Cross-platform Support
    • Batch files and testing scripts have been updated to be Operator Scripts executed through BCI2000Shell. This way, they run on all target platforms.
    • Linux is now fully supported as a target platform (tested with Debian Squeeze and Wheezy on both x86 and amd64 platforms).
    • OSX is now fully supported as a target platform (tested on 10.5.8 and 10.7).
  • Operator UI
    • Main window is now resizeable.
    • Function buttons may be triggered by keyboard function keys.
    • Improved appearance on non-Windows systems.
    • Introduced an AutoScale option for visualization displays.
  • AppConnector Protocol
    • Stability and functionality improvements to the AppConnector interface.
    • A new PauseApplication state allows external applications to indefinitely interrupt a task by setting PauseApplication to 1.
    • A new ShowAppLog parameter allows to suppress display of the application log.
    • A SpellerMenu state records the current speller menu, and allows switching speller menus via the AppConnector protocol.
  • Random Number Generation
    • RandomSeed parameter is now managed by Operator module unless specified on the command line, or published by a core module.
    • RandomGenerator instances now have IDs that enter into the random seed in order to avoid correlated random numbers from multiple RandomGenerators.
  • Core Module behavior
    • Avoiding firewall messages by option to listen on localhost address only.
    • Core modules now display error dialog boxes asynchronously to avoid blocking of Operator scripts.
    • Core modules now wait for any previous instances to terminate, with a timeout of 5s.
  • Timing and Speed Improvements
    • SSE2 configuration option for creation of faster code.
    • g.USBamp source module is now based on BufferedADC.
    • Profiling-guided speed improvements in FFTSpectrum filter.
    • Speeded up OfflineAnalysis by using the mem mex file's ability to compute multiple spectra.
  • More options, and easier application of BCI2000CHAIN to data existing in Matlab (J. Hill).
  • New SpectralEstimation filter and SpectralSignalProcessing provide unified parameterization for FFT and AR spectral estimators to facilitate comparison.

BCI2000 framework:

  • Target grouping for better overview and partial builds in Visual Studio (non-Express) (G. Milsap).
  • NewBCI2000FilterTool does the cmake fiddling for making a command-line filter-tool target out of a custom Filter previously created with NewBCI2000Filter (J. Hill).
  • Improvements in thread and exception safety.
  • Signal and parameter labels are now case-insensitive.
  • StandaloneFilter and StandaloneChain classes support use of existing filters outside the main processing chain.
  • GenericFilter now has a separate Publish() member function, while parameters and states may still be defined from a filter's constructor.
  • FFTLibWrapper supports complex-valued DFTs, dynamic loading of FFTW3 library on non-Windows platforms.
  • A minimal COM library simplifies creation of DLLs with COM objects with MSVC Express and MinGW, removing the need for ATL or MFC components.
  • Borland/CodeGear/Embarcadero C++ Builder project files have been moved into a separate build directory, and are auto-created for easier maintenance.

Bug fixes in this version:

  • StimulusTask now declares the PreRunDuration parameter with a minimum value to fix a problem with FilePlayback.
  • Fixed data type and sign when interpreting the SampleOffset visconfig in the Operator module.
  • Fixed std::inner_product end iterator bug in FIRFilter.
  • Fixed an event-related error message when using certain loggers.
  • Removed inadequate warning about stimulus duration for durations specified as zero.
  • CoreModule class now calls StopRun() when an error occurs during processing.
  • Fixed CAR filtering matrix in OfflineAnalysis tool.
  • Fixed deadlocking issue in mem mex file.

New Contributions in this version:

  • HilbertSignalProcessing contribution (C.M. Potes, J. Hill).
  • AudioExtension allows both real-time creation and co-registration of audio (G. Milsap).
  • BCI2000PresentationLink allows to present stimuli and feedback using the NBS Presentation software, while using BCI2000 for recording and computation.

Changes/bug fixes to contributed code:

  • Allowing for gHIamp configurations with less than 256 channels.
  • FilePlayback issues warning when SampleBlockSize mismatch might affect played-back states (J. Hill).
  • GazeMonitorFilter: add a parameter so that we don't *have* to see the fixation-zone ring (J. Hill).
  • Neuroscanget tool no longer activates AlignChannels.
  • RDAgetparams now reads BrainVision channel names into ChannelNames parameter.

Python-related changes:

  • Fixed BCPy2000 bug whereby Suspend-then-Resume caused immediate StopRun and/or modules to hang (J. Hill).
  • Added Pyff link contribution.
  • Python related modules (BCPy2000, Pyff filter) now support Python 2.7.
  • Added Python bindings to BCI2000RemoteLib.
  • Python related modules will now link on non-Windows systems.
  • Removed broken support for Python 2.4 library.

February 2012 Version 3.0.4

Source code revision: 3798

New in this version:

  • Native Win64 support in g.USBamp source module.
  • Batch files now load a parameter file from parms/examples when starting up a configuration.
  • Parameter fragments don't define TransmitChList any more, so they are compatible with example parameter files.
  • Updated ParamList::Load() so that command line parameters can be loaded from parameter files, unlike other SYSTEM-section parameters. (A. Wilson)
  • Time-valued parameters may now be specified in sexagesimal notation (e.g., "1:00" rather than "60s").
  • DummySignalProcessing now includes ExpressionFilter. Module still defaults to pass-through behaviour since Expressions defaults to empty. (J. Hill)


  • Standard math functions added (such as sqrt(), sin(), floor()).
  • Introduced variables and assignment, constants, and C++-style comments.
  • State values may now be assigned from expressions.
  • For greater efficiency, expressions are now compiled prior to evaluation.

Signal Processing

  • Removed some bottlenecks from AR spectrum computation.
  • SpatialFilter and ARFilter reuse threads rather than spawning on each data block.
  • SpatialFilter uses threading with all filter types.
  • Provided Small and Large Laplacian configurations to parms/fragments/spatial_filters.


  • Command line tools now have --input, --output, and --buffer options to allow optimizing execution speed.
  • bci_dat2stream, and the BCI2000CHAIN.m wrapper, accept --start=TTT and --duration=TTT flags to specify a portion of the data file to stream (J. Hill)
  • Command line tools that output text will now use the DOS/Windows line ending convention when executed under Windows.
  • BCI2000CHAIN is made more robust to old/new compiled versions of the command-line tools. 
Also it has expanded documentation, new input flags allowing explicit specification of whether the output 
should be 2D or 3D, better detection of the appropriate dimensionality when this is left unspecified, 
and new output fields supplying appropriate timebases for both 2D and 3D versions (J. Hill)
  • RENAME_BCIDAT has a "dry-run" mode and support for custom datestamp formats

BCI2000 framework

  • New BufferedADC class provides buffered, multi-threaded data acquisition transparently to its descendants.
  • A new StatisticalObserver library in extlib/math allows to do multivariate statistics on streams of data.
  • A glob-like WildcardMatch() function is now available.

Bug fixes in this version:

  • Removed some performance bottlenecks in GraphDisplay and ImageStimulus classes.
  • Fixed problems with displaying transparent stimulus images, and highlighting.
  • Fixed a problem with losing OpenGL context when unhiding a DisplayWindow. This would make textures unavailable in CursorTask after a second click on "SetConfig".
  • Restored backward compatibility with modules pre r3521.
  • Audio stimulus volume setting via parameters is functional again.
  • Fixed broken test mode in P3Speller.
  • Memo visualization in Operator module should now correctly handle Shift-JIS characters.
  • More consistent core module behavior when "Running" state is set from inside any of the modules, especially on the first block of data.
  • ParamList::Load() now uses a parameter's section from the target list, rather than the list of loaded parameters, to determine which parameters are unwanted.


  • Fixed P300Classifier crash that would occur for data recorded with PreSequenceDuration=0.
  • BCI2000FileReader now properly closes its file handle from the destructor (fixes a file handle leak in load_bcidat()).
  • BCI2000FileInfo now again opens files specified on the command line.
  • bci_stream2table now properly deals with all kind of input (with or without parameters, states without signal).
  • Removed command-line tools' dependency on libeng and libmex.

Changes to contributed code:

  • Added B-Alert source module (G. Raphael).
  • More informative error handling in Biosemi2Client; added Sourcefilter.
  • Fixed a few potential bugs in Emotiv source module.
  • A number of small bug fixes in gHIampSource (G. Milsap).
  • Added Neuralynx source module (G. Dimitriadis).
  • Updated NeuroSky module to version 4.2, fixed a small bug where devices wouldn't connect because preflight and initialize try to connect to the device too quickly in succession (G. Milsap)
  • vAmp source module is now starting up properly (was broken in 3.0.3).
  • WiimoteLogger makes sure that no unintended connect/disconnect occurs during runs (J. Hill).
  • Added StatisticsSignalProcessing contribution, which allows freely configurable statistics over data passing through a StatisticsFilter.
  • Fixed a computation bug in CoherenceFilter; added a Matlab function that compares CoherenceFilter output against MSCohere.

October 2011 Version 3.0.3

Source code revision: 3604

New features in this version:

  • Startup batch files in the batch directory are now loading amplifier configuration automatically.

  • Operator module
    • displays the batch file's name in its title bar,
    • displays last save/load operation in configuration dialog's window title,
    • "Configure Save/Load" dialogs display parameters in a hierarchical fashion.
  • gUSBampADC impedance-check output made more human-readable. (J. Hill)
  • The KeystrokeFilter is now present in all Application modules by default.
  • EEGLAB plugin: Start over with a redesigned plugin. It is now a pop_function, and more fields are imported into the EEGLAB data structure. (C. Brunner)
  • BCI2000Chain is smarter about how it parses options, and has a -k option for keeping the temporary files. (J. Hill)
  • More useful error message displays BCI2000 download information when a mex file cannot be found for the current platform.
  • P300Classifier now uses the TargetDefinition matrix' Enter column when the Display column is empty (affects the "Predicted" column in the Details pane).
  • The OfflineAnalysis elocHelper tool now runs on 64 bit Windows systems.
  • load_bcidat reports file sizes in an additional output parameter.
  • New SimpleCert tool efficiently displays timing information in a graph. (G. Milsap, J. Hill)

Bug fixes in this version:

  • Preflight could not be completed a second time once an error had occurred.
  • In core modules, state information would be reset between the first and second data block of a run.
  • SourceFilter would always report invalid filter frequencies when activated.
  • StimulusPresentationTask now correctly determines attended targets when EpochsToAverage is set to 0.
  • P3Speller bug displaying a message about "No RTTI available" under certain conditions.
  • Fixed font size issue when running CursorTask in low resolution.
  • Fixed possibility of infinite loop in shared/modules/application/gui/StatusBar class.
  • In release builds, miniature Application windows in Operator were sometimes non-functional, or would result in out_of_memory exceptions in the Operator module.
  • Fixed "sticking color" behavior in Operator log. Also, messages should no longer be inserted in the middle of the log window.
  • In Operator module, keyboard control for visualization windows is working again.
  • Fixed unwanted enlargement of status bar in Operator when displaying messages containing newlines.
  • Catching unhandled exceptions in all command line tools.
  • bci_dat2stream now sends all state information rather than ignoring multiple state vector samples per block.

Enhancements to the BCI2000 programming framework:

  • Minor documentation tweaks and minor changes to bootstrapping utility and templates. (J. Hill)
  • Incorporated Linux compatibility patches by N. Urii.
  • Added Layering scheme to Operator visualizations; visualizations may now be displayed on top of each other (G. Milsap)
  • Introduced BufferedADC as a base class for ADCs that transparently handles buffering of acquired data.
  • Ported 3DAPI demo/test program to Qt.

*Drawing of GUI elements is now faster because it occurs directly on a widget rather than an offscreen bitmap.

  • When a 3D scene is present, all drawing now uses OpenGL via QGLWidget. This allows for GUI::GraphObjects such as text messages to appear on top of the Scene.
  • GraphObjects now have OnMove() and OnResize() event handlers to avoid triggering OnChange() for each call to GraphObject::SetDisplayRect(). Thus, ImageStimulus objects may be efficiently moved around in a scene.

*FilterCombination template classes allow serial and parallel combination of filters.

  • IdentityFilter to be used in a ParallelCombination, or in a dummy signal processing module.
  • New ApplicationWindow base class for application windows allows multiple filters to maintain GraphObjects in a common application window.
  • Reentrancy and exception safety for ArithmeticExpression and Expression classes.
  • Thread-safety for bcierr, bciout, and bcidbg streams.
  • CfgID class to hold configuration option IDs and their string representation in one place. 
*Added VisID as a data type under shared/types.
  • Introduced Uncopyable and Lockable utility mixin classes. 
*Added a Runnable class, along with FunctionCall/MemberCall templates that create Runnables from function calls. 
*Added a RunnerThread class that runs Runnables in a separate thread.
  • Various improvements related to catching and reporting of unhandled exceptions.
  • bciexception macro provides a convenient way to construct exception messages using stream inserter syntax.
*bciassert macro to send information about failed assertions to the Operator log.
  • Introduced static libraries for all types of core modules to improve build speed.
  • Generalized SETUP_EXTLIB_DEPENDENCIES macro to simplify addition of extlib CMake include files.
  • Introduced a CMake-created module inventory such that BCI2000Launcher is built with information about all existing modules.

Bug fixes and enhancements to contributed code:

  • Fixed mod 0 bug in DataGloveLogger. (J. Hill)
  • Added a GazeMonitorFilter which greatly eases using the EyetrackerLogger. (G. Milsap)
  • Fixed a bug in WebcamLogger regarding asynchronous state logging. (G. Milsap)
  • FilePlaybackADC: added an option to play the biosignal data backwards. (J. Hill)
  • Added gHIampSource module. (G. Milsap)
  • Emotiv source module no longer sends warnings for debugging purposes. (J. Hill)
  • EyetrackerLogger would crash due to dereferencing an uninitialized pointer.
  • NIDAQ-mx source module would crash on "Suspend" or "Quit" due to deleting an uninitialized pointer.
  • Reintroducing workaround for reinitialization problem in the Biosemi source module. (G. Schalk)

June 2011 Version 3.0.2

Source code revision: 3359

New features in this version:

  • Added a Matlab wrapper to simplify using BCI2000 command line tools for offline analysis (tools/matlab/bci2000chain.m) (J. Hill)
  • Added mex file binaries for 64-bit Intel Mac (J. Hill)
  • Added TargetSequence parameter to FeedbackTask to allow deterministic sequences in feedback-based application modules (J. Hill)
  • Added a "show numeric values" option to standard polyline operator visualizations (J. Hill)
  • Re-introduced Shift-JIS compatibility into application modules.
  • Normalizer optionally writes its updated Offsets and Gains parameters into a parameter file, so they don't get lost when quitting BCI2000 (J. Hill)
  • Introduced new "P3Speller compatible" sequence type into StimulusPresentation module and P300Classifier tool (J. Mellinger)
  • Removed detailed message statistics from the Operator's "connection info" overview (J. Mellinger)
  • Updates to application windows are now handled much more efficiently, improving overall timing on slower systems, and systems with large displays (J. Mellinger)
  • LinearClassifier now uses its weights to guess the range of its output signal, improving appearance of its output in visualizations (J. Mellinger)
  • Removed use of GraphObject::CompareByZOrder as a comparator for the GraphDisplay object set. Now, GraphObjects are sorted on demand rather than in their container, allowing ZOrder to be a writable property of GraphObjects (J. Mellinger)

Bug fixes in this version:

  • OfflineAnalysis now runs even if current working dir is outside its directory (J. Hill)
  • Some fixes related to signal sampling rates (J. Mellinger)
  • No more "Unexpected Param message" error when a filter in a source module would set the Running state to 0 (J. Mellinger)
  • Buildmex script now works again in OSX (J. Mellinger)
  • Fixed initialization bug in SignalGeneratorADC: Signal amplitude would not be reset to user setting in Initialize() when previously modulated with the mouse (reported by ynakajima)
  • Fixed a bug in gUSBamp source module that would cause irregular timing, and even bluescreens (J. Mellinger)
  • gUSBampSource works with multiple amps again (J. Hill)
  • P3Speller: Corrected next target computation in copy spelling mode; there was a problem when multiple characters were entered by a target (J. Mellinger)
  • Fixed filter instantiation bug (filters could appear twice in the filter chain) introduced in r3226 (J. Mellinger)
  • Adapted load_bcimat to the latest version of bci_stream2mat (J. Mellinger)
  • Fixed Borland/RAD Studio project files and compilation issues (J. Mellinger)
  • Fixed a bug that would crash the P3Speller module when the TextWindowEnabled parameter had been switched on, and then switched off again (J. Mellinger)
  • Added SourceFilter (HP, LP and Notch filtering) back to gMOBIlab and gMOBIlabPlus source modules which had been missing from v3 (J. Mellinger)

Changes to contributed code:

  • Fixed a failed assertion bug in MFCdemo application (J. Mellinger)
  • vAmp source module was broken in v3, works again now (M. Schatt)
  • Suppressed unnecessary warnings, added slightly-smoother support for legacy parameters in FilePlayback module (J. Hill)
  • Support for logging Tobii Eyetracker and Wiimote state into BCI2000 data files (G. Milsap)
  • New CoherenceFilter contribution computes magnitude squared coherence between spatially filtered input signals (J. Mellinger)

May 2011 Version 3.0.1

Source code revision: 3261

New features in this version:

  • SignalGenerator, FilePlayback and PythonSource all now have the option of *not* checking realtime operation, 
since they may be used to play artificial signals in non-real time. 
(J. Hill)
  • Visualization windows now have a status bar; keyboard shortcuts to toggle filters between on and off (h, l, and n); keyboard shortcuts cycle through available filter settings (H, L, N).
  • Operator and tools now use application-local ini files rather than the registry to store settings.
  • bci_stream2mat now outputs ChannelLabels, ElementLabels, ElementValues, and ElementUnit in Matlab format (J. Hill)
  • bci_dat2stream now has a -p option: parameters are optionally read from a parameter file, overshadowing the ones previously read from the dat file 
 (J. Hill)
  • bci_stream2mat now outputs a string containing all the parameters found at the *beginning* of the stream (J. Hill)
  • Custom-development bootstrapping for new source, sigproc and application modules (J. Hill)
  • Source modules now use a separate thread for writing data, avoiding data loss when the file is locked by another process (A. Wilson)
  • A change in the filter registration mechanism: Rather than being restricted to signal processing modules, Filter() statements (as well as PipeDefinition.cpp files) may now appear in any type of module, and will override all RegisterFilter() statements present in the module.
  • FFTFilter now displays frequency labels in its visualization windows.

Bug fixes in this version:

  • Updated buildmex to repair missing linker symbols, and to work with Matlab 2010b. (A. Wilson)
  • Fixed Preflight in gUSBampADC: Now SourceChList is checked properly when multiple amplifiers are connected.
  • P300Classifier is now able to deal with files recorded with StimulusPresentation.
  • ARFilter now allows a single frequency bin. (J. Hilll)
  • Fixed a bug in bci_filtertool: parameter properties would be read from the input stream rather than from the filter present in the tool.
  • Fixed compilation of mex files using Qt.
  • Made filter registration mechanism more stable when compiling with gcc.
  • Removed mex files from OfflineAnalysis directory; OfflineAnalysis now adds the BCI2000 mex file directory to its path. This is to avoid "function not found"-errors on non-win32 systems.
  • Visualization displays now show labels in field2d visualizations.

Changes to contributed code:

  • ModularEEG is now present in v3 (J. Hill)
  • Changed executable name for NeuroscanAccessSDK source module from "Neuroscan.exe" to "NeuroscanAccess.exe" in order to avoid confusion with the Neuroscan Acquire client source module (which is called NeuroscanClient.exe).
  • NIDAQ-MX source module now includes NIDAQ logging components written by J. Renga: Contributions:NIDAQLogger and Contributions:NIDAQFilter

February 2011 Version 3 Release Build

Source code revision: 3113

This version 3 release build requires VisualC++ runtime libraries to run. An installer for the runtime libraries may be downloaded from here: http://bci2000.org/downloads/bin/vcredist_x86.exe Other builds of BCI2000 don't have this dependency.

Version 2 Builds

November 2010 Build

Source code revision: 2990

Changes in this version:

  • Removed upper/lower bounds of 0 and 1 for the RandomSeed parameter, allowing for any parameter value.
  • Neuroscan Acquire client now translates event channel into states on a sample-by-sample basis rather than block-by-block.
  • Fixed "TestMode" parameter naming conflict between gMOBILab source and P3Speller (A. Wilson)
  • ARSignalProcessing module would use wrong bin when frequency was specified in Hz in the classifier, and first bin center was nonzero.
  • LinearClassifier now properly rounds channel and element indices when not exactly meeting an index.
  • save_bcidat now uses signal dimensions to infer the value of the SourceCh parameter rather than the SourceCh parameter in the parameter struct.

August 2010 Build

Source code revision: 2932

Changes in this version:

  • SoundStimulus and SpeechStimulus objects now finish playback even when deleted (fixes some muted sound conditions in P3Speller and StimulusPresentation application modules).
  • Removed additional 1-block latency from state changes recorded via bcievents.
  • Update to P300Classifier (C.M. Potes)

June 2010 Build

Source code revision: 2860

New features in this version:

  • Added lowpass option to SourceFilter which is present in a number of source modules (e.g. gMOBIlab source module).
  • P3TemporalFilter now uses the NumberOfSequences parameter when available to determine the number of epochs to average.

Bug fixes in this version:

  • bci_dat2stream now uses float32 format when providing calibrated output signal.
  • Fixed a bug in TransmissionFilter and SpatialFilter which would lead to channel numbers being forwarded as channel labels.
  • P300Classifier does not crash any more when it is unable to generate feature weights. (C.M. Potes)
  • Operator modules' "Load Matrix" button now works correctly with values containing escape characters.

Changes to contributed code:

  • vAmp source module:
    • Impedance mode now works with vAmp8; better stability in impedance mode. (J Mellinger)
    • Impedances are now shown on the amplifier's display rather than a window. (J Mellinger)
    • Code concerning multi-amp use mostly removed (vAmp doesn´t support multi-Amp use) (M. Schatt)
    • Parameters that make only sense when using several amps have been removed ("DeviceIds", "SourceChDevices") (M. Schatt)
    • Improvements to Impedance view: Update the vAmp-Display less frequently. 
(M. Schatt)
    • Use return values of Impedance API functions to improve error handling and prevent crashes. (M. Schatt)

April 2010 Version 2.1 Release Build

Source code revision: 2770

New features in this version:

  • Operator module now allows for saving of matrices in parameter format, and allows to specify empty matrices in the GUI.

Bug fixes in this version:

  • Fixed usability issues in BCI2000Viewer (arrow keys should now work as expected).
  • Fixed a bug that could lead to enabled start button even when an initialization error occurred.
  • INSERT STATE operator script command is now consistent with documentation: name, bit width, and initial value are sufficient to specify a state.
  • Pre-run duration in StimulusPresentation and P3Speller applications was one block longer than defined by the user.
  • Floating point exceptions are now masked in all modules. This should result in more stable behavior during recording.
  • P3Speller no longer crashes when text-to-speech output is configured for matrix elements.
  • buildmex Matlab script now works on Win64 systems.
  • OfflineAnalysis now runs on Win64 systems.
  • MEM mex file usage info now contains correct input signal dimensions.

Changes to contributed code:

  • Fixed a potential problem with the DASSource when initializing an unknown board.
  • Fixed a reinitialization bug in the Biosemi source module. Now, pressing SetConfig more than once works (G Schalk).
  • Amp Server Pro now works with GM version 1 release (R Bell).
  • Fixed anti-aliasing filter and high pass configuration in vAmp source module (A Wilson).
  • Tucker-Davis source module now uses threading (A Wilson).

February 2010 Build

Source code revision: 2671

Bug fixes in this version:

  • Operator scripts now correctly report failure when an invalid state line is given.
  • Drag-and-drop batch files in the command line directory will now work more reliably.
  • Image stimuli are now displayed correctly for an AspectRatioMode of AdjustBoth.
  • Win32 mex files now have a mexw32 extension.

Changes to contributed code:

  • RDAClient works more reliable for higher sampling rates and larger numbers of channels.

December 2009 Build

Source code revision: 2630

Bug fixes in this version:

  • Fixed broken EEGLabImport contribution.

November 2009 Build

Source code revision: 2606

Bug fixes in this version:

  • Mouse and joystick logging will now correctly record initial position at the beginning of a run.

Changes to contributed code:

  • A number of bugfixes and improvements to the TMSi source module (J. Hill).

August 2009 Build

Source code revision: 2514

Bug fixes in this version:

  • Fixed treatment of state names beginning with "Signal" in ConnectorInput filter.
  • Fixed computation of SelectedRow/SelectedColumn states in P3SpellerTask.
  • Fixed BCI2000 Export tool which was broken in the previous bindist.
  • Improved robustness against undocumented data packets in RDAClient.
  • Fixed a number of issues in user tutorials.

New features in this version:

  • New split_bcidat contribution allows splitting large dat files into smaller ones to work around 2GB file size limit when loading dat files.
  • Matlab-independent P300 classifier tool replaces P300GUI contribution.

June 2009 Build

Source code revision: 2421

Bug fixes in this version

  • P3Speller application log now correctly counts the number of intensifications.
  • Inconsistent parameters no longer cause ARFilter::Preflight to hang.
  • P3Speller sleep mode now works as documented (requires two "SLEEP" selections in a row to unsleep).

Changes to contributed code:

  • Biosemi: Fixed bugged trigger masks and added functionality for "downsampling" the trigger signal 
(for each bit, all samples over the decimation period are logical-ORred together) (J. Hill)
  • Biosemi: Added the option to specify the TriggerChList? as a single '0', which means "read all triggers as a 16-bit integer" (J. Hill)

May 2009 Build

Source code revision: 2355

Changes in this version:

  • Added an offset of 32768 to mouse coordinates recorded by the KeyLogger component.

Bug fixes in this version

  • Fixed AlignChannels parameter in gUSBamp.prm parameter fragment.
  • A number of minor bug fixes related to ERP visualization in the P3TemporalFilter.
  • P3TemporalFilter no longer crashes when an invalid channel is specified in TargetERPChannel parameter.

Changes to contributed code:

  • Renamed getparams tool to RDAgetparams
  • Contrib distribution now contains neurogetparams tool.

April 2009 Build

Source code revision: 2342

Changes in this version:

  • Updated load_bcidat copies in tools directories to latest version.
  • Various improvements to gUSBamp source module (JA Wilson).

Changes to contributed code:

  • Renamed load_bcidat in EEGlabImport to avoid version conflicts.
  • P300GUI is now more robust in case the system was suspended before a run was complete (J Temprano).

February 2009 Build

Source code revision: 2245

Changes in this version:

  • Improvements to gUSBamp source (A Wilson).
  • Operator Module: Improved timing behavior when clicking window titles.
  • CursorTask: TargetCode and ResultCode states are now 8 bits wide, allowing for a maximum of 255 targets.
  • Asynchronous events recorded into bcievent are now available for online processing.

Changes to contributed code:

  • RDAClient and Biosemi2 source modules now compile under cygwin gcc 3 in mingw mode (J Hill).
  • DateGlove5DTUFilter now supports the 5DT Data Glove 14 Ultra as well (P Brunner).

Bug fixes in this version:

  • The Normalizer filter would ignore BufferCondition entries under certain circumstances.
  • load_bcidat mex file would perform conversion of nested matrices into Matlab structs incorrectly.
  • Recording of cursor position by CursorTask into state variables did not match specification.
  • StimulusPresentationTask did not handle empty image and sound file entries correctly.

December 2008 Build

Source code revision: 2209

Changes in this version:

  • Some issues in runtime/component deployment have been fixed in the Offline Analysis tool (J Fialkoff).
  • Choosing Help->BCI2000 Help should be more reliable now.
  • FIRFilter has been rewritten to simplify configuration.
  • RDAClient (BrainVision) source module now issues a notification rather than a runtime error when blocks are out-of-sequence.

November 2008 Build

Source code revision: 2200

Enhancements in this version:

  • P300 and Mu rhythm examples and tutorials use new SpatialFilter options.

Enhancements to contributed code:

  • Biosemi source module:
    • Support for an auxiliary Analog Input Box (AIB),
    • Simplified/more consistent parameterization,
    • Subsampling now uses averaging (J Hill).
  • P300 GUI has been updated to use a current version of load_bcidat (S Halder).
  • A number of enhancements and bug fixes to BCPy2000 (J Hill). (Note: BCPy2000 is not part of the BCI2000 binary distribution.)

Bug fixes in this version:

  • AmpServerPro source module: Data could be scrambled due to an endianness issue.
  • Biosemi source module:
    • Fixed bug with determination of battery status (J Hill),
    • Fixed "mode changed from 4 to 0" error; fixed battery warning (ML Blefari).
  • Source display now avoids artifacts induced by reduced numeric resolution for signals with large DC offsets.
  • Application modules: Worked around a window positioning issue with recent versions of the Borland VCL (reported by A Wilson and G Sudre).
  • Various issues with the OfflineAnalysis tool (J Fialkoff).
  • Improvements to configuration consistency and stability of the FFTFilter.
  • Fixed a potiential CursorTask crash on program exit.
  • Microsoft compilers no longer link mex files against debug libraries (J Roland).
  • Fixed a bug in a LinearClassifier::Preflight() range check; improved LinearClassifier configuration error messages.
  • Application modules' run statistics are now reset when starting a new run.
  • When logging mouse position, initial mouse position at the beginning of a run will be recorded.
  • Events recorded during the first data block are no longer reset at the beginning of the second block.
  • Event recording no longer stops on SourceTime state wraparound (reported by G Milsap).
  • gUSBamp source module uses modified buffering scheme to avoid losing data (A Wilson).

October 2008 Build

Source code revision: 2152

Enhancements in this version:

  • Example files are now more consistent with state names in BCI2000 v2 (J Fialkoff).
  • Binary mex files for 64-bit Windows XP (D Krusienski).

Newly contributed code in this version:

  • Source module for BrainProducts V-Amp (A Wilson).
  • BCPy2000: write BCI2000 modules in the Python scripting language (J Hill, Th Schreiner, C Puzicha, J Farquhar).

Bug fixes in this version:

  • AmpServerPro source module now uses float32 data type for output (J Fialkoff).
  • A parameter would be treated as changed when read from the StopRun function (reported by J Hill).
  • The FilterDesign class would mistakenly report an error for valid corner frequencies in Butterworth and Chebyshev filters (reported by A Wilson).
  • Activating the ConnectorInput filer with an empty input filter list would cause an exception (reported by aloplop).
  • Ill-formed input would cause ConnectorInput to hang.
  • P300GUI > r2142 would incorrectly treat the case of a single input file.
  • Audio stimuli for matrix rows/columns would be incorrectly associated with row/column flashes in P300 speller (reported by ariel).

August 2008 Build

Source code revision: 2104

New features in this version:

  • Operator visualization windows now have a zoom function in their context menus ("More Samples"/"Fewer Samples").
  • A number of additional keyboard shortcuts in the Operator Module's visualization windows, and in BCI2000Viewer (contributed by Jeremy Hill).
  • The CursorTask application module now allows to specify the number of trials rather than a run's duration (Adam Wilson).
  • Updated SpatialFilter to include a CAR, sparse, and empty matrix options (Adam Wilson).
  • Updated support of GDF file format to version 2.10 of the GDF specification. BCI2000 parameters are now documented inside GDF files.
  • A. Wilson's EEGLabImport tool is now present in the binary distribution (formerly, it was part of the source distribution).
  • Added a DebugLog option to direct bcidbg messages into log files.

Bug fixes in this version:

  • Fixed a number of issues in the save_bcidat mex file.
  • Examples in BCI2000/data/samplefiles now follow Parameter and State naming conventions from BCI2000 Version 2.
  • Fixed a one-off error in the source signal display (reported by Jeremy Hill).
  • The ARFilter would hang for certain data triggering an infinite loop in extlib/math/Ratpoly::Evaluate().
  • Fixed an additional artifact/channel permutation problem in gMOBIlab and gMOBIlabPlus ADCs (thanks to Peter Brunner for testing).
  • Some bug fixes to the P300Analysis tool (Peter Brunner).
  • Some bug fixes to the OfflineAnalysis tool (Josh Fialkoff).
  • Sometimes, BCI2000 could block when pressing Start after SetConfig (reported by Peter Brunner)

New in the Contributions section:

  • Created a FieldTripBuffer filter, connecting BCI2000 to FieldTrip Realtime Agents (Robert Oostenveld, Jürgen Mellinger)
  • A source module acquiring data from EGI's AmpServerPro (Josh Fialkoff).
  • Micromed Source module update: support for digital trigger packets, priority, note output to textfile; improved error handling (Erik Aarnoutse)

May 2008 Build

Source code revision: 1987

New features in this version:

  • State variables may now be set and read for individual samples rather than entire sample blocks.
  • Threads within BCI2000 modules may now record asynchronous events into state variables at single-sample time resolution.
  • Mouse, Keyboard, and Joystick events are now recorded at single-sample time resolution by the source module when requested from the command line.
  • Added a NumericValue field to the Matlab parameter struct returned by load_bcidat.

Bug fixes in this version:

  • Fixed occasional channel swapping in gMOBIlab source modules (fix contributed by George Townsend).
  • Fixed "TransmitChList out of range" message when specifying channels by labels in TransmitChList.

Apr 2008 Build

Source code revision: 1921

New features in this version:

  • Support for the gMOBIlab+ amplifier.
  • The MatlabFilter now allows choosing Matlab's working directory at startup, and has an option to leave the Matlab window open when quitting BCI2000.
  • Added JoystickFilter to the CursorTask application module's default configuration.
  • Introduced the ExpressionFilter into the ARSignalProcessing module's default configuration.
  • Modified Expression class to handle 1-based offsets, physical units and labels in expressions.
  • Added an option to invert the background in the operator module's signal display windows, and in BCI2000Viewer.

Bug fixes in this version:

  • Adding parameters and states from filter constructors will not overwrite existing parameter values any more (mostly affects command line tools).
  • Fixed error in convert_bciprm that would change the type of list parameters to "matrix" when converting into parameter strings.
  • A number of minor bug fixes and modifications to the OfflineAnalysis tool.
  • EEGlabImport tool now makes sure that the imported signal is of "single" data type.

Mar 2008 Build

Source code revision: 1828

New features in this version:

  • The operator module's parameter configuration window now has a help button. Clicking on the help button, and then on a parameter's name, will open the corresponding help file in a browser window.
  • There is now an 8 channel CAR filter parameter fragment provided in parms/fragments/spatial_filters.
  • The application log window has been re-introduced into the P3SpellerTask.

Bug fixes in this version:

  • The load_bcimat Matlab function would scramble 3-dimensional data.
  • Under rare conditions, visualization windows would move across the screen by themselves.
  • The P3TemporalFilter's visualization display would always display zero data.

Feb 2008 Build

Source code revision: 1790

New features in this version:

  • The CursorTask application module now uses fast 2D drawing when RenderingQuality is set to "low", and only uses OpenGL rendering when quality is set to "high".
  • It is now possible to display a downsized copy of the subject's application window in an operator visualization window.
  • Command line tools have been updated to support propagation of signal units as introduced in Version 2.

Bug fixes in this version:

  • Parameters updated in the GenericFilter::StopRun() function would not be propagated to the operator module. Most notably, the Normalizer's adapted offsets and gains would not be reflected in the operator module's parameter dialog. This has been fixed.
  • A number of minor fixes in the OfflineAnalysis tool.

Jan 2008 Version 2 Release Build

Source code revision: 1746

Version 2 Preview Builds

Nov 2007 Build (changeset 1646)

Oct 2007 Build (changeset 1577)

Version 1 Builds

Jul 2007 Build (changeset 1401)

Apr 2007 Build (changeset 1299)

Jan 2007 Build (changeset 1255)

Dec 2006 Build (changeset 1183)

Jun 2006 Build (changeset 1135)