| 112 | } |
| 113 | |
| 114 | AudioUtilityBatchResult denoise_directory( |
| 115 | const std::filesystem::path & input_dir, |
| 116 | const std::filesystem::path & output_dir, |
| 117 | std::string_view model, |
| 118 | const AudioUtilityPaths & paths) { |
| 119 | if (model != "deepfilternet2" && model != "rnnoise" && model != "zipenhancer") { |
| 120 | throw_unsupported_model("denoise", model, "deepfilternet2, rnnoise, zipenhancer"); |
| 121 | } |
| 122 | AudioUtilityBatchResult result; |
| 123 | if (model == "deepfilternet2") { |
| 124 | const auto denoiser = DeepFilterNet2Model::load_from_directory(require_model_dir(paths, "deepfilternet2"), paths.backend); |
| 125 | for (const auto & input_file : sorted_wav_files(input_dir)) { |
| 126 | const auto output_file = output_path_for(input_file, output_dir, "_deepfilternet2"); |
| 127 | const auto input = read_mono_resampled(input_file, 48000); |
| 128 | const auto output = denoiser.run_mono_48k(input); |
| 129 | write_pcm16_wav(output_file, output.sample_rate, 1, output.samples); |
| 130 | result.outputs.push_back(output_file); |
| 131 | } |
| 132 | return result; |
| 133 | } |
| 134 | if (model == "zipenhancer") { |
| 135 | const auto denoiser = ZipEnhancerModel::load_from_directory(require_model_dir(paths, "zipenhancer"), paths.backend); |
| 136 | for (const auto & input_file : sorted_wav_files(input_dir)) { |
| 137 | const auto output_file = output_path_for(input_file, output_dir, "_zipenhancer"); |
| 138 | const auto input = read_mono_resampled(input_file, 16000); |
| 139 | const auto output = denoiser.denoise_mono_16k(input); |
| 140 | write_pcm16_wav(output_file, output.sample_rate, 1, output.samples); |
| 141 | result.outputs.push_back(output_file); |
| 142 | } |
| 143 | return result; |
| 144 | } |
| 145 | const auto denoiser = RnnoiseModel::load_from_safetensors( |
| 146 | require_model_dir(paths, "rnnoise") / "rnnoise10Gb_15.safetensors", |
| 147 | paths.backend); |
| 148 | for (const auto & input_file : sorted_wav_files(input_dir)) { |
| 149 | const auto output_file = output_path_for(input_file, output_dir, "_rnnoise"); |
| 150 | const auto input = read_mono_resampled(input_file, 48000); |
| 151 | const auto output = denoiser.process_mono_48k(input); |
| 152 | write_pcm16_wav(output_file, output.sample_rate, 1, output.samples); |
| 153 | result.outputs.push_back(output_file); |
| 154 | } |
| 155 | return result; |
| 156 | } |
| 157 | |
| 158 | void super_resolve_file( |
| 159 | const std::filesystem::path & input_wav, |