/ concept-collection / benchcompress
Sign in
concept-collection / benchcompress
Add wavpack levels 1-4
Alessio Buccino <alejoe9187@gmail.com> committed commit e9341c475d04 parent 2d8dde5 Browse files
3 changed files+91−1
benchcompress/pyproject.tomlmodified+2−1View file
@@ -25,7 +25,8 @@ dependencies = [
2525 "segyio",
2626 "lz4",
2727 "pyedflib",
28- "nibabel"
28+ "nibabel",
29+ "wavpack-numcodecs"
2930 ]
3031
3132 [tool.scikit-build]
benchcompress/src/benchcompress/algorithms/wavpack/__init__.pyadded+77−0View file
@@ -0,0 +1,77 @@
1+import numpy as np
2+import os
3+
4+
5+SOURCE_FILE = "wavpack/__init__.py"
6+
7+
8+def _load_long_description():
9+ current_dir = os.path.dirname(os.path.abspath(__file__))
10+ md_path = os.path.join(current_dir, "wavpack.md")
11+ with open(md_path, "r", encoding="utf-8") as f:
12+ return f.read()
13+
14+
15+LONG_DESCRIPTION = _load_long_description()
16+
17+
18+def wavpack_encode(x: np.ndarray, level: int) -> bytes:
19+ from wavpack_numcodecs import WavPack
20+
21+ assert x.ndim == 1 or x.ndim == 2
22+ wv = WavPack(level=level)
23+ compressed = wv.encode(x)
24+ return compressed
25+
26+
27+def wavpack_decode(x: bytes, dtype: str, shape: tuple) -> np.ndarray:
28+ from wavpack_numcodecs import WavPack
29+
30+ wv = WavPack()
31+ buf = wv.decode(x, dtype=dtype, shape=shape)
32+ y = np.frombuffer(buf, dtype=dtype)
33+ return y.reshape(shape)
34+
35+
36+algorithms = [
37+ {
38+ "name": "wavpack-1",
39+ "version": "1",
40+ "encode": lambda x: wavpack_encode(x, level=1),
41+ "decode": lambda x, dtype, shape: wavpack_decode(x, dtype, shape),
42+ "description": "WavPack compression at level 1, minimum compression level.",
43+ "tags": ["wavpack"],
44+ "source_file": SOURCE_FILE,
45+ "long_description": LONG_DESCRIPTION,
46+ },
47+ {
48+ "name": "wavpack-2",
49+ "version": "1",
50+ "encode": lambda x: wavpack_encode(x, level=2),
51+ "decode": lambda x, dtype, shape: wavpack_decode(x, dtype, shape),
52+ "description": "WavPack compression at level 2, medium compression level.",
53+ "tags": ["wavpack"],
54+ "source_file": SOURCE_FILE,
55+ "long_description": LONG_DESCRIPTION,
56+ },
57+ {
58+ "name": "wavpack-3",
59+ "version": "1",
60+ "encode": lambda x: wavpack_encode(x, level=3),
61+ "decode": lambda x, dtype, shape: wavpack_decode(x, dtype, shape),
62+ "description": "WavPack compression at level 3, high compression level.",
63+ "tags": ["wavpack"],
64+ "source_file": SOURCE_FILE,
65+ "long_description": LONG_DESCRIPTION,
66+ },
67+ {
68+ "name": "wavpack-4",
69+ "version": "1",
70+ "encode": lambda x: wavpack_encode(x, level=4),
71+ "decode": lambda x, dtype, shape: wavpack_decode(x, dtype, shape),
72+ "description": "WavPack compression at level 4, highest compression level.",
73+ "tags": ["wavpack"],
74+ "source_file": SOURCE_FILE,
75+ "long_description": LONG_DESCRIPTION,
76+ },
77+]
benchcompress/src/benchcompress/algorithms/wavpack/wavpack.mdadded+12−0View file
@@ -0,0 +1,12 @@
1+# WavPack
2+
3+[WavPack](https://www.wavpack.com/) is a completely open audio compression format providing lossless, high-quality lossy, and a unique hybrid compression mode. It is designed to offer a versatile and efficient solution for audio compression.
4+
5+## Variants
6+
7+WavPack supports different levels of lossless compression, which can be adjusted to balance between compression ratio and encoding/decoding speed. The following variants are available:
8+
9+- **Fast**: Prioritizes speed over compression ratio.
10+- **Normal**: Balanced between speed and compression ratio.
11+- **High**: Prioritizes compression ratio over speed.
12+- **Very High**: Maximum compression ratio with slower speed.
moveopenescclose