Entrainer FX, Version 5.2.0
In preparation for full conversion to JavaFX I'm releasing version 5.2.0. It has exactly the same functionality as the previous version (5.1.0) however with the introduction of the configurable background I was able to reimagine the UI. All heads-up controls are by default invisible and are revealed on mouse over (or in case of the player buttons, mouse pointer proximity). Images are now displayed at full opacity.
This paradigm will be used in the JavaFX conversion.
Version 5.2.0 Player Controls
Version 5.2.0 Sound Options
Version 5.2.0 Background Options
Version 5.2.0 Other Options
Version 5.2.0 Resizability
As sizing is not the issue it used to be with fixed controls, the main window is now resizable
Entrainer FX, Version 5.1.0
EntrainerFX is a program which generates binaural beat frequencies using sound and animations for the purpose of entraining brain waves. EntrainerFX is released under the GPL license - it is free and open source. It can be obtained from the Entrainer Sourceforge project page and the latest version is EntrainerFX 5.1.0, released on March 14, 2015, requiring a minimum of Java 8 (1.8.0_40) to run. Version 5.1.0 will be the last feature release prior to replacing all Java Swing code with JavaFX controls. Screenshots of older versions of Entrainer in action are included throughout this documentation.
EntrainerFX works best with a set of high quality headphones.
There is a bug in Java 8 that prevents EntrainerFX from starting should any spaces exist in the directory names. Should the spaces exist the following error is generated: java.awt.IllegalComponentStateException: The dialog is decorated. The work around for this issue is to ensure that EntrainerFX is installed into a directory structure with no spaces in the names ie:
/Users/MyName/EntrainerFX - good
C:/Program Files/EntrainerFX - bad
Thanks to Rich for bringing this issue to my attention.
EntrainerFX Lite is a Java applet / JNLP program which includes a subset of the features included in the EntrainerFX distribution. The latest Java 7 must be installed and permissions granted for the application to run within the browser. There have recently been some vulnerabilities patched in Java 7, and prior to the fixes many browsers and OSs have responded by locking down Java applets. This document describes how to enable Java in the browser. If you have any concerns about Java in the browser then the full distribution is recommended as the vulnerabilities apply only to Java in the browser. Note that this applet will not run on Chrome in Mac OSX as it is a 32 bit browser.
The above is an example of the permissions being requested (Firefox). Not a worry!
Much has changed with release 4.0.0 of EntrainerFX:
- A rewrite of the main GUI to use Java FX controls
- A rewrite of the animation subsystem to use Java FX classes
- The native JSyn library has been dropped in favour of the pure Java implementation
Early on in development I considered the possibility of rewriting Entrainer in JavaFX. At the time however JavaFX was too immature to support the functionality I required of it for Entrainer. With the latest release of JavaFX this is no longer true. As Oracle is attempting to eventually replace Swing with JavaFX it was time to dig in & learn the API.
While I'll always have a soft spot for Swing, it has its weak points. Based on dated GUI architectures it lacks the ability to emulate the modern GUI elements we've come to expect from our smart phones & tablets. And to be honest, without a decent look and feel over top of it it looks like puppy kack. Another weakness is its (lack of) support for animations. The Trident library is excellent to write the animation portions of the code, but Entrainer's heavy use of animations in Swing pushes even the gruntiest of machines to its limits.
And so I rewrote the animation and shimmer portions of Entrainer in JavaFX. I found there to be a good 40% reduction in CPU usage when using the various animations, and they can be used together on a good machine without dragging it to its knees. And after I'd mocked up a prototype using the pure Java JSyn library, I noticed that the annoying clicks on the Mac had greatly reduced to the point of being able to remove the 32 bit-only native JSyn libraries from the distribution - the final impetus for this new version of Entrainer.
As Entrainer now uses the latest JavaFX, it now requires the latest version of the JRE - at least JRE 1.8.0_40. It will not run on any earlier versions of Java.
Brain wave entrainment is about stimulating the brain to resonate at a desired frequency. The two techniques used by Entrainer to achieve this is through the use of sound and animations. The lower limit of human hearing is about 20Hz. As many of the more interesting states of consciousness occur at much lower frequencies, these frequencies are generated via binaural beats - two slightly different tones, one in each ear, the difference being the desired frequency.
The following gives a rough overview of the relationship between frequency and conscious state:
- Beta Waves: 12Hz - 40Hz - associated with active, busy or anxious thinking and active concentration, arousal, cognition
- Alpha Waves: 8Hz - 12Hz - associated with relaxation (while awake), pre-sleep and pre-wake drowsiness
- Theta Waves: 4Hz - 8Hz - associated with dreams, deep meditation, REM sleep
- Delta Waves: 0Hz - 4Hz - associated with deep dreamless sleep, loss of body awareness
How Entrainer Works
Entrainer works much like the beat of a drum; the beats and changing colours assist in directing the conscious state of the subject. Binaural beats are generated when two sound waves of different frequencies are played together. The difference between the frequencies of the sounds generates a beat of the same difference in frequency - the entrainment frequency.
The Purpose of Entrainment
The human hearing range reaches around 20Hz at its lower range. Below that frequency sound cannot be heard. As described above, the human brain resonates at specific frequencies related to one's state of consciousness, and the frequency related to these conscious states can extend well below the lower range of human hearing. Learning to control one's conscious state can be obtained with activities such as meditation, however the discipline to properly perform this activity can be prohibitive.
One can increase one's alertness at higher entrainment frequencies, and conversely one can enter a states of deep relaxation (and even sleep) at lower frequencies.
Learning to control one's conscious state can be of great help with conditions such as ADHD and autism, and it is the goal of this project to ultimately create a useful medical tool that can assist with the treatment of these conditions. That, and a fun tool with which to learn control of conscious states!
Entrainer requires a minimum of JRE 1.8.0_40 (Java 8) to run. To run simply double click the EntrainerFX.jar file.
Alternatively the 'entrainer.bat' (Windows) or 'entrainer.sh' (Unix/Mac) can be used to start Entrainer.
This program produces flashing animations and binaural beat sound waves. It should not be used by anyone prone to seizures or related conditions without proper medical supervision.