An intuitive, type-safe Python wrapper for the Xeno-Canto API
Project description
Xeno Canto API Client for Python
An intuitive, type-safe Python wrapper for the Xeno-Canto API.
Streamline your bioacoustics and machine learning workflows by searching, filtering, and processing wildlife recordings with full validation and IDE autocompletion.
Project Sponsors
Disclaimer
This project is a free and open-source tool intended for educational purposes only;
This project is provided AS IS without any warranty - use at your own risk;
This project is not associated with, maintained by, or endorsed by the Xeno-Canto Foundation;
Users are responsible for adhering to the Xeno-Canto Terms of Use and respecting the licensing of individual recordings.
Quickstart
pip install xc-api-py
pdm add xc-api-py
Basic Usage
from xc_api import Client, SearchQuery, tags
from datetime import timedelta
# Instanciate a client with your Xeno Canto API key
client = Client('Your API key')
# Create a query
query = SearchQuery(
animal_genus='acrocephalus',
animal_sex='male',
recording_length=tags.Length.at_least(timedelta(seconds=10)),
recording_country=tags.Country('germany'),
)
# Search the API, optionally pass a limit argument
recordings = client.find(query, limit=10)
# Get a specific recording
recording = client.get_by_id('129150')
Advanced Usage
Pandas
from xc_api import SearchQuery, RecordingAudio
import pandas as pd
query = SearchQuery(...)
recordings = client.find(query)
df = pd.DataFrame.from_records([r.model_dump() for r in recordings])
SoundDevice
from xc_api import SearchQuery, RecordingAudio
import sounddevice as sd
recording = client.get_by_id(...)
audio = RecordingAudio.from_recording(recording)
with audio.load() as a:
sd.play(a.to_numpy(), a.sample_rate)
sd.wait()
# Optional: save original file locally
audio.save()
BirdNET
from xc_api import SearchQuery, RecordingAudio
from birdnetlib import RecordingBuffer
from birdnetlib.analyzer import Analyzer
from datetime import timedelta
analyzer = Analyzer()
query = SearchQuery(
animal_group='birds',
recording_sample_rate=tags.SampleRate(48000), # IMPORTANT: BirdNET analyzer expects 48000Khz
)
recording = client.find_one(query, limit=1)
audio = RecordingAudio.from_recording(recording)
with audio.load() as a:
arr = a.to_birdnet(length=timedelta(seconds=3.0)) # Optional: Segment the audio
buffer = RecordingBuffer(analyzer, arr)
buffer.analyze()
for detection in buffer.detections:
...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xc_api_py-0.1.12.tar.gz.
File metadata
- Download URL: xc_api_py-0.1.12.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.26.3 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb0b1f08ade307e191f7007f0e08998660b955e66d6a851444d6fd7606c76334
|
|
| MD5 |
d8a793cbffb998203d702e3d9d84befd
|
|
| BLAKE2b-256 |
a0533474750e88e8878354ab5bd1db400ed25e5fd0d8799185c7fb84c6e26d3e
|
File details
Details for the file xc_api_py-0.1.12-py3-none-any.whl.
File metadata
- Download URL: xc_api_py-0.1.12-py3-none-any.whl
- Upload date:
- Size: 18.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.26.3 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6fb4476fa0b28403f1fa7edfabd0607903a05d580d8c6d1c70e9e67d31a3c328
|
|
| MD5 |
f7038d66f690335e24d5fed902cc44eb
|
|
| BLAKE2b-256 |
ec61262bfaded0e840ee1685374312c77d685c0cc0a41a2674dcb72fdbe5f25c
|