| 133 | const auto pcm = static_cast<int16_t>(std::lrint(sample * 32767.0F)); |
| 134 | append_bytes(&pcm, sizeof(pcm)); |
| 135 | } |
| 136 | return out; |
| 137 | } |
| 138 | |
| 139 | std::vector<uint8_t> encode_pcm16_samples(const engine::runtime::AudioBuffer & audio) { |
| 140 | if (audio.sample_rate <= 0) { |
| 141 | throw std::runtime_error("audio output sample rate must be positive"); |
| 142 | } |
| 143 | if (audio.channels <= 0) { |
| 144 | throw std::runtime_error("audio output channel count must be positive"); |
| 145 | } |
| 146 | if (audio.samples.size() % static_cast<size_t>(audio.channels) != 0) { |
| 147 | throw std::runtime_error("audio output sample count must be divisible by channel count"); |
| 148 | } |
| 149 | |
| 150 | std::vector<uint8_t> out; |
| 151 | out.reserve(audio.samples.size() * sizeof(int16_t)); |
| 152 | auto append_bytes = [&](const void * data, size_t size) { |
| 153 | const auto * bytes = static_cast<const uint8_t *>(data); |
no test coverage detected