
     i9!                         d dl mZmZ d dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlT ddlmZmZ d	Z G d
 de          Z G d d          Z G d d          ZdS )    )DictList)	b64decode	b64encode)expsqrt)crc32)BytesIO)*   )FrequencyBand
SampleRatez!data:audio/vnd.shazam.sig;base64,c            
       X    e Zd ZdZdefdefdefdefdedz  fdefd	ed
z  fdefdefg	ZdS )RawSignatureHeaderTmagic1r	   size_minus_headermagic2void1   shifted_sample_rate_idvoid2   'number_samples_plus_divided_sample_ratefixed_valueN)__name__
__module____qualname___packc_uint32_fields_     Z/root/.openclaw/workspace/.venvs/songid/lib/python3.11/site-packages/shazamio/signature.pyr   r      su        E 
8	
 
h'	8	(Q,	!8, 
(Q,	2H=
 
!'HHHr"   r   c                       e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   dedededefdZ	de
fdZde
fd	Zde
fd
ZdS )FrequencyPeakNfft_pass_numberpeak_magnitudecorrected_peak_frequency_binsample_rate_hzc                 >    || _         || _        || _        || _        d S )N)r&   r'   r(   r)   )selfr&   r'   r(   r)   s        r#   __init__zFrequencyPeak.__init__.   s*      /,,H),r"   returnc                 2    | j         | j        dz  dz  dz  z  S )Nr      @   )r(   r)   r+   s    r#   get_frequency_hzzFrequencyPeak.get_frequency_hz:   s#    0D4G!4Kd4RUW4WXXr"   c                 b    t          t          | j        dz
  dz            dz  dz            dz  S )Ni   g33333@i   r   r/   )r   r   r'   r1   s    r#   get_amplitude_pcmzFrequencyPeak.get_amplitude_pcmA   s5    C,t3v=>>'JQNOORVVVr"   c                 &    | j         dz  | j        z  S )N   )r&   r)   r1   s    r#   get_secondszFrequencyPeak.get_secondsF   s    $s*d.AAAr"   )r   r   r   r&   int__annotations__r'   r(   r)   r,   floatr2   r4   r7   r!   r"   r#   r%   r%   (   s         OSNC(, #,,,NC
-
- 
- '*	
-
 
- 
- 
- 
-Y% Y Y Y YW5 W W W W
BU B B B B B Br"   r%   c                       e Zd ZU dZeed<   dZeed<   dZee	e
e         f         ed<   edefd            ZdefdZdefd	ZdS )
DecodedMessageNr)   number_samplesfrequency_band_to_sound_peaksdatac                     |             }t          |          }|                    d           |                                }|                    d           t                      }|                    |           |j        dk    sJ |j        t          |          dz
  k    sJ t          |          dz  |j        k    sJ |j	        dk    sJ t          t          |j        dz	            j                            d                    |_        t          |j        |j        d	z  z
            |_        t                              |                    d
          d          dk    sJ t                              |                    d
          d          t          |          dz
  k    sJ i |_        	 |                    d          }|snt                              |d d
         d          }t                              |d
d          d          }| d
z  }	t          |                    |                    }
|                    |	           t)          |dz
            }d}g |j        |<   	 |
                    d          }|sn|d         }|dk    r/t                              |
                    d
          d          }V||z  }t                              |
                    d          d          }t                              |
                    d          d          }|j        |                             t-          ||||j                             |S )N   r      % 0           #(    _Q?   little   @T@ `r      r   )r
   seekreadr   readintor   r   lenr	   r   r8   r   r   namestripr)   r   r=   
from_bytesr>   r   appendr%   )clsr?   r+   bufcheck_summable_dataheader
tlv_headerfrequency_band_idfrequency_peaks_sizefrequency_peaks_paddingfrequency_peaks_buffrequency_bandr&   raw_fft_passfft_pass_offsetr'   r(   s                    r#   decode_from_binaryz!DecodedMessage.decode_from_binaryS   s>   suudmm!hhjj $%%V}
****'3t99r>9999())J6&,FFFF}
****!*V-Jb-P"Q"Q"V"\"\]`"a"abb!:T=PSW=WW
 
 ~~chhqkk844
BBBB~~chhqkk844D		BFFFF .0*+	!J  #z"1"~x H H#&>>*QRR.(#K#K ';&;a&?#")#((3G*H*H"I"IHH,--- ++<z+IJJNOACD.~>&9&>&>q&A&A# '3A"d**&)nn5H5M5Ma5P5PRZ&[&[O#6O!$0C0H0H0K0KX!V!V/2~~>Q>V>VWX>Y>Y[c/d/d,2>BII!'&4+	   ++	Z r"   r-   c                    t                      }d|_        d|_        t          t	          t
          d| j        z                      dz  |_        d|_        t          | j	        | j        dz  z             |_
        t                      }t          | j                                                  D ]\  }}t                      }d}|D ]}|j        |k    sJ |j        |z
  dk    rJ|                    d	           |                    |j                            d
d                     |j        }|                    t%          |j        |z
  g                     |                    |j                            dd                     |                    |j                            dd                     |j        }|                    dt          |          z                       d
d                     |                    t+          |                                                              d
d                     |                    |                                           |                    dt+          |                                           d
z  z             t+          |                                          dz   |_        t                      }|                    |           |                    d                    d
d                     |                    t+          |                                          dz                       d
d                     |                    |                                           |                    d           t3          |                                          dz  |_        |                    d           |                    |           |                                S )NrB   rE   z_%srF   i  | rH   r   rM      rI   rJ   r   rL       rA   rK   rD   )r   r   r   r8   getattrr   r)   r   r   r=   r   r
   sortedr>   itemsr&   writeto_bytesbytesr'   r(   rQ   getvaluer   rN   r	   rO   )	r+   rY   contents_bufr_   frequency_peaks	peaks_bufr&   frequency_peakrW   s	            r#   encode_to_binaryzDecodedMessage.encode_to_binary   s~   #%%""(+GJH[@[,\,\(](]ac(c%19<$"5"<<:
 :
6 yy/5d6X6^6^6`6`/a/a 	K 	K+NO		IO #2 A A%5HHHH!1OCsJJOOG,,,OON$B$K$KAx$X$XYYY&4&DO~'E'W&X Y YZZZ = F Fq( S STTT K T TUVX` a abbb"0"@
S-@-@ @JJ1hWWXXXs9#5#5#7#788AA!XNNOOOy1133444w3y/A/A/C/C+D+D*Dq*HIJJJJ $'|'<'<'>'>#?#?!#C ii		&		:''844555		3|,,..//!3==aJJKKK		,''))***SXXZZ((:5		&||~~r"   c                 z    t           t          |                                                               d          z   S )Nascii)DATA_URI_PREFIXr   rq   decoder1   s    r#   encode_to_urizDecodedMessage.encode_to_uri   s/    4+@+@+B+B!C!C!J!J7!S!SSSr"   )r   r   r   r)   r8   r9   r=   r>   r   r   r   r%   classmethodrk   rb   rq   strrv   r!   r"   r#   r<   r<   M   s         NCNCNR!4tM7J(J#KRRRQe Q Q Q [Qf;% ; ; ; ;zTs T T T T T Tr"   r<   N)typingr   r   base64r   r   mathr   r   binasciir	   ior
   ctypesenumsr   r   rt   LittleEndianStructurer   r%   r<   r!   r"   r#   <module>r      s<           ' ' ' ' ' ' ' '                         , , , , , , , ,5    .   8B B B B B B B BJXT XT XT XT XT XT XT XT XT XTr"   