o
    i                     @   sn   d dl Zd dlmZ d dlmZ d dlZd dlZd dl	m
Z
 d dlmZ G dd dejjZG dd	 d	ZdS )
    N)Path)Union)check_argument_types)read_2column_textc                   @   s\   e Zd ZdZejddfdedefddZdd Zd	d
 Z	dd Z
dd Zdd Zdd ZdS )SoundScpReadera  Reader class for 'wav.scp'.

    Examples:
        key1 /some/path/a.wav
        key2 /some/path/b.wav
        key3 /some/path/c.wav
        key4 /some/path/d.wav
        ...

        >>> reader = SoundScpReader('wav.scp')
        >>> rate, array = reader['key1']

    F	always_2d	normalizec                 C   s0   t  sJ || _|| _|| _|| _t|| _d S N)r   fnamedtyper   r   r   data)selfr
   r   r   r    r   L/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/fileio/sound_scp.py__init__   s   
zSoundScpReader.__init__c                 C   sL   | j | }| jrtj|| jd\}}||fS tj|| j| jd\}}||fS )N)r   )r   r   )r   r   	soundfilereadr   r   )r   keywavarrayrater   r   r   __getitem__)   s   


zSoundScpReader.__getitem__c                 C   
   | j | S r	   r   r   r   r   r   r   get_path5      
zSoundScpReader.get_pathc                 C   s   |S r	   r   )r   itemr   r   r   __contains__8      zSoundScpReader.__contains__c                 C   
   t | jS r	   )lenr   r   r   r   r   __len__;   r   zSoundScpReader.__len__c                 C   r    r	   )iterr   r"   r   r   r   __iter__>   r   zSoundScpReader.__iter__c                 C   s
   | j  S r	   )r   keysr"   r   r   r   r&   A   r   zSoundScpReader.keysN)__name__
__module____qualname____doc__npint16boolr   r   r   r   r#   r%   r&   r   r   r   r   r      s     
r   c                   @   sf   e Zd ZdZ		ddeeef deeef fddZdefd	d
Zdd Z	dd Z
dd Zdd ZdS )SoundScpWriteraR  Writer class for 'wav.scp'

    Examples:
        key1 /some/path/a.wav
        key2 /some/path/b.wav
        key3 /some/path/c.wav
        key4 /some/path/d.wav
        ...

        >>> writer = SoundScpWriter('./data/', './data/feat.scp')
        >>> writer['aa'] = 16000, numpy_array
        >>> writer['bb'] = 16000, numpy_array

    r   Noutdirscpfilec                 C   sb   t  sJ t|| _| jjddd t|}|jjddd |jddd| _|| _|| _i | _	d S )NTparentsexist_okwzutf-8)encoding)
r   r   dirmkdirparentopenfscpformatr   r   )r   r/   r0   r;   r   r   r   r   r   U   s   


zSoundScpWriter.__init__r   c                 C   s   |\}}t |tsJ t|t |tjsJ t||jdvr(td|j |jdkr5|d d d f }| j| d| j  }|j	j
ddd tt||| | j| d| d t|| j|< d S )	N)      z'Input signal must be 1 or 2 dimension: r<   .Tr1    
)
isinstanceinttyper+   ndarrayndimRuntimeErrorr6   r;   r8   r7   r   writestrr:   r   )r   r   valuer   signalr   r   r   r   __setitem__g   s   

zSoundScpWriter.__setitem__c                 C   r   r	   r   r   r   r   r   r   y   r   zSoundScpWriter.get_pathc                 C   s   | S r	   r   r"   r   r   r   	__enter__|   r   zSoundScpWriter.__enter__c                 C   s   |    d S r	   )close)r   exc_typeexc_valexc_tbr   r   r   __exit__   s   zSoundScpWriter.__exit__c                 C   s   | j   d S r	   )r:   rM   r"   r   r   r   rM      s   zSoundScpWriter.close)r   N)r'   r(   r)   r*   r   r   rH   r   rK   r   rL   rQ   rM   r   r   r   r   r.   E   s    


r.   )collections.abccollectionspathlibr   typingr   numpyr+   r   	typeguardr   espnet2.fileio.read_textr   abcMappingr   r.   r   r   r   r   <module>   s    9