Muse SDK Release Notes

Table of Contents

April 25, 2017: LibMuse 6.0.1 API 8 Android, iOS, Windows and Unity example application

LibMuse 6.0.1 is a bug fix release with improved support for MuseArtifactPackets and stability while connecting to the Muse headband. There is 1 minor API breaking change.

Features introduced in this release:

  • The application name, application version and LibMuse version are now automatically added as an annotation at the start of all .muse files created with MuseFileWriter. This can be used to identify source and version of LibMuse that produced the file.

Issues addressed in this release:

General

  • MuseArtifactPacket now includes a timestamp like MuseDataPacket.
  • The ARTIFACT message type has been added to the MessageType enumeration to identify a MuseArtifactPacket in a .muse file. Use MuseFileWriter::add_artifact_packet() to save an artifact packet in the file and MuseFileWriter::get_artifact_packet() to retrieve it.
  • A warning has been added to provide more context to the failed assertion that is thrown if a Muse object is destroyed while in the connected state. Muse objects should only be destroyed while in the disconnected state but this assertion could appear if start_listening is called while the application maintains a reference to a connected Muse object. If you maintain a local reference to a Muse object, make sure it is in the disconnected state before setting it to null.

Android

  • Exceptions raised during the connection process no longer crash the application. Now if an error is encountered, the error will be logged and the headband will return to the disconnected state.

Windows

  • Fixed a crash that could arise if you tried to connect to a Muse while Bluetooth was off. Now the connection request is deferred until Bluetooth is turned on or a disconnect is requested.
  • If the pairing operation fails when connecting to a Muse 2016, LibMuse will now disconnect immediately rather than waiting for the connection attempt to time out.
  • run_asynchronously can be called on multiple Muse objects to simultaneously connect to more than 1 Muse headband.
  • The RSSI value of a Muse is correctly returned if it is known.
  • MuseManagerWindows::getInstance() has been deprecated. Use MuseManagerWindows::get_instance() instead.

Documentation

  • Formatting fixes for the Android documentation.
  • Updated readme file with links to the Bug Reports forum and License terms.

Breaking API changes in this release:

  • The constructor of MuseArtifactPacket has changed to take 4 parameters instead of 3, with the timestamp as the fourth parameter. This will only impact you if you are constructing your own instances of MuseArtifactPackets.

December 8, 2016: LibMuse 6.0.0 API 7 Android, iOS and Unity example application

This updates the Android, iOS and Unity example application to match LibMuse 6.0.0 for Windows. There are a few new features, several bug fixes and minor API breaking changes in this release. For the time being we do not support the x86 architecture on Android.

Features introduced in this release:

  • New API to allow LibMuse to throw exceptions for debugging purposes rather than trying to catch everything. See Muse::enable_exception for more details.
  • enableDataTransmission has been implemented in ReaderMuse. If data transmission is disabled, playback will continue but you will stop receiving data from that ReaderMuse. This is useful if you have 2 different ReaderMuse objects and want to toggle which one is providing input.

Issues addressed in this release:

General

  • Fixes a crash that could occur when accessing AUX EEG values in cases where only 4 channel values are provided. If the AUX value is not provided, 0 is now returned.
  • Calling MuseFileWriter::flush() with an empty buffer no longer writes an empty message to the stream. If flush() is called with an empty buffer, the call to flush is ignored.
  • Fixed a crash in MuseFileReader if an empty message was read.
  • Removed a potential deadlock that could occur if connect() or run_asynchronously() was called during the DISCONNECTED connection listener callback. LibMuse will no longer deadlock, however if 2 connection listeners are registered to the same Muse and the first listener makes the call to connect() or run_asynchronously() when the first listener receives the DISCONNECTED event, then the second listener will receive the original DISCONNECTED event after it receives the CONNECTING event resulting from the first listener’s call to connect() or run_asynchronously().

Android

  • Fixed MuseFileAndroid to return false if the write operation failed.
  • Fixed a potential crash that could occur from attempting to read data from a Muse 2016 headband before the connection was established.

