Bemol is a free and open-source ear training app that helps music hobbyists and music students train and develop relative pitch, the ability to recognize a played musical note in a given tonal context.
Bemol helps people learn the character of each musical note by having them internalize how each note relates to its nearest tonic in a given key. In each practice session, the user is prompted to identify a series of played notes. Before each note, Bemol plays a I - IV - V - I cadence to establish the key. After the user has identified the note, a short melody is played to resolve the note to the nearest tonic. Listening to this final resolution helps cement the relationship between the note and the tonic in the ear and the mind.
As this process repeats, the user starts to internalize the character of each note in a given tonal context. This helps develop relative pitch and eventually they will have a much easier time recognizing any note as long as a tonal context is clearly established.
This ear training method was first described and implemented by Alain Benbassat in his free Functional Ear Trainer desktop app. Bemol is simply a free and open-source implementation of the method for iOS.
Bemol is organized in a series of progressive levels. The first level consists only of the first 4 notes in the key of C major. Once the user has at least 90% accuracy in this level, they can move to the next one, where they can practice the next 4 notes.
Once the entire scale is mastered, the next level will introduce chromatic notes. After this, a new key is introduced. This can go on until the user has practiced in all 12 major and 12 minor keys. Or they can choose just to practice in a random key after they have mastered the keys of C major and C minor.
- Bemol is available on the AltStore.
- Alternatively, you can install Bemol from TestFlight here. This option may be useful if you don't have access to the AltStore or if you prefer to use the cutting-edge version of the app.
Important
The version of the app in TestFlight is the most recent development version. Which means that it may contain newer features and/or improvements not yet available in the official release on the AltStore. On the other hand, it is also less stable and may contain newer bugs and crashes. You can help and contribute to the development of Bemol by reporting these bugs through TestFlight.
-
Install Xcode. Bemol is built with Swift 6 and Xcode 16.2.
-
Clone the repository and run
cd Bemol/. -
Run
touch ./Configurations/Signing.xcconfigto create an empty signing config file. -
Run
open Bemol.xcodeprojto open it in Xcode. -
Press
Runin Xcode to launch the app in a simulator. -
If running on a device, you have to provide the id of your development team in
./Configurations/Signing.xcconfig. The contents of the file should look like this:// Signing.xcconfig CODE_SIGN_STYLE = Automatic DEVELOPMENT_TEAM = <your-development-team-id>
Tip
To be able to hear piano sounds (and not sine waves), you'll need to download a sound font in the sf2 format and save it under Bemol/Resources/sound_font.sf2. The TestFlight version of Bemol uses an excellent and open-source sound font from MuseScore that you can download here (look for MuseScore_General).
- Product -> Test in Xcode.
- Or run
./Scripts/test.shfrom the command line. The tests results bundle will then be available atArtifacts/test-results.xcresult.
Run ./Scripts/upload_to_testflight.sh <marketing_version> <build_version> to archive and upload a new build to App Store Connect. ./Scripts/next_marketing_version.sh and ./Scripts/next_build_version.sh can be used to automatically generate the required arguments.
The script expects the following environment variables to be set:
APPLE_IDAPP_STORE_CONNECT_API_KEYAPP_STORE_CONNECT_API_ISSUER
These are self-explanatory and their values can be found in App Store Connect. The script also expects a private key file to be available at private_keys/AuthKey_<APP_STORE_CONNECT_API_KEY>.p8.
The code and data files in this repository are licensed under the terms of the version 3 of the GNU General Public License as published by the Free Software Foundation. See the LICENSE file for a copy of the license.
