Skip to content

Commit 7f1d59e

Browse files
committed
allow AudioMixer to unwrap AudioFrameEvent
1 parent efb5473 commit 7f1d59e

File tree

2 files changed

+7
-19
lines changed

2 files changed

+7
-19
lines changed

examples/local-audio/full_duplex.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -50,31 +50,16 @@ async def _remove_stream(
5050
if pub_sid is not None:
5151
streams_by_pub.pop(pub_sid, None)
5252

53-
class _FrameOnlyStream:
54-
def __init__(self, inner: rtc.AudioStream) -> None:
55-
self._inner = inner
56-
57-
def __aiter__(self):
58-
return self
59-
60-
async def __anext__(self) -> rtc.AudioFrame:
61-
event = await self._inner.__anext__()
62-
return event.frame
63-
64-
async def aclose(self) -> None:
65-
await self._inner.aclose()
66-
6753
def on_track_subscribed(
6854
track: rtc.Track,
6955
publication: rtc.RemoteTrackPublication,
7056
participant: rtc.RemoteParticipant,
7157
):
7258
if track.kind == rtc.TrackKind.KIND_AUDIO:
73-
event_stream = rtc.AudioStream(track, sample_rate=48000, num_channels=1)
74-
frame_stream = _FrameOnlyStream(event_stream)
75-
streams_by_pub[publication.sid] = frame_stream
76-
streams_by_participant.setdefault(participant.sid, set()).add(frame_stream)
77-
mixer.add_stream(frame_stream)
59+
stream = rtc.AudioStream(track, sample_rate=48000, num_channels=1)
60+
streams_by_pub[publication.sid] = stream
61+
streams_by_participant.setdefault(participant.sid, set()).add(stream)
62+
mixer.add_stream(stream)
7863
logging.info("subscribed to audio from %s", participant.identity)
7964

8065
room.on("track_subscribed", on_track_subscribed)

livekit-rtc/livekit/rtc/audio_mixer.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ async def _get_contribution(
184184
except StopAsyncIteration:
185185
exhausted = True
186186
break
187+
# AudioStream may yield either AudioFrame or AudioFrameEvent; unwrap if needed
188+
if hasattr(frame, "frame"):
189+
frame = frame.frame # type: ignore[assignment]
187190

188191
new_data = np.frombuffer(frame.data.tobytes(), dtype=np.int16).reshape(
189192
-1, self._num_channels

0 commit comments

Comments
 (0)