add bap testcases for full qualification

This commit is contained in:
Paul Obernesser
2025-12-10 10:50:45 +01:00
parent ca461c47da
commit 450416fb2d
16 changed files with 592 additions and 12 deletions

View File

@@ -1,5 +1,7 @@
"""
BAP/BSRC/SCC/BV-20-C: Config Broadcast, LC3 16_2_2
Configuration: 16kHz, 40 octets/frame, stereo (2 BISes), QoS _2 variant
"""
import logging
@@ -15,26 +17,22 @@ if __name__ == "__main__":
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
# Ensure relative audio paths like in AuracastBigConfig work (./auracast/...) from src/auracast/
os.chdir(os.path.join(os.path.dirname(__file__), "../../../../auracast"))
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
# Start from default global config
config = AuracastGlobalConfig()
# Use same QoS profile as multicast main
# _2 variant uses different QoS (RTN=2, higher latency)
config.qos_config = AuracastQosDefault()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# Transport similar to multicast main; adjust if needed for your setup
# config.transport = "auto" # let multicast auto-detect
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts" # Raspberry Pi default
# 16_2_2: 16kHz, 40 octets/frame
config.auracast_sampling_rate_hz = 16000
config.octets_per_frame = 40
# Stereo BIG with 2 BISes (FRONT_LEFT + FRONT_RIGHT)
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo: 2 BISes
big.name = 'Broadcast'
big.num_bis = 2 # stereo
run_async(
broadcast(

View File

@@ -0,0 +1,42 @@
"""
BAP/BSRC/SCC/BV-22-C: Config Broadcast, LC3 24_2_2
Configuration: 24kHz, 60 octets/frame, stereo (2 BISes), QoS _2 variant
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosDefault
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
# _2 variant uses different QoS (RTN=2, higher latency)
config.qos_config = AuracastQosDefault()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 24_2_2: 24kHz, 60 octets/frame
config.auracast_sampling_rate_hz = 24000
config.octets_per_frame = 60
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,42 @@
"""
BAP/BSRC/SCC/BV-28-C: Config Broadcast, LC3 48_2_2
Configuration: 48kHz, 100 octets/frame, stereo (2 BISes), QoS _2 variant
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosDefault
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
# _2 variant uses different QoS (RTN=2, higher latency)
config.qos_config = AuracastQosDefault()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_2_2: 48kHz, 100 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 100
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,42 @@
"""
BAP/BSRC/SCC/BV-30-C: Config Broadcast, LC3 48_4_2
Configuration: 48kHz, 120 octets/frame, stereo (2 BISes), QoS _2 variant
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosDefault
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
# _2 variant uses different QoS (RTN=2, higher latency)
config.qos_config = AuracastQosDefault()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_4_2: 48kHz, 120 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 120
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,42 @@
"""
BAP/BSRC/SCC/BV-32-C: Config Broadcast, LC3 48_6_2
Configuration: 48kHz, 155 octets/frame, stereo (2 BISes), QoS _2 variant
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosDefault
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
# _2 variant uses different QoS (RTN=2, higher latency)
config.qos_config = AuracastQosDefault()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_6_2: 48kHz, 155 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 155
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,45 @@
"""
BAP/BSRC/SCC/BV-38-C: Multi BIG Configuration
Configuration: Two BIGs (id=12 and id=13), stereo (2 BISes each)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# First BIG
big1 = AuracastBigConfig()
big1.random_address = "F1:F1:F2:F3:F4:F5"
big1.audio_source = "file:./testdata/announcement_en_stereo.wav"
big1.id = 12
big1.num_bis = 2 # stereo
# Second BIG
big2 = AuracastBigConfig()
big2.random_address = "F1:F1:F2:F3:F4:F6"
big2.audio_source = "file:./testdata/announcement_en_stereo.wav"
big2.id = 13
big2.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big1, big2],
)
)

View File

@@ -16,7 +16,7 @@ if __name__ == "__main__":
)
# Ensure relative audio paths like in AuracastBigConfig work (./auracast/...) from src/auracast/
os.chdir(os.path.join(os.path.dirname(__file__), "../../../../auracast"))
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
# Start from default global config
config = AuracastGlobalConfig()

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/SCC/BV-06-C and BAP/BSRC/STR/BV-06-C: Config Broadcast, LC3 24_2_1
Configuration: 24kHz, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 24_2_1: 24kHz
config.auracast_sampling_rate_hz = 24000
config.octets_per_frame = 60
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/SCC/BV-12-C and BAP/BSRC/STR/BV-12-C: Config Broadcast, LC3 48_2_1
Configuration: 48kHz, 100 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_2_1: 48kHz, 100 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 100
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/SCC/BV-14-C and BAP/BSRC/STR/BV-14-C: Config Broadcast, LC3 48_4_1
Configuration: 48kHz, 120 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_4_1: 48kHz, 120 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 120
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/SCC/BV-16-C and BAP/BSRC/STR/BV-16-C: Config Broadcast, LC3 48_6_1
Configuration: 48kHz, 155 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_6_1: 48kHz, 155 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 155
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/STR/BV-21-C: BSRC, Multiple BISes, LC3 16_2
Configuration: 16kHz, 40 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 16_2: 16kHz, 40 octets/frame
config.auracast_sampling_rate_hz = 16000
config.octets_per_frame = 40
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo (multiple BISes)
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/STR/BV-23-C: BSRC, Multiple BISes, LC3 24_2
Configuration: 24kHz, 60 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 24_2: 24kHz, 60 octets/frame
config.auracast_sampling_rate_hz = 24000
config.octets_per_frame = 60
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo (multiple BISes)
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/STR/BV-29-C: BSRC, Multiple BISes, LC3 48_2
Configuration: 48kHz, 100 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_2: 48kHz, 100 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 100
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo (multiple BISes)
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/STR/BV-31-C: BSRC, Multiple BISes, LC3 48_4
Configuration: 48kHz, 120 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_4: 48kHz, 120 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 120
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo (multiple BISes)
run_async(
broadcast(
config,
[big],
)
)

View File

@@ -0,0 +1,41 @@
"""
BAP/BSRC/STR/BV-33-C: BSRC, Multiple BISes, LC3 48_6
Configuration: 48kHz, 155 octets/frame, stereo (2 BISes)
"""
import logging
import os
from auracast.auracast_config import AuracastGlobalConfig, AuracastBigConfig, AuracastQosFast
from auracast.multicast import broadcast, run_async
if __name__ == "__main__":
logging.basicConfig(
level=os.environ.get("LOG_LEVEL", logging.INFO),
format="%(module)s.py:%(lineno)d %(levelname)s: %(message)s",
)
os.chdir(os.path.join(os.path.dirname(__file__), "../../auracast"))
config = AuracastGlobalConfig()
config.qos_config = AuracastQosFast()
config.transport = "serial:/dev/ttyAMA3,1000000,rtscts"
# 48_6: 48kHz, 155 octets/frame
config.auracast_sampling_rate_hz = 48000
config.octets_per_frame = 155
big = AuracastBigConfig()
big.random_address = "F1:F1:F2:F3:F4:F5"
big.audio_source = "file:./testdata/announcement_en_stereo.wav"
big.id = 12
big.num_bis = 2 # stereo (multiple BISes)
run_async(
broadcast(
config,
[big],
)
)