From 69070418bf9c817a91a23b78ee6a8fe39fdb0747 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Fri, 5 Feb 2021 04:10:15 +0000 Subject: [PATCH 1/5] Add example using libtorchaudio --- examples/libtorchaudio/.gitignore | 3 + examples/libtorchaudio/CMakeLists.txt | 20 ++++++ .../libtorchaudio/create_jittable_pipeline.py | 63 ++++++++++++++++++ examples/libtorchaudio/data/README.md | 5 ++ examples/libtorchaudio/data/input.wav | Bin 0 -> 108844 bytes examples/libtorchaudio/data/rir.wav | Bin 0 -> 9338 bytes examples/libtorchaudio/main.cpp | 21 ++++++ examples/libtorchaudio/run.sh | 24 +++++++ torchaudio/csrc/CMakeLists.txt | 1 + 9 files changed, 137 insertions(+) create mode 100644 examples/libtorchaudio/.gitignore create mode 100644 examples/libtorchaudio/CMakeLists.txt create mode 100755 examples/libtorchaudio/create_jittable_pipeline.py create mode 100644 examples/libtorchaudio/data/README.md create mode 100644 examples/libtorchaudio/data/input.wav create mode 100644 examples/libtorchaudio/data/rir.wav create mode 100644 examples/libtorchaudio/main.cpp create mode 100755 examples/libtorchaudio/run.sh diff --git a/examples/libtorchaudio/.gitignore b/examples/libtorchaudio/.gitignore new file mode 100644 index 0000000000..f03338dc7d --- /dev/null +++ b/examples/libtorchaudio/.gitignore @@ -0,0 +1,3 @@ +build +data/output.wav +data/pipeline.zip diff --git a/examples/libtorchaudio/CMakeLists.txt b/examples/libtorchaudio/CMakeLists.txt new file mode 100644 index 0000000000..24e670a26a --- /dev/null +++ b/examples/libtorchaudio/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.5) + +project(libtorchaudio-cpp-example) + +SET(BUILD_LIBTORCHAUDIO ON CACHE BOOL "Build libtorchaudio") +SET(BUILD_SOX ON CACHE BOOL "Build libsox into libtorchaudio") + +SET(BUILD_KALDI OFF CACHE BOOL "Build Kaldi into libtorchaudio") +SET(BUILD_TRANSDUCER OFF CACHEBOOL "Build Python binding") +SET(BUILD_TORCHAUDIO_PYTHON_EXTENSION OFF CACHEBOOL "Build Python binding") + +find_package(Torch REQUIRED) +message("libtorchaudio CMakeLists: ${TORCH_CXX_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") + +add_subdirectory(../.. libtorchaudio) + +add_executable(main main.cpp) +target_link_libraries(main "${TORCH_LIBRARIES}" "${TORCHAUDIO_LIBRARY}") +set_property(TARGET main PROPERTY CXX_STANDARD 14) diff --git a/examples/libtorchaudio/create_jittable_pipeline.py b/examples/libtorchaudio/create_jittable_pipeline.py new file mode 100755 index 0000000000..70395266c0 --- /dev/null +++ b/examples/libtorchaudio/create_jittable_pipeline.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +""" +Create a data preprocess pipeline that can be run with libtorchaudio +""" +import os +import argparse + +import torch +import torchaudio + + +def _get_path(*paths): + return os.path.join(os.path.dirname(__file__), *paths) + + +def _load_rir(): + path = _get_path("data", "rir.wav") + waveform, sample_rate = torchaudio.load(path) + rir = torch.flip(waveform, [1]) + return rir, sample_rate + + +class Pipeline(torch.nn.Module): + def __init__(self): + super().__init__() + rir, sample_rate = _load_rir() + self.register_buffer('rir', rir) + self.sample_rate: int = sample_rate + + def forward(self, input_path: str, output_path: str): + torchaudio.sox_effects.init_sox_effects() + waveform, _ = torchaudio.sox_effects.apply_effects_file( + input_path, effects=[["rate", str(self.sample_rate)]]) + + waveform = torch.nn.functional.pad(waveform, (self.rir.shape[1]-1, 0)) + augmented = torch.nn.functional.conv1d(waveform[None, ...], self.rir[None, ...])[0] + + torchaudio.save(output_path, augmented, self.sample_rate) + + +def _create_jit_pipeline(output_path): + module = torch.jit.script(Pipeline()) + print(module.code) + module.save(output_path) + + +def _parse_args(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--output-path", + default=_get_path("data", "pipeline.zip"), + help="Output JIT file." + ) + return parser.parse_args() + + +def _main(): + args = _parse_args() + _create_jit_pipeline(args.output_path) + + +if __name__ == '__main__': + _main() diff --git a/examples/libtorchaudio/data/README.md b/examples/libtorchaudio/data/README.md new file mode 100644 index 0000000000..6e2ff19097 --- /dev/null +++ b/examples/libtorchaudio/data/README.md @@ -0,0 +1,5 @@ +The files in this directory are originated from [VOiCES](https://iqtlabs.github.io/voices/) dataset, which is licensed under Creative Commos BY 4.0. They are modified to fit into the tutorial. + +* `input.wav`: `VOiCES_devkit/source-16k/train/sp0307/Lab41-SRI-VOiCES-src-sp0307-ch127535-sg0042.wav` + +* `rir.wav`: `VOiCES_devkit/distant-16k/room-response/rm1/impulse/Lab41-SRI-VOiCES-rm1-impulse-mc01-stu-clo.wav` diff --git a/examples/libtorchaudio/data/input.wav b/examples/libtorchaudio/data/input.wav new file mode 100644 index 0000000000000000000000000000000000000000..004a33532ea2547c10c0074b967733ba91edd9f8 GIT binary patch literal 108844 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 literal 0 HcmV?d00001 diff --git a/examples/libtorchaudio/data/rir.wav b/examples/libtorchaudio/data/rir.wav new file mode 100644 index 0000000000000000000000000000000000000000..c9e6d836818ff5ea8cfaaadeab69316561b32465 GIT binary patch literal 9338 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 + +int main(int argc, char* argv[]) { + if (argc !=4) { + std::cerr << "Usage: " << argv[0] << " " << std::endl; + return -1; + } + + torch::jit::script::Module module; + std::cout << "Loading module from: " << argv[0] << std::endl; + try { + module = torch::jit::load(argv[1]); + } catch (const c10::Error &error) { + std::cerr << "Failed to load the module:" << error.what() << std::endl; + return -1; + } + + std::cout << "Performing the process ..." << std::endl; + module.forward({c10::IValue(argv[2]), c10::IValue(argv[3])}); + std::cout << "Done." << std::endl; +} diff --git a/examples/libtorchaudio/run.sh b/examples/libtorchaudio/run.sh new file mode 100755 index 0000000000..a55614e909 --- /dev/null +++ b/examples/libtorchaudio/run.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -eux + +this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +build_dir="${this_dir}/build" +data_dir="${this_dir}/data" +jit_file="${data_dir}/pipeline.zip" +input_file="${data_dir}/input.wav" +output_file="${data_dir}/output.wav" + +cd "${this_dir}" +python create_jittable_pipeline.py + +mkdir -p "${build_dir}" +cd "${build_dir}" +cmake -GNinja \ + -DCMAKE_PREFIX_PATH="$(python -c 'import torch;print(torch.utils.cmake_prefix_path)')" \ + -DBUILD_SOX=ON \ + -DBUILD_KALDI=OFF \ + .. +cmake --build . --target main +./main "${jit_file}" "${input_file}" "${output_file}" diff --git a/torchaudio/csrc/CMakeLists.txt b/torchaudio/csrc/CMakeLists.txt index fbad3307ae..1241f8e1a0 100644 --- a/torchaudio/csrc/CMakeLists.txt +++ b/torchaudio/csrc/CMakeLists.txt @@ -49,6 +49,7 @@ if(BUILD_LIBTORCHAUDIO) target_link_libraries( libtorchaudio + ${TORCH_LIBRARIES} ${TORCHAUDIO_THIRD_PARTIES} ) From 3bd3d821fc1896de20c9d5f155c7938aab8bf624 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:11:26 +0000 Subject: [PATCH 2/5] Update documents --- examples/libtorchaudio/README.md | 11 ++++ .../libtorchaudio/create_jittable_pipeline.py | 54 +++++++++++++------ 2 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 examples/libtorchaudio/README.md diff --git a/examples/libtorchaudio/README.md b/examples/libtorchaudio/README.md new file mode 100644 index 0000000000..b7fe8ab2d5 --- /dev/null +++ b/examples/libtorchaudio/README.md @@ -0,0 +1,11 @@ +# Example usage: libtorchaudio + +This example demonstrates how you can use torchaudio's I/O features in C++ application, in addition to PyTorch's operations. + +To try this example, simply run `./run.sh`. This script will + +1. Cretae an audio preprocessing pipeline with TorchScript and dump it to the file. +2. Build the application using `libtorch` and `libtorchaudio`. +3. Execute the preprocessing pipeline on the example audio. + +The detail of the preprocessing pipeline can be found in [`create_jittable_pipeline.py`](./create_jittable_pipeline.py). diff --git a/examples/libtorchaudio/create_jittable_pipeline.py b/examples/libtorchaudio/create_jittable_pipeline.py index 70395266c0..14a7eefd50 100755 --- a/examples/libtorchaudio/create_jittable_pipeline.py +++ b/examples/libtorchaudio/create_jittable_pipeline.py @@ -9,41 +9,61 @@ import torchaudio -def _get_path(*paths): - return os.path.join(os.path.dirname(__file__), *paths) - - -def _load_rir(): - path = _get_path("data", "rir.wav") - waveform, sample_rate = torchaudio.load(path) - rir = torch.flip(waveform, [1]) - return rir, sample_rate - - class Pipeline(torch.nn.Module): + """Example audio process pipeline. + + This example load waveform from a file then apply effects and save it to a file. + """ def __init__(self): super().__init__() rir, sample_rate = _load_rir() self.register_buffer('rir', rir) - self.sample_rate: int = sample_rate + self.rir_sample_rate: int = sample_rate def forward(self, input_path: str, output_path: str): torchaudio.sox_effects.init_sox_effects() - waveform, _ = torchaudio.sox_effects.apply_effects_file( - input_path, effects=[["rate", str(self.sample_rate)]]) - waveform = torch.nn.functional.pad(waveform, (self.rir.shape[1]-1, 0)) - augmented = torch.nn.functional.conv1d(waveform[None, ...], self.rir[None, ...])[0] + # 1. load audio + waveform, sample_rate = torchaudio.load(input_path) + + # 2. Add background noise + alpha = 0.01 + waveform = alpha * torch.randn_like(waveform) + (1 - alpha) * waveform - torchaudio.save(output_path, augmented, self.sample_rate) + # 3. Reample the RIR filter to much the audio sample rate + rir, _ = torchaudio.sox_effects.apply_effects_tensor( + self.rir, self.rir_sample_rate, effects=[["rate", str(sample_rate)]]) + rir = rir / torch.norm(rir, p=2) + rir = torch.flip(rir, [1]) + + # 4. Apply RIR filter + waveform = torch.nn.functional.pad(waveform, (rir.shape[1] - 1, 0)) + waveform = torch.nn.functional.conv1d(waveform[None, ...], rir[None, ...])[0] + + # Save + torchaudio.save(output_path, waveform, sample_rate) def _create_jit_pipeline(output_path): module = torch.jit.script(Pipeline()) + print("*" * 40) + print("* Pipeline code") + print("*" * 40) + print() print(module.code) + print("*" * 40) module.save(output_path) +def _get_path(*paths): + return os.path.join(os.path.dirname(__file__), *paths) + + +def _load_rir(): + path = _get_path("data", "rir.wav") + return torchaudio.load(path) + + def _parse_args(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( From 8a5a97fed62915aa23de7ca75e07541dba591757 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:22:12 +0000 Subject: [PATCH 3/5] Fix typo --- examples/libtorchaudio/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/libtorchaudio/CMakeLists.txt b/examples/libtorchaudio/CMakeLists.txt index 24e670a26a..f21ae5ddb3 100644 --- a/examples/libtorchaudio/CMakeLists.txt +++ b/examples/libtorchaudio/CMakeLists.txt @@ -6,7 +6,7 @@ SET(BUILD_LIBTORCHAUDIO ON CACHE BOOL "Build libtorchaudio") SET(BUILD_SOX ON CACHE BOOL "Build libsox into libtorchaudio") SET(BUILD_KALDI OFF CACHE BOOL "Build Kaldi into libtorchaudio") -SET(BUILD_TRANSDUCER OFF CACHEBOOL "Build Python binding") +SET(BUILD_TRANSDUCER OFF CACHE BOOL "Build Python binding") SET(BUILD_TORCHAUDIO_PYTHON_EXTENSION OFF CACHEBOOL "Build Python binding") find_package(Torch REQUIRED) From c0c92cd5a419db9380f8237b47f2491e691948ef Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Thu, 4 Mar 2021 03:22:05 +0000 Subject: [PATCH 4/5] Fix typo --- examples/libtorchaudio/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/libtorchaudio/CMakeLists.txt b/examples/libtorchaudio/CMakeLists.txt index f21ae5ddb3..264949bc12 100644 --- a/examples/libtorchaudio/CMakeLists.txt +++ b/examples/libtorchaudio/CMakeLists.txt @@ -7,7 +7,7 @@ SET(BUILD_SOX ON CACHE BOOL "Build libsox into libtorchaudio") SET(BUILD_KALDI OFF CACHE BOOL "Build Kaldi into libtorchaudio") SET(BUILD_TRANSDUCER OFF CACHE BOOL "Build Python binding") -SET(BUILD_TORCHAUDIO_PYTHON_EXTENSION OFF CACHEBOOL "Build Python binding") +SET(BUILD_TORCHAUDIO_PYTHON_EXTENSION OFF CACHE BOOL "Build Python binding") find_package(Torch REQUIRED) message("libtorchaudio CMakeLists: ${TORCH_CXX_FLAGS}") From dc4d8c4045e2affd5ec411c791c17551a48b9d11 Mon Sep 17 00:00:00 2001 From: moto <855818+mthrok@users.noreply.github.com> Date: Wed, 3 Mar 2021 19:23:07 -0800 Subject: [PATCH 5/5] fix typo --- examples/libtorchaudio/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/libtorchaudio/README.md b/examples/libtorchaudio/README.md index b7fe8ab2d5..10f1228894 100644 --- a/examples/libtorchaudio/README.md +++ b/examples/libtorchaudio/README.md @@ -4,8 +4,8 @@ This example demonstrates how you can use torchaudio's I/O features in C++ appli To try this example, simply run `./run.sh`. This script will -1. Cretae an audio preprocessing pipeline with TorchScript and dump it to the file. +1. Create an audio preprocessing pipeline with TorchScript and dump it to a file. 2. Build the application using `libtorch` and `libtorchaudio`. -3. Execute the preprocessing pipeline on the example audio. +3. Execute the preprocessing pipeline on an example audio. The detail of the preprocessing pipeline can be found in [`create_jittable_pipeline.py`](./create_jittable_pipeline.py).