DynamicSound 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
- Multiple sound sources simulation
- 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 dynamic-sound[==<version>]
example: pip install dynamic-sound=1.0.0
🎮 Usage Example
import dynamic_sound as ds
source_path = ds.Path([
# time / position(x,y,z) / quaternion(w,x,y,z)
[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, # temperature [°C]
pressure=1, # pressure [atm]
relative_humidity=50 # relative humidity [%]
)
# microphone
mic_sample_rate = 48_000 # Hertz [Hz]
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 Git’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
| | └─📄_*.py
│ ├─📂microphones/
| | ├─📄__init__.py
| | └─📄_*.py
│ ├─📂sources/
| | ├─📄__init__.py
| | └─📄_*.py
│ ├─📄__init__.py
│ ├─📄_simulation.py
│ └─📄py.typed
├─📂tests\
| └─📄test_*.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
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
📈 Increment the version
uv version --bump patch
the options are major, minor, patch
📢 Pubblish on PyPI
uv publish --token UV_PUBLISH_TOKEN
📜 License
This project is licensed under the Apache License 2.0. See the full license text in LICENSE.txt.
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 dynamic_sound-1.1.0.tar.gz.
File metadata
- Download URL: dynamic_sound-1.1.0.tar.gz
- Upload date:
- Size: 21.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3971b9711ed93986cf54559572c216b7b970260f0043ec8c1dff45d452173e20
|
|
| MD5 |
a932d93b29e0cbd7cc8fe5a019805706
|
|
| BLAKE2b-256 |
0eeedad52074487b1165a854fd1e2f9344b371fa8e31e7484a321d622a418187
|
File details
Details for the file dynamic_sound-1.1.0-py3-none-any.whl.
File metadata
- Download URL: dynamic_sound-1.1.0-py3-none-any.whl
- Upload date:
- Size: 21.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c48424de85cf7729243064d0028ec6e215ef909502124e95a32f958f878bf400
|
|
| MD5 |
3130519bd49ef57417cde2e8a91f8950
|
|
| BLAKE2b-256 |
7332b938c8ae7d4b816e3a58d4d6700e094973a20604afb738e7202efbc93789
|