From b87f4e135f9c1e20eb3b9bdcbfbdf9978623625e Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 16:40:52 -0800 Subject: [PATCH 01/22] Stubbing out documentation --- docs/source/scopes/cue.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/source/scopes/cue.rst diff --git a/docs/source/scopes/cue.rst b/docs/source/scopes/cue.rst new file mode 100644 index 0000000..1e789ea --- /dev/null +++ b/docs/source/scopes/cue.rst @@ -0,0 +1,4 @@ +Cue Marker and Range Metadata +------------------------------ + + From f963daa8a76867ec0a5c8cb466d487e612f73889 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:24:39 -0800 Subject: [PATCH 02/22] Adding tests for cues --- tests/test_cue.py | 39 ++++++++++++++++++ .../cue_chunks/izotoperx_cues_test.wav | Bin 0 -> 192456 bytes wavinfo/wave_cues_reader.py | 16 +++++-- wavinfo/wave_reader.py | 8 ++-- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 tests/test_cue.py create mode 100644 tests/test_files/cue_chunks/izotoperx_cues_test.wav diff --git a/tests/test_cue.py b/tests/test_cue.py new file mode 100644 index 0000000..ffb2661 --- /dev/null +++ b/tests/test_cue.py @@ -0,0 +1,39 @@ +from unittest import TestCase +from glob import glob + +import wavinfo + +class TestCue(TestCase): + def setUp(self) -> None: + self.test_files = glob("tests/test_files/cue_chunks/*.wav") + return super().setUp() + + def test_encoding_fallback(self): + file = "tests/test_files/cue_chunks/izotoperx_cues_test.wav" + w = wavinfo.WavInfoReader(file, info_encoding='utf-8') + expected = ("Лорем ипсум долор сит амет, тимеам вивендум хас ет, " + "цу адолесценс дефинитионес еам.") + + note = [n for n in w.cues.notes if n.name == 3] + self.assertEqual(len(note), 1) + self.assertEqual(note[0].text, expected) + + def test_label(self): + file = "tests/test_files/cue_chunks/izotoperx_cues_test.wav" + w = wavinfo.WavInfoReader(file) + + self.assertIsNotNone(w.cues) + + self.assertEqual(len(w.cues.labels), 3) + for label in w.cues.labels: + if label.name == 1: + self.assertEqual(label.text, "Marker 1") + elif label.name == 2: + self.assertEqual(label.text, "Marker 2") + elif label.name == 3: + self.assertEqual(label.text, "Marker 3") + else: + self.fail(f"Encountered unexpected label id {label.name}") + + + diff --git a/tests/test_files/cue_chunks/izotoperx_cues_test.wav b/tests/test_files/cue_chunks/izotoperx_cues_test.wav new file mode 100644 index 0000000000000000000000000000000000000000..a1d198db665c023763d9082e2dfcc955fd658ecd GIT binary patch literal 192456 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
rjqOpD^ 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 literal 0 HcmV?d00001 diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index 65325a7..2805a7d 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -130,7 +130,7 @@ class LabelEntry(NamedTuple): @classmethod def read(cls, data: bytes, encoding: str): return cls(name=unpack(" 'WavCuesReader': cue_list = [] @@ -200,13 +202,21 @@ def merge(cls, f, fallback_encoding=fallback_encoding) ) + note_list = [] + for note in notes: + note_list.append( + NoteEntry.read(note.read_data(f), + encoding=fallback_encoding) + ) + return WavCuesReader(cues=cue_list, labels=label_list, - ranges=range_list) + ranges=range_list, notes=note_list) def to_dict(self) -> Dict[str, Any]: return dict(cues=[c.__dict__ for c in self.cues], labels=[l.__dict__ for l in self.labels], - ranges=[r.__dict__ for r in self.ranges]) + ranges=[r.__dict__ for r in self.ranges], + notes=[n.__dict__ for n in self.notes]) diff --git a/wavinfo/wave_reader.py b/wavinfo/wave_reader.py index e34fbd3..53a90ff 100644 --- a/wavinfo/wave_reader.py +++ b/wavinfo/wave_reader.py @@ -198,11 +198,13 @@ def _get_cue(self, f): adtl = self._find_list_chunk(b'adtl') labls = [] ltxts = [] + notes = [] if adtl is not None: - labls = [child for child in adtl.children if child.ident == b'labl'] - ltxts = [child for child in adtl.children if child.ident == b'ltxt'] + labls = [c for c in adtl.children if c.ident == b'labl'] + ltxts = [c for c in adtl.children if c.ident == b'ltxt'] + notes = [c for c in adtl.children if c.ident == b'note'] - return WavCuesReader.merge(f, cue, labls, ltxts, + return WavCuesReader.merge(f, cue, labls, ltxts, notes, fallback_encoding=self.info_encoding) def walk(self) -> Generator[str,str,Any]: #FIXME: this should probably be named "iter()" From 2ca21cd316e0c4104928d409e0d99bc046c107db Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:31:56 -0800 Subject: [PATCH 03/22] Documentation --- docs/source/scopes/cue.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/source/scopes/cue.rst b/docs/source/scopes/cue.rst index 1e789ea..09d7ab3 100644 --- a/docs/source/scopes/cue.rst +++ b/docs/source/scopes/cue.rst @@ -1,4 +1,16 @@ Cue Marker and Range Metadata ------------------------------ +Notes +===== +Cue metadata stores timed markers that clients use to mark times of interest +in a wave file, and optionally give them a name and longer comment. Markers +can also have an associated length, allowing ranges of times in a file to be +marked. + +Class Reference +=============== + +.. autoclass:: wavinfo.wave_cues_reader.WavCuesReader + :members: From 2c760a9c68cd30a47c8ef5c45e0ae2ef3dff954b Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:37:07 -0800 Subject: [PATCH 04/22] Updating README --- README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 98ca450..439d9b2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ # wavinfo -The `wavinfo` package allows you to probe WAVE and [RF64/WAVE files][eburf64] and extract extended metadata, with an emphasis on film, video and professional music production metadata. +The `wavinfo` package allows you to probe WAVE and [RF64/WAVE files][eburf64] +and extract extended metadata, with an emphasis on film, video and +professional music production metadata. ## Metadata Support @@ -13,14 +15,16 @@ The `wavinfo` package allows you to probe WAVE and [RF64/WAVE files][eburf64] an * [Broadcast-WAVE][bext] metadata, including embedded program loudness, coding history and [SMPTE UMID][smpte_330m2011]. -* [ADM][adm] track metadata and schema, including channel, pack formats, object, content and programme. +* Wave embedded cue markers, cue marker labels, notes and timed ranges. +* [ADM][adm] track metadata and schema, including channel, pack formats, + object, content and programme. * [Dolby Digital Plus][ebu3285s6] and Dolby Atmos `dbmd` metadata. -* [iXML][ixml] production recorder metadata, including project, scene, and take tags, recorder notes - and file family information. +* [iXML][ixml] production recorder metadata, including project, scene, and + take tags, recorder notes and file family information. * iXML `STEINBERG` sound library attributes. * Most of the common [RIFF INFO][info-tags] metadata fields. -* The __wav format__ is also parsed, so you can access the basic sample rate and channel count - information. +* The __wav format__ is also parsed, so you can access the basic sample rate + and channel count information. In progress: * Pro Tools __embedded regions__. @@ -57,4 +61,5 @@ $ wavinfo test_files/A101_1.WAV ## Other Resources -* For other file formats and ID3 decoding, look at [audio-metadata](https://github.com/thebigmunch/audio-metadata). +* For other file formats and ID3 decoding, + look at [audio-metadata](https://github.com/thebigmunch/audio-metadata). From 4401745c965db1296d61967b6f70936c77c0ea13 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:42:22 -0800 Subject: [PATCH 05/22] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 439d9b2..b45c20b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The `wavinfo` package allows you to probe WAVE and [RF64/WAVE files][eburf64] and extract extended metadata, with an emphasis on film, video and -professional music production metadata. +professional music production. ## Metadata Support From ee1a0b9ac0fc7f5a2d3a2e9cbacda82a5002141e Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:43:12 -0800 Subject: [PATCH 06/22] typo --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b45c20b..2b3d425 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ professional music production. * [Broadcast-WAVE][bext] metadata, including embedded program loudness, coding history and [SMPTE UMID][smpte_330m2011]. * Wave embedded cue markers, cue marker labels, notes and timed ranges. -* [ADM][adm] track metadata and schema, including channel, pack formats, +* [Audio Definition Model (ADM)][adm] track metadata and schema, including + channel, pack formats, object, content and programme. * [Dolby Digital Plus][ebu3285s6] and Dolby Atmos `dbmd` metadata. * [iXML][ixml] production recorder metadata, including project, scene, and From d0e45a2d9013bc1908c2352ad706a1742759097c Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:44:18 -0800 Subject: [PATCH 07/22] reorderd items in support list --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b3d425..4099b3e 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ professional music production. * [Broadcast-WAVE][bext] metadata, including embedded program loudness, coding history and [SMPTE UMID][smpte_330m2011]. -* Wave embedded cue markers, cue marker labels, notes and timed ranges. * [Audio Definition Model (ADM)][adm] track metadata and schema, including channel, pack formats, object, content and programme. @@ -23,6 +22,7 @@ professional music production. * [iXML][ixml] production recorder metadata, including project, scene, and take tags, recorder notes and file family information. * iXML `STEINBERG` sound library attributes. +* Wave embedded cue markers, cue marker labels, notes and timed ranges. * Most of the common [RIFF INFO][info-tags] metadata fields. * The __wav format__ is also parsed, so you can access the basic sample rate and channel count information. From f00a338cee0694e5fb91bbd93ec470c0aa6b697a Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 17:44:59 -0800 Subject: [PATCH 08/22] removed in-progress feature --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 4099b3e..38521a8 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,6 @@ professional music production. * The __wav format__ is also parsed, so you can access the basic sample rate and channel count information. -In progress: -* Pro Tools __embedded regions__. - [bext]:https://wavinfo.readthedocs.io/en/latest/scopes/bext.html [smpte_330m2011]:https://wavinfo.readthedocs.io/en/latest/scopes/bext.html#wavinfo.wave_bext_reader.WavBextReader.umid [adm]:https://wavinfo.readthedocs.io/en/latest/scopes/adm.html From 9f0b1f11060a5130e902859c66c5e0d6651934e4 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 18:05:35 -0800 Subject: [PATCH 09/22] elaboration of cue feature --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 38521a8..24c1bd1 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ professional music production. * [iXML][ixml] production recorder metadata, including project, scene, and take tags, recorder notes and file family information. * iXML `STEINBERG` sound library attributes. -* Wave embedded cue markers, cue marker labels, notes and timed ranges. +* Wave embedded cue markers, cue marker labels, notes and timed ranges as used + by Zoom, iZotope RX, etc. * Most of the common [RIFF INFO][info-tags] metadata fields. * The __wav format__ is also parsed, so you can access the basic sample rate and channel count information. From 1a6349bdd8fb372b49fd8392f9c2ab44d67c7caa Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 22:40:29 -0800 Subject: [PATCH 10/22] Changed name of cue class methoChanged name of cue class method --- wavinfo/wave_cues_reader.py | 2 +- wavinfo/wave_reader.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index 2805a7d..5283e0b 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -169,7 +169,7 @@ class WavCuesReader: notes: List[NoteEntry] @classmethod - def merge(cls, f, + def read_all(cls, f, cues: Optional[ChunkDescriptor], labls: List[ChunkDescriptor], ltxts: List[ChunkDescriptor], diff --git a/wavinfo/wave_reader.py b/wavinfo/wave_reader.py index 53a90ff..85993e8 100644 --- a/wavinfo/wave_reader.py +++ b/wavinfo/wave_reader.py @@ -204,7 +204,7 @@ def _get_cue(self, f): ltxts = [c for c in adtl.children if c.ident == b'ltxt'] notes = [c for c in adtl.children if c.ident == b'note'] - return WavCuesReader.merge(f, cue, labls, ltxts, notes, + return WavCuesReader.read_all(f, cue, labls, ltxts, notes, fallback_encoding=self.info_encoding) def walk(self) -> Generator[str,str,Any]: #FIXME: this should probably be named "iter()" @@ -216,7 +216,8 @@ def walk(self) -> Generator[str,str,Any]: #FIXME: this should probably be named "fmt", "data", "ixml", "bext", "info", "dolby", "cues" or "adm". """ - scopes = ('fmt', 'data', 'ixml', 'bext', 'info', 'adm', 'cues', 'dolby') + scopes = ('fmt', 'data', 'ixml', 'bext', 'info', 'adm', 'cues', + 'dolby') for scope in scopes: if scope in ['fmt', 'data']: From 8aad9ae9b936cc3206056a162c28cf3c7c14629e Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 23:09:06 -0800 Subject: [PATCH 11/22] Cues reader implementation --- wavinfo/wave_cues_reader.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index 5283e0b..fd2a753 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -12,7 +12,7 @@ from .riff_parser import ChunkDescriptor from struct import unpack, calcsize -from typing import Optional, NamedTuple, List, Dict, Any +from typing import Optional, Tuple, NamedTuple, List, Dict, Any, Generator #: Country Codes used in the RIFF standard to resolve locale. These codes #: appear in CSET and LTXT metadata. @@ -212,6 +212,25 @@ def read_all(cls, f, return WavCuesReader(cues=cue_list, labels=label_list, ranges=range_list, notes=note_list) + def each_cue(self) -> Generator[Tuple[int, int], None, None]: + """ + Iterate through each cue. + :yields: the cue's ``name`` and ``sample_offset`` + """ + for cue in self.cues: + yield (cue.name, cue.sample_offset) + + def label_and_note(self, cue_ident: int) -> Tuple[Optional[str], Optional[str]]: + """ + Get the label and note (extended comment) for a cue. + :param cue_ident: the cue's name, it's unique identifying number + :returns: a tuple of the the cue's label (if present) and note (if + present) + """ + label = next((l.text for l in self.labels if l.name == cue_ident), None) + note = next((n.text for n in self.notes if n.name == cue_ident), None) + return (label, note) + def to_dict(self) -> Dict[str, Any]: return dict(cues=[c.__dict__ for c in self.cues], labels=[l.__dict__ for l in self.labels], @@ -220,7 +239,3 @@ def to_dict(self) -> Dict[str, Any]: - - - - From 6f6a90a2625b869f2936f1f179a81d12ce8f911a Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 6 Nov 2023 23:13:59 -0800 Subject: [PATCH 12/22] Made a note about a test --- tests/test_cue.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_cue.py b/tests/test_cue.py index ffb2661..b13b6d4 100644 --- a/tests/test_cue.py +++ b/tests/test_cue.py @@ -9,6 +9,11 @@ def setUp(self) -> None: return super().setUp() def test_encoding_fallback(self): + """ + Added this after I noticed that iZotope RX seems to just encode "notes" + as utf-8 without bothering to dump this info into the ltxt or + specifying an encoding by some other means. + """ file = "tests/test_files/cue_chunks/izotoperx_cues_test.wav" w = wavinfo.WavInfoReader(file, info_encoding='utf-8') expected = ("Лорем ипсум долор сит амет, тимеам вивендум хас ет, " From 96f79b5dc7684d5601ad417c5184ed15890c8c31 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 00:10:48 -0800 Subject: [PATCH 13/22] Examples --- examples/demo.ipynb | 162 +++++++++++++++++++++++++------ examples/wavinfo.ipynb | 215 ----------------------------------------- 2 files changed, 133 insertions(+), 244 deletions(-) delete mode 100644 examples/wavinfo.ipynb diff --git a/examples/demo.ipynb b/examples/demo.ipynb index 7e6de5e..f478d1d 100644 --- a/examples/demo.ipynb +++ b/examples/demo.ipynb @@ -6,12 +6,21 @@ "source": [ "# `wavinfo` Demonstration\n", "\n", - "The entry point for wavinfo is the WavInfoReader class." + "The `wavinfo` module allows you to read most of the metadata formats that are available for WAV files." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opening a WAV file for reading metadata\n", + "\n", + "The entry point for wavinfo is the `WavInfoReader` class:" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -26,14 +35,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Basic WAV Data\n", + "Once you have a `WavInfoReader`, you can access different metadata systems or \"scopes.\"\n", + "\n", + "The scopes that are presently supported are: `fmt`, `data`, `ixml`, `bext`, `info`, `adm`, `cues`, and `dolby`. Each of these is an attribute of a `WavInfoReader` object.\n", + "\n", + "Each scope roughly corresponds to a vendor-defined metadata system. Many scopes directly represent a specific file *chunk*, like `fmt` or `ixml`, and some may involve data read from many chunks. Examples of this would include `cues` or `adm`.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metadata Scopes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `data` and `fmt`: Basic WAV Data\n", "\n", "The length of the file in frames (interleaved samples) and bytes is available, as is the contents of the format chunk." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -42,7 +69,7 @@ "(240239, 1441434)" ] }, - "execution_count": 2, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -51,9 +78,16 @@ "(info.data.frame_count, info.data.byte_count)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `fmt` scope allows the client to read metadata from the WAVE format description." + ] + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -62,7 +96,7 @@ "(48000, 2, 6, 24)" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -75,29 +109,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Broadcast WAV Extension" + "### `bext`: Broadcast WAV Extension\n", + "\n", + "The `bext` scope allows the client to access Broadcast-WAV metadata. " ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "sSPEED=023.976-ND\r\n", - "sTAKE=1\r\n", - "sUBITS=$12311801\r\n", - "sSWVER=2.67\r\n", - "sPROJECT=BMH\r\n", - "sSCENE=A101\r\n", - "sFILENAME=A101_1.WAV\r\n", - "sTAPE=18Y12M31\r\n", - "sTRK1=MKH516 A\r\n", - "sTRK2=Boom\r\n", - "sNOTE=\r\n", + "sSPEED=023.976-ND\n", + "sTAKE=1\n", + "sUBITS=$12311801\n", + "sSWVER=2.67\n", + "sPROJECT=BMH\n", + "sSCENE=A101\n", + "sFILENAME=A101_1.WAV\n", + "sTAPE=18Y12M31\n", + "sTRK1=MKH516 A\n", + "sTRK2=Boom\n", + "sNOTE=\n", "\n", "----------\n", "Originator: Sound Dev: 702T S#GR1112089007\n", @@ -105,7 +141,7 @@ "Originator Date: 2018-12-31\n", "Originator Time: 12:40:00\n", "Time Reference: 2190940753\n", - "A=PCM,F=48000,W=24,M=stereo,R=48000,T=2 Ch\r\n", + "A=PCM,F=48000,W=24,M=stereo,R=48000,T=2 Ch\n", "\n" ] } @@ -125,12 +161,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## iXML Production Recorder Metadata" + "### `ixml`: iXML Production Recorder Metadata" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -155,12 +191,80 @@ "print(\"iXML File Family UID:\", info.ixml.family_uid)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `cues`: Cues Metadata\n", + "\n", + "Cue time markers are accessible through the `cues` scope. The `each_cue` method returns an iterator that yields a tuple of each cue \"name\" or integer UID, and sample location. " + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cue ID: 1\n", + "Cue Offset: 29616\n", + "Cue ID: 2\n", + "Cue Offset: 74592\n", + "Cue ID: 3\n", + "Cue Offset: 121200\n" + ] + } + ], + "source": [ + "path = \"../tests/test_files/cue_chunks/STE-000.wav\"\n", + "info = WavInfoReader(path)\n", + "\n", + "for cue in info.cues.each_cue():\n", + " print(f\"Cue ID: {cue[0]}\")\n", + " print(f\"Cue Offset: {cue[1]}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are also convenience methods to get the appropriate label and note for a given marker. (Note here also `WavInfoReader`'s facility for overriding default text encodings.)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cue ID: 1\n", + " Label: Marker 1\n", + " Note: \n", + "Cue ID: 2\n", + " Label: Marker 2\n", + " Note: Marker Comment 1\n", + "Cue ID: 3\n", + " Label: Marker 3\n", + " Note: Лорем ипсум долор сит амет, тимеам вивендум хас ет, цу адолесценс дефинитионес еам.\n" + ] + } + ], + "source": [ + "path = \"../tests/test_files/cue_chunks/izotoperx_cues_test.wav\"\n", + "info = WavInfoReader(path, info_encoding=\"utf-8\")\n", + "\n", + "for cue in info.cues.each_cue():\n", + " print(f\"Cue ID: {cue[0]}\")\n", + " label, note = info.cues.label_and_note(cue[0])\n", + " print(f\" Label: {label}\")\n", + " print(f\" Note: {note or ''}\")" + ] }, { "cell_type": "code", @@ -172,7 +276,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -186,9 +290,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.11.5" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/wavinfo.ipynb b/examples/wavinfo.ipynb deleted file mode 100644 index ba3df78..0000000 --- a/examples/wavinfo.ipynb +++ /dev/null @@ -1,215 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import wavinfo\n", - "import pprint" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "pp = pprint.PrettyPrinter(indent=4)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "path = '../tests/test_files/protools/PT A101_4.A1.wav'\n", - "\n", - "info = wavinfo.WavInfoReader(path)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ ChunkDescriptor(ident=b'bext', start=20, length=858),\n", - " ChunkDescriptor(ident=b'iXML', start=886, length=5226),\n", - " ChunkDescriptor(ident=b'fmt ', start=6120, length=16),\n", - " ChunkDescriptor(ident=b'data', start=6144, length=864840),\n", - " ChunkDescriptor(ident=b'umid', start=870992, length=24),\n", - " ChunkDescriptor(ident=b'minf', start=871024, length=16),\n", - " ChunkDescriptor(ident=b'regn', start=871048, length=92)]\n" - ] - } - ], - "source": [ - "import wavinfo.wave_parser\n", - "\n", - "with open(path,'rb') as f:\n", - " chunk_tree = wavinfo.wave_parser.parse_chunk(f)\n", - "\n", - "pp.pprint(chunk_tree.children)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00*\\xfd\\xf5\\x0c$\\xe4s\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n", - "000000000000002afdf50c24e47380000000000000000000\n", - "24\n" - ] - } - ], - "source": [ - "with open(path,'rb') as f:\n", - " f.seek( chunk_tree.children[4].start )\n", - " umid_bin = f.read(chunk_tree.children[4].length)\n", - " f.seek( chunk_tree.children[6].start )\n", - " regn_bin = f.read(chunk_tree.children[6].length)\n", - " \n", - "print(umid_bin)\n", - "print(umid_bin.hex())\n", - "print(len(umid_bin))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "print(info.bext)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "b'\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00*\\xfd\\xf5\\x0c$\\xe4s\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0c3\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00T\\xd5\\xa2\\x82\\x00\\x00\\x00\\x00\\x10PT A101_4.A1.wavGK\\xaa\\xaf\\x7f\\x00\\x00@ }\\x06\\x00`\\x00\\x00'\n", - "01000000000000000000002afdf50c24e473800000000000000000000c330200000000000000000000000000000000000000000054d5a2820000000010505420413130315f342e41312e776176474baaaf7f000040207d0600600000\n", - "92\n" - ] - } - ], - "source": [ - "\n", - "print(regn_bin)\n", - "print(regn_bin.hex())\n", - "print(len(regn_bin))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{ 'artist': 'Frank Bry',\n", - " 'comment': 'BULLET Impact Plastic LCD TV Screen Shatter Debris 2x',\n", - " 'copyright': '2018 Creative Sound Design, LLC (The Recordist Christmas '\n", - " '2018) www.therecordist.com',\n", - " 'created_date': '2018-11-15',\n", - " 'engineer': None,\n", - " 'genre': 'Bullets',\n", - " 'keywords': None,\n", - " 'product': 'The Recordist Christmas 2018',\n", - " 'software': 'Soundminer',\n", - " 'source': None,\n", - " 'tape': None,\n", - " 'title': None}\n", - "{ 'coding_history': '',\n", - " 'description': 'BULLET Impact Plastic LCD TV Screen Shatter Debris 2x',\n", - " 'loudness_range': None,\n", - " 'loudness_value': None,\n", - " 'max_momentary_loudness': None,\n", - " 'max_shortterm_loudness': None,\n", - " 'max_true_peak': None,\n", - " 'originator': 'TheRecordist',\n", - " 'originator_date': '2018-12-20',\n", - " 'originator_ref': 'aaiAKt3fCGTk',\n", - " 'originator_time': '12:15:37',\n", - " 'time_reference': 57882,\n", - " 'version': 0}\n" - ] - } - ], - "source": [ - "path = '../tests/test_files/BULLET Impact Plastic LCD TV Screen Shatter Debris 2x.wav'\n", - "\n", - "info = wavinfo.WavInfoReader(path)\n", - "\n", - "with open(path,'rb') as f:\n", - " chunk_tree = wavinfo.wave_parser.parse_chunk(f)\n", - " \n", - "pp.pprint(info.info.to_dict())\n", - "pp.pprint(info.bext.to_dict())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 208edd8bdc4808fbbfdb03d79a4e41e1b38d3418 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 00:32:19 -0800 Subject: [PATCH 14/22] Added some examples --- examples/demo.ipynb | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/examples/demo.ipynb b/examples/demo.ipynb index f478d1d..f05ac2b 100644 --- a/examples/demo.ipynb +++ b/examples/demo.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -37,9 +37,19 @@ "source": [ "Once you have a `WavInfoReader`, you can access different metadata systems or \"scopes.\"\n", "\n", - "The scopes that are presently supported are: `fmt`, `data`, `ixml`, `bext`, `info`, `adm`, `cues`, and `dolby`. Each of these is an attribute of a `WavInfoReader` object.\n", + "The scopes that are presently supported are: \n", + " * `fmt`: sample format, sample rate, bit depth, block alignment, etc.\n", + " * `data`: data chunk description, bytes length and frames length.\n", + " * `ixml`: Gallery Software's iXML metadata, used by production sound recorder equipment and DAWs.\n", + " * `bext`: Broacast-WAV metadata as used by DAWs.\n", + " * `info`: title, artist and description metadata tags, among other items.\n", + " * `adm`: EBU Audio Defintion Model metadata, as used by Dolby Atmos.\n", + " * `cues`: Cue marker metadata, including labels and notes \n", + " * `dolby`: Dolby recorder and playback metadata\n", + "\n", + "Each of these is an attribute of a `WavInfoReader` object.\n", "\n", - "Each scope roughly corresponds to a vendor-defined metadata system. Many scopes directly represent a specific file *chunk*, like `fmt` or `ixml`, and some may involve data read from many chunks. Examples of this would include `cues` or `adm`.\n" + "Each scope corresponds to a vendor-defined metadata system. Many scopes directly represent a specific file *chunk*, like `fmt` or `ixml`, and some may involve data read from many chunks. Examples of this would include `cues` or `adm`.\n" ] }, { @@ -60,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -69,7 +79,7 @@ "(240239, 1441434)" ] }, - "execution_count": 4, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -87,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -96,7 +106,7 @@ "(48000, 2, 6, 24)" ] }, - "execution_count": 5, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -116,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -166,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -202,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -231,12 +241,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "There are also convenience methods to get the appropriate label and note for a given marker. (Note here also `WavInfoReader`'s facility for overriding default text encodings.)" + "There is also a convenience method to get the appropriate label and note for a given marker. (Note here also `WavInfoReader`'s facility for overriding default text encodings.)" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -245,24 +255,28 @@ "text": [ "Cue ID: 1\n", " Label: Marker 1\n", + " At: 1000\n", " Note: \n", "Cue ID: 2\n", " Label: Marker 2\n", + " At: 5000\n", " Note: Marker Comment 1\n", "Cue ID: 3\n", " Label: Marker 3\n", + " At: 10000\n", " Note: Лорем ипсум долор сит амет, тимеам вивендум хас ет, цу адолесценс дефинитионес еам.\n" ] } ], "source": [ "path = \"../tests/test_files/cue_chunks/izotoperx_cues_test.wav\"\n", - "info = WavInfoReader(path, info_encoding=\"utf-8\")\n", + "info = WavInfoReader(path, info_encoding=\"utf-8\") # iZotope RX seems to encode marker text as UTF-8\n", "\n", "for cue in info.cues.each_cue():\n", " print(f\"Cue ID: {cue[0]}\")\n", " label, note = info.cues.label_and_note(cue[0])\n", " print(f\" Label: {label}\")\n", + " print(f\" At: {cue[1]}\")\n", " print(f\" Note: {note or ''}\")" ] }, From 5aa34dfbe477f620ff1bed841c894606c787d3b6 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 08:20:23 -0800 Subject: [PATCH 15/22] Improved test coverage and touching up docs. --- tests/test_cue.py | 28 +++++++++++++++++++++++++--- wavinfo/wave_cues_reader.py | 6 ++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/tests/test_cue.py b/tests/test_cue.py index b13b6d4..54cbd06 100644 --- a/tests/test_cue.py +++ b/tests/test_cue.py @@ -8,6 +8,26 @@ def setUp(self) -> None: self.test_files = glob("tests/test_files/cue_chunks/*.wav") return super().setUp() + def test_enumerate(self): + file1 = "tests/test_files/cue_chunks/STE-000.wav" + w1 = wavinfo.WavInfoReader(file1) + self.assertIsNotNone(w1.cues) + vals = list(w1.cues.each_cue()) + self.assertEqual(vals, [(1,29616),(2,74592),(3,121200)]) + + def test_labels_notes(self): + file = "tests/test_files/cue_chunks/izotoperx_cues_test.wav" + w1 = wavinfo.WavInfoReader(file) + self.assertIsNotNone(w1.cues) + assert w1.cues is not None + + for name, _ in w1.cues.each_cue(): + self.assertIn(name,[1,2,3]) + label, note = w1.cues.label_and_note(name) + if name == 1: + self.assertEqual("Marker 1", label) + self.assertIsNone(note) + def test_encoding_fallback(self): """ Added this after I noticed that iZotope RX seems to just encode "notes" @@ -19,6 +39,7 @@ def test_encoding_fallback(self): expected = ("Лорем ипсум долор сит амет, тимеам вивендум хас ет, " "цу адолесценс дефинитионес еам.") + assert w.cues is not None note = [n for n in w.cues.notes if n.name == 3] self.assertEqual(len(note), 1) self.assertEqual(note[0].text, expected) @@ -28,17 +49,18 @@ def test_label(self): w = wavinfo.WavInfoReader(file) self.assertIsNotNone(w.cues) - + assert w.cues is not None + self.assertEqual(len(w.cues.labels), 3) for label in w.cues.labels: + self.assertIn(label.name, [1,2,3]) if label.name == 1: self.assertEqual(label.text, "Marker 1") elif label.name == 2: self.assertEqual(label.text, "Marker 2") elif label.name == 3: self.assertEqual(label.text, "Marker 3") - else: - self.fail(f"Encountered unexpected label id {label.name}") + diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index fd2a753..08a9476 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -215,6 +215,7 @@ def read_all(cls, f, def each_cue(self) -> Generator[Tuple[int, int], None, None]: """ Iterate through each cue. + :yields: the cue's ``name`` and ``sample_offset`` """ for cue in self.cues: @@ -223,9 +224,10 @@ def each_cue(self) -> Generator[Tuple[int, int], None, None]: def label_and_note(self, cue_ident: int) -> Tuple[Optional[str], Optional[str]]: """ Get the label and note (extended comment) for a cue. + :param cue_ident: the cue's name, it's unique identifying number - :returns: a tuple of the the cue's label (if present) and note (if - present) + :returns: a tuple of the the cue's label (if present) and note (if + present) """ label = next((l.text for l in self.labels if l.name == cue_ident), None) note = next((n.text for n in self.notes if n.name == cue_ident), None) From 7ca3721ab82963359e2f521338e50fceeec078a8 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 08:34:26 -0800 Subject: [PATCH 16/22] Fixed a typo in a link --- docs/source/references.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/references.rst b/docs/source/references.rst index 737348e..6661bf2 100644 --- a/docs/source/references.rst +++ b/docs/source/references.rst @@ -35,6 +35,6 @@ iXML RIFF Metadata ------------- -* `1991. Multimedia Programming Interface and Data Specifications 1.0`_ +* `1991. Multimedia Programming Interface and Data Specifications 1.0 `_ * `Exiftool Documentation `_ From f1ce4888af99705b52797f003f231dfbb472736d Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 08:36:53 -0800 Subject: [PATCH 17/22] Get timed ranges --- tests/test_cue.py | 8 ++++++++ wavinfo/wave_cues_reader.py | 21 +++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/tests/test_cue.py b/tests/test_cue.py index 54cbd06..4271769 100644 --- a/tests/test_cue.py +++ b/tests/test_cue.py @@ -28,6 +28,14 @@ def test_labels_notes(self): self.assertEqual("Marker 1", label) self.assertIsNone(note) + def test_range(self): + file = "tests/test_files/cue_chunks/izotoperx_cues_test.wav" + w1 = wavinfo.WavInfoReader(file) + self.assertIsNotNone(w1.cues) + assert w1.cues is not None + + self.assertEqual(w1.cues.range(3), 10000) + def test_encoding_fallback(self): """ Added this after I noticed that iZotope RX seems to just encode "notes" diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index 08a9476..7d578c0 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -221,18 +221,31 @@ def each_cue(self) -> Generator[Tuple[int, int], None, None]: for cue in self.cues: yield (cue.name, cue.sample_offset) - def label_and_note(self, cue_ident: int) -> Tuple[Optional[str], Optional[str]]: + def label_and_note(self, cue_ident: int) -> Tuple[Optional[str], + Optional[str]]: """ Get the label and note (extended comment) for a cue. - :param cue_ident: the cue's name, it's unique identifying number + :param cue_ident: the cue's name, its unique identifying number :returns: a tuple of the the cue's label (if present) and note (if present) """ - label = next((l.text for l in self.labels if l.name == cue_ident), None) - note = next((n.text for n in self.notes if n.name == cue_ident), None) + label = next((l.text for l in self.labels + if l.name == cue_ident), None) + note = next((n.text for n in self.notes + if n.name == cue_ident), None) return (label, note) + def range(self, cue_ident: int) -> Optional[int]: + """ + Get the length of the time range for a cue, if it has one. + + :param cue_ident: the cue's name, its unique identifying number + :returns: the length of the marker's range, or `None` + """ + return next((r.length for r in self.ranges + if r.name == cue_ident), None) + def to_dict(self) -> Dict[str, Any]: return dict(cues=[c.__dict__ for c in self.cues], labels=[l.__dict__ for l in self.labels], From 26a9104dd99c47b18a74d54a5ec2136087471db5 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 09:27:08 -0800 Subject: [PATCH 18/22] Documentation stuff --- docs/source/quickstart.rst | 5 ++++- docs/source/scopes/bext.rst | 37 ++++++++++++++++++++++++------------- docs/source/scopes/cue.rst | 15 +++++++++++++++ docs/source/scopes/info.rst | 18 +++++++++--------- wavinfo/wave_reader.py | 6 ++---- 5 files changed, 54 insertions(+), 27 deletions(-) diff --git a/docs/source/quickstart.rst b/docs/source/quickstart.rst index 123e87a..1d9e7c6 100644 --- a/docs/source/quickstart.rst +++ b/docs/source/quickstart.rst @@ -17,11 +17,14 @@ instance of :class:`WaveInfoReader`. adm_metadata = info.adm ixml_metadata = info.ixml - + +WavInfoReader Class Documentation +-------------------------------------- .. module:: wavinfo :noindex: .. autoclass:: wavinfo.wave_reader.WavInfoReader :members: + :special-members: __init__ diff --git a/docs/source/scopes/bext.rst b/docs/source/scopes/bext.rst index faf17b9..2c80505 100644 --- a/docs/source/scopes/bext.rst +++ b/docs/source/scopes/bext.rst @@ -4,32 +4,43 @@ Broadcast WAV Extension Metadata Notes ----- -A WAV file produced to Broadcast-WAV specifications will have the broadcast metadata extension, -which includes a 256-character free text descrption, creating entity identifier (usually the -recording application or equipment), the date and time of recording and a time reference for -timecode synchronization. +A WAV file produced to Broadcast-WAV specifications will have the broadcast +metadata extension, which includes a 256-character free text descrption, +creating entity identifier (usually the recording application or equipment), +the date and time of recording and a time reference for timecode +synchronization. The :py:attr:`coding_history` is designed to contain a record of every conversion performed on the audio file. -In this example (from a Sound Devices 702T) the bext metadata contains scene/take slating -information in the :py:attr:`description`. -Here also the :py:attr:`originator_ref` +In this example (from a Sound Devices 702T) the bext metadata contains +scene/take slating information in the +:py:attr:`description`. +Here also the +:py:attr:`originator_ref` is a serial number conforming to EBU Rec 99. -If the bext metadata conforms to `EBU 3285 v1`_, it will contain the WAV's 32 or 64 byte `SMPTE -ST 330 UMID`_. The 32-byte version of the UMID is usually just a random number, while the 64-byte -UMID will also have information on the recording date and time, recording equipment and entity, -and geolocation data. +If the bext metadata conforms to `EBU 3285 v1`_, it will contain the WAV's 32 +or 64 byte `SMPTE ST 330 UMID`_. The 32-byte version of the UMID is usually +just a random number, while the 64-byte UMID will also have information on the +recording date and time, recording equipment and entity, and geolocation data. -If the bext metadata conforms to `EBU 3285 v2`_, it will hold precomputed program loudness values -as described by `EBU Rec 128`_. +If the bext metadata conforms to `EBU 3285 v2`_, it will hold precomputed +program loudness values as described by `EBU Rec 128`_. .. _EBU 3285 v1: https://tech.ebu.ch/publications/tech3285s1 .. _SMPTE ST 330 UMID: https://standards.globalspec.com/std/1396751/smpte-st-330 .. _EBU 3285 v2: https://tech.ebu.ch/publications/tech3285s2 .. _EBU Rec 128: https://tech.ebu.ch/publications/r128 + +.. note:: + All text fields in the Broadcast-WAV metadata structure are decoded by + default as flat ASCII. To override this and use a different encoding, pass + an string encoding name to the ``bext_encoding`` parameter of + :py:meth:`WavInfoReader()` + + Example ------- .. code:: python diff --git a/docs/source/scopes/cue.rst b/docs/source/scopes/cue.rst index 09d7ab3..96eed0e 100644 --- a/docs/source/scopes/cue.rst +++ b/docs/source/scopes/cue.rst @@ -9,6 +9,21 @@ in a wave file, and optionally give them a name and longer comment. Markers can also have an associated length, allowing ranges of times in a file to be marked. +String Encoding of Cue Metadata +""""""""""""""""""""""""""""""" + +Cue labels and notes will be decoded using the string encoding passed to +:py:meth:`WavInfoReader's` +``info_encoding=`` parameter, which by default is ``latin_1`` (ISO 8859-1). + +Text associated with ``ltxt`` time ranges may specify their own encoding in +the form of a Windows codepage number. `wavinfo` will attempt to use the +encoding specified. + +.. note:: + ``cset`` character set/locale metadata is not supported. If it is present + in the file it will be ignored by `wavinfo`. + Class Reference =============== diff --git a/docs/source/scopes/info.rst b/docs/source/scopes/info.rst index 7288fc6..fea8155 100644 --- a/docs/source/scopes/info.rst +++ b/docs/source/scopes/info.rst @@ -20,16 +20,16 @@ music library software. print("INFO Comment:", bullet.info.comment) -On Encodings -"""""""""""" -According to Microsoft, the original developers of the RIFF file and RIFF INFO -metadata, these fields are always to be interpreted as ISO Latin 1 characters, -and this is the default encoding used by `wavinfo` for these fields. You can -select a different encoding (like Shift-JIS) by passing an encoding name (as -would be used by `string.encode()`) to `WavInfoReader.__init__()`'s -`info_encoding=` parameter. - +String Encoding of Cue Metadata +""""""""""""""""""""""""""""""" +Info metadata fields will be decoded using the string encoding passed to +:py:meth:`WavInfoReader's` +``info_encoding=`` parameter, which by default is ``latin_1`` (ISO 8859-1). + +.. note:: + ``cset`` character set/locale metadata is not supported. If it is present + in the file it will be ignored by `wavinfo`. Class Reference --------------- diff --git a/wavinfo/wave_reader.py b/wavinfo/wave_reader.py index 85993e8..f856329 100644 --- a/wavinfo/wave_reader.py +++ b/wavinfo/wave_reader.py @@ -38,10 +38,8 @@ def __init__(self, path, info_encoding='latin_1', bext_encoding='ascii'): file handle to an open file. :param info_encoding: - The text encoding of the INFO, LABL and other RIFF-defined metadata - fields. latin_1/ISO 8859-1/Win CP819 is the safest assumption for - this; chunks that define their own encoding explicitly (like LTXT) - will override this setting. + The text encoding of the ``INFO``, ``LABL`` and other RIFF-defined + metadata fields. :param bext_encoding: The text encoding to use when decoding the string From 267befc0b0e0312ded47f6c16b27be864970c2b8 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 09:28:30 -0800 Subject: [PATCH 19/22] Documentation typo --- docs/source/scopes/info.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/scopes/info.rst b/docs/source/scopes/info.rst index fea8155..b5d000b 100644 --- a/docs/source/scopes/info.rst +++ b/docs/source/scopes/info.rst @@ -20,8 +20,8 @@ music library software. print("INFO Comment:", bullet.info.comment) -String Encoding of Cue Metadata -""""""""""""""""""""""""""""""" +String Encoding of INFO Metadata +"""""""""""""""""""""""""""""""" Info metadata fields will be decoded using the string encoding passed to :py:meth:`WavInfoReader's` From c392f488193db4c4c9bc6e9ca31440e36b7139b6 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 10:33:32 -0800 Subject: [PATCH 20/22] Documentation, removed dead lines --- wavinfo/wave_reader.py | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/wavinfo/wave_reader.py b/wavinfo/wave_reader.py index f856329..56a2f77 100644 --- a/wavinfo/wave_reader.py +++ b/wavinfo/wave_reader.py @@ -71,7 +71,7 @@ def __init__(self, path, info_encoding='latin_1', bext_encoding='ascii'): #: RIFF INFO metadata. self.info :Optional[WavInfoChunkReader]= None - #: RIFF CUE, LABL and LTXT metadata. + #: RIFF cues markers, labels, and notes. self.cues :Optional[WavCuesReader] = None if hasattr(path, 'read'): @@ -135,25 +135,12 @@ def _describe_data(self): def _get_format(self, f): fmt_data = self._find_chunk_data(b'fmt ', f) assert fmt_data is not None, "Fmt data not found, not a valid wav file" - # The format chunk is - # audio_format U16 - # channel_count U16 - # sample_rate U32 Note an integer - # byte_rate U32 == SampleRate * NumChannels * BitsPerSample/8 - # block_align U16 == NumChannels * BitsPerSample/8 - # bits_per_sampl U16 + packstring = " Date: Tue, 7 Nov 2023 11:37:36 -0800 Subject: [PATCH 21/22] Fixed a bug in the cues to_dict method --- tests/test_walk.py | 12 ++++++++++++ wavinfo/wave_cues_reader.py | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tests/test_walk.py b/tests/test_walk.py index 63df1ab..361766a 100644 --- a/tests/test_walk.py +++ b/tests/test_walk.py @@ -1,6 +1,7 @@ import unittest import wavinfo +import glob class TestWalk(unittest.TestCase): def test_walk_metadata(self): @@ -20,6 +21,17 @@ def test_walk_metadata(self): self.assertTrue(tested_data and tested_format) + def test_walk_all(self): + for file in glob.glob('tests/test_files/**/*.wav'): + info = wavinfo.WavInfoReader(file) + + try: + for _, _, _ in info.walk(): + pass + except: + self.fail(f"Failed to walk metadata in file {file}") + + if __name__ == '__main__': unittest.main() diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index 7d578c0..c1fbaeb 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -247,10 +247,10 @@ def range(self, cue_ident: int) -> Optional[int]: if r.name == cue_ident), None) def to_dict(self) -> Dict[str, Any]: - return dict(cues=[c.__dict__ for c in self.cues], - labels=[l.__dict__ for l in self.labels], - ranges=[r.__dict__ for r in self.ranges], - notes=[n.__dict__ for n in self.notes]) + return dict(cues=[c._asdict() for c in self.cues], + labels=[l._asdict() for l in self.labels], + ranges=[r._asdict() for r in self.ranges], + notes=[n._asdict() for n in self.notes]) From 0138387d2797a7370a2d28406b5df0d0a028565a Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Tue, 7 Nov 2023 11:44:28 -0800 Subject: [PATCH 22/22] Made cues to_dict nicer --- wavinfo/wave_cues_reader.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/wavinfo/wave_cues_reader.py b/wavinfo/wave_cues_reader.py index c1fbaeb..8d47a07 100644 --- a/wavinfo/wave_cues_reader.py +++ b/wavinfo/wave_cues_reader.py @@ -247,10 +247,26 @@ def range(self, cue_ident: int) -> Optional[int]: if r.name == cue_ident), None) def to_dict(self) -> Dict[str, Any]: - return dict(cues=[c._asdict() for c in self.cues], - labels=[l._asdict() for l in self.labels], - ranges=[r._asdict() for r in self.ranges], - notes=[n._asdict() for n in self.notes]) + retval = dict() + + for n, t in self.each_cue(): + retval[n] = dict() + retval[n]['frame'] = t + label, note = self.label_and_note(n) + r = self.range(n) + + if label is not None: + retval[n]['label'] = label + if note is not None: + retval[n]['note'] = note + if r is not None: + retval[n]['length'] = r + + return retval + # return dict(cues=[c._asdict() for c in self.cues], + # labels=[l._asdict() for l in self.labels], + # ranges=[r._asdict() for r in self.ranges], + # notes=[n._asdict() for n in self.notes])