106 lines
3.5 KiB
Python
106 lines
3.5 KiB
Python
from bumble import hci
|
||
from bumble.profiles import bap
|
||
from dataclasses import dataclass
|
||
|
||
# Define some base dataclasses to hold the relevant parameters
|
||
@dataclass
|
||
class AuracastQoSConfig:
|
||
iso_int_multiple_10ms: int = 1
|
||
number_of_retransmissions:int = 4 #4
|
||
max_transport_latency_ms:int = 43 #varies from the default value in bumble (was 65)
|
||
|
||
qos_config_mono_high_rel = AuracastQoSConfig() #highest rel + lowest latency
|
||
qos_config_mono_medium_rel = AuracastQoSConfig(
|
||
iso_int_multiple_10ms = 2,
|
||
number_of_retransmissions = 3,
|
||
max_transport_latency_ms = 65
|
||
)
|
||
qos_config_mono_low_rel = AuracastQoSConfig( #highest latency
|
||
iso_int_multiple_10ms = 3,
|
||
number_of_retransmissions = 2,
|
||
max_transport_latency_ms = 65
|
||
)
|
||
|
||
@dataclass
|
||
class AuracastGlobalConfig:
|
||
qos_config: AuracastQoSConfig
|
||
debug: bool = False
|
||
device_name: str = 'Auracaster'
|
||
transport: str = ''
|
||
auracast_device_address: hci.Address = hci.Address('F0:F1:F2:F3:F4:F5')
|
||
auracast_sampling_rate_hz: int = 16000
|
||
octets_per_frame: int = 40 #48kbps@24kHz # bitrate = octets_per_frame * 8 / frame len
|
||
frame_duration_us: int = 10000
|
||
presentation_delay_us: int = 40000
|
||
manufacturer_data: tuple[int, bytes] = None
|
||
|
||
global_base_config = AuracastGlobalConfig(qos_config=AuracastQoSConfig())
|
||
|
||
# "Audio input. "
|
||
# "'device' -> use the host's default sound input device, "
|
||
# "'device:<DEVICE_ID>' -> use one of the host's sound input devices "
|
||
# "(specify 'device:?' to get a list of available sound input devices), "
|
||
# "'stdin' -> receive audio from stdin as int16 PCM, "
|
||
# "'file:<filename> -> read audio from a .wav or raw int16 PCM file. "
|
||
|
||
|
||
@dataclass
|
||
class AuracastBigConfig:
|
||
id: int = 123456,
|
||
random_address: hci.Address = hci.Address('F1:F1:F2:F3:F4:F5')
|
||
code: str = None # Broadcast_Code – a 16-octet parameter provided by the Host
|
||
language: str = 'eng' # See: https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
|
||
name: str = 'Broadcast0'
|
||
program_info: str = 'Some Announcements'
|
||
audio_source: str = 'file:./auracast/announcement_48_10_96000_en.wav'
|
||
input_format: str = 'auto'
|
||
loop: bool = True
|
||
precode_wav: bool = False
|
||
iso_que_len: int = 64
|
||
|
||
|
||
# Instanciate some example configurations
|
||
broadcast_de = AuracastBigConfig(
|
||
id=12,
|
||
random_address=hci.Address('F1:F1:F2:F3:F4:F5'),
|
||
name = 'Broadcast0',
|
||
language='deu',
|
||
program_info = 'Announcements German',
|
||
audio_source = 'file:./auracast/testdata/announcement_de.wav',
|
||
)
|
||
|
||
broadcast_en = AuracastBigConfig(
|
||
id=123,
|
||
random_address=hci.Address('F2:F1:F2:F3:F4:F5'),
|
||
name = 'Broadcast1',
|
||
language='eng',
|
||
program_info = 'Announcements English',
|
||
audio_source = 'file:./auracast/testdata/announcement_en.wav',
|
||
)
|
||
|
||
broadcast_fr = AuracastBigConfig(
|
||
id=1234,
|
||
random_address=hci.Address('F3:F1:F2:F3:F4:F5'),
|
||
name = 'Broadcast2',
|
||
language='fra',
|
||
program_info = 'Announcements French',
|
||
audio_source = 'file:./auracast/testdata/announcement_fr.wav',
|
||
)
|
||
|
||
broadcast_es = AuracastBigConfig(
|
||
id=12345,
|
||
random_address=hci.Address('F4:F1:F2:F3:F4:F5'),
|
||
name = 'Broadcast3',
|
||
language='spa',
|
||
program_info = 'Announcements Spanish',
|
||
audio_source = 'file:./auracast/testdata/announcement_es.wav',
|
||
)
|
||
|
||
broadcast_it = AuracastBigConfig(
|
||
id=123456,
|
||
random_address=hci.Address('F5:F1:F2:F3:F4:F5'),
|
||
name = 'Broadcast4',
|
||
language='ita',
|
||
program_info = 'Announcements Italian',
|
||
audio_source = 'file:./auracast/testdata/announcement_it.wav',
|
||
) |