o
    ziB                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ dZdZdZd	d
 ZdZdZdZG dd dZdd
 ZdZdddZdZdZG dd dZdd ZdS )    Ndefaultdict)Path)List)
find_audioz7<div id="waveform"></div><div id="wave-timeline"></div>a  
.gradio-container {
    max-width: 840px !important;
}
region.wavesurfer-region:before {
    content: attr(data-region-label);
}

block {
    min-width: 0 !important;
}

#wave-timeline {
    background-color: rgba(0, 0, 0, 0.8);
}

.head.svelte-1cl284s {
    display: none;
}
a  
function load_wavesurfer() {
    function load_script(url) {
        const script = document.createElement('script');
        script.src = url;
        document.body.appendChild(script);

        return new Promise((res, rej) => {
            script.onload = function() {
                res();
            }
            script.onerror = function () {
                rej();
            }
        });
    }

    function create_wavesurfer() {
        var options = {
            container: '#waveform',
            waveColor: '#F2F2F2', // Set a darker wave color
            progressColor: 'white', // Set a slightly lighter progress color
            loaderColor: 'white', // Set a slightly lighter loader color
            cursorColor: 'black', // Set a slightly lighter cursor color
            backgroundColor: '#00AAFF', // Set a black background color
            barWidth: 4,
            barRadius: 3,
            barHeight: 1, // the height of the wave
            plugins: [
                WaveSurfer.regions.create({
                    regionsMinLength: 0.0,
                    dragSelection: {
                        slop: 5
                    },
                    color: 'hsla(200, 50%, 70%, 0.4)',
                }),
                 WaveSurfer.timeline.create({
                    container: "#wave-timeline",
                    primaryLabelInterval: 5.0,
                    secondaryLabelInterval: 1.0,
                    primaryFontColor: '#F2F2F2',
                    secondaryFontColor: '#F2F2F2',
                }),
            ]
        };
        wavesurfer = WaveSurfer.create(options);
        wavesurfer.on('region-created', region => {
            wavesurfer.regions.clear();
        });
        wavesurfer.on('finish', function () {
            var loop =  document.getElementById("loop-button").textContent.includes("ON");
            if (loop) {
                wavesurfer.play();
            }
            else {
                var button_elements = document.getElementsByClassName('playpause')
                var buttons = Array.from(button_elements);

                for (let j = 0; j < buttons.length; j++) {
                    buttons[j].classList.remove("primary");
                    buttons[j].classList.add("secondary");
                    buttons[j].textContent = buttons[j].textContent.replace("Stop", "Play")
                }
            }
        });

        wavesurfer.on('region-out', function () {
            var loop =  document.getElementById("loop-button").textContent.includes("ON");
            if (!loop) {
                var button_elements = document.getElementsByClassName('playpause')
                var buttons = Array.from(button_elements);

                for (let j = 0; j < buttons.length; j++) {
                    buttons[j].classList.remove("primary");
                    buttons[j].classList.add("secondary");
                    buttons[j].textContent = buttons[j].textContent.replace("Stop", "Play")
                }
                wavesurfer.pause();
            }
        });

        console.log("Created WaveSurfer object.")
    }

    load_script('https://unpkg.com/wavesurfer.js@6.6.4')
        .then(() => {
            load_script("https://unpkg.com/wavesurfer.js@6.6.4/dist/plugin/wavesurfer.timeline.min.js")
                .then(() => {
                    load_script('https://unpkg.com/wavesurfer.js@6.6.4/dist/plugin/wavesurfer.regions.min.js')
                        .then(() => {
                            console.log("Loaded regions");
                            create_wavesurfer();
                            document.getElementById("start-survey").click();
                        })
                })
        });
}
c                 C   s   d dt| S )Na  
function play() {
    var audio_elements = document.getElementsByTagName('audio');
    var button_elements = document.getElementsByClassName('playpause')

    var audio_array = Array.from(audio_elements);
    var buttons = Array.from(button_elements);

    var src_link = audio_array[{i}].getAttribute("src");
    console.log(src_link);

    var loop = document.getElementById("loop-button").textContent.includes("ON");
    var playing = buttons[{i}].textContent.includes("Stop");

    for (let j = 0; j < buttons.length; j++) {
        if (j != {i} || playing) {
            buttons[j].classList.remove("primary");
            buttons[j].classList.add("secondary");
            buttons[j].textContent = buttons[j].textContent.replace("Stop", "Play")
        }
        else {
            buttons[j].classList.remove("secondary");
            buttons[j].classList.add("primary");
            buttons[j].textContent = buttons[j].textContent.replace("Play", "Stop")
        }
    }

    if (playing) {
        wavesurfer.pause();
        wavesurfer.seekTo(0.0);
    }
    else {
        wavesurfer.load(src_link);
        wavesurfer.on('ready', function () {
            var region = Object.values(wavesurfer.regions.list)[0];

            if (region != null) {
                region.loop = loop;
                region.play();
            } else {
                wavesurfer.play();
            }
        });
    }
}
z{i})replacestr)i r
   I/home/ubuntu/.local/lib/python3.10/site-packages/audiotools/preference.py<lambda>   s    -r   z=
