/
/
/
1"""Tests for Universal Group output formats."""
2
3from music_assistant_models.audio_processing import (
4 AudioFidelity,
5 AudioOutputDetails,
6 AudioQuality,
7)
8from music_assistant_models.enums import ContentType
9from music_assistant_models.media_items import AudioFormat
10
11from music_assistant.controllers.streams.audio_processing import get_audio_quality
12from music_assistant.helpers.ffmpeg import get_ffmpeg_args
13from music_assistant.providers.universal_group.constants import (
14 UGP_OUTPUT_MP3,
15 resolve_ugp_output_format,
16)
17
18
19def test_resolve_ugp_mp3_output_format() -> None:
20 """Resolve the complete objective format and effective quality for UGP MP3 output."""
21 audio_format, extension = resolve_ugp_output_format(UGP_OUTPUT_MP3)
22
23 assert extension == "mp3"
24 assert audio_format.content_type == ContentType.MP3
25 assert audio_format.codec_type == ContentType.MP3
26 assert audio_format.sample_rate == 44100
27 assert audio_format.bit_depth == 16
28 assert audio_format.bit_rate == 320
29 assert get_audio_quality(audio_format) == AudioQuality.STANDARD
30
31
32def test_ugp_mp3_output_details_serialization() -> None:
33 """Serialize the UGP MP3 codec, bitrate and effective quality for clients."""
34 audio_format, _ = resolve_ugp_output_format(UGP_OUTPUT_MP3)
35 output_details = AudioOutputDetails(
36 output_format=audio_format,
37 fidelity=AudioFidelity(quality=get_audio_quality(audio_format)),
38 )
39
40 payload = output_details.to_dict()
41
42 assert payload["output_format"]["content_type"] == ContentType.MP3.value
43 assert payload["output_format"]["codec_type"] == ContentType.MP3.value
44 assert payload["output_format"]["bit_rate"] == 320
45 assert payload["fidelity"]["quality"] == AudioQuality.STANDARD.value
46
47
48def test_ugp_mp3_bitrate_matches_ffmpeg_encoder() -> None:
49 """Keep UGP MP3 bitrate metadata aligned with the FFmpeg encoder."""
50 output_format, _ = resolve_ugp_output_format(UGP_OUTPUT_MP3)
51 input_format = AudioFormat(
52 content_type=ContentType.PCM_F32LE,
53 sample_rate=output_format.sample_rate,
54 bit_depth=32,
55 channels=2,
56 )
57
58 ffmpeg_args = get_ffmpeg_args(input_format, output_format, [])
59 bitrate_index = ffmpeg_args.index("-b:a")
60
61 assert ffmpeg_args[bitrate_index + 1] == f"{output_format.bit_rate}k"
62