+
    lHàjz
  ã                  óz   € R t ^ RIHt ^ RIHt R	 U u/ uF  q RV  2bK
  	  up tR
tRtR R ltRR R llt	R# u up i )uk  Shared magic-byte audio/AV container detection â€” the ONE sniffer for the codebase.

Outbound (``tools/tts_tool.py``): TTS backends silently ignore the requested
format (Edge emits MP3, Piper WAV), so the file is sniffed and its ``.ogg``
extension repaired. Inbound (``gateway/platforms/base.py`` cache_audio_*,
``plugins/platforms/signal/adapter.py``): adapters pass wrong/guessed voice-note
extensions (Telegram ``.oga``, iOS M4A-branded MP4), so the cache sniffs the
real container for STT and players. Only audio/AV containers are claimed:
RIFF/WEBP and other images return ``None`` so callers check images first.
)Úannotations)ÚOptionalÚ.c               ó    € V ^8„  d   QhRRRR/# )é   ÚdataÚbytesÚreturnzOptional[str]© )Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/tools/audio_container.pyÚ__annotate__r      s   € ÷ ñ ˜%ð  Mñ ó    c                ó$  € \        V 4      ^8¼  dC   V R,          R8X  d5   \        V 4      ^8¼  d#   V R,          P                  4       \        9   d   R# R# \         F   w  rV P	                  V4      '       g   K  Vu # 	  \        V 4      ^8¼  d   V R,          R8X  d   V R,          R8X  d   R	# \        V 4      ^8¼  d=   V ^ ,          ^ÿ8X  d/   V ^,          ^à,          ^à8X  d   V ^,          ^ö,          ^ð8X  d   R
# R# V P	                  R4      '       d   R# R# )zIReturn a CONTAINER_TO_EXT key from magic bytes, or ``None`` when unknown.:é   é   Ns   ftyp:r   é   NÚm4aÚmp4:Nr   Ns   RIFFs   WAVEÚwavÚaacÚmp3s   Eß£ÚwebmN)ÚlenÚlowerÚ_MP4_AUDIO_BRANDSÚ_PREFIX_CONTAINERSÚ
startswith)r   ÚprefixÚ	containers   &  r   Úsniff_containerr       sÞ   € ä
ˆ4ƒy�A„~˜$˜s�) wÔ.ô ˆt‹9˜Œ?˜t D�z×/Ñ/Ó1Ô5FÔFÙÙß/ÑˆØ�?‰?˜6×"Ô"ØÒñ 0ô ˆ4ƒy�B„˜4 �8 wÔ.°4¸µ:ÀÔ3HÙÜ
ˆ4ƒy�A„~˜$˜q�' Tœ/¨t°A­w¸­~À$Ô.Fð ˜a� 4�¨DÔ0ˆuÐ;°eÐ;Ø‡�Ð*×+Ò+ÙÙr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úfallback_extÚstrr	   r
   )r   s   "r   r   r   0   s&   € ÷ Iñ I˜%ð I¨sð IÀñ Ir   c                óŒ   € VP                  R4      '       d   TMRV 2p\        V 4      pVf   V# VR8X  d   R# \        V,          # )zêReturn a container-matching extension, or ``fallback_ext`` when unknown.
Callers *claim* audio, so generic MP4 maps to ``.m4a`` (payload is AAC regardless
of brand; STT accepts both but voice-bubble routing keys off audio extensions).r   r   z.m4a)r   r    ÚCONTAINER_TO_EXT)r   r"   Úfallbackr   s   &&  r   Úsniff_audio_extr'   0   sO   € ð  ,×6Ñ6°s×;Ò;‰|À1À\ÀNÐAS€HÜ Ó%€IØÒØˆØ %Ô'ˆ6ÐHÔ-=¸iÕ-HÐHr   N)r   r   ÚoggÚflacr   r   r   r   )s   m4a s   m4b ))s   OggSr(   )s   fLaCr)   )s   ID3r   )z.ogg)
Ú__doc__Ú
__future__r   Útypingr   r%   r   r   r    r'   )Úcs   0r   Ú<module>r.      s\   ðñ	õ #å ñ )cÓcÑ(b 1˜˜1˜#�w’JÑ(bÑcÐ ð 'Ð ð LÐ õ÷,Iñ Iùò? ds   “8