Skip to main content

Add your description here

Project description

DynamicSound Simulator

DynamicSound Simulator is a modular Python library designed for generating virtual acoustic scenes with customizable microphone configurations, sound sources, and environmental conditions. It is intended for research, algorithm development, and testing in areas such as beamforming, source localization, audio augmentation, and acoustic machine learning.


๐Ÿš€ Features

  • Flexible microphone models

    • Single-channel microphones
    • Microphone arrays with arbitrary geometry
    • User-defined sampling rates
  • Configurable sound sources

    • White noise generator
    • Sinusoidal signal generator
    • Audio file source
  • Environmental modeling

    • Source and microphone trajectories, 3D positions and rotations
    • Air absorption based on ISO 9613-1
    • Temperature, pressure, and humidity parameters
  • Signal path simulation

    • Distance-based attenuation
    • Image-source reflections
    • Scenarios with dynamic movement

๐Ÿ”ข Versioning

This library follows Semantic Versioning using the format M.m.p

Where:

  • M โ€“ Major version: incompatible API changes
  • m โ€“ Minor version: added functionality in a backward-compatible manner
  • p โ€“ Patch version: backward-compatible bug fixes

๐Ÿ“ฆ Installation

From PyPI

pip install dynamicsound

๐ŸŽฎ Usage Example

import dynamic_sound as ds

source_path = ds.Path([
    [0.0,  343, 3, 1,   1, 0, 0, 0],
    [10.0, -343, 3, 1,   1, 0, 0, 0]
])
microphone_path = ds.Path([
    [0.0,  0, 0, 1,   1, 0, 0, 0],
    [10.0,  0, 0, 1,   1, 0, 0, 0]
])

# simulation environment
sim = ds.Simulation(
    temperature=20,
    pressure=1,
    relative_humidity=50
)

# microphone
mic_sample_rate = 48_000
microphone = ds.microphones.Microphone("_tmp/sine_dynamic.wav", sample_rate=mic_sample_rate)
sim.add_microphone(path=microphone_path, microphone=microphone)

# source
source = ds.sources.SineWave(frequency=2_000, amplitude=1.0)
sim.add_source(
    path=source_path,
    source=source
)

sim.run()

More examples available inside examples folder.


๐Ÿค How to contribute

Contributions are welcome! Please open an issue or submit a merge request following GitLabโ€™s standard workflow.

Clone project

git clone <repository_name>

๐Ÿ“‚ Project structure

๐Ÿ“‚dynamic-sound
 โ”œโ”€๐Ÿ“‚docs\
 โ”œโ”€๐Ÿ“‚examples\
 โ”‚  โ”œโ”€๐Ÿ“‚resources/
 โ”‚  |  โ”œโ”€๐Ÿ“‚paths/
 |  |  |  โ””โ”€๐Ÿ“„*.csv
 โ”‚  |  โ””โ”€๐Ÿ“‚sounds/
 |  |     โ””โ”€๐Ÿ”Š*.wav
 |  โ””โ”€๐Ÿ“„*.ipynb
 โ”œโ”€๐Ÿ“‚src\
 โ”‚  โ””โ”€๐Ÿ“‚dynamic_sound/
 โ”‚     โ”œโ”€๐Ÿ“‚acoustics/
 โ”‚     |  โ””โ”€๐Ÿ“‚standards/
 โ”‚     |     โ”œโ”€๐Ÿ“„__init__.py
 โ”‚     |     โ””โ”€๐Ÿ“„ISO_9613_1_1993.py
 โ”‚     โ”œโ”€๐Ÿ“‚environment/
 |     |  โ”œโ”€๐Ÿ“„__init__.py
 |     |  โ”œโ”€๐Ÿ“„_air.py
 |     |  โ””โ”€๐Ÿ“„_path.py
 โ”‚     โ”œโ”€๐Ÿ“‚microphones/
 |     |  โ”œโ”€๐Ÿ“„__init__.py
 |     |  โ”œโ”€๐Ÿ“„_hedraphones.py
 |     |  โ””โ”€๐Ÿ“„_microphones.py
 โ”‚     โ”œโ”€๐Ÿ“‚sources/
 |     |  โ”œโ”€๐Ÿ“„__init__.py
 |     |  โ”œโ”€๐Ÿ“„_audio_file.py
 |     |  โ”œโ”€๐Ÿ“„_sine_wave.py
 |     |  โ”œโ”€๐Ÿ“„_source.py
 |     |  โ””โ”€๐Ÿ“„_white_noise.py
 โ”‚     โ”œโ”€๐Ÿ“„__init__.py
 โ”‚     โ”œโ”€๐Ÿ“„_simulation.py
 โ”‚     โ””โ”€๐Ÿ“„py.typed
 โ”œโ”€๐Ÿ“‚tests\
 |  โ””โ”€๐Ÿ“„test_simulation.py
 โ”œโ”€๐Ÿ“„.gitignore
 โ”œโ”€๐Ÿ“„.gitlab-ci.yml
 โ”œโ”€๐Ÿ“„LICENSE.txt
 โ”œโ”€๐Ÿ“„pyproject.toml
 โ””โ”€๐Ÿ“„README.md

๐Ÿ› ๏ธ Development Installation

Install uv

  • windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • Linux and MacOS
curl -LsSf https://astral.sh/uv/install.sh | sh

more details in the official uv documentation

Generate the Environment

To install in editable/development mode:

uv sync

Open the examples with Jupyter Lab

  • windows
.venv\Scripts\activate.bat
jupyter lab
  • Linux and MacOS
source .venv/bin/activate
jupyter lab

Open one of the *.ipynb inside the examples folder and run it.


๐Ÿงช Running Tests

uv run pytest --cov=src --cov-report=term-missing --cov-fail-under=80 --capture=no

๐Ÿ“œ License

This project is licensed under the Apache License 2.0. See the full license text in LICENSE.txt.

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

dynamic_sound-0.1.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

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

dynamic_sound-0.1.0-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file dynamic_sound-0.1.0.tar.gz.

File metadata

  • Download URL: dynamic_sound-0.1.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.16

File hashes

Hashes for dynamic_sound-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1575446cfa7d8662edada55d1806279ae43f1739a2764e7fcbbd8dafdb6f060a
MD5 9acec7588e0c1db57ed014ae42d197c0
BLAKE2b-256 024035e9655555add09831e71ef9af52e21f4b4a7484adb9dee422da89bae16e

See more details on using hashes here.

File details

Details for the file dynamic_sound-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dynamic_sound-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 086da7d3ef7f3e73de65fc6e9bbacb1ef609161964a83a8f7a0cf533243a959b
MD5 eb2eb9841411510c26a291580dafe278
BLAKE2b-256 42982acd32d9f82dfc2abcd0839f16c01689c87354ad476e151016f783b16e3d

See more details on using hashes here.

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