function clear_regions() {
    wavesurfer.clearRegions();
}
a  
function reset_player() {
    wavesurfer.clearRegions();
    wavesurfer.pause();
    wavesurfer.seekTo(0.0);

    var button_elements = document.getElementsByClassName('playpause')
    var buttons = Array.from(button_elements);

    for (let j = 0; j < buttons.length; j++) {
        buttons[j].classList.remove("primary");
        buttons[j].classList.add("secondary");
        buttons[j].textContent = buttons[j].textContent.replace("Stop", "Play")
    }
}
aF  
function loop_region() {
    var element = document.getElementById("loop-button");
    var loop = element.textContent.includes("OFF");
    console.log(loop);

    try {
        var region = Object.values(wavesurfer.regions.list)[0];
        region.loop = loop;
    } catch {}

    if (loop) {
        element.classList.remove("secondary");
        element.classList.add("primary");
        element.textContent = "Looping ON";
    } else {
        element.classList.remove("primary");
        element.classList.add("secondary");
        element.textContent = "Looping OFF";
    }
}
c                   @   s4   e Zd Zdd Zdd ZddefddZd	d
 ZdS )Playerc                 C   s,   || _ | j jtd t| j _g | _d| _d S )N_jsr   )apploadload_wavesurfer_js
CUSTOM_CSScsswavsposition)selfr   r
   r
   r   __init__   s
   
zPlayer.__init__c                 C   s~   t t t d t  " t d}t jddd}|jd td |jd td W d    n1 s3w   Y  t d d S )NzClick and drag on the waveform above to select a region for playback. Once created, the region can be moved around and resized. Clear the regions using the button below. Hit play on one of the buttons below to start!zClear regionzLooping OFFzloop-button)elem_idr   z<hr>)	grHTML
WAVESURFERMarkdownRowButtonclickloop_regionclear_regions)r   clearloopr
   r
   r   create   s   


zPlayer.createPlaynamec                 C   sb   | j }| jtjddtj|dgd|d | jd d jd t|d |  j d	7  _ | jd S )
NF)visible	playpause)elem_classes)audiobuttonr   r,   r      )r   r   appendr   Audior   r    play)r   r'   r	   r
   r
   r   add
  s   

z
Player.addc                 C   s   dd | j D S )Nc                 S   s   g | ]}|d  qS )r+   r
   ).0xr
   r
   r   
<listcomp>      z"Player.to_list.<locals>.<listcomp>)r   r   r
   r
   r   to_list  s   zPlayer.to_listN)r&   )__name__
__module____qualname__r   r%   r   r2   r8   r
   r
   r
   r   r      s
    	r   c                 C   s   d d| S )Na  
