Credits
Ceol is made by one person, but it stands on a great deal of other people's work. This page says thank you.
TheSession.org
None of this would exist without TheSession.org. Every tune in Ceol is a tune there: the names, the settings, the ABC notation and the tunebooks all come from it, and Ceol's tune pages link back to it. Its public data dump is what lets Listen compare what it hears with every tune the community has written down.
A special thank you to Jeremy Keith, who has built and run TheSession.org for over twenty years, kept it open and free, and published its data for anyone to use. It is the reason a site like Ceol can exist at all.
Friends of the music
- Michael Eskin made the ABC Transcription Tools. Every tune's notation in Ceol has a link that opens the tune there, where you can play it, slow it down, transpose it and print it. Michael's tools are a gift to everyone who learns from the dots.
- Alan Ng built irishtune.info, the index of Irish tunes on recordings. Ceol will offer deeper integration with it soon, so that a tune you are learning leads you to the recordings it is on.
Listen: the research and the models
Listen works out which tune is playing. It tracks the pitch of what it hears, turns that into a run of notes, and compares the run with every tune in TheSession.org's data, then decides over time which tune fits best. The method was worked out in an evaluation lab against hundreds of hand-labelled tune segments from real session recordings, and only ideas that measured better were kept. It builds on this work:
- YIN, the pitch estimator: Alain de Cheveigné and Hideki Kawahara, "YIN, a fundamental frequency estimator for speech and music", Journal of the Acoustical Society of America, 2002. Ceol uses the probabilistic form from librosa.
- Basic Pitch, a small neural note transcriber from Spotify: Rachel Bittner, Juan José Bosch, David Rubinstein, Gabriel Meseguer-Brocal and Sebastian Ewert, "A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation", ICASSP, 2022. github.com/spotify/basic-pitch.
- PESTO, a self-supervised pitch estimator: Alain Riou, Stefan Lattner, Gaëtan Hadjeres and Geoffroy Peeters, "PESTO: Pitch Estimation with Self-supervised Transposition-equivariant Objective", ISMIR, 2023. github.com/SonyCSLParis/pesto.
- CREPE, evaluated in the lab alongside the others: Jong Wook Kim, Justin Salamon, Peter Li and Juan Pablo Bello, "CREPE: A Convolutional Representation for Pitch Estimation", ICASSP, 2018.
- mir_eval, for scoring: Colin Raffel and others, "mir_eval: A Transparent Implementation of Common MIR Metrics", ISMIR, 2014.
- librosa, the audio analysis library the lab and the listening service are built with: Brian McFee and others, "librosa: Audio and Music Signal Analysis in Python", SciPy, 2015.
The matching itself is classical: an index of short note sequences (n-grams) over every tune, with a decoder that follows the best-fitting tune through time and prefers the tunes your own session plays. On the iPhone, the same models run on the phone itself through Core ML and Apple's Accelerate framework, so Listen works with no connection.
Open source
Ceol is built with these libraries and tools, all open source. Thank you to everyone who writes and maintains them.
The server
Flask, Gunicorn, PostgreSQL (with the pg_trgm and unaccent extensions), psycopg2, asyncpg, Flask-Login, Flask-Babel and Babel, Starlette, Uvicorn, NumPy, Requests, python-dotenv, bcrypt, email-validator, qrcode, Pillow, Python-Markdown, pydub, FFmpeg (through imageio-ffmpeg), boto3 and the SendGrid library.
The website
Svelte, Vite, Vitest, Bits UI, @internationalized/date, Testing Library, jsdom, fake-indexeddb, TypeScript, webpack, Jest, Playwright, lz-string by pieroxy, and the Poppins typeface by the Indian Type Foundry.
Notation
The dots are drawn by abcjs, by Paul Rosen and Gregory Dyke, in a small service built on Express, jsdom and sharp.
The listening service
PyTorch and torchaudio, librosa, SciPy, scikit-learn, Numba, ONNX Runtime, soundfile, resampy, pretty_midi, mir_eval, websockets, and the Basic Pitch and PESTO models above.
The iPhone app
Swift and SwiftUI, Core ML, Accelerate and AVFoundation, and Apple's Swift OpenAPI Generator with its runtime, URLSession transport and swift-http-types, plus swift-collections, swift-algorithms, swift-numerics, OpenAPIKit and Yams.
Services
Ceol runs on Render, stores recordings on Amazon S3, sends email with SendGrid, and sits behind Cloudflare.
And you
Thank you to the players who log their sessions, label recordings, report what's wrong and write in. Every night you log makes Ceol better for the next person who sits down at your session.