Skip to main content

A library for recording and plotting spectrograms from audio data.

Project description

Spectrogram Recorder Library

pyspectools2 is a Python library for recording audio, generating spectrograms, and managing numbered recording sessions.

Who this is for

This package is useful if you want a lightweight way to:

  • record short audio clips from a microphone,
  • visualize them as spectrograms,
  • save outputs into incremental session folders.

Features

  • Record audio from your default input device (sounddevice).
  • Plot and save spectrograms (matplotlib).
  • Create numbered session folders (session_1, session_2, ...).
  • Delete the latest session and inspect folder sizes.
  • Use a cross-platform default save location based on your home directory.
  • Load, save, and process WAV files.
  • Audio utilities: normalization, trimming, mono/stereo conversion.

Installation

pip install pyspectools2

Or from source:

git clone https://github.com/Ampter/pyspectools2
cd pyspectools2
pip install .

Runtime requirements

  • Python 3.10+
  • A working audio input device and backend supported by sounddevice
  • Optional display backend for interactive plotting (headless CI can still run tests with mocks)

Quickstart

import pyspectools2 as pst

session_folder = pst.create_session_folder()
audio_data = pst.record_audio(duration=5)
fig, _ = pst.plot_spectrogram(audio_data)
output_file = pst.save_spectrogram(fig, session_folder)

print(f"Saved spectrogram: {output_file}")

Expected behavior:

  • A folder like .../SOUNDS/spectrograms/session_1 is created.
  • Console shows recording start/finish messages.
  • A file named like spectrogram_Mon_Jan_01_12-00-00_2026.png is saved.

API reference

Session management

pst.get_default_directory()

Returns the default directory for spectrogram sessions:

  • Windows: C:\Users\<username>\SOUNDS\spectrograms
  • macOS: /Users/<username>/SOUNDS/spectrograms
  • Linux: /home/<username>/SOUNDS/spectrograms

pst.create_session_folder(directory=None)

Creates a new folder such as session_5 and returns its path.

pst.get_latest_session_folder(directory=None)

Returns the highest numbered session folder path, or None if absent.

pst.delete_latest_session_folder(directory=None)

Deletes the latest numbered session folder.

Recording and plotting

pst.record_audio(duration=3, rate=44100, channels=1)

Records audio and returns a flattened NumPy array.

pst.plot_spectrogram(audio_data, rate=44100)

Returns (fig, ax) for the generated spectrogram.

pst.save_spectrogram(fig, session_folder)

Saves a PNG in the target session folder and returns the output file path.

WAV and Audio processing

pst.load_wav(path)

Loads a WAV file and returns (audio_data, samplerate).

pst.save_wav(path, audio_data, samplerate)

Saves a NumPy array to a WAV file.

pst.record_and_save_wav(duration=3, rate=44100, channels=1, directory=None)

Records audio and saves it as a WAV file in a new session folder.

pst.batch_process_wavs(directory)

Loads, normalizes, trims, and generates spectrograms for all WAV files in a directory.

pst.normalize_audio(audio_data)

Normalizes audio data to the range [-1, 1].

pst.trim_silence(audio_data, threshold=0.01)

Removes leading and trailing silence from audio data.

pst.to_mono(audio_data) / pst.to_stereo(audio_data)

Converts audio data between mono and stereo formats.

Storage utilities

pst.get_folder_size(directory=None)

Returns folder size in bytes.

pst.print_folder_size(directory=None)

Prints the total size of the latest session folder.

Common errors and fixes

  • No audio input device available

    • Ensure your OS microphone permissions are enabled.
    • Verify input devices with your system audio settings.
  • Permission denied when creating folders

    • Pass a writable path to create_session_folder(directory=...).
  • Unsupported operating system error

    • get_default_directory() supports Windows, macOS, and Linux only.

Development

Run tests:

pytest

Test layout:

  • tests/test_spectrogram.py: behavior of the library.
  • tests/test_audio_processing.py: tests for audio utility functions.
  • tests/test_wav_io.py: tests for WAV file input/output and processing.
  • tests/test_versioning.py: release version bump rules.
  • tests/test_packaging_metadata.py: packaging/version source-of-truth checks.

Examples

You can find examples in the examples/ directory:

  • examples/basic_workflow.py: Basic script, same as in quickstart.
  • examples/record_duration.py: Records and saves for a specified duration.
  • examples/record_infinite.py: Infinitely records and saves spectrograms in a loop.
  • examples/load_wav.py: Shows how to load a WAV and plot its spectrogram.
  • examples/batch_processing.py: Demonstrates batch processing of multiple WAV files.

Contributing

Contributions are welcome.

License

This project is licensed under the MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyspectools2-2.0.6.tar.gz (19.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyspectools2-2.0.6-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file pyspectools2-2.0.6.tar.gz.

File metadata

  • Download URL: pyspectools2-2.0.6.tar.gz
  • Upload date:
  • Size: 19.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyspectools2-2.0.6.tar.gz
Algorithm Hash digest
SHA256 b1f9ea8cfdaf87174baf6afcedbea6c0b4d5eac467ef8e031fcb7a9e9ca5a025
MD5 50a1165aa63794e6b2f698df21eadf42
BLAKE2b-256 b0ed2ab52d7592eced4bbbf35630b44d55bcf04fada966d4eabc6b4a2de7d467

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyspectools2-2.0.6.tar.gz:

Publisher: publish.yml on Ampter/pyspectools2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyspectools2-2.0.6-py3-none-any.whl.

File metadata

  • Download URL: pyspectools2-2.0.6-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyspectools2-2.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 88827da6399a8d3fdb89b7fe1303d4c9fb86f1917f4eb95dbfc38f54a550d27a
MD5 e10725ae1970e3c3f5bb0c0a76242dab
BLAKE2b-256 d4ac86c77aace12e3079df1827c5e1bd350d20aed3a5a08e1ef67afcf56a397a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyspectools2-2.0.6-py3-none-any.whl:

Publisher: publish.yml on Ampter/pyspectools2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page