View on GitHub

expe3000-go

expe3000 (Go Version)

Work in progress

A multimedia stimulus delivery system designed for experimental psychology and neuroscience tasks requiring accurate timing and low-latency audio.

This app is a port of audiovis to Go, using the go-sdl3 bindings (see also an implementation in C)

Overview

Stimuli are presented according to a fixed, predefined schedule. Although keypress events are saved with a timestamp, the behavior of the program cannot be modified in real-time (e.g., immediate feedback). There is no notion of “trial.” This approach is suitable for fMRI/MEG/EEG experiments with rigid stimulus presentation schedules.

Quick Start

If you have already built the project (using ./build.sh) or downloaded the binaries:

  1. Launch the GUI: Run ./expe3000-gui.
  2. Configure:
    • Click the “…“ button next to Experiment CSV and select experiment_new.csv.
    • Ensure the Stimuli Directory points to the assets folder.
  3. Start: Click the green START button.
  4. Interact: Press any key when the “Press any key to start” message appears to begin the stimulation.

Alternatively, you can run the CLI version:

./expe3000 -csv experiment.csv -stimuli-dir assets

Features

Prerequisites

Installation & Building

Precompiled Binaries

Check the GitHub Releases for automated builds for your platform.

Artifacts are named expe3000-<version>-<os>-<arch>-binary. Choose the one matching your system:

How to check your architecture:

Building from Source

To build both the CLI and GUI versions with version metadata:

./build.sh

Alternatively, for a simple build:

go build -o expe3000 ./cmd/expe3000
go build -o expe3000-gui ./cmd/expe3000-gui

Usage

GUI Mode

Running the GUI version opens an Interactive Setup Window:

./expe3000-gui

CLI Mode

./expe3000 -csv experiment.csv [options]

Options

Experiment Configuration (CSV)

The input CSV file must include at least these four columns in its header: onset_time, duration, type, and stimuli. Extra columns (like cond) are allowed and will be preserved in the output log.

Example (experiment.csv):

onset_time,duration,type,stimuli
1000,500,IMAGE,body01.png
2000,300,IMAGE_STREAM,face01.png:200:100~face02.png:200:100~face12.png:200:100
3000,500,TEXT,Hello !
4000,2000,BOX,Please press\nany key
7000,1,SOUND,sound02.wav

Note: Under Linux, you can minimize video latencies by running the cli version of expe3000 from a linux console (e.g. by pressing Ctrl-Alt-F3) and after stopping the graphics server with systemctl stop gdm. Thus, you will bypass x11 or wayland composers and use the Direct Rendering Manager kernel module.

License & Credits

Developed by Christophe Pallier christophe@pallier.org using Gemini CLI.

The code is distributed under the GNU GPLv3.

Assets Note: Files in the assets/ folder are NOT public domain. Images were created by Minye Zhan and are used with permission. Do not reuse without her consent.