Giter Club home page Giter Club logo

metamoth's Introduction

metamoth

PyPI Test Status Lint Status Code Coverage License Downloads Code Style Imports

Metamoth is a Python package for parsing the metadata of AudioMoth files. Check the full documentation at https://metamoth.readthedocs.io.

Motivation

AudioMoth devices store valuable information in the audio file header. This includes the device ID, the date and time of recording, gain settings and battery state. The number of fields in the metadata is growing as new features are added to the AudioMoth firmware.

However, the metadata is not designed to be easily parsed in a programmatic way. The data is stored as a string comment making it difficult to retrieve the individual metadata fields. Additionally, the comment format is not well documented and changes between AudioMoth firmware versions.

This package helps by quickly parsing the metadata and returning an object containing the metadata.

Usage

The metamoth package provides a single function, parse_metadata, which parses the metadata of an AudioMoth file and returns an object containing the metadata.

from metamoth import parse_metadata

metadata = parse_metadata('path/to/file')

The extracted metadata can be accessed as attributes of the object, as shown

duration = metadata.duration_s
path = metadata.path
# etc.

Extracted Metadata

The metadata variable is an object (of type AMMetadata) containing the metadata of the file.

The extracted metadata contains:

  • path: the path of the audio file
  • firmware_version: the firmware version of the AudioMoth that recorded the file. Since the AudioMoth firmware version is not stored in the recording, this is an estimate and may be incorrect.

Media Information

  • duration_s: the duration of the file in seconds.
  • samplerate_hz: the sample rate of the file in Hz.
  • channels: the number of channels in the file.
  • samples: the number of audio samples in the file.

Data extracted from the AudioMoth comment string:

  • datetime: the date and time of the file in a datetime object.
  • timezone: the timezone of the file as a timezone object.
  • audiomoth_id: the ID of the AudioMoth that recorded the file.
  • battery_state_v: the battery state of the AudioMoth that recorded the file in Volts.
  • low_battery: a boolean indicating if the battery state is low.
  • gain: the gain setting of the AudioMoth that recorded the file.
  • comment: the full comment string in the WAV header.

The following fields are only available for some AudioMoth firmware versions. Nonetheless, they are always present in the metadata object, but may be None.

  • recording_state: the recording state of the AudioMoth that recorded the file.
  • temperature_c: the temperature of the AudioMoth in Celsius.
  • amplitude_threshold: information concerning the wether an amplitude threshold was used and the threshold value.
  • frequency_filter: information concerning the wether a frequency filter was used and the filter settings.
  • deployment_id: the deployment ID as set by the user.
  • external_microphone: a boolean indicating if an external microphone was used.
  • minimum_trigger_duration_s: the minimum trigger duration in seconds.
  • frequency_trigger: information concerning the wether a frequency trigger was used and the trigger settings.

The following table shows the fields available for each AudioMoth firmware.

version recording_state temperature_c amplitude_threshold frequency_filter deployment_id external_microphone minimum_trigger_duration_s frequency_trigger
1.0
1.0.1
1.1.0
1.2.0
1.2.1
1.2.2
1.3.0
1.4.0
1.4.1
1.4.2
1.4.3
1.4.4
1.5.0
1.6.0
1.7.0
1.7.1
1.8.0
1.8.1

Supported AudioMoth Firmware Versions

In the table below you can find the supported AudioMoth firmware versions.

Supported AudioMoth Firmware Versions
Firmware Supported
1.0.0
1.0.1
1.1.0
1.2.0
1.2.1
1.2.2
1.3.0
1.4.0
1.4.1
1.4.2
1.4.3
1.4.4
1.5.0
1.6.0
1.7.0
1.7.1
1.8.0
1.8.1

Support for newer firmware versions is planned, see the CONTRIBUTING section if you want to help!

Performance

The metamoth package is designed to be fast. It extracts all the required information from the first few bytes and avoids loading the audio data. Thus metamoth parsing times are not affected by the size of the audio file.

The following table shows the parsing times of metamoth compared to exif tool.

File Size (MB) metamoth (ms) exiftool (ms) Speedup
7.3 0.0845 80 ~1000x
44 0.0850 91.86 ~1000x

Installation

The metamoth package can be installed using pip:

pip install metamoth

Check the installation section of the documentation for more information.

Documentation

The documentation for the metamoth package is available at https://metamoth.readthedocs.io/en/latest/index.html.

metamoth's People

Contributors

deepsource-autofix[bot] avatar deepsourcebot avatar mbsantiago avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

metamoth's Issues

1.6.0 parser does not parse low pass filters

Description

The COMMENT_REGEX_1_6_0 regex is incorrect.

COMMENT_REGEX_1_6_0 = re.compile(
r"Recorded at "
r"(\d{2}:\d{2}:\d{2} \d{2}\/\d{2}\/\d{4}) " # date time
r"\(UTC([\+\-]?\d{0,2}:?\d{0,2})\) " # timezone
r"(during deployment [0-9A-z]{16}|by AudioMoth [0-9A-z]{16}) "
r"(using external microphone )?"
r"at (low|low-medium|medium|medium-high|high) gain " # gain
"while battery was "
r"(less than 2\.5|greater than 4\.9|\d\.\d)V " # battery state
r"and temperature was (-?\d{1,2}\.\d)C." # temperature
r"( Amplitude threshold was (?:\d{1,4}|\d{1,4}\.?\d{0,4}%|-?\d{1,4} dB) "
r"with \d{1,4}s minimum trigger duration\.)?" # threshold
r"( Band-pass filter applied with cut-off frequencies of \d{1,4}\.\dkHz "
r"and \d{1,4}\.\dkHz\.| Low-pass filter applied with cut-off frequency of "
r"\d{1,4}\.\dkHz\."
r"| High-pass filter applied with cut-off frequency of \d{1,4}\.\dkHz\.)?"
r"( Recording stopped due to (low voltage|microphone change"
r"|switch position change|file size limit)\.)?"

The 1.5.0 to 1.6.0 diff from audiomoth:

image

OpenAcousticDevices/AudioMoth-Firmware-Basic@1.5.0...1.6.0#diff-a0cb465674c1b01a07d361f25a0ef2b0214b7dfe9412b7777f89add956da10ecL328-L338

You can see the word applied is moved to after the frequency value

What I Did

N/A

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.