An open-source tool for citation tone research across tone languages, integrating the full citation-tone analysis workflow into one interactive app.
Designed for phoneticians, typologists, fieldworkers, and students working on lexical tone production.
π± Created by Chenzi Xu & Cong Zhang Β· github.com/chenchenzi/citationtone_hub
A cross-linguistic review of 136 citation-tone studies across 129 tonal varieties of China found that methodological choices diverge at almost every step, limiting how well tone inventories can be compared within and across languages.
f0 (the primary acoustic correlate of tone) is measured, normalised, and reported differently across studies.
Many descriptions rest on very few speakers, limiting how far their tone inventories generalise.
Analytical decisions and procedures are often under-documented, so studies are hard to reproduce.
These divergences make tone inventories difficult to compare within and across languages.
Issues documented in our cross-linguistic methodological review: Xu & Zhang (2024), JASA. Shinytone turns its recommendations into one transparent, reproducible pipeline.
A brief orientation to the linguistic notions Shinytone is built around.
A tone language uses pitch contrastively at the lexical level: the same string of consonants and vowels can map to different words depending on the pitch pattern with which it is produced.
βA language is a tone language if the pitch of a word can change the meaning of the word.β
Yip (2002), Tone, p. 1.
Definitions span seventy years of typology and theory: Pike (1948); Hyman (2006); Yip (2002).
A citation tone is the pitch shape a word takes when it is pronounced in isolation, away from the influence of neighbouring words, sentence intonation, or discourse context. This makes it the cleanest starting point for studying a languageβs tonal contrasts.
Shinytone is designed for this use case: controlled recordings of single words or short syllables, one tone category per token, multiple speakers and repetitions.
Strictly speaking, Shinytone analyses f0 (fundamental frequency): the physical property of a voiced sound, measured in Hertz. Pitch is its perceptual correlate: how high or low a listener hears the sound.
We say pitch informally (rising pitch, falling pitch), but every measurement, plot, and model output is f0 in Hz, or its by-speaker normalisation in semitones or z-scores.
Two complementary workspaces, from audio recordings to pitch-contour analysis.
Go from raw .wav files to clean f0 contours, ready for the analysis pipeline.
f0 from audio with wrassp, or import Praat .Pitch / .PitchTier files.
Listen, inspect the waveform, and fix extraction errors frame by frame.
Run the full citation-tone analysis pipeline on f0 measurements (CSV).
Plot f0 contours by tone, with faceting and normalisation.
Flag octave jumps, outliers, and tracking errors.
Polynomials, GCA, and GAMM with tonal defaults.
Convert contours into Chao tone numerals (1β5).
Go from raw .wav files to clean f0 contours, ready for the analysis pipeline.
Extract f0 contours from .wav using the wrassp R package, or import
pre-computed Praat .Pitch / .PitchTier files.
Review and correct extraction artefacts by listening, inspecting the waveform, and editing individual frames (halve, double, interpolate, smooth, manual entry).
βΈ Click a step to preview its screenshot.
Run the full citation-tone analysis pipeline on f0 measurements (CSV).
Plot f0 contours by tone, with speaker faceting and normalisation (z-score / semitone).
Flag likely f0 artefacts (octave jumps, outliers, tracking errors) via z-scores and jump detection.
Per-token polynomials, Growth Curve Analysis (GCA), and Generalised Additive Mixed Models.
Convert tone contours into Chao tone numerals (1β5) for cross-language comparison.
βΈ Click a step to preview its screenshot.
Four pipelines: the output of each chains into the input of the next.
Beyond bundling existing tools: Shinytoneβs methodological contributions.
From raw recordings to publication-ready models and Chao numerals: extraction, screening, correction, normalisation, modelling, and summary in one consistent environment, instead of juggling Praat scripts, spreadsheets, and ad-hoc R code.
Three complementary layers: speaker-level extreme-value (max / min) z-scores, token-level median/MAD z-scores by speaker Γ tone, and sample-level frame-by-frame jump, octave, and carryover checks with median-aware flag placement, catching halving/doubling, stray frames, and whole-contour shifts.
Every flagged token links back to its audio: listen, read the waveform, and repair individual frames (halve, double, interpolate, smooth, manual entry). Every edit is written to a downloadable log, so quality control is automatically documented and reproducible rather than silent.
Automated conversion of modelled contours into the Chao (1930) 1β5 tone letters, with the reference-line and interval-based methods shown side by side, so the final summary is a transparent, well-justified decision rather than a black-box output, and numerals can always be adjusted to preserve phonetic contrasts.
Everything the app does is also available as a scriptable, reproducible R package.
# install from GitHub remotes::install_github("chenchenzi/citationtone_hub") # launch the Shiny app locally shinytone::run_app()
run_app() serves the exact interface,
but on your own machine: no upload-size cap, memory ceiling, or session timeout. Ideal for
large-scale datasets and recordings that never leave your computer.Per-speaker f0 normalisation in semitones, z-scores, or ERB.
Per-token z-scores plus sample-level jump detection.
Growth-curve and GAMM models with citation-tone defaults.
Normalised contour β Chao (1930) 1β5 tone-letter notation.
Lowering the barriers to rigorous, reproducible tonal analysis.
wrassp, rPraat, praatpicture).