David Griesinger's Sonic Focus App
copyright 2016
Algorithm by: David Griesinger
Code by: Kirk Bushen and David Griesinger
Website: dgsonicfocus.com
Description: This program uses individualized tests to compensate for timbre and localization when listening with the headphone of your choice. Also, a binaural crosstalk mode is included. Available on MacOS/Win64 (standalone, AUv3, VST3, AAX) Android/iOS.
Quick Start Notes:
1. All data in the app is persistent upon data entry. There is no need to manually save.
2. If you are using Bluetooth devices, you may need to relaunch the app each time a Bluetooth device is changed. It is a good idea to pair devices (e.g. speaker and headphone) to the phone before the app is launched. This will ensure smooth switching between Bluetooth audio devices without having to relaunch the app.
3. For computer versions use the 'Options' tab to select the soundcard microphone input and soundcard speaker output. On Windows the 'Direct Audio' option is usually best. Select the largest audio buffer size. AAX and VST versions will use the soundcard latency.
4. IMPORTANT! -- Go to the 'Main' tab and Engage 'MuteIn' (black) to eliminate the microphone feedback loop.
5. Enter values on the 'Setup' page: Enter your 'ListenerName'. The plugin and/or standalone versions support multiple users. Make sure each user enters a unique 'ListenerName'. Otherwise a previous user's data will be overwritten. Enter the name of your reference loudspeaker and the name(s) of your headphone(s). Set 'Input Source' to 'Device input' - (iOS/Android version only).
6. If you are using VST or AAX, you may need to keep the transport playing if the Test noise will not play.
7. On iOS the data files used or created by our app can be found in the 'Files' icon. On Android, the user data are found in the DGSonicFocus folder in /Phone/Documents/DgSonicFocus. Data in an app running on Windows and Mac is also found in /Documents/DgSonicFocus.
Instructions for using this app.
Frequency spectra at the eardrum above 500Hz are highly individual. The brain learns over a long period of time to use these spectra to precisely localize sound in three dimensions. Our apps are designed to measure spectra at your eardrums from a frontal frequency - flat loudspeaker, and then measure these same spectra from one or more pairs of headphones. The difference in dB between the spectrum from the loudspeaker and the spectrum from the headphones is the equalization needed to match these headphones to you. The result is an enormous improvement in sound. You perceive frontal localization and accurate timbre.
Test 1: Calibrating the external Reference Speaker: We do not advise you to skip the speaker calibration. Using our app to equalize a headphone with an uncalibrated speaker will make a significant improvement to the headphone sound, but the over-all frequency response will be that of the external speaker. If your speaker is already calibrated to a flat response, you can skip to Test 2.
Calibrating your speaker requires a quiet environment and a microphone with a relatively flat frequency response. The built-in mic on the iPhone will do, but Android mikes are not identical and may not be flat enough. The 'Micro-Microphone' from ThumbTacks is an inexpensive plug-in microphone of high quality that can be directly used with our app. Other microphones may be used, but be aware that most 1/2 inch reference microphones such as the Behringer ECM8000 or Dayton Audio EMM-6 are intended for room measurements in a diffuse sound field, and not for near-field loudspeaker measurements. If you are using one of these mikes, hold the microphone so the sound is incident from the side, not from the front. The difference can be as much as 9dB at 12kHz. Small microphones such as the iPhone mic, the ThumbTacks and the Dayton Audio Imm6 can be used pointing either from the side or directly at the source.
Connect your reference speaker to the app. A Bluetooth speaker will connect to the app if you already paired it to the phone. Check that the 'MuteIn' box in the 'Main' tab is black(muted). In the 'Setup' tab set the 'Input Source' to 'Device Input'. Ignore the feedback warning because 'MuteIn' is blocking the microphone. Check the 'Test Speaker' box. This will temporarily un-mute the microphone, and the sound level at the microphone will display in the upper right of the main menu.
The reference speaker needs to be calibrated and heard about 18 inches from where you will put your ears. A full range loudspeaker is not essential. Frequency spectra at the eardrums below 500Hz are not strongly individual. Headphones can be calibrated below 500Hz without an external reference. A small Bluetooth stereo speaker with the drivers separated by the distance between your ears may be advantageous. Many studios have a pair of two-way near/mid-field loudspeakers at + -30 or +-40 degrees from the listening position. You can use one of these as a headphone reference. But you must drive only one of the pair, and you must look directly at it with your ears at the height between the tweeter and the woofer where the response is smoothest. You can select a single speaker for equalization and testing using the 'ExtSpkr Cal Point' box in the 'Setup' tab.
To equalize the speaker set the 'Freq Band' in the 'Mode Adjust' box to 500Hz, and set the 'Level' to zero dB. Hold the microphone about 18 inches from the middle of your speaker and click 'Test'. A 500Hz noise band will play. Adjust your phone or computer volume so the level display in the upper right corner of the app reads about -20dB. Then step up in frequency while using the 'Level' buttons to adjust each band to read the same value(~- 20dB). Step back down while checking the level meter and re-adjust as needed. Then go below 500Hz to the limit of your loudspeaker. Low frequency calibration below 500Hz is not essential for headphone equalization. Leave the 'Level' value at zero dB when you reach the limit of the loudspeaker. When you are satisfied unclick 'Test'. You have successfully equalized your reference loudspeaker. The data file 'speaker_calibration_data.txt' is created as you perform this test. You can listen in stereo to your equalized speaker(s) using the device input or with an iOS/Android device by setting 'Input' to 'Player' in the 'Setup' tab.
When the app is installed on a computer or a workstation you can follow the instructions above using noise bands if you have a calibrated sound meter, or a means of connecting a calibrated microphone to the app. If you have a real-time analyzer, or a cellphone with an accurate microphone and an app containing a real-time analyzer such as Audiotools or Audiotool, our app can supply a decorrelated pink noise signal. To start the pink noise click on the 'page' tab and set the xtalk_Level to zero. In the 'main' tab select 'Xt' in the headphone window, check 'Test Speaker' and click 'Test'. Pink noise will play through the speaker(s). Use the equalizer buttons on our app to make the spectrum flat. Don't forget to reset the xtalk_level back to 19 when you are through.
Individual speakers in a speaker pair can be equalized by selecting one or the other with the 'ExtSpkr Cal Point' box in the 'Setup' tab. But it is easier to equalize them by placing your microphone first near one speaker and then the other while both are running. The speakers will not interfere with each other because the noise bands are decorrelated (still using the 'Together' setting even if the speakers are spaced apart). Use the balance control to make the spectra from each speaker the same. Negative values of the balance control raise the level of the left speaker, positive values raise the level of the right speaker. The 'Apart' setting is for calibrating from a phantom center position and is not recommended.
Test2: Finding your personal equal loudness curve from your calibrated loudspeaker.
Check the 'Test Ears' box. Set the 'Frequency Band' to 500Hz and the 'Level' to zero dB. Click 'Test'. A 500Hz noise band will play. With your head about 18 inches from your calibrated speaker and looking directly at it, adjust the volume control on your device to a comfortable listening level. Then click the frequency up to 630Hz. The 500Hz reference band and a 630Hz band will now alternate once a second. Adjust the loudness of the 630Hz band to match the loudness of the 500Hz band as best you can.
(The rapid alternation between a reference and a test frequency is essential in an equal loudness test. If the rate of alternation is too slow, the automatic gain control in our ears will adjust to the new frequency and it will be impossible to accurately perceive the relative loudness. This is why we are able to use headphones that are far from correctly equalized. In a short time, the ear adjusts the spectrum to be useable. But it is impossible for the ear to determine the direction of sounds in the vertical plane. We perceive the sound inside our head, and with a generic timbre.)
Click the frequency up while adjusting each band to be the same loudness as the 500Hz band. When you are at your frequency limit of hearing go back down slowly and check your dB values. Our app uses a mathematical function to reduce the interaction between different bands, but almost always the second listening adjustment is more accurate. Then go down in frequency to the limit of your loudspeaker. It is not essential to test your hearing lower than that. Leave those 'Level' values at zero dB, or at the value of the lowest band that had a valid loudspeaker measurement. The data file 'equal_loudness_data.txt' is created as you perform this test. Un-click 'Test'.
Test3: Finding your personal equal loudness curve using headphones.
Check the 'Test/Run Binaural System' button and set the 'Level' to zero dB. Turn on or plug in your headphones and put them on. Click 'Test'. Adjust the volume of the 500Hz noise band to the same loudness you used for the loudspeaker equal loudness test. Repeat the alternating band equal loudness procedure from Test 2, but this time adjust both the loudness and the L/R balance using the 'L/R Balance' buttons. When you are satisfied with frequencies above 500Hz go down in frequency to the limit of your headphones. Human hearing becomes less sensitive below 100Hz. I prefer to make 80Hz about 2dB less than equally loud, 63Hz about 4dB less, and 50Hz 6dB less than equally loud. When you are done, check your values again, both for loudness and for left/right balance. When you un-click 'Test', the app calculates the equalization needed to match the headphones to your individual ears.
Two files are created as you work in Test 3. 'headphone_calibration_data.txt' stores the equal loudness data that you enter, and 'headphone_response_data.txt' stores the equalization needed to match the headphone to you. The data in this file is not used directly by the app. It is there in case you want to port your headphone equalization to an external 1/3rd octave equalizer. The file has four columns. The first two are the difference between your speaker equal loudness and your headphone equal loudness. This is the data you need to equalize your headphones using a mathematically compensated 1/3 octave equalizer like the one in our app. The second two columns hold the data you should use if you are equalizing headphones with an uncompensated analog or digital 1/3 octave equalizer. Our equalizer uses time-domain filters with a Q of 5. Most commercial 1/3 octave equalizers use filters with a Q of three. The difference in sound is small. Some cell-phone music players implement 1/3 octave filters in the frequency domain. These can ring ferociously. Beware!
Congratulations you are done. You can see your personal equal loudness curves and your headphone equalization in the 'Graphs' tab. You can play music on the iOS and Android versions with the 'Player' tab, or with class compliant USB. With the computer versions you can set your computer audio outputs to the virtual cable input. Use the 'Options' tab in the app to select virtual cable as an input, and your computer soundcard as the output. If you do not have virtual cable on your computer, download it from the internet.
Playing audio:
For Android/iOS only: in the 'Settings' tab set 'Input Source' to 'Player', and the 'Player' tab will appear. Select it. Then select 'Add' and select a song to appear in the playlist. In the playlist, touch/highlight the song you want to play and hit 'Play'. You can use a class complaint USB source to play stereo music through your phone by setting 'Device Input' box to 'Input Source' in the 'Setup' tab. You only need to un-mute the input in the 'Main' tab if the USB is used.
For the standalone computer versions, in the 'Options' tab set 'Input' to 'CABLE Output (VB-Audio Virtual Cable)' for PC or 'Cable/JACK/Soundflower' for Mac. The 'Audio buffer size' in the 'Options' tab should be set to maximum. IMPORTANT! - Check to make sure a microphone is disconnected, and then disengage 'MuteIn' in the 'Main' tab. It is not necessary to disengage 'MuteIn' on Android/iOS unless you are using a class compliant attached USB soundcard. With the non-cellphone versions you can play any sound on your system by using any computer audio player. Just set the player's audio output (some players just use the default output so you may have to make it the operating system's default output) to 'VB Audio Virtual Cable/JACK/Soundflower'. This will route the output of your audio player through the virtual cable, where it can be picked up by our app.
Other headphones may be calibrated by selecting one of the four headphone names in the drop-down list. Simply repeat Test 3 (Tests 1 and 2 do not need to be repeated). You can calibrate up to 4 headphones.
The calibration of a wired headphone may change when it is paired with different headphone preamps due to loading impedance. Some laptops have an output capacitor that is too small for low impedance headphones (particularly earbuds). If data from a phone or a computer with a low impedance output is transferred to a different device the low frequencies may be lost.
When the 'Stereo/Sur On' button is set to 'SURR On' the sound image in headphones spans +-90 degrees. In 'Stereo' mode a Head Related Transfer Function (HRTF) is applied that makes the sound image closer to a stereo pair of speakers at about +-40 degrees. This setting may be useful when making a mix with headphones that is intended for loudspeakers.
For Crosstalk only: Our App includes a crosstalk cancellation system for playing music or binaural recordings through a near-field pair of loudspeakers. Because the ear canals of the listeners are not occluded by headphones, individual equalization is not needed. To use the crosstalk system set up a pair of small full-range speakers at head height about +-45 degrees from your ears. Equalize the pair carefully using our app. Click 'Test/Run Binaural System' and select XTALK in the headphone window. Whatever you play through the app will play with the crosstalk cancellation activated.
You should add an important tweak. The loudspeakers are at +-45 degrees from the front of the listener, which means that even with the crosstalk cancellation the +-45 degree frontal HRTF of the listener is active. We desire to hear the sound from all around us, but many higher frequencies will be perceived as too frontal. The solution is to use the equalizer in the app to convert the listener's 45 degree HRTF to a frontal HRTF. We have found that setting the 3000Hz band in the Xtalk equalizer to -6dB, and the 6300Hz band to -3dB makes a substantial improvement to the realism of the image. Do this the first time you try the xtalk setting. The app will remember that you did it.
The crosstalk system can be adjusted for different head sizes. This can be done by ear using the 'Xtalk Delay' control in the 'Page2' tab. The default value is 11 or 12 samples at 44.1kHz. Smaller heads typically need smaller delay values. Sample rates of 48kHz should start with values of 12 and 13 samples. 96kHz sample rates should try between 24 to 26 samples. For more on the binaural use of the XTALK calibration mode see dgsonicfocus.com.
8. For the plugin versions only: if a headphone head-tracker (e.g. Waves NX) is used (e.g. after our plugin), make sure to create a separate headphone profile and calibrate the headphones (Test3 above) with the head-tracking plugin engaged. You should fix the tracker to a 0 degree full frontal azimuth though, to eliminate rotational effects. We have discovered that during calibration, this will additionally compensate for any frontal processing the head-tracker already imposes. After calibration you can then turn on the full rotational functionality of the head-tracker. Make sure the app is set to 'Surr On' because the headtracker will add its' own HRTF.
9. Enjoy listening to music with your individually calibrated headphones! By matching the headphone response to your personal frontal spectra your music is now frontal and outside your head. The sound coloration typical of headphones is removed, and sound staging is precise.