Gorilla: Headphone test

Adapted from: Woods, Siegel, Traer, & McDermott. (2017). Headphone screening to facilitate web-based auditory experiments. Attention, Perception, & Psychophysics, 79(7), 2064-2072.

This is not necessarily the best or most straight-forward way to implement this test. Feedback and suggestions are welcome.

Paper is available here via DOI: 10.3758/s13414-017-1361-2.

Creating sound files

These instructions require

The sound files to be generated are as follows:

  • 800 ms 200 Hz steady state baseline tone

  • 200 ms 200 Hz Hanning window fade in/out tone

    • 70 dB unaltered (aligned) version [L1]

    • 70 dB inverted version [L2]

    • 64 dB inverted version [Q]

  • 500 ms silent interval

  • Six (6) combinations for stimuli

    • Q-L1-L2.wav

    • Q-L2-L1.wav

    • L1-Q-L2.wav

    • L2-Q-L1.wav

    • L1-L2-Q.wav

    • L2-L1-Q.wav

Generating baseline tones

Step 1: Steady state

First, create a new sound in Praat. To do this, go to New > Sound > Create Sound as pure tone...

Then, create the central steady state portion of the tone. Make sure to create a stereo file (2 channels), the end time should be 0.8 seconds, and the tone frequency should be 200 Hz. Additionally, I have set the fade-in and fade-out durations to be 0.00001 seconds, to ensure the amplitude is steady throughout the generated tone.

Step 2: Fade-in and fade-out

Next, create the fade-in/out tone using the same menu option. This is identical to the previous tone, except that the end time is set to 0.2 rather than 0.8.

Now you will have two sounds in your Praat Objects window (steady and fade). The next step is to apply a Hanning window to the fade sound file. Select fade in your Objects window and click the Modify button on the righthand menu: Modify > Multiply by window...

A pop-up window will appear. Select "Hanning" and click OK.