function load_name() {
    function setCookie(name, value, exp_days) {
        var d = new Date();
        d.setTime(d.getTime() + (exp_days*24*60*60*1000));
        var expires = "expires=" + d.toGMTString();
        document.cookie = name + "=" + value + ";" + expires + ";path=/";
    }

    function getCookie(name) {
        var cname = name + "=";
        var decodedCookie = decodeURIComponent(document.cookie);
        var ca = decodedCookie.split(';');
        for(var i = 0; i < ca.length; i++){
            var c = ca[i];
            while(c.charAt(0) == ' '){
                c = c.substring(1);
            }
            if(c.indexOf(cname) == 0){
                return c.substring(cname.length, c.length);
            }
        }
        return "";
    }

    name = getCookie("{name}");
    if (name == "") {
        name = Math.random().toString(36).slice(2);
        console.log(name);
        setCookie("name", name, 30);
    }
    name = getCookie("{name}");
    return name;
}
z{name})r   r'   r
   r
   r   r     s    "a  
<!DOCTYPE html>
<html>
  <head>
    <title>Progress Bar</title>
    <style>
      .progress-bar {
        background-color: #ddd;
        border-radius: 4px;
        height: 30px;
        width: 100%;
        position: relative;
      }

      .progress {
        background-color: #00AAFF;
        border-radius: 4px;
        height: 100%;
        width: {PROGRESS}%; /* Change this value to control the progress */
      }

      .progress-text {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        font-size: 18px;
        font-family: Arial, sans-serif;
        font-weight: bold;
        color: #333 !important;
        text-shadow: 1px 1px #fff;
      }
    </style>
  </head>
  <body>
    <div class="progress-bar">
      <div class="progress"></div>
      <div class="progress-text">{TEXT}</div>
    </div>
  </body>
</html>
r'   c                 C   s(   t jddddd}| jt||d |S )NuserTF)labelinteractiver(   r   )r   outputs)r   Textr   load_tracker)r   cookie_namer=   r
   r
   r   create_trackers  s   rD   a  
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Labels Example</title>
    <style>
      body {
        margin: 0;
        padding: 0;
      }

      .labels-container {
        display: flex;
        justify-content: space-between;
        align-items: center;
        width: 100%;
        height: 40px;
        padding: 0px 12px 0px;
      }

      .label {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 33%;
        height: 100%;
        font-weight: bold;
        text-transform: uppercase;
        padding: 10px;
        font-family: Arial, sans-serif;
        font-size: 16px;
        font-weight: 700;
        letter-spacing: 1px;
        line-height: 1.5;
      }

      .label-a {
        background-color: #00AAFF;
        color: #333 !important;
      }

      .label-tie {
        background-color: #f97316;
        color: #333 !important;
      }

      .label-b {
        background-color: #00AAFF;
        color: #333 !important;
      }
    </style>
  </head>
  <body>
    <div class="labels-container">
      <div class="label label-a">Prefer A</div>
      <div class="label label-tie">Toss-up</div>
      <div class="label label-b">Prefer B</div>
    </div>
  </body>
</html>
a  
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Labels Example</title>
    <style>
      body {
        margin: 0;
        padding: 0;
      }

      .labels-container {
        display: flex;
        justify-content: space-between;
        align-items: center;
        width: 100%;
        height: 30px;
        padding: 10px;
      }

      .label {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 20%;
        height: 100%;
        font-weight: bold;
        text-transform: uppercase;
        padding: 10px;
        font-family: Arial, sans-serif;
        font-size: 13.5px;
        font-weight: 700;
        line-height: 1.5;
      }

      .label-bad {
        background-color: #ff5555;
        color: #333 !important;
      }

      .label-poor {
        background-color: #ffa500;
        color: #333 !important;
      }

      .label-fair {
        background-color: #ffd700;
        color: #333 !important;
      }

      .label-good {
        background-color: #97d997;
        color: #333 !important;
      }

      .label-excellent {
        background-color: #04c822;
        color: #333 !important;
      }
    </style>
  </head>
  <body>
    <div class="labels-container">
      <div class="label label-bad">bad</div>
      <div class="label label-poor">poor</div>
      <div class="label label-fair">fair</div>
      <div class="label label-good">good</div>
      <div class="label label-excellent">excellent</div>
    </div>
  </body>
