transports: deprecate TransportParams.vad_enabled
This commit is contained in:
@@ -27,6 +27,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
|
- `TransportParams.vad_enabled` parameter is now deprecated, use
|
||||||
|
`TransportParams.audio_in_enabled` and `TransportParams.vad_analyzer` instead.
|
||||||
|
|
||||||
- `TransportParams.vad_audio_passthrough` parameter is now deprecated, use
|
- `TransportParams.vad_audio_passthrough` parameter is now deprecated, use
|
||||||
`TransportParams.audio_in_passthrough` instead.
|
`TransportParams.audio_in_passthrough` instead.
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,17 @@ class BaseInputTransport(FrameProcessor):
|
|||||||
# if passthrough is enabled.
|
# if passthrough is enabled.
|
||||||
self._audio_task = None
|
self._audio_task = None
|
||||||
|
|
||||||
|
if self._params.vad_enabled:
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
warnings.simplefilter("always")
|
||||||
|
warnings.warn(
|
||||||
|
"Parameter 'vad_enabled' is deprecated, use 'audio_in_enabled' and 'vad_analyzer' instead.",
|
||||||
|
DeprecationWarning,
|
||||||
|
)
|
||||||
|
self._params.audio_in_enabled = True
|
||||||
|
|
||||||
if self._params.vad_audio_passthrough:
|
if self._params.vad_audio_passthrough:
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
@@ -89,7 +100,7 @@ class BaseInputTransport(FrameProcessor):
|
|||||||
self._sample_rate = self._params.audio_in_sample_rate or frame.audio_in_sample_rate
|
self._sample_rate = self._params.audio_in_sample_rate or frame.audio_in_sample_rate
|
||||||
|
|
||||||
# Configure VAD analyzer.
|
# Configure VAD analyzer.
|
||||||
if self._params.vad_enabled and self._params.vad_analyzer:
|
if self._params.vad_analyzer:
|
||||||
self._params.vad_analyzer.set_sample_rate(self._sample_rate)
|
self._params.vad_analyzer.set_sample_rate(self._sample_rate)
|
||||||
# Configure End of turn analyzer.
|
# Configure End of turn analyzer.
|
||||||
if self._params.turn_analyzer:
|
if self._params.turn_analyzer:
|
||||||
@@ -99,13 +110,13 @@ class BaseInputTransport(FrameProcessor):
|
|||||||
if self._params.audio_in_filter:
|
if self._params.audio_in_filter:
|
||||||
await self._params.audio_in_filter.start(self._sample_rate)
|
await self._params.audio_in_filter.start(self._sample_rate)
|
||||||
# Create audio input queue and task if needed.
|
# Create audio input queue and task if needed.
|
||||||
if not self._audio_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if not self._audio_task and self._params.audio_in_enabled:
|
||||||
self._audio_in_queue = asyncio.Queue()
|
self._audio_in_queue = asyncio.Queue()
|
||||||
self._audio_task = self.create_task(self._audio_task_handler())
|
self._audio_task = self.create_task(self._audio_task_handler())
|
||||||
|
|
||||||
async def stop(self, frame: EndFrame):
|
async def stop(self, frame: EndFrame):
|
||||||
# Cancel and wait for the audio input task to finish.
|
# Cancel and wait for the audio input task to finish.
|
||||||
if self._audio_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if self._audio_task and self._params.audio_in_enabled:
|
||||||
await self.cancel_task(self._audio_task)
|
await self.cancel_task(self._audio_task)
|
||||||
self._audio_task = None
|
self._audio_task = None
|
||||||
# Stop audio filter.
|
# Stop audio filter.
|
||||||
@@ -114,12 +125,12 @@ class BaseInputTransport(FrameProcessor):
|
|||||||
|
|
||||||
async def cancel(self, frame: CancelFrame):
|
async def cancel(self, frame: CancelFrame):
|
||||||
# Cancel and wait for the audio input task to finish.
|
# Cancel and wait for the audio input task to finish.
|
||||||
if self._audio_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if self._audio_task and self._params.audio_in_enabled:
|
||||||
await self.cancel_task(self._audio_task)
|
await self.cancel_task(self._audio_task)
|
||||||
self._audio_task = None
|
self._audio_task = None
|
||||||
|
|
||||||
async def push_audio_frame(self, frame: InputAudioRawFrame):
|
async def push_audio_frame(self, frame: InputAudioRawFrame):
|
||||||
if self._params.audio_in_enabled or self._params.vad_enabled:
|
if self._params.audio_in_enabled:
|
||||||
await self._audio_in_queue.put(frame)
|
await self._audio_in_queue.put(frame)
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -265,7 +276,7 @@ class BaseInputTransport(FrameProcessor):
|
|||||||
# Check VAD and push event if necessary. We just care about
|
# Check VAD and push event if necessary. We just care about
|
||||||
# changes from QUIET to SPEAKING and vice versa.
|
# changes from QUIET to SPEAKING and vice versa.
|
||||||
previous_vad_state = vad_state
|
previous_vad_state = vad_state
|
||||||
if self._params.vad_enabled:
|
if self._params.vad_analyzer:
|
||||||
vad_state = await self._handle_vad(frame, vad_state)
|
vad_state = await self._handle_vad(frame, vad_state)
|
||||||
|
|
||||||
if self._params.turn_analyzer:
|
if self._params.turn_analyzer:
|
||||||
|
|||||||
@@ -389,9 +389,7 @@ class SmallWebRTCInputTransport(BaseInputTransport):
|
|||||||
await super().start(frame)
|
await super().start(frame)
|
||||||
await self._client.setup(self._params, frame)
|
await self._client.setup(self._params, frame)
|
||||||
await self._client.connect()
|
await self._client.connect()
|
||||||
if not self._receive_audio_task and (
|
if not self._receive_audio_task and self._params.audio_in_enabled:
|
||||||
self._params.audio_in_enabled or self._params.vad_enabled
|
|
||||||
):
|
|
||||||
self._receive_audio_task = self.create_task(self._receive_audio())
|
self._receive_audio_task = self.create_task(self._receive_audio())
|
||||||
if not self._receive_video_task and self._params.camera_in_enabled:
|
if not self._receive_video_task and self._params.camera_in_enabled:
|
||||||
self._receive_video_task = self.create_task(self._receive_video())
|
self._receive_video_task = self.create_task(self._receive_video())
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ class DailyTransportClient(EventHandler):
|
|||||||
non_blocking=True,
|
non_blocking=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (self._params.audio_in_enabled or self._params.vad_enabled) and not self._speaker:
|
if self._params.audio_in_enabled and not self._speaker:
|
||||||
self._speaker = Daily.create_speaker_device(
|
self._speaker = Daily.create_speaker_device(
|
||||||
self._speaker_name(),
|
self._speaker_name(),
|
||||||
sample_rate=self._in_sample_rate,
|
sample_rate=self._in_sample_rate,
|
||||||
@@ -846,7 +846,7 @@ class DailyInputTransport(BaseInputTransport):
|
|||||||
def start_audio_in_streaming(self):
|
def start_audio_in_streaming(self):
|
||||||
# Create audio task. It reads audio frames from Daily and push them
|
# Create audio task. It reads audio frames from Daily and push them
|
||||||
# internally for VAD processing.
|
# internally for VAD processing.
|
||||||
if not self._audio_in_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if not self._audio_in_task and self._params.audio_in_enabled:
|
||||||
logger.debug(f"Start receiving audio")
|
logger.debug(f"Start receiving audio")
|
||||||
self._audio_in_task = self.create_task(self._audio_in_task_handler())
|
self._audio_in_task = self.create_task(self._audio_in_task_handler())
|
||||||
|
|
||||||
@@ -863,9 +863,6 @@ class DailyInputTransport(BaseInputTransport):
|
|||||||
await self._client.setup(frame)
|
await self._client.setup(frame)
|
||||||
# Join the room.
|
# Join the room.
|
||||||
await self._client.join()
|
await self._client.join()
|
||||||
# Inialize WebRTC VAD if needed.
|
|
||||||
if self._params.vad_enabled and not self._params.vad_analyzer:
|
|
||||||
self._vad_analyzer = WebRTCVADAnalyzer(sample_rate=self.sample_rate)
|
|
||||||
if self._params.audio_in_stream_on_start:
|
if self._params.audio_in_stream_on_start:
|
||||||
self.start_audio_in_streaming()
|
self.start_audio_in_streaming()
|
||||||
|
|
||||||
@@ -875,7 +872,7 @@ class DailyInputTransport(BaseInputTransport):
|
|||||||
# Leave the room.
|
# Leave the room.
|
||||||
await self._client.leave()
|
await self._client.leave()
|
||||||
# Stop audio thread.
|
# Stop audio thread.
|
||||||
if self._audio_in_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if self._audio_in_task and self._params.audio_in_enabled:
|
||||||
await self.cancel_task(self._audio_in_task)
|
await self.cancel_task(self._audio_in_task)
|
||||||
self._audio_in_task = None
|
self._audio_in_task = None
|
||||||
|
|
||||||
@@ -885,7 +882,7 @@ class DailyInputTransport(BaseInputTransport):
|
|||||||
# Leave the room.
|
# Leave the room.
|
||||||
await self._client.leave()
|
await self._client.leave()
|
||||||
# Stop audio thread.
|
# Stop audio thread.
|
||||||
if self._audio_in_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if self._audio_in_task and self._params.audio_in_enabled:
|
||||||
await self.cancel_task(self._audio_in_task)
|
await self.cancel_task(self._audio_in_task)
|
||||||
self._audio_in_task = None
|
self._audio_in_task = None
|
||||||
|
|
||||||
|
|||||||
@@ -368,7 +368,7 @@ class LiveKitInputTransport(BaseInputTransport):
|
|||||||
await super().start(frame)
|
await super().start(frame)
|
||||||
await self._client.setup(frame)
|
await self._client.setup(frame)
|
||||||
await self._client.connect()
|
await self._client.connect()
|
||||||
if not self._audio_in_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if not self._audio_in_task and self._params.audio_in_enabled:
|
||||||
self._audio_in_task = self.create_task(self._audio_in_task_handler())
|
self._audio_in_task = self.create_task(self._audio_in_task_handler())
|
||||||
logger.info("LiveKitInputTransport started")
|
logger.info("LiveKitInputTransport started")
|
||||||
|
|
||||||
@@ -382,7 +382,7 @@ class LiveKitInputTransport(BaseInputTransport):
|
|||||||
async def cancel(self, frame: CancelFrame):
|
async def cancel(self, frame: CancelFrame):
|
||||||
await super().cancel(frame)
|
await super().cancel(frame)
|
||||||
await self._client.disconnect()
|
await self._client.disconnect()
|
||||||
if self._audio_in_task and (self._params.audio_in_enabled or self._params.vad_enabled):
|
if self._audio_in_task and self._params.audio_in_enabled:
|
||||||
await self.cancel_task(self._audio_in_task)
|
await self.cancel_task(self._audio_in_task)
|
||||||
|
|
||||||
async def cleanup(self):
|
async def cleanup(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user