From 2f84e5548516cd754fb142ff93f37b4e37c82ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Fri, 25 Oct 2019 16:46:34 +0200 Subject: [PATCH 01/25] write wavs as 16bit int instead of 32bit float --- generate_audio.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_audio.sh b/generate_audio.sh index a745dc2..a7b2aa4 100644 --- a/generate_audio.sh +++ b/generate_audio.sh @@ -7,7 +7,7 @@ DIR=AUDIO for k in $(seq -f "%02g" 1 10 151); do mkdir $DIR/$k for i in $(seq 1 $NBFILES); do - sox -n -r 44100 $DIR/$k/$i.wav synth "0:$k" whitenoise vol 0.5 fade q 1 "0:$k" 1 + sox -n -r 44100 -b 16 $DIR/$k/$i.wav synth "0:$k" whitenoise vol 0.5 fade q 1 "0:$k" 1 ffmpeg -i $DIR/$k/$i.wav -strict -2 $DIR/$k/$i.mp4 ffmpeg -i $DIR/$k/$i.wav $DIR/$k/$i.mp3 ffmpeg -i $DIR/$k/$i.wav $DIR/$k/$i.flac From 5dc5131275edf96254ff76cc0c0d86910a2bf7e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Fri, 25 Oct 2019 16:46:54 +0200 Subject: [PATCH 02/25] update requirements for newer version --- Dockerfile | 5 +---- requirements.txt | 13 +++++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3d80231..0efe8fa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,7 +47,4 @@ WORKDIR /app # install requirements, starting with pycairo because it fails in a different order RUN pip install pycairo -RUN pip install --requirement /app/requirements.txt - -# install torchaudio from source -RUN git clone https://github.com/pytorch/audio.git pytorchaudio && cd pytorchaudio && python setup.py install +RUN pip install --requirement /app/requirements.txt \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index f55f72d..4ccc13f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,16 +1,17 @@ scipy==1.2.0 -tensorflow==1.13.1 -audioread==2.1.6 -librosa==0.6.2 +tensorflow==2.0.0 +audioread==2.1.8 +librosa==0.7.1 SoundFile==0.10.2 -torch==1.0.1 +torch==1.3.0 pydub==0.23.1 sox==1.3.7 PyGObject==3.30.4 +torchaudio==0.3.1 +aubio==0.4.9 seaborn pandas ipython torchvision pymad -cffi -aubio==0.4.9 \ No newline at end of file +cffi \ No newline at end of file From b2155e2eeeb05d51be71ee8f2ab57052be2724cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Fri, 25 Oct 2019 17:31:14 +0200 Subject: [PATCH 03/25] update to tf2 and librosa 0.7.1 --- AUDIO/.gitkeep | 0 benchmark_pytorch.py | 7 +++---- benchmark_tf.py | 30 ++++++++++++++---------------- loaders.py | 12 +++--------- requirements.txt | 7 ++++--- 5 files changed, 24 insertions(+), 32 deletions(-) delete mode 100644 AUDIO/.gitkeep diff --git a/AUDIO/.gitkeep b/AUDIO/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/benchmark_pytorch.py b/benchmark_pytorch.py index 23f8fd1..d71cb57 100644 --- a/benchmark_pytorch.py +++ b/benchmark_pytorch.py @@ -68,8 +68,8 @@ def __len__(self): 'ar_mad', 'aubio', 'pydub', - 'soundfile', - 'librosa', + 'soundfile', + 'librosa', 'scipy', 'scipy_mmap', ] @@ -85,7 +85,7 @@ def __len__(self): duration = int(audio_dir) data = torch.utils.data.DataLoader( AudioFolder( - os.path.join(root, audio_dir), + os.path.join(root, audio_dir), lib='load_' + lib, extension=args.ext ), @@ -108,5 +108,4 @@ def __len__(self): except: continue - store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("pytorch", args.ext)) \ No newline at end of file diff --git a/benchmark_tf.py b/benchmark_tf.py index c942e2e..9c3195e 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -26,7 +26,7 @@ def get_files(dir, extension): def _make_py_loader_function(func): def _py_loader_function(fp): - return func(fp.decode()) + return func(fp.numpy().decode()) return _py_loader_function @@ -55,7 +55,7 @@ def _py_loader_function(fp): 'librosa', 'scipy', 'scipy_mmap', - 'tf_decode' + 'tf_decode_wav' ] for lib in libs: @@ -67,31 +67,30 @@ def _py_loader_function(fp): audio_files = get_files(dir=os.path.join(root, audio_dir), extension=args.ext) dataset = tf.data.Dataset.from_tensor_slices(audio_files) - if lib == "tf_decode": - dataset = dataset.map(lambda x: loaders.load_tf_decode(x, args.ext)) + if lib == "tf_decode_wav": + dataset = dataset.map( + lambda x: loaders.load_tf_decode_wav(x, args.ext), + num_parallel_calls=1 + ) else: loader_function = getattr(loaders, 'load_' + lib) dataset = dataset.map( - lambda filename: tf.py_func( + lambda filename: tf.py_function( _make_py_loader_function(loader_function), [filename], [tf.float32] - ) + ), + num_parallel_calls=1 ) dataset = dataset.batch(1) start = time.time() - iterator = dataset.make_one_shot_iterator() - next_audio = iterator.get_next() - with tf.Session() as sess: - for i in range(len(audio_files)): - try: - value = sess.run(tf.reduce_max(next_audio)) - except tf.errors.OutOfRangeError: - break + + for audio in dataset: + value = tf.reduce_max(audio) end = time.time() - + store.append( ext=args.ext, lib=lib, @@ -102,4 +101,3 @@ def _py_loader_function(fp): continue store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("tf", args.ext)) - diff --git a/loaders.py b/loaders.py index cf54fb6..79e8e1d 100644 --- a/loaders.py +++ b/loaders.py @@ -19,15 +19,9 @@ """ -def load_tf_decode(fp, ext="wav", rate=44100): - audio_binary = tf.read_file(fp) - audio_decoded = tf.contrib.ffmpeg.decode_audio( - audio_binary, - file_format=ext, - samples_per_second=rate, - channel_count=1 - ) - return tf.cast(audio_decoded, tf.float32) +def load_tf_decode_wav(fp, ext="wav", rate=44100): + audio, rate = tf.audio.decode_wav(tf.io.read_file(fp)) + return tf.cast(audio, tf.float32) def load_aubio(fp): diff --git a/requirements.txt b/requirements.txt index 4ccc13f..b7c3ddf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -scipy==1.2.0 +scipy==1.3.1 tensorflow==2.0.0 audioread==2.1.8 librosa==0.7.1 @@ -6,12 +6,13 @@ SoundFile==0.10.2 torch==1.3.0 pydub==0.23.1 sox==1.3.7 -PyGObject==3.30.4 torchaudio==0.3.1 aubio==0.4.9 +tensorflow_io==0.9.0 +PyGObject seaborn pandas ipython torchvision pymad -cffi \ No newline at end of file +cffi From e162cff607aa6d7b4aef988b14813dd4c3f5a286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Mon, 28 Oct 2019 14:36:07 +0100 Subject: [PATCH 04/25] first draft for tfio --- README.md | 9 +++--- benchmark_tf.py | 85 +++++++++++++++++++++++++++---------------------- loaders.py | 7 +++- 3 files changed, 57 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 84ba28b..2cc3274 100644 --- a/README.md +++ b/README.md @@ -10,21 +10,20 @@ This is relevant for machine learning models that today often process raw (time |-------------------------|---------|-----------------------|-------------------|-------------------| -----------------| | [scipy.io.wavfile](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html#scipy.io.wavfile.read) | 0.14.0 | [`scipy`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L55) | Numpy | PCM (only 16 bit) | ❌ | | [scipy.io.wavfile memmap](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html#scipy.io.wavfile.read) | 0.14.0 | [`scipy_mmap`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L61) | Numpy | PCM (only 16 bit) | ✅ | -| [soundfile](https://pysoundfile.readthedocs.io/en/0.9.0/) ([libsndfile](http://www.mega-nerd.com/libsndfile/)) | 0.9.0 | [`soundfile`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L50) | Numpy | PCM, Ogg, Flac | ✅ | +| [soundfile](https://pysoundfile.readthedocs.io/en/0.9.0/) ([libsndfile](http://www.mega-nerd.com/libsndfile/)) | 0.9.0 | [`soundfile`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L50) | Numpy | PCM, Ogg, Flac | ✅ | | [pydub](https://github.com/jiaaro/pydub) | 0.23.1 | [`pydub`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L97) | Python Array | PCM, MP3, OGG or other FFMPEG/libav supported codec | ❌ | | [aubio](https://github.com/aubio/aubio) | 0.4.9 | [`aubio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L32) | Numpy Array | PCM, MP3, OGG or other avconv supported code | ✅ | | [audioread](https://github.com/beetbox/audioread) ([libmad](https://www.underbit.com/products/mad/)) | 2.1.6 | [`ar_mad`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L77) | Numpy Array | FFMPEG | ❌ | -| [audioread](https://github.com/beetbox/audioread) ([gstreamer](https://gstreamer.freedesktop.org/)) |2.1.6 | [`ar_gstreamer`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L67) |2.1.6 | Numpy Array | all of FFMPEG | ❌ | +| [audioread](https://github.com/beetbox/audioread) ([gstreamer](https://gstreamer.freedesktop.org/)) |2.1.6 | [`ar_gstreamer`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L67) | Numpy Array | all of FFMPEG | ❌ | | [audioread](https://github.com/beetbox/audioread) ([FFMPEG](https://www.ffmpeg.org/)) | 2.1.6 | [`ar_ffmpeg`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L87) | Numpy Array | all of FFMPEG | ❌ | | [librosa](https://librosa.github.io/) | 0.6.2 | [`librosa`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L104) | Numpy Array | relies on audioread | ✅ | -| [tensorflow 1.13 `contrib.ffmpeg`](https://www.tensorflow.org/api_docs/python/tf/contrib/ffmpeg/decode_audio) | 1.13 | [`tf_decode`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L21) | Tensorflow Tensor | All codecs supported by FFMPEG | ❌ | -| [torchaudio](https://github.com/pytorch/audio) | 0.3.0 | [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | +| [tensorflow `tf.io.audio.decode_wav`](https://www.tensorflow.org/api_docs/python/tf/contrib/ffmpeg/decode_audio) | 2.0 | [`tf_decode_wav`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM (only 16 bit) | ❌ | +| [torchaudio](https://github.com/pytorch/audio) | 0.3.1 | [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | ### Not tested * __[audioread (coreaudio)](https://github.com/beetbox/audioread/blob/master/audioread/macca.py)__: only available on macOS. * __[madmom](https://github.com/CPJKU/madmom):__ same ffmpeg interface as `ar_ffmpeg`. -* __[tensorflow 2 `decode_wav`](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/audio/decode_wav):__ Not released yet. * __[python builtin `wave`](https://docs.python.org/3.7/library/wave.html)__: TODO ## Results diff --git a/benchmark_tf.py b/benchmark_tf.py index 9c3195e..63b76f0 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -32,7 +32,9 @@ def _py_loader_function(fp): if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Benchmark audio loading in tensorflow') + parser = argparse.ArgumentParser( + description='Benchmark audio loading in tensorflow' + ) parser.add_argument('--ext', type=str, default="wav") args = parser.parse_args() @@ -55,49 +57,56 @@ def _py_loader_function(fp): 'librosa', 'scipy', 'scipy_mmap', - 'tf_decode_wav' + 'tf_decode_wav', + 'tfio_fromaudio' ] for lib in libs: print("Testing: %s" % lib) for root, dirs, fnames in sorted(os.walk('AUDIO')): for audio_dir in dirs: - try: - duration = int(audio_dir) - audio_files = get_files(dir=os.path.join(root, audio_dir), extension=args.ext) - - dataset = tf.data.Dataset.from_tensor_slices(audio_files) - if lib == "tf_decode_wav": - dataset = dataset.map( - lambda x: loaders.load_tf_decode_wav(x, args.ext), - num_parallel_calls=1 - ) - else: - loader_function = getattr(loaders, 'load_' + lib) - dataset = dataset.map( - lambda filename: tf.py_function( - _make_py_loader_function(loader_function), - [filename], - [tf.float32] - ), - num_parallel_calls=1 - ) - - dataset = dataset.batch(1) - start = time.time() - - for audio in dataset: - value = tf.reduce_max(audio) - - end = time.time() - - store.append( - ext=args.ext, - lib=lib, - duration=duration, - time=float(end-start) / len(audio_files), + duration = int(audio_dir) + audio_files = get_files( + dir=os.path.join(root, audio_dir), + extension=args.ext + ) + + dataset = tf.data.Dataset.from_tensor_slices(audio_files) + if lib == "tf_decode_wav": + dataset = dataset.map( + lambda x: loaders.load_tf_decode_wav(x, args.ext), + num_parallel_calls=1 ) - except: - continue + elif lib == "tfio_fromaudio": + dataset = dataset.map( + lambda x: loaders.load_tfio_fromaudio(x), + num_parallel_calls=1 + ) + else: + loader_function = getattr(loaders, 'load_' + lib) + dataset = dataset.map( + lambda filename: tf.py_function( + _make_py_loader_function(loader_function), + [filename], + [tf.float32] + ), + num_parallel_calls=1 + ) + + dataset = dataset.batch(1) + start = time.time() + + for audio in dataset: + value = tf.reduce_max(audio) + tf.print(value) + + end = time.time() + + store.append( + ext=args.ext, + lib=lib, + duration=duration, + time=float(end-start) / len(audio_files), + ) store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("tf", args.ext)) diff --git a/loaders.py b/loaders.py index 79e8e1d..bb0c2c0 100644 --- a/loaders.py +++ b/loaders.py @@ -1,6 +1,6 @@ from scipy.io import wavfile import audioread.rawread -import audioread.gstdec +# import audioread.gstdec import audioread.maddec import audioread.ffdec import matplotlib.pyplot as plt @@ -10,6 +10,7 @@ import torchaudio import numpy as np import tensorflow as tf +import tensorflow_io as tfio import librosa import sox @@ -19,6 +20,10 @@ """ +def load_tfio_fromaudio(fp): + return tfio.IOTensor.from_audio(fp) + + def load_tf_decode_wav(fp, ext="wav", rate=44100): audio, rate = tf.audio.decode_wav(tf.io.read_file(fp)) return tf.cast(audio, tf.float32) From fe4df4f76291d7215c828e9b0cdf8a01a1a4464b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Sun, 17 Nov 2019 22:47:59 +0100 Subject: [PATCH 05/25] add working tfio loader --- benchmark_tf.py | 7 +------ loaders.py | 4 +++- requirements.txt | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/benchmark_tf.py b/benchmark_tf.py index 63b76f0..6fd907a 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -72,16 +72,11 @@ def _py_loader_function(fp): ) dataset = tf.data.Dataset.from_tensor_slices(audio_files) - if lib == "tf_decode_wav": + if lib in ["tf_decode_wav", "tfio_fromaudio"]: dataset = dataset.map( lambda x: loaders.load_tf_decode_wav(x, args.ext), num_parallel_calls=1 ) - elif lib == "tfio_fromaudio": - dataset = dataset.map( - lambda x: loaders.load_tfio_fromaudio(x), - num_parallel_calls=1 - ) else: loader_function = getattr(loaders, 'load_' + lib) dataset = dataset.map( diff --git a/loaders.py b/loaders.py index bb0c2c0..bcf9d19 100644 --- a/loaders.py +++ b/loaders.py @@ -20,8 +20,10 @@ """ +@tf.function def load_tfio_fromaudio(fp): - return tfio.IOTensor.from_audio(fp) + audio = tfio.IOTensor.graph(tf.int16).from_audio(fp) + return tf.cast(audio.to_tensor(), tf.float32) / 32767.0 def load_tf_decode_wav(fp, ext="wav", rate=44100): diff --git a/requirements.txt b/requirements.txt index b7c3ddf..f89852b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ pydub==0.23.1 sox==1.3.7 torchaudio==0.3.1 aubio==0.4.9 -tensorflow_io==0.9.0 +tensorflow_io==0.10.0 PyGObject seaborn pandas From b74f46120615db1fd9fffd192832a5a691bedd33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Mon, 18 Nov 2019 16:21:30 +0100 Subject: [PATCH 06/25] add tfio nightly --- benchmark_tf.py | 1 + requirements.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmark_tf.py b/benchmark_tf.py index 6fd907a..bd5495d 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -88,6 +88,7 @@ def _py_loader_function(fp): num_parallel_calls=1 ) + dataset = dataset.apply(tf.data.experimental.ignore_errors()) dataset = dataset.batch(1) start = time.time() diff --git a/requirements.txt b/requirements.txt index f89852b..811a2ec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ pydub==0.23.1 sox==1.3.7 torchaudio==0.3.1 aubio==0.4.9 -tensorflow_io==0.10.0 +tensorflow_io_nightly==0.10.0.dev2227 PyGObject seaborn pandas From b4be19c62d553ae69fb122e14837b57b9485b868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Fri, 6 Dec 2019 17:28:49 +0100 Subject: [PATCH 07/25] update tensorflow benchmark to reflect 2.1/tfio --- benchmark_tf.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/benchmark_tf.py b/benchmark_tf.py index bd5495d..c009d41 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -72,9 +72,14 @@ def _py_loader_function(fp): ) dataset = tf.data.Dataset.from_tensor_slices(audio_files) - if lib in ["tf_decode_wav", "tfio_fromaudio"]: + if lib in ["tf_decode_wav"]: dataset = dataset.map( - lambda x: loaders.load_tf_decode_wav(x, args.ext), + lambda x: loaders.load_tf_decode_wav(x), + num_parallel_calls=1 + ) + elif lib in ["tfio_fromaudio"]: + dataset = dataset.map( + lambda x: loaders.load_tfio_fromaudio(x), num_parallel_calls=1 ) else: From 0c9a78a91c9542d1df238e1cde474126d888ec17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 15:48:28 +0100 Subject: [PATCH 08/25] update to tf2.1 and tfio 0.11 --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 811a2ec..98575d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -scipy==1.3.1 -tensorflow==2.0.0 +scipy==1.4.1 +tensorflow==2.1.0 audioread==2.1.8 librosa==0.7.1 SoundFile==0.10.2 @@ -8,7 +8,7 @@ pydub==0.23.1 sox==1.3.7 torchaudio==0.3.1 aubio==0.4.9 -tensorflow_io_nightly==0.10.0.dev2227 +tensorflow_io==0.11.0 PyGObject seaborn pandas From e94353544e3871b78135da5e0594d247553e16e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 17:06:29 +0100 Subject: [PATCH 09/25] update loaders --- README.md | 8 +++++++- benchmark_metadata.py | 1 - benchmark_np.py | 16 +++++++--------- benchmark_pytorch.py | 1 - benchmark_tf.py | 12 ++++++++---- loaders.py | 12 +++++++++--- plot.py | 13 +++++++------ requirements.txt | 2 +- 8 files changed, 39 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 2cc3274..b3fb047 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,13 @@ Build the docker container using docker build -t audio_benchmark . ``` It installs all the package requirements for all audio libraries. -Afterwards, mount the data directory into the docker container. +Afterwards, mount the data directory into the docker container and run `run.sh` inside the +container, e.g.: + +```bash +docker run -v /home/user/repos/python_audio_loading_benchmark/:/app \ + -it audio_benchmark:latest /bin/bash run.sh +``` ### Setting up in a virtual environment diff --git a/benchmark_metadata.py b/benchmark_metadata.py index 7b43f6d..c42c1c7 100644 --- a/benchmark_metadata.py +++ b/benchmark_metadata.py @@ -61,7 +61,6 @@ def __len__(self): 'soundfile', 'sox', 'audioread', - # 'pydub', # too slow ] for lib in libs: diff --git a/benchmark_np.py b/benchmark_np.py index 53a2ff5..9b0a82e 100644 --- a/benchmark_np.py +++ b/benchmark_np.py @@ -43,7 +43,7 @@ def __len__(self): if __name__ == "__main__": - + parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--ext', type=str, default="wav") args = parser.parse_args() @@ -62,11 +62,10 @@ def __len__(self): libs = [ 'ar_gstreamer', 'ar_ffmpeg', - 'ar_mad', 'aubio', 'pydub', - 'soundfile', - 'librosa', + 'soundfile', + 'librosa', 'scipy', 'scipy_mmap' ] @@ -78,12 +77,11 @@ def __len__(self): try: duration = int(audio_dir) dataset = AudioFolder( - os.path.join(root, audio_dir), - lib='load_' + lib, - extension=args.ext + os.path.join(root, audio_dir), + lib='load_' + lib, + extension=args.ext ) - - + start = time.time() for fp in dataset.audio_files: diff --git a/benchmark_pytorch.py b/benchmark_pytorch.py index d71cb57..42052e0 100644 --- a/benchmark_pytorch.py +++ b/benchmark_pytorch.py @@ -65,7 +65,6 @@ def __len__(self): libs = [ 'ar_gstreamer', 'ar_ffmpeg', - 'ar_mad', 'aubio', 'pydub', 'soundfile', diff --git a/benchmark_tf.py b/benchmark_tf.py index c009d41..72d0f6c 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -50,7 +50,6 @@ def _py_loader_function(fp): libs = [ 'ar_gstreamer', 'ar_ffmpeg', - 'ar_mad', 'aubio', 'pydub', 'soundfile', @@ -58,7 +57,7 @@ def _py_loader_function(fp): 'scipy', 'scipy_mmap', 'tf_decode_wav', - 'tfio_fromaudio' + 'tfio_fromaudio', ] for lib in libs: @@ -82,6 +81,11 @@ def _py_loader_function(fp): lambda x: loaders.load_tfio_fromaudio(x), num_parallel_calls=1 ) + elif lib in ["tfio_fromffmpeg"]: + dataset = dataset.map( + lambda x: loaders.load_tfio_fromffmpeg(x), + num_parallel_calls=1 + ) else: loader_function = getattr(loaders, 'load_' + lib) dataset = dataset.map( @@ -90,11 +94,11 @@ def _py_loader_function(fp): [filename], [tf.float32] ), - num_parallel_calls=1 + num_parallel_calls=4 ) dataset = dataset.apply(tf.data.experimental.ignore_errors()) - dataset = dataset.batch(1) + # dataset = dataset.batch(4) start = time.time() for audio in dataset: diff --git a/loaders.py b/loaders.py index bcf9d19..9a9c269 100644 --- a/loaders.py +++ b/loaders.py @@ -1,6 +1,6 @@ from scipy.io import wavfile import audioread.rawread -# import audioread.gstdec +import audioread.gstdec import audioread.maddec import audioread.ffdec import matplotlib.pyplot as plt @@ -20,12 +20,20 @@ """ +@tf.function +def load_tfio_fromffmpeg(fp): + # not supported yet + audio = tfio.IOTensor.graph(tf.int16).from_ffmpeg(fp) + return tf.cast(audio.to_tensor(), tf.float32) / 32767.0 + + @tf.function def load_tfio_fromaudio(fp): audio = tfio.IOTensor.graph(tf.int16).from_audio(fp) return tf.cast(audio.to_tensor(), tf.float32) / 32767.0 +@tf.function def load_tf_decode_wav(fp, ext="wav", rate=44100): audio, rate = tf.audio.decode_wav(tf.io.read_file(fp)) return tf.cast(audio, tf.float32) @@ -104,8 +112,6 @@ def load_pydub(fp): def load_librosa(fp): - """Librosa audio loading is using - """ # loading with `sr=None` is disabling the internal resampling sig, rate = librosa.load(fp, sr=None) return sig diff --git a/plot.py b/plot.py index 02e1418..dcfe71b 100644 --- a/plot.py +++ b/plot.py @@ -6,7 +6,9 @@ for package in ['pytorch', 'tf', 'np', 'metadata']: dfs = [] for ext in ["wav", "mp3", "mp4", "ogg", "flac"]: - dfs.append(pd.read_pickle("results/benchmark_%s_%s.pickle" % (package, ext))) + dfs.append( + pd.read_pickle("results/benchmark_%s_%s.pickle" % (package, ext)) + ) df = pd.concat(dfs, ignore_index=True) @@ -19,17 +21,16 @@ fig = plt.figure() g = sns.catplot( - x="time", - y="lib", + x="time", + y="lib", kind='bar', - hue='ext', + hue='ext', order=ordered_libs, data=df, - height=6.6, + height=6.6, aspect=1, legend=False ) g.despine(left=True) plt.legend(loc='upper right') g.savefig("results/benchmark_%s.png" % package) - diff --git a/requirements.txt b/requirements.txt index 98575d2..84bbc4e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ scipy==1.4.1 tensorflow==2.1.0 audioread==2.1.8 -librosa==0.7.1 +librosa==0.7.2 SoundFile==0.10.2 torch==1.3.0 pydub==0.23.1 From 312116b221d9b8cf4157341c8b11acceeb0a45ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 17:07:36 +0100 Subject: [PATCH 10/25] remove lib_mad since it is slow and only reads mp3 --- Dockerfile | 2 -- README.md | 1 - requirements.txt | 1 - 3 files changed, 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0efe8fa..81d39d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,8 +34,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libavutil-dev \ libswresample-dev \ libfftw3-dev \ - libmad0 \ - libmad0-dev \ python-gst-1.0 \ python3-gst-1.0 \ libsndfile1 &&\ diff --git a/README.md b/README.md index b3fb047..a4aa518 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ This is relevant for machine learning models that today often process raw (time | [soundfile](https://pysoundfile.readthedocs.io/en/0.9.0/) ([libsndfile](http://www.mega-nerd.com/libsndfile/)) | 0.9.0 | [`soundfile`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L50) | Numpy | PCM, Ogg, Flac | ✅ | | [pydub](https://github.com/jiaaro/pydub) | 0.23.1 | [`pydub`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L97) | Python Array | PCM, MP3, OGG or other FFMPEG/libav supported codec | ❌ | | [aubio](https://github.com/aubio/aubio) | 0.4.9 | [`aubio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L32) | Numpy Array | PCM, MP3, OGG or other avconv supported code | ✅ | -| [audioread](https://github.com/beetbox/audioread) ([libmad](https://www.underbit.com/products/mad/)) | 2.1.6 | [`ar_mad`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L77) | Numpy Array | FFMPEG | ❌ | | [audioread](https://github.com/beetbox/audioread) ([gstreamer](https://gstreamer.freedesktop.org/)) |2.1.6 | [`ar_gstreamer`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L67) | Numpy Array | all of FFMPEG | ❌ | | [audioread](https://github.com/beetbox/audioread) ([FFMPEG](https://www.ffmpeg.org/)) | 2.1.6 | [`ar_ffmpeg`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L87) | Numpy Array | all of FFMPEG | ❌ | | [librosa](https://librosa.github.io/) | 0.6.2 | [`librosa`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L104) | Numpy Array | relies on audioread | ✅ | diff --git a/requirements.txt b/requirements.txt index 84bbc4e..22571ec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,5 +14,4 @@ seaborn pandas ipython torchvision -pymad cffi From b39094ad18df56f66e00340b1fe83854b88980b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 17:14:12 +0100 Subject: [PATCH 11/25] update torch requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 22571ec..e21173c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,10 +3,10 @@ tensorflow==2.1.0 audioread==2.1.8 librosa==0.7.2 SoundFile==0.10.2 -torch==1.3.0 +torch==1.3.1 pydub==0.23.1 sox==1.3.7 -torchaudio==0.3.1 +torchaudio==0.3.2 aubio==0.4.9 tensorflow_io==0.11.0 PyGObject From 09b93e8c7ad6d40f8bc73542300fc9e9a17e58ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 17:38:43 +0100 Subject: [PATCH 12/25] remove mad --- loaders.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/loaders.py b/loaders.py index 9a9c269..7ed73ca 100644 --- a/loaders.py +++ b/loaders.py @@ -1,7 +1,6 @@ from scipy.io import wavfile import audioread.rawread import audioread.gstdec -import audioread.maddec import audioread.ffdec import matplotlib.pyplot as plt import soundfile as sf @@ -84,16 +83,6 @@ def load_ar_gstreamer(fp): return sig -def load_ar_mad(fp): - with audioread.maddec.MadAudioFile(fp) as f: - total_frames = 0 - for buf in f: - sig = _convert_buffer_to_float(buf) - sig = sig.reshape(f.channels, -1) - total_frames += sig.shape[1] - return sig - - def load_ar_ffmpeg(fp): with audioread.ffdec.FFmpegAudioFile(fp) as f: total_frames = 0 From 14bce1d5781dea7a0b6e17c127626c6cca8cbab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 17:46:11 +0100 Subject: [PATCH 13/25] do not print --- benchmark_tf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmark_tf.py b/benchmark_tf.py index 72d0f6c..ffc1339 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -103,7 +103,6 @@ def _py_loader_function(fp): for audio in dataset: value = tf.reduce_max(audio) - tf.print(value) end = time.time() From ee348fff58444a0843d3ba505943402798f30f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 15 Jan 2020 17:54:45 +0100 Subject: [PATCH 14/25] libraries not included --- README.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index a4aa518..37b34f1 100644 --- a/README.md +++ b/README.md @@ -8,22 +8,25 @@ This is relevant for machine learning models that today often process raw (time | Library | Version | Short-Name/Code | Out Type | Supported codecs | Excerpts/Seeking | |-------------------------|---------|-----------------------|-------------------|-------------------| -----------------| -| [scipy.io.wavfile](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html#scipy.io.wavfile.read) | 0.14.0 | [`scipy`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L55) | Numpy | PCM (only 16 bit) | ❌ | -| [scipy.io.wavfile memmap](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html#scipy.io.wavfile.read) | 0.14.0 | [`scipy_mmap`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L61) | Numpy | PCM (only 16 bit) | ✅ | +| [scipy.io.wavfile](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html#scipy.io.wavfile.read) | 1.4.1 | [`scipy`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L55) | Numpy | PCM (only 16 bit) | ❌ | +| [scipy.io.wavfile memmap](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html#scipy.io.wavfile.read) | 1.4.1 | [`scipy_mmap`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L61) | Numpy | PCM (only 16 bit) | ✅ | | [soundfile](https://pysoundfile.readthedocs.io/en/0.9.0/) ([libsndfile](http://www.mega-nerd.com/libsndfile/)) | 0.9.0 | [`soundfile`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L50) | Numpy | PCM, Ogg, Flac | ✅ | | [pydub](https://github.com/jiaaro/pydub) | 0.23.1 | [`pydub`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L97) | Python Array | PCM, MP3, OGG or other FFMPEG/libav supported codec | ❌ | | [aubio](https://github.com/aubio/aubio) | 0.4.9 | [`aubio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L32) | Numpy Array | PCM, MP3, OGG or other avconv supported code | ✅ | -| [audioread](https://github.com/beetbox/audioread) ([gstreamer](https://gstreamer.freedesktop.org/)) |2.1.6 | [`ar_gstreamer`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L67) | Numpy Array | all of FFMPEG | ❌ | -| [audioread](https://github.com/beetbox/audioread) ([FFMPEG](https://www.ffmpeg.org/)) | 2.1.6 | [`ar_ffmpeg`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L87) | Numpy Array | all of FFMPEG | ❌ | -| [librosa](https://librosa.github.io/) | 0.6.2 | [`librosa`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L104) | Numpy Array | relies on audioread | ✅ | -| [tensorflow `tf.io.audio.decode_wav`](https://www.tensorflow.org/api_docs/python/tf/contrib/ffmpeg/decode_audio) | 2.0 | [`tf_decode_wav`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM (only 16 bit) | ❌ | -| [torchaudio](https://github.com/pytorch/audio) | 0.3.1 | [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | +| [audioread](https://github.com/beetbox/audioread) ([gstreamer](https://gstreamer.freedesktop.org/)) | 2.1.8 | [`ar_gstreamer`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L67) | Numpy Array | all of FFMPEG | ❌ | +| [audioread](https://github.com/beetbox/audioread) ([FFMPEG](https://www.ffmpeg.org/)) | 2.1.8 | [`ar_ffmpeg`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L87) | Numpy Array | all of FFMPEG | ❌ | +| [librosa](https://librosa.github.io/) | 0.7.2 | [`librosa`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L104) | Numpy Array | relies on audioread | ✅ | +| [tensorflow `tf.io.audio.decode_wav`](https://www.tensorflow.org/api_docs/python/tf/contrib/ffmpeg/decode_audio) | 2.1 | [`tf_decode_wav`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM (only 16 bit) | ❌ | +| [tensorflow-io `from_audio`](https://www.tensorflow.org/io/api_docs/python/tfio/v0/IOTensor#from_audio) | 0.11.0 | [`tfio_fromaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM, Ogg, Flac | ✅ | -### Not tested +| [torchaudio](https://github.com/pytorch/audio) | 0.3.2 | [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | + +### Not included * __[audioread (coreaudio)](https://github.com/beetbox/audioread/blob/master/audioread/macca.py)__: only available on macOS. -* __[madmom](https://github.com/CPJKU/madmom):__ same ffmpeg interface as `ar_ffmpeg`. -* __[python builtin `wave`](https://docs.python.org/3.7/library/wave.html)__: TODO +* __[madmom](https://github.com/CPJKU/madmom)__: same ffmpeg interface as `ar_ffmpeg`. +* __[pymad](https://github.com/jaqx0r/pymad)__: only support for MP3 +* __[python builtin `wave`](https://docs.python.org/3.7/library/wave.html)__: TODO (open for PR) ## Results From b5c083a7689f426f5b6d2de8691273144075d6f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Thu, 16 Jan 2020 15:39:40 +0100 Subject: [PATCH 15/25] update torchaudio to 0.4.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e21173c..d84e53f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ SoundFile==0.10.2 torch==1.3.1 pydub==0.23.1 sox==1.3.7 -torchaudio==0.3.2 +torchaudio==0.4.0 aubio==0.4.9 tensorflow_io==0.11.0 PyGObject From 92a728d8b913049b1440e243c93dc85c5854decf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Thu, 16 Jan 2020 16:08:33 +0100 Subject: [PATCH 16/25] also update torchaudio --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d84e53f..bd8d00e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ tensorflow==2.1.0 audioread==2.1.8 librosa==0.7.2 SoundFile==0.10.2 -torch==1.3.1 +torch==1.4.0 pydub==0.23.1 sox==1.3.7 torchaudio==0.4.0 From 4942deab9f1d79c0601e292c42cf0fe505a7a403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Tue, 21 Jan 2020 11:05:41 +0100 Subject: [PATCH 17/25] add remaining libs --- benchmark_pytorch.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/benchmark_pytorch.py b/benchmark_pytorch.py index 42052e0..f44ad3a 100644 --- a/benchmark_pytorch.py +++ b/benchmark_pytorch.py @@ -28,7 +28,6 @@ class AudioFolder(torch.utils.data.Dataset): def __init__( self, root, - download=True, extension='wav', lib="librosa", ): @@ -46,7 +45,7 @@ def __len__(self): if __name__ == "__main__": - + parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--ext', type=str, default="wav") args = parser.parse_args() @@ -74,10 +73,19 @@ def __len__(self): ] if args.ext != "mp4": - libs.append('torchaudio') + libs.append('torchaudio_sox') + libs.append('torchaudio_soundfile') for lib in libs: print("Testing: %s" % lib) + if "torchaudio" in lib: + backend = lib.split("torchaudio_")[-1] + import torchaudio + torchaudio.set_audio_backend(backend) + call_fun = "load_torchaudio" + else: + call_fun = 'load_' + lib + for root, dirs, fnames in sorted(os.walk('AUDIO')): for audio_dir in dirs: try: @@ -85,7 +93,7 @@ def __len__(self): data = torch.utils.data.DataLoader( AudioFolder( os.path.join(root, audio_dir), - lib='load_' + lib, + lib=call_fun, extension=args.ext ), batch_size=1, @@ -105,6 +113,7 @@ def __len__(self): time=float(end-start) / len(data), ) except: + "Error but continue" continue - store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("pytorch", args.ext)) \ No newline at end of file + store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("pytorch", args.ext)) From dcf79a79b49f0f1f5e73ac95c1b09c5d26de922b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Tue, 21 Jan 2020 11:06:25 +0100 Subject: [PATCH 18/25] make plot log scale --- plot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plot.py b/plot.py index dcfe71b..ecc24ef 100644 --- a/plot.py +++ b/plot.py @@ -31,6 +31,7 @@ aspect=1, legend=False ) + g.set(xscale="log") g.despine(left=True) plt.legend(loc='upper right') g.savefig("results/benchmark_%s.png" % package) From 5642f8aa9972a2387b3ed3686a3aa8922a7820db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Tue, 21 Jan 2020 20:42:49 +0100 Subject: [PATCH 19/25] update results --- results/benchmark_metadata.png | Bin 19708 -> 19328 bytes results/benchmark_metadata_flac.pickle | Bin 2093 -> 2087 bytes results/benchmark_metadata_mp3.pickle | Bin 1628 -> 1852 bytes results/benchmark_metadata_mp4.pickle | Bin 1162 -> 1389 bytes results/benchmark_metadata_ogg.pickle | Bin 2092 -> 1851 bytes results/benchmark_metadata_wav.pickle | Bin 2092 -> 2086 bytes results/benchmark_np.png | Bin 25930 -> 23842 bytes results/benchmark_np_flac.pickle | Bin 2323 -> 2323 bytes results/benchmark_np_mp3.pickle | Bin 2319 -> 2088 bytes results/benchmark_np_mp4.pickle | Bin 2088 -> 2088 bytes results/benchmark_np_ogg.pickle | Bin 2092 -> 2092 bytes results/benchmark_np_wav.pickle | Bin 2948 -> 2787 bytes results/benchmark_pytorch.png | Bin 28229 -> 29417 bytes results/benchmark_pytorch_flac.pickle | Bin 2558 -> 2807 bytes results/benchmark_pytorch_mp3.pickle | Bin 2554 -> 2327 bytes results/benchmark_pytorch_mp4.pickle | Bin 1986 -> 2088 bytes results/benchmark_pytorch_ogg.pickle | Bin 2327 -> 2337 bytes results/benchmark_pytorch_wav.pickle | Bin 3183 -> 3271 bytes results/benchmark_tf.png | Bin 25986 -> 31269 bytes results/benchmark_tf_flac.pickle | Bin 2089 -> 3265 bytes results/benchmark_tf_mp3.pickle | Bin 2553 -> 3264 bytes results/benchmark_tf_mp4.pickle | Bin 2322 -> 3264 bytes results/benchmark_tf_ogg.pickle | Bin 2092 -> 3264 bytes results/benchmark_tf_wav.pickle | Bin 2948 -> 3264 bytes 24 files changed, 0 insertions(+), 0 deletions(-) diff --git a/results/benchmark_metadata.png b/results/benchmark_metadata.png index 0be9d38710eccc7678239a06a443f8e0678c96cc..be192998375297631c4c26c7fb0408b1c9a4328b 100644 GIT binary patch literal 19328 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 SioPuigB6pxmU-poz5fGKC{kqr literal 19708 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 LpN~I#{m%aaj$Klf diff --git a/results/benchmark_metadata_flac.pickle b/results/benchmark_metadata_flac.pickle index 75d36a8769e46bd632d00971a48c212cd521e0cc..778f777011d0c862454367775a85a815b6469e78 100644 GIT binary patch literal 2087 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 G5&0L4HO0aJ literal 1628 zcmcIkO-PhM7~cQ<3B$rr2t5?F_Vck~L5K1qmC7bpw8DOnZFYBbmUh2y`+iEJEkiVd zi4IPQ(J5^6)WMSnmyTWRP(+8oQy@f_0`U~oJ2UG~8cPt(!1vDk&h!2}^Ub`&fydn; zj~uKzi;X03~K!dZDccJN8L9_Nksc#elzc`QR5oP-VD$5|le3}pc*^rBNR zCO29A`hY3JA(nyDwwA#L9w3&@+1A#ynYh-ebS@Kw`yfN@?~X|_NNg>RZ78TBW{{h) z4g+l9K)12r%372bFhtc+7ElG$7;YvzqzGl)w3EV?g@+(-%pwWXupP@yI1q*fC6Kc% zZ~ziA&XH%7w|V3IKJVdS{d2jP*Gvlphh%=y3q(Cs1lv} z*Zooj>|wtC4HxLxh705o7pQgEs~)N6O|SlT9)_0CrR7tn{&W&XO;~RhW2sH*b-9ar zzZe~TO2&)$r55F9cSt#WJtpIw{eD5|wOGY_a#{J&BMSfMoV4Srywv&Uyv*0tnU}a% z9%a9}{6fb2@m}qZd{eSne<}USKICPbOT9|3eU?}G^=T>3FQ|C?b!DHPFUAWi{9WNqlxVW^swWd^JmSfKru#oZJ%MFW;WJDp01jt0%l pr`j0{-N0#A#AtB^-CHyVTYj}khw156s~-hctx=b_wjdGLegRAgWHA5$ diff --git a/results/benchmark_metadata_mp4.pickle b/results/benchmark_metadata_mp4.pickle index ca3a8c8845e3e7efe28a734e37098b9245f77e38..d0ebe1d6a2b6b60cac0b9775c47ad4c71df11b4c 100644 GIT binary patch literal 1389 zcmbtUOKTKC5T4nciFqOk2Hi`Hhr~?|gE4zBkhmHpJ{mU|!Gju>p55N`ka=w8VX|N# z5)uitr)`z^1H?m!XKw+))A|Fv=t-|x5f7rE)jbL3p%JkMrn;-@>#FK{ENG8RU6G5m zm$6&Kfl=^$Vw8OB5YCz|;t-F?eU1!7iR6e!yAl zsO=S|uf=CB@##sp;Mi_pk<5|6FmV9(n)5E1&0leW2LRf_^zFT{ti^^q-N-3dVn3b8 z4lV5axB~X_J}G!^5c*Le1US>BB4>vnE~!%GNLk_+RFgm86FiMnq%CpU$@F4aDH8!n zjGqA=q{i|jQ}6LyE_d|@Ecrv(kee$aiX@o}IZN7>$ysAD@^NT+E@xV3!NU>IVwx-7 zFc&R@E!xIXzYE*P?v#joLeL$t(*7LNgAn^6xWlv{^vWD{iw%K|D(@uV20cQLikN6> zJE8>YUgq>f?4wi8a60@yAJcJUS{|n(2YsvwM@0(?2NyX#d(bCdX1~+wFQ?IU)Q2kQ zAtdJs>O{9u3tB`39Y-Fzga*;b-{c1w=wgY|p8O8)$*&^vJF2LPG6<{M=Vza;!usw= z`t{CC_D!u;Tl+GTEr~TdofUdF76VB?*K8@Tt(T?zW0##3-LVm&^x=HFO8*e4< z<@uiYT>rKy@9TJ67j~*2R_fy3R7Y!F_%U|trlhZXGm@5Gtk<&~UP6{w8$Ar&N89(O zEdhlmD~dml7?Z5aN5ioOfhu= z4$T2xvxd9aj)Y{0H9Av%9)vKO8qLUp!QsMI4{WO-dLP<85jTD$!VT#tjp!WklDoK< jB{zw*EiQ=yh=XZ)7$Gn)#faJ-o_U9aSkA0T9+}2ZB*77Z literal 1162 zcmb7D-%Auh9KXHWGp#5kBtx=?BF=uSiau0SM;b;=UgWDB%k1swEZxptyR+qik`)@k z^yD|fp85lVUVGB(-Tsc=gM#S6zB8-%tAu7@=R4oupU=#9!G8P9&Y7jU8dUf+acWV_ zoavZ`3{=N$D(Se9m!bbT%tJ|axFM6&M*~zr*{*Ch&{3Z^gNm*(s=l2G10h)~XgzU4 zD(DQ06HrG->rw5|M0N&Kpj5>QJ-Y*aHp>#nqX{;2*cI%ldsm&)`c2>As zq+z3(0SVK(3}_tFCf0LfR*OU;y{+;zuJ0n#|IW3H|01jz{o|jR{Y5p)_vvGH{?eEEo&1sI`8C)wc|T0F z%7ASc=DYX_e44y_KPP#-4|4(h0>5Zb4{W`Hf5upwG5iwMJpV_)<(&a+9#q?)Gc@81 znVGgJju`M`s?F0Qnc!rXuxr)!gw|7SxvAR2nb<`m&TYGw1~^p$#bQzqYI-Da8uHmZ eq#EulALmUzhq}Tp?R}#y5PMV0(gbm&p7RF`z{l$V diff --git a/results/benchmark_metadata_ogg.pickle b/results/benchmark_metadata_ogg.pickle index 0651c5996412595558592c36a591d63e17e4c7a0..85009518ba5c865bd3e9895b3a1319ec48853bf1 100644 GIT binary patch literal 1851 zcmc&#U1(HC6yBe^F^Q2X7>o~Eg|;T4EdB&hFm6bLtr@$bk&3jk%S$(-Y|WZtDECPiHr_30iwkIR zD-X(M5+%ln`e83qkl6kmphKcs9v9I8nNFv>@590$lJaGCOl1*gWnYST(aK6u zYX&a$EytF^@GW>a23o?f)f=XRQSilAh_%m3+og6v<$X}mCAsp}v`Bb9b$tj&7@qI+ zO46YY3=UDW$si2Any*ng@wJN?#Yo4ffhB$u`pdvgOqRTrXnzC#rSV6V)0~)!G?}=}&ya{V?_Q#Kgq!f0mJkfAyz+nV+9u z_^q5$8k6mPsXVOF@5@N@vt^WD-=yV3O<`&qte!)m#{H}LD?c4V{>{T$es5zx+S_nh zP<$xTcYTVZ6`Zm_ogV@+U~U_I-u%{{Q0$`q}^UB;K!N zF6uZAoI^U$brI#>)e9)E3%@{nl{4d*PfIw5{GQKdk+%Iei~Om!ImC5a`d-gxP(FNH z>mB}Q4)qqKrrR&gpue$eTL03wTJNLj8MNcJ&Z1wpQ|q64PurjV;jY5%``{kZhFcP; z`0m%c%Kn`{rjUL!RzZGoYgglqNK^wuo!QbR>Vd1qdHm~Pmq7N~A6IGwm z3jmsz0@$DwHJg)L+LBvv#uyZ4g5>q0CaY$MC!y6r)S~7DEe1-mQ`D9UZU%%fXlk>8 z1!KU5W5O$1In~LbiN|ys4^+A*co*;E{lJSq#_dLKoEQ(eEbt%?VPs$+!1z-GXK@r} OO3bG?fsV=`n|uIMEXWf8 literal 2092 zcmd5-U2IfE6yBe^bz4M)SVN8c7);zM*#IR3taYUt3=CFwV~7UGI=ef&bMfxI_5R?l zNK?dC3Ihl`fYlcvrY#{c5`7@SY)wqmnCgqh7$uPi>5DN&@ezY(&d?vhY<$z1WM|Gd z-}&3Qb56f;{JwYyhnU|>?E>|ZdB5er z5u4g8&xWmn>Jf$xpw$k_y;U7=Ik0?_x-PAP->l2>j_vtwkoUoih#^sm+aN!r)FcTF z$j8Gu`MS)=1PK#kV1^be_|;yf6eCZs1ttk=R#b#vkv%;7Mm)4NgZS`Htv?B}GBdeO z>xEji{fVD$@VnAzKWYr1osZ@nLp$&P`6|j*#6$Vg_CDl&vg#n>;=*C{WAd7g=be|) z&zdWH5g%Ir2J)Ak-;em>hmPVp^5S9SKmW@vv~%spLCyQ^0Is`#IEnbZ)_(1GK^5`n zmDh0XTwO!^>#o*NzHsJkeSU7A_Ivjb>aD#d5$_l~g7*IS{5azA(>48noY47PO&mge z#pMyL?~kJ1uf{0i9~vVlAL-Nb$D78GcV@{L+WGW3&A;5Q*Uy%Z;`ySkQS|%GS6ct) z6C)^JH1+ysQTto8M)Nx>b@X%YU>$k(cUsObt?PWQ*U{gdNA>ykZ5n^?8I9jHq~%rL zkE5NoZ#BOBY#rkXzR>a=iE*^|?)~HF=Thf*O2U_jwQ(+=2h9UYDPM5w%ZxzL#45=j z;E7pvx{*%!h7ND1Gll(MDLgo>!1hSdv?953b#f&(Rf9qkl)ObWjd_-tR~-tPQ$)8X(X@+NfwJ*%pwg}I-Eb7uhrEw(m`0<-m_|1T eEbt%+VPv7_LBCg>b*lGg%gm?PYIn#Wm;4K#6AKjp diff --git a/results/benchmark_metadata_wav.pickle b/results/benchmark_metadata_wav.pickle index ce6ee710ca319a2fc8397ac7b50bcc95175736c6..3ec3adcffe5748bad88b9646e58db5c023ab579e 100644 GIT binary patch literal 2086 zcmd5-UuauZ7;loBns%*PSlP;0(mgo4Dq*8Vs%%Y~`DgC9tlb0|bA*%Rq$hZDZ@7Qj z#H~0Ptx=EvmZNTiZu%ljd=T_OL?lBLME4^4Fc_j127-`1I#B01-*=1MrU9Sy9Jt^4 zzVG+_yXVh$+<1LctP6%1s8Xv)-DJUbShD2M3X`JeLF&^kq!D@YFu!CD@M~Q4TiVXjo)5<|gyhRq=Xr7MssKYAKmA z;Oj(mb*&>C7>D zCoic}_a+%6hsio}f-sUGHhF}MkzN0_zEc5l5iZ?yF?QZ`F}n1{$Q%!Mb(Pe(^7O&f z#jn-)WfM|!I0etl_;BjXX*Fgxr^fVXCQ$!g0`(Jdq{eVc`ze(Yh+7HtcP7yOS{&sc z1oB4U=ibfWuXyMj;1<7o3;Z?SJq!55bIYJ#f9Vv^%L`{gUwdL1;(gj!23+%P#C>}Z z?M_@o{e8!l0srb($lv}4(j|&?axdb?%srU@7a6Q)U<&hnE#N29SjWaaC_kS@d?Stc zq20)T8OTpgA^%Dm@hbuSB+#D@{Qa1Qy0-k@0{_>ik^Wjoy24uEXS~{iI8?L%-+dnS zKX14I@}qB{-h3HpqlEO#L<{1_A4fkwWY8{i3i%iF7j)c1&1-G&8*a8Wf9bP(fPd_p zkJ}LcoezQUGd^!?f9_8+AiuJI^s3fxJ@*^P$KGEA`=MtZKz}c62P#fJiTw8x?LLZK z)$#iJFSk=tokVyW`}rNJZSa9xuVq-hnD9jMyZBZ(_@k@u^gr5!0vmoe)mQyr7>ukn zU<*=oZ%^(RPws$rYEaewB<~g7dEG8usa|!JwdkIsrmr>ki&$mW$tk7ksj<9YRvph$ z%cyIX3%Y5keig=!!AkpZpW$BoZ(H literal 2092 zcmd5-U2IfE6yATf*w}8d7Q?ockdRhzZBs&9sBZcL1}3aqOnj-ZncbasZrr_hbMIW} zCatM4pvKV`#`qJ;Pw>HnH;gfXE;ee65Ar~SHy+@@L|%+O_+pHDX3lM(pqu!lGs!)3 zzVn@P=G=Q{&Qk2Xt;vuXGF78?nR=O$&;0={TQJwA6)#hzHl1Uxr)29y#VNgV2z6x=^c{f=o7X#* z**x-T2_32 zv#CG%!(StO?`x1}$vb2S{=8l?Lmcux=_LK6PNvE0gpo(c^Z&KISpnN*WcGoBG4{a0 z2L*@k9PxJEsc3vdl1j{qTh>YCiKMC-=Y2;5liM;dO z7)SP?{!74L?MD4TU{7~roHx^$=hHptH?S9Z7e)~88pZenqiD|s`j;c9U)qcI)?xJX z_n^*4F#d15Q9d?`@#rx6-P(=(!C}My|%1+$c5BdV}EIA+1RHaU&eSX zXdkI%|37QA*eE3*K;KnppB!7zUFh729r}BUH2?suWC)G#&UpPE{zXMxTGBJ=D z+?5%`u1lc_D*mWU6m`?|pwafhu4UpFt@zsVoJ>~d+yWS(vnGqa1%1zkW!$S+CEc{3 iUq!HE`MTT%evmKnCBUNV(7ZvTBo?5|_n;2HnE4BgJPq&w diff --git a/results/benchmark_np.png b/results/benchmark_np.png index 6450e2d952a8c3e83871ef01ff0422ea3466dd56..c1642f911765b04e9ad7aba4df6b1287a468904f 100644 GIT binary patch literal 23842 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 O&fw|l=d#Wzp$P!*_}xPQ literal 25930 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¬c9;viZ!&QgQkM0d+(UO-B1O3*sS8PhEGgAze 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 diff --git a/results/benchmark_np_flac.pickle b/results/benchmark_np_flac.pickle index 3a759d458910d2ea2dbc2eb66200de11219be55a..f0d086c7a0d73fda891bc7d3c645b84aff236951 100644 GIT binary patch delta 782 zcmXAnUr1A77{(_E1{RrJlviF<-gr?t%kB;lB|`s5iiJ?@W<^vv zv7*0*51vht9|$GLUyDXS|HE06m(_qhk6~y7L-pJCRRkStWpLwa!W62_jb(IWZ93R+ zzJS5R5e)v zOC?crUtG#JKg7*v$K6 zj>a8fq3e0ZrYl|c6|=5-Y+GKE%{SZhH;7T~6A!rmQi4KX*WY1u{LpC{OVw%QAA5!= z9IOd}<&+cNF+E4TH!t2eR6B+}yw!_O*KWUz;EpC5aMis)Fwz$l##iD9 zt-nu@58j^_g_eflpUN}vg+V9yt0@LvtPaEXpA%1|yT#}BIs@GQF*ON3vQ_z2t>#SC Ee@uE&f&c&j delta 782 zcmX9+Uq};i9N$)0AiYdb22xTgTCtbuL-ue_m6{V3A;hOhM#LZ_1u^l4nQ8TqD9J^Z zVr@QHI8SpmT03Vt**Uk{pYGP-ykak=#3n=RRyiN#5?R*@9@S7y~V|M@nuiJkhpecl+ z?9m;~_t%O7cJO_I=-8EI0s5hV5b|1Y#NfLpM1Z}2w1<>DjHvgt+UWj-Lgk4Qf-%{T z`M{+Wv$tEoN9^B$w&+W|d^_lYuBc)Ve7}#w!nyrkEO2mo68xyu2kfh6flH|T}UJ1O#635F6=F{LG zji%tw>?Ytp)3}LzbD0SLVT0DwRi2_~@{Oa!Swk3ZrzI?NeK8t0*$vU#UT6@&5+u2LiRtvSpF79?$9^_ zs#Xl6whgCH+cgL>U98QbPoFSK0{r!^5$qpyW-;i?NCH@}eHL|Y%Co9C4uiuvfQ_@u zk6^f}ji9z^KLFKXD|D3&A2DEKFtta}YPXGQ=44PA5sjYE#=Jj6HjD!2RAB@IXh7=yi@uahyPB{}|ytD)tlM zGy0k-^w~L&lL|hlPGF$Dz6tPSx4$57>3WKBlYc53N#hGD4$mOq%Bu;|I1mrd6Eq|e z-@&gnlOv;QpKV`+{)TK6czWY328tO{(Eqe8U?B7RIruc(I09Rf-@tb@=Hc_T=9Gjm l{~ZjzQPOl-3s=RR;aseQm9jLsvyO9uk!#^t!tz;F#Xs9jO?ChP delta 956 zcmaJ;eMl2=7{1%hEkQ~vQNu{n)Fi~XgwSxNAcjI>Q7ZJYrPqmtp$Q7gNd*?^vhE^g zfej@;iqs|vPGhCbuUYvur)}vHmq}JI=;M!~`#t{O9o%!z`#$gUKEJy*|65yqYLs`C zzTH0UG<{a=q@(1goqlph5hh+yKL(lZye1>%w-T%|476_rS00JB}(#i;!F6h5WS z=Tc=sxlR)IGoi8k;X3t&B3)@onO5Rc|96XMUwILrA&j9-;A46yU?gaNw zwqri{>I)zrH?JXk%=g|wm+c-VTwo*nZKU8y+cpJZMYRnERIMGt&ZRj7GpAaC8AbDcXmM}?>Rjt2~=LL@Ix$zc-@Q971 z@xD*7*f+)sV`&hJIFBw5y505T2r^GKL1!PZfFEHS!2bk|fdA}$g#ZV(w8AIy#1OcR z>jQ5wKhscx9N8Ms3*$MVZ^QUz2XNImh`N6uPDW8*PQl=`aRl{au0~+x1j~xfy9s(*F1yJB z&yKEXf>C>_K0>Eg;~!@=^|**(i1jxTJqxt#xZelO>Im*4mOIvpcrq%2J$ridT0IYdYCGmz@0oeoDr z8}&$Vxk33vtN8iNpCG)W%=SVPf1GX?y!aploD{afe|Ydju$B7_gE!lb=}DGlGff=$ zl#(0tSR`KX)3H|!AvCVib1bB-J4rCN81NHAa+>!VMb)cY@F}tdEPdEVP{WY0_p`Q# z0@?f(_`X6P4h|L{A=mRN;Az&4;?IH;@CGAuiiHn)2}SbGSuE<`*T5GaZeoGWX$RKi zZR4qzjDa7NE(5FUwFvx5u>)J0SCC_(SmBVVRp>pHChRq;7r^_Obt43)$V-UYz_|+n z(ZK*QCi{jjaoA4(33T`7CGlC>C&JTUmBjoj(;Zx;GeBgsW9u(V` zJp^l*zd7M$Yn+2Y+7To{h7H{-306ch-%wn`AI9Tu$qaaFy39{}S)Aw*x>9+8gX8xi nD45K6Cc4U(cuVj|Wd;5ntFG=Idh2(H=ps(t61HB%$fN%OdEy{O delta 657 zcmXAmT_{6g9L6^rZ6%i6Ozg_kC^xQF>Tn}z5{0JRX%}R>qS(bbHwwiCQzk^#IwBvP z$VW=~Zkx?!V`i+`=4%ND){_pSq{NE2&!75gorL=)xo;e@oayp%V6Ngk8 zzeK8QYQk#O|3)M5zVC60#}Z*K3T|d_3-$Z~KPBSV)ATCplbvC3^7sW&L-)%r$x(_F zf`8Pw!CSJ9p~kLL8lc+ZLEvbv3jsq09|0Iv?Z^H});@w-(){35g(pNgxAY7_!{Q@w zhi|xu&Rpolfy{3Xa69XQf0qk$7DB>7K6JDPphvPq23R$+DFpVq)-cFazlpkau@wXM zU$?-QZw#UCH!VYdsu=XO<*&mZXjY-x?J?+Q35WfaDi)gQoke~JowOlP(H_Kr&Hexy zVn^2mWNhg-#49y%;fsReTj52F!qXQNUy**D_U;@xJ=tOSkFP6mE=fS(-67=cjD_H9 zQbEk2quxtWu;<8PL=&v?7AJFz-V-1=seeN7(tLo_Q`MzOaC=SoYkOnkJpyax2u{>7 m&%_t0D;`jM;=K(=b(|Rx9#4MT&XiJ8Rr5S4dQ>1FfEGIDl delta 657 zcmX9+Nh||l7_Fra4ovhUBt$HUlXT+H1S6?~NKcjnJ)x$Yod|}6OVx64=vWd<^iU-j z5$Zrgs%T3$v`vdN8CqLN2tvaD%;nAd-uK@7GOd|1Q>*G^j%8V~-Rxl|d7jsN958>J z%~XU5iaoX0jML$8On7;sH*S>QfNS!17@DSqM!BCLy?nQZ`TTeU^ToDHM)LRMrd!Ee z_0bXpr+VGU56+$d7gA3-6qU){2$HCs5JHR(L5X8PdLXcm1GO?;^5UcBIQ zhgaBJEB6DRwL$C;4f=q^oe|_&(n8=#IRO-{ul(n^WC4=bpD}fTLqpuiB@A}mCW=&j zMii+U_EEs{Ht@{44(M$XJFwblfY0-2L4i=B$K3n%{}X=J?7?rDp2J-3vm&RiUx07= zbqPB6-L;CBcUhF6IJp%ehRSXF4p^A=fJ^B&e3`-%}HDraPI1hzDVP++j% lBQIYOgI_m;|Bzmq5yv4>N+h~*)D$KA$$XJj6oM(W3BMu`DmefE diff --git a/results/benchmark_np_wav.pickle b/results/benchmark_np_wav.pickle index 407a5b069ce4b1445d2c3e4d04503bfc17d00614..eed51eb0acd19bad5b5e99deedcf7e15518364b4 100644 GIT binary patch literal 2787 zcmd^Bdu&rx7;m?BY@?H)Aj}Y)F~E4FGD{4EL180hxVgMP=2S^C;2a%YeF(_jQaROU{W}2`>jR^@xW1`V>e}_dL+QfhLo@C$s zzVG+@9;avLekoUbf4&0`9i33LkYad)ab5L>btR@Unzu+Xl?uGKv8mhHHdajCa)=ul zop>)kqM53$DN(~4Q#7SU)eS~HWzl$W)AK@S;1^f(0ORi`hSYl1@CFov=gXHhwN9?o zxQ!FYNa`Mbw==s$;<1_)OC&{|F)M0D6kS)6JfEzq!MJ9ax)n4zow@;JbOi4UkTxbc zcCvD3fbC){S+V4lTss*VOWh$enNV#?*7DgLBRPdXn>rgb`X|E_Ia(Q53zSK9KPUdgm7 z>NZS8H+ebKWti~QQvL zhMx(Q{}?(W^D-@($HC!nETPsgGC$LzZp8{j;*9t+E$U7rLso#11(_DjGvbyO3P++U zBMUPvI)WcJJ#HwBlx14{=maB)BqQaS7R?7rj>VJ&Ba1RE`#e8<)SQ1EHED%3RZ2=N z{9o#IX{@wf8YwkNs`R83mljJtY2JU`pJ{_8(yZ_Uw@T>)w~E8QRmvPLaTVWq@rpmp zpXQq%`7ihO_R6>W{RcWa3TqF41--OkpREu0?tEj*j?KTE_4|Cj)2-##ZRtB#cO3R{ zGX@c-^44|mR$lCe-IFz7%fe*`uL7U9<1^p}&s+lT)`&hxb@CwW|J`^!&2uj@Po{*10yz&kQ{8qzV;D(uzoKzf>XqptTVPlEsB*TR0ZX+QLi z4aeX=@WD~wXYoAtKAYbkLcIEPE9BMBw*!CCxnIPW+F?(vTLD@6(kayCtKA4(va1ES z-sUy1mn)snCzQ9qKWBmt`R18dk$+7^6XGnGu?@K27H@~WYtLTr`+9WP$1Hgp^6-W( zk*{Dj$JbfFKW1)$ zoW8CV(l^Qg{<-lKxahHc!v5}D@K1KUCh~;?kVWf7KaPUcs3%#(z*|<57ImK81pVcw zn-TYdzY((HXG_#^b_?{O<^~b>!;Q$d>flc3{hl^qXU`zscTenv?D%~xczyn3=fu7& z^T??4&LcYnuUkT0Q;T-PZcJ%Gec>O%@K0Eq7WkXB!rz!c-1D1j{fyrP_^=m{QGDhh zqaVI@v-sy8-*+;JOvc4CZFtD|M~?F@hfGoItNdROiti<;+ZfH6=`ES%Ex|14Quyq~ zNIuO8*t4F&_(;O5ra84r)UrKuXl|@Vm${PtnGbG!OtlBY;gMC2siuNSv6@){@1LXdCXoOD literal 2948 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 delta 1020 zcmX9+Ye-XJ72Ni(|jjysxy^|7S?h^}=fxxumgc8ACm74G8Ct}Z~@?ok@uh*A`o2YSyVWMaUC1a2EFaz}MzXQzMST6|fR`j0feOzn_>7L1(7$v&r`WbCk$tJ32;zg;?_pe*jT1rS zIWk3zLPM|%2?ZNA#LxH6z!$&l0N3rC#6asAqo`AM#f3&UvnP?)-u#C6eQh z!EdNB1B>!ofSRKgBB<6Re;^ISBIy+3-i8I_B?r$#mqbrvfH;90dT8z}2C<)9z*Mg(-um zGc?zQ4ag$eRhX>j#S>x>HdQWw%X+v?%nO$Y4{6kRaHHxh7ci>Ti^7VrS;7rY=Mpxv zvULu1>f*fw&)6JZG&*+Njk;8phvcc1n~MZ3gOq9!lco6DoBr8YsXke?<|+8UJjA2N)^761SM diff --git a/results/benchmark_pytorch_mp3.pickle b/results/benchmark_pytorch_mp3.pickle index ebd97ff5fc33a2549882389aa7b39b9df5caca1b..7aa683153f9e87e83ec71fe03a978a459ee78b6e 100644 GIT binary patch delta 947 zcmX9*ZAepL7~Q;A)0`$+HZ{Zb!~CJYW|l!MP5j{oO20JnYl+-NFmbJBC{q(7QNivl znMj#JMMF|n*^1K4spT}6PB(R5ek{!-lL%Cb_8u?X`|zCSJm;MEy*m-D;dC{9PtZ$0 zkgL-9&T-y6Tp|3*E3m_vWO9@U`CE!&X9+o$s@f0dF91 z90tib3uM6%_SJ>{^iV(M*{yB}ulyZGA0BNZL3B>%5CYA=auB{ZMKuT9>i7)9jBGo6 zx_76sA988Z$J3U2=jJT{8m`gNgpw9 zIdd0$VXzrGP3Q^;C8o&AFoPvWAD`QIn;vm zS&5b`w#V3rfM7dol~nUa8UzMB8Jh?;dh!=e@NmaMf*G6RwqOu^b{_SUb`>{a70-~~ z?Qm|AUR99)9r%=K0sFN_e~{krR=!MhqIPMI7Qn^iC7j@aXBNqtTSpM+-{f8p&Dt^q zG7sFqVr8lqycgL<82ntfqZ$_Um^W=LLf4dwn=yAj`9N@8 mEnQCo`LP-%lc``TrG8RM%D>HB;M7%I0;6GM1Z7P@C;kIslbmA! delta 1103 zcmaJB(s^v_cijIqAUv{n#wgR&MFnR2O?z zbbx!iCvs!dlt56Z*GsHSCYgYHnoGN7-rSShI6+Wpy<3Yd~J<$!JzMrAH({I3g zC4H3j8jZ$=eN{lat5XE!j-F%aqjasnn!Og%F9~We!RPR!kMN9lWAPw_Gjl^2;G(o2 z4F?O%2-MDxf{!@SiTbz8m@J-qayA;VP*XZTczJ3!d zLF75#>*sQq`1p#(0W=h5Ho@>LzY-HSrFH@XlX_qfoR31^mdjY!Si4$+L2j)W;LEAa z2bxm4fXn7q_~b!P;S)@>gO5mTKBkN_jPv_)N2cq(OBLY1H6=)2--GKozR=dE* zixuDxE%5^dyA`3fJ=P4=*XAK7SKEn&TYOu<$GJa7PWbvZ)HklxLqFnMEn~=;kE&|X z5H@6i@XL`uJ9=u0@HGMUGvF;%{3qQ|J_CN+9~_a!Ae|(-`oeBA;g$9S)1>yh?lc9T zPs0cqOnh=2wc0trf(_j%7-PsplI*@ugm_|coh6MLmjEoR^w>EM-n4lE2G#Ni(7e1z ze5Z>-CJBy=4}8G}O8!m|eRiUL0XxkVeuExUHiO(tvB;S%^ZAOp=P)yez;#i4fPds$ zA{eEH7r?ysPUxeVJqVO^#Q}>MBT#QC1uiKKyf0ge9S5&{2VQ63?||k3e+PztwqejQ yHGc>C?K)neF-KnasKZvcJ%c_>4P{wC|5i$_sA;Y@`u1E z#p1d6sAe))W$RRnsJgc+Ij2^>(kEPo zNp%y_5l+KQBqiCVCJZJvzP^B|9r6(mJof$#1RDI-sjdE`aH$P$tub;Lt9{MY_m1uPc!@J&~v`lhRqr>;hA zi#;#Tb3gL5 zE&CGnElY+mpQ&Glk#D!X3*!gZkD|V=?G)ntn+K4usHYqAyklet^?{vPd*^$nl|HfH z@F4OnZRo@JmwGbUJTLcRT;}NxjLYvoin99B$7nxU+l_gpe`BbZj-N#R!0l<2k)s{R z;~+1izT^E*5cgJNC-Uq%{U*vvcPILXX{G=CLfs77`>K&=)s=^46yMg>V_E*kS54x2 z$IcBZ+`xTz{iLL)b~H@^{ggr9A6JVLYPy!3kZpFknTY=V>r?8L?Qxs-e&E4&HFQG zBB6jQS#m*=U4t`-Mht$y1lU{@rIL{>2J8U45y4Fq&@PLhAN-=mf9Iak1VQ&z?@fB{ z`SUw}ZtpuMqrCb-bpDga!1JJ3wNq>tUhWD;Kq&aK zJMH6|r5YMdn7$;{XiPOs!QJf%J>1(};sxTpJ>cMhzXK!cHr4cns0r~F1~qkSaH9q? z0I*u_DxYO!r4-ns*~wJ8lxNaTSaE6?G!5~Bh8os2(=zO^1#s>{L&2+|E;Jbwq@rIu zUiTnm2FThChOiJ=^eGQrT}-D7BwtL zhbyL~rv%w74=NlS=u?F>*kaZoYhsP%iX3EfR zx4>%MIqsK|p0;WKL>^Z6*ZwH1^UDuN-rdl74fQWKe2n_OpD+1e9~v4O9XKZOBe_?u zN_kgh{xafvPmdw}cIgbt+YS~Gw>ozg>5-wl)E7T|?jrKnW9xbCU$S=>@{hcG68#>HjbI)% z2VX;dlQoL`sg+03ZpVtlC@3;po`@sJluE!j;}@(|HU2WcTs{MUNfU9tJqvHM^yu=;x+j{{nwd^*fa<>P89 zcj12pIBx^IYz14%9+n}>D0REwRge0b*Z7)o04fv)mS78cRY(pvQ$QbvGk%LLqqBsb9gdOtz1p?#{hX4Qo diff --git a/results/benchmark_pytorch_ogg.pickle b/results/benchmark_pytorch_ogg.pickle index 2fc054f20312fbe137257bbb23e1229a32ba3978..26ef4a95250faaba3de0a3c4d8a08612f039237a 100644 GIT binary patch delta 824 zcmX9*e@GK?993^N{}aqD1|bNM=1B^de;A9Sm7xg*Gr}+v*&0s84S!He@+K1fA?P1w z>n3HQAV#osjt#7Hn$9_I*6r#nmn*R{>aPs?VF z;7eQ^$oW+i!-5{eihTb4(>W1&V*gv@JswWDG$m6h|jiDVka`FUamC@d*oq_2Jwc?aJXfswKR ze8-d1KqjNqhZnaLKv2)b6y_3U5wk5j1Y^))1r}VwC$&60Jp$d|{W0jYjU5=={4~4EC*lblW}15M-aNK2_Nzu<(?E~vTQFm<6Tx8)BgjyXmJ++ delta 818 zcmX9*T}V@57(Vk%gBX&Q#YjQO=1p`Hnk%+y)3 zO#G{cO|W@d7+Y+bX_GUTYjbnC)pV`UW?Ili-n8#I-_7&AKhN_$@B5A9_UDS*#1ADl zaT6`suW#1XY1KFDuQvCYy6MBFVLFR@N}mw1kIiPO`0^)4lRla2a|}gMZQFTkjF;z? z1G`_Cblu!>+)Pj!vwvkyrB7awgCG~ShQLb(Y~WRw#0ZaXIUNFT=h6&fOC*f?FU2zW zXPh5^QzyMF3av&z5ypE7~wa9@-_c^c$**|?8dKroscrX0m@gY}~7)<_Yh`{KP$}q5yon0lu{2|X9B%W`N z1NDFL6;vzjfsp%x7Q$!Sh4|&$0p#Tuo#>aT??WfQOxRRmmkafuHDf^I?HOQ#vtxjb zib?ddde0OtN3#=X*tvs0mlk+`U=#PaEljF5h6wS-o-KvG_K7HP^x$_G=<R$!}U0+%alpzsFn;##JyI$$GQXOzQMrsF(-%*b|)ZcHwYWZ+FU@rbEpwG zeofdww`mjxh^kpYq|w&YVpY|`VVL=(95ZL2aG7E(RX*mmX0$u8u_zVoNr&1 F=s$e?Y0v-w diff --git a/results/benchmark_pytorch_wav.pickle b/results/benchmark_pytorch_wav.pickle index d2f71071a5c40cd33e531d7a66fbd1e68bc45172..a49dbda601ac149d669efb3bbdf3c38c6f24a823 100644 GIT binary patch literal 3271 zcmeHKdr(wW7~f@g0Rd|?$kv%m$5b?j!PYWMTLmBGwKX42@EgU((h)z z#~+duzvxxde4<~>k`$GaqzrGs`O-67r|?gm#{%4UtD{TGk<>JYsIq(scE6Nuf7;J5 z<{&2$Q}?-+*~k;8_`|+ngxBc{dqW;kQN#$#XICU=z^{gsurtKmi3vnX;#gmxlu zCq#+C>v2#L?+Pno$P@5WVhnlM#z~AtjDBqoZQ(+eOYTX`f7iAm`m?mYXK3=KUgcpn zVp2n*5@O{LqZ$eXsZgVxNbE$9m=Y^PPL}&2INb)W8KbxB*M_JlEcjxV(|Lb-TrVB%bh)~RK`*I;gm?I<#O9V-HKnMtv z1&c8De|z-(iMGN0NR0coC+C>ko}4=E$(f-u>2wy0rDgA^6V^lR?d{E5_ghz2R#w`` zIV;1}6Fs}EZgyP0TB7Mc4nNNIlKXd9wfEGl;#1&He7{NapPJfqUgKX}yRB2>TS5=- z0sg|4a~jXw$8ZAt?FT-B|Dy>ei{5bTvFKz;VZnzr! zwzFHIfBwOC)LYq<2RYic6LNNSIe1Nn8^CMNCXl^-t;l2T-OTOo3gA1x*#f_x{2L+n zDK+55ovwwnR8>Gae|QakGtxJru9CiuJbwEq$l7(y;N4S}4g1m9THs`t8-D(rCfF}E z@c1*|$pv1jTaUc;>PqPME-!$8-q%Io8|o_|J9fXy>$7Zx9yg>JJl*B#(5tdH!~RQs z4)hE0yubE69_XhM8^J%nzXEyIcjW?~bClP)H+Lm;!>mH^(l0JY{a*b_USC^2udAvC z_?2DNJbww#|4Jj@uYth=#Gh2UiuZ4J!oMh^3h{p%xC-`@eT!hf*2(vG$+kBTujG*e z?pM$ISD!C|-riY=IG^QI@cN9a5y!n_8rPqz<9P=u;IB!h;F~j?upelAoA;se>m#-y z0$$Sfa@3VMpa{Hib-exso4G7pQ_OK;8Kmw=IpXwsYBl^?nq~suy`h%Zb5I4Y4lM)k z%q1uC%>DT-;EBUZdA?;!VIT3~n~<~n@P5nI<-=~!7XUAMyaDpq7rf3*gIker@DYCf zo2Sl3{9iwL54Aw&%>sl*#5BA#x{lW%{dX2#r#7no-0e@me72*^e zUJJdWxfp&^lk>n&`>vetLsvC;=7qChZ(YIfPj}-}kJn$}{bwG39eMZ6FSJtjB*gI6Q@)$cwQ{dJUt2M3q{9p+50VGt!8@#bko-p< z{S6;^h^V~^|Aj;9%?{FHN@CN~MvP1wfqCC3viY3K2_)8`&GRZ{V<)Sc#4ZrMVa+m{ z#QU-oJ2SGOKi(1cu#w!)PED%US;NEGF%663LlOHezJzN^3cYZr|io!-ZL(T1W zE9^%tHm4};r`HQ5v@+SP24N^GGulL9(#|~!Y3h7s7C%eNWZL+%Jv^%WJ{pbs)x$a|p8srICyPIFO$@PM zZ`83YyOeio3c8@a2e^3mhR*Nv`3kx&N~pQ~UQE)lW40(T{pBI(0;k8Jd-vb#;1||h zk$idW-1e`fACcQs48l`qZX-73PNDJG#5DMYm#$-=`IL@{weVG9Wn6BSrhR(J{rxjceh_ho(2T;gb9Kf0GHt_C{8I4Z7NCs-AI+5>wQcH|RJAq=R2;CJ| z1M(*iHld+C-4DK3O$G?-a&!xmO_(k1MqbVNw0h`O&M%1Hz-j2sY2>8%Z3`_RqULuX7~R+gqoo}-U{2jx z5??dG=&kku^hKs-#E)%cfaq7`-TQLRfG>X51+*Nl!=TH-HuxWUt{Hf2rdRUeqr0*% zkxl;0MWg5agDA{3kvlN7ia!>gFY`DWFE{oR<9u@Itli{N?M@|^^X<-7_+1-of}b); h(213zsq~1rl}qMQYT}T}t>xA+vU-t=G$+16{SOVgfE)k- diff --git a/results/benchmark_tf.png b/results/benchmark_tf.png index 75d84aeab390745bc3edfc03f55b7ea422c3795a..b5a2a32cc416840300499ee9d8c334c82591f2a5 100644 GIT binary patch literal 31269 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%0A>z7q~b$ z@VKtMYJjIVF*g?ifGjUU;cUAOPn_DDv5#z|rWUu#-PtSh&@~PzHf_1wtZM_NTtzS=F{5N&&p zdFaui8q|M@d0F#iD$mlTb5WTxgN?tAJb&>lMfj>Ja|_2z7BS(KvD5A(g@D+?KR)G( zPc(THx)})1j}brr&c_Sqtwa^ZB&q*sr~jp%J)F;?rHN;&Pc^_YC^eU*)xt2fBXAF-z0IgLFrStC3}abt zUso325@#4XZ-`2tomb_daBgaUX0DwOZC`txZ~-r!8;IyJsMIj4k(p z;7u%HCc8)k-cpTa#3{ws2l}R*BS9r1>R1Nd^lsHGTB4w?J+?mjIBvPuZ8Jn$qbURG zd#1z~p1HCs??nA7q6aQ+%ABB?QDaV56V1J(wbhP?vvB2k>U;-n(zey|3fXwOO47E4 z%HOi0b*|b4KgiD*Zd(s!((``+av5J zJXb>Zq|9ioGp}@Bwr@Ur_UzW?d@n$GWpi`P%1BjU`;kd3wC77G+zq4VN=FsB?fRoA z6!aZCPKJl&X0YIMV*RPoDRHKqxIPe{WvJ`9a_4|qk$ENmH>tg^E=pKAyzI+e8 zsvYeHwO>gLzMO3tIPT0h3kI(w(aX=VP5>`6@ePwYVN15ZsFMZ{m7 zGf*vyr($_wD1c4E<9%I;<|W*{U(50Us-jsW^WqO*5p3jM5g<#~ex%u$ISf5CG;?-g zAq>DI$`Nw(i&+phAt738YwO!1l^45Gq~U@90_116|6E^h{Jk*;f(tn!V`g@`XnykJ zicKke0cZz`P);_#jDNjpvGs*s%l-bqc0F1+{o*t(ja)M+YxK z{q+z?wzu(k&z}e7DYxPf6^O=mp?!H7epy)|_!h%P_;15FEguZ{i{M~yyX~!Qzh?F| z=7O8==}JpW4c^~7kJf$AE*eHgm=KDSC&SO_7u}j{3PSmDFc~wEzP|p}Js-0)?uWp+ z%z$&C1OcUz0LM;?iZa-AC%3$@`trqjpGjs&6y^*5`qL|P6RREo9N0&Wh*83OSw0i`)=`)FsHT=eo~_OoYI55{)Z zrzd}GdfFBL_+eS|do~f9o&Kq#0~PxI+(nKJXbhnd5$HsC@Zdp-!*^lOil#w&@|;WZ zSOW=*4Ztg?d@m%ug+UP!8gB3IZaX~KE4BJWhh918jlqF|$54I<%@Q=`Tw)aC@9gfr zQQ;6ObG4@U8R=)B_b7BkZrZ>nD8GneA-XQUKR@@d$fPzL=8eT*o-Po`2Ec{kP#7#g zLqq&m>-NZOx?VK`i8HgX2!xSt1fl^r1AE+j^I=eW^30DPG9Y-iwBUodDhm=ywa02S z$j42gEN& z#1j-97FA=;(5}Q1QQB@;TG2TGh@zyY&t9*q%WgM=%YYXDwakY6$5zf-i^(D%a4I}`Hd<@j1o)RwP2fmotH0X8={?S zQFF*(D8RTI@2&3(X+6fbwfxXf_98LG1@hss-ig>L?U` zTmCfQ#wKKCo%vF1N)GZmip8KFbMx@Xp&Bhr)(R%4TtyqS^I z-mdaF=`#JdZ{JkZ)jz;A8vO3{YbgvwnJEylLc_vxU0M}u>1#iqrdqhFnyizoD7RJwxoi3aTH9%0KY26p} zd~`iVZ67B+`3RmxoVU}`*HUcA&9_zVi*#dNi-mSG=YYYNODV(Dd>s^&9wr7<2%Q(7 zKdYm?5G!iw?|4jw>PKbaoK>pb%l%;?gGY>qkG{XMPYjJ@Bvzz$ooK*e5_7==vAU$R zG*+C9G1UoA?9Go>Ng*;MwSc5uX#Yfo*f(LV<$FKcDS1t53?xNRnUYeW>l5COcW_03JppM+2D;z$?HeO3 z*=8u^1FPra)N1xt-aEUyw}32#5{c0C91|B2@Ca6GHpm|M_^g9!W#07Y1X>pXbEiTF zrv+vT2; zf%SpNfc3J!zt84p7aY#z%9XFfQ)_JnKIXmRT~(lcx_U{8pTj~k*VZQG_m`dg48%EU}rJ}dQ~%sE_XrBMCUU#r+SaK-XDk2asb%AP@XSp!T_E}rA4%78@;{#5EbM> zrv!&U5v-ouJrqbLm^U&Mc(uQ-R@>ywRlviAYO}Vv`6$ckcl}&& zoxqi=kg$MS6#(_!%fKjc&c{Z#5&ZUY^_!mv=I13fLI3IcILIQO?H&hAU?HI{;@z-t z8SY>01yks$7<);y>W_KevFRQ|MXBWgBE%)W(rEOCJ$KkhOV>Gj6W48(v>%<_AmLt3{&_CNXX_te|&Uyb%hUNErIvM zYL!$!C)o%Xu5Hb~cpXh{JQi1q`!PF=P|=QHx)8Bq}gOx zaS}Se5iGL3|2Klck!wMriiU3(@&9Fy1iIJ%Mlc`)6Pgo_W+bF=SOEVY)6_H$*bgwz zwRjx1W`7$LB1|55@0q8)JoR(gALD4ARc!weFmSQ`5hz@kX`t|zMn*0vU)+zUh^6#gFh>@a~3PS|()&z!;tP@(0yG*J=vp2?e*sPvyl z=N_N%IK5AyH#sLtd680Uxj`;Ahi-4_$@#AF!VIejD(;TLHP=_6FG6$fO^~wxeUQaK z;LQIeaBJT{{{;HRv(LnZ;l$)I!#EC_|0P_->vdIS{3m0^Ps_rH32-oZ{T({HLE08* zOwa~!0Aj_7hs&1P4eG-kQU0Yu%_F^6u;7qdB6hlIUn`tU-4?%G#WE0d+g?bqEG$&W zBAl$xFLkz}!(j4sgVF(L0DH)aHd||5IeE? z`4PMUCGbivIE_hw!8g71tqgT2`uh4NmX;!ctY9u(dOOmy0hQ>Y>#Ta@DG@S2KOt;{ z3}P-EDF1}TlMW8x&Qt_{4+znSjIXa0>hj5lkTs5u9#mDy$;n-??c)Gpnwp;9L;*}8 zROmdIbg#!MrpBShw@@6F-W+?7zLir=z0-uZ2=G)%n8j%X zZMyK*JP)hE3q}(OL_xTnFNHvk!~ukg4f}h#D zAm-^DWj=0vO51+xUKh#FfS(oIbA)1qd-ZKk?c<+4YiMectBsAFe!o037~XfkMqo##-X9@AjK)_J6{SK0rCLjCW8#jWT(iuLR&O*DL`7tikShI z!1{E9O$*+*+3Hv=nt%bD7DbAvb@f8fh73JFpa7%+LON{W7>G3l0Zquz%1|f_b98?Vg!Vg)LJiiq9pJ&f# z;2)?kCxwP?e!flI^6C{+yQM&7Wo0VBUG)ARJdhw`ksyTN2~7QlPoIdV?O0+xX7uSWOj~__w?Jot4W1iEb zmR44|+q$_rP(}SgenROg2=Cit-sE6id>B9cB?9&)8+3YT%|LJzz>Wq^H#t2W2>Qx2 zcqucx$uM;S0t45v`NdPf8QQ?TB#Tqi9V~tUC$$sHVD5;UVy=CSeG` zKrVKx%MO``89NCuZp9tw`))aqO29cdh&xuoPU&e&n!{jxK z_Z<}Qr@eIH{~JR}u65GL)qz|M4s!C+ZGSRmakjH(Pk?~>;aqVIu8qx{TE%(78P;Q- z)y_UzU|2JC&w8Vzd7|;y=JI!Xs7jEhXnA(_ddISjqoc`+AZ@vF`O~~2qAX@Lp)n5+ zm$okz6>>C+nXg}C*w|#IyDx%B&!=>Q8=e6Hs+@iZqehG?j%I3v#r!xqxv2LVOsCndq==;@dk#)cbHHC%2b4xP1rguf z!s-I#n%`J^3sJ~Gz#WZ&$5G^o`tPhd!0EJB>0wp?fKP{<7OU^hX>hi+vV6USR&_I~ zK8ju{`fh;w7M8an-)U|_e#*`5lCb?(|C}6dSY>RGA#xag+X!F;HRr$&KxHLx79eRg zXv7U`oEGp4m}RXX_n=5}OBg_k8~i#bC{&y!lJ<|1=&6@tw>G@lYmrFtSuek#os6EB|zu$tlkGQTXy^jdC#TDynp^s zMYArDjO!jV7}o^ollf}&zHIY-BD5(xoGc~;7>yk%j34%z7M-4dky_4i2W%*=vgr0e9R zQYk_ZMU^=S0&)mgVI|&!8ZZne2AnJ-hC+_Z(L97SX6`g30MWCZbetK1{3c5A5a0;q z>ay$1V7gJ_w|I2a@^?R;Zpe+nK_Kx9hBbFZ(o+ZMVc?~O*(H>TNwXDC7d~8kBdqv zJNbnyXSSy-fvw?Vk&A}v`}glH`Z85@R{}#rGaKP_sefb3gS+yRkXVWQCv5r+yuzZOE^gii+c&t>{xoQ3^Sy-{LcIE$q zXG~{3(cjE3&pxj{<7sgIVI=IzyZOFN?T?Dn+Uw#fR?+%C&yR#BojV<+h~9oCZ85iY zq3}pH#bv>Vr^w4mB@^Xy7Ih|VsyYaP7>a|zmoM~=?qcUr-4}=1uDaV2z9Gq|&%{Uu zl%O$B*A(s#vrwP!E@~viUFXP7spCPLsAi8oyA6;g>h0M$kFop5K~5^@ z6>eKOc_U+)@!Wq#LOCp)gQoh4h=_WMZeFgemSVwmbIIFj49I)8I6of>*D|Eyt^KC7 zGIil#h~1|S+GZVTD~{L+9-Ajr9M=a3!- zFDVdbp-V$sjwT>I`6prulBS-;T>C&fk>!QUHU#${&Z=vP$&oc3>aIWfj&O|vqw2TT z+~6*{Q9;(#)%8NeDY;t3sKSvMMpECg9<2UI7Ri%99N?)Nlv$Jd?o1vB^|iJnrp{;2 ze5~d^nm$EmMx76#ZsKHg*8Cj|O6 zsLeJ zx_{?yaMWj|_#X)G!vM2H+)PuSW^pk8xGaSx5P&V`GI)f4!jbj=q&-vo4#gk>fP)az z@&3VSjmKFfJVd_$Yyzko#6~z1{N~``03Z%7f<{MC2_Cpg1NaCC1uH8$W*ETXh^CQI zIA9FaUjW?`6}NzNP*PAJ2tXIzRe0bxBAGAKLF(}M+D=^)z$rG+Ab}hCu6VdW;0_Ie z1Gjqwuo%5ZklnNv>(Gk>74U+?@Fm1QKAs*89Ngcq-oy?rRvn<7OY#$}f{qS|a)yM2 zRIA|m|98F-vpfFnm&r@IDN*6v?-K|B_;-%=P4p06;(f~nTHP5qq z+=JDfqaT@XjF08bp#?R#Idw&=fcHNVo%Qjsy#wYE=vHr)hW*wi9(v6)cs{Ty2Cy)q z+uDJKr_h)(WM)x48C}6E<9;<%?N4!gz&j*omD2H>1z{XJE^_A!3D|5i;kBEan?$Zh zkgqwrJqDMY_XhW zF#==jEx)7xIa%@)NHvH*xKtTnklh}u5rZmYxbO}P^;=d}C?U%LHvuS;5>#*`C*(Cu zNOaG^mShmDiR-3=B*2a#gNV{GN_M4*`Q8jPx!pnPDosg87mV7Qz^75A8qHmUZ=Dm9 z_Qp$S?jREBsa)AuWfij0NY3MeZCs$VSwS%dVpd|_LIjc6swN*WIR8i5vVQk;^h*j* zB>?A}Lzo7(lmLCy)X2Y13#tXQ1!a4CUMgzp-b__$^;e>lK=x(5yu{HYHX|co7Q#(n zHiw6YFT~w>qz-p1kQmn4Z{WQF>v@E8i~vo+g014;>U;?SR&Wc754xg2_n(-W3IIU^ z4UXz|)Z}cZ^RRLyko`BLvFR>Wqd84oxl2K5%XQs0Uo=N=&tXIqz*Q`Z!Ta~k72)h; zmR}XL6ktmUE-o(H+HvG*=Blf`GXMy$Kj{WsO5G+0L^Xh^BIPA*8qbfRqDIWp@24Ho z5l=r;5At#9b3-bJ7Up}Qv-i>A!QeI_6(wUC>cQ~5a7fec=^&(A3`jmK0*`wax7V5i%wtFTRr`@)((P!6?qNZf5{tL77R(i^+#CVyQ@-`W- z325lNe*q~#1)UqBxP;VkgNHR}4p7*ss0vIqmq-^708#uS3CR`GYm(mR=BCYtyt~Uu zI?16tA%H#CZj{IX=;Sz^rHx-zAG1^Is!@BNmYA`tF(x=##Mz|0mK`;7m{5 zA?upi4-J^Q4EeU?(`^s0v+6Gh8W#q&yP+zw0HuwquZ&6KVEmm-8g3mO2c3uc{5=RIMqyF_8aJPL^1M7Poal7 z_oe}pY~rz6r}0oLQo_3Yvo|pFm_+^SLV>w>G$;emF;DT&o-f#XIP`XXpGwQ>uk`(& zTOI#jAR3<4e`4@VyV5sro`~ZvP(TQA`uCaijwz#V9V^&~*xjvxWyoZQ3+U|WD*m&j z@g;t28j3N4i+`iwUx(Q9zqT}{&!OY}Z^r2_vr#Ayt=W+(D9V=MuH$m2`SB;*l-4ix zPqwMKv-4{90Yw52YLt|R4whTKpdWcGPJqaqVAEfh$@ckgX2*%0DKHy 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 b;|VSnHH{LM>uL`8Bc-IEx;sVw(3$@LxS3j~ literal 25986 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 bTgX^WK0@f&Klnjnad9#W-vLXpVm1B+_=m~h delta 770 zcmX>oxl(|&fn};3$41tbjEn)3*E6aC$!m;jCo3~A;b70nOe)GRPMmy^Sza==WJ*$o zNQSsKL+g|b$@VEhQ#8C8fiPh5eU=rI)!8I~8Xeel>Km9C7-r3!IrG%jqxNY)V3)bW z-WUi@cAp0GP9mAdl3irR8*90voX4*Kx3hW{)#q1^Zq=X#F4O!2BEgkAe+)dlV8Pw;rAW>+5bi z2c~DKoB=yvj?_hvdY@i~3t)Y7bS{7`c9FXXmbcS@&|E+VFw_HGyx|!{fc5TOu#b}x zZ-X47wlnqti2pgw{UO-E7dvl*3~+FeeFQde-=aHU1D`VA16y=l;4Vl!Qv1&XFzr7B ztbg;<7xzHsJxi$s^NULrz_fAp+xzxF|EDc`XY>GUq2-N7U<>cbKLHsqQ@ryT*g~5{ zV45NG`V)|Rv0mc~u=)>kpMo9o=@nSMfqninu)dD27hng=&3FMZ#|O+m8KY%*;chjKD49g%X%gd9W3w>T<|j#Ge6DP!4p&L@+P+L`*>{bu&u^E>Bv z9^ZYP8!)W@JW7W@GSnw}?4p`t^D0t`LlNB)B@r`4P0YmOS~{+rmeC|)wAdL)$;f;C zogPh6JfcfYaf=?YKvGmnqB2}w+p>9Fr^rvrX8|6+pJ_3Lg2A(+1<9GW?c%5#)OLK~fB9^dx7DcjoJ*uYoZ5pE!BRWzN&iX=^S}N$? zqBHbXT1|6klAsq1Z&5jp80}h#PXbEFOH-MTpy&2bqA#V{+1YdNupj;jW{p~Fpo>tc zSfeD=<+M^V!0uN>&FS?}V$hsy<0R%q3?A6SY=0HYB}bF^e`;G1Jq6Hr4#<0YmB(ij zqpFFD#>ycERrC6&&|o|31^q9;#EZ|X9Qd9(z7{zB~+dfY>`Oxvbf!%kIFNHEfTFcEOvHx+9gYo zSV-kr!4?^$IhPEtrI9kLP`;JACcbH+WN$r#gXYI zld0NPoB;YwcXJ}>rs%c1%}l>GVR#bY$$KyNnHg`nH}6TXUvJuU&CFzM_zPpx89wV! z=IC_x0&6_e9SZ(SRv#Gyeupo9I~;Vae(jKShr`iTzAYB;(4tG>;Ggbo_}$Fp?&QRw zfZO&xI}C8$(!S3CpL+O8I%YNeg z`g6$7dm8xx*ZU_>?~3C1QQs-lH-w%>xq04c>}OJ2EAUOR=T{&eHh2Z*UsCc0+H=hT ztUvi|G3u#@11L|fD@8xu*G0&${mPI0tp`?e{*E^hzuvTh%WYgHEHB4+u6N4-SJw!A z;NP6teFgC3E!B5GAJSPL0_U+VW^Ehft6A1=g!7v<=v*h*8`mp0AzxQO!u{CZx=RQ4 zYa>V91bg}~J(qx2VtpIWr(;%M59SN`@K?Zdcg*RF zTUI&t)zKC}{bGJ4+Ut&0aC`#SYg#L?uTNTPFiv258JB4sKhwbbu8-kyOnSaQ3wBc; z_h1diTWAX)&$q7<^~82w&z?o)h&LbPb+u3AdFQ;g66?uzRbrgjKY6~=^W1NST8VX) z9^vsar*qj+&-w8eY-n%YxCrw(s0HQLVj1J@ocSt`zr~6&KKB)@Lw6{T_t&1o_1-*g z&&%Vy%Q+aQYkn?|pYS@DXBTo__(HT-?N<=b+8}fLCW*_*1sLz-ItS0c)PeqqJshtq zEZ}+5oZMgJ`sivu<~QB8aQk4ivT-|>+-s}Q1Wlut!+M?ybY@n5gKK$AWVY3_# zZ}M0<5g)wc`zOeM<>>En975)c8(!B(!jFPbDQYKDHnTUhFL1cqDl_N=*6$W{g zvU!tLO~MLAmme&tWPrOsu`nZ>_6Jz~PBx2s*r8E%Ic+dbvq?IH&(eNqw^W`hm&pN! rh2Dq0jA*D}xQj}DmGwak7B-c$ZxERJ`@cslZb=jIGa#S(tto#2x5(P2 delta 1076 zcmX9-eMl2=7~VPEQWpw|HcVn#!#@TU5+y_@q)u2usDVPHE_a+(D(WONn}uPL_0P>} z{!=N93_)Z`N#s}Bm`xk=a|Ba2H#O#WLfVM#_uLKk-0yv#=Y8Jyy}Kd#{*kc8(6){6 z-mor;s^oeoCI3H51-L|UzEo0NRd~C&gliNlB*l7dX@!yN6~}OcVo4;M#-_D~Ro0d0 zwVXqo6&YT`6qe|2RFvq9oFepCJbOu3W7M)SY@9~)$jHi@jXB0-4aNT|Id|wPr<5G! zjcAF=&?pw+I_;gMQ~2wG)kbjF_hyl9H<=1Ne?5p>GCF96Va&Nv81|@Z&ro&j#8{-AkdgQ$PlNl)1A_KZU_geZ@#cR)}p zod@nb77V0C--ys(FaJq|qWEz;_?dA+!I9YSh%*T;f{iVSbI>b;limCI!@2wTa)5T-p zx2YXCcMXgK!`rOjb(+wyNtS1Wz9M0qZa46&v6k^SJeHmjj9#gonDl116Y*R6IS44< z1RB_CpF?4J1STRN`spbS=JhpkDcxawBkk!{F&BNeY z&Jq$YLh$Te`Bh%hi23={G8!3Fy9v4m%szqziqDJ0Xs9W$1f%_(MWRpXZ(ha#t>-<^ z8Sf!4V=2^Q&W++7+3h*yF@V6Ocu_DaY7HoD@}pq&{Y`?Z;oNN!cl}vdL0pr*17maj zD$dsf>!@R?T_f=#mf9wbR9AR6F+jfe7s;n8sEuxR3CZCt5Ioy~~8SQvXokEBY{i yJv&YKiZ&yztPrELy`aCdJd#SNW7X_kwm}o35o;*&)#@9J$!r~)O`_Zr+1dZA=Ia9h diff --git a/results/benchmark_tf_mp4.pickle b/results/benchmark_tf_mp4.pickle index 14074e7261227f4549cd960a3303e373fe88f776..ec570436039bbb60ccbf320574480cca293ed016 100644 GIT binary patch literal 3264 zcmeHKeNa?Y6yHw-1Qn5VO-oV{Y}zzT!@ylpF?mKM6@w0KZ+G9@x8r{KJ`fUgmqpC! zHkRIWHk)Gl`oprZG&N_Mab&ctrEwB4)ESvEDbyJvkufXm-g9B{qjskLmOI0F=XcNV zch0%{-rKWb(;J_s>EI7#g!q7)SFEm}ELcUE_X`-MEap|d1g^K?ya=wxxybBr6A+{O zZjSc`R6!2#KE>+i1H4C&6^zn~eL>giCz+3dpIb!)CfrJN3pIjbb@B?ym+A-zYaPo1 z1S14#Br*?Q)66E8I4hv}L$$0cn zbQ|#^y%TT3D{wBS=S&;1l!eT0wKgPBis7lpNDQZE`$nX%!)0Y#J-mid5(_Pv7In|hUI zmLapE^0G?GK_*2FhA`JmF9dR-2Tg&LA&ry9)1D;Da7PBNxd}_ztVVxm4weeqQgy|PPgD# z%U5G*Nuq^DsiHUN5apns*WC1!N)j#lu-*9_=>L8WxM#RLu9kb1JnuWWEN&Gyl8bTz zcRv^8mU8)A(cS&T=acAw??VRhwpV81ZLdrnePtHw%sO3ue*Pu--O2VhW3kx61L<~A z6em_4nrV*fX?;8jW+6ZrFv~&vPS!N&YrTgor_2$?K zzOJDoo8oz^<|R?R?!wIvP`xp2A55VBCymoHK=%>HI2zxwFEfemhqsIxpt@Jq9~n*g zDZ3iSQe0P(yNBW}KmM8pb^dvNT2?;=dVBT(=S1d2PF%){*wHagg%EH~KoE&v{dfcH+-kxX}Q0zW>VGbiZqT z7V}+`<1|jZUUAt*&*!aChpAnD^u2zH=Xg_l0pFh8M)NC0Xr+@yL$c{*ttv2 zQ`_CeU!(du!^C#LdvecGUjBi|8K|qx&_?;O&&Hku|NF)55PzZYG}yHIcF1qAoQ1gg z)n_PwZ??As^uO#sLvc&}emEzcbImF6Md1|i_nE(eeC4M%fZaB}9(2BFtOIM=y$<4< zcWeMVrL+dDeM1fG7c8p*-rge`^j$Y<6ZrXanNH7w2*ihuT>tO!=Qsx(2jDSvNW|YO>!+1UGn5}G#fbQAmC|FbPR;c$xaujq2rZ#{* zM)K183(bmxo+Nb!K&8R#$gqh)3!qeaDW!%zSYH z%O^f8L7w>IE5W9HFLseicEfui8 z{CNk9`)L)!->G16QYF~VikG0j`~n}up&o(7@9+SAWhtvChgf)g4EbHt!*4Z%Vn|LyqV<{CSIq4v;U@~u#s!>uk z@6+f`0ZR6JWCz(K(|)p3^O9LSKrYRS&+DS&G?}CgY?jt&yLD2jR4;`IX1oP`8c-u= j8bSq4A$=f|gG}Y*Hwc~jhkuVa{DR8E&wwhdIjw&IX3prv delta 918 zcmX9-TSydP7@cWXT~SlSOB)zkv6vtgOK-(2(al{6x?mJhy6QSYX?aWOvMOa@*+VlH zn@XADDm|pGR#Xq$g)|#;U3JOK%kEB^rdzhqLtEPXXBe2n_kHJ_@BBYAcJ=M(ph{(Z zNN8732Tf;kk7oZRffoLruxm2q68Ql-u< z;f-tz8*iYl@vQnff0$1;(9)C1O)2|1P4GI&j0sLPD=5ljGR^7}#+Z8+i)FgzJ)_lX zZKv)|GZaPHdtc0;zsufC`o&GvB0;TZo1GaHgmj(W#YlQnN>nd+7s_OQ)X*oQr+oQu z!E3$v8S~9iBfy^0kEAb{*ESAg;iEYxjGwa(5Hg!bVUV{ZFBppMgVBL7xvtd@Lbu`Q z2zXZa2k0sWT=1c8jUw3nx*=eie+>NY-PmKRZyzQ)Ggb84i6rZj`XF36C%~xojsRh7 zzHHE7eMbb9+cV^V69EB%n)FWag3k+>XGF*+WKICp%Uc~}J}Z`uVozJV+|Q01miCw} z>X?8WAk8=lLifuF2)bk4#L#}F1xSt8O^{&fIK2nxte?V(tVa3D2Z|@5Q~hxRkM+zT zP+)bM@cf(px#6!aa1;G;W3@ClOB>!qVu7x`>Klj;0wOUmrD&IkVDZW1PhzBd75HQ?P(_tphjpfi+kC6|c>RBCfVRX#q6*1OF0rK`j7}(L_puf1CBqtn!a$RMrt~tO%$Bq1q|4n1 G-|-*tbekjq diff --git a/results/benchmark_tf_ogg.pickle b/results/benchmark_tf_ogg.pickle index 3762417974bb7d58b2830c64afa200998872a044..728272318d4d2120db7b217193f4b3081caa3287 100644 GIT binary patch literal 3264 zcmeHKeN0nV6mOwLM9PN@m8cALD6pl|)J&aVi!v8^h=4f1EwA*oud!cweMM^^E1)iB z7jfaLt22%%j%kcTnQZeben&TSn=%~)r%~s0*#{1Tb1LrMb0PC%YqI@qZ^C)!oZtDK zb1v_`cb;Fhc2A@Nekj(>JI%aDTkMhqtwrJ;0!Dqac$uFH*EKk`9GBq~q&Av~5u?OM z@iwO{NKW4F(K>i1ZxtjDMv;^4uHwbhnT{boWg#IL^mw3ISSon5Cf-BxMHrpJ65}){ zv5^3=A5!;T)66QCINs@XxP7cnhu1FKcuC@YB%e_did{~REP0D%5{}dW#HbJH3m`R^ zQ>?&KlqUQZF2E_Al2fg~VmwltWuIH1At5uy6AY(h{!pYW#ksk;*$>GN{&0F3n^w^- zLWQL=Mxl0_38QecSK?)x%ZZUnwvmk!2nwm3bPsdAD@iU}r; z#wC0S7GDdtP?T)3xr`Rc<>0+$x=T}oEqd6VJ_pLb&jFXurE)&5ik$cLTs$|Q>&I1c z0{1-U;$G);T*fnh@cjw4!HFou^28%E{fS4Wf<7`QE7b6s37_Q~YS8I)BV4OBhSSZ> zd0pMf2IATA<;hg4H+Nh;px+P(X!5dNq;^BSy<2awSQ3Yr%mLIsb?Z4bwbypt>7se&9?`^7 zy(63J5BZ(dyQqEGvRnPBT`_ayO{ypOA4E`oUE|(XJrVbuDRGqd)L=i!=Ukf%t#(yb?YlJ&O-R9-GEx=Z7AbE0oh{K~9$CFR{xX;49aL;hykUu0x? z2;~n97<`82pD=ygZHl*yO*>5eKj*tTp{_IIegXRzf1IVfou9VfqInEe)@xL6)c$l4 z><8kmfPL*^=sOU7wFUfZquVG?;N-sVLEp3scyu|ccHs3Dv`~3HYW{aLZ_dkiS}2cy z(VBLuH<#XQ1>B9g7N}=qLmTxg%7hD)PuKDBdEhTpoCjRdnr}gmt*rwb-hL2p$!U8) z#$|2+|CpM6z@O9#`_Y_|z7zacLpHN~F`t3IN#6+e8H?&bZ@9J_^geTU0LCI!p3;{Q3&U+s1H5FIRy7mE`4sKQ~|{@UB``!|V~PkIQ!%-jiPe z{)8?jQ{QL2qX+iXSHkkG`=OH6b&v6%-^B99_$r~#1+!TnwwZp&bK65^<0qG!{1;$ zyL#ed3IW$>+7JGw)o{)O@!7|~-dS)0BO-vR? z!h<)hcY^%a7-dh4IEtsQ!v7GE@@RlihEdpP?U=FJF)-+>crut{F#?5|=pgUGWZooI zqp%X*?xmgyDBNL{jKoQ%{cw}lMrLs*xm0`XwqiO?lSw*+&C*`lZmF0pmWh613w_L* n2i8zd)ngUB9?}O=8Oc;mzCq~J-}^mcbOgxkiAsfn};9$41tbjEn)3*E6aC$!m;jCMz*VvKCaPlqOAXU{>H{&&f~smb{%lg~3NNT!xdNy-q(5cg(iosuEhJ|$?1hBqS+ z228%kvSP9tn*`8kdp4c=1||lEvuDnnk!8JZZwv&x#n0G-_{B{R>}SoKdGo)|V=&)m z?qZO9u}|e=dj=p_aB`o08W5O;UI(e0*;=#>B;HV%_y8=Pu=EC4pL5C)5bbk$ha1U(3gzL{h3VOsl9)WzK zHk0u!$bjI4l^?)9{Idh>kjO7HKY@M9boL3@AyTGqLHc+q`=5Xv_$>A#NdB4q!gpYE z#5X?!iC2DS`3RyTH@|-cwx=oRg?&9J4$s|x1$MwZp@(1t=5T>&$*PWrAOn_#@_;SA zdD{gd|L!W-p+2I@VDXvf7DMEA|3>Gg|QiO<4j()@e sc46nOM~m~g8D+~eTr(;%s=b-KnY|f7X|}X>ibh6xhBrubayO4D08;yFSpWb4 diff --git a/results/benchmark_tf_wav.pickle b/results/benchmark_tf_wav.pickle index c9008cc14eb4a90e3b6a3b81d0577e7d9093e052..0c5c101f19bb3e749c11019fb9dcd6315c276dd9 100644 GIT binary patch literal 3264 zcmeHKdrVVT7;kBdme&METqC|VMI^4%bh@c%888*D;_DA3&ULr+wzpY(+uR4zOAWInbg+u!yi{oV8X zzTfwK=k(lrzXtUUhhjAFLGgZ8aIliOz$bEMr^tFajEvc=%r1fJdOWiP7vof9usH~c z(WJZm-Ga=C0_%~?URGdToG4)wlj-plyu3o4W6-B=Bmo|~SLoo1ILT~hC6X`7CUBc< zIRfE`fR9Fo(QBGnuO?0s6t6#^*6CF|vYQn}HbC;(M6SRmNV2FD$V83|;E2%}vMz9` z$Bd>FXKC%Y9IwHtjF!=tVm=8O9CE9FNoGZvl!Nq=?DJ!$g80N(;tri zzXK?S6>TnZra1CrikM#%ZXhFZb~?R&&V~8K;RZ6WirwwQyfxfF27kbz*fF0GZXl!N zQv`?8?cp&0T)2V8kmD-)Bo_0T;RZQ+1#W);^I72riUKd2*US1bpB-+XSlMZFkh{~t z+2Bk*&xaW(PIkI|HmB(GvWkQ5(von4-fR!v2im{y17& zTun~MAaMtVxe+VD?5OjJG|sB_^+w90kC#T!`AZ8E3{+ouc}panPx&B!gywJ7x#DS@ z#EByb86LsNz^a+RL>>qw|1{!q<&q>tzIkPQ^lk4)UJ7aUo_~7&JR(Y zbH(jA>Q~>mO$YU59=T2ZgO!b1sB_tiL$v--uD6$B{_wlkY2C9ftiK6-pt6m|>1T3p zLA;4C^Z*v`y+Z4-%$RhT#+$P4CFkM=h^yJL7yK%$tu#*l=B<~2ujqhzsOpSr*PLpDdg@P{0Q^W> z4EfJg)dFU%Xac;JRtRak!O~X&Gxk>i|M|oK_(@4kkS8Xm3iu@lUxT>w7ghqF z{^9Gu_a7)$=L6fo-m&rr(APVvfuDW81u)R?jp~060iLdS2Qcn}THl@p4eEZ(+M&j| zc^Py#vjOHaops=!vbYv_^o5EZT^-~*H(aCE=h_W^jh!_R?_%fx@T({60u0!yDfXVM z9Rgifq8ex5Yy;@Zs;en~=3L|r$di3oJx9kpYP=)m&A=xkweHV;tW)Eg>p}nRm+wQ~ z3j8+s<$m1>IPXw5*!zbakT-gHH(+xq2K+8=Klq{MD!})Wy8zRB)%vgGhd@7Q=z#b) zoo%4&v8ccQxS)D|O()g!J<=Nly*^g0FW_o~I(sJzz)v$a050zf0Don8JH)d{BINm` zTRrdnt80M2mh}o?!8~=J^K;5UkJu8x_L8kuOrC_$wZ-y}kcO6zfAF;xL3%l8-uUT! z3OsnzMmxxV)oAZ%_!%sH75)c7>fHja7^BG9<~dKB=Rl*cXGvp@`6v`=r;WUXNxw;| zMv;ZAN1>MaXsp*I+K7>K`(y2joAlxWxim-~cL8muNhckl_R-GwB5F^%_IB?hZ}6#V&d??d}QD8MK(8Il5NwIDfLtQ7Q_WkJr`f9F--f&PZan zW`p=dqc?DN&R(xOTT@zDB6>BlA*F&nS?Y40DRoJrpiLF8YV~PczN)hag*eMQZEs;{ou2IyJzHu|e=fUbVh^WCZ$H zwdy-i{elE2oRov=fIt1fhy7#dv$G_C^Sy6;sMqcECH=f?KG+Mw>ZXxMz9kOhCau*& zxJi5ZAO>Bt3?o3lX$W|>SLHvw{~UGiq30NQYcGN*cbZ><52dM__+z~n=Y~^0^lx*H z+gLuis_pR+5ED_7NS1#c@WR-+12+)9YDe9(F}V?P!#$=DX(UwljzhPt)=zxqFMk8d z@-KeqnxCl~u%2 z8n2|4B@m$17{?&PvA3j-35Q{zoP7xdsnaLW=<|YkApa_XL3KF`z=Lt<>=`!~pzpdK zCc47+|AtB5p7mu@n3M0}!w>{+;9%vWH4)O_SlkjJ1|`^pTE5Yt@=hs2jBR}_5d?hO z2;O{U8GNki#54veMbij=`Db9;*Z_EAR>} Date: Tue, 21 Jan 2020 20:46:54 +0100 Subject: [PATCH 20/25] update readme --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 37b34f1..9e4a33a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The aim of his repository is to evaluate the loading performance of various audi This is relevant for machine learning models that today often process raw (time domain) audio and assembling a batch on the fly. It is therefore important to load the audio as fast as possible. At the same time a library should ideally support a variety of uncompressed and compressed audio formats and also is capable of loading only chunks of audio (seeking). The latter is especially important for models that cannot easily work with samples of variable length (convnets). -## Tested Libraries +## Tested Libraries | Library | Version | Short-Name/Code | Out Type | Supported codecs | Excerpts/Seeking | |-------------------------|---------|-----------------------|-------------------|-------------------| -----------------| @@ -16,16 +16,15 @@ This is relevant for machine learning models that today often process raw (time | [audioread](https://github.com/beetbox/audioread) ([gstreamer](https://gstreamer.freedesktop.org/)) | 2.1.8 | [`ar_gstreamer`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L67) | Numpy Array | all of FFMPEG | ❌ | | [audioread](https://github.com/beetbox/audioread) ([FFMPEG](https://www.ffmpeg.org/)) | 2.1.8 | [`ar_ffmpeg`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L87) | Numpy Array | all of FFMPEG | ❌ | | [librosa](https://librosa.github.io/) | 0.7.2 | [`librosa`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L104) | Numpy Array | relies on audioread | ✅ | -| [tensorflow `tf.io.audio.decode_wav`](https://www.tensorflow.org/api_docs/python/tf/contrib/ffmpeg/decode_audio) | 2.1 | [`tf_decode_wav`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM (only 16 bit) | ❌ | +| [tensorflow `tf.io.audio.decode_wav`](https://www.tensorflow.org/api_docs/python/tf/contrib/ffmpeg/decode_audio) | 2.1.0 | [`tf_decode_wav`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM (only 16 bit) | ❌ | | [tensorflow-io `from_audio`](https://www.tensorflow.org/io/api_docs/python/tfio/v0/IOTensor#from_audio) | 0.11.0 | [`tfio_fromaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L22) | Tensorflow Tensor | PCM, Ogg, Flac | ✅ | - -| [torchaudio](https://github.com/pytorch/audio) | 0.3.2 | [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | - +| [torchaudio](https://github.com/pytorch/audio) (sox) | 0.4.0 | [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | +| [torchaudio](https://github.com/pytorch/audio) (soundfile) | 0.4.0| [`torchaudio`](https://github.com/faroit/python_audio_loading_benchmark/blob/master/loaders.py#L45) | PyTorch Tensor | all codecs supported by Sox | ✅ | ### Not included * __[audioread (coreaudio)](https://github.com/beetbox/audioread/blob/master/audioread/macca.py)__: only available on macOS. * __[madmom](https://github.com/CPJKU/madmom)__: same ffmpeg interface as `ar_ffmpeg`. -* __[pymad](https://github.com/jaqx0r/pymad)__: only support for MP3 +* __[pymad](https://github.com/jaqx0r/pymad)__: only support for MP3, also very slow. * __[python builtin `wave`](https://docs.python.org/3.7/library/wave.html)__: TODO (open for PR) ## Results @@ -112,4 +111,4 @@ The data is generated by using a shell script. To generate the data in the folde ## Contribution -We encourage interested users to contribute to this repository in the issue section and via pull requests. Particularly interesting are notifications of new tools and new versions of existing packages. Since benchmarks are subjective, I (@faroit) will reran the benchmark on our server again. \ No newline at end of file +We encourage interested users to contribute to this repository in the issue section and via pull requests. Particularly interesting are notifications of new tools and new versions of existing packages. Since benchmarks are subjective, I (@faroit) will reran the benchmark on our server again. From 967bece9b8f51dcc5af9a4d93381fb800497afc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 22 Jan 2020 15:16:33 +0100 Subject: [PATCH 21/25] ignore through exception --- benchmark_tf.py | 95 +++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 46 deletions(-) diff --git a/benchmark_tf.py b/benchmark_tf.py index ffc1339..d3597c3 100644 --- a/benchmark_tf.py +++ b/benchmark_tf.py @@ -64,53 +64,56 @@ def _py_loader_function(fp): print("Testing: %s" % lib) for root, dirs, fnames in sorted(os.walk('AUDIO')): for audio_dir in dirs: - duration = int(audio_dir) - audio_files = get_files( - dir=os.path.join(root, audio_dir), - extension=args.ext - ) - - dataset = tf.data.Dataset.from_tensor_slices(audio_files) - if lib in ["tf_decode_wav"]: - dataset = dataset.map( - lambda x: loaders.load_tf_decode_wav(x), - num_parallel_calls=1 + try: + duration = int(audio_dir) + audio_files = get_files( + dir=os.path.join(root, audio_dir), + extension=args.ext ) - elif lib in ["tfio_fromaudio"]: - dataset = dataset.map( - lambda x: loaders.load_tfio_fromaudio(x), - num_parallel_calls=1 - ) - elif lib in ["tfio_fromffmpeg"]: - dataset = dataset.map( - lambda x: loaders.load_tfio_fromffmpeg(x), - num_parallel_calls=1 - ) - else: - loader_function = getattr(loaders, 'load_' + lib) - dataset = dataset.map( - lambda filename: tf.py_function( - _make_py_loader_function(loader_function), - [filename], - [tf.float32] - ), - num_parallel_calls=4 - ) - - dataset = dataset.apply(tf.data.experimental.ignore_errors()) - # dataset = dataset.batch(4) - start = time.time() - for audio in dataset: - value = tf.reduce_max(audio) - - end = time.time() - - store.append( - ext=args.ext, - lib=lib, - duration=duration, - time=float(end-start) / len(audio_files), - ) + dataset = tf.data.Dataset.from_tensor_slices(audio_files) + if lib in ["tf_decode_wav"]: + dataset = dataset.map( + lambda x: loaders.load_tf_decode_wav(x), + num_parallel_calls=1 + ) + elif lib in ["tfio_fromaudio"]: + dataset = dataset.map( + lambda x: loaders.load_tfio_fromaudio(x), + num_parallel_calls=1 + ) + elif lib in ["tfio_fromffmpeg"]: + dataset = dataset.map( + lambda x: loaders.load_tfio_fromffmpeg(x), + num_parallel_calls=1 + ) + else: + loader_function = getattr(loaders, 'load_' + lib) + dataset = dataset.map( + lambda filename: tf.py_function( + _make_py_loader_function(loader_function), + [filename], + [tf.float32] + ), + num_parallel_calls=4 + ) + + # dataset = dataset.apply(tf.data.experimental.ignore_errors()) + # dataset = dataset.batch(4) + start = time.time() + + for audio in dataset: + value = tf.reduce_max(audio) + + end = time.time() + + store.append( + ext=args.ext, + lib=lib, + duration=duration, + time=float(end-start) / len(audio_files), + ) + except: + continue store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("tf", args.ext)) From 493d4a49560e949ee51392998446dc4858965bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 22 Jan 2020 15:17:39 +0100 Subject: [PATCH 22/25] do not copy numpy data again --- benchmark_pytorch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark_pytorch.py b/benchmark_pytorch.py index f44ad3a..cbb8a1d 100644 --- a/benchmark_pytorch.py +++ b/benchmark_pytorch.py @@ -38,7 +38,7 @@ def __init__( def __getitem__(self, index): audio = self.loader_function(self.audio_files[index]) - return torch.FloatTensor(audio).view(1, 1, -1) + return torch.from_numpy(audio).view(1, 1, -1) def __len__(self): return len(self.audio_files) From 48b9b21b7d7d59cdd8d3491a15fa405f90ce1362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 22 Jul 2020 15:54:08 +0200 Subject: [PATCH 23/25] update torchaudio --- requirements.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index bd8d00e..be391f4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,15 +3,14 @@ tensorflow==2.1.0 audioread==2.1.8 librosa==0.7.2 SoundFile==0.10.2 -torch==1.4.0 +torch==1.5.1 pydub==0.23.1 sox==1.3.7 -torchaudio==0.4.0 +torchaudio==0.5.1 aubio==0.4.9 -tensorflow_io==0.11.0 +tensorflow_io==0.12.0 PyGObject seaborn pandas ipython -torchvision cffi From ce5929f31b704d07f062addf34d954255eea7445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 22 Jul 2020 15:54:41 +0200 Subject: [PATCH 24/25] update librosa to 0.8.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index be391f4..d78db3c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ scipy==1.4.1 tensorflow==2.1.0 audioread==2.1.8 -librosa==0.7.2 +librosa==0.8.0 SoundFile==0.10.2 torch==1.5.1 pydub==0.23.1 From 503ef5e01fb0dfe37b914c7d5a29b4fa9ed0ba4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian-Robert=20St=C3=B6ter?= Date: Wed, 22 Jul 2020 16:49:11 +0200 Subject: [PATCH 25/25] first draft of timeit loading --- benchmark_np.py | 63 +++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/benchmark_np.py b/benchmark_np.py index 9b0a82e..d4492d8 100644 --- a/benchmark_np.py +++ b/benchmark_np.py @@ -1,13 +1,11 @@ -import matplotlib -matplotlib.use('Agg') import os import os.path import random -import time +import timeit import argparse import utils -import loaders import numpy as np +import functools def get_files(dir, extension): @@ -26,22 +24,29 @@ class AudioFolder(object): def __init__( self, root, - download=True, - extension='wav', - lib="librosa", + extension='wav' ): self.root = os.path.expanduser(root) self.data = [] self.audio_files = get_files(dir=self.root, extension=extension) - self.loader_function = getattr(loaders, lib) def __getitem__(self, index): - return self.loader_function(self.audio_files[index]) + return self.audio_files[index] def __len__(self): return len(self.audio_files) +def test_np_loading(fp, lib): + import loaders + load_function = getattr(loaders, 'load_' + lib) + audio = load_function(fp) + if np.max(audio) > 0: + return True + else: + return False + + if __name__ == "__main__": parser = argparse.ArgumentParser(description='Process some integers.') @@ -74,28 +79,24 @@ def __len__(self): print("Testing: %s" % lib) for root, dirs, fnames in sorted(os.walk('AUDIO')): for audio_dir in dirs: - try: - duration = int(audio_dir) - dataset = AudioFolder( - os.path.join(root, audio_dir), - lib='load_' + lib, - extension=args.ext + duration = int(audio_dir) + dataset = AudioFolder( + os.path.join(root, audio_dir), + extension=args.ext + ) + + # for fp in dataset.audio_files: + for fp in dataset.audio_files: + time = timeit.timeit( + functools.partial(test_np_loading, fp, lib), + number=10 ) - start = time.time() - - for fp in dataset.audio_files: - audio = dataset.loader_function(fp) - np.max(audio) - - end = time.time() - store.append( - ext=args.ext, - lib=lib, - duration=duration, - time=float(end-start) / len(dataset), - ) - except: - continue + store.append( + ext=args.ext, + lib=lib, + duration=duration, + time=time, + ) - store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("np", args.ext)) \ No newline at end of file + store.df.to_pickle("results/benchmark_%s_%s.pickle" % ("np", args.ext))