</html>
c                   @   sL   e Zd ZddededefddZdd	 Zd
d Zdd Z	dd Z
dd ZdS )SamplesTNfoldershuffle	n_samplesc                 C   s   t |}tdd }|D ]}|jj}|||j |< q|| _t| | _d| _	d| _
|r2t| j |d u r>t| j| _d S || _d S )Nc                   S   s   t  S Nr   r
   r
   r
   r   r     s    z"Samples.__init__.<locals>.<lambda>Fr   )r   r   parentstemr'   sampleslistkeysnamesfilteredcurrentrandomrG   lenrH   )r   rF   rG   rH   filesrL   f	conditionr
   r
   r   r     s   "zSamples.__init__c                    s   j |   fdd|D S )Nc                    s&   g | ]}t jtj  | d qS )value)r   updater   rL   )r3   okeyr   r
   r   r5      s   & z'Samples.get_updates.<locals>.<listcomp>)rO   )r   idxorderr
   r[   r   get_updates  s   
zSamples.get_updatesc                 C   sj   z| j t|  d }W n   d}Y d| j  dt|  d}ttdt|dt|}tj|dS )Nd   zOn z / z samplesz
{PROGRESS}z{TEXT}rW   )rQ   rS   copyprogress_templater   r   r   rY   )r   pcttextpbarr
   r
   r   progress"  s   zSamples.progressc                 C   s   | j S rI   )rH   r7   r
   r
   r   __len__/  s   zSamples.__len__c                    s   | j sGg  t| r.t|d}t|}fdd|D  W d    n1 s)w   Y   fdd| jD | _| jd | j | _d| _ d S d S )Nrc                    s    g | ]}|d   kr|d qS )r=   sampler
   )r3   rh   )r=   r
   r   r5   8  s     z,Samples.filter_completed.<locals>.<listcomp>c                    s   g | ]}| vr|qS r
   r
   )r3   k)doner
   r   r5   9  s    T)rP   r   existsopencsv
DictReaderrO   rH   )r   r=   	save_pathrU   readerr
   )rk   r=   r   filter_completed2  s   

zSamples.filter_completedc                 C   s   t | |d ur|g| | _n|| _z| | j| j}|  jd7  _tjdd}|  }W n$   t	  dd t
t| jD }tjddd}t| | _|  }Y |||fS )	Nr.   T)r?   c                 S   s   g | ]}t  qS r
   )r   rY   )r3   _r
   r
   r   r5   K  r6   z+Samples.get_next_sample.<locals>.<listcomp>zNo more samples!F)rX   r?   )rR   rG   r^   r_   rQ   r   rY   rf   	traceback	print_excrangerS   )r   	reference
conditionsupdatesrk   re   r
   r
   r   get_next_sample=  s    



zSamples.get_next_sample)TN)r9   r:   r;   r   boolintr   r_   rf   rg   rr   rz   r
   r
   r
   r   rE     s    rE   c                 C   sl   t |ddd%}tj|tt|  d}| dkr|  ||  W d    d S 1 s/w   Y  d S )Na )modenewline)
fieldnamesr   )	rm   rn   
DictWritersortedrM   rN   tellwriteheaderwriterow)resultrp   filewriterr
   r
   r   save_resultS  s   "r   r<   )ra   rn   rR   sysrt   collectionsr   pathlibr   typingr   gradior   audiotools.core.utilr   r   r   r   r1   r"   reset_playerr!   r   rB   rb   rD   
slider_abxslider_mushrarE   r   r
   r
   r
   r   <module>   s2   c10(
,
?OH