Skip to content

Commit

Permalink
SoraAudioSinkImpl::Read 内で 0 除算が発生する問題を修正する
Browse files Browse the repository at this point in the history
  • Loading branch information
enm10k committed May 21, 2024
1 parent 7076673 commit 354ebae
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/sora_audio_sink.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,14 +137,14 @@ nb::tuple SoraAudioSinkImpl::Read(size_t frames, float timeout) {
size_t num_of_samples;
if (frames > 0) {
// フレーム数のリクエストがある場合はリクエスト分が貯まるまで待つ
num_of_samples = frames * number_of_channels_;
if (!buffer_cond_.wait_for(
lock,
std::chrono::nanoseconds(
// Python の流儀に合わせて秒を float で受け取っているので換算
(int64_t)((double)timeout * 1000. * 1000. * 1000.)),
[&] {
return buffer_.size() >= num_of_samples ||
return (number_of_channels_ > 0 &&
buffer_.size() >= frames * number_of_channels_) ||
PyErr_CheckSignals() != 0;
})) {
// タイムアウトで返す
Expand All @@ -154,6 +154,9 @@ nb::tuple SoraAudioSinkImpl::Read(size_t frames, float timeout) {
// Signals で wait を抜けた時は返す
return nb::make_tuple(false, nb::none());
}
// std::condition_variable::wait_for の待機中に number_of_channels_ が更新される可能性があるため、
// 起床後に num_of_samples を計算する必要がある
num_of_samples = frames * number_of_channels_;
} else {
// フレーム数のリクエストがない場合はあるだけ全部出す
if (buffer_.empty()) {
Expand Down

0 comments on commit 354ebae

Please # to comment.