No project description provided
Project description
Introduction
Python wrapper for Kaldi's native I/O. The internal implementation uses C++ code from Kaldi. A Python wrapper with pybind11 is provided to read ark/scp files from Kaldi in Python.
Note: This project is self-contained and does not depend on Kaldi
.
Installation
pip install --verbose kaldi_native_io
or
git clone https://github.com/csukuangfj/kaldi_native_io
cd kaldi_native_io
python3 setup.py install
or
conda install -c kaldi_native_io kaldi_native_io
Features
-
Native support for ALL types of
rspecifier
andwspecifier
since the C++ code is borrowed from Kaldi. -
Support the following data types (More will be added later on request.)
- Note: We also support Python
bytes
class
- Note: We also support Python
C++ Data Type | Writer | Sequential Reader | Random Access Reader |
---|---|---|---|
Python's bytes |
BlobWriter |
SequentialBlobReader |
RandomAccessBlobReader |
int32 |
Int32Writer |
SequentialInt32Reader |
RandomAccessInt32Reader |
std::vector<int32> |
Int32VectorWriter |
SequentialInt32VectorReader |
RandomAccessInt32VectorReader |
std::vector<int8> |
Int8VectorWriter |
SequentialInt8VectorReader |
RandomAccessInt8VectorReader |
std::vector<std::vector<int32>> |
Int32VectorVectorWriter |
SequentialInt32VectorVectorReader |
RandomAccessInt32VectorVectorReader |
std::vector<std::pair<int32, int32>> |
Int32PairVectorWriter |
SequentialInt32PairVectorReader |
RandomAccessInt32PairVectorReader |
float |
FloatWriter |
SequentialFloatReader |
RandomAccessFloatReader |
std::vector<std::pair<float, float>> |
FloatPairVectorWriter |
SequentialFloatPairVectorReader |
RandomAccessFloatPairVectorReader |
double |
DoubleWriter |
SequentialDoubleReader |
RandomAccessDoubleReader |
bool |
BoolWriter |
SequentialBoolReader |
RandomAccessBoolReader |
std::string |
TokenWriter |
SequentialTokenReader |
RandomAccessTokenReader |
std::vector<std::string> |
TokenVectorWriter |
SequentialTokenVectorReader |
RandomAccessTokenVectorReader |
kaldi::Vector<float> |
FloatVectorWriter |
SequentialFloatVectorReader |
RandomAccessFloatVectorReader |
kaldi::Vector<double> |
DoubleVectorWriter |
SequentialDoubleVectorReader |
RandomAccessDoubleVectorReader |
kaldi::Matrix<float> |
FloatMatrixWriter |
SequentialFloatMatrixReader |
RandomAccessFloatMatrixReader |
kaldi::Matrix<double> |
DoubleMatrixWriter |
SequentialDoubleMatrixReader |
RandomAccessDoubleMatrixReader |
std::pair<kaldi::Matrix<float>, HtkHeader> |
HtkMatrixWriter |
SequentialHtkMatrixReader |
RandomAccessHtkMatrixReader |
kaldi::CompressedMatrix |
CompressedMatrixWriter |
SequentialCompressedMatrixReader |
RandomAccessCompressedMatrixReader |
kaldi::Posterior |
PosteriorWriter |
SequentialPosteriorReader |
RandomAccessPosteriorReader |
kaldi::GausPost |
GaussPostWriter |
SequentialGaussPostReader |
RandomAccessGaussPostReader |
kaldi::WaveInfo |
- | SequentialWaveInfoReader |
RandomAccessWaveInfoReader |
kaldi::WaveData |
- | SequentialWaveReader |
RandomAccessWaveReader |
MatrixShape |
- | SequentialMatrixShapeReader |
RandomAccessMatrixShapeReader |
Note:
MatrixShape
does not exist in Kaldi. Its purpose is to get the shape information of a matrix without reading all the data.
Usage
Table readers and writers
Write
Create a writer
instance with a wspecifier
and use writer[key] = value
.
For instance, the following code uses kaldi_native_io.FloatMatrixWriter
to
write kaldi::Matrix<float>
to a wspecifier
.
import numpy as np
import kaldi_native_io
base = "float_matrix"
wspecifier = f"ark,scp,t:{base}.ark,{base}.scp"
def test_float_matrix_writer():
with kaldi_native_io.FloatMatrixWriter(wspecifier) as ko:
ko.write("a", np.array([[1, 2], [3, 4]], dtype=np.float32))
ko["b"] = np.array([[10, 20, 30], [40, 50, 60]], dtype=np.float32)
Read
Sequential Read
Create a sequential reader instance with an rspecifier
and use for key, value in reader
to read the file.
For instance, the following code uses kaldi_native_io.SequentialFloatMatrixReader
to
read kaldi::Matrix<float>
from an rspecifier
.
import numpy as np
import kaldi_native_io
base = "float_matrix"
rspecifier = f"scp:{base}.scp"
def test_sequential_float_matrix_reader():
with kaldi_native_io.SequentialFloatMatrixReader(rspecifier) as ki:
for key, value in ki:
if key == "a":
assert np.array_equal(
value, np.array([[1, 2], [3, 4]], dtype=np.float32)
)
elif key == "b":
assert np.array_equal(
value,
np.array([[10, 20, 30], [40, 50, 60]], dtype=np.float32),
)
else:
raise ValueError(f"Unknown key {key} with value {value}")
Random Access Read
Create a random access reader instance with an rspecifier
and use reader[key]
to read the file.
For instance, the following code uses kaldi_native_io.RandomAccessFloatMatrixReader
to
read kaldi::Matrix<float>
from an rspecifier
.
import numpy as np
import kaldi_native_io
base = "float_matrix"
rspecifier = f"scp:{base}.scp"
def test_random_access_float_matrix_reader():
with kaldi_native_io.RandomAccessFloatMatrixReader(rspecifier) as ki:
assert "b" in ki
assert "a" in ki
assert np.array_equal(
ki["a"], np.array([[1, 2], [3, 4]], dtype=np.float32)
)
assert np.array_equal(
ki["b"], np.array([[10, 20, 30], [40, 50, 60]], dtype=np.float32)
)
There are unit tests for all supported types. Please visit https://github.com/csukuangfj/kaldi_native_io/tree/master/kaldi_native_io/python/tests for more examples.
Read and write a single matrix
See
- https://github.com/csukuangfj/kaldi_native_io/blob/master/kaldi_native_io/python/tests/test_float_matrix_writer_reader.py
- https://github.com/csukuangfj/kaldi_native_io/blob/master/kaldi_native_io/python/tests/test_double_matrix_writer_reader.py
def test_read_write_single_mat():
arr = np.array(
[
[0, 1, 2, 22, 33],
[3, 4, 5, -1, -3],
[6, 7, 8, -9, 0],
[9, 10, 11, 5, 100],
],
dtype=np.float32,
)
mat = kaldi_native_io.FloatMatrix(arr)
mat.write(wxfilename="binary.ark", binary=True)
mat.write(wxfilename="matrix.txt", binary=False)
m1 = kaldi_native_io.FloatMatrix.read("binary.ark")
m2 = kaldi_native_io.FloatMatrix.read("matrix.txt")
assert np.array_equal(mat, m1)
assert np.array_equal(mat, m2)
# read range
# Note: the upper bound is inclusive!
m3 = kaldi_native_io.FloatMatrix.read("binary.ark[0:1]") # row 0 and row 1
assert np.array_equal(mat.numpy()[0:2], m3.numpy())
m4 = kaldi_native_io.FloatMatrix.read(
"matrix.txt[:,3:4]"
) # column 3 and column 4
assert np.array_equal(mat.numpy()[:, 3:5], m4.numpy())
os.remove("binary.ark")
os.remove("matrix.txt")
a = np.array([[1, 2], [3, 4]], dtype=np.float32)
b = np.array([[10, 20, 30], [40, 50, 60]], dtype=np.float32)
with kaldi_native_io.FloatMatrixWriter("ark,scp:m.ark,m.scp") as ko:
ko.write("a", a)
ko["b"] = b
"""
m.scp contains:
a m.ark:2
b m.ark:35
"""
m5 = kaldi_native_io.FloatMatrix.read("m.ark:2")
assert np.array_equal(m5.numpy(), a)
m6 = kaldi_native_io.FloatMatrix.read("m.ark:35")
assert np.array_equal(m6.numpy(), b)
os.remove("m.scp")
os.remove("m.ark")
Read and write a single vector
See
- https://github.com/csukuangfj/kaldi_native_io/blob/master/kaldi_native_io/python/tests/test_float_vector_writer_reader.py
- https://github.com/csukuangfj/kaldi_native_io/blob/master/kaldi_native_io/python/tests/test_double_vector_writer_reader.py
def test_read_write_single_vector():
a = np.array([1, 2], dtype=np.float32)
v = kaldi_native_io.FloatVector(a)
v.write(wxfilename="binary.ark", binary=True)
b = kaldi_native_io.FloatVector.read("binary.ark")
assert np.array_equal(a, b.numpy())
a = np.array([1, 2], dtype=np.float32)
b = np.array([10.5], dtype=np.float32)
with kaldi_native_io.FloatVectorWriter("ark,scp:v.ark,v.scp") as ko:
ko.write("a", a)
ko["b"] = b
"""
v.scp contains:
a v.ark:2
b v.ark:22
"""
va = kaldi_native_io.FloatVector.read("v.ark:2")
assert np.array_equal(va.numpy(), a)
vb = kaldi_native_io.FloatVector.read("v.ark:22")
assert np.array_equal(vb.numpy(), b)
os.remove("v.scp")
os.remove("v.ark")
def test_read_write_single_vector():
a = np.array([1, 2], dtype=np.float64)
v = kaldi_native_io.DoubleVector(a)
v.write(wxfilename="binary.ark", binary=True)
b = kaldi_native_io.DoubleVector.read("binary.ark")
assert np.array_equal(a, b.numpy())
os.remove("binary.ark")
a = np.array([1, 2], dtype=np.float64)
b = np.array([10.5], dtype=np.float64)
with kaldi_native_io.DoubleVectorWriter("ark,scp:v.ark,v.scp") as ko:
ko.write("a", a)
ko["b"] = b
"""
v.scp contains:
a v.ark:2
b v.ark:30
"""
va = kaldi_native_io.DoubleVector.read("v.ark:2")
assert np.array_equal(va.numpy(), a)
vb = kaldi_native_io.DoubleVector.read("v.ark:30")
assert np.array_equal(vb.numpy(), b)
os.remove("v.scp")
os.remove("v.ark")
Read a single int32 vector
def test_read_single_item():
a = [10, 20]
b = [100, 200, 300]
# You can also generate a text format by adding ",t" if you like
# with kaldi_native_io.Int32VectorWriter("ark,scp,t:v.ark,v.scp") as ko:
with kaldi_native_io.Int32VectorWriter("ark,scp:v.ark,v.scp") as ko:
ko.write("a", a)
ko["b"] = b
"""
v.scp contains:
a v.ark:2
b v.ark:21
"""
va = kaldi_native_io.read_int32_vector("v.ark:2")
assert va == a
vb = kaldi_native_io.read_int32_vector("v.ark:21")
assert va == b
Read/Write Waves
See
- https://github.com/csukuangfj/kaldi_native_io/blob/master/kaldi_native_io/python/tests/test_wave_reader.py
- https://github.com/csukuangfj/kaldi_native_io/blob/master/kaldi_native_io/python/tests/test_wave_data.py
def test_wave_writer():
file1 = "/ceph-fj/fangjun/open-source-2/kaldi_native_io/build/BAC009S0002W0123.wav"
if not Path(file1).is_file():
return
file2 = "/ceph-fj/fangjun/open-source-2/kaldi_native_io/build/BAC009S0002W0124.wav"
if not Path(file2).is_file():
return
print("-----test_wave_writer------")
file2 = f"cat {file2} |"
wave1 = kaldi_native_io.read_wave(file1)
wave2 = kaldi_native_io.read_wave(file2)
wspecifier = "ark,scp:wave.ark,wave.scp"
with kaldi_native_io.WaveWriter(wspecifier) as ko:
ko.write("a", wave1)
ko["b"] = wave2
"""
wave.scp has the following content:
a wave.ark:2
b wave.ark:123728
"""
wave3 = kaldi_native_io.read_wave("wave.ark:2")
wave4 = kaldi_native_io.read_wave("wave.ark:123728")
assert wave1.sample_freq == wave3.sample_freq
assert wave2.sample_freq == wave4.sample_freq
assert np.array_equal(wave1.data.numpy(), wave3.data.numpy())
assert np.array_equal(wave2.data.numpy(), wave4.data.numpy())
Read/Write Python's bytes
See
base = "blob"
wspecifier = f"ark,scp:{base}.ark,{base}.scp"
rspecifier = f"scp:{base}.scp"
def test_blob_writer():
with kaldi_native_io.BlobWriter(wspecifier) as ko:
ko.write("a", bytes([0x30, 0x31]))
ko["b"] = b"1234"
def test_sequential_blob_reader():
with kaldi_native_io.SequentialBlobReader(rspecifier) as ki:
for key, value in ki:
if key == "a":
assert value == bytes([0x30, 0x31])
elif key == "b":
assert value == b"1234"
else:
raise ValueError(f"Unknown key {key} with value {value}")
def test_read_single_item():
a = bytes([10, 20])
b = b"1234"
with kaldi_native_io.BlobWriter("ark,scp:b.ark,b.scp") as ko:
ko.write("a", a)
ko["b"] = b
"""
b.scp contains:
a b.ark:2
b b.ark:20
"""
va = kaldi_native_io.read_blob("b.ark:2")
assert va == a, (va, a)
vb = kaldi_native_io.read_blob("b.ark:20")
assert vb == b, (vb, b)
os.remove("b.scp")
os.remove("b.ark")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for kaldi_native_io-1.20-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6a9b6b4d8572565c59d6b0275da0d58e8f402f92f56c27da21b640a971598631 |
|
MD5 | 3bf723459882bf5013c0cc1e7094ff6b |
|
BLAKE2b-256 | 5fc79de593972ca0481c3ace522f09864be6da8bafa471f7099c001c116a3e01 |
Hashes for kaldi_native_io-1.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcd81d5dde244b6a64ba764086c498e94a930358267b87cece7a732070f5d9ed |
|
MD5 | b7c4787199459e50cc34a82a32fdeb05 |
|
BLAKE2b-256 | 6234b155bd32dba232d90e2ad90cfb8826b366e4807089d069fc61545fcba3e6 |
Hashes for kaldi_native_io-1.20-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 28dc009bf322a8874cbfd3126d4ee22389cb58538a5e3047a1f6dc1e04820b6a |
|
MD5 | 8e4b9202323db87a60c677d135dd9580 |
|
BLAKE2b-256 | c58e6c1f3d11c9d83a6e8ebcd727be4cdf98ad504d1eac1d300e5ba9fe4f5fb9 |
Hashes for kaldi_native_io-1.20-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b2d1519189aca401ba8cf42dc092e78664e55b38479a3c5eb6581a798a746b9 |
|
MD5 | 37b019cf0e838fc1ac9e6dd3fa194e77 |
|
BLAKE2b-256 | fa5d6cea5c24dbdd86df8e318bd3df7dc6af5a4ba5f3ce2a529d12cd516419bc |
Hashes for kaldi_native_io-1.20-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72ff5b473a497525f6399b8d539d03af383aeef54cf197b80c3498583abd389d |
|
MD5 | dea6ded116206f1a5eb84c8dd24de63a |
|
BLAKE2b-256 | ff26b8afbb8e899820a66fc69ac6f23ae4568699a144bf87dfbe493fa83125a0 |
Hashes for kaldi_native_io-1.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d71bc536e615af5887d4eb2576854fe4be992645504f68a524ecc00d817f74e9 |
|
MD5 | a4ea625fae9c71962d8abb1fcb23f8dd |
|
BLAKE2b-256 | 259d92b05f0a508cb4329a06286d83bccbd7a8efbcf01415b8b370463572fca5 |
Hashes for kaldi_native_io-1.20-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | efd2dcd9ec6c4b3ea70f3348d7aec3c6a7af10e1dcfdde0b55d65611f109e964 |
|
MD5 | 1900563801c5aee8cc2372788f7a68d4 |
|
BLAKE2b-256 | 7060f6b366ef5591915252114a1ad8a9dbae903f09f97e569b277e63eab43671 |
Hashes for kaldi_native_io-1.20-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f895d3e790b0c131f687a153682337efaf4927a938e197873f21db498b8b9130 |
|
MD5 | 77ff25957369caed189d146b83203b8e |
|
BLAKE2b-256 | 12f8057ab450cfd9d473d340a721ce6777ae6030f07b3e8b5bff5fc23e83eb91 |
Hashes for kaldi_native_io-1.20-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 151ca8c614eb151e891b3a86448ac6f797b457c7f469d53a6bc5f04875ac8e93 |
|
MD5 | de248c3bc5a1193b0221d36b44aa8afd |
|
BLAKE2b-256 | bc0e862135f847d807ddfff483258683804e68184907cd68a4b1c36239dd85f7 |
Hashes for kaldi_native_io-1.20-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79032b3df9766b9ae5ec11e149769f88e9bac6da569e882a90e9db16bfed94f1 |
|
MD5 | 0a18a947b69888f8bb8e31f5baa8ee4d |
|
BLAKE2b-256 | 738b486abad1e0cd7856f082baccf33cc4df577f766f97344a9bb18a254faf03 |
Hashes for kaldi_native_io-1.20-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a3027e36fe9da78c11f6f64d02f53df34cdc96c6292412e3ac3551f0e1e48623 |
|
MD5 | ca87af27c429297ff027a54f5b29ffad |
|
BLAKE2b-256 | e04059a193d9486f405bba12579c3d4536e7e3836d9260b586143a3c2d47fa1d |
Hashes for kaldi_native_io-1.20-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7994769ce6fdfb1e10bee62435fdec552509a68e4f1dda761680cb965b11071f |
|
MD5 | 4914db99b6e65d59f6e718261b6fc95b |
|
BLAKE2b-256 | 317346339a0d1a3dac08b8572519f70c743721e4903805330bb8770fbd64f95d |
Hashes for kaldi_native_io-1.20-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f82055f971267fa028f5b29bd12e8a0287ddb2b148b26a9937b06dd62b12bf5f |
|
MD5 | 7972d9c194e17d0fe734d122ca8b2516 |
|
BLAKE2b-256 | 2fe6d3c2f66061f34add98d3c399c4eb572972b3bda263b1d39c0c44bca01833 |
Hashes for kaldi_native_io-1.20-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a88ec609383344833b67d05c0a3358c7b7977904da92abceff4f9bea3f5bbb85 |
|
MD5 | 3701ba7084dbba6e70ba897d48e68665 |
|
BLAKE2b-256 | 491d149b0b57c772429a39973fa7e34a21a9b39f005c18cb2c7d7cc7dcafbe1f |
Hashes for kaldi_native_io-1.20-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d70ae94cf01ebb13beadbedb2668418a4f4eefcb6c11e6f0160da464b922fb2 |
|
MD5 | ecb468045b255e941cb005bf4599f01c |
|
BLAKE2b-256 | 0794775a8cd12508061ef76e1d996949fd008d6feb01d00ec7bc2f5e75cd994b |
Hashes for kaldi_native_io-1.20-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c568db06e9666432fa05f5db9992b77b3f20d0947838c7d44a9e2d16abbe793b |
|
MD5 | 6d4852e1d9a451bb15246473c5214448 |
|
BLAKE2b-256 | 2c0c340af24810e70bc8225fa7b497b226fbc9c7d3b5f08eefcac44ecd38c8f0 |
Hashes for kaldi_native_io-1.20-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c296f1a0511bba01859d9d97eb4fd30c756641407a4f905090a400fb0e3a6b2 |
|
MD5 | 45e6aa4801b22cc15038094bf05542aa |
|
BLAKE2b-256 | c1ae5eb6e09717febfc0db49a150c1a190a5f7f5df4a272eb469c7d1d93591aa |
Hashes for kaldi_native_io-1.20-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 264ee6503a6c47e994cd13d3f652c11947089c3e05e69ce6ac3f60e7c59c5a68 |
|
MD5 | 02b313b6bd72c991d28da18e793681a1 |
|
BLAKE2b-256 | 285cfc1fc7052af6c75a353eb5db97ad2bc45538a350a179bb0960d5c71c718c |
Hashes for kaldi_native_io-1.20-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d0d617e7d52c3e49dfa1e6928cc0c68d59200e22d22dc033eb4ad3b9cbf9c4f |
|
MD5 | 7aec14fc037b94e32945d6732302e107 |
|
BLAKE2b-256 | dae1209f9b4e7b8d7f1dce7791dd1d62ebcea592b4959d6187dcff6feaf17c19 |
Hashes for kaldi_native_io-1.20-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 196c3fa27ceb65045b84d5fed9473db2f0d15a5d3bbd481e185c3444778cc9fc |
|
MD5 | b89030a956007d2bca2d4a336d54fa70 |
|
BLAKE2b-256 | 922df107d4fc76c0e3be9810f65ce271a88feb201fb326a2ae7f8b82cb8aa253 |
Hashes for kaldi_native_io-1.20-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da1ef6e4742b8a82b440fb421fa26423aac6c2471b72e27e65416fbf88bc8ac3 |
|
MD5 | 18b265eaeffc7b3462f9aa5340eb95b9 |
|
BLAKE2b-256 | 20e498ea74f4b235a6e850a5dfb86336ca4b5844e056d5665b6442b8df6b33a1 |
Hashes for kaldi_native_io-1.20-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b7bb4ec64b958cd1da08c299842a89f0b1cc8e873c270659fca9a123562c024 |
|
MD5 | 008e8a0ffae26c14a2406a5a1863ae97 |
|
BLAKE2b-256 | 0308d4aa8d050100edbf302e140a1b702a81691bf40c91e96c0adf1cacbc836e |
Hashes for kaldi_native_io-1.20-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50d4f69a1737ac069bf63f8e0131aa2abd609ca7319549f48dfa7f3829bb00d6 |
|
MD5 | bae5bc333072104e6512e03bdefb8bf9 |
|
BLAKE2b-256 | 7d2058e84bc08142954e247973f87b08f561b8347f1e1535f58b7ce80c00d238 |
Hashes for kaldi_native_io-1.20-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1cbdf70511ddc2a5cbc81614eefc17d231c5b8da89faf2e853e0810267208b30 |
|
MD5 | 80135347f80d423adb11e04c03c60bf2 |
|
BLAKE2b-256 | 5d732ef08b31f00febb48eb3518ed686668e997c83368acc161949c55136c7ba |