File size: 1,045 Bytes
de996a0 | 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 | #include "codec_decode.h"
#include <cstring>
#include <stdexcept>
namespace moss {
CodecDecoder::CodecDecoder(const std::string& axmodel_path) : runner_(axmodel_path) {
const auto in_sizes = runner_.input_sizes();
const auto out_sizes = runner_.output_sizes();
if (in_sizes.size() != 1 || out_sizes.size() != 1) {
throw std::runtime_error("codec decoder expects 1 input and 1 output");
}
input_bytes_ = in_sizes[0];
output_bytes_ = out_sizes[0];
}
std::vector<float> CodecDecoder::decode(const std::vector<float>& codes_emb) {
if (codes_emb.size() * sizeof(float) != input_bytes_) {
throw std::runtime_error("codes_emb size mismatch");
}
auto outputs = runner_.run({{codes_emb.data(), input_bytes_}});
if (outputs[0].size() != output_bytes_) {
throw std::runtime_error("output size mismatch");
}
std::vector<float> waveform(output_bytes_ / sizeof(float));
std::memcpy(waveform.data(), outputs[0].data(), output_bytes_);
return waveform;
}
} // namespace moss
|