voice_audio_multi/tests/glm_tts/glm_tts_flow_probe.cpp
Fabio c36510c21e
Some checks failed
Linux Build / Linux cpu (push) Has been cancelled
Linux Build / Linux cpu-clang (push) Has been cancelled
Linux Build / Linux vulkan (push) Has been cancelled
mac-build / macOS CPU (push) Has been cancelled
Nix Build / Nix (cpu) (push) Has been cancelled
Nix Build / Nix (vulkan) (push) Has been cancelled
windows-build / Windows CPU (push) Has been cancelled
Initial import: audio.cpp with Orange Pi documentation
2026-11-04 19:05:22 +01:00

52 lines
1.9 KiB
C++

#include "engine/community_models/glm_tts/assets.h"
#include "engine/community_models/glm_tts/flow.h"
#include <cmath>
#include <exception>
#include <iostream>
int main(int argc, char ** argv) try {
if (argc != 2) {
std::cerr << "usage: glm_tts_flow_probe <model-path>\n";
return 2;
}
auto assets = engine::models::glm_tts::load_glm_tts_assets(argv[1]);
const auto config = assets->config.flow;
engine::models::glm_tts::GlmTTSFlowRuntime flow(
assets->flow_weights,
{engine::core::BackendType::Cpu, 0, 8},
engine::assets::TensorStorageType::Native,
config);
engine::models::glm_tts::GlmTTSFlowInput input;
input.speech_tokens = {29252, 4906, 833, 15564, 12971};
input.speaker_embedding.resize(192);
for (size_t i = 0; i < input.speaker_embedding.size(); ++i) {
input.speaker_embedding[i] =
std::sin(static_cast<float>(i + 1) * 0.03125F);
}
const int64_t frames = static_cast<int64_t>(
static_cast<double>(input.speech_tokens.size()) /
static_cast<double>(config.input_frame_rate) *
static_cast<double>(config.mel_framerate));
input.initial_noise.resize(
static_cast<size_t>(frames * config.mel_dim));
for (size_t i = 0; i < input.initial_noise.size(); ++i) {
input.initial_noise[i] =
std::sin(static_cast<float>(i + 1) * 0.017F);
}
input.inference_steps = 1;
const auto output = flow.generate(input);
std::cout << "{\"frames\":" << output.frames << ",\"values\":[";
const size_t count = std::min<size_t>(output.mel.size(), 16);
for (size_t i = 0; i < count; ++i) {
if (i != 0) {
std::cout << ',';
}
std::cout << output.mel[i];
}
std::cout << "]}\n";
return 0;
} catch (const std::exception & error) {
std::cerr << "glm_tts_flow_probe failed: " << error.what() << '\n';
return 1;
}