Documentation

  • Fixed the Accelerometer documentation to clarify the X, Y and Z axes.
  • Fixed MuseLog documentation to indicate that calling MuseLog.f will cause the application to crash with SIGABRT.

Breaking API changes in this release:

  • Locations of header files for iOS have changed to remove gen-objc. Instead all iOS header files are now located under Muse/api/. If you have included individual headers from the Muse framework, you will need to update to the new path. No changes are required if you are including “Muse/Muse.h”
  • MuseManager::disconnect(bool) no longer takes a boolean parameter and has been replaced with MuseManager::disconnect() which takes no parameters. If you want to unregister all listeners when disconnecting, it is recommended that you call unregister_all_listeners after you receive the DISCONNECTED connection listener callback.
  • MuseManager::is_bluetooth_enabled() function has been removed. The sample applications have been updated to show how to check if bluetooth is enabled in a platform specific way.
  • The DeviceInformation class has been removed. The name, mac address, rssi and last discovered time are available through the Muse class.
  • The CharacteristicId enumeration has been removed as it was not used by the API. There is no replacement.

November 23, 2016: LibMuse 6.0.0 API 7 Windows

This is a major release which adds support for Windows as a development platform. LibMuse for Windows is a static library that is compatible with the Universal Windows Platform (UWP) x86 and x64 platforms. There are minor API breaking changes in this release when compared to the 5.13.0 API and the Windows Beta API.

Known Issues:

  • Unpaired Muse 2016 headbands that were previously detected but are currently off may be returned when querying MuseManager for the list of Muse headbands. Unpaired Muse 2016 headbands that are off will be removed from the list automatically when the remove_from_list_after timeout expires (30 seconds by default).
  • Trying to connect to a Muse 2014 headband that is paired with the computer but is currently off results in a Platform::COMException being thrown. LibMuse will catch this exception and disconnect gracefully, but Visual Studio may become unresponsive if running the application with the debugger attached. This can be avoided by removing Platform::COMException from the “Break when thrown” list in “Exception Settings”. This issue does not happen when running without the debugger attached.
  • The example applications can only connect to one headband at a time. If you try to connect to a second headband while one is currently connected or connecting, an exception will be thrown.

Breaking API changes in this release:

  • The interaxon::Convert class has been moved to the interaxon::bridge namespace and is now interaxon::bridge::Convert.
  • MuseManager::disconnect(bool) no longer takes a boolean parameter and has been replaced with MuseManager::disconnect() which takes no parameters. If you want to unregister all listeners when disconnecting, it is recommended that you call unregister_all_listeners after you receive the DISCONNECTED connection listener callback.
  • MuseManager::is_bluetooth_enabled() function has been removed. The sample application has been updated to show how to check if bluetooth is enabled in a platform specific way.
  • The DeviceInformation class has been removed. The name, mac address, rssi and last discovered time are available through the Muse class.
  • The CharacteristicId enumeration has been removed as it was not used by the API. There is no replacement.

