Path: blob/master/examples/cppwin/TensorflowTTSCppInference/VoxCommon.hpp
1559 views
#pragma once1/*2VoxCommon.hpp : Defines common data structures and constants to be used with TensorVox3*/4#include <iostream>5#include <vector>6#include "ext/AudioFile.hpp"7#include "ext/CppFlow/include/Tensor.h"89#define IF_RETURN(cond,ret) if (cond){return ret;}10111213template<typename T>14struct TFTensor {15std::vector<T> Data;16std::vector<int64_t> Shape;17size_t TotalSize;1819};202122namespace ETTSRepo {23enum Enum{24TensorflowTTS = 0,25MozillaTTS // not implemented yet26};2728}29namespace EText2MelModel {30enum Enum{31FastSpeech2 = 0,32Tacotron2 // not implemented yet33};3435}3637namespace EVocoderModel{38enum Enum{39MultiBandMelGAN = 040};41}4243namespace ETTSLanguage{44enum Enum{45English = 0,46Spanish47};4849}50515253struct ArchitectureInfo{54int Repo;55int Text2Mel;56int Vocoder;5758// String versions of the info, for displaying.59// We want boilerplate int index to str conversion code to be low.60std::string s_Repo;61std::string s_Text2Mel;62std::string s_Vocoder;6364};65struct VoiceInfo{66std::string Name;67std::string Author;68int32_t Version;69std::string Description;70ArchitectureInfo Architecture;71std::string Note;7273uint32_t SampleRate;7475uint32_t Language;76std::string s_Language;7778std::string EndPadding;79808182};8384namespace VoxUtil {8586VoiceInfo ReadModelJSON(const std::string& InfoFilename);878889template<typename F>90TFTensor<F> CopyTensor(Tensor& InTens)91{92std::vector<F> Data = InTens.get_data<F>();93std::vector<int64_t> Shape = InTens.get_shape();94size_t TotalSize = 1;95for (const int64_t& Dim : Shape)96TotalSize *= Dim;9798return TFTensor<F>{Data, Shape, TotalSize};99100101}102103template<typename V>104bool FindInVec(V In, const std::vector<V>& Vec, size_t& OutIdx, size_t start = 0) {105for (size_t xx = start;xx < Vec.size();xx++)106{107if (Vec[xx] == In) {108OutIdx = xx;109return true;110111}112113}114115116return false;117118}119template<typename V, typename X>120bool FindInVec2(V In, const std::vector<X>& Vec, size_t& OutIdx, size_t start = 0) {121for (size_t xx = start;xx < Vec.size();xx++)122{123if (Vec[xx] == In) {124OutIdx = xx;125return true;126127}128129}130131132return false;133134}135136void ExportWAV(const std::string& Filename, const std::vector<float>& Data, unsigned SampleRate);137}138139140