o
    HXhJ                     @   s   d dl mZ d dlmZ ed d dlmZ edZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZzd dlmZ W n eyQ   e	jdkrLejZnejZY nw d	d
 ZG dd dejZdd Zedkrme  dS dS )    )support)import_helperZaudio)findfileossaudiodevN)AFMT_S16_NElittlec                 C   s   t | d!}t |}| }| }|j}|d | }W d    n1 s)w   Y  |tjkr7tdt	
|d}||d|fS )Nrbr   z)Expect .au file with 8-bit mu-law samples      )opensunauZgetframerateZgetnchannels	_encodingseekreadZAUDIO_FILE_ENCODING_MULAW_8RuntimeErroraudioopZulaw2lin)pathfpZaurate	nchannelsencodingdata r   ?/opt/python-3.10.19/usr/lib/python3.10/test/test_ossaudiodev.pyread_sound_file   s   



r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )OSSAudioDevTestsc              
   C   s  zt d}W n! ty( } z|jd tjtjtjtjfv r#t	
| d }~ww |  |  |  |  |  | |j | |jd | |jdd|j  dD ]}zt||d W n ttfyl   Y qWw | d|  qWtt||d  | | }|t|| | t|d	 d
k | t  }	|!| |"  t  }
|
|	 }t|| | d }| |dkd||f  d S )Nwr   z/dev/dspzbad dsp.mode: %r)closednamemode*   zdsp.%s not read-only   gGz@g{Gz?d   g      $@z2elapsed time (%s) > 10%% off of expected time (%s))#r   r   OSErrorargserrnoEACCESENOENTENODEVEBUSYunittestSkipTestbufsize	obufcountobuffreegetptrfilenoZassertFalser   assertEqualr   r   setattr	TypeErrorAttributeErrorfailfloatlensetparametersr   
assertTrueabstime	monotonicwriteclose)selfr   r   Zssizer   dspmsgattrZexpected_timet1t2Zelapsed_timeZpercent_diffr   r   r   play_sound_file-   sN   


z OSSAudioDevTests.play_sound_filec           	      C   s   t jddf}tddf}||fD ]}|\}}}|||kr-|||kr-|||kr- nqtd||||d}| ||||fd||f  ||||d}| ||||fd||f  d S )	N   i@  r	   D  zRunable to set audio sampling parameters: you must have really weird audio hardwareFzsetparameters%r: returned %rT)	r   ZAFMT_U8r   ZsetfmtchannelsZspeedr   r8   r1   )	r?   r@   Zconfig1Zconfig2configfmtrH   r   resultr   r   r   set_parameters\   s$   



zOSSAudioDevTests.set_parametersc                 C   s   t }d}d}|d|f|d|f||dffD ]9}|\}}}||||d}| ||d z
||||d}W n tjyG } zW Y d }~qd }~ww | d	 qd S )
NrG   r	   i,  iFz(unexpectedly got requested configurationTzexpected OSSAudioError)r   r8   ZassertNotEqualr   ZOSSAudioErrorr5   )r?   r@   rJ   r   rH   rI   rK   errr   r   r   set_bad_parametersz   s(   
z#OSSAudioDevTests.set_bad_parametersc                 C   s   t td}| j|  d S )Nzaudiotest.au)r   r   rE   )r?   Z
sound_infor   r   r   test_playback   s   zOSSAudioDevTests.test_playbackc              	   C   sF   t d}z| | W |  | |j d S |  | |j w Nr   )r   r   rL   r>   r9   r   r?   r@   r   r   r   test_set_parameters   s   
z$OSSAudioDevTests.test_set_parametersc                 C   s>   t  }| | d W d    d S 1 sw   Y  d S )Nr   )r   	openmixerZassertGreaterEqualr0   )r?   mixerr   r   r   test_mixer_methods   s   
"z#OSSAudioDevTests.test_mixer_methodsc                 C   s:   t d}W d    n1 sw   Y  | |j d S rQ   )r   r   r9   r   rR   r   r   r   	test_with   s   zOSSAudioDevTests.test_withc                 C   s   t d}|  | t|j | t|jd | t|jd | t|jd | t|j	 | t|j
 | t|j
 | t|j | t|j t  }|  | t|j d S )Nr   rF      x)r   r   r>   ZassertRaises
ValueErrorr0   r   r=   Zwriteallr,   r-   r.   r/   rT   )r?   r@   rU   r   r   r   test_on_closed   s   
zOSSAudioDevTests.test_on_closedN)__name__
__module____qualname__rE   rL   rO   rP   rS   rV   rW   rZ   r   r   r   r   r   +   s    /r   c               
   C   sd   zt d} W n$ t jtfy+ } z|jd tjtjtjtj	fv r&t
| d }~ww |   d S )Nr   r   )r   r   errorr#   r$   r%   r&   r'   r(   r)   r*   r+   r>   )r@   rA   r   r   r   setUpModule   s   
r_   __main__)testr   Ztest.supportr   Zrequiresr   import_moduler   r%   sysr   r;   r   r*   r   ImportError	byteorderZAFMT_S16_LEZAFMT_S16_BEr   ZTestCaser   r_   r[   mainr   r   r   r   <module>   s4    


 
