File size: 2,337 Bytes
d5ee97c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
#pragma once
/*
VoxCommon.hpp : Defines common data structures and constants to be used with TensorVox
*/
#include <iostream>
#include <vector>
#include "ext/AudioFile.hpp"
#include "ext/CppFlow/include/Tensor.h"
#define IF_RETURN(cond,ret) if (cond){return ret;}
template<typename T>
struct TFTensor {
std::vector<T> Data;
std::vector<int64_t> Shape;
size_t TotalSize;
};
namespace ETTSRepo {
enum Enum{
TensorflowTTS = 0,
MozillaTTS // not implemented yet
};
}
namespace EText2MelModel {
enum Enum{
FastSpeech2 = 0,
Tacotron2 // not implemented yet
};
}
namespace EVocoderModel{
enum Enum{
MultiBandMelGAN = 0
};
}
namespace ETTSLanguage{
enum Enum{
English = 0,
Spanish
};
}
struct ArchitectureInfo{
int Repo;
int Text2Mel;
int Vocoder;
// String versions of the info, for displaying.
// We want boilerplate int index to str conversion code to be low.
std::string s_Repo;
std::string s_Text2Mel;
std::string s_Vocoder;
};
struct VoiceInfo{
std::string Name;
std::string Author;
int32_t Version;
std::string Description;
ArchitectureInfo Architecture;
std::string Note;
uint32_t SampleRate;
uint32_t Language;
std::string s_Language;
std::string EndPadding;
};
namespace VoxUtil {
VoiceInfo ReadModelJSON(const std::string& InfoFilename);
template<typename F>
TFTensor<F> CopyTensor(Tensor& InTens)
{
std::vector<F> Data = InTens.get_data<F>();
std::vector<int64_t> Shape = InTens.get_shape();
size_t TotalSize = 1;
for (const int64_t& Dim : Shape)
TotalSize *= Dim;
return TFTensor<F>{Data, Shape, TotalSize};
}
template<typename V>
bool FindInVec(V In, const std::vector<V>& Vec, size_t& OutIdx, size_t start = 0) {
for (size_t xx = start;xx < Vec.size();xx++)
{
if (Vec[xx] == In) {
OutIdx = xx;
return true;
}
}
return false;
}
template<typename V, typename X>
bool FindInVec2(V In, const std::vector<X>& Vec, size_t& OutIdx, size_t start = 0) {
for (size_t xx = start;xx < Vec.size();xx++)
{
if (Vec[xx] == In) {
OutIdx = xx;
return true;
}
}
return false;
}
void ExportWAV(const std::string& Filename, const std::vector<float>& Data, unsigned SampleRate);
}
|