Now, when you open the fade sound, you will see a waveform like the one in the image below. Centre your cursor at the precise midpoint (this should happen automatically, but to ensure it, you may want to move your cursor to the nearest zero crossing: Ctrl + 0 or ⌘0.

Select the first half of the sound file by holding the Shift key and clicking on the grey/tan area on the left side of the waveform. Cut this section of the waveform using Ctrl + x or ⌘x.

Immediately open the steady sound file and move the cursor to the very beginning of the file by clicking on the grey/tan area to the left of the waveform.

Paste the fade in selection here using Ctrl + v or ⌘v. This should create a seamless lead-in to your steady state tone. To check this, make sure the spectrogram has no vertical grey bars, which would indicate clipping or high-frequency components introduced by a misaligned signal.

Return to the fade file, and select the entire remaining waveform. This is the fade out selection. Copy this (you will not be able to cut it) using Ctrl + c or ⌘c.

Navigate immediately back to the steady file. Move your cursor to the end of the file by clicking on the grey/tan area to the right of the waveform. Paste the fade in selection here using Ctrl + v or ⌘v.

You can view the entire wave form by clicking the "all" button at the bottom or using Ctrl + a or ⌘a to ensure the waveform has joined in smoothly, as before.

You may wish to save the newly created sound file now, before modifying it further. You can do so in the Praat Objects window. Click on the steady sound file, which you have modified, click Save > Save as WAV file..., then choose an informative name that will distinguish it from the other files you will be creating. Example: 200Hz-1000ms-Hanning_window.wav

Step 3: Silent interval

Create a 500 millisecond silent interval for later use. Navigate to the menu New > Sound > Create Sound from formula..., which is immediate below the pure tone option.

The formula for silence is simply 0 and the end time should be 0.5 seconds, in stereo (2 channels).

Save the newly created sound file now. Example: 500ms-silent_interval.wav

Modifying baseline tones

The next steps will create three tones that can be combined into stimuli. If you are continuing directly from the previous instructions, you can perform these steps on the steady sound file, which you have modified. Otherwise, open the saved sound file 200Hz-1000ms-Hanning_window.wav.

Step 4: Modify intensity for loud tones (L1, L2)

Using the righthand menu buttons, highlight the steady file in the Objects window, and click Modify > Scale intensity...

A pop-up window will appear requesting the loudness for the selected file. Enter 70 and press OK.

Save the newly created sound file now, before modifying it further. Example: 200Hz-1000ms-Hanning_window_70dB.wav

Step 5: Modify intensity for quiet tone (Q)

Repeat Step 4 on the same file, but use the value 64 instead. This creates the quiet tone.

Save the newly created sound file now. Example: 200Hz-1000ms-Hanning_window_64dB.wav

Step 6: Invert one channel for second loud tone (L2)

Open the 70 dB file (200Hz-1000ms-Hanning_window_70dB.wav) in Audacity. You will see that it has two channels. Click the name of the file or open the menu with Shift + M.

In the menu, select

Make sure to click off of the two mono tracks to deselect them both. Then, click on one of the two tracks, that is, the one you wish to invert or phase shift. Then navigate to the menu option Effect > Invert.

To recombine the two tracks into a stereo file, Shift-click on both tracks to highlight them both. Then, click on one of the track's names, or Shift + M as before, to open the menu.

Export the stereo track from the File menu (File > Export > Export as WAV).

Save the newly created sound file now. Example: 200Hz-1000ms-Hanning_window_70dB-inverted.wav

Combining tones into stimuli files

This section will describe how to create one of the six stimulus files. Repeat with a different order of tones to create the remaining five.

In Praat, open the three saved tone files and the silent interval:

  • L1: 200Hz-1000ms-Hanning_window_70dB.wav

  • L2: 200Hz-1000ms-Hanning_window_70dB-inverted.wav

  • Q: 200Hz-1000ms-Hanning_window_64dB.wav

  • Silence: 500ms-silent_interval.wav

Highlight the silent interval sound file and click the 'Copy...' menu button at the bottom of the Objects window. Create a copy with a name that reflects the order of the tone files for the stimulus. We will be creating the order L1-L2-Q, so name the copy L1L2Q. Click View & Edit for this sound file and place your cursor at the beginning of the file (by clicking to the left of the waveform).

In addition, open the file for the L1 tone. Select the entire file, copy it (Ctrl + c or ⌘c), and paste it at the beginning of the L1L2Q waveform (Ctrl + v or ⌘v).

Next, open the file for the L2 tone. Select the entire file, copy it, and paste it at the end of the L1L2Q file. The file should now be precisely 2.5 seconds in duration.

Open the file that contains only 500 milliseconds of silence (do not try to copy it from the L1L2Q file which you have already edited), and again, paste it at the end of the L1L2Q file.

Finally, open the Q tone. Select and copy the entire sound, and paste it at the end, after the second silence, of the L1L2Q sound file. You have now completed this stimulus file.

Save this sound file now. Use a name that is distinctive but easy to type. Example: L1L2Q.wav

Repeat this process for the remaining five stimulus files, using the other five orders.

Creating task on Gorilla

Gorilla requires a spreadsheet to draw from a pool of stimuli and randomise the orders of them in their presentation. It also requires a template, or task structure, within which to display the stimuli. The following two sections describe how to create this task within Gorilla.

Spreadsheet structure

In order to have trials, which are listed in the spreadsheet, and shown your participants, you must first upload the six sound files you created. This can be done in the Stimuli tab in the Gorilla interface.

Then, if you navigate to the Spreadsheet tab, you will see either a blank row (if you have not uploaded your own) or the spreadsheet which you have previously uploaded. The columns you will see by default are randomise_blocks, randomise_trials, display, and ANSWER. The final column, Sound will be added once your task is set up, as described in the next subsection. Once this column is created, you should populate it with the exact names of your stimulus files.

REMEMBER: all fields are case sensitive. This means that Listen is different to listen.

To randomise the trials so that they are not in alphabetical order according to the sound file name, nor are they in the same set order for each participant, make sure to indicate that these trials should be randomised. This may look different if you have additional blocks of stimuli (e.g., for the experiment proper). This will be done in the randomise_trials column.

In the display column make sure to precisely write the name of the task in six rows, so that each of the six trials are included in the task.

In the ANSWER column, make sure to precisely copy the names of each of the buttons that correspond to the "correct" answers. This means, when the Q (quiet) trial occurs in the third position, the answer should be THIRD sound is SOFTEST.

Refer to the official Gorilla documentation and guidance for further information in setting up the spreadsheet and stimuli.

Task structure

Within the Gorilla task structure interface, the headphone test task will be an individual task. This task will consist of two screens: one to play the tone (with three buttons), and one to separate the trials visually and temporally.

The first screen, here called 'Tone', should follow the basic layout described in Woods et al. (2017). They used a three-way forced choice task to reduce the chance of participants guessing correctly.

The top of the screen consists of a Web Audio zone. The 'Audio' type zone is being deprecated, so make sure to use the current guidance on the Gorilla site when setting this up.

Web Audio Settings

If you click on the gray Web Audio zone, a pop-up overlay will appear. In this pop-up, you can select the tab called Spreadsheet, which will allow you to create and name the column in the spread sheet that contains the stimulus file names. In this example, it is called Sound.

Click "OK" and you the window will close with this new column created in your spreadsheet. Back on the righthand side of the screen, you will see the Configuration settings.

In the configuration settings for the Web Audio zone, I recommend specifying that the participant can start the audio manually (1). This will maintain engagement and make sure the participant is ready to listen when the tones are played, since this is not a timed task. I also recommend only allowing the participant to listen to the sound once (1), to prevent participants from lingering too long on this task or listening in unnatural ways that will not be reproduced in the experiment proper. Finally, do not set this screen to advance when the media is finished playing (0), because your participant will likely be paying attention to the buttons and you do not want to distract them from the task as they are listening and deciding what to click.

Under Advanced Settings, make sure to change the setting of Audio format to .WAV. The default is to play .mp3 files, but we have created and uploaded .wav files, so this change is important.

Button Settings

Returning to the screen layout above, you will need to click on each button to name them. A pop-up overlay will appear. Since we want to keep the buttons in the same order for each trial, we should name each from the Static tab of the pop-up.

The three buttons are labeled as described in Woods et al. (2017):

  1. FIRST sound is SOFTEST

  2. SECOND sound is SOFTEST

  3. THIRD sound is SOFTEST

It is a good idea to keep these in order, rather than randomised, as they are ordered conceptually in the stimuli. This may need to be reversed for languages that are written right to left, to preserve the orthographic-auditory conceptual order.

Click "OK" to return to the configuration settings. All three buttons' settings can be set the same: do not hide the button after press (1); do not allow unlimited responses (0); and allow the screen to advance (0).

Active Response Settings

Finally, the Active Response configuration requires some information from the spreadsheet which you have uploaded or created within the Gorilla interface. Whatever the name of the column which contains the 'correct' answers, specify this to determine whether the participant has selected the correct sound as softest. In this example, the column is named ANSWER.

Enabling "sudden death" (1) means that the screen will advance as soon as the participant has clicked one of the three buttons. This setting will prevent participants from second guessing or clicking around before making a decision.

Since "sudden death" is enabled, there is only one answer to score, so the third setting can be skipped.

If you wish to give your participants a time limit to respond, you can set this to a value (recommended no smaller than 5000 milliseconds). In this example, no timeout is set because none was specified in Woods et al. (2017).

Pause screen

Returning to the lefthand task structure, create a second screen for the inter-trial interval, or Pause. This pause will visually and temporally separate the trials so that the participant knows they have moved on to the subsequent trial (rather than thinking they have remained on the previous trial after clicking a button).

In this screen's configuration settings, you can set the time to automatically advance to the next screen to any number of milliseconds, though I recommend a minimum of 500 for it to be perceptually salient. If you wish it to be much longer, you may also wish to add a countdown setting, as seen below the timeout setting.