#include "MultiBandMelGAN.h" #include #define IF_EXCEPT(cond,ex) if (cond){throw std::invalid_argument(ex);} bool MultiBandMelGAN::Initialize(const std::string & VocoderPath) { try { MelGAN = new Model(VocoderPath); } catch (...) { MelGAN = nullptr; return false; } return true; } TFTensor MultiBandMelGAN::DoInference(const TFTensor& InMel) { IF_EXCEPT(!MelGAN, "Tried to infer MB-MelGAN on uninitialized model!!!!") // Convenience reference so that we don't have to constantly derefer pointers. Model& Mdl = *MelGAN; Tensor input_mels{ Mdl,"serving_default_mels" }; input_mels.set_data(InMel.Data, InMel.Shape); Tensor out_audio{ Mdl,"StatefulPartitionedCall" }; MelGAN->run(input_mels, out_audio); TFTensor RetTensor = VoxUtil::CopyTensor(out_audio); return RetTensor; } MultiBandMelGAN::MultiBandMelGAN() { MelGAN = nullptr; } MultiBandMelGAN::~MultiBandMelGAN() { if (MelGAN) delete MelGAN; }