Files
2026-08-28 10:10:18 +02:00

66 lines
1.1 KiB
C++

#pragma once
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
#include <unitree/robot/r1/audio/audio_client.hpp>
namespace r1_voice {
struct TtsConfig {
std::string piper_command = "python3 -m piper";
std::string model =
"/home/jvizner/esarobotech/piper/cs_medium.onnx";
std::string output_wav =
"/tmp/r1_tts.wav";
int volume = 100;
std::string app_name = "r1_voice";
};
class TextToSpeech {
public:
explicit TextToSpeech(TtsConfig config);
bool init(
const std::string& network_interface
);
bool speak(
const std::string& text
);
private:
TtsConfig config_;
std::unique_ptr<
unitree::robot::r1::AudioClient
> client_;
bool initialized_ = false;
bool synthesize(
const std::string& text,
const std::string& wav_path
);
bool readWavPcm(
const std::string& wav_path,
std::vector<uint8_t>& pcm,
uint32_t& sample_rate,
uint16_t& channels,
uint16_t& bits_per_sample
);
bool playPcm(
const std::vector<uint8_t>& pcm
);
};
} // namespace r1_voice