Print informative error messages for sherpa-onnx-alsa on errors. (#486)

This commit is contained in:
Fangjun Kuang
2023-12-15 11:10:39 +08:00
committed by GitHub
parent 33c03f78b2
commit ad72e7afc3
2 changed files with 19 additions and 1 deletions

View File

@@ -144,6 +144,24 @@ const std::vector<float> &Alsa::Read(int32_t num_samples) {
// count is in frames. Each frame contains actual_channel_count_ samples // count is in frames. Each frame contains actual_channel_count_ samples
int32_t count = snd_pcm_readi(capture_handle_, samples_.data(), num_samples); int32_t count = snd_pcm_readi(capture_handle_, samples_.data(), num_samples);
if (count == -EPIPE) {
static int32_t n = 0;
if (++n > 5) {
fprintf(
stderr,
"Too many overruns. It is very likely that the RTF on your board is "
"larger than 1. Please use ./bin/sherpa-onnx to compute the RTF.\n");
exit(-1);
}
fprintf(stderr, "XRUN.\n");
snd_pcm_prepare(capture_handle_);
static std::vector<float> tmp;
return tmp;
} else if (count < 0) {
fprintf(stderr, "Can't read PCM device: %s\n", snd_strerror(count));
exit(-1);
}
samples_.resize(count * actual_channel_count_); samples_.resize(count * actual_channel_count_);

View File

@@ -104,7 +104,7 @@ as the device_name.
int32_t segment_index = 0; int32_t segment_index = 0;
while (!stop) { while (!stop) {
const std::vector<float> samples = alsa.Read(chunk); const std::vector<float> &samples = alsa.Read(chunk);
stream->AcceptWaveform(expected_sample_rate, samples.data(), stream->AcceptWaveform(expected_sample_rate, samples.data(),
samples.size()); samples.size());