Bengalese Finch Song Repository#

  • On Figshare: DOI

  • Dataset license: License: CC BY 4.0

  • License for code for this site / associated scripts: License: MIT

About this dataset#

This is a collection of song from four Bengalese finches recorded in the Sober lab at Emory University. The song has been annotated manually by two of the authors.

We share this collection as a means of testing different machine learning algorithms for classifying the elements of birdsong, known as syllables.

The dataset is housed on Figshare here: https://figshare.com/articles/dataset/Bengalese_Finch_song_repository/4805749. This site is provided as documentation.

Data collection#

This dataset consists of song from four adult (>100-day-old) male Bengalese finches (Lonchura striata var. domestica). Any file associated with one of the four birds is prefixed with that bird’s ID: “bl26lb16”, “gr41rd51”, “gy6or6”, “or60yw70”. Song was recorded from birds as baseline recordings for behavioral experiments (not included in this dataset). Birds were isolated in sound-attenuating chambers and maintained on a 14 h:10 h light/dark cycle, with lights on from 7 A.M. to 9 P.M. All recordings analyzed here are from undirected song (i.e., no other bird was present). All procedures were approved by the Emory University Institutional Animal Care and Use Committee.

Recordings were made with a lavalier microphone, fed into a preamplifier that then ran to a National Instruments DAQ board. An automated data acquisition program in LabView (“evTAF”) detected when audio amplitude stayed abve a threshold for a target period, which then triggered automatic recordings until amplitude dropped again for another fixed period. The files thus recorded were then sorted with a separate program so that the final dataset consisted only of audio files that contained bouts of song.

Annotation#

After the audio files were sorted so that they all contained bouts of song, the song was annotated. Annotation was done by two of the authors (David Nicholson and Jonah Queen) using a custom MATLAB GUI application (“evsonganaly”, originally written by Evren Tumer). Audio was segmented into syllables by setting an amplitude threshold. Segments were post-processed by setting a minimum syllable duration and a minimum duration for the silent gap (the brief quiet period between syllables). Silent gaps less than the minimum duration were removed so that the two neighboring segments merged, and syllables less than the minimum duration were thrown out. A Python implementation of the segmenting algorithm used by evsonganaly can be found here.

After segmenting audio into syllables separate by silent gaps, labels were applied to syllables using the GUI. A schema was created for each individual bird’s song (shown as images above and included as .tif files in the dataset). This schema consisted of syllable labels, chosen by using the acoustic structure of syllables as visualized in spectrograms as well as their sequential context. The schema was typically settled on after labeling a few songs by hand. Syllable labels are arbitrary across birds, i.e., use of the label ‘e’ for a syllable in the song of bird gy6or6 and use of the same label ‘e’ for another syllable in the song of bird bl26lb16 is not meant to indicate that there is any resemblance between these two syllables. (In Bengalese finches, song can vary widely across invididuals.) The one exception is that the label ‘i’ is usually used to annotate the squawky, low-amplitude, high-entropy syllables often referred to as “introductory notes”. (See for example https://royalsocietypublishing.org/doi/full/10.1098/rspb.2020.2796).

While labeling the entire set of songs for each individual bird, any syllables that did not clearly fit into the schema were annotated with other characters that were not part of the set chosen for the schema, so these syllables could be identified later. Some audio files contained contact calls that birds produced before or after song. In some cases (when the bird emitted contact calls frequently) these were annotated, again with a character that was not in the set chosen for the labeling schema.

Usage#

To make it easy to work with the dataset, we have created a Python package, evfuncs, available at soberlab/evfuncs. You can install it with pip or conda.

pip install evfuncs

How to work with the files is described on the README of that library, but we describe the types of files here briefly. The actual sound files have the extension .cbin and were created by an application that runs behavioral experiments and collects data called EvTAF. Each .cbin file has an associated annotation file, with the extension .not.mat, that contains song syllable onsets, offsets, labels, etc., created by a GUI for song annotation called evsonganaly. Each .cbin file also has an associated .rec file, also created by EvTAF. These are included only because they contain the sampling rate, and are used by evfuncs to provide this sampling rate along with raw audio from .cbin files, via the load_cbin function.

New audio and annotation format#

We have now added separate .tar.gz archives that contain the audio files in the .wav format, and the annotations in a .csv format.

The addition of a widely-used audio format makes it easier to load the audio files, e.g. with pysoundfile: https://pysoundfile.readthedocs.io/en/latest/.

The annotation files are in the ‘simple-seq’ format and can be easily worked with in Python using the crowsetta library:

https://crowsetta.readthedocs.io/en/latest/formats/seq/simple-seq.html#simple-seq

or if you prefer, any library that can read .csv files, such as pandas: https://pandas.pydata.org/

Scripts to build the dataset and source code for this site#

Scripts used to organize the dataset, as well as the source code for this site, can be found at: NickleDave/bfsongrepo. These may provide helpful examples for working with the data and/or creating a similar project.

Download#

Through the browser, from Figshare#

Through the terminal, using a script#

Choose the audio + annotation format you wish to use, then paste the corresponding command below into a terminal (hover the mouse cursor over the text for a copy button).

.wav audio + .csv annotations#

curl -sSL https://raw.githubusercontent.com/NickleDave/bfsongrepo/main/src/scripts/download_dataset.py | python3 - --audio-annot-type wav-csv

.cbin audio + .not.mat annotations#

curl -sSL https://raw.githubusercontent.com/NickleDave/bfsongrepo/main/src/scripts/download_dataset.py | python3 - --audio-annot-type cbin-notmat

Citation#

The dataset can be cited as follows:

Nicholson, D., et al. Bengalese Finch Song Repository. 7, figshare, 18 Oct. 2017, doi:10.6084/m9.figshare.4805749.v7.

Please be sure to include the DOI of the version you use with your citation.

If you are developing machine learning algorithms, we ask that you cite other relevant publications and software (see below) and also consider benchmarking against related algorithms. Our impression is that it will require a community of researchers working together to advance the state of the art in this area.

Cited by#

The following works use and/or cite this dataset. Works are listed in order of publication. If you are aware of a scholarly work that uses this dataset that is not cited here, please feel free to contact the maintainer. See Contact below.

Contact#

Please feel free to contact David Nicholson (nicholdav at gmail dot com) with questions and feedback.

Acknowledgements#

This work was supported by National Institutes of Health National Institute of Neurological Disorders and Stroke R01 NS084844, National Institutes of Health National Institute of Neurological Disorders and Stroke F31NS089406.

Spectrogram showing snippet of Bengalese finch song with annotated syllables, for bird with ID bl26lb16
Spectrogram showing snippet of Bengalese finch song with annotated syllables, for bird with ID gr41rd51
Spectrogram showing snippet of Bengalese finch song with annotated syllables, for bird with ID gy6or6
Spectrogram showing snippet of Bengalese finch song with annotated syllables, for bird with ID or60yw70