Skip to content

Audio Volume Check

Try the Demo

This task helps ensure participants are wearing headphones correctly and have their audio volume set appropriately. It uses the Huggins Pitch paradigm—a dichotic pitch phenomenon that can only be perceived through binaural (headphone) listening.

The task has two phases:

  1. Volume Adjustment: Participants adjust their volume to just barely hear a pulsing noise
  2. Headphone Validation: Participants complete a three-alternative forced-choice task, identifying which of three noise intervals contains a hidden Huggins Pitch tone

Sample Stimulus

Listen to an example of the noise stimulus used for volume adjustment:

Background

Huggins Pitch is a form of dichotic pitch created by presenting white noise to both ears through headphones, with a narrow frequency band phase-shifted between the left and right channels1. Because the pitch perception depends on binaural processing, it cannot be heard through loudspeakers or with only one ear—making it an effective method to validate headphone use.

This implementation is based on experiments 1 and 2 from Zhao et al.2.

Use Cases

  • Pre-screening: Ensure participants are using headphones before audio-critical experiments
  • Volume calibration: Standardize volume levels across participants by having them adjust to a hearing threshold
  • Quality control: Filter out participants who may be using speakers or low-quality audio equipment

Parameters

Customize the task by changing these on the Parameters tab of the task.

Trial Settings

Number of trials

How many Huggins Pitch trials to present in each attempt. Default: 6. Range: 1–20.

Number of correct trials to pass

The minimum number of correct responses required to pass the headphone check. Set to 0 if Max Attempts is also 0 (volume adjustment only). Default: 6. Range: 0–10.

Max attempts

How many times the participant can attempt the headphone check before failing. Set to 0 to skip the headphone check entirely and only do volume adjustment. Default: 2. Range: 0–10.

Instructions

All instruction fields support rich text formatting.

Adjust text

Instructions shown on the first page alongside the noise sample for volume adjustment. Guides participants to set their volume to hearing threshold.

Practice text

Instructions shown before the practice trial, explaining the three-alternative forced-choice task.

Trial text

Brief instructions shown with each trial, reminding participants of the task.

Reattempt text

Message shown when a participant fails an attempt but has remaining attempts available.

Failure text

Message shown when a participant exhausts all attempts without passing. You should clarify whether they should continue or exit the experiment.

Data

For general information about the various structures and file formats that you can download for your data see Downloads.

As stimulus-wise "annotations" (table rows), with columns:

  • trial - numerical index of the trial
  • time_trial_start - timestamp when the audio was played (seconds since 1/1/1970)
  • time_trial_response - timestamp when the participant responded (seconds since 1/1/1970)
  • stim_id - meadows internal id of the Huggins Pitch stimulus
  • stim_name - filename of the stimulus (format: HugginsPitch_N where N indicates the correct answer position)
  • label - the participant's response (1, 2, or 3)

Analysis

Calculating Pass Rate and Response Accuracy

The main outcomes of interest are whether participants passed the headphone check and their accuracy on individual trials.

In Google Sheets or Microsoft Excel:

  1. Import data: Open the Meadows_myExperiment_v1_annotations.csv file
  2. Extract correct answer: Add a column correct_answer with formula:
    =MID(B2, 13, 1)
    
    (assuming stim_name is in column B, extracts the digit from "HugginsPitch_N")
  3. Check if correct: Add a column is_correct with formula:
    =IF(C2=F2, 1, 0)
    
    (assuming label is in column C and correct_answer is in column F)
  4. Count correct per participant: Use a pivot table or COUNTIFS:
    =COUNTIFS(participation_id_column, "participant_1", is_correct_column, 1)
    
  5. Determine pass/fail: Compare the count to your pass mark (e.g., 6):
    =IF(G2>=6, "PASS", "FAIL")
    
import pandas as pd

# Load the annotations data
df = pd.read_csv('Meadows_myExperiment_v1_annotations.csv')

# Extract correct answer from stimulus name (e.g., "HugginsPitch_2" → 2)
df['correct_answer'] = df['stim_name'].str.extract(r'HugginsPitch_(\d)').astype(int)
df['is_correct'] = df['label'].astype(int) == df['correct_answer']

# Calculate accuracy per participant
accuracy = df.groupby('participation_id').agg(
    n_trials=('is_correct', 'count'),
    n_correct=('is_correct', 'sum'),
    accuracy=('is_correct', 'mean')
).reset_index()

print(accuracy)

# Determine pass/fail (assuming pass_mark of 6 out of 6 trials)
pass_mark = 6
accuracy['passed'] = accuracy['n_correct'] >= pass_mark
print(f"\nPass rate: {accuracy['passed'].mean():.1%}")
library(tidyverse)

# Load the annotations data
df <- read_csv('Meadows_myExperiment_v1_annotations.csv')

# Extract correct answer from stimulus name
df <- df %>%
  mutate(
    correct_answer = as.integer(str_extract(stim_name, "(?<=HugginsPitch_)\\d")),
    is_correct = as.integer(label) == correct_answer
  )

# Calculate accuracy per participant
accuracy <- df %>%
  group_by(participation_id) %>%
  summarise(
    n_trials = n(),
    n_correct = sum(is_correct),
    accuracy = mean(is_correct)
  )

print(accuracy)

# Determine pass/fail (assuming pass_mark of 6 out of 6 trials)
pass_mark <- 6
accuracy <- accuracy %>%
  mutate(passed = n_correct >= pass_mark)

cat(sprintf("\nPass rate: %.1f%%\n", mean(accuracy$passed) * 100))

References


  1. Cramer, E. M., & Huggins, W. H. (1958). Creation of Pitch through Binaural Interaction. The Journal of the Acoustical Society of America, 30(5), 413–417. doi:10.1121/1.1909628 

  2. Zhao, S., Brown, C. A., Holt, L. L., & Dick, F. (2021). Robust and efficient online auditory psychophysics. bioRxiv. doi:10.1101/2021.07.17.452796