From 4be3e12bd73e0cfaedfe772595fca90d8709db00 Mon Sep 17 00:00:00 2001 From: Santiago Martinez Date: Sun, 9 Jul 2023 14:24:46 +0100 Subject: [PATCH] Added audio functions with docs --- .github/workflows/docs.yml | 3 +- .gitignore | 3 + docs/examples/README.md | 3 + docs/examples/loading_audio.py | 85 +++++++++++++++++++++++++++ docs/examples/sample_audio.wav | Bin 0 -> 132344 bytes docs/reference.md | 5 ++ mkdocs.yml | 34 ++++++++++- pdm.lock | 64 +++++++++++++++++++- pyproject.toml | 2 + src/soundevent/audio/__init__.py | 12 ++++ src/soundevent/audio/chunks.py | 16 ++--- src/soundevent/audio/io.py | 7 ++- src/soundevent/audio/media_info.py | 6 +- src/soundevent/audio/spectrograms.py | 14 +++++ src/soundevent/data/recordings.py | 19 +++--- tests/test_audio/test_audio.py | 2 +- 16 files changed, 247 insertions(+), 28 deletions(-) create mode 100644 docs/examples/README.md create mode 100644 docs/examples/loading_audio.py create mode 100644 docs/examples/sample_audio.wav create mode 100644 docs/reference.md create mode 100644 src/soundevent/audio/spectrograms.py diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8e072a9..44cf03f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -23,5 +23,6 @@ jobs: path: .cache restore-keys: | mkdocs-material- - - run: pip install mkdocs-material "mkdocstrings[python]" + - run: + pip install mkdocs-material "mkdocstrings[python]" mkdocs-gallery memory_profiler - run: mkdocs gh-deploy --force diff --git a/.gitignore b/.gitignore index 3cb7296..0009c30 100644 --- a/.gitignore +++ b/.gitignore @@ -151,3 +151,6 @@ dmypy.json # Cython debug symbols cython_debug/ + +# Generated docs +docs/generated/ diff --git a/docs/examples/README.md b/docs/examples/README.md new file mode 100644 index 0000000..077f116 --- /dev/null +++ b/docs/examples/README.md @@ -0,0 +1,3 @@ +# Examples + +Here are a list of examples diff --git a/docs/examples/loading_audio.py b/docs/examples/loading_audio.py new file mode 100644 index 0000000..ca3a082 --- /dev/null +++ b/docs/examples/loading_audio.py @@ -0,0 +1,85 @@ +""" +# Loading audio + +One of the fundamental operations in computational bioacoustics is **reading** +audio files into a workable format. In `soundevent`, we use +[`xarray.DataArray`][xarray.DataArray] objects to hold loaded audio data. +[`xarray.DataArray`][xarray.DataArray] objects are an extension of +[`numpy`][numpy.ndarray] arrays, so there's no need to learn new concepts +if you are already familiar with [`numpy`][numpy.ndarray] arrays. + + +!!! note "Why use `xarray.DataArray` objects?" + + `xarray.DataArray` objects offer two key benefits: coordinates for easier + referencing of time-related locations in the array, and the ability to + store additional metadata such as `samplerate`, `time_expansion`, and + specify that the temporal units are seconds. To learn more about + `xarray.DataArray` objects, see the + [xarray documentation](https://docs.xarray.dev/en/stable/getting-started-guide/why-xarray.html). + +""" + +# %% +# ## Getting a Recording object +# To create a [`data.Recording`][soundevent.data.Recording] object from an +# audio file, you can use the +# [`from_file`][soundevent.data.Recording.from_file] method. This method +# extracts the metadata from the file and populates the `Recording` object with +# the relevant information. + +from soundevent import data + +recording = data.Recording.from_file("sample_audio.wav") +print(repr(recording)) + +# %% +# ## Loading the audio +# Once you have a [`data.Recording`][soundevent.data.Recording] object, you can +# load the audio data using the +# [`audio.load_recording`][soundevent.audio.load_recording] function: + +from soundevent import audio + +wav = audio.load_recording(recording) +print(wav) + +# %% +# Note that the returned object is an [`xarray.DataArray`][xarray.DataArray] +# object with two dimensions: time and channel. The time coordinate represents +# the array of times in seconds corresponding to the samples in the +# xarray.DataArray object. + +# %% +# ## Selecting clips from a recording +# You can use the [`sel`][xarray.DataArray.sel] method of xarray.DataArray to +# select a clip from the recording. This is useful when you have the full file +# loaded into memory and want to extract a specific clip: + +# You can select a clip by specifying the start and end times in seconds. +subwav = wav.sel(time=slice(0, 1)) +print(repr(subwav)) + +# %% +# Alternatively, if you only need to load a clip from the file without loading +# the entire file into memory, you can use the +# [`audio.load_clip`][soundevent.audio.load_clip] function: + +clip = data.Clip( + recording=recording, + start_time=0, + end_time=1, +) +subwav2 = audio.load_clip(clip) +print(repr(subwav2)) + +# %% +# In most cases, the results from `wav.sel` and `audio.load_clip` will be the +# same, except for the last sample. However, the difference is negligible, and +# the [`audio.load_clip`][soundevent.audio.load_clip] function is generally +# preferred for efficiency. +# +# You can verify the similarity of the clips using numpy.allclose: + +import numpy as np +print(np.allclose(subwav[:-1], subwav2)) diff --git a/docs/examples/sample_audio.wav b/docs/examples/sample_audio.wav new file mode 100644 index 0000000000000000000000000000000000000000..41f020438468229763ec4a2321325e5916e09106 GIT binary patch literal 132344 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 literal 0 HcmV?d00001 diff --git a/docs/reference.md b/docs/reference.md new file mode 100644 index 0000000..be6db5c --- /dev/null +++ b/docs/reference.md @@ -0,0 +1,5 @@ +# Reference + +::: soundevent.data + +::: soundevent.audio diff --git a/mkdocs.yml b/mkdocs.yml index a5c4a1c..cdf68a4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,6 +4,8 @@ site_url: https://mbsantiago.github.io/soundevent/ nav: - Home: README.md - Data: data.md + - generated/gallery + - Reference: reference.md - Contributing: CONTRIBUTING.md - Code of Conduct: CODE_OF_CONDUCT.md @@ -13,10 +15,36 @@ theme: - content.code.copy plugins: - - search + - gallery: + examples_dirs: docs/examples # path to your example scripts + gallery_dirs: docs/generated/gallery # where to save generated gallery + backreferences_dir: docs/generated/backreferences # where to generate the back references summary + doc_module: ["mkdocs_gallery", "numpy"] + image_scrapers: matplotlib + compress_images: ["images", "thumbnails"] + within_subsection_order: FileNameSortKey + filename_pattern: "" + # binder: + # org: mbsantiago + # repo: soundevent + # branch: gh-pages + # # binderhub_url: https://mybinder.org + # dependencies: docs/binder_cfg/requirements.txt # binder configuration files + # # see https://mybinder.readthedocs.io/en/latest/using/config_files.html#config-files + # # these will be copied to the .binder/ directory of the site. + # notebooks_dir: notebooks + # use_jupyter_lab: True + show_memory: True + capture_repr: ['_repr_html_', '__repr__'] + matplotlib_animations: True + image_srcset: ["2x"] + - mkdocstrings: handlers: python: + import: + - https://docs.xarray.dev/en/stable/objects.inv + - https://numpy.org/doc/stable/objects.inv options: show_root_heading: true show_source: false @@ -28,6 +56,8 @@ plugins: ignore_init_summary: false merge_init_into_class: true + - search + watch: - docs - src @@ -43,6 +73,6 @@ markdown_extensions: pygments_lang_class: true - pymdownx.inlinehilite - toc: - toc_depth: 3 + toc_depth: 4 permalink: "#" separator: "_" diff --git a/pdm.lock b/pdm.lock index 1e9b26a..4811c65 100644 --- a/pdm.lock +++ b/pdm.lock @@ -232,6 +232,15 @@ dependencies = [ "python-dateutil>=2.7", ] +[[package]] +name = "memory-profiler" +version = "0.61.0" +requires_python = ">=3.5" +summary = "A module for monitoring memory usage of a python program" +dependencies = [ + "psutil", +] + [[package]] name = "mergedeep" version = "1.3.4" @@ -268,6 +277,16 @@ dependencies = [ "mkdocs>=1.1", ] +[[package]] +name = "mkdocs-gallery" +version = "0.7.8" +summary = "a `mkdocs` plugin to generate example galleries from python scripts, similar to `sphinx-gallery`." +dependencies = [ + "mkdocs-material", + "mkdocs<2,>=1", + "tqdm", +] + [[package]] name = "mkdocs-material" version = "9.1.18" @@ -399,6 +418,12 @@ dependencies = [ "importlib-metadata>=0.12; python_version < \"3.8\"", ] +[[package]] +name = "psutil" +version = "5.9.5" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "Cross-platform lib for process and system monitoring in Python." + [[package]] name = "pydantic" version = "2.0.2" @@ -600,6 +625,15 @@ dependencies = [ "virtualenv>=20.23.1", ] +[[package]] +name = "tqdm" +version = "4.65.0" +requires_python = ">=3.7" +summary = "Fast, Extensible Progress Meter" +dependencies = [ + "colorama; platform_system == \"Windows\"", +] + [[package]] name = "typed-ast" version = "1.5.4" @@ -658,7 +692,7 @@ summary = "Backport of pathlib-compatible object wrapper for zip files" lock_version = "4.2" cross_platform = true groups = ["default", "dev"] -content_hash = "sha256:678b6db02a7ad2ccd1a4436cce1e0c3e124c1693ad989134cd32fcace551c3df" +content_hash = "sha256:25f52166d4b4efbc46ce86f8b6646269fc72133cf62e3fe818f10917400bffa1" [metadata.files] "annotated-types 0.5.0" = [ @@ -1074,6 +1108,10 @@ content_hash = "sha256:678b6db02a7ad2ccd1a4436cce1e0c3e124c1693ad989134cd32fcace {url = "https://files.pythonhosted.org/packages/fd/1c/5c3c71e38a408f2034ae08db6b71e7d1010f9461ab05d8b30b136a77b3e1/matplotlib-3.5.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d2484b350bf3d32cae43f85dcfc89b3ed7bd2bcd781ef351f93eb6fb2cc483f9"}, {url = "https://files.pythonhosted.org/packages/fd/7e/ecd6784f82baa01ef7859f8093be02b0913bda487b5bdc4da23c14041f9c/matplotlib-3.5.3-cp310-cp310-win32.whl", hash = "sha256:6bb93a0492d68461bd458eba878f52fdc8ac7bdb6c4acdfe43dba684787838c2"}, ] +"memory-profiler 0.61.0" = [ + {url = "https://files.pythonhosted.org/packages/49/26/aaca612a0634ceede20682e692a6c55e35a94c21ba36b807cc40fe910ae1/memory_profiler-0.61.0-py3-none-any.whl", hash = "sha256:400348e61031e3942ad4d4109d18753b2fb08c2f6fb8290671c5513a34182d84"}, + {url = "https://files.pythonhosted.org/packages/b2/88/e1907e1ca3488f2d9507ca8b0ae1add7b1cd5d3ca2bc8e5b329382ea2c7b/memory_profiler-0.61.0.tar.gz", hash = "sha256:4e5b73d7864a1d1292fb76a03e82a3e78ef934d06828a698d9dada76da2067b0"}, +] "mergedeep 1.3.4" = [ {url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -1086,6 +1124,10 @@ content_hash = "sha256:678b6db02a7ad2ccd1a4436cce1e0c3e124c1693ad989134cd32fcace {url = "https://files.pythonhosted.org/packages/3b/3f/9531888bc92bafb1bffddca5d9240a7bae9a479d465528883b61808ef9d6/mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"}, {url = "https://files.pythonhosted.org/packages/fb/5c/6594400290df38f99bf8d9ef249387b56f4ad962667836266f6fe7da8597/mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"}, ] +"mkdocs-gallery 0.7.8" = [ + {url = "https://files.pythonhosted.org/packages/72/83/c558cdd4304826055c75749825a0c4d85f3224ee1a9fb65462fc71b76a79/mkdocs_gallery-0.7.8-py2.py3-none-any.whl", hash = "sha256:d9b137b50cef78f6985eeb6117a29af5575399950724cf87cb93b65f1e5406ca"}, + {url = "https://files.pythonhosted.org/packages/85/94/ee59b6f0fe11a683441a98b1bd58a094789f0efb19c49af68752422939f0/mkdocs-gallery-0.7.8.tar.gz", hash = "sha256:281af6c9917643f70bd52f56a81e7bacc4b74a61391d5fa288054079c6a96294"}, +] "mkdocs-material 9.1.18" = [ {url = "https://files.pythonhosted.org/packages/6c/e9/bdb7488c44adef405afb7343b55f71660f6de4b6e06e02cad123e4473370/mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, {url = "https://files.pythonhosted.org/packages/f3/64/d2b6cfc3cb7584f4e2270fbe90be6448d1e410075a9b7d1b79c166a6eaee/mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, @@ -1274,6 +1316,22 @@ content_hash = "sha256:678b6db02a7ad2ccd1a4436cce1e0c3e124c1693ad989134cd32fcace {url = "https://files.pythonhosted.org/packages/51/32/4a79112b8b87b21450b066e102d6608907f4c885ed7b04c3fdb085d4d6ae/pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, {url = "https://files.pythonhosted.org/packages/8a/42/8f2833655a29c4e9cb52ee8a2be04ceac61bcff4a680fb338cbd3d1e322d/pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] +"psutil 5.9.5" = [ + {url = "https://files.pythonhosted.org/packages/26/f2/dcd8a3cc9c9b1fcd7576a54e3603ce4d1f85672f2687a44050340f7d47b0/psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {url = "https://files.pythonhosted.org/packages/3b/e4/fee119c206545fd37be1e5fa4eeb0c729a52ec2ade4f728ae1fd1acb2a3a/psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {url = "https://files.pythonhosted.org/packages/5f/da/de9d2342db0b7a96863ef84ab94ef1022eec78ece05aac253cddc494e1a7/psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {url = "https://files.pythonhosted.org/packages/86/f3/23e4e4e7ec7855d506ed928756b04735c246b14d9f778ed7ffaae18d8043/psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {url = "https://files.pythonhosted.org/packages/89/fa/ab117fa86195050802207639f5daee857791daaabe9a996935b5b77dbe10/psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {url = "https://files.pythonhosted.org/packages/8d/24/ed6b6506f187def39887a91a68e58336eff4cf3e3d5a163ded58bee98624/psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {url = "https://files.pythonhosted.org/packages/99/f5/ec768e107445f18baa907509aaa0562a4d148a602bd97e8114d79bd6c84d/psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {url = "https://files.pythonhosted.org/packages/9a/76/c0195c3443a725c24b3a479f57636dec89efe53d19d435d1752c5188f7de/psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {url = "https://files.pythonhosted.org/packages/af/4d/389441079ecef400e2551a3933224885a7bde6b8a4810091d628cdd75afe/psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {url = "https://files.pythonhosted.org/packages/cf/e3/6af6ec0cbe72f63e9a16d8b53590489e40ed0ff0c99b6a6f05d6af3bb80e/psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {url = "https://files.pythonhosted.org/packages/d6/0f/96b7309212a926c1448366e9ce69b081ea79d63265bde33f11cc9cfc2c07/psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, + {url = "https://files.pythonhosted.org/packages/e5/2e/56db2b45508ad484b3f22888b3e1adaaf09b8766eaa058ed0e4486c1abae/psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {url = "https://files.pythonhosted.org/packages/ed/98/2624954f83489ab13fde2b544baa337d5578c07eee304d320d9ba56e1b1f/psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {url = "https://files.pythonhosted.org/packages/fa/e0/e91277b1cabf5c3f2995c22314553f1be68b17444260101f365c5a5b6ba1/psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, +] "pydantic 2.0.2" = [ {url = "https://files.pythonhosted.org/packages/3c/39/e526f3ca06e062e0ad773555f5349ff5d9ed50bfa62c45df8e74fff9ff14/pydantic-2.0.2.tar.gz", hash = "sha256:b802f5245b8576315fe619e5989fd083448fa1258638ef9dac301ca60878396d"}, {url = "https://files.pythonhosted.org/packages/79/bf/ce11dc07156bdbf12009c560ba5fdb308522f77e7484b64f4aff682d93cf/pydantic-2.0.2-py3-none-any.whl", hash = "sha256:f5581e0c79b2ec2fa25a9d30d766629811cdda022107fa73d022ab5578873ae3"}, @@ -1657,6 +1715,10 @@ content_hash = "sha256:678b6db02a7ad2ccd1a4436cce1e0c3e124c1693ad989134cd32fcace {url = "https://files.pythonhosted.org/packages/45/ff/a9e20a27e0f4dce205a1a93e4f15256315709a203cbf414fe8ee1dde85ef/tox-4.6.4-py3-none-any.whl", hash = "sha256:1b8f8ae08d6a5475cad9d508236c51ea060620126fd7c3c513d0f5c7f29cc776"}, {url = "https://files.pythonhosted.org/packages/d7/58/cd83a435d18a56f1a53a3f0025483a128fd92f30c68269a1c97c9cb2d880/tox-4.6.4.tar.gz", hash = "sha256:5e2ad8845764706170d3dcaac171704513cc8a725655219acb62fe4380bdadda"}, ] +"tqdm 4.65.0" = [ + {url = "https://files.pythonhosted.org/packages/3d/78/81191f56abb7d3d56963337dbdff6aa4f55805c8afd8bad64b0a34199e9b/tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {url = "https://files.pythonhosted.org/packages/e6/02/a2cff6306177ae6bc73bc0665065de51dfb3b9db7373e122e2735faf0d97/tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, +] "typed-ast 1.5.4" = [ {url = "https://files.pythonhosted.org/packages/04/93/482d12fd3334b53ec4087e658ab161ab23affcf8b052166b4cf972ca673b/typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, {url = "https://files.pythonhosted.org/packages/07/d2/d55702e8deba2c80282fea0df53130790d8f398648be589750954c2dcce4/typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, diff --git a/pyproject.toml b/pyproject.toml index 3f95cd7..0eb9c7a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,8 @@ dev = [ "mkdocstrings[python]>=0.22.0", "tox>=4.6.3", "hypothesis>=6.79.4", + "mkdocs-gallery>=0.7.8", + "memory-profiler>=0.61.0", ] [project] diff --git a/src/soundevent/audio/__init__.py b/src/soundevent/audio/__init__.py index e69de29..accdb83 100644 --- a/src/soundevent/audio/__init__.py +++ b/src/soundevent/audio/__init__.py @@ -0,0 +1,12 @@ +"""Soundevent functions for handling audio files and arrays.""" + +from .io import load_clip, load_recording +from .media_info import get_media_info +from .spectrograms import generate_spectrogram + +__all__ = [ + "load_clip", + "load_recording", + "generate_spectrogram", + "get_media_info", +] diff --git a/src/soundevent/audio/chunks.py b/src/soundevent/audio/chunks.py index dd7293e..10af968 100644 --- a/src/soundevent/audio/chunks.py +++ b/src/soundevent/audio/chunks.py @@ -15,10 +15,7 @@ """ import os from dataclasses import dataclass, field -from typing import BinaryIO, List, Optional, Union - -PathLike = Union[os.PathLike, str] - +from typing import BinaryIO, Dict, List, Optional CHUNKS_WITH_SUBCHUNKS = ["RIFF", "LIST"] @@ -40,15 +37,15 @@ class Chunk: The position of the chunk in the file. chunk_size : int The chunk size. - subchunks : List[Chunk] - The subchunks of the chunk. + subchunks : Dict[Chunk] + A dictionary holding the subchunks of the chunk. """ chunk_id: str size: int position: int identifier: Optional[str] = None - subchunks: List["Chunk"] = field(default_factory=list) + subchunks: Dict[str, "Chunk"] = field(default_factory=dict) def _get_subchunks(riff: BinaryIO, size: int) -> List[Chunk]: @@ -106,7 +103,10 @@ def _read_chunk(riff: BinaryIO) -> Chunk: ) if chunk_id in CHUNKS_WITH_SUBCHUNKS: - chunk.subchunks = _get_subchunks(riff, size - 4) + chunk.subchunks = { + subchunk.chunk_id: subchunk + for subchunk in _get_subchunks(riff, size - 4) + } else: riff.seek(size, os.SEEK_CUR) diff --git a/src/soundevent/audio/io.py b/src/soundevent/audio/io.py index 34f5a4a..9179586 100644 --- a/src/soundevent/audio/io.py +++ b/src/soundevent/audio/io.py @@ -10,7 +10,8 @@ import xarray as xr from scipy.io import wavfile -from soundevent import data +from soundevent.data.clips import Clip +from soundevent.data.recordings import Recording __all__ = [ "load_audio", @@ -67,7 +68,7 @@ def load_audio( return data, samplerate -def load_recording(recording: data.Recording) -> xr.DataArray: +def load_recording(recording: Recording) -> xr.DataArray: """Load a recording from a file. Parameters @@ -102,7 +103,7 @@ def load_recording(recording: data.Recording) -> xr.DataArray: ) -def load_clip(clip: data.Clip) -> xr.DataArray: +def load_clip(clip: Clip) -> xr.DataArray: """Load a clip from a file. Parameters diff --git a/src/soundevent/audio/media_info.py b/src/soundevent/audio/media_info.py index 32e42a5..40d6631 100644 --- a/src/soundevent/audio/media_info.py +++ b/src/soundevent/audio/media_info.py @@ -1,6 +1,6 @@ """Functions for getting media information from WAV files.""" -from dataclasses import dataclass import os +from dataclasses import dataclass from soundevent.audio.chunks import parse_into_chunks @@ -59,7 +59,7 @@ def get_media_info(path: os.PathLike) -> MediaInfo: # Get info from the fmt chunk. The fmt chunk is the first # subchunk of the root chunk. - fmt_chunk = chunk.subchunks[0] + fmt_chunk = chunk.subchunks["fmt "] # Go to the start of the fmt chunk after the chunk id and # chunk size. @@ -75,7 +75,7 @@ def get_media_info(path: os.PathLike) -> MediaInfo: # Get size of data chunk. Notice that the size of the data # chunk is the size of the data subchunk divided by the number # of channels and the bit depth. - data_chunk = chunk.subchunks[2] + data_chunk = chunk.subchunks["data"] samples = 8 * data_chunk.size // (channels * bit_depth) duration = samples / samplerate diff --git a/src/soundevent/audio/spectrograms.py b/src/soundevent/audio/spectrograms.py new file mode 100644 index 0000000..5c559fa --- /dev/null +++ b/src/soundevent/audio/spectrograms.py @@ -0,0 +1,14 @@ +"""Functions to compute several spectral representations of sound signals.""" + +import numpy as np +import xarray as xr + + +def generate_spectrogram( + audio: xr.DataArray, + window_size: int, + overlap: float, + window_type="hann", +) -> xr.DataArray: + """Compute the spectrogram of a signal.""" + pass diff --git a/src/soundevent/data/recordings.py b/src/soundevent/data/recordings.py index 04a7fb9..2f6f567 100644 --- a/src/soundevent/data/recordings.py +++ b/src/soundevent/data/recordings.py @@ -56,7 +56,6 @@ from pydantic import BaseModel, Field -from soundevent.audio.media_info import get_media_info from soundevent.data.features import Feature from soundevent.data.notes import Note from soundevent.data.tags import Tag @@ -96,28 +95,28 @@ class Recording(BaseModel): time_expansion: float = 1.0 """The time expansion factor of the audio file.""" - hash: Optional[str] = None + hash: Optional[str] = Field(default=None, repr=False) """The md5 hash of the audio file.""" - date: Optional[datetime.date] = None + date: Optional[datetime.date] = Field(default=None, repr=False) """The date on which the recording was made.""" - time: Optional[datetime.time] = None + time: Optional[datetime.time] = Field(default=None, repr=False) """The time at which the recording was made.""" - latitude: Optional[float] = None + latitude: Optional[float] = Field(default=None, repr=False) """The latitude coordinate of the site of recording.""" - longitude: Optional[float] = None + longitude: Optional[float] = Field(default=None, repr=False) """The longitude coordinate of the site of recording.""" - tags: List[Tag] = Field(default_factory=list) + tags: List[Tag] = Field(default_factory=list, repr=False) """The tags associated with the recording.""" - features: List[Feature] = Field(default_factory=list) + features: List[Feature] = Field(default_factory=list, repr=False) """A list of features associated with the recording.""" - notes: List[Note] = Field(default_factory=list) + notes: List[Note] = Field(default_factory=list, repr=False) """A list of notes associated with the recording.""" def __hash__(self): @@ -148,6 +147,8 @@ def from_file( Recording The recording object. """ + from soundevent.audio.media_info import get_media_info + media_info = get_media_info(path) return cls( path=Path(path), diff --git a/tests/test_audio/test_audio.py b/tests/test_audio/test_audio.py index a2bd073..e765f34 100644 --- a/tests/test_audio/test_audio.py +++ b/tests/test_audio/test_audio.py @@ -139,7 +139,7 @@ def test_read_clip( ) # Check that we can slice the recording array to get the same clip - # Load recording with xarray + # Load recording with xarray. rec_xr = load_recording(recording) assert rec_xr.attrs["samplerate"] == samplerate assert rec_xr.shape == (samples, channels)