@@ -70,7 +70,7 @@ def __init__(
7070 self ._last_capture = 0.0
7171 self ._q_size = 0.0
7272 self ._join_handle : asyncio .TimerHandle | None = None
73- self ._join_fut : asyncio .Future [None ] = self . _loop . create_future ()
73+ self ._join_fut : asyncio .Future [None ] | None = None
7474
7575 @property
7676 def sample_rate (self ) -> int :
@@ -118,6 +118,9 @@ async def capture_frame(self, frame: AudioFrame) -> None:
118118 Exception: If there is an error during frame capture.
119119 """
120120
121+ if frame .samples_per_channel == 0 :
122+ return
123+
121124 now = time .monotonic ()
122125 elapsed = 0.0 if self ._last_capture == 0.0 else now - self ._last_capture
123126 self ._q_size += frame .samples_per_channel / self .sample_rate - elapsed
@@ -126,7 +129,7 @@ async def capture_frame(self, frame: AudioFrame) -> None:
126129 if self ._join_handle :
127130 self ._join_handle .cancel ()
128131
129- if self ._join_fut . done () :
132+ if self ._join_fut is None :
130133 self ._join_fut = self ._loop .create_future ()
131134
132135 self ._join_handle = self ._loop .call_later (self ._q_size , self ._release_waiter )
@@ -163,8 +166,11 @@ async def wait_for_playout(self) -> None:
163166 await asyncio .shield (self ._join_fut )
164167
165168 def _release_waiter (self ) -> None :
169+ assert self ._join_fut is not None
170+
166171 if not self ._join_fut .done ():
167172 self ._join_fut .set_result (None )
168173
169174 self ._last_capture = 0.0
170175 self ._q_size = 0.0
176+ self ._join_fut = None
0 commit comments