Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

`_ParticipantAudioInputStream` 补静音帧时`data` 长度未乘声道数,多声道配置下抛`ValueError`

クローズ 初心者向け
#7,967 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

関連するプルリクエストがすでにマージされています。

  • #7968 @Hugo-DDT による — マージ済み
  • #7975 @its-amann による — マージされずにクローズ

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
76/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python

調査の方向性

livekit/agents/voice/room_io/_input.pyを読み、特に_ParticipantAudioInputStream._forward_taskの390~399行目を確認して、無音フレームのサイズがnum_channelsに対してどのように計算されるかを調べてください。期待されるバイト長がnum_channels × samples_per_channel × 2であることを確認してください。マルチチャンネル入力に対してValueErrorなしでフレームを作成できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug
Bug Description
  • File :livekit/agents/voice/room_io/_input.py
  • Lines : 390–399(_ParticipantAudioInputStream._forward_task 方法尾部)
  • Package : livekit-agents(Python SDK)
Root Cause

当远端音频 track 断流、super()._forward_task() 主循环退出后,子类会补一帧 0.5 秒静音(让下游 VAD/STT 能正确检测到停顿)。这帧的字节数据手工构造时 只按"每样本 2 字节"计算,却漏乘了num_channels :

Expected Behavior
  • Expected : 无论num_channels 为多少,AudioFrame 的data 长度都应为num_channels × samples_per_channel × 2
  • Actual : data 长度始终为samples_per_channel × 2 ,多声道下触发构造函数校验失败
Reproduction Steps
- 配置`AgentSession` 的`RoomIO` 输入音频为多声道(`num_channels=2` 或更高)——比如`RoomInputOptions(num_channels=2)` 或自定义`VoicePipeline` 里`input_audio_options.num_channels = 2`
- 正常跑通一次对话,让远端 participant 断开 / unmute 停止发布音频
- 触发`_on_track_unsubscribed` →`_close_stream` → 新建 stream 并重启`_forward_task` (或 participant 直接断连,主循环自然结束)
- 立刻抛出`ValueError: data length must be >= num_channels * samples_per_channel * sizeof(int16)`
Operating System

Windows11

Models Used

No response

Package Versions
livekit-agents=1.8.0
Session/Room/Call IDs

No response

Proposed Solution

Additional Context

No response

Screenshots and Recordings

No response

主要言語
Python
スター
14.6k
フォーク
3.9k
平均マージ
3日 21時間
マージ済み PR(30日)
197

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

livekit/agents のほかの issue

livekit/agents の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。