adds configurable input and output device ids for local audio
This commit is contained in:
@@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from concurrent.futures import ThreadPoolExecutor
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
from typing import Optional
|
from typing import Annotated, Optional
|
||||||
|
from typing_extensions import Doc
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
@@ -26,8 +27,13 @@ except ModuleNotFoundError as e:
|
|||||||
raise Exception(f"Missing module: {e}")
|
raise Exception(f"Missing module: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
class LocalTransportParams(TransportParams):
|
||||||
|
input_device_index: Annotated[int, Doc("Index of the input device for local audio")] = 0
|
||||||
|
output_device_index: Annotated[int, Doc("Index of the output device for local audio")] = 0
|
||||||
|
|
||||||
class LocalAudioInputTransport(BaseInputTransport):
|
class LocalAudioInputTransport(BaseInputTransport):
|
||||||
def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams):
|
_params: LocalTransportParams
|
||||||
|
def __init__(self, py_audio: pyaudio.PyAudio, params: LocalTransportParams):
|
||||||
super().__init__(params)
|
super().__init__(params)
|
||||||
self._py_audio = py_audio
|
self._py_audio = py_audio
|
||||||
self._in_stream = None
|
self._in_stream = None
|
||||||
@@ -46,6 +52,7 @@ class LocalAudioInputTransport(BaseInputTransport):
|
|||||||
frames_per_buffer=num_frames,
|
frames_per_buffer=num_frames,
|
||||||
stream_callback=self._audio_in_callback,
|
stream_callback=self._audio_in_callback,
|
||||||
input=True,
|
input=True,
|
||||||
|
input_device_index=self._params.input_device_index,
|
||||||
)
|
)
|
||||||
self._in_stream.start_stream()
|
self._in_stream.start_stream()
|
||||||
|
|
||||||
@@ -69,6 +76,7 @@ class LocalAudioInputTransport(BaseInputTransport):
|
|||||||
|
|
||||||
|
|
||||||
class LocalAudioOutputTransport(BaseOutputTransport):
|
class LocalAudioOutputTransport(BaseOutputTransport):
|
||||||
|
_params: LocalTransportParams
|
||||||
def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams):
|
def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams):
|
||||||
super().__init__(params)
|
super().__init__(params)
|
||||||
self._py_audio = py_audio
|
self._py_audio = py_audio
|
||||||
@@ -89,6 +97,7 @@ class LocalAudioOutputTransport(BaseOutputTransport):
|
|||||||
channels=self._params.audio_out_channels,
|
channels=self._params.audio_out_channels,
|
||||||
rate=self._sample_rate,
|
rate=self._sample_rate,
|
||||||
output=True,
|
output=True,
|
||||||
|
output_device_index=self._params.output_device_index,
|
||||||
)
|
)
|
||||||
self._out_stream.start_stream()
|
self._out_stream.start_stream()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user