This is a functional ear trainer, meaning that it teaches you to identify degrees in a key.
Every level, a chord progression is played to identify a major/minor key, followed by random notes played harmonically. The degrees of these notes should be identified and selected.
Install TiMidity++ for required performance improvements when converting MIDI to other formats.
brew install timidity
apt install timidity
Add this line to your application's Gemfile:
gem 'fet'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install fet
The UI currently supports listening exercises, where a chord progression is played to establish a key, followed by notes played harmonically. The degrees of these notes should be identified by selecting them in the UI.
The binary can be executed as follows:
fet play listening --degrees 1 --key-type major --next-on-correct --tempo 200 --limit-degrees b6 --limit-degrees 5
All flags are optional, and serve the following purposes:
Flag | Description |
---|---|
--degrees | How many unique degrees to play for the random notes - maximum of 11. |
--key-type | Type of key to play, can be "major" or "minor". |
--[no-]next-on-correct | Go to the next level automatically when answered correctly. |
--tempo | The tempo at which the chord progression is played. |
--limit-degrees | Limit to specific degrees. Can be supplied multiple times. |
When using the UI, the following keyboard shortcuts are defined to allow for mouse-free interaction:
Keyboard Shortcut | Description |
---|---|
ENTER | Go to the next level once this level is over. |
q | Quit the application. |
c | Repeat the chord progression only. |
n | Repeat the notes only. |
l | Repeat the question (looping). |
1-7 | Select the degree, e.g. "2" selects the 2nd degree. Will also play that degree once the level is over. |
- | Modify the above degree to flatten it, e.g. "-" followed by "2" will select the b2nd degree. |
+ | Modify the above degree to sharpen it, e.g. "+" followed by "4" will select the #4th degree. |
0 | Make the degree natural, e.g. "+" followed by followed by "0" followed by "4" will select the 4th degree. |
The generators will currently create MIDI files. The correct answer is included in the filename.
For listening exercises, here is a potential list of generated MIDI files (for 2 degrees):
$ find .
...
./listening/major/DbM_b6(Bbb2)_5(Ab5).mid
./listening/major/BbM_7(A4)_2(C6).mid
./listening/major/EM_b6(C2)_3(G#2).mid
./listening/major/GbM_6(Eb4)_3(Bb5).mid
./listening/major/FM_6(D4)_3(A5).mid
...
./listening/minor/Dm_b7(C3)_1(D4).mid
./listening/minor/F#m_b2(G2)_3(A#4).mid
./listening/minor/G#m_b6(E1)_b2(A2).mid
./listening/minor/Dm_6(B0)_7(C#3).mid
./listening/minor/C#m_5(G#4)_6(A#4).mid
...
The file name contains all the information required for the answer. For example, EM_b6(C2)_3(G#2).mid
:
EM
: the chord progression is in E Major.
b6
: the bottom note will be the b6 degree
(C2)
: the scientific pitch notation of which is C2
3
: the next note from the bottom will be the 3 degree
(G#2)
: the scientific pitch notation of which is G#2
The singing exercises will generate all possible combinations for keys and degrees as follows:
$ find .
...
./singing/major/AM_1.mid
./singing/major/BbM_3.mid
./singing/major/CM_4.mid
./singing/major/CM_5.mid
./singing/major/BbM_2.mid
...
./singing/minor/Am_1.mid
./singing/minor/Bbm_3.mid
./singing/minor/Cm_4.mid
./singing/minor/G#m_4.mid
./singing/minor/F#m_1.mid
...
The file name contains all the information required for the answer. For example, BbM_3.mid
:
BbM
: the chord progression is in Bb Major.
3
: you should sing the 3rd degree.
For single note listening exercises, the same note is played across all possible keys:
$ find .
...
./listening_single_note/major/CM_1.mid
./listening_single_note/major/BM_b2.mid
./listening_single_note/major/F#M_b5.mid
...
./listening_single_note/minor/Am_b3.mid
./listening_single_note/minor/G#m_3.mid
./listening_single_note/minor/Cm_1.mid
...
The file name contains all the information required for the answer. For example, G#m_3.mid
:
G#m
: the chord progression is in G# Minor.
3
: the note that is played is the 3rd degree in this key.
Refer to the rdoc for detailed usage instructions and descriptions of commands.
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/DimitriosLisenko/fet.
The gem is available as open source under the terms of the MIT License.