Features introduced in this release:

  • LibMuse for Windows is a C++ library that is compatible with the Windows 10 Universal Windows Platform. It supports both Muse 2014 and Muse 2016 headbands.
  • New API to allow LibMuse to throw exceptions for debugging purposes rather than trying to catch everything. See Muse::enable_exception for more details.
  • 2 sample applications are included in the examples folder. GettingData illustrates how to connect to the Muse headband. ReaderWriter illustrates how to handle file I/O. In both cases, see MainPage.xaml.cpp for the code.
  • HTML documentation that describes the C++ API is available from README.html.
  • Header files for compiling against the LibMuse library are available in the include folder. Include “muse.h” to include all LibMuse headers.
  • Libraries are available for both Win32 (x86) and x64 development. ARM development is not supported at this time due to lack of ARM support in Google’s protobuf libraries.
  • There is support for reading and writing .muse files through the MuseFileReader/MuseFileWriter classes. Note however that UWP applications have restrictions on file access based on their capabilities (https://msdn.microsoft.com/en-us/windows/uwp/files/file-access-permissions).
  • enable_data_transmission is implemented in ReaderMuse. If data transmission is disabled, playback will continue but you will stop receiving data from that ReaderMuse. This is useful if you have 2 different ReaderMuse objects and want to toggle which one is providing input.

Issues addressed in this release:

General

  • Fixes a crash that could occur when accessing AUX EEG values in cases where only 4 channel values are provided. If the AUX value is not provided, 0 is now returned.
  • Calling MuseFileWriter::flush() with an empty buffer no longer writes an empty message to the stream. If flush() is called with an empty buffer, the call to flush is ignored.
  • Fixed a crash in MuseFileReader if an empty message was read.
  • Removed a potential deadlock that could occur if connect() or run_asynchronously() was called during the DISCONNECTED connection listener callback. LibMuse will no longer deadlock, however if 2 connection listeners are registered to the same Muse and the first listener makes the call to connect() or run_asynchronously() when the first listener receives the DISCONNECTED event, then the second listener will receive the original DISCONNECTED event after it receives the CONNECTING event resulting from the first listener’s call to connect() or run_asynchronously().

Windows

  • Trying to reconnect to a Muse 2014 headband could result in a Platform::COMException which could cause Visual Studio to hang when running with the debugger attached. This is now fixed.
  • Fixed an exception that could occur if MuseManager::start_listening() was called immediately after a call to MuseManager::stop_listening().
  • Fixed an issue where run_asynchronously() would fail to start when running in Release mode.
  • Muse 2014 headbands are now removed from the list of muses in MuseManager when the headband is removed in the Bluetooth settings. You will receive a muse_list_changed callback when this occurs.
  • Fixed the refresh button in the example applications to properly refresh the list of Muse headbands. The first item in the list is now shown in the Combobox.

Documentation

  • Adds EventLoopFactory to the class list.
  • Fixed the Accelerometer documentation to clarify the X, Y and Z axes.

June 27, 2016: LibMuse 5.13.0 API 4 Android and IOS

This is a minor release for both Android and iOS that provides new functionality and bug fixes. There are no API breaking changes in this release, but there is a behavioural change in Accelerometer and Gyro data. For the time being we do not support the x86 architecture on Android.

Features introduced in this release:

  • New IS_GOOD data packet type which indicates if the last 1 second of raw EEG data is good or contained too much interference and should not be used.
  • Introduces ReaderPlaybackListener which provides notifications when a ReaderMuse finishes playback of a file or playback was interrupted.

Issues addressed in this release:

General

  • Corrected the timestamp for all EEG derived packets (ALPHA_ABSOLUTE, ALPHA_RELATIVE, ALPHA_SCORE, BETA_ABSOLUTE, …). Previous versions were returning -1 for the timestamp. This has been corrected to be the time the packet was generated by LibMuse.
  • ACCELEROMETER axis values were inconsistent between Muse 2014 and Muse 2016 headbands. Axes for both headbands have now been mapped to X, Y, Z in a Right Hand Coordinate System as shown in the new documentation. FORWARD_BACKWARD, UP_DOWN and LEFT_RIGHT have been deprecated and the sign of UP_DOWN and LEFT_RIGHT has changed as a result of the new axis mapping.
  • ACCELEROMETER values are now displayed in G for both Muse 2014 and Muse 2016 headbands. Previous releases had Muse 2014 values displayed in mG.
  • The GYRO axis values now map to the same axes as the ACCELEROMETER values where GYRO indicates rotation about that axis.
  • ACCELEROMETER and GYRO values for Muse 2016 headbands running firmware versions 1.2.9 and 1.2.13 have been corrected. LibMuse was returning +/-4G for the accelerometer and +/-1000 degrees per second when the ranges for these firmware versions was actually +/-2G and +/-245 degrees per second.

Android

  • Fixed a crash that occurred if you tried to connect to a headband while the Bluetooth on the device was turned off.
  • Fixed a crash that could result while attempting to reconnect to a headband after the device had been locked and unlocked.

iOS

  • Fixed a crash that resulted from calling disconnect when the headband was already disconnected. The second call to disconnect is now ignored.

May 13, 2016: LibMuse 5.8.0 API 4 Android and IOS

This is a minor release for both Android and iOS that provides new functionality and bug fixes. There is one API breaking change in this release. For the time being we do not support the x86 architecture on Android.

Breaking API changes in this release:

  • Presets 24, 25, AC and AE have been removed. Research presets AB and AD will only emit EEG, ACCELEROMETER and BATTERY data packets.

Features introduced in this release:

  • ReaderMuse includes new ReaderMusePlaybackSettings which can be used to simulate the playback speed and control the timestamps of the data packets. To make use of the simulated playback speed, you will need to construct the ReaderMuse with an EventLoop to simulate the time between packets. Both Android and iOS have an EventLoop that can be used for this purpose.
  • Muse 2016 (MU-02) headbands that the system has not had contact with for the past 30 seconds are removed from the list of Muses in MuseManager. You will receive a museListChanged event when the Muse headband is removed. The amount of time before a headband is removed from the list can be changed in MuseManager.

Issues addressed in this release:

General

  • Registering or unregistering a listener while in a listener callback threw an undocumented SIGABRT. This has been corrected and you may register or unregister listeners while in a listener callback. In the event that you have multiple listeners for a callback, all listeners registered at the start of the callback will receive the current callback. If the registered listeners are modified in the callback, the changes will be applied on the next callback.
  • A system error no longer occurs if the notch frequency is set to NOTCH_NONE on an Muse 2014 (MU-01) headband. Setting the notch frequency to none is not supported on presets 10, 12 and 14 for Muse 2014 headbands. Attempting to set the notch frequency to none with these presets will have no effect.

Android

  • Fixed the issue causing UI lag when attempting to connect to a Muse 2014 (MU-01) headband that was powered off.
  • Clarified the example application with additional comments.

iOS

  • The example application was including the EAAccessory and CoreBluetooth frameworks unnecessarily. These have been removed as they were not referenced. You can build an iOS application using just Muse.framework

Documentation

  • HSI precision values are not available on the auxiliary channels.
  • The API documentation incorrectly listed preset 20 as the default preset for Muse 2016 (MU-02) headbands. This has been corrected to preset 21.
  • The museListChanged behaviour is different on Android and iOS with regards to Muse 2014 (MU-01) headbands. On iOS, you will only receive a callback for each Muse 2014 headband that is powered on and connected to the iOS device. On Android, you will receive a callback for each Muse 2014 headband that is paired with the Android device, even if the headband is not powered on.

April 12, 2016: LibMuse 5.4.0 API 3 Android and IOS

This is a major release for both Android and iOS. It adds support for second generation Muse 2016 headbands and contains breaking API changes.

Algorithm changes:

To better align with established research the computed powers of the EEG bands have changed.
In particular:

  • New values are computed in microvolts as opposed to raw ADC units.
  • Spectrum is estimated on windows of 1.0 seconds as opposed to 1.16 seconds.

To reconcile the difference between the values from the previous release with the values in this release, add 0.4323 to the value from the previous release.

Breaking API changes in this release:

  • The method of discovering headbands has changed. MuseManager.refreshPairedMuses and MuseManager.getPairedMuses have been removed. To discover Muse headbands, set a MuseListener using MuseManager.setMuseListener and then call MuseManager.startScanning. When a Muse is discovered, you will receive a MuseListener.museListChanged() callback. See the example code for more details.
  • Muse.getMuseConfiguration() and Muse.getMuseVersion() may return null values. A null value is returned if you have not yet connected to that particular Muse and the configuration and version is unknown. After connecting to the headband, configuration and version data will be non-null even if you later disconnect.
  • SenderInformation has been removed. As a consequence, the getSource function in MuseArtifactPacket, MuseConnectionPacket and MuseDataPacket has also been removed. A Muse object is now passed as an input parameter in the following functions and can be used to get the information that SenderInformation used to provide.
    • MuseConnectionListener::receiveMuseConnectionPacket
    • MuseDataListener::receiveMuseDataPacket
    • MuseDataListener::receiveMuseArtifactPacket
  • Static constants in LibMuseVersion have been replaced with a static ApiVersion instance. In addition, the semantic meaning of the digits in API version have changed. Major version now refers to the release of the SDK. API breaking changes are now tracked with an API field rather than the major version. The version string and monotonic version have changed as a result. The monotonic version is still greater than all previous monotonic versions.
    Use the ApiVersion instance to retrieve the major, minor and patch version numbers as well as the string version of the API.
  • MELLOW and CONCENTRATION date packet types have been removed. There is no replacement for these data types.
  • HORSESHOE data packet types have been renamed to HSI_PRECISION.
  • The TP9, FP1, FP2, TP10 EEG enumeration values have been renamed to EEG1, EEG2, EEG3, EEG4 respectively.
  • DROPPED_EEG and DROPPED_ACCELEROMETER packet types are now deprecated. NaN values are used in the EEG data to represent dropped values.
  • The open, write and close functions in MuseFile now return boolean values to indicate the success or failure of the corresponding operation.

Android specific breaking API changes in this release:

  • Classes in the com.interaxon package have been moved to the com.choosemuse package. Please update your imports accordingly.

iOS specific breaking API changes in this release:

  • EAAccessory(IXNAccessoryMuse) has been removed. Register a IXNMuseListener with IXNMuseManager to receive a callback when a Muse is connected. This also removes the need to include the linker flag -ObjC.
  • The following instance functions have been removed with no replacement:
    • IXNAnnotationData::initWithAnnotationData
    • IXNComputingDeviceConfiguration::initWithComputingDeviceConfiguration
    • IXNDspData::initWithDspData
    • IXNMuseArtifcatPacket::initWithMuseArtifactPacket
    • IXNMuseConfiguration::initWithMuseConfiguration
    • IXNMuseConnectionPacket::initWithMuseConnectionPacket
    • IXNMuseDataPacket::initWithMuseDataPacket
    • IXNMuseVersion::initWithMuseVersion
  • The following functions now return an interface rather than a protocol. References to id will need to be replaced with references to class_name*.
    • IXNMuseFileFactory::museFileWriterWithPathString
    • IXNMuseFileFactory::museFileReaderWithPathString
    • IXNMuseFileReader::getFileReader
    • IXNMuseFileWriter::getFileWriter

Features introduced in this release:

  • Adds support for Muse 2016 hardware
  • MuseDataPackets provide functions to access the raw double value of data. This provides much better memory performance over the values() function. Check the packet type before calling the getValue function as calling the wrong getValue function for the packet type results in an exception.
  • Logs from LibMuse can be added to your own application logging system through LogManager and LogListener.
  • MuseErrorListener can be used to receive error notifications from LibMuse such as timeouts.
  • Additional MusePresets had been added to support the second generation hardware and research needs.
  • Gyro information is now provided through MuseDataPacketType.
  • MuseFileReader and MuseFileWriter now supports the reading and writing of all MuseDataPacket types.
  • You can explicitly set the timestamp for messages written with MuseFileWriter. See MuseFileWriter::setTimestampMode.

Issues addressed in this release:

General

  • Unknown presets are defaulted to PRESET_10.
  • Notch frequencies other than 0, 50 or 60 are now defaulted to NOTCH_NONE rather than NOTCH_60HZ.
  • The battery level read by MuseFileReader is returned as a percentage rather than an absolute value that requires division by 100.
  • The ranges for the accelerometer and gyro data packets have changed for Mu-02 model headbands. The new ranges are [-4,4) and [-1000, 1000) respectively. There is a corresponding firmware update. Firmware can be updated through the Muse mobile application. Using this version of LibMuse with older firmware will cause the values to be much larger than expected.

Android

  • Libmuse does not crash when trying to connect to a Muse 2014 headband that is off.
  • Fixed crash that resulted from trying to get the name of a device that had no name. An empty string is returned in this case.
  • MuseManager provides a museListChanged() callback for each muse detected after startListening() is called. Previously, some callbacks were not performed if startListening() was called multiple times.
  • Calling Muse.setNumConnectTries() on a MU-01 headband no longer throws an exception. Instead it does nothing.
  • Improves connectivity for android devices and fixes issue where once a device reached an error state it would not reconnect.
  • Updated the example application to use Android Studio and SDK level 23.

iOS

  • MuseFileReader returns an empty byte array when trying to read a file that does not exist and is consistent with the documentation.

June 22, 2015: LibMuse-iOS 1.2.1

Bug fix release. Changes:
    • Fixed a bug that caused apps to get stuck in an infinite reconnect loop when a device went out of and back into range two or more times.
    • Fixed an issue where the notch frequency was not being properly set for European regions.
    • Fixed a couple of rare edge cases (one on a zero-length read from the OS, and the other on being notified of a Muse accessory being removed without first being added.)
    • Improved documentation in the example app.

May 29, 2015: LibMuse for Android 1.3.0 and LibMuse for iOS 1.2.0

This release contains 2 breaking changes, however both are minor.
  • Changes in both iOS and Android:
    • macAddress parameter was removed from addConfiguration method in Muse File Writer, because it’s already a part of MuseConfiguration data struct (breaking change).
    • MuseFileWriterFactory was renamed to MuseFileFactory and 2 methods were added to it: for MuseFileReader creation and MuseFile creation (breaking change).
    • Added MuseFileReader, which will allow to read and playback muse files. There is a simple example on how to use in both Android and iOS example app. Look for playMuseFile method.
    • MuseFile interface was changed.
  • LibMuse for iOS:
    • ibmuse for iOS is distributed as a static library (libMuse.a file + Headers) and not as dynamic framework. This will allow you to support ios devices >= 7.0 and it should resolve code signing warning. See example App build settings for details on how to use libMuse.a in your project
    • minimum deployment target on iOS is 7.0 now
  • LibMuse for Android:
    • Fixed MuseFileWriter behaviour: now if file exists FileWriter will append new data at the end, before it erased the old data

May 7, 2015: LibMuse for Android 1.2.1

  • Added libmuse.so for x86 architecture (it was not included in 1.2.0)
  • Properly populated batteryPercentRemaining in MuseConfiguration class
  • Changed type for batteryPercentRemaining from int to double
  • Improved documentation for getMuseConfiguration() and getMuseVersion() methods

April 30, 2015: LibMuse for iOS 1.1.0 and LibMuse for Android 1.2.0

  • LibMuse for iOS:
    • support x86 architecture (allows to compile application with libmuse for iphonesimulator)
  • LibMuse for Android:
    • added FileWriter API
    • added Mellow and Concentrations packets
    • removed rename API from Muse class

April 29, 2015: LibMuse for iOS 1.0.1

  •  Set IPHONEOS_DEPLOYMENT_TARGET to 8.0, as App store rejects applications with dynamic frameworks < 8.0

April 28, 2015: LibMuse for iOS 1.0.0

First release! Features include:

  • Raw data: EEG, accelerometer, DRL/REF, Battery
  • DSP data: jaw clench, eye blink, relative and absolute band powers, session score, mellow (experimental), concentration (experimental).
  • Muse Bluetooth connection handling
  • Works out of the box in Xcode

March 18, 2015: LibMuse for Android 1.0.4

  • Fixed minor issue in recovery mechanism in case of data error
  • Improved error logging in case of data error
  • Libmuse now notifies headband about host platform on every connect (this improves user experience if same headband is used on multiple devices with different apps)

March 2, 2015: LibMuse for Android 1.0.2

  • Fixed segfault which could happen onDestroy().
  • Reduced disconnection detection to 2.5 sec (was > 10 sec).
  • Methods connect(), execute() and runAsynchronously() do not throw exceptions anymore. Exceptions are properly handled inside the SDK.
  • Improved documentation
  • Improved error handling.

February 6, 2015: SDK Tools v3.4.1 & LibMuse for Android 1.0.1

  • MuseSDK separated into SDK Tools (MuseIO, MusePlayer, MuseLab) and LibMuse
  • Changes to LibMuse for Android 1.0.1:
    • Better error handling
    • Documentation improvements (added information about threading and exceptions)
    • Link C++ lib statically
    • Added new API to MuseManager class to allow to scan for Muse headbands which have custom names
    • Split libmuse and MuseSDK installers
    • Provided linux-x64 installer

February 3, 2015: SDK Tools v3.4.0

LibMuse for Android 1.0.0

January 30, 2015: SDK Tools v3.2.3

A quick release to help our Linux users…
  • MuseIO 3.6.5
    • Linux – Bug fix to fix 100% CPU usage.
    • Muse Elements – Fix to better detect “headband on”.

December 23, 2014: SDK Tools v3.2.2

Happy Holidays! This is a bug fix release of the SDK.
  • Installer
  • Muse-player 1.8.4
    • Fixed a hang at end of input when using OSC input (the file would complete processing, but at the end muse-player would sit there forever)
    • Fixed an occasional hang on Windows with Muse file input
    • Fixed control-C showing an exception
    • Fixed bug in MATLAB output for /muse/elements
    • Fixed crash with Unicode in MATLAB(HDF5) files
    • Only print output when stdout is a terminal, useful when running Muse-Player in the background
  • Muse-IO 3.6.4
    • Fixed bug on Windows where 50hz/60hz EMI filter command-line option did not work

December 17, 2014: SDK Tools v3.2.0

  • MusePlayer 1.8.0
    • The MATLAB output format has been converted to Matlab File Format 7.3, which is form of HDF5. If you simply load the MATLAB output in MATLAB itself, you will not see or experience any difference from the previous MATLAB files we generated. However, this new format will allow your non-MATLAB programs(Python, C++, Java, etc) to easily parse the MATLAB file. In Python for example, you can simply import h5py and read the file, for example:
      import h5py
      # Load a file that has been saved as MATLAB from muse-player
      f = h5py.File('museplayer-matlab-output.mat','r')
      # “f” basically becomes a tree data structure at this point.
      # To show all the possible keys in the data structure:
      f.keys()
      f['IXDATA'].keys()
      # Example of how to get all the raw EEG data
      f['IXDATA']['raw']['eeg']['data'].value

    • Added the ability to do regular expression (regex) filtering when using the -i option. Examples:

      # Get the theta values for all 4 channels:
      muse-player -i '/muse/elements/.\*theta.\*'
    • Added –version argument
    • Better error message if port is in use
    • Bug fixes
    • Known issues: In MusePlayer for Linux, MATLAB output is not working for this release.
  • MuseLab 1.6.3
    • Bug fix: Fixed horseshoe not working
    • Bug fix: Muse-IO timestamps cause all messages to be annotations. Currently timestamps will be ignored when saving.
  • MuseIO 3.6.3
    • Bug fixes

Nov 17, 2014: SDK Tools v3.0.2

  • MuseIO 3.6.2
    • Added back –dsp option for backward compatibility.
  • MuseLab 1.6.2
    • Fixed version number.
  • MusePlayer 1.6.0
    • No changes

November 14, 2014: SDK Tools v3.0.1

  • Installer
    • One click install! Removed all extra installation steps for muse-player.
  • MusePlayer 1.6.0
    • Changes made to allow for all-in-one installer.
  • MuseIO 3.6.1
    • Added new algorithm for EEG band power session score.  This metric compares your current alpha/beta/etc against your historical average for that band.
    • Added experimental algorithms “concentration” and “mellow”. See documentation here.
    • dsp option is enabled by default now, use –no-dsp if you want to disable it. –dsp option is not present anymore (note: it was added back in the next release)
    • The paths are now considered a stable API.  Anything new that is in progress will be put into the /muse/experimental section first before it becomes part of the supported API.
  • MuseLab 1.6.2 (on release, this was incorrectly marked as 1.7.0)
    • Bug fix: Can’t change EEG signal trace color
    • Bug fix: Horseshoe indicator not working
  • Misc
    • Revamp of documentation on the wiki.

August 12, 2014: SDK Tools v2.4.2

  • Muse-Player 1.4.2
    • Fixed crash on Windows

July 31, 2014: SDK Tools v2.4.0

  • Muse-Player 1.4.0
    • Ability to play back huge files (8+ hours) – files are loaded incrementally now instead of completely loaded into memory at the start.
    • Ability to record for long period of time (8+ hours) – files are incrementally saved instead of being written all at once at the end of the recording.
    • Fixed bugs when piping output from display through “less”.

July 4, 2014: SDK Tools v2.2.0

  • Added support for Linux
  • Installer
    • Brand new installer that makes the install process a bit easier.
      • All platforms: automatically install Java if it is not already installed.
      • All platforms: automatically set the path to include Muse install directory.
      • Windows: Automatically install required Microsoft library without having to click through more dialog boxes.
    • New icons and graphics.
  • MuseIO 3.4.0
    • Renamed /muse/dsp/bandpowers to /muse/dsp/elements
    • Changed all double outputs to floats.  This only occurred in the dsp paths.
    • In the channel layout, LCH and RCH have been renamed MUSE_LEFT_AUX and MUSE_RIGHT_AUX. These values have been added to the Muse protobuf file format.
    • Bug fix:
      • Layout channel names T9 and T10 were incorrectly labelled, they should be TP9 and TP10.
  • MusePlayer 1.2.0
    • Added ability to output CSV
    • Automatically do “as-fast-as-possible” when writing files.
    • Added ability to filter data.
    • Added ability to auto-skip gaps in data
    • Added handling of DSP data from MuseIO
    • Bug fixes:
      • Fixed crash when using the –osc-timestamp with MuseIO
  • MuseLab 1.6.1
    • Bug fix: When recording from six channel Muse, only 4 channels were recorded. Fixed.
  • Known Issues:
    • Muse-Player by default can only receive and transmit UDP messages, so you must change MuseIO and MuseLab accordingly.  On MuseIO, this would mean doing:
      • “muse-io –osc osc.udp://localhost:5000″

June 24, 2014: SDK Tools v2.0.0

  • MuseIO 3.2.0
    • The first version of Muse Elements – our basic DSP package for developers:
      • Blink event
      • Jaw Clench event
      • Relative band powers for each channel: alpha, beta, gamma, theta, delta, and low frequencies
      • FFT for each channel
      • Proper fit indicator for each channel
      • Data quality indicator for each channel
    • Aligned MuseIO OSC messages and Muse file format v2.
    • TCP support
  • MuseLab 1.6.0
    • Headset indicator to indicate proper fit
    • Battery level indicator
    • Added support for TCP connections
    • Recorded sessions now record to Muse file format version 2.
    • Stationary line graph improvements:
      • Allow user to mark ranges on the stationary line graph
      • Display title
      • Display legend
      • Ability to hide grid lines
      • Ability to choose number of grid lines
      • Exponential magnify area of line graph
      • Adjust position of magnification
      • Override master time
    • Minor improvements
      • Individual changes to time in a visualizer are now loaded from config file
      • OSC incoming messages now have a right/left scrollbar
      • Position and strength are now saved for static line graph
  • MusePlayer 1.0.0
    • Supported inputs:
      • OSC network stream
      • OSC-replay file format
      • Muse file format v1
      • Muse file format v2
    • Supported outputs:
      • OSC network stream
      • OSC-replay file format
      • Muse file format v2
      • MATLAB
      • Print to screen
    • Options:
      • As fast as possible
  • OSC tools
    • “oscdump” and “oscsend” have been integrated into the installer for convenience

April 10, 2014: SDK Tools v1.0

Our first release, containing the following:
  • MuseIO 3.0.0
  • MuseLab 1.4.0
Supported platforms: Windows, MacOS