Saraswati - a robust, multi-channel audio recording, transmission and storage system
Project description
Saraswati
About
Saraswati is a robust, multi-channel audio recording, transmission and storage system. The system is designed for flexible field recording of audio signals in environmental monitoring systems.
Saraswati is developed by an independent community of scientists from different domains working collaboratively on this project. You are welcome to join our efforts.
Etymology
Saraswati is the Hindu goddess of knowledge, music, art, wisdom and learning.
Technologies
The software is based on GStreamer and the GStreamer Python Bindings, in turn using the fine PyGObject under the hood. It is designed to run on Single-board computer (SBC) systems as well as larger machines.
Status
The software was tested successfully with Python 3.7-3.9, GStreamer 1.10.4, 1.14.4, 1.16.2 and 1.18.4, on both Linux (Debian 10 buster, Debian 11 bullseye, Linux Mint 20.2) and macOS (Catalina 10.15.7).
Setup
This part of the documentation covers the basic installation of Saraswati. The first step to using any software package is getting it properly installed. Please read this section carefully.
When aiming to run Saraswati autonomously in a production setup, please also consider reading the documentation about running Saraswati in production.
Install prerequisites
As Saraswati is based on GStreamer and, optionally, ALSA, let’s install the relevant packages.
Debian-based systems
sudo apt-get update sudo apt-get install --yes libgstreamer1.0 gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good sudo apt-get install --yes python3 python3-pip python3-gst-1.0 python3-gi python3-tz sudo apt-get install --yes alsa-utils mkvtoolnix flac
macOS systems
brew install gstreamer gst-python gst-libav gst-plugins-base gst-plugins-good brew install mkvtoolnix flac
Configure system
Synchronize system time with NTP, this is important for appropriate timestamping:
sudo timedatectl set-ntp true
Install Saraswati
Install saraswati package from PyPI:
pip install saraswati
To quickly verify the installation, invoke:
saraswati record --channel="testdrive source=autoaudiosrc"
Usage
This part of the documentation covers how to run Saraswati interactively. Please read this section carefully.
When aiming to run Saraswati autonomously in a production setup, please also consider reading the documentation about running Saraswati in production.
Recording audio
saraswati record is an implementation to
ingest audio from a GStreamer audio source element,
run it through flacenc to encode audio with the FLAC lossless audio encoder, and
finally store it using splitmuxsink, a GStreamer component which multiplexes incoming streams into multiple time- or size-limited files
Each audio fragment will be timestamped with the current date/time information in an ISO8601-like format, using a qualified UTC offset of +0000.
In order to learn about the command line syntax, please invoke saraswati --help or saraswati record --help.
Uploading audio
When the --upload= option is given, Saraswati will attempt to upload its spool directory to an rsync target. By default, it will do this each 5 minutes.
Please note rsync will be invoked using the --remove-source-files option. So, after successful upload, the spooled files on the local machine will get purged.
Example
Invoke:
saraswati record --channel="testdrive source=autoaudiosrc"
This will yield audio fragments in chunks worth of 5 minutes each:
recording_testdrive_20210621T155817+0000_0000.mka recording_testdrive_20210621T160317+0000_0001.mka recording_testdrive_20210621T160817+0000_0002.mka recording_testdrive_20210621T161317+0000_0003.mka recording_testdrive_20210621T161817+0000_0004.mka
Display segment metadata information embedded into the Matroska container file:
mkvinfo recording_testdrive_20210620T122642+0000_0065.mka | grep -E 'Codec|Date|duration' | + Date: Sun Jun 20 12:26:42 2021 UTC | + Default duration: 00:00:00.104489796 (9.570 frames/fields per second for a video track) | + Codec ID: A_FLAC
Extract audio track:
mkvextract recording_testdrive_20210621T155817+0000_0000.mka tracks 0:audio_20210621T155817.flac flac --decode audio_20210621T155817.flac file recording_testdrive_20210621T155817+0000_0000.mka Matroska data file audio_20210621T155817.flac FLAC audio bitstream data, 16 bit, mono, 48 kHz, length unknown file audio_20210621T155817.wav RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 48000 Hz
Project information
Background
This software gets developed for the “Bee Observer” (BOB) project, a joint endeavour initiated by the Cognitive neuroinformatics group at the University of Bremen and the people of the independent research and development project Hiveeyes. See also:
Details
The “Saraswati” program is released under the GNU AGPL license. Its source code lives on GitHub and the Python package is published to PyPI. You might also want to have a look at the documentation.
If you’d like to contribute you’re most welcome! Spend some time taking a look around, locate a bug, design issue or spelling mistake and then send us a pull request or create an issue.
Thanks in advance for your efforts, we really appreciate any help or feedback.
Code license
The code is licensed under the GNU AGPL license. See LICENSE file for details.
Have fun!
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
File details
Details for the file saraswati-0.6.0.tar.gz
.
File metadata
- Download URL: saraswati-0.6.0.tar.gz
- Upload date:
- Size: 31.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fc5be693894b320f06609ed48a49f3b560f8afcb2988cb3ede77a9452acff43 |
|
MD5 | 7d25f7ab8f0075b2a541b7beb484a2b9 |
|
BLAKE2b-256 | 627d1fd6de905a5a2780a538339ad7f9026a796986d4364e977f8ffdb7f9e8d1 |