Repository for Indo-European language acoustics through space and time, Under review, 2026.
Phylaudio investigates the phylogenetic signal in speech acoustics. Pre-trained audio models (XLS-R, MMS, Whisper, ECAPA-TDNN, openSMILE) extract embeddings from multilingual read speech (FLEURS-R), which are discretised into phylogenetic characters. Maximum-likelihood (IQ-TREE), distance-based (FastME), and Bayesian (BEAST2) methods infer trees over 50 Indo-European languages and compare them against established linguistic phylogenies.
All code was developed and tested on Ubuntu 24.04 (linux-64) with CUDA 12+ (used version: 13.2).
Install pixi, a conda-based package manager:
curl -fsSL https://pixi.sh/install.sh | bashTo install the main dependencies, run:
pixi install
pixi run post_installAdditional environments are needed for specific pipeline stages:
pixi install -e regression # phylogenetic regression (R + brms)
pixi install -e gp # phylogenetic regression with Gaussian processes (tensorflow, GPflow)
pixi install -e viz # publication figures (plotly, seaborn)See docs/ for detailed instructions for the pipeline scripts. The pipeline runs in six stages:
- Download — audio, metadata, pre-trained models, reference trees
- Language identification — embedding extraction, MLP-based LID training, speech quality estimation
- Sentence trees — per-sentence phylogenetic inference (IQ-TREE or FastME) and supertree construction (ASTRAL)
- BEAST — Bayesian divergence-time estimation with BEAST2
- Post-BEAST — NMF population structure, phylogenetic regression, geographic rate surfaces
- Plots — publication figures
The data/ directory has its own READMEs for subdirectories (eval/,
metadata/fleurs-r/, resources/, trees/).
If you use this code, please cite:
@article{scheidwasser2026phylaudio,
title = {Indo-European language acoustics through space and time},
author = {Scheidwasser, Neil and Zhu, Harrison Bo Hua and Fosse, Samuel and Huang, Hengguan and Greenhill, Simon J. and Bhatt, Samir and Duch{\^e}ne, David A.},
year = {2026},
note = {Under review}
}