main b1506a2c4c68 cached
43 files
2.7 MB
705.6k tokens
299 symbols
1 requests
Download .txt
Showing preview only (3,069K chars total). Download the full file or copy to clipboard to get everything.
Repository: ConsistencyVC/ConsistencyVC-voive-conversion
Branch: main
Commit: b1506a2c4c68
Files: 43
Total size: 2.7 MB

Directory structure:
gitextract_kr2gfg43/

├── LICENSE
├── README.md
├── commons.py
├── configs/
│   ├── cvc-eng-ppgs-three-emo-cycleloss.json
│   ├── cvc-eng-ppgs-three-emo.json
│   ├── cvc-whispers-multi.json
│   └── cvc-whispers-three-emo.json
├── data_utils_engppg.py
├── data_utils_whisper.py
├── losses.py
├── mel_processing.py
├── models.py
├── modules.py
├── ppg.py
├── ppgemoconvert_exp.py
├── preprocess_ppg.py
├── train_eng_ppg_emo_loss.py
├── train_whisper_emo.py
├── utils.py
├── whisper/
│   ├── LICENSE
│   ├── README.md
│   ├── __init__.py
│   ├── assets/
│   │   ├── gpt2/
│   │   │   ├── merges.txt
│   │   │   ├── special_tokens_map.json
│   │   │   ├── tokenizer_config.json
│   │   │   └── vocab.json
│   │   ├── mel_filters.npz
│   │   └── multilingual/
│   │       ├── added_tokens.json
│   │       ├── merges.txt
│   │       ├── special_tokens_map.json
│   │       ├── tokenizer_config.json
│   │       └── vocab.json
│   ├── audio.py
│   ├── decoding.py
│   ├── model.py
│   ├── normalizers/
│   │   ├── __init__.py
│   │   ├── basic.py
│   │   ├── english.json
│   │   └── english.py
│   ├── tokenizer.py
│   └── utils.py
├── whisperconvert_exp.py
└── whisperconvert_longaudio.py

================================================
FILE CONTENTS
================================================

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2023 ConsistencyVC

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# ConsistencyVC-voive-conversion

## Using joint training speaker encoder with consistency loss to achieve cross-lingual voice conversion and expressive voice conversion

Demo page: https://consistencyvc.github.io/ConsistencyVC-demo-page

The whisper medium model can be downloaded here: https://drive.google.com/file/d/1PZsfQg3PUZuu1k6nHvavd6OcOB_8m1Aa/view?usp=drive_link

The pre-trained models are available here:https://drive.google.com/drive/folders/1KvMN1V8BWCzJd-N8hfyP283rLQBKIbig?usp=sharing

Note: The audio needs to be 16KHz for train and inference.

<img src="cvc627.png" alt="cvc" width="100%">


<!-- 科研好累。 -->

# Inference with the pre-trained models (use WEO as example)

Generate the WEO of the source speech in [src](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/467ed5e632b2b328d01c87cb73e92b26b36deb05/whisperconvert_exp.py#L39C1-L39C1) by preprocess_ppg.py.

Copy the root of the reference speech to [tgt](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/467ed5e632b2b328d01c87cb73e92b26b36deb05/whisperconvert_exp.py#L47)

Use whisperconvert_exp.py to achieve voice conversion using WEO as content information.

For ConsistencyEVC, use ppgemoconvert_exp.py to achieve voice conversion using ppg as content information.

# Inference for the long audio
I uploaded a new py file for the inference of long audio. 
You don't need to run the whisper by another file, just change [this part](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/83f72b0801240e7d932c9314431df6e75f2d1c22/whisperconvert_longaudio.py#L41) and run this py file.

# Train models by your dataset

Use ppg.py to generate the PPG.

Use preprocess_ppg.py to generate the WEO.

## If you want to use WEO to train a cross-lingual voice conversion model:

First you need to train the model without speaker consistency loss for 100k steps:

change [this line](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/b5e8e984dffd5a12910d1846e25b128298933e40/train_whisper_emo.py#L214C11-L214C11) to 

```python
loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl# + loss_emo
```

run the py file:

```python
python train_whisper_emo.py -c configs/cvc-whispers-multi.json -m cvc-whispers-three
```

Then change [this line](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/71cf17a5b65c12987ea7fba74d1d173ea1aae5cb/train_whisper_emo.py#L214) back to finetune this model with speaker consistency loss

```python
python train_whisper_emo.py -c configs/cvc-whispers-three-emo.json -m cvc-whispers-three
```

## If you want to use PPG to train an expressive voice conversion model:

First you need to train the model without speaker consistency loss for 100k steps:

change [this line](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/71cf17a5b65c12987ea7fba74d1d173ea1aae5cb/train_eng_ppg_emo_loss.py#L311) to 

```python
loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl# + loss_emo
```

run the py file:

```python
python train_eng_ppg_emo_loss.py -c configs/cvc-eng-ppgs-three-emo.json -m cvc-eng-ppgs-three-emo
```

Then change [this line](https://github.com/ConsistencyVC/ConsistencyVC-voive-conversion/blob/71cf17a5b65c12987ea7fba74d1d173ea1aae5cb/train_eng_ppg_emo_loss.py#L311) back to finetune this model with speaker consistency loss

```python
python train_eng_ppg_emo_loss.py -c configs/cvc-eng-ppgs-three-emo-cycleloss.json -m cvc-eng-ppgs-three-emo
```


# Reference

The code structure is based on [FreeVC-s](https://github.com/OlaWod/FreeVC). Suggestion: please follow the instruction of FreeVC to install python requirements.

The WEO content feature is based on [LoraSVC](https://github.com/PlayVoice/lora-svc).

The PPG is from the [phoneme recognition model](https://huggingface.co/speech31/wav2vec2-large-english-TIMIT-phoneme_v3).




================================================
FILE: commons.py
================================================
import math
import numpy as np
import torch
from torch import nn
from torch.nn import functional as F


def init_weights(m, mean=0.0, std=0.01):
  classname = m.__class__.__name__
  if classname.find("Conv") != -1:
    m.weight.data.normal_(mean, std)


def get_padding(kernel_size, dilation=1):
  return int((kernel_size*dilation - dilation)/2)


def convert_pad_shape(pad_shape):
  l = pad_shape[::-1]
  pad_shape = [item for sublist in l for item in sublist]
  return pad_shape


def intersperse(lst, item):
  result = [item] * (len(lst) * 2 + 1)
  result[1::2] = lst
  return result


def kl_divergence(m_p, logs_p, m_q, logs_q):
  """KL(P||Q)"""
  kl = (logs_q - logs_p) - 0.5
  kl += 0.5 * (torch.exp(2. * logs_p) + ((m_p - m_q)**2)) * torch.exp(-2. * logs_q)
  return kl


def rand_gumbel(shape):
  """Sample from the Gumbel distribution, protect from overflows."""
  uniform_samples = torch.rand(shape) * 0.99998 + 0.00001
  return -torch.log(-torch.log(uniform_samples))


def rand_gumbel_like(x):
  g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device)
  return g


def slice_segments(x, ids_str, segment_size=4):
  ret = torch.zeros_like(x[:, :, :segment_size])
  for i in range(x.size(0)):
    idx_str = ids_str[i]
    idx_end = idx_str + segment_size
    ret[i] = x[i, :, idx_str:idx_end]
  return ret


def rand_slice_segments(x, x_lengths=None, segment_size=4):
  b, d, t = x.size()
  if x_lengths is None:
    x_lengths = t
  ids_str_max = x_lengths - segment_size + 1
  ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long)
  ret = slice_segments(x, ids_str, segment_size)
  return ret, ids_str


def rand_spec_segments(x, x_lengths=None, segment_size=4):
  b, d, t = x.size()
  if x_lengths is None:
    x_lengths = t
  ids_str_max = x_lengths - segment_size
  ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long)
  ret = slice_segments(x, ids_str, segment_size)
  return ret, ids_str


def get_timing_signal_1d(
    length, channels, min_timescale=1.0, max_timescale=1.0e4):
  position = torch.arange(length, dtype=torch.float)
  num_timescales = channels // 2
  log_timescale_increment = (
      math.log(float(max_timescale) / float(min_timescale)) /
      (num_timescales - 1))
  inv_timescales = min_timescale * torch.exp(
      torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment)
  scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)
  signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)
  signal = F.pad(signal, [0, 0, 0, channels % 2])
  signal = signal.view(1, channels, length)
  return signal


def add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):
  b, channels, length = x.size()
  signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)
  return x + signal.to(dtype=x.dtype, device=x.device)


def cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1):
  b, channels, length = x.size()
  signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)
  return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis)


def subsequent_mask(length):
  mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)
  return mask


@torch.jit.script
def fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):
  n_channels_int = n_channels[0]
  in_act = input_a + input_b
  t_act = torch.tanh(in_act[:, :n_channels_int, :])
  s_act = torch.sigmoid(in_act[:, n_channels_int:, :])
  acts = t_act * s_act
  return acts


def convert_pad_shape(pad_shape):
  l = pad_shape[::-1]
  pad_shape = [item for sublist in l for item in sublist]
  return pad_shape


def shift_1d(x):
  x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]
  return x


def sequence_mask(length, max_length=None):
  if max_length is None:
    max_length = length.max()
  x = torch.arange(max_length, dtype=length.dtype, device=length.device)
  return x.unsqueeze(0) < length.unsqueeze(1)


def generate_path(duration, mask):
  """
  duration: [b, 1, t_x]
  mask: [b, 1, t_y, t_x]
  """
  device = duration.device
  
  b, _, t_y, t_x = mask.shape
  cum_duration = torch.cumsum(duration, -1)
  
  cum_duration_flat = cum_duration.view(b * t_x)
  path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)
  path = path.view(b, t_x, t_y)
  path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]
  path = path.unsqueeze(1).transpose(2,3) * mask
  return path


def clip_grad_value_(parameters, clip_value, norm_type=2):
  if isinstance(parameters, torch.Tensor):
    parameters = [parameters]
  parameters = list(filter(lambda p: p.grad is not None, parameters))
  norm_type = float(norm_type)
  if clip_value is not None:
    clip_value = float(clip_value)

  total_norm = 0
  for p in parameters:
    param_norm = p.grad.data.norm(norm_type)
    total_norm += param_norm.item() ** norm_type
    if clip_value is not None:
      p.grad.data.clamp_(min=-clip_value, max=clip_value)
  total_norm = total_norm ** (1. / norm_type)
  return total_norm


================================================
FILE: configs/cvc-eng-ppgs-three-emo-cycleloss.json
================================================
{
  "train": {
    "log_interval": 200,
    "eval_interval": 6000,
    "seed": 1235,
    "epochs": 10000,
    "learning_rate": 2e-4,
    "betas": [0.8, 0.99],
    "eps": 1e-9,
    "batch_size": 42,
    "fp16_run": true,
    "lr_decay": 0.999875,
    "segment_size": 24000,
    "init_lr_ratio": 1,
    "warmup_epochs": 0,
    "c_mel": 45,
    "c_kl": 1.0,
    "use_sr": false,
    "max_speclen": 300,
    "port": "8006"
  },
  "data": {
    "training_files":"train.txt",
    "validation_files":"test.txt",
    "max_wav_value": 32768.0,
    "sampling_rate": 16000,
    "filter_length": 1024,
    "hop_length": 320,
    "win_length": 1024,
    "n_mel_channels": 80,
    "mel_fmin": 0.0,
    "mel_fmax": null
  },
  "model": {
    "inter_channels": 192,
    "hidden_channels": 192,
    "filter_channels": 768,
    "n_heads": 2,
    "n_layers": 6,
    "kernel_size": 3,
    "p_dropout": 0.1,
    "resblock": "1",
    "resblock_kernel_sizes": [3,7,11],
    "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
    "upsample_rates": [10,8,2,2],
    "upsample_initial_channel": 512,
    "upsample_kernel_sizes": [20,16,4,4],
    "n_layers_q": 3,
    "use_spectral_norm": false,
    "gin_channels": 256,
    "ssl_dim": 44,
    "use_spk": false
  }
}


================================================
FILE: configs/cvc-eng-ppgs-three-emo.json
================================================
{
  "train": {
    "log_interval": 200,
    "eval_interval": 6000,
    "seed": 1235,
    "epochs": 10000,
    "learning_rate": 2e-4,
    "betas": [0.8, 0.99],
    "eps": 1e-9,
    "batch_size": 108,
    "fp16_run": true,
    "lr_decay": 0.999875,
    "segment_size": 8960,
    "init_lr_ratio": 1,
    "warmup_epochs": 0,
    "c_mel": 45,
    "c_kl": 1.0,
    "use_sr": false,
    "max_speclen": 300,
    "port": "8006"
  },
  "data": {
    "training_files":"train.txt",
    "validation_files":"test.txt",
    "max_wav_value": 32768.0,
    "sampling_rate": 16000,
    "filter_length": 1024,
    "hop_length": 320,
    "win_length": 1024,
    "n_mel_channels": 80,
    "mel_fmin": 0.0,
    "mel_fmax": null
  },
  "model": {
    "inter_channels": 192,
    "hidden_channels": 192,
    "filter_channels": 768,
    "n_heads": 2,
    "n_layers": 6,
    "kernel_size": 3,
    "p_dropout": 0.1,
    "resblock": "1",
    "resblock_kernel_sizes": [3,7,11],
    "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
    "upsample_rates": [10,8,2,2],
    "upsample_initial_channel": 512,
    "upsample_kernel_sizes": [20,16,4,4],
    "n_layers_q": 3,
    "use_spectral_norm": false,
    "gin_channels": 256,
    "ssl_dim": 44,
    "use_spk": false
  }
}


================================================
FILE: configs/cvc-whispers-multi.json
================================================
{
  "train": {
    "log_interval": 200,
    "eval_interval": 6000,
    "seed": 1235,
    "epochs": 10000,
    "learning_rate": 2e-4,
    "betas": [0.8, 0.99],
    "eps": 1e-9,
    "batch_size": 108,
    "fp16_run": true,
    "lr_decay": 0.999875,
    "segment_size": 8960,
    "init_lr_ratio": 1,
    "warmup_epochs": 0,
    "c_mel": 45,
    "c_kl": 1.0,
    "use_sr": false,
    "max_speclen": 300,
    "port": "8001"
  },
  "data": {
    "training_files":"train.txt",
    "validation_files":"test.txt",
    "max_wav_value": 32768.0,
    "sampling_rate": 16000,
    "filter_length": 1024,
    "hop_length": 320,
    "win_length": 1024,
    "n_mel_channels": 80,
    "mel_fmin": 0.0,
    "mel_fmax": null
  },
  "model": {
    "inter_channels": 192,
    "hidden_channels": 192,
    "filter_channels": 768,
    "n_heads": 2,
    "n_layers": 6,
    "kernel_size": 3,
    "p_dropout": 0.1,
    "resblock": "1",
    "resblock_kernel_sizes": [3,7,11],
    "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
    "upsample_rates": [10,8,2,2],
    "upsample_initial_channel": 512,
    "upsample_kernel_sizes": [20,16,4,4],
    "n_layers_q": 3,
    "use_spectral_norm": false,
    "gin_channels": 256,
    "ssl_dim": 1024,
    "use_spk": false
  }
}


================================================
FILE: configs/cvc-whispers-three-emo.json
================================================
{
  "train": {
    "log_interval": 200,
    "eval_interval": 2500,
    "seed": 1235,
    "epochs": 10000,
    "learning_rate": 2e-4,
    "betas": [0.8, 0.99],
    "eps": 1e-9,
    "batch_size": 42,
    "fp16_run": true,
    "lr_decay": 0.999875,
    "segment_size": 24000,
    "init_lr_ratio": 1,
    "warmup_epochs": 0,
    "c_mel": 45,
    "c_kl": 1.0,
    "use_sr": false,
    "max_speclen": 300,
    "port": "8006"
  },
  "data": {
    "training_files":"train.txt",
    "validation_files":"test.txt",
    "max_wav_value": 32768.0,
    "sampling_rate": 16000,
    "filter_length": 1024,
    "hop_length": 320,
    "win_length": 1024,
    "n_mel_channels": 80,
    "mel_fmin": 0.0,
    "mel_fmax": null
  },
  "model": {
    "inter_channels": 192,
    "hidden_channels": 192,
    "filter_channels": 768,
    "n_heads": 2,
    "n_layers": 6,
    "kernel_size": 3,
    "p_dropout": 0.1,
    "resblock": "1",
    "resblock_kernel_sizes": [3,7,11],
    "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
    "upsample_rates": [10,8,2,2],
    "upsample_initial_channel": 512,
    "upsample_kernel_sizes": [20,16,4,4],
    "n_layers_q": 3,
    "use_spectral_norm": false,
    "gin_channels": 256,
    "ssl_dim": 1024,
    "use_spk": false
  }
}


================================================
FILE: data_utils_engppg.py
================================================
import time
import os
import random
import numpy as np
import torch
import torch.utils.data

import commons 
from mel_processing import spectrogram_torch, spec_to_mel_torch
from utils import load_wav_to_torch, load_filepaths_and_text, transform
#import h5py


"""Multi speaker version"""
class TextAudioSpeakerLoader(torch.utils.data.Dataset):
    """
        1) loads audio, speaker_id, text pairs
        2) normalizes text and converts them to sequences of integers
        3) computes spectrograms from audio files.
    """
    def __init__(self, audiopaths, hparams):
        self.audiopaths = load_filepaths_and_text(audiopaths)
        self.max_wav_value = hparams.data.max_wav_value
        self.sampling_rate = hparams.data.sampling_rate
        self.filter_length  = hparams.data.filter_length
        self.hop_length     = hparams.data.hop_length
        self.win_length     = hparams.data.win_length
        self.sampling_rate  = hparams.data.sampling_rate
        self.use_sr = hparams.train.use_sr
        self.use_spk = hparams.model.use_spk
        self.spec_len = hparams.train.max_speclen

        random.seed(1235)
        random.shuffle(self.audiopaths)
        self._filter()

    def _filter(self):
        """
        Filter text & store spec lengths
        """
        # Store spectrogram lengths for Bucketing
        # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2)
        # spec_length = wav_length // hop_length

        lengths = []
        for audiopath in self.audiopaths:
            lengths.append(os.path.getsize(audiopath[0]) // (2 * self.hop_length))
        self.lengths = lengths

    def get_audio(self, filename):
        audio, sampling_rate = load_wav_to_torch(filename)
        if sampling_rate != self.sampling_rate:
            raise ValueError("{} SR doesn't match target {} SR,the audio is{}".format(
                sampling_rate, self.sampling_rate,filename))
        audio_norm = audio / self.max_wav_value
        audio_norm = audio_norm.unsqueeze(0)
        spec_filename = filename.replace(".wav", ".f{}h{}w{}spec.pt".format(self.filter_length, self.hop_length, self.win_length))
        if os.path.exists(spec_filename):
            try:
                spec = torch.load(spec_filename)
            except:
                print(spec_filename,"不存在")
                spec = spectrogram_torch(audio_norm, self.filter_length,
                    self.sampling_rate, self.hop_length, self.win_length,
                    center=False)
                spec = torch.squeeze(spec, 0)
                torch.save(spec, spec_filename)
        else:
            #import sys
            #print(spec_filename,"不存在")
            #sys.exit()
            spec = spectrogram_torch(audio_norm, self.filter_length,
                self.sampling_rate, self.hop_length, self.win_length,
                center=False)
            spec = torch.squeeze(spec, 0)
            torch.save(spec, spec_filename)
            
        if self.use_spk:
            spk_filename = filename.replace(".wav", ".npy")
            spk_filename = spk_filename.replace("DUMMY", "dataset/spk")
            spk = torch.from_numpy(np.load(spk_filename))
        
        if not self.use_sr:
            c_filename = filename.replace(".wav", "_eng_ppg.pt")
            #c_filename = c_filename.replace("DUMMY", "dataset/wavlm")
            c = torch.load(c_filename).squeeze(0)
           
        else:
            i = random.randint(68,92)
            '''
            basename = os.path.basename(filename)[:-4]
            spkname = basename[:4]
            #print(basename, spkname)
            with h5py.File(f"dataset/rs/wavlm/{spkname}/{i}.hdf5","r") as f:
                c = torch.from_numpy(f[basename][()]).squeeze(0)
            #print(c)
            '''
            import sys
            sys.exit()
            c_filename = filename.replace(".wav", f"_{i}.pt")
            c_filename = c_filename.replace("DUMMY", "dataset/sr/wavlm")
            c = torch.load(c_filename).squeeze(0)
            
        # 2023.01.10 update: code below can deteriorate model performance
        # I added these code during cleaning up, thinking that it can offer better performance than my provided checkpoints, but actually it does the opposite.
        # What an act of 'adding legs to a snake'!
        '''
        lmin = min(c.size(-1), spec.size(-1))
        spec, c = spec[:, :lmin], c[:, :lmin]
        audio_norm = audio_norm[:, :lmin*self.hop_length]
        _spec, _c, _audio_norm = spec, c, audio_norm
        while spec.size(-1) < self.spec_len:
            spec = torch.cat((spec, _spec), -1)
            c = torch.cat((c, _c), -1)
            audio_norm = torch.cat((audio_norm, _audio_norm), -1)
        start = random.randint(0, spec.size(-1) - self.spec_len)
        end = start + self.spec_len
        spec = spec[:, start:end]
        c = c[:, start:end]
        audio_norm = audio_norm[:, start*self.hop_length:end*self.hop_length]
        '''
        
        #if self.use_spk:
        #    return c, spec, audio_norm, spk
        #else:
        return c, spec, audio_norm

    def __getitem__(self, index):
        return self.get_audio(self.audiopaths[index][0])

    def __len__(self):
        return len(self.audiopaths)


class TextAudioSpeakerCollate():
    """ Zero-pads model inputs and targets
    """
    def __init__(self, hps):
        self.hps = hps
        self.use_sr = hps.train.use_sr
        self.use_spk = hps.model.use_spk

    def __call__(self, batch):
        """Collate's training batch from normalized text, audio and speaker identities
        PARAMS
        ------
        batch: [text_normalized, spec_normalized, wav_normalized, sid]
        """
        # Right zero-pad all one-hot text sequences to max input length
        _, ids_sorted_decreasing = torch.sort(
            torch.LongTensor([x[0].size(1) for x in batch]),
            dim=0, descending=True)

        max_spec_len = max([x[1].size(1) for x in batch])
        max_wav_len = max([x[2].size(1) for x in batch])

        spec_lengths = torch.LongTensor(len(batch))
        wav_lengths = torch.LongTensor(len(batch))
        if self.use_spk:
            spks = torch.FloatTensor(len(batch), batch[0][3].size(0))
        else:
            spks = None
        
        c_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len)
        spec_padded = torch.FloatTensor(len(batch), batch[0][1].size(0), max_spec_len)
        wav_padded = torch.FloatTensor(len(batch), 1, max_wav_len)
        c_padded.zero_()
        spec_padded.zero_()
        wav_padded.zero_()
        
        for i in range(len(ids_sorted_decreasing)):
            row = batch[ids_sorted_decreasing[i]]
            
            c = row[0]
            c_padded[i, :, :c.size(1)] = c

            spec = row[1]
            spec_padded[i, :, :spec.size(1)] = spec
            spec_lengths[i] = spec.size(1)

            wav = row[2]
            wav_padded[i, :, :wav.size(1)] = wav
            wav_lengths[i] = wav.size(1)
            
            if self.use_spk:
                spks[i] = row[3]
        
        spec_seglen = spec_lengths[-1] if spec_lengths[-1] < self.hps.train.max_speclen + 1 else self.hps.train.max_speclen + 1
        wav_seglen = spec_seglen * self.hps.data.hop_length 

        spec_padded, ids_slice = commons.rand_spec_segments(spec_padded, spec_lengths, spec_seglen)
        wav_padded = commons.slice_segments(wav_padded, ids_slice * self.hps.data.hop_length, wav_seglen)
        
        c_padded = commons.slice_segments(c_padded, ids_slice, spec_seglen)[:,:,:-1]
    
        spec_padded = spec_padded[:,:,:-1]
        wav_padded = wav_padded[:,:,:-self.hps.data.hop_length]

        if self.use_spk:
          return c_padded, spec_padded, wav_padded, spks
        else:
          return c_padded, spec_padded, wav_padded


class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler):
    """
    Maintain similar input lengths in a batch.
    Length groups are specified by boundaries.
    Ex) boundaries = [b1, b2, b3] -> any batch is included either {x | b1 < length(x) <=b2} or {x | b2 < length(x) <= b3}.
  
    It removes samples which are not included in the boundaries.
    Ex) boundaries = [b1, b2, b3] -> any x s.t. length(x) <= b1 or length(x) > b3 are discarded.
    """
    def __init__(self, dataset, batch_size, boundaries, num_replicas=None, rank=None, shuffle=True):
        super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle)
        self.lengths = dataset.lengths
        self.batch_size = batch_size
        self.boundaries = boundaries
  
        self.buckets, self.num_samples_per_bucket = self._create_buckets()
        print(self.num_samples_per_bucket)
        self.total_size = sum(self.num_samples_per_bucket)
        self.num_samples = self.total_size // self.num_replicas
  
    def _create_buckets(self):
        buckets = [[] for _ in range(len(self.boundaries) - 1)]
        for i in range(len(self.lengths)):
            length = self.lengths[i]
            idx_bucket = self._bisect(length)
            if idx_bucket != -1:
                buckets[idx_bucket].append(i)
  
        for i in range(len(buckets) - 1, 0, -1):
            if len(buckets[i]) == 0:
                buckets.pop(i)
                self.boundaries.pop(i+1)
  
        num_samples_per_bucket = []
        for i in range(len(buckets)):
            len_bucket = len(buckets[i])
            total_batch_size = self.num_replicas * self.batch_size
            rem = (total_batch_size - (len_bucket % total_batch_size)) % total_batch_size
            num_samples_per_bucket.append(len_bucket + rem)
        return buckets, num_samples_per_bucket
  
    def __iter__(self):
      # deterministically shuffle based on epoch
      g = torch.Generator()
      g.manual_seed(self.epoch)
  
      indices = []
      if self.shuffle:
          for bucket in self.buckets:
              indices.append(torch.randperm(len(bucket), generator=g).tolist())
      else:
          for bucket in self.buckets:
              indices.append(list(range(len(bucket))))
  
      batches = []
      for i in range(len(self.buckets)):
          bucket = self.buckets[i]
          len_bucket = len(bucket)
          ids_bucket = indices[i]
          num_samples_bucket = self.num_samples_per_bucket[i]
  
          # add extra samples to make it evenly divisible
          rem = num_samples_bucket - len_bucket
          ids_bucket = ids_bucket + ids_bucket * (rem // len_bucket) + ids_bucket[:(rem % len_bucket)]
  
          # subsample
          ids_bucket = ids_bucket[self.rank::self.num_replicas]
  
          # batching
          for j in range(len(ids_bucket) // self.batch_size):
              batch = [bucket[idx] for idx in ids_bucket[j*self.batch_size:(j+1)*self.batch_size]]
              batches.append(batch)
  
      if self.shuffle:
          batch_ids = torch.randperm(len(batches), generator=g).tolist()
          batches = [batches[i] for i in batch_ids]
      self.batches = batches
  
      assert len(self.batches) * self.batch_size == self.num_samples
      return iter(self.batches)
  
    def _bisect(self, x, lo=0, hi=None):
      if hi is None:
          hi = len(self.boundaries) - 1
  
      if hi > lo:
          mid = (hi + lo) // 2
          if self.boundaries[mid] < x and x <= self.boundaries[mid+1]:
              return mid
          elif x <= self.boundaries[mid]:
              return self._bisect(x, lo, mid)
          else:
              return self._bisect(x, mid + 1, hi)
      else:
          return -1

    def __len__(self):
        return self.num_samples // self.batch_size


================================================
FILE: data_utils_whisper.py
================================================
import time
import os
import random
import numpy as np
import torch
import torch.utils.data

import commons 
from mel_processing import spectrogram_torch, spec_to_mel_torch
from utils import load_wav_to_torch, load_filepaths_and_text, transform
#import h5py


"""Multi speaker version"""
class TextAudioSpeakerLoader(torch.utils.data.Dataset):
    """
        1) loads audio, speaker_id, text pairs
        2) normalizes text and converts them to sequences of integers
        3) computes spectrograms from audio files.
    """
    def __init__(self, audiopaths, hparams):
        self.audiopaths = load_filepaths_and_text(audiopaths)
        self.max_wav_value = hparams.data.max_wav_value
        self.sampling_rate = hparams.data.sampling_rate
        self.filter_length  = hparams.data.filter_length
        self.hop_length     = hparams.data.hop_length
        self.win_length     = hparams.data.win_length
        self.sampling_rate  = hparams.data.sampling_rate
        self.use_sr = hparams.train.use_sr
        self.use_spk = hparams.model.use_spk
        self.spec_len = hparams.train.max_speclen

        random.seed(1235)
        random.shuffle(self.audiopaths)
        self._filter()

    def _filter(self):
        """
        Filter text & store spec lengths
        """
        # Store spectrogram lengths for Bucketing
        # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2)
        # spec_length = wav_length // hop_length

        lengths = []
        for audiopath in self.audiopaths:
            lengths.append(os.path.getsize(audiopath[0]) // (2 * self.hop_length))
        self.lengths = lengths

    def get_audio(self, filename):
        audio, sampling_rate = load_wav_to_torch(filename)
        if sampling_rate != self.sampling_rate:
            raise ValueError("{} SR doesn't match target {} SR,the audio is{}".format(
                sampling_rate, self.sampling_rate,filename))
        audio_norm = audio / self.max_wav_value
        audio_norm = audio_norm.unsqueeze(0)
        #spec_filename = filename.replace(".wav", ".spec.pt")
        spec_filename = filename.replace(".wav", ".f{}h{}w{}spec.pt".format(self.filter_length, self.hop_length, self.win_length))
        if os.path.exists(spec_filename):
            try:
                spec = torch.load(spec_filename)
            except:
                print(spec_filename)
                spec = spectrogram_torch(audio_norm, self.filter_length,
                    self.sampling_rate, self.hop_length, self.win_length,
                    center=False)
                spec = torch.squeeze(spec, 0)
                torch.save(spec, spec_filename)
        else:
            print(spec_filename)
            spec = spectrogram_torch(audio_norm, self.filter_length,
                self.sampling_rate, self.hop_length, self.win_length,
                center=False)
            spec = torch.squeeze(spec, 0)
            torch.save(spec, spec_filename)
            
        if self.use_spk:
            spk_filename = filename.replace(".wav", ".npy")
            spk_filename = spk_filename.replace("DUMMY", "dataset/spk")
            spk = torch.from_numpy(np.load(spk_filename))
        
        if not self.use_sr:
            c_filename = filename.replace(".wav", "whisper.pt.npy")
            #c_filename = c_filename.replace("DUMMY", "dataset/wavlm")
            #c = torch.load(c_filename).squeeze(0)
            c=torch.from_numpy(np.load(c_filename))
            c=c.transpose(1,0)
        else:
            i = random.randint(68,92)
            '''
            basename = os.path.basename(filename)[:-4]
            spkname = basename[:4]
            #print(basename, spkname)
            with h5py.File(f"dataset/rs/wavlm/{spkname}/{i}.hdf5","r") as f:
                c = torch.from_numpy(f[basename][()]).squeeze(0)
            #print(c)
            '''
            c_filename = filename.replace(".wav", f"_{i}.pt")
            c_filename = c_filename.replace("DUMMY", "dataset/sr/wavlm")
            c = torch.load(c_filename).squeeze(0)
            
        # 2023.01.10 update: code below can deteriorate model performance
        # I added these code during cleaning up, thinking that it can offer better performance than my provided checkpoints, but actually it does the opposite.
        # What an act of 'adding legs to a snake'!
        '''
        lmin = min(c.size(-1), spec.size(-1))
        spec, c = spec[:, :lmin], c[:, :lmin]
        audio_norm = audio_norm[:, :lmin*self.hop_length]
        _spec, _c, _audio_norm = spec, c, audio_norm
        while spec.size(-1) < self.spec_len:
            spec = torch.cat((spec, _spec), -1)
            c = torch.cat((c, _c), -1)
            audio_norm = torch.cat((audio_norm, _audio_norm), -1)
        start = random.randint(0, spec.size(-1) - self.spec_len)
        end = start + self.spec_len
        spec = spec[:, start:end]
        c = c[:, start:end]
        audio_norm = audio_norm[:, start*self.hop_length:end*self.hop_length]
        '''
        
        #if self.use_spk:
        #    return c, spec, audio_norm, spk
        #else:
        return c, spec, audio_norm

    def __getitem__(self, index):
        return self.get_audio(self.audiopaths[index][0])

    def __len__(self):
        return len(self.audiopaths)


class TextAudioSpeakerCollate():
    """ Zero-pads model inputs and targets
    """
    def __init__(self, hps):
        self.hps = hps
        self.use_sr = hps.train.use_sr
        self.use_spk = hps.model.use_spk

    def __call__(self, batch):
        """Collate's training batch from normalized text, audio and speaker identities
        PARAMS
        ------
        batch: [text_normalized, spec_normalized, wav_normalized, sid]
        """
        # Right zero-pad all one-hot text sequences to max input length
        _, ids_sorted_decreasing = torch.sort(
            torch.LongTensor([x[0].size(1) for x in batch]),
            dim=0, descending=True)

        max_spec_len = max([x[1].size(1) for x in batch])
        max_wav_len = max([x[2].size(1) for x in batch])

        spec_lengths = torch.LongTensor(len(batch))
        wav_lengths = torch.LongTensor(len(batch))
        if self.use_spk:
            spks = torch.FloatTensor(len(batch), batch[0][3].size(0))
        else:
            spks = None
        
        c_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len)
        spec_padded = torch.FloatTensor(len(batch), batch[0][1].size(0), max_spec_len)
        wav_padded = torch.FloatTensor(len(batch), 1, max_wav_len)
        c_padded.zero_()
        spec_padded.zero_()
        wav_padded.zero_()
        
        for i in range(len(ids_sorted_decreasing)):
            row = batch[ids_sorted_decreasing[i]]
            
            c = row[0]
            c_padded[i, :, :c.size(1)] = c

            spec = row[1]
            spec_padded[i, :, :spec.size(1)] = spec
            spec_lengths[i] = spec.size(1)

            wav = row[2]
            wav_padded[i, :, :wav.size(1)] = wav
            wav_lengths[i] = wav.size(1)
            
            if self.use_spk:
                spks[i] = row[3]
        
        spec_seglen = spec_lengths[-1] if spec_lengths[-1] < self.hps.train.max_speclen + 1 else self.hps.train.max_speclen + 1
        wav_seglen = spec_seglen * self.hps.data.hop_length 

        spec_padded, ids_slice = commons.rand_spec_segments(spec_padded, spec_lengths, spec_seglen)
        wav_padded = commons.slice_segments(wav_padded, ids_slice * self.hps.data.hop_length, wav_seglen)
        
        c_padded = commons.slice_segments(c_padded, ids_slice, spec_seglen)[:,:,:-1]
    
        spec_padded = spec_padded[:,:,:-1]
        wav_padded = wav_padded[:,:,:-self.hps.data.hop_length]

        if self.use_spk:
          return c_padded, spec_padded, wav_padded, spks
        else:
          return c_padded, spec_padded, wav_padded


class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler):
    """
    Maintain similar input lengths in a batch.
    Length groups are specified by boundaries.
    Ex) boundaries = [b1, b2, b3] -> any batch is included either {x | b1 < length(x) <=b2} or {x | b2 < length(x) <= b3}.
  
    It removes samples which are not included in the boundaries.
    Ex) boundaries = [b1, b2, b3] -> any x s.t. length(x) <= b1 or length(x) > b3 are discarded.
    """
    def __init__(self, dataset, batch_size, boundaries, num_replicas=None, rank=None, shuffle=True):
        super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle)
        self.lengths = dataset.lengths
        self.batch_size = batch_size
        self.boundaries = boundaries
  
        self.buckets, self.num_samples_per_bucket = self._create_buckets()
        print(self.num_samples_per_bucket)
        self.total_size = sum(self.num_samples_per_bucket)
        self.num_samples = self.total_size // self.num_replicas
  
    def _create_buckets(self):
        buckets = [[] for _ in range(len(self.boundaries) - 1)]
        for i in range(len(self.lengths)):
            length = self.lengths[i]
            idx_bucket = self._bisect(length)
            if idx_bucket != -1:
                buckets[idx_bucket].append(i)
  
        for i in range(len(buckets) - 1, 0, -1):
            if len(buckets[i]) == 0:
                buckets.pop(i)
                self.boundaries.pop(i+1)
  
        num_samples_per_bucket = []
        for i in range(len(buckets)):
            len_bucket = len(buckets[i])
            total_batch_size = self.num_replicas * self.batch_size
            rem = (total_batch_size - (len_bucket % total_batch_size)) % total_batch_size
            num_samples_per_bucket.append(len_bucket + rem)
        return buckets, num_samples_per_bucket
  
    def __iter__(self):
      # deterministically shuffle based on epoch
      g = torch.Generator()
      g.manual_seed(self.epoch)
  
      indices = []
      if self.shuffle:
          for bucket in self.buckets:
              indices.append(torch.randperm(len(bucket), generator=g).tolist())
      else:
          for bucket in self.buckets:
              indices.append(list(range(len(bucket))))
  
      batches = []
      for i in range(len(self.buckets)):
          bucket = self.buckets[i]
          len_bucket = len(bucket)
          ids_bucket = indices[i]
          num_samples_bucket = self.num_samples_per_bucket[i]
  
          # add extra samples to make it evenly divisible
          rem = num_samples_bucket - len_bucket
          ids_bucket = ids_bucket + ids_bucket * (rem // len_bucket) + ids_bucket[:(rem % len_bucket)]
  
          # subsample
          ids_bucket = ids_bucket[self.rank::self.num_replicas]
  
          # batching
          for j in range(len(ids_bucket) // self.batch_size):
              batch = [bucket[idx] for idx in ids_bucket[j*self.batch_size:(j+1)*self.batch_size]]
              batches.append(batch)
  
      if self.shuffle:
          batch_ids = torch.randperm(len(batches), generator=g).tolist()
          batches = [batches[i] for i in batch_ids]
      self.batches = batches
  
      assert len(self.batches) * self.batch_size == self.num_samples
      return iter(self.batches)
  
    def _bisect(self, x, lo=0, hi=None):
      if hi is None:
          hi = len(self.boundaries) - 1
  
      if hi > lo:
          mid = (hi + lo) // 2
          if self.boundaries[mid] < x and x <= self.boundaries[mid+1]:
              return mid
          elif x <= self.boundaries[mid]:
              return self._bisect(x, lo, mid)
          else:
              return self._bisect(x, mid + 1, hi)
      else:
          return -1

    def __len__(self):
        return self.num_samples // self.batch_size


================================================
FILE: losses.py
================================================
import torch 
from torch.nn import functional as F

import commons


def feature_loss(fmap_r, fmap_g):
  loss = 0
  for dr, dg in zip(fmap_r, fmap_g):
    for rl, gl in zip(dr, dg):
      rl = rl.float().detach()
      gl = gl.float()
      loss += torch.mean(torch.abs(rl - gl))

  return loss * 2 


def discriminator_loss(disc_real_outputs, disc_generated_outputs):
  loss = 0
  r_losses = []
  g_losses = []
  for dr, dg in zip(disc_real_outputs, disc_generated_outputs):
    dr = dr.float()
    dg = dg.float()
    r_loss = torch.mean((1-dr)**2)
    g_loss = torch.mean(dg**2)
    loss += (r_loss + g_loss)
    r_losses.append(r_loss.item())
    g_losses.append(g_loss.item())

  return loss, r_losses, g_losses


def generator_loss(disc_outputs):
  loss = 0
  gen_losses = []
  for dg in disc_outputs:
    dg = dg.float()
    l = torch.mean((1-dg)**2)
    gen_losses.append(l)
    loss += l

  return loss, gen_losses


def kl_loss(z_p, logs_q, m_p, logs_p, z_mask):
  """
  z_p, logs_q: [b, h, t_t]
  m_p, logs_p: [b, h, t_t]
  """
  z_p = z_p.float()
  logs_q = logs_q.float()
  m_p = m_p.float()
  logs_p = logs_p.float()
  z_mask = z_mask.float()
  #print(logs_p)
  kl = logs_p - logs_q - 0.5
  kl += 0.5 * ((z_p - m_p)**2) * torch.exp(-2. * logs_p)
  kl = torch.sum(kl * z_mask)
  l = kl / torch.sum(z_mask)
  return l


================================================
FILE: mel_processing.py
================================================
import math
import os
import random
import torch
from torch import nn
import torch.nn.functional as F
import torch.utils.data
import numpy as np
import librosa
import librosa.util as librosa_util
from librosa.util import normalize, pad_center, tiny
from scipy.signal import get_window
from scipy.io.wavfile import read
from librosa.filters import mel as librosa_mel_fn

MAX_WAV_VALUE = 32768.0


def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
    """
    PARAMS
    ------
    C: compression factor
    """
    return torch.log(torch.clamp(x, min=clip_val) * C)


def dynamic_range_decompression_torch(x, C=1):
    """
    PARAMS
    ------
    C: compression factor used to compress
    """
    return torch.exp(x) / C


def spectral_normalize_torch(magnitudes):
    output = dynamic_range_compression_torch(magnitudes)
    return output


def spectral_de_normalize_torch(magnitudes):
    output = dynamic_range_decompression_torch(magnitudes)
    return output


mel_basis = {}
hann_window = {}


def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False):
    if torch.min(y) < -1.:
        print('min value is ', torch.min(y))
    if torch.max(y) > 1.:
        print('max value is ', torch.max(y))

    global hann_window
    dtype_device = str(y.dtype) + '_' + str(y.device)
    wnsize_dtype_device = str(win_size) + '_' + dtype_device
    if wnsize_dtype_device not in hann_window:
        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(dtype=y.dtype, device=y.device)

    y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft-hop_size)/2), int((n_fft-hop_size)/2)), mode='reflect')
    y = y.squeeze(1)

    spec = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],
                      center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)

    spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)
    return spec


def spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax):
    global mel_basis
    dtype_device = str(spec.dtype) + '_' + str(spec.device)
    fmax_dtype_device = str(fmax) + '_' + dtype_device
    if fmax_dtype_device not in mel_basis:
        mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)
        mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(dtype=spec.dtype, device=spec.device)
    spec = torch.matmul(mel_basis[fmax_dtype_device], spec)
    spec = spectral_normalize_torch(spec)
    return spec


def mel_spectrogram_torch(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):
    if torch.min(y) < -1.:
        print('min value is ', torch.min(y))
    if torch.max(y) > 1.:
        print('max value is ', torch.max(y))

    global mel_basis, hann_window
    dtype_device = str(y.dtype) + '_' + str(y.device)
    fmax_dtype_device = str(fmax) + '_' + dtype_device
    wnsize_dtype_device = str(win_size) + '_' + dtype_device
    if fmax_dtype_device not in mel_basis:
        mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)
        mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(dtype=y.dtype, device=y.device)
    if wnsize_dtype_device not in hann_window:
        hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(dtype=y.dtype, device=y.device)

    y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft-hop_size)/2), int((n_fft-hop_size)/2)), mode='reflect')
    y = y.squeeze(1)

    spec = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],
                      center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)

    spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)

    spec = torch.matmul(mel_basis[fmax_dtype_device], spec)
    spec = spectral_normalize_torch(spec)

    return spec


================================================
FILE: models.py
================================================
import copy
import math
import torch
from torch import nn
from torch.nn import functional as F

import commons
import modules

from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d
from torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm
from commons import init_weights, get_padding


class ResidualCouplingBlock(nn.Module):
  def __init__(self,
      channels,
      hidden_channels,
      kernel_size,
      dilation_rate,
      n_layers,
      n_flows=4,
      gin_channels=0):
    super().__init__()
    self.channels = channels
    self.hidden_channels = hidden_channels
    self.kernel_size = kernel_size
    self.dilation_rate = dilation_rate
    self.n_layers = n_layers
    self.n_flows = n_flows
    self.gin_channels = gin_channels

    self.flows = nn.ModuleList()
    for i in range(n_flows):
      self.flows.append(modules.ResidualCouplingLayer(channels, hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=gin_channels, mean_only=True))
      self.flows.append(modules.Flip())

  def forward(self, x, x_mask, g=None, reverse=False):
    if not reverse:
      for flow in self.flows:
        x, _ = flow(x, x_mask, g=g, reverse=reverse)
    else:
      for flow in reversed(self.flows):
        x = flow(x, x_mask, g=g, reverse=reverse)
    return x


class Encoder(nn.Module):
  def __init__(self,
      in_channels,
      out_channels,
      hidden_channels,
      kernel_size,
      dilation_rate,
      n_layers,
      gin_channels=0):
    super().__init__()
    self.in_channels = in_channels
    self.out_channels = out_channels
    self.hidden_channels = hidden_channels
    self.kernel_size = kernel_size
    self.dilation_rate = dilation_rate
    self.n_layers = n_layers
    self.gin_channels = gin_channels

    self.pre = nn.Conv1d(in_channels, hidden_channels, 1)
    self.enc = modules.WN(hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=gin_channels)
    self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1)

  def forward(self, x, x_lengths, g=None):
    x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)
    x = self.pre(x) * x_mask
    x = self.enc(x, x_mask, g=g)
    stats = self.proj(x) * x_mask
    m, logs = torch.split(stats, self.out_channels, dim=1)
    z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask
    return z, m, logs, x_mask


class Generator(torch.nn.Module):
    def __init__(self, initial_channel, resblock, resblock_kernel_sizes, resblock_dilation_sizes, upsample_rates, upsample_initial_channel, upsample_kernel_sizes, gin_channels=0):
        super(Generator, self).__init__()
        self.num_kernels = len(resblock_kernel_sizes)
        self.num_upsamples = len(upsample_rates)
        self.conv_pre = Conv1d(initial_channel, upsample_initial_channel, 7, 1, padding=3)
        resblock = modules.ResBlock1 if resblock == '1' else modules.ResBlock2

        self.ups = nn.ModuleList()
        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):
            self.ups.append(weight_norm(
                ConvTranspose1d(upsample_initial_channel//(2**i), upsample_initial_channel//(2**(i+1)),
                                k, u, padding=(k-u)//2)))

        self.resblocks = nn.ModuleList()
        for i in range(len(self.ups)):
            ch = upsample_initial_channel//(2**(i+1))
            for j, (k, d) in enumerate(zip(resblock_kernel_sizes, resblock_dilation_sizes)):
                self.resblocks.append(resblock(ch, k, d))

        self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False)
        self.ups.apply(init_weights)

        if gin_channels != 0:
            self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1)

    def forward(self, x, g=None):
        x = self.conv_pre(x)
        if g is not None:
          x = x + self.cond(g)

        for i in range(self.num_upsamples):
            x = F.leaky_relu(x, modules.LRELU_SLOPE)
            x = self.ups[i](x)
            xs = None
            for j in range(self.num_kernels):
                if xs is None:
                    xs = self.resblocks[i*self.num_kernels+j](x)
                else:
                    xs += self.resblocks[i*self.num_kernels+j](x)
            x = xs / self.num_kernels
        x = F.leaky_relu(x)
        x = self.conv_post(x)
        x = torch.tanh(x)

        return x

    def remove_weight_norm(self):
        print('Removing weight norm...')
        for l in self.ups:
            remove_weight_norm(l)
        for l in self.resblocks:
            l.remove_weight_norm()


class DiscriminatorP(torch.nn.Module):
    def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):
        super(DiscriminatorP, self).__init__()
        self.period = period
        self.use_spectral_norm = use_spectral_norm
        norm_f = weight_norm if use_spectral_norm == False else spectral_norm
        self.convs = nn.ModuleList([
            norm_f(Conv2d(1, 32, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
            norm_f(Conv2d(32, 128, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
            norm_f(Conv2d(128, 512, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
            norm_f(Conv2d(512, 1024, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
            norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(get_padding(kernel_size, 1), 0))),
        ])
        self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))

    def forward(self, x):
        fmap = []

        # 1d to 2d
        b, c, t = x.shape
        if t % self.period != 0: # pad first
            n_pad = self.period - (t % self.period)
            x = F.pad(x, (0, n_pad), "reflect")
            t = t + n_pad
        x = x.view(b, c, t // self.period, self.period)

        for l in self.convs:
            x = l(x)
            x = F.leaky_relu(x, modules.LRELU_SLOPE)
            fmap.append(x)
        x = self.conv_post(x)
        fmap.append(x)
        x = torch.flatten(x, 1, -1)

        return x, fmap


class DiscriminatorS(torch.nn.Module):
    def __init__(self, use_spectral_norm=False):
        super(DiscriminatorS, self).__init__()
        norm_f = weight_norm if use_spectral_norm == False else spectral_norm
        self.convs = nn.ModuleList([
            norm_f(Conv1d(1, 16, 15, 1, padding=7)),
            norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)),
            norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)),
            norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)),
            norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)),
            norm_f(Conv1d(1024, 1024, 5, 1, padding=2)),
        ])
        self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1))

    def forward(self, x):
        fmap = []

        for l in self.convs:
            x = l(x)
            x = F.leaky_relu(x, modules.LRELU_SLOPE)
            fmap.append(x)
        x = self.conv_post(x)
        fmap.append(x)
        x = torch.flatten(x, 1, -1)

        return x, fmap


class MultiPeriodDiscriminator(torch.nn.Module):
    def __init__(self, use_spectral_norm=False):
        super(MultiPeriodDiscriminator, self).__init__()
        periods = [2,3,5,7,11]

        discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)]
        discs = discs + [DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods]
        self.discriminators = nn.ModuleList(discs)

    def forward(self, y, y_hat):
        y_d_rs = []
        y_d_gs = []
        fmap_rs = []
        fmap_gs = []
        for i, d in enumerate(self.discriminators):
            y_d_r, fmap_r = d(y)
            y_d_g, fmap_g = d(y_hat)
            y_d_rs.append(y_d_r)
            y_d_gs.append(y_d_g)
            fmap_rs.append(fmap_r)
            fmap_gs.append(fmap_g)

        return y_d_rs, y_d_gs, fmap_rs, fmap_gs
        
        
class SpeakerEncoder(torch.nn.Module):
    def __init__(self, mel_n_channels=80, model_num_layers=3, model_hidden_size=256, model_embedding_size=256):
        super(SpeakerEncoder, self).__init__()
        self.lstm = nn.LSTM(mel_n_channels, model_hidden_size, model_num_layers, batch_first=True)
        self.linear = nn.Linear(model_hidden_size, model_embedding_size)
        self.relu = nn.ReLU()

    def forward(self, mels):
        self.lstm.flatten_parameters()
        _, (hidden, _) = self.lstm(mels)
        embeds_raw = self.relu(self.linear(hidden[-1]))
        return embeds_raw / torch.norm(embeds_raw, dim=1, keepdim=True)
        
    def compute_partial_slices(self, total_frames, partial_frames, partial_hop):
        mel_slices = []
        for i in range(0, total_frames-partial_frames, partial_hop):
            mel_range = torch.arange(i, i+partial_frames)
            mel_slices.append(mel_range)
            
        return mel_slices
    
    def embed_utterance(self, mel, partial_frames=128, partial_hop=64):
        mel_len = mel.size(1)
        last_mel = mel[:,-partial_frames:]
        
        if mel_len > partial_frames:
            mel_slices = self.compute_partial_slices(mel_len, partial_frames, partial_hop)
            mels = list(mel[:,s] for s in mel_slices)
            mels.append(last_mel)
            mels = torch.stack(tuple(mels), 0).squeeze(1)
        
            with torch.no_grad():
                partial_embeds = self(mels)
            embed = torch.mean(partial_embeds, axis=0).unsqueeze(0)
            #embed = embed / torch.linalg.norm(embed, 2)
        else:
            with torch.no_grad():
                embed = self(last_mel)
        
        return embed


class SynthesizerTrn(nn.Module):
  """
  Synthesizer for Training
  """

  def __init__(self, 
    spec_channels,
    segment_size,
    inter_channels,
    hidden_channels,
    filter_channels,
    n_heads,
    n_layers,
    kernel_size,
    p_dropout,
    resblock, 
    resblock_kernel_sizes, 
    resblock_dilation_sizes, 
    upsample_rates, 
    upsample_initial_channel, 
    upsample_kernel_sizes,
    gin_channels,
    ssl_dim,
    use_spk,
    **kwargs):

    super().__init__()
    self.spec_channels = spec_channels
    self.inter_channels = inter_channels
    self.hidden_channels = hidden_channels
    self.filter_channels = filter_channels
    self.n_heads = n_heads
    self.n_layers = n_layers
    self.kernel_size = kernel_size
    self.p_dropout = p_dropout
    self.resblock = resblock
    self.resblock_kernel_sizes = resblock_kernel_sizes
    self.resblock_dilation_sizes = resblock_dilation_sizes
    self.upsample_rates = upsample_rates
    self.upsample_initial_channel = upsample_initial_channel
    self.upsample_kernel_sizes = upsample_kernel_sizes
    self.segment_size = segment_size
    self.gin_channels = gin_channels
    self.ssl_dim = ssl_dim
    self.use_spk = use_spk

    self.enc_p = Encoder(ssl_dim, inter_channels, hidden_channels, 5, 1, 16)
    self.dec = Generator(inter_channels, resblock, resblock_kernel_sizes, resblock_dilation_sizes, upsample_rates, upsample_initial_channel, upsample_kernel_sizes, gin_channels=gin_channels)
    self.enc_q = Encoder(spec_channels, inter_channels, hidden_channels, 5, 1, 16, gin_channels=gin_channels) 
    self.flow = ResidualCouplingBlock(inter_channels, hidden_channels, 5, 1, 4, gin_channels=gin_channels)
    
    if not self.use_spk:
      self.enc_spk = SpeakerEncoder(model_hidden_size=gin_channels, model_embedding_size=gin_channels)

  def forward(self, c, spec, g=None, mel=None, c_lengths=None, spec_lengths=None):
    if c_lengths == None:
      c_lengths = (torch.ones(c.size(0)) * c.size(-1)).to(c.device)
    if spec_lengths == None:
      spec_lengths = (torch.ones(spec.size(0)) * spec.size(-1)).to(spec.device)
      
    if not self.use_spk:
      #print(torch.max(mel),torch.min(mel),mel.size())
      g_raw = self.enc_spk(mel.transpose(1,2))
    g = g_raw.unsqueeze(-1)
      
    _, m_p, logs_p, _ = self.enc_p(c, c_lengths)#这里也输入一下g会不会更好?models_g_content.py里面有模型代码
    z, m_q, logs_q, spec_mask = self.enc_q(spec, spec_lengths, g=g) 
    z_p = self.flow(z, spec_mask, g=g)
    #print(z.size(),spec_lengths, self.segment_size)
    z_slice, ids_slice = commons.rand_slice_segments(z, spec_lengths, self.segment_size)
    #print(z_slice.size())
    o = self.dec(z_slice, g=g)
    #with torch.no_grad():
    #   g_hat = self.enc_spk(mel.transpose(1,2))
    
    return o, ids_slice, spec_mask, (z, z_p, m_p, logs_p, m_q, logs_q),g_raw#,g_hat

  def infer(self, c, g=None, mel=None, c_lengths=None):
    if c_lengths == None:
      c_lengths = (torch.ones(c.size(0)) * c.size(-1)).to(c.device)
    if not self.use_spk:
      #g = self.enc_spk.embed_utterance(mel.transpose(1,2))
      g = self.enc_spk(mel.transpose(1,2))
    g = g.unsqueeze(-1)

    z_p, m_p, logs_p, c_mask = self.enc_p(c, c_lengths)
    z = self.flow(z_p, c_mask, g=g, reverse=True)
    o = self.dec(z * c_mask, g=g)
    
    return o


================================================
FILE: modules.py
================================================
import copy
import math
import numpy as np
import scipy
import torch
from torch import nn
from torch.nn import functional as F

from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d
from torch.nn.utils import weight_norm, remove_weight_norm

import commons
from commons import init_weights, get_padding


LRELU_SLOPE = 0.1


class LayerNorm(nn.Module):
  def __init__(self, channels, eps=1e-5):
    super().__init__()
    self.channels = channels
    self.eps = eps

    self.gamma = nn.Parameter(torch.ones(channels))
    self.beta = nn.Parameter(torch.zeros(channels))

  def forward(self, x):
    x = x.transpose(1, -1)
    x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)
    return x.transpose(1, -1)

 
class ConvReluNorm(nn.Module):
  def __init__(self, in_channels, hidden_channels, out_channels, kernel_size, n_layers, p_dropout):
    super().__init__()
    self.in_channels = in_channels
    self.hidden_channels = hidden_channels
    self.out_channels = out_channels
    self.kernel_size = kernel_size
    self.n_layers = n_layers
    self.p_dropout = p_dropout
    assert n_layers > 1, "Number of layers should be larger than 0."

    self.conv_layers = nn.ModuleList()
    self.norm_layers = nn.ModuleList()
    self.conv_layers.append(nn.Conv1d(in_channels, hidden_channels, kernel_size, padding=kernel_size//2))
    self.norm_layers.append(LayerNorm(hidden_channels))
    self.relu_drop = nn.Sequential(
        nn.ReLU(),
        nn.Dropout(p_dropout))
    for _ in range(n_layers-1):
      self.conv_layers.append(nn.Conv1d(hidden_channels, hidden_channels, kernel_size, padding=kernel_size//2))
      self.norm_layers.append(LayerNorm(hidden_channels))
    self.proj = nn.Conv1d(hidden_channels, out_channels, 1)
    self.proj.weight.data.zero_()
    self.proj.bias.data.zero_()

  def forward(self, x, x_mask):
    x_org = x
    for i in range(self.n_layers):
      x = self.conv_layers[i](x * x_mask)
      x = self.norm_layers[i](x)
      x = self.relu_drop(x)
    x = x_org + self.proj(x)
    return x * x_mask


class DDSConv(nn.Module):
  """
  Dialted and Depth-Separable Convolution
  """
  def __init__(self, channels, kernel_size, n_layers, p_dropout=0.):
    super().__init__()
    self.channels = channels
    self.kernel_size = kernel_size
    self.n_layers = n_layers
    self.p_dropout = p_dropout

    self.drop = nn.Dropout(p_dropout)
    self.convs_sep = nn.ModuleList()
    self.convs_1x1 = nn.ModuleList()
    self.norms_1 = nn.ModuleList()
    self.norms_2 = nn.ModuleList()
    for i in range(n_layers):
      dilation = kernel_size ** i
      padding = (kernel_size * dilation - dilation) // 2
      self.convs_sep.append(nn.Conv1d(channels, channels, kernel_size, 
          groups=channels, dilation=dilation, padding=padding
      ))
      self.convs_1x1.append(nn.Conv1d(channels, channels, 1))
      self.norms_1.append(LayerNorm(channels))
      self.norms_2.append(LayerNorm(channels))

  def forward(self, x, x_mask, g=None):
    if g is not None:
      x = x + g
    for i in range(self.n_layers):
      y = self.convs_sep[i](x * x_mask)
      y = self.norms_1[i](y)
      y = F.gelu(y)
      y = self.convs_1x1[i](y)
      y = self.norms_2[i](y)
      y = F.gelu(y)
      y = self.drop(y)
      x = x + y
    return x * x_mask


class WN(torch.nn.Module):
  def __init__(self, hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=0, p_dropout=0):
    super(WN, self).__init__()
    assert(kernel_size % 2 == 1)
    self.hidden_channels =hidden_channels
    self.kernel_size = kernel_size,
    self.dilation_rate = dilation_rate
    self.n_layers = n_layers
    self.gin_channels = gin_channels
    self.p_dropout = p_dropout

    self.in_layers = torch.nn.ModuleList()
    self.res_skip_layers = torch.nn.ModuleList()
    self.drop = nn.Dropout(p_dropout)

    if gin_channels != 0:
      cond_layer = torch.nn.Conv1d(gin_channels, 2*hidden_channels*n_layers, 1)
      self.cond_layer = torch.nn.utils.weight_norm(cond_layer, name='weight')

    for i in range(n_layers):
      dilation = dilation_rate ** i
      padding = int((kernel_size * dilation - dilation) / 2)
      in_layer = torch.nn.Conv1d(hidden_channels, 2*hidden_channels, kernel_size,
                                 dilation=dilation, padding=padding)
      in_layer = torch.nn.utils.weight_norm(in_layer, name='weight')
      self.in_layers.append(in_layer)

      # last one is not necessary
      if i < n_layers - 1:
        res_skip_channels = 2 * hidden_channels
      else:
        res_skip_channels = hidden_channels

      res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1)
      res_skip_layer = torch.nn.utils.weight_norm(res_skip_layer, name='weight')
      self.res_skip_layers.append(res_skip_layer)

  def forward(self, x, x_mask, g=None, **kwargs):
    output = torch.zeros_like(x)
    n_channels_tensor = torch.IntTensor([self.hidden_channels])

    if g is not None:
      g = self.cond_layer(g)

    for i in range(self.n_layers):
      x_in = self.in_layers[i](x)
      if g is not None:
        cond_offset = i * 2 * self.hidden_channels
        g_l = g[:,cond_offset:cond_offset+2*self.hidden_channels,:]
      else:
        g_l = torch.zeros_like(x_in)

      acts = commons.fused_add_tanh_sigmoid_multiply(
          x_in,
          g_l,
          n_channels_tensor)
      acts = self.drop(acts)

      res_skip_acts = self.res_skip_layers[i](acts)
      if i < self.n_layers - 1:
        res_acts = res_skip_acts[:,:self.hidden_channels,:]
        x = (x + res_acts) * x_mask
        output = output + res_skip_acts[:,self.hidden_channels:,:]
      else:
        output = output + res_skip_acts
    return output * x_mask

  def remove_weight_norm(self):
    if self.gin_channels != 0:
      torch.nn.utils.remove_weight_norm(self.cond_layer)
    for l in self.in_layers:
      torch.nn.utils.remove_weight_norm(l)
    for l in self.res_skip_layers:
     torch.nn.utils.remove_weight_norm(l)


class ResBlock1(torch.nn.Module):
    def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):
        super(ResBlock1, self).__init__()
        self.convs1 = nn.ModuleList([
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],
                               padding=get_padding(kernel_size, dilation[0]))),
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],
                               padding=get_padding(kernel_size, dilation[1]))),
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2],
                               padding=get_padding(kernel_size, dilation[2])))
        ])
        self.convs1.apply(init_weights)

        self.convs2 = nn.ModuleList([
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
                               padding=get_padding(kernel_size, 1))),
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
                               padding=get_padding(kernel_size, 1))),
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
                               padding=get_padding(kernel_size, 1)))
        ])
        self.convs2.apply(init_weights)

    def forward(self, x, x_mask=None):
        for c1, c2 in zip(self.convs1, self.convs2):
            xt = F.leaky_relu(x, LRELU_SLOPE)
            if x_mask is not None:
                xt = xt * x_mask
            xt = c1(xt)
            xt = F.leaky_relu(xt, LRELU_SLOPE)
            if x_mask is not None:
                xt = xt * x_mask
            xt = c2(xt)
            x = xt + x
        if x_mask is not None:
            x = x * x_mask
        return x

    def remove_weight_norm(self):
        for l in self.convs1:
            remove_weight_norm(l)
        for l in self.convs2:
            remove_weight_norm(l)


class ResBlock2(torch.nn.Module):
    def __init__(self, channels, kernel_size=3, dilation=(1, 3)):
        super(ResBlock2, self).__init__()
        self.convs = nn.ModuleList([
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],
                               padding=get_padding(kernel_size, dilation[0]))),
            weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],
                               padding=get_padding(kernel_size, dilation[1])))
        ])
        self.convs.apply(init_weights)

    def forward(self, x, x_mask=None):
        for c in self.convs:
            xt = F.leaky_relu(x, LRELU_SLOPE)
            if x_mask is not None:
                xt = xt * x_mask
            xt = c(xt)
            x = xt + x
        if x_mask is not None:
            x = x * x_mask
        return x

    def remove_weight_norm(self):
        for l in self.convs:
            remove_weight_norm(l)


class Log(nn.Module):
  def forward(self, x, x_mask, reverse=False, **kwargs):
    if not reverse:
      y = torch.log(torch.clamp_min(x, 1e-5)) * x_mask
      logdet = torch.sum(-y, [1, 2])
      return y, logdet
    else:
      x = torch.exp(x) * x_mask
      return x
    

class Flip(nn.Module):
  def forward(self, x, *args, reverse=False, **kwargs):
    x = torch.flip(x, [1])
    if not reverse:
      logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device)
      return x, logdet
    else:
      return x


class ElementwiseAffine(nn.Module):
  def __init__(self, channels):
    super().__init__()
    self.channels = channels
    self.m = nn.Parameter(torch.zeros(channels,1))
    self.logs = nn.Parameter(torch.zeros(channels,1))

  def forward(self, x, x_mask, reverse=False, **kwargs):
    if not reverse:
      y = self.m + torch.exp(self.logs) * x
      y = y * x_mask
      logdet = torch.sum(self.logs * x_mask, [1,2])
      return y, logdet
    else:
      x = (x - self.m) * torch.exp(-self.logs) * x_mask
      return x


class ResidualCouplingLayer(nn.Module):
  def __init__(self,
      channels,
      hidden_channels,
      kernel_size,
      dilation_rate,
      n_layers,
      p_dropout=0,
      gin_channels=0,
      mean_only=False):
    assert channels % 2 == 0, "channels should be divisible by 2"
    super().__init__()
    self.channels = channels
    self.hidden_channels = hidden_channels
    self.kernel_size = kernel_size
    self.dilation_rate = dilation_rate
    self.n_layers = n_layers
    self.half_channels = channels // 2
    self.mean_only = mean_only

    self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1)
    self.enc = WN(hidden_channels, kernel_size, dilation_rate, n_layers, p_dropout=p_dropout, gin_channels=gin_channels)
    self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1)
    self.post.weight.data.zero_()
    self.post.bias.data.zero_()

  def forward(self, x, x_mask, g=None, reverse=False):
    x0, x1 = torch.split(x, [self.half_channels]*2, 1)
    h = self.pre(x0) * x_mask
    h = self.enc(h, x_mask, g=g)
    stats = self.post(h) * x_mask
    if not self.mean_only:
      m, logs = torch.split(stats, [self.half_channels]*2, 1)
    else:
      m = stats
      logs = torch.zeros_like(m)

    if not reverse:
      x1 = m + x1 * torch.exp(logs) * x_mask
      x = torch.cat([x0, x1], 1)
      logdet = torch.sum(logs, [1,2])
      return x, logdet
    else:
      x1 = (x1 - m) * torch.exp(-logs) * x_mask
      x = torch.cat([x0, x1], 1)
      return x


================================================
FILE: ppg.py
================================================
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC 
#from datasets import load_dataset
import torch
import soundfile as sf
from glob import glob
import glob2
from tqdm import tqdm
import matplotlib.pyplot as plt
# load model and processor
processor = Wav2Vec2Processor.from_pretrained("speech31/wav2vec2-large-english-TIMIT-phoneme_v3")
model = Wav2Vec2ForCTC.from_pretrained("speech31/wav2vec2-large-english-TIMIT-phoneme_v3").cuda().eval()
files=glob2.glob(r".\dataset\crosslingual_emo_dataset\**\*.wav")
files=sorted(files)
print(len(files))
for file in tqdm(files):
    ppg_file=file.replace(r".wav",r"_eng_ppg.pt")
    # Read and process the input
    audio_input, sample_rate = sf.read(file)
    #audio_input=audio_input[:25000]
    #sf.write('3752_slice.wav',audio_input,sample_rate)
    inputs = processor(audio_input, sampling_rate=16_000, return_tensors="pt", padding=True)
    #print(inputs)
    #import matplotlib.pyplot as plt
    with torch.no_grad():
        logits = model(inputs.input_values.cuda()).logits
        logits_trans=logits.transpose(2,1)
        #print(logits_trans.size())
        #print(file,ppg_file)

        torch.save(logits_trans.cpu(),ppg_file)

        #lo=logits.squeeze(0).numpy()
        #print(lo)
        #lo=lo.transpose(1,0)
        #plt.imshow(lo)
        #plt.show()
        #hidden_states=model(inputs.input_values).hidden_states
        #print(hidden_states)
        #hidden=hidden_states.squeeze(0).numpy()
        #print(hidden)
        #plt.imshow(hidden)
        #plt.show()
    # Decode id into string
    #print(logits)
    ##predicted_ids = torch.argmax(logits, axis=-1)
    ##print(predicted_ids)      
    ##predicted_sentences = processor.batch_decode(predicted_ids)
    ##print(predicted_sentences)


================================================
FILE: ppgemoconvert_exp.py
================================================
import os
import argparse
import torch
import librosa
import time
from scipy.io.wavfile import write
from tqdm import tqdm
import soundfile as sf
import utils
from models import SynthesizerTrn
from mel_processing import mel_spectrogram_torch
import logging
logging.getLogger('numba').setLevel(logging.WARNING)


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--hpfile", type=str, default="./logs/cvc-44ppg-emoloss/config.json", help="path to json config file")
    parser.add_argument("--ptfile", type=str, default="./logs/cvc-44ppg-emoloss/G_cvc-44ppg-emoloss.pth", help="path to pth file")
    parser.add_argument("--outdir", type=str, default="output_exp/20_exp_cvc-44ppg-emoloss", help="path to output dir")
    parser.add_argument("--use_timestamp", default=False, action="store_true")
    args = parser.parse_args()
    
    os.makedirs(args.outdir, exist_ok=True)
    hps = utils.get_hparams_from_file(args.hpfile)

    print("Loading model...")
    net_g = SynthesizerTrn(
        hps.data.filter_length // 2 + 1,
        hps.train.segment_size // hps.data.hop_length,
        **hps.model).cuda()
    _ = net_g.eval()
    print("Loading checkpoint...")
    _ = utils.load_checkpoint(args.ptfile, net_g, None, True)

    src_wavs=[r".\dataset\ESD16k\0011\Neutral\evaluation\0011_000004.wav",
             r".\dataset\ESD16k\0016\Neutral\test\0016_000031.wav"]
    

    tgt_wavs=[r".\dataset\ESD16k\0012\Happy\train\0012_000897.wav",
             r".\dataset\ESD16k\0012\Angry\test\0012_000374.wav",
             r".\dataset\ESD16k\0012\Sad\train\0012_001188.wav",
             r".\dataset\ESD16k\0012\Surprise\train\0012_001504.wav",
             r".\dataset\ESD16k\0015\Happy\train\0015_000875.wav",
             r".\dataset\ESD16k\0015\Angry\train\0015_000619.wav",
             r".\dataset\ESD16k\0015\Sad\train\0015_001233.wav",
             r".\dataset\ESD16k\0015\Surprise\train\0015_001656.wav",
             r".\ravdess_ref\act_11_03-01-05-02-01-01-11_man_angry.wav",
             r".\ravdess_ref\act2-03-01-05-01-02-02-02-womanangry.wav"]
    print("Processing text...")
    titles, srcs, tgts = [], [], []
    for src_wav in src_wavs:
        for tgt_wav in tgt_wavs:
            src_wav_name=os.path.basename(src_wav)[:-4]
            tgt_wav_name=os.path.basename(tgt_wav)[:-4]
            title="{}_to_{}".format(src_wav_name,tgt_wav_name)
            titles.append(title)
            srcs.append(src_wav)
            tgts.append(tgt_wav)
    print(srcs)
    print(tgts)
    print(titles)
    #import sys
    #sys.exit()
    """
    with open(args.txtpath, "r") as f:
        for rawline in f.readlines():
            print(rawline)
            title, src, tgt = rawline.strip().split("|")
            titles.append(title)
            srcs.append(src)
            tgts.append(tgt)
    """

    print("Synthesizing...")
    with torch.no_grad():
        for line in tqdm(zip(titles, srcs, tgts)):
            title, src, tgt = line
            srcname,tgtname=title.split("to")
            # tgt
            wav_tgt, _ = librosa.load(tgt, sr=hps.data.sampling_rate)
            sf.write(os.path.join(args.outdir, f"{tgtname}.wav"), wav_tgt, hps.data.sampling_rate)
            #wav_tgt, _ = librosa.effects.trim(wav_tgt, top_db=20)
     
            wav_tgt = torch.from_numpy(wav_tgt).unsqueeze(0).cuda()
            mel_tgt = mel_spectrogram_torch(
                wav_tgt, 
                hps.data.filter_length,
                hps.data.n_mel_channels,
                hps.data.sampling_rate,
                hps.data.hop_length,
                hps.data.win_length,
                hps.data.mel_fmin,
                hps.data.mel_fmax
            )
            # src
            wav_src, _ = librosa.load(src, sr=hps.data.sampling_rate)
            sf.write(os.path.join(args.outdir, f"{srcname}.wav"), wav_src, hps.data.sampling_rate)
            wav_src = torch.from_numpy(wav_src).unsqueeze(0).cuda()
            #c = utils.get_content(cmodel, wav_src)
            c_filename = src.replace(".wav", "ppg.pt")
            print(src, tgt,c_filename)
            c = torch.load(c_filename)#.squeeze(0)

            print(c.size(),mel_tgt.size())
            audio = net_g.infer(c.cuda(), mel=mel_tgt)
            audio = audio[0][0].data.cpu().float().numpy()
            if args.use_timestamp:
                timestamp = time.strftime("%m-%d_%H-%M", time.localtime())
                write(os.path.join(args.outdir, "{}.wav".format(timestamp+"_"+title)), hps.data.sampling_rate, audio)
            else:
                write(os.path.join(args.outdir, f"{title}.wav"), hps.data.sampling_rate, audio)
            


================================================
FILE: preprocess_ppg.py
================================================
import os
import numpy as np
import argparse
import torch
from glob import glob
from tqdm import tqdm
from whisper.model import Whisper, ModelDimensions
from whisper.audio import load_audio, pad_or_trim, log_mel_spectrogram
import librosa
import soundfile as sf
def load_model(path) -> Whisper:
    device = "cuda" if torch.cuda.is_available() else "cpu"
    checkpoint = torch.load(path, map_location=device)
    dims = ModelDimensions(**checkpoint["dims"])
    model = Whisper(dims)
    model.load_state_dict(checkpoint["model_state_dict"])
    return model.to(device)


def pred_ppg(whisper: Whisper, wavPath, ppgPath):
    audio, sr = librosa.load(wavPath,sr=None)
    if len(audio) >= sr * 29:
        print(wavPath,"cut to 29s")
        audio = audio[:sr * 29]
        #librosa.output.write_wav("your_audio_file.wav", audio, sr)
        sf.write(wavPath, audio, sr)
    audio = load_audio(wavPath)
    audln = audio.shape[0]
    ppgln = audln // 320
    # audio = pad_or_trim(audio)
    mel = log_mel_spectrogram(audio).to(whisper.device)
    with torch.no_grad():
        ppg = whisper.encoder(mel.unsqueeze(0)).squeeze().data.cpu().float().numpy()
        
        if ppgln>ppg.shape[0]:
            print("ppgln>ppg.shape[0]")
        ppg = ppg[:ppgln,] # [length, dim=1024]
        #if audln // 320<ppg.shape[0]:
        #    print("audln // 320<ppg.shape[0]")
        np.save(ppgPath, ppg, allow_pickle=False)


if __name__ == "__main__":
    # 读取所有 .wav 文件
    data_dir = r".\dataset\crosslingual_emo_dataset\jvs"
    wav_files = glob(os.path.join(data_dir, '**', '*.wav'), recursive=True)
    wav_files=sorted(wav_files)
    whisper = load_model(os.path.join("whisper_pretrain", "medium.pt"))

    for wav in tqdm(wav_files):
        ppg_path=wav.replace(r".wav",r"whisper.pt.npy")
        #print(wav,ppg_path)
        if not os.path.exists(ppg_path):
            pred_ppg(whisper, wav, ppg_path)


================================================
FILE: train_eng_ppg_emo_loss.py
================================================
import os
import json
import argparse
import itertools
import math
import torch
from torch import nn, optim
from torch.nn import functional as F
from torch.utils.data import DataLoader
print("import tensorboard")
from torch.utils.tensorboard import SummaryWriter
#import torch.multiprocessing as mp
#import torch.distributed as dist
#from torch.nn.parallel import DistributedDataParallel as DDP
from torch.cuda.amp import autocast, GradScaler

#有speaker consistency loss#python train_eng_ppg_emo_loss.py -c configs/freevc-eng-ppgs-three-emo.json -m freevc-eng-ppgs-three-emo#-cycleloss  
import commons
import utils
from data_utils_engppg import (
  TextAudioSpeakerLoader,
  TextAudioSpeakerCollate,
  DistributedBucketSampler
)
from models import (
  SynthesizerTrn,
  MultiPeriodDiscriminator,
)
from losses import (
  generator_loss,
  discriminator_loss,
  feature_loss,
  kl_loss
)
from mel_processing import mel_spectrogram_torch, spec_to_mel_torch
"""
from transformers import Wav2Vec2Processor
from transformers.models.wav2vec2.modeling_wav2vec2 import (
    Wav2Vec2Model,
    Wav2Vec2PreTrainedModel,
)
class RegressionHead(nn.Module):
    

    def __init__(self, config):
        super().__init__()

        self.dense = nn.Linear(config.hidden_size, config.hidden_size)
        self.dropout = nn.Dropout(config.final_dropout)
        self.out_proj = nn.Linear(config.hidden_size, config.num_labels)

    def forward(self, features, **kwargs):
        x = features
        x = self.dropout(x)
        x = self.dense(x)
        x = torch.tanh(x)
        x = self.dropout(x)
        x = self.out_proj(x)

        return x


class EmotionModel(Wav2Vec2PreTrainedModel):
    

    def __init__(self, config):
        super().__init__(config)

        self.config = config
        self.wav2vec2 = Wav2Vec2Model(config)
        self.classifier = RegressionHead(config)
        self.init_weights()

    def forward(
            self,
            input_values,
    ):
        outputs = self.wav2vec2(input_values)
        hidden_states = outputs[0]
        hidden_states = torch.mean(hidden_states, dim=1)
        logits = self.classifier(hidden_states)

        return hidden_states, logits
import torchvision
print("load emotion model")
device = 'cuda' if torch.cuda.is_available() else "cpu"
model_name = 'audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim'
processor = Wav2Vec2Processor.from_pretrained(model_name)
model = EmotionModel.from_pretrained(model_name).to(device)
# 方法1: 设置requires_grad = False
for param in model.parameters():
    param.requires_grad = False
print("模型参数冻结")

def process_func(y_input,embeddings):
    

    # run through processor to normalize signal
    # always returns a batch, so we just get the first entry
    # then we put it on the device
    #print(torch.max(y_input),torch.min(y_input),y_input.size())
    #y = processor(y_input, sampling_rate=16000,return_tensors='pt' )
    #print(y)
    #print(y['input_values'])
    #y = y['input_values'][0]
    #y = torch.from_numpy(y).to(device)
    #print(torch.max(y),torch.min(y),y.size())
    #srd=torch.std(y_input, dim=-1, keepdim=True)
    #print(srd.size())
    y = (y_input - torch.mean(y_input, dim=-1, keepdim=True))/(torch.std(y_input, dim=-1, keepdim=True)+ 1e-7)
    #print(torch.max(y),torch.min(y),y.size())
    #preprocess = torchvision.transforms.Normalize(mean=torch.mean(y_input, dim=0), std=torch.std(y_input, dim=0))
    #y = preprocess(y_input)
    #print(torch.max(y),torch.min(y),y.size())
    # run through model
    #y=y_input.squeeze()
    y=y.squeeze()
    #print("input",y.size())
    #with torch.no_grad():
    for param in model.parameters():
      if param.requires_grad == False:
        print("依旧冻结")
      else:
        print("不冻结")
    y = model(y)[0 if embeddings else 1]

    #print("emo embedding",torch.max(y),torch.min(y),y.size())
    # convert to numpy
    #y = y.detach().cpu().numpy()

    return y
"""
torch.backends.cudnn.benchmark = True
global_step = 0
#os.environ['TORCH_DISTRIBUTED_DEBUG'] = 'INFO'


def main():
  """Assume Single Node Multi GPUs Training Only"""
  assert torch.cuda.is_available(), "CPU training is not allowed."
  hps = utils.get_hparams()

  n_gpus = torch.cuda.device_count()
  #os.environ['MASTER_ADDR'] = 'localhost'
  #os.environ['MASTER_PORT'] = hps.train.port
  print("start run")
  run(0,n_gpus, hps)
  #mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))


def run(rank, n_gpus, hps):
  global global_step
  if rank == 0:
    logger = utils.get_logger(hps.model_dir)
    logger.info(hps)
    utils.check_git_hash(hps.model_dir)
    writer = SummaryWriter(log_dir=hps.model_dir)
    writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, "eval"))

  #dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank)
  torch.manual_seed(hps.train.seed)
  torch.cuda.set_device(rank)

  train_dataset = TextAudioSpeakerLoader(hps.data.training_files, hps)
  train_sampler = DistributedBucketSampler(
      train_dataset,
      hps.train.batch_size,
      [75,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1100,1200,1300,1400,1500,2000,3000,4000,5000],
      num_replicas=n_gpus,
      rank=rank,
      shuffle=True)
  collate_fn = TextAudioSpeakerCollate(hps)
  train_loader = DataLoader(train_dataset, num_workers=12, shuffle=False, pin_memory=True,
      collate_fn=collate_fn, batch_sampler=train_sampler)
  if rank == 0:
    eval_dataset = TextAudioSpeakerLoader(hps.data.validation_files, hps)
    eval_loader = DataLoader(eval_dataset, num_workers=0, shuffle=True,
        batch_size=hps.train.batch_size, pin_memory=False,
        drop_last=False, collate_fn=collate_fn)

  net_g = SynthesizerTrn(
      hps.data.filter_length // 2 + 1,
      hps.train.segment_size // hps.data.hop_length,
      **hps.model).cuda(rank)
  net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm).cuda(rank)
  optim_g = torch.optim.AdamW(
      net_g.parameters(), 
      hps.train.learning_rate, 
      betas=hps.train.betas, 
      eps=hps.train.eps)
  optim_d = torch.optim.AdamW(
      net_d.parameters(),
      hps.train.learning_rate, 
      betas=hps.train.betas, 
      eps=hps.train.eps)
  #net_g = DDP(net_g, device_ids=[rank])#, find_unused_parameters=True)
  #net_d = DDP(net_d, device_ids=[rank])

  try:
    _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g)
    _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "D_*.pth"), net_d, optim_d)
    global_step = (epoch_str - 1) * len(train_loader)
  except:
    epoch_str = 1
    global_step = 0

  scheduler_g = torch.optim.lr_scheduler.ExponentialLR(optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)
  scheduler_d = torch.optim.lr_scheduler.ExponentialLR(optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)

  scaler = GradScaler(enabled=hps.train.fp16_run)

  for epoch in range(epoch_str, hps.train.epochs + 1):
    if rank==0:
      train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, eval_loader], logger, [writer, writer_eval])
    else:
      train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, None], None, None)
    scheduler_g.step()
    scheduler_d.step()


def train_and_evaluate(rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers):
  
  net_g, net_d = nets
  optim_g, optim_d = optims
  scheduler_g, scheduler_d = schedulers
  train_loader, eval_loader = loaders
  if writers is not None:
    writer, writer_eval = writers

  train_loader.batch_sampler.set_epoch(epoch)
  global global_step

  net_g.train()
  net_d.train()
  for batch_idx, items in enumerate(train_loader):
    if hps.model.use_spk:
      c, spec, y, spk = items
      g = spk.cuda(rank, non_blocking=True)
    else:
      c, spec, y = items
      g = None
    spec, y = spec.cuda(rank, non_blocking=True), y.cuda(rank, non_blocking=True)
    c = c.cuda(rank, non_blocking=True)
    mel = spec_to_mel_torch(
          spec, 
          hps.data.filter_length, 
          hps.data.n_mel_channels, 
          hps.data.sampling_rate,
          hps.data.mel_fmin, 
          hps.data.mel_fmax)
    real_mel = mel_spectrogram_torch(
          y.squeeze(1), 
          hps.data.filter_length, 
          hps.data.n_mel_channels, 
          hps.data.sampling_rate, 
          hps.data.hop_length, 
          hps.data.win_length, 
          hps.data.mel_fmin, 
          hps.data.mel_fmax
      )
    #print(torch.max(mel),torch.min(mel),torch.max(real_mel),torch.min(real_mel))
    with autocast(enabled=hps.train.fp16_run):
      y_hat, ids_slice, z_mask,\
      (z, z_p, m_p, logs_p, m_q, logs_q),emo_y = net_g(c, spec, g=g, mel=mel)
      #print(torch.max(y),torch.min(y),torch.max(y_hat),torch.min(y_hat))
      y_mel = commons.slice_segments(mel, ids_slice, hps.train.segment_size // hps.data.hop_length)
      y_hat_mel = mel_spectrogram_torch(
          y_hat.squeeze(1), 
          hps.data.filter_length, 
          hps.data.n_mel_channels, 
          hps.data.sampling_rate, 
          hps.data.hop_length, 
          hps.data.win_length, 
          hps.data.mel_fmin, 
          hps.data.mel_fmax
      )
      y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # slice 

      # Discriminator
      y_d_hat_r, y_d_hat_g, _, _ = net_d(y, y_hat.detach())
      with autocast(enabled=False):
        loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(y_d_hat_r, y_d_hat_g)
        loss_disc_all = loss_disc
    optim_d.zero_grad()
    scaler.scale(loss_disc_all).backward()
    scaler.unscale_(optim_d)
    grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None)
    scaler.step(optim_d)

    with autocast(enabled=hps.train.fp16_run):
      # Generator
      y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(y, y_hat)
      #print(torch.max(mel),torch.min(mel),mel.size(),torch.max(y_hat_mel),torch.min(y_hat_mel),y_hat_mel.size())
      #y_hat_mel=torch.rand_like(y_hat_mel)
      #emo_y_hat=net_g.enc_spk(y_hat_mel.transpose(1,2))#process_func(y_input=y_hat,embeddings=True)
      #y=torch.rand_like(y)
      emo_y_hat=net_g.enc_spk(y_hat_mel.transpose(1,2))#process_func(y_input=y,embeddings=True)
      #print(torch.max(emo_y),torch.min(emo_y),emo_y.size(),torch.max(emo_y_hat),torch.min(emo_y_hat),emo_y_hat.size())
      #print(emo_y_hat.size(),emo_y.size())
      with autocast(enabled=False):
        loss_mel = F.l1_loss(y_hat_mel, y_mel) * hps.train.c_mel
        #print("loss_mel",loss_mel)
        loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl# * 1.5
        #print("loss_kl",loss_kl)
        loss_fm = feature_loss(fmap_r, fmap_g) * 0.5
        #print("loss_fm",loss_fm)
        loss_gen, losses_gen = generator_loss(y_d_hat_g)
        #print("loss_gen, losses_gen",loss_gen, losses_gen)
        loss_emo=F.l1_loss(emo_y_hat.detach(),emo_y.detach()) * hps.train.c_mel * 0.5
        #print("loss_emo",loss_emo)
        loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl + loss_emo
    optim_g.zero_grad()
    scaler.scale(loss_gen_all).backward()
    scaler.unscale_(optim_g)
    grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None)
    scaler.step(optim_g)
    scaler.update()

    if rank==0:
      if global_step % hps.train.log_interval == 0:
        lr = optim_g.param_groups[0]['lr']
        losses = [loss_disc, loss_gen, loss_fm, loss_mel, loss_kl,loss_emo]
        logger.info('Train Epoch: {} [{:.0f}%]'.format(
          epoch,
          100. * batch_idx / len(train_loader)))
        logger.info([x.item() for x in losses] + [global_step, lr])
        
        scalar_dict = {"loss/g/total": loss_gen_all, "loss/d/total": loss_disc_all, "learning_rate": lr, "grad_norm_d": grad_norm_d, "grad_norm_g": grad_norm_g}
        scalar_dict.update({"loss/g/fm": loss_fm, "loss/g/mel": loss_mel, "loss/g/kl": loss_kl, "loss/g/emo": loss_emo})

        scalar_dict.update({"loss/g/{}".format(i): v for i, v in enumerate(losses_gen)})
        scalar_dict.update({"loss/d_r/{}".format(i): v for i, v in enumerate(losses_disc_r)})
        scalar_dict.update({"loss/d_g/{}".format(i): v for i, v in enumerate(losses_disc_g)})
        image_dict = { 
            "slice/mel_org": utils.plot_spectrogram_to_numpy(y_mel[0].data.cpu().numpy()),
            "slice/mel_gen": utils.plot_spectrogram_to_numpy(y_hat_mel[0].data.cpu().numpy()), 
            "all/mel": utils.plot_spectrogram_to_numpy(mel[0].data.cpu().numpy()),
        }
        utils.summarize(
          writer=writer,
          global_step=global_step, 
          images=image_dict,
          scalars=scalar_dict)

      if global_step % hps.train.eval_interval == 0:
        evaluate(hps, net_g, eval_loader, writer_eval)
        utils.save_checkpoint(net_g, optim_g, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_{}.pth".format(global_step)))
        utils.save_checkpoint(net_d, optim_d, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "D_{}.pth".format(global_step)))
    global_step += 1
  
  if rank == 0:
    logger.info('====> Epoch: {}'.format(epoch))

 
def evaluate(hps, generator, eval_loader, writer_eval):
    generator.eval()
    with torch.no_grad():
      for batch_idx, items in enumerate(eval_loader):
        if hps.model.use_spk:
          c, spec, y, spk = items
          g = spk[:1].cuda(0)
        else:
          c, spec, y = items
          g = None
        spec, y = spec[:1].cuda(0), y[:1].cuda(0)
        c = c[:1].cuda(0)
        break
      mel = spec_to_mel_torch(
        spec, 
        hps.data.filter_length, 
        hps.data.n_mel_channels, 
        hps.data.sampling_rate,
        hps.data.mel_fmin, 
        hps.data.mel_fmax)
      y_hat = generator.infer(c, g=g, mel=mel)#generator.module.infer(c, g=g, mel=mel)
      print(torch.max(y_hat),torch.min(y_hat))
      y_hat_mel = mel_spectrogram_torch(
        y_hat.squeeze(1).float(),
        hps.data.filter_length,
        hps.data.n_mel_channels,
        hps.data.sampling_rate,
        hps.data.hop_length,
        hps.data.win_length,
        hps.data.mel_fmin,
        hps.data.mel_fmax
      )
    image_dict = {
      "gen/mel": utils.plot_spectrogram_to_numpy(y_hat_mel[0].cpu().numpy()),
      "gt/mel": utils.plot_spectrogram_to_numpy(mel[0].cpu().numpy())
    }
    audio_dict = {
      "gen/audio": y_hat[0],
      "gt/audio": y[0]
    }
    utils.summarize(
      writer=writer_eval,
      global_step=global_step, 
      images=image_dict,
      audios=audio_dict,
      audio_sampling_rate=hps.data.sampling_rate
    )
    generator.train()

                           
if __name__ == "__main__":
  main()


================================================
FILE: train_whisper_emo.py
================================================
import os
import json
import argparse
import itertools
import math
import torch
from torch import nn, optim
from torch.nn import functional as F
from torch.utils.data import DataLoader
print("import tensorboard")
from torch.utils.tensorboard import SummaryWriter
#import torch.multiprocessing as mp
#import torch.distributed as dist
#from torch.nn.parallel import DistributedDataParallel as DDP
from torch.cuda.amp import autocast, GradScaler
#带情感loss,用whisper作为内容特征#python train_whisper_emo.py -c configs/freevc-whispers-three-emo.json -m freevc-whispers-three-emo
import commons
import utils
from data_utils_whisper import (
  TextAudioSpeakerLoader,
  TextAudioSpeakerCollate,
  DistributedBucketSampler
)
from models import (
  SynthesizerTrn,
  MultiPeriodDiscriminator,
)
from losses import (
  generator_loss,
  discriminator_loss,
  feature_loss,
  kl_loss
)
from mel_processing import mel_spectrogram_torch, spec_to_mel_torch

torch.backends.cudnn.benchmark = True
global_step = 0
#os.environ['TORCH_DISTRIBUTED_DEBUG'] = 'INFO'


def main():
  """Assume Single Node Multi GPUs Training Only"""
  assert torch.cuda.is_available(), "CPU training is not allowed."
  hps = utils.get_hparams()

  n_gpus = torch.cuda.device_count()
  #os.environ['MASTER_ADDR'] = 'localhost'
  #os.environ['MASTER_PORT'] = hps.train.port
  print("start run")
  run(0,n_gpus, hps)
  #mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))


def run(rank, n_gpus, hps):
  global global_step
  if rank == 0:
    logger = utils.get_logger(hps.model_dir)
    logger.info(hps)
    utils.check_git_hash(hps.model_dir)
    writer = SummaryWriter(log_dir=hps.model_dir)
    writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, "eval"))

  #dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank)
  torch.manual_seed(hps.train.seed)
  torch.cuda.set_device(rank)

  train_dataset = TextAudioSpeakerLoader(hps.data.training_files, hps)
  train_sampler = DistributedBucketSampler(
      train_dataset,
      hps.train.batch_size,
      [75,100,125,150,175,200,225,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1100,1200,1300,1400,1500,2000,3000,4000,5000],
      num_replicas=n_gpus,
      rank=rank,
      shuffle=True)
  collate_fn = TextAudioSpeakerCollate(hps)
  train_loader = DataLoader(train_dataset, num_workers=12, shuffle=False, pin_memory=True,
      collate_fn=collate_fn, batch_sampler=train_sampler)
  if rank == 0:
    eval_dataset = TextAudioSpeakerLoader(hps.data.validation_files, hps)
    eval_loader = DataLoader(eval_dataset, num_workers=2, shuffle=True,
        batch_size=hps.train.batch_size, pin_memory=False,
        drop_last=False, collate_fn=collate_fn)

  net_g = SynthesizerTrn(
      hps.data.filter_length // 2 + 1,
      hps.train.segment_size // hps.data.hop_length,
      **hps.model).cuda(rank)
  net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm).cuda(rank)
  optim_g = torch.optim.AdamW(
      net_g.parameters(), 
      hps.train.learning_rate, 
      betas=hps.train.betas, 
      eps=hps.train.eps)
  optim_d = torch.optim.AdamW(
      net_d.parameters(),
      hps.train.learning_rate, 
      betas=hps.train.betas, 
      eps=hps.train.eps)
  #net_g = DDP(net_g, device_ids=[rank])#, find_unused_parameters=True)
  #net_d = DDP(net_d, device_ids=[rank])

  try:
    _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g)
    _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "D_*.pth"), net_d, optim_d)
    global_step = (epoch_str - 1) * len(train_loader)
  except:
    epoch_str = 1
    global_step = 0

  scheduler_g = torch.optim.lr_scheduler.ExponentialLR(optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)
  scheduler_d = torch.optim.lr_scheduler.ExponentialLR(optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)

  scaler = GradScaler(enabled=hps.train.fp16_run)

  for epoch in range(epoch_str, hps.train.epochs + 1):
    if rank==0:
      train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, eval_loader], logger, [writer, writer_eval])
    else:
      train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, None], None, None)
    scheduler_g.step()
    scheduler_d.step()


def train_and_evaluate(rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers):
  
  net_g, net_d = nets
  optim_g, optim_d = optims
  scheduler_g, scheduler_d = schedulers
  train_loader, eval_loader = loaders
  if writers is not None:
    writer, writer_eval = writers

  train_loader.batch_sampler.set_epoch(epoch)
  global global_step

  net_g.train()
  net_d.train()
  for batch_idx, items in enumerate(train_loader):
    if hps.model.use_spk:
      c, spec, y, spk = items
      g = spk.cuda(rank, non_blocking=True)
    else:
      c, spec, y = items
      g = None
    spec, y = spec.cuda(rank, non_blocking=True), y.cuda(rank, non_blocking=True)
    c = c.cuda(rank, non_blocking=True)
    mel = spec_to_mel_torch(
          spec, 
          hps.data.filter_length, 
          hps.data.n_mel_channels, 
          hps.data.sampling_rate,
          hps.data.mel_fmin, 
          hps.data.mel_fmax)
    real_mel = mel_spectrogram_torch(
          y.squeeze(1), 
          hps.data.filter_length, 
          hps.data.n_mel_channels, 
          hps.data.sampling_rate, 
          hps.data.hop_length, 
          hps.data.win_length, 
          hps.data.mel_fmin, 
          hps.data.mel_fmax
      )
    #print(torch.max(mel),torch.min(mel),torch.max(real_mel),torch.min(real_mel))
    with autocast(enabled=hps.train.fp16_run):
      y_hat, ids_slice, z_mask,\
      (z, z_p, m_p, logs_p, m_q, logs_q),emo_y = net_g(c, spec, g=g, mel=mel)
      #print(torch.max(y),torch.min(y),torch.max(y_hat),torch.min(y_hat))
      y_mel = commons.slice_segments(mel, ids_slice, hps.train.segment_size // hps.data.hop_length)
      y_hat_mel = mel_spectrogram_torch(
          y_hat.squeeze(1), 
          hps.data.filter_length, 
          hps.data.n_mel_channels, 
          hps.data.sampling_rate, 
          hps.data.hop_length, 
          hps.data.win_length, 
          hps.data.mel_fmin, 
          hps.data.mel_fmax
      )
      y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # slice 

      # Discriminator
      y_d_hat_r, y_d_hat_g, _, _ = net_d(y, y_hat.detach())
      with autocast(enabled=False):
        loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(y_d_hat_r, y_d_hat_g)
        loss_disc_all = loss_disc
    optim_d.zero_grad()
    scaler.scale(loss_disc_all).backward()
    scaler.unscale_(optim_d)
    grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None)
    scaler.step(optim_d)

    with autocast(enabled=hps.train.fp16_run):
      # Generator
      y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(y, y_hat)
      #print(torch.max(mel),torch.min(mel),mel.size(),torch.max(y_hat_mel),torch.min(y_hat_mel),y_hat_mel.size())
      #y_hat_mel=torch.rand_like(y_hat_mel)
      #emo_y_hat=net_g.enc_spk(y_hat_mel.transpose(1,2))#process_func(y_input=y_hat,embeddings=True)
      #y=torch.rand_like(y)
      emo_y_hat=net_g.enc_spk(y_hat_mel.transpose(1,2))#process_func(y_input=y,embeddings=True)
      #print(torch.max(emo_y),torch.min(emo_y),emo_y.size(),torch.max(emo_y_hat),torch.min(emo_y_hat),emo_y_hat.size())
      #print(emo_y_hat.size(),emo_y.size())
      with autocast(enabled=False):
        loss_mel = F.l1_loss(y_hat_mel, y_mel) * hps.train.c_mel
        #print("loss_mel",loss_mel)
        loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl
        #print("loss_kl",loss_kl)
        loss_fm = feature_loss(fmap_r, fmap_g) * 0.5
        #print("loss_fm",loss_fm)
        loss_gen, losses_gen = generator_loss(y_d_hat_g)
        #print("loss_gen, losses_gen",loss_gen, losses_gen)
        loss_emo=F.l1_loss(emo_y_hat,emo_y) * hps.train.c_mel * 0.5
        #print("loss_emo",loss_emo)
        loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl + loss_emo
    optim_g.zero_grad()
    scaler.scale(loss_gen_all).backward()
    scaler.unscale_(optim_g)
    grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None)
    scaler.step(optim_g)
    scaler.update()

    if rank==0:
      if global_step % hps.train.log_interval == 0:
        lr = optim_g.param_groups[0]['lr']
        losses = [loss_disc, loss_gen, loss_fm, loss_mel, loss_kl,loss_emo]
        logger.info('Train Epoch: {} [{:.0f}%]'.format(
          epoch,
          100. * batch_idx / len(train_loader)))
        logger.info([x.item() for x in losses] + [global_step, lr])
        
        scalar_dict = {"loss/g/total": loss_gen_all, "loss/d/total": loss_disc_all, "learning_rate": lr, "grad_norm_d": grad_norm_d, "grad_norm_g": grad_norm_g}
        scalar_dict.update({"loss/g/fm": loss_fm, "loss/g/mel": loss_mel, "loss/g/kl": loss_kl, "loss/g/emo": loss_emo})

        scalar_dict.update({"loss/g/{}".format(i): v for i, v in enumerate(losses_gen)})
        scalar_dict.update({"loss/d_r/{}".format(i): v for i, v in enumerate(losses_disc_r)})
        scalar_dict.update({"loss/d_g/{}".format(i): v for i, v in enumerate(losses_disc_g)})
        image_dict = { 
            "slice/mel_org": utils.plot_spectrogram_to_numpy(y_mel[0].data.cpu().numpy()),
            "slice/mel_gen": utils.plot_spectrogram_to_numpy(y_hat_mel[0].data.cpu().numpy()), 
            "all/mel": utils.plot_spectrogram_to_numpy(mel[0].data.cpu().numpy()),
        }
        utils.summarize(
          writer=writer,
          global_step=global_step, 
          images=image_dict,
          scalars=scalar_dict)

      if global_step % hps.train.eval_interval == 0:
        evaluate(hps, net_g, eval_loader, writer_eval)
        utils.save_checkpoint(net_g, optim_g, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_{}.pth".format(global_step)))
        utils.save_checkpoint(net_d, optim_d, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "D_{}.pth".format(global_step)))
    global_step += 1
  
  if rank == 0:
    logger.info('====> Epoch: {}'.format(epoch))

 
def evaluate(hps, generator, eval_loader, writer_eval):
    generator.eval()
    with torch.no_grad():
      for batch_idx, items in enumerate(eval_loader):
        if hps.model.use_spk:
          c, spec, y, spk = items
          g = spk[:1].cuda(0)
        else:
          c, spec, y = items
          g = None
        spec, y = spec[:1].cuda(0), y[:1].cuda(0)
        c = c[:1].cuda(0)
        break
      mel = spec_to_mel_torch(
        spec, 
        hps.data.filter_length, 
        hps.data.n_mel_channels, 
        hps.data.sampling_rate,
        hps.data.mel_fmin, 
        hps.data.mel_fmax)
      y_hat = generator.infer(c, g=g, mel=mel)#generator.module.infer(c, g=g, mel=mel)
      print(torch.max(y_hat),torch.min(y_hat))
      y_hat_mel = mel_spectrogram_torch(
        y_hat.squeeze(1).float(),
        hps.data.filter_length,
        hps.data.n_mel_channels,
        hps.data.sampling_rate,
        hps.data.hop_length,
        hps.data.win_length,
        hps.data.mel_fmin,
        hps.data.mel_fmax
      )
    image_dict = {
      "gen/mel": utils.plot_spectrogram_to_numpy(y_hat_mel[0].cpu().numpy()),
      "gt/mel": utils.plot_spectrogram_to_numpy(mel[0].cpu().numpy())
    }
    audio_dict = {
      "gen/audio": y_hat[0],
      "gt/audio": y[0]
    }
    utils.summarize(
      writer=writer_eval,
      global_step=global_step, 
      images=image_dict,
      audios=audio_dict,
      audio_sampling_rate=hps.data.sampling_rate
    )
    generator.train()

                           
if __name__ == "__main__":
  main()


================================================
FILE: utils.py
================================================
import os
import glob
import sys
import argparse
import logging
import json
import subprocess
import numpy as np
from scipy.io.wavfile import read
import torch
import torchvision
from torch.nn import functional as F
from commons import sequence_mask


MATPLOTLIB_FLAG = False

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logger = logging



    
    
def get_content(cmodel, y):
    with torch.no_grad():
        c = cmodel.extract_features(y.squeeze(1))[0]
    c = c.transpose(1, 2)
    return c



    
    
def transform(mel, height): # 68-92
    #r = np.random.random()
    #rate = r * 0.3 + 0.85 # 0.85-1.15
    #height = int(mel.size(-2) * rate)
    tgt = torchvision.transforms.functional.resize(mel, (height, mel.size(-1)))
    if height >= mel.size(-2):
        return tgt[:, :mel.size(-2), :]
    else:
        silence = tgt[:,-1:,:].repeat(1,mel.size(-2)-height,1) 
        silence += torch.randn_like(silence) / 10
        return torch.cat((tgt, silence), 1)
        
        
def stretch(mel, width): # 0.5-2
    return torchvision.transforms.functional.resize(mel, (mel.size(-2), width))


def load_checkpoint(checkpoint_path, model, optimizer=None, strict=False):
  assert os.path.isfile(checkpoint_path)
  checkpoint_dict = torch.load(checkpoint_path, map_location='cpu')
  iteration = checkpoint_dict['iteration']
  learning_rate = checkpoint_dict['learning_rate']
  if optimizer is not None:
    optimizer.load_state_dict(checkpoint_dict['optimizer'])
  saved_state_dict = checkpoint_dict['model']
  if hasattr(model, 'module'):
    state_dict = model.module.state_dict()
  else:
    state_dict = model.state_dict()
  if strict:
    assert state_dict.keys() == saved_state_dict.keys(), "Mismatched model config and checkpoint."
  new_state_dict= {}
  for k, v in state_dict.items():
    try:
      new_state_dict[k] = saved_state_dict[k]
    except:
      logger.info("%s is not in the checkpoint" % k)
      new_state_dict[k] = v
  if hasattr(model, 'module'):
    model.module.load_state_dict(new_state_dict)
  else:
    model.load_state_dict(new_state_dict)
  logger.info("Loaded checkpoint '{}' (iteration {})" .format(
    checkpoint_path, iteration))
  return model, optimizer, learning_rate, iteration


def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path):
  logger.info("Saving model and optimizer state at iteration {} to {}".format(
    iteration, checkpoint_path))
  if hasattr(model, 'module'):
    state_dict = model.module.state_dict()
  else:
    state_dict = model.state_dict()
  torch.save({'model': state_dict,
              'iteration': iteration,
              'optimizer': optimizer.state_dict(),
              'learning_rate': learning_rate}, checkpoint_path)


def summarize(writer, global_step, scalars={}, histograms={}, images={}, audios={}, audio_sampling_rate=22050):
  for k, v in scalars.items():
    writer.add_scalar(k, v, global_step)
  for k, v in histograms.items():
    writer.add_histogram(k, v, global_step)
  for k, v in images.items():
    writer.add_image(k, v, global_step, dataformats='HWC')
  for k, v in audios.items():
    writer.add_audio(k, v, global_step, audio_sampling_rate)


def latest_checkpoint_path(dir_path, regex="G_*.pth"):
  f_list = glob.glob(os.path.join(dir_path, regex))
  f_list.sort(key=lambda f: int("".join(filter(str.isdigit, f))))
  x = f_list[-1]
  print(x)
  return x


def plot_spectrogram_to_numpy(spectrogram):
  global MATPLOTLIB_FLAG
  if not MATPLOTLIB_FLAG:
    import matplotlib
    matplotlib.use("Agg")
    MATPLOTLIB_FLAG = True
    mpl_logger = logging.getLogger('matplotlib')
    mpl_logger.setLevel(logging.WARNING)
  import matplotlib.pylab as plt
  import numpy as np
  
  fig, ax = plt.subplots(figsize=(10,2))
  im = ax.imshow(spectrogram, aspect="auto", origin="lower",
                  interpolation='none')
  plt.colorbar(im, ax=ax)
  plt.xlabel("Frames")
  plt.ylabel("Channels")
  plt.tight_layout()

  fig.canvas.draw()
  data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
  data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
  plt.close()
  return data


def plot_alignment_to_numpy(alignment, info=None):
  global MATPLOTLIB_FLAG
  if not MATPLOTLIB_FLAG:
    import matplotlib
    matplotlib.use("Agg")
    MATPLOTLIB_FLAG = True
    mpl_logger = logging.getLogger('matplotlib')
    mpl_logger.setLevel(logging.WARNING)
  import matplotlib.pylab as plt
  import numpy as np

  fig, ax = plt.subplots(figsize=(6, 4))
  im = ax.imshow(alignment.transpose(), aspect='auto', origin='lower',
                  interpolation='none')
  fig.colorbar(im, ax=ax)
  xlabel = 'Decoder timestep'
  if info is not None:
      xlabel += '\n\n' + info
  plt.xlabel(xlabel)
  plt.ylabel('Encoder timestep')
  plt.tight_layout()

  fig.canvas.draw()
  data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
  data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
  plt.close()
  return data


def load_wav_to_torch(full_path):
  sampling_rate, data = read(full_path)
  return torch.FloatTensor(data.astype(np.float32)), sampling_rate


def load_filepaths_and_text(filename, split="|"):
  with open(filename, encoding='utf-8') as f:
    filepaths_and_text = [line.strip().split(split) for line in f]
  return filepaths_and_text


def get_hparams(init=True):
  parser = argparse.ArgumentParser()
  parser.add_argument('-c', '--config', type=str, default="./configs/base.json",
                      help='JSON file for configuration')
  parser.add_argument('-m', '--model', type=str, required=True,
                      help='Model name')
  
  args = parser.parse_args()
  model_dir = os.path.join("./logs", args.model)

  if not os.path.exists(model_dir):
    os.makedirs(model_dir)

  config_path = args.config
  config_save_path = os.path.join(model_dir, "config.json")
  if init:
    with open(config_path, "r") as f:
      data = f.read()
    with open(config_save_path, "w") as f:
      f.write(data)
  else:
    with open(config_save_path, "r") as f:
      data = f.read()
  config = json.loads(data)
  
  hparams = HParams(**config)
  hparams.model_dir = model_dir
  return hparams


def get_hparams_from_dir(model_dir):
  config_save_path = os.path.join(model_dir, "config.json")
  with open(config_save_path, "r") as f:
    data = f.read()
  config = json.loads(data)

  hparams =HParams(**config)
  hparams.model_dir = model_dir
  return hparams


def get_hparams_from_file(config_path):
  with open(config_path, "r") as f:
    data = f.read()
  config = json.loads(data)

  hparams =HParams(**config)
  return hparams


def check_git_hash(model_dir):
  source_dir = os.path.dirname(os.path.realpath(__file__))
  if not os.path.exists(os.path.join(source_dir, ".git")):
    logger.warn("{} is not a git repository, therefore hash value comparison will be ignored.".format(
      source_dir
    ))
    return

  cur_hash = subprocess.getoutput("git rev-parse HEAD")

  path = os.path.join(model_dir, "githash")
  if os.path.exists(path):
    saved_hash = open(path).read()
    if saved_hash != cur_hash:
      logger.warn("git hash values are different. {}(saved) != {}(current)".format(
        saved_hash[:8], cur_hash[:8]))
  else:
    open(path, "w").write(cur_hash)


def get_logger(model_dir, filename="train.log"):
  global logger
  logger = logging.getLogger(os.path.basename(model_dir))
  logger.setLevel(logging.DEBUG)
  
  formatter = logging.Formatter("%(asctime)s\t%(name)s\t%(levelname)s\t%(message)s")
  if not os.path.exists(model_dir):
    os.makedirs(model_dir)
  h = logging.FileHandler(os.path.join(model_dir, filename))
  h.setLevel(logging.DEBUG)
  h.setFormatter(formatter)
  logger.addHandler(h)
  return logger


class HParams():
  def __init__(self, **kwargs):
    for k, v in kwargs.items():
      if type(v) == dict:
        v = HParams(**v)
      self[k] = v
    
  def keys(self):
    return self.__dict__.keys()

  def items(self):
    return self.__dict__.items()

  def values(self):
    return self.__dict__.values()

  def __len__(self):
    return len(self.__dict__)

  def __getitem__(self, key):
    return getattr(self, key)

  def __setitem__(self, key, value):
    return setattr(self, key, value)

  def __contains__(self, key):
    return key in self.__dict__

  def __repr__(self):
    return self.__dict__.__repr__()


================================================
FILE: whisper/LICENSE
================================================
MIT License

Copyright (c) 2022 OpenAI

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: whisper/README.md
================================================
# Whisper

[[Blog]](https://openai.com/blog/whisper)
[[Paper]](https://arxiv.org/abs/2212.04356)
[[Model card]](https://github.com/openai/whisper/blob/main/model-card.md)
[[Colab example]](https://colab.research.google.com/github/openai/whisper/blob/master/notebooks/LibriSpeech.ipynb)

Whisper is a general-purpose speech recognition model. It is trained on a large dataset of diverse audio and is also a multitasking model that can perform multilingual speech recognition, speech translation, and language identification.


## Approach

![Approach](https://raw.githubusercontent.com/openai/whisper/main/approach.png)

A Transformer sequence-to-sequence model is trained on various speech processing tasks, including multilingual speech recognition, speech translation, spoken language identification, and voice activity detection. These tasks are jointly represented as a sequence of tokens to be predicted by the decoder, allowing a single model to replace many stages of a traditional speech-processing pipeline. The multitask training format uses a set of special tokens that serve as task specifiers or classification targets.


## Setup

We used Python 3.9.9 and [PyTorch](https://pytorch.org/) 1.10.1 to train and test our models, but the codebase is expected to be compatible with Python 3.8-3.10 and recent PyTorch versions. The codebase also depends on a few Python packages, most notably [HuggingFace Transformers](https://huggingface.co/docs/transformers/index) for their fast tokenizer implementation and [ffmpeg-python](https://github.com/kkroening/ffmpeg-python) for reading audio files. You can download and install (or update to) the latest release of Whisper with the following command:

    pip install -U openai-whisper

Alternatively, the following command will pull and install the latest commit from this repository, along with its Python dependencies:

    pip install git+https://github.com/openai/whisper.git 

To update the package to the latest version of this repository, please run:

    pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

It also requires the command-line tool [`ffmpeg`](https://ffmpeg.org/) to be installed on your system, which is available from most package managers:

```bash
# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg

# on Arch Linux
sudo pacman -S ffmpeg

# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg

# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg

# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
```

You may need [`rust`](http://rust-lang.org) installed as well, in case [tokenizers](https://pypi.org/project/tokenizers/) does not provide a pre-built wheel for your platform. If you see installation errors during the `pip install` command above, please follow the [Getting started page](https://www.rust-lang.org/learn/get-started) to install Rust development environment. Additionally, you may need to configure the `PATH` environment variable, e.g. `export PATH="$HOME/.cargo/bin:$PATH"`. If the installation fails with `No module named 'setuptools_rust'`, you need to install `setuptools_rust`, e.g. by running:

```bash
pip install setuptools-rust
```


## Available models and languages

There are five model sizes, four with English-only versions, offering speed and accuracy tradeoffs. Below are the names of the available models and their approximate memory requirements and relative speed. 


|  Size  | Parameters | English-only model | Multilingual model | Required VRAM | Relative speed |
|:------:|:----------:|:------------------:|:------------------:|:-------------:|:--------------:|
|  tiny  |    39 M    |     `tiny.en`      |       `tiny`       |     ~1 GB     |      ~32x      |
|  base  |    74 M    |     `base.en`      |       `base`       |     ~1 GB     |      ~16x      |
| small  |   244 M    |     `small.en`     |      `small`       |     ~2 GB     |      ~6x       |
| medium |   769 M    |    `medium.en`     |      `medium`      |     ~5 GB     |      ~2x       |
| large  |   1550 M   |        N/A         |      `large`       |    ~10 GB     |       1x       |

The `.en` models for English-only applications tend to perform better, especially for the `tiny.en` and `base.en` models. We observed that the difference becomes less significant for the `small.en` and `medium.en` models.

Whisper's performance varies widely depending on the language. The figure below shows a WER (Word Error Rate) breakdown by languages of the Fleurs dataset using the `large-v2` model. More WER and BLEU scores corresponding to the other models and datasets can be found in Appendix D in [the paper](https://arxiv.org/abs/2212.04356). The smaller, the better.

![WER breakdown by language](https://raw.githubusercontent.com/openai/whisper/main/language-breakdown.svg)



## Command-line usage

The following command will transcribe speech in audio files, using the `medium` model:

    whisper audio.flac audio.mp3 audio.wav --model medium

The default setting (which selects the `small` model) works well for transcribing English. To transcribe an audio file containing non-English speech, you can specify the language using the `--language` option:

    whisper japanese.wav --language Japanese

Adding `--task translate` will translate the speech into English:

    whisper japanese.wav --language Japanese --task translate

Run the following to view all available options:

    whisper --help

See [tokenizer.py](https://github.com/openai/whisper/blob/main/whisper/tokenizer.py) for the list of all available languages.


## Python usage

Transcription can also be performed within Python: 

```python
import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
```

Internally, the `transcribe()` method reads the entire file and processes the audio with a sliding 30-second window, performing autoregressive sequence-to-sequence predictions on each window.

Below is an example usage of `whisper.detect_language()` and `whisper.decode()` which provide lower-level access to the model.

```python
import whisper

model = whisper.load_model("base")

# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)

# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")

# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# print the recognized text
print(result.text)
```

## More examples

Please use the [🙌 Show and tell](https://github.com/openai/whisper/discussions/categories/show-and-tell) category in Discussions for sharing more example usages of Whisper and third-party extensions such as web demos, integrations with other tools, ports for different platforms, etc.


## License

Whisper's code and model weights are released under the MIT License. See [LICENSE](https://github.com/openai/whisper/blob/main/LICENSE) for further details.

================================================
FILE: whisper/__init__.py
================================================


================================================
FILE: whisper/assets/gpt2/merges.txt
================================================
#version: 0.2 - Trained by `huggingface/tokenizers`
Ġ t
Ġ a
h e
i n
r e
o n
Ġt he
e r
Ġ s
a t
Ġ w
Ġ o
e n
Ġ c
i t
i s
a n
o r
e s
Ġ b
e d
Ġ f
in g
Ġ p
o u
Ġa n
a l
a r
Ġt o
Ġ m
Ġo f
Ġ in
Ġ d
Ġ h
Ġan d
i c
a s
l e
Ġt h
i on
o m
l l
en t
Ġ n
Ġ l
s t
Ġ re
v e
Ġ e
r o
l y
Ġb e
Ġ g
Ġ T
c t
Ġ S
i d
o t
Ġ I
u t
e t
Ġ A
Ġ is
Ġ on
i m
a m
o w
a y
a d
s e
Ġth at
Ġ C
i g
Ġf or
a c
Ġ y
v er
u r
Ġ u
l d
Ġs t
Ġ M
' s
Ġ he
Ġ it
at ion
it h
i r
c e
Ġy ou
i l
Ġ B
Ġw h
o l
Ġ P
Ġw ith
Ġ 1
t er
c h
Ġa s
Ġw e
Ġ (
n d
i ll
Ġ D
i f
Ġ 2
a g
er s
k e
Ġ "
Ġ H
e m
Ġc on
Ġ W
Ġ R
he r
Ġw as
Ġ r
o d
Ġ F
u l
at e
Ġa t
r i
p p
o re
ĠT he
Ġs e
u s
Ġp ro
Ġh a
u m
Ġa re
Ġd e
a in
an d
Ġo r
ig h
es t
is t
a b
r om
Ġ N
t h
Ġc om
Ġ G
u n
o p
0 0
Ġ L
Ġn ot
es s
Ġe x
Ġ v
re s
Ġ E
e w
it y
an t
Ġb y
e l
o s
or t
o c
q u
Ġf rom
Ġha ve
Ġs u
i ve
ou ld
Ġs h
Ġth is
n t
r a
p e
igh t
ar t
m ent
Ġa l
u st
en d
- -
al l
Ġ O
ac k
Ġc h
Ġ le
i es
re d
ar d
â Ģ
ou t
Ġ J
Ġa b
e ar
i v
al ly
ou r
o st
g h
p t
Ġp l
as t
Ġc an
a k
om e
u d
T he
Ġh is
Ġd o
Ġg o
Ġh as
g e
' t
Ġ U
r ou
Ġs a
Ġ j
Ġb ut
Ġw or
Ġa ll
e ct
Ġ k
am e
Ġw ill
o k
Ġw he
Ġthe y
id e
0 1
f f
ic h
p l
t her
Ġt r
. .
Ġin t
i e
u re
ag e
Ġn e
i al
a p
in e
ic e
Ġm e
Ġo ut
an s
on e
on g
ion s
Ġwh o
Ġ K
Ġu p
Ġthe ir
Ġa d
Ġ 3
Ġu s
at ed
ou s
Ġm ore
u e
o g
ĠS t
in d
i ke
Ġs o
im e
p er
. "
b er
i z
a ct
Ġon e
Ġsa id
Ġ -
a re
Ġyou r
c c
ĠT h
Ġc l
e p
a ke
ab le
i p
Ġcon t
Ġwh ich
i a
Ġ im
Ġab out
Ġwe re
ver y
u b
Ġh ad
Ġ en
Ġcom p
, "
ĠI n
Ġu n
Ġa g
i re
ac e
a u
ar y
Ġw ould
as s
r y
Ġ âĢ
c l
o ok
e re
s o
Ġ V
ig n
i b
Ġof f
Ġt e
v en
Ġ Y
i le
o se
it e
or m
Ġ2 01
Ġre s
Ġm an
Ġp er
Ġo ther
or d
ul t
Ġbe en
Ġl ike
as e
an ce
k s
ay s
ow n
en ce
Ġd is
ct ion
Ġan y
Ġa pp
Ġs p
in t
res s
ation s
a il
Ġ 4
ic al
Ġthe m
Ġhe r
ou nt
ĠC h
Ġa r
Ġ if
Ġthe re
Ġp e
Ġy ear
a v
Ġm y
Ġs ome
Ġwhe n
ou gh
ac h
Ġth an
r u
on d
ic k
Ġo ver
ve l
Ġ qu
Ċ Ċ
Ġs c
re at
re e
ĠI t
ou nd
p ort
Ġal so
Ġp art
f ter
Ġk n
Ġbe c
Ġt ime
en s
Ġ 5
op le
Ġwh at
Ġn o
d u
m er
an g
Ġn ew
-- --
Ġg et
or y
it ion
ing s
Ġj ust
Ġint o
Ġ 0
ent s
o ve
t e
Ġpe ople
Ġp re
Ġit s
Ġre c
Ġt w
i an
ir st
ar k
or s
Ġwor k
ad e
o b
Ġs he
Ġo ur
w n
in k
l ic
Ġ1 9
ĠH e
is h
nd er
au se
Ġh im
on s
Ġ [
Ġ ro
f orm
i ld
at es
ver s
Ġon ly
o ll
Ġs pe
c k
e ll
am p
Ġa cc
Ġb l
i ous
ur n
f t
o od
Ġh ow
he d
Ġ '
Ġa fter
a w
Ġat t
o v
n e
Ġpl ay
er v
ic t
Ġc ould
it t
Ġa m
Ġf irst
Ġ 6
Ġa ct
Ġ $
e c
h ing
u al
u ll
Ġcom m
o y
o ld
c es
at er
Ġf e
Ġbe t
w e
if f
Ġtw o
oc k
Ġb ack
) .
id ent
Ġu nder
rou gh
se l
x t
Ġm ay
rou nd
Ġp o
p h
is s
Ġd es
Ġm ost
Ġd id
Ġad d
j ect
Ġin c
f ore
Ġp ol
on t
Ġag ain
cl ud
ter n
Ġkn ow
Ġne ed
Ġcon s
Ġc o
Ġ .
Ġw ant
Ġse e
Ġ 7
n ing
i ew
ĠTh is
c ed
Ġe ven
Ġin d
t y
ĠW e
at h
Ġthe se
Ġp r
Ġu se
Ġbec ause
Ġf l
n g
Ġn ow
ĠâĢ ĵ
c om
is e
Ġm ake
Ġthe n
ow er
Ġe very
ĠU n
Ġse c
os s
u ch
Ġe m
Ġ =
ĠR e
i ed
r it
Ġin v
le ct
Ġsu pp
at ing
Ġl ook
m an
pe ct
Ġ 8
ro w
Ġb u
Ġwhe re
if ic
Ġyear s
i ly
Ġd iff
Ġsh ould
Ġre m
T h
I n
Ġe v
d ay
' re
ri b
Ġre l
s s
Ġde f
Ġr ight
Ġs y
) ,
l es
00 0
he n
Ġth rough
ĠT r
_ _
Ġw ay
Ġd on
Ġ ,
Ġ1 0
as ed
Ġas s
ub lic
Ġre g
ĠA nd
i x
Ġ very
Ġin clud
ot her
Ġim p
ot h
Ġsu b
ĠâĢ Ķ
Ġbe ing
ar g
ĠW h
= =
ib le
Ġdo es
an ge
r am
Ġ 9
er t
p s
it ed
ation al
Ġb r
Ġd own
Ġman y
ak ing
Ġc all
ur ing
it ies
Ġp h
ic s
al s
Ġde c
at ive
en er
Ġbe fore
il ity
Ġwe ll
Ġm uch
ers on
Ġth ose
Ġsu ch
Ġ ke
Ġ end
ĠB ut
as on
t ing
Ġl ong
e f
Ġth ink
y s
Ġbe l
Ġs m
it s
a x
Ġo wn
Ġpro v
Ġs et
if e
ment s
b le
w ard
Ġsh ow
Ġp res
m s
om et
Ġo b
Ġs ay
ĠS h
t s
f ul
Ġe ff
Ġg u
Ġin st
u nd
re n
c ess
Ġ ent
ĠY ou
Ġgo od
Ġst art
in ce
Ġm ade
t t
st em
ol og
u p
Ġ |
um p
Ġhe l
ver n
ul ar
u ally
Ġa c
Ġm on
Ġl ast
Ġ2 00
1 0
Ġst ud
u res
ĠA r
sel f
ar s
mer ic
u es
c y
Ġm in
oll ow
Ġc ol
i o
Ġm od
Ġc ount
ĠC om
he s
Ġf in
a ir
i er
âĢ Ķ
re ad
an k
at ch
e ver
Ġst r
Ġpo int
or k
ĠN ew
Ġs ur
o ol
al k
em ent
Ġus ed
ra ct
we en
Ġs ame
ou n
ĠA l
c i
Ġdiff ere
Ġwh ile
---- ----
Ġg ame
ce pt
Ġs im
.. .
Ġin ter
e k
Ġre port
Ġpro du
Ġst ill
l ed
a h
Ġhe re
Ġwor ld
Ġth ough
Ġn um
ar ch
im es
al e
ĠS e
ĠI f
/ /
ĠL e
Ġre t
Ġre f
Ġtr ans
n er
ut ion
ter s
Ġt ake
ĠC l
Ġcon f
w ay
a ve
Ġgo ing
Ġs l
u g
ĠA meric
Ġspe c
Ġh and
Ġbet ween
ist s
ĠD e
o ot
I t
Ġe ar
Ġagain st
Ġh igh
g an
a z
at her
Ġex p
Ġo p
Ġin s
Ġg r
Ġhel p
Ġre qu
et s
in s
ĠP ro
is m
Ġf ound
l and
at a
us s
am es
Ġp erson
Ġg reat
p r
Ġs ign
ĠA n
' ve
Ġs omet
Ġs er
h ip
Ġr un
Ġ :
Ġt er
ire ct
Ġf ollow
Ġd et
ic es
Ġf ind
1 2
Ġm em
Ġc r
e red
e x
Ġex t
ut h
en se
c o
Ġte am
v ing
ou se
as h
at t
v ed
Ġsy stem
ĠA s
d er
iv es
m in
Ġle ad
ĠB l
c ent
Ġa round
Ġgo vern
Ġc ur
vel op
an y
Ġc our
al th
ag es
iz e
Ġc ar
od e
Ġl aw
Ġre ad
' m
c on
Ġre al
Ġsupp ort
Ġ1 2
.. ..
Ġre ally
n ess
Ġf act
Ġd ay
Ġb oth
y ing
Ġs erv
ĠF or
Ġth ree
Ġw om
Ġm ed
od y
ĠThe y
5 0
Ġex per
t on
Ġe ach
ak es
Ġc he
Ġc re
in es
Ġre p
1 9
g g
ill ion
Ġg rou
ut e
i k
W e
g et
E R
Ġm et
Ġs ays
o x
Ġd uring
er n
iz ed
a red
Ġf am
ic ally
Ġha pp
ĠI s
Ġch ar
m ed
v ent
Ġg ener
i ent
p le
i et
re nt
1 1
v es
pt ion
Ġ2 0
form ation
Ġc or
Ġoff ic
ie ld
Ġto o
is ion
Ġin f
Ġ Z
t he
o ad
Ġp ublic
Ġpro g
r ic
* *
Ġw ar
Ġp ower
v iew
Ġf ew
Ġl oc
Ġdiffere nt
Ġst ate
Ġhe ad
' ll
Ġp oss
Ġst at
re t
ant s
Ġv al
Ġis s
Ġc le
i vers
an c
Ġex pl
Ġan other
Ġ Q
Ġa v
th ing
n ce
W h
Ġch ild
Ġs ince
i red
l ess
Ġl ife
Ġde velop
itt le
Ġde p
Ġp ass
ã ĥ
Ġt urn
or n
Th is
b ers
ro ss
ĠA d
Ġf r
Ġres p
Ġsec ond
o h
Ġ /
Ġdis c
Ġ &
Ġsomet hing
Ġcomp le
Ġ ed
Ġf il
Ġmon th
a j
u c
Ġgovern ment
Ġwith out
Ġle g
Ġd ist
Ġp ut
Ġqu est
an n
Ġpro t
2 0
Ġne ver
i ence
Ġle vel
Ġar t
Ġth ings
Ġm ight
Ġeff ect
Ġcont ro
Ġc ent
Ġ1 8
Ġall ow
Ġbel ie
ch ool
ot t
Ġinc re
Ġfe el
Ġres ult
Ġl ot
Ġf un
ot e
Ġt y
ere st
Ġcont in
Ġus ing
Ġb ig
2 01
Ġas k
Ġb est
Ġ )
I N
Ġo pp
3 0
Ġnum ber
in ess
S t
le ase
Ġc a
Ġm ust
Ġd irect
Ġg l
Ġ <
Ġop en
Ġp ost
Ġcom e
Ġse em
ord ing
Ġwe ek
ate ly
it al
Ġe l
ri end
Ġf ar
Ġt ra
in al
Ġp ri
ĠU S
Ġpl ace
Ġfor m
Ġto ld
" :
ain s
at ure
ĠTr ump
Ġst and
Ġ #
id er
ĠF r
Ġne xt
Ġs oc
Ġp ur
Ġle t
Ġl ittle
Ġh um
Ġ i
r on
1 5
Ġ1 5
Ġcomm un
Ġm ark
ĠThe re
Ġw r
ĠTh at
Ġin formation
w ays
Ġb us
a pp
Ġinv est
m e
Ġh ard
ain ed
e ad
Ġim port
Ġapp ro
Ġt est
Ġt ri
Ġre st
os ed
Ġf ull
Ġc are
ĠS p
Ġc ase
O N
Ġs k
Ġl ess
Ġ +
Ġpart ic
ĠP l
ab ly
u ck
is hed
ch n
b e
Ġl ist
at or
Ġto p
Ġad v
ĠB e
ru ct
Ġd em
r ation
l ing
g y
re en
g er
Ġh ome
Ġle ft
Ġbet ter
Ġd ata
Ġ1 1
Ġatt ack
Ġpro ble
l ine
ard s
Ġbe h
r al
ĠH ow
ĠS he
ar ge
Ġ --
: //
Ġb ro
ĠP h
at s
Ġbu ild
w w
id ed
a im
as es
en cy
Ġm ain
in ed
Ġinclud ing
Ġ {
Ġg ot
Ġint erest
Ġke ep
Ġ X
Ġe as
ain ing
Ġcl ass
âĢ ¦
ĠN o
Ġv ar
Ġsm all
amp le
A T
Ġ ide
ĠS o
Ġre ce
Ġpol it
Ġm ov
Ġpl an
Ġper cent
iv ing
Ġc amp
Ġp ay
1 4
s c
is ed
Ġu nt
one y
pl oy
== ==
Ġdid n
ĠI nd
el s
ert ain
Ġp os
__ __
i ver
Ġpro cess
Ġprog ram
if ied
ĠR ep
1 6
u ro
olog y
at ter
in a
Ġn ame
ĠA ll
Ġf our
Ġret urn
v ious
b s
Ġcall ed
Ġm ove
ĠS c
ir d
Ġgrou p
Ġb re
Ġm en
Ġc ap
t en
e e
Ġd ri
le g
he re
uth or
Ġp at
Ġcur rent
id es
Ġp op
t o
ent ion
Ġal ways
Ġm il
Ġwom en
Ġ1 6
Ġo ld
iv en
ra ph
ĠO r
r or
ent ly
Ġn ear
ĠE x
re am
s h
Ġ1 4
Ġf ree
iss ion
st and
ĠC on
al ity
us ed
1 3
Ġdes ign
Ġch ange
Ġch ang
Ġb o
Ġv is
em ber
Ġb ook
read y
Ġk ill
2 5
pp ed
Ġa way
Ġab le
Ġcount ry
Ġcon st
ar n
Ġor der
A R
i or
i um
or th
1 8
ail able
Ġs w
Ġm illion
Ġ1 3
at ic
t ed
ĠG o
Ġo per
en g
Ġth ing
aj or
con om
ĠCom m
Ġwh y
u red
ur al
Ġs chool
b y
ĠM ar
Ġa ff
Ġd ays
Ġan n
us h
an e
I f
e g
Ġpro f
Ġhe alth
ou th
B ut
ion al
. ,
Ġs ol
Ġal ready
Ġ3 0
Ġchar act
H e
Ġf riend
E S
i ans
ic le
' d
ĠO n
Ġle ast
Ġp rom
Ġd r
Ġh ist
it her
Ġ est
i qu
1 7
s on
Ġte ll
Ġt alk
oh n
o int
le ction
A N
Ġunt il
au gh
Ġl ater
Ġ ve
Ġv iew
end ing
iv ed
Ġwor d
w are
Ġc ost
Ġen ough
Ġg ive
ĠUn ited
Ġte chn
are nt
O R
Ġp ar
ĠD r
Ġ201 6
r ist
er ing
Ġ Â
Ġl arge
s ide
ac y
cc ess
Ġw in
Ġimport ant
Ġ19 9
Ġdoes n
Ġ1 7
Ġbus iness
Ġcle ar
Ġre se
" ,
ur y
Ġe qu
as ter
al f
ĠAmeric an
n ect
Ġex pect
ivers ity
Ġo cc
ĠF l
Ġk ind
Ġme an
Ġp ast
Ġde v
Ġb as
le t
ra ft
Ġor gan
Ġde l
Ġper form
Ġst ory
Ġse ason
ĠC ol
Ġcl aim
Ġc ame
Ġwith in
Ġl ine
Ġpro ject
ĠA t
Ġcontro l
end ed
ĠS y
Ġa ir
iz ation
Ġ *
le y
Ġm oney
id d
Y ou
f or
Ġfam ily
Ġm aking
Ġb it
Ġpol ice
Ġhapp en
Ġ vers
on y
u ff
ĠW hen
Ġs it
ide o
l f
is on
Ġsu re
g in
Ġapp ear
Ġl ight
Ġ es
o f
Ġw ater
Ġt imes
n ot
Ġg row
Ġcomp any
ĠT e
ow s
Ġm ar
our ce
i ol
ar m
b r
Ġex ample
Ġcon c
Ġf ore
ĠT o
p ro
E N
ri es
Ġ2 5
ĠC an
ne y
Ġact ually
Ġe ver
ur ity
ak en
ap s
Ġt ax
Ġm ajor
am a
Ġof ten
er al
Ġhum an
Ġj ob
is ter
Ġav ailable
oc r
en n
a id
iv id
Ġrec ord
? "
Ġs ing
ĠA m
id ence
Ġnew s
st er
Ġe conom
Ġfollow ing
ĠB r
is ing
Ġh our
m ost
um ent
Ġse x
Ġdes c
Ġbec ome
ĠE d
Ġto ok
Ġha ving
Ġprodu ct
a ult
A s
ar ing
Ġme ans
Ġh op
un e
Ġch o
Ġc ertain
Ġn on
Ġde al
2 4
le ment
oc i
en e
Ġs ide
ĠP r
ĠM ay
Ġre ason
u ed
c hed
ul ation
Ġe lect
Ġoffic ial
Ġposs ible
Ġh old
and s
ot s
Ġc ity
or ies
Ġse ver
Ġchild ren
Ġon ce
Ġact iv
l er
Ġn ight
it ions
ĠJ ohn
a pe
pl ay
Ġd one
Ġl im
Ġwork ing
ĠP res
or ld
e b
ĠC o
Ġb ody
ail s
ut es
ĠM r
Ġwhe ther
Ġa uthor
ro p
Ġpro per
Ġse en
) ;
Ġf ac
ĠS u
Ġcon d
it ing
Ġcour se
Ġ }
-------- --------
a ign
Ġev ent
Ġen g
Ġp ot
Ġin tern
i am
Ġsh ort
em pt
ã Ĥ
ĠG od
il ar
8 0
Ġor ig
I S
our n
ab ility
it ive
Ġd am
Ġ1 00
Ġp ress
Ġdo ing
Ġprot ect
r ing
Ġthough t
Ġquest ion
re w
ĠW ar
Ġsever al
ĠSt ate
Ġg iven
Ġf und
ĠT w
Ġw ent
an ces
w ork
p or
m y
4 0
Ġar g
art ment
ust om
Ġpol ic
Ġme et
Ġc reat
2 2
ĠSt ates
Ġg ames
ra w
ut ure
Ġunder stand
ur s
ĠO b
l ish
s y
Ġm akes
Ġw on
ag on
Ġh tt
Ġl ove
ent ial
Ġcomple te
p ar
ĠI m
A L
Ġacc ount
 ł
ore d
ver t
Ġ ident
Ġ201 5
Ġother s
ĠM in
i ber
ver age
The re
ition al
d d
Ġpro b
Ġyou ng
Ġal ong
Ġacc ording
Ġy et
Ġmem bers
ĠWh at
o id
ĠM an
A nd
Ġam ong
a i
Ġem ploy
ĠR es
Ġ >
Ġinv ol
Ġl ow
a f
ĠC ar
Ġh ig
ĠO ne
ĠS ec
in ation
Ġlike ly
Ġan t
ag ed
ĠR uss
Ġb en
Ġre le
F or
b ack
ĠN ot
Ġpres ident
b all
Ġacc ess
ivid ual
ĠD em
ĠE uro
6 0
Ġkn own
ir l
ĠG r
Ġear ly
u se
iet y
âĢ ĵ
Ġf ight
Ġs ent
Ġto day
Ġmark et
" .
Ġb ased
Ġstr ong
ur ther
Ġde b
m ber
Ġproble m
Ġde ath
Ġsoc ial
im ate
A S
ort un
Ġcamp aign
er y
C h
Ġe y
i ally
Ġm us
w h
p os
Ġ er
Ġsa f
Ġmonth s
ir on
Ġv iol
Ġf ive
Ġst re
Ġplay ers
in c
al d
y ear
a un
Ġsu ccess
Ġpres ent
ere nce
Ġ201 4
Ġsu gg
Ġpartic ular
Ġtr y
Ġsugg est
ĠCh rist
on es
Ġpri v
2 3
Ġc rit
Ġl and
Ġloc al
if y
2 9
Ġa ut
E D
ĠG u
Ġm ult
Ġpolit ical
Ġask ed
Ġfor mer
it ter
ri pt
Ġcl ose
Ġp ract
ĠY ork
Ġget ting
Ġac ross
Ġcom b
Ġbelie ve
Ġ z
Ġto get
Ġtoget her
ĠC ent
ir c
Ġind ividual
ĠM c
2 7
is k
ĠE ng
Ġf ace
Ġ2 4
Ġval ue
Ġare a
e v
Ġw rit
ĠPres ident
Ġv ot
Ġke y
Ġm om
p ut
Ġany thing
Ġexper ience
att le
Ġm ind
a ff
om m
Ġf uture
g ed
Ġc ut
Ġto t
it ch
Ġv ideo
Ġinvest ig
Ġn et
ĠM y
r ict
i en
. )
Ġimp ro
th ough
ward s
Ġcon nect
ĠM ed
sel ves
ens ive
m b
o ber
at ors
A n
Ġ5 0
Ġre du
res ent
Ġab ove
Ġf re
ĠEuro pe
s w
Ġam ount
ĠA pp
Ġe ither
Ġmil it
Ġan al
Ġf ail
ĠE n
al es
Ġspec ial
Ġbl ack
I T
c her
Ġlook ing
Ġf ire
y n
Ġal most
o on
Ġstud y
Ġm iss
c hes
ro wn
Ġt re
Ġcommun ity
Ġmed ia
Ġf ood
Ġcom es
ĠUn iversity
Ġsing le
Wh at
u ly
Ġh alf
ag ue
h od
ĠRep ublic
Ġstart ed
Ġqu ick
ot o
b ook
Ġiss ue
it or
Ġel se
Ġcons ider
2 6
ro du
Ġt aken
2 8
9 9
ĠW ith
Ġtr ue
Ġw a
Ġtr ad
Ġag o
Ġm ess
ie f
Ġadd ed
o ke
Ġb ad
Ġf av
3 3
Ġsim ilar
as k
ĠD on
Ġcharact er
ort s
ĠH ouse
Ġreport ed
Ġty pe
v al
i od
ĠHow ever
Ġt arg
Ġent ire
pp ing
Ġhist ory
Ġl ive
ff ic
.... ....
ed eral
Ġtr ying
Ġdisc uss
ĠH ar
ac es
l ished
Ġse lf
os p
re st
Ġro om
el t
Ġf all
ol ution
Ġe t
Ġ x
Ġis n
Ġide a
b o
Ġs ound
ĠD ep
Ġsome one
ci ally
ull y
Ġf oc
Ġob ject
if t
ap er
Ġplay er
Ġr ather
Ġserv ice
as hing
ĠD o
ĠP art
ru g
m on
p ly
Ġm or
Ġnot hing
Ġprov ide
I C
un g
Ġpart y
Ġex ist
Ġm ag
7 0
Ġr ul
Ġh ouse
Ġbeh ind
Ġhow ever
ĠW orld
Ġs um
Ġapp lic
Ġ ;
Ġfun ction
g r
ĠP ol
Ġfr ont
2 00
Ġser ies
Ġt em
Ġty p
ill s
Ġo pt
Ġpoint s
Ġbel ow
itt ed
Ġspec ific
Ġ201 7
um b
Ġr a
Ġpre vious
Ġpre t
re me
Ġc ustom
Ġcour t
ĠM e
Ġre pl
Ġwho le
g o
c er
Ġt reat
ĠA ct
Ġprob ably
Ġle arn
end er
ĠA ss
Ġvers ion
n ow
Ġche ck
ĠC al
R E
min ist
O n
our ces
Ġben ef
Ġd oc
Ġdet er
Ġen c
Ġsu per
Ġadd ress
Ġv ict
Ġ201 3
Ġme as
t r
Ġf ield
W hen
Ġsign ific
u ge
Ġfe at
Ġcomm on
l oad
Ġbe gin
Ġbr ing
Ġa ction
er man
Ġdesc rib
Ġind ust
Ġwant ed
ri ed
m ing
Ġatt empt
4 5
f er
Ġd ue
ress ion
# #
Ġsh all
Ġs ix
o o
Ġst ep
Ġp ub
Ġhim self
Ġ2 3
Ġc op
Ġd est
Ġst op
A C
ib ility
Ġl ab
ic ult
Ġhour s
Ġcre ate
Ġf urther
ĠAmeric a
ĠC ity
Ġd ou
he ad
S T
ĠN orth
c ing
Ġn ational
u le
ĠIn st
Ġt aking
ĠQ u
ir t
Ġre d
Ġrese arch
v iron
ĠG e
Ġbre ak
an a
Ġsp ace
ater ial
Ġrec ent
ĠA b
Ġgener al
Ġh it
Ġper iod
Ġevery thing
ive ly
Ġph ys
Ġsay ing
an ks
Ġc ou
Ġc ult
ac ed
e al
u ation
Ġc oun
l u
Ġinclud e
Ġpos ition
ĠA fter
ĠCan ad
ĠE m
Ġim m
ĠR ed
Ġp ick
Ġcom pl
Ġm atter
re g
e xt
ang u
is c
o le
a ut
Ġcomp et
e ed
f ect
Ġ2 1
ĠS en
ĠThe se
as ing
Ġcan not
Ġin it
Ġrel ations
ac hed
Ġb ar
Ġ4 0
ĠT H
Ġ201 2
Ġv ol
Ġg round
Ġsec urity
Ġup d
il t
3 5
Ġconc ern
ĠJ ust
Ġwh ite
Ġseem s
ĠH er
pe cially
i ents
Ġann oun
Ġf ig
ight s
Ġst ri
l ike
id s
Ġs us
Ġw atch
Ġ â
Ġw ind
ĠC ont
Ġit self
Ġm ass
A l
y le
iqu e
ĠN ational
Ġab s
Ġp ack
Ġout side
Ġan im
Ġp ain
et er
Ġman ag
du ct
og n
Ġ ]
ĠSe pt
se c
o ff
ĠJ an
Ġf oot
ad es
Ġth ird
Ġm ot
Ġev idence
int on
Ġth reat
a pt
pl es
c le
Ġl o
Ġde cl
Ġit em
med i
Ġrep resent
om b
am er
Ġsignific ant
og raph
s u
Ġc al
i res
00 00
I D
A M
Ġsim ply
Ġlong er
Ġf ile
O T
c he
S o
ate g
or g
ĠH is
Ġen er
Ġd om
Ġup on
il i
": "
Ġthem selves
Ġcom ing
Ġqu ite
Ġdiff icult
ĠB ar
il ities
re l
end s
c ial
6 4
Ġwom an
ra p
y r
Ġne cess
ip s
Ġte xt
Ġrequ ire
Ġmilit ary
Ġre view
Ġresp ons
7 5
Ġsub ject
Ġinst ead
Ġiss ues
Ġg en
" ,"
Ġmin utes
Ġwe ap
r ay
am ed
t ime
b l
H ow
Ġc ode
ĠS m
Ġhig her
ĠSt e
r is
Ġp age
Ġstud ents
ĠIn tern
Ġmet hod
ĠA ug
ĠP er
ĠA g
Ġpolic y
ĠS w
Ġex ec
Ġac cept
um e
rib ut
Ġword s
Ġfin al
Ġchang es
ĠDem ocr
Ġfriend s
Ġres pect
Ġe p
Ġcomp an
iv il
Ġdam age
** **
og le
viron ment
Ġne g
ent al
Ġa p
Ġtot al
iv al
! "
l im
Ġneed s
Ġag re
Ġdevelop ment
Ġa ge
ip le
2 1
Ġresult s
ĠA f
S h
Ġg un
ĠOb ama
ro ll
Ġ @
Ġright s
ĠB rit
Ġrun ning
Ġwas n
Ġp ort
Ġr ate
Ġpret ty
Ġtarg et
Ġsa w
Ġc irc
Ġwor ks
ic ro
al t
o ver
ww w
Th at
l ier
Ġevery one
ud e
Ġp ie
idd le
ra el
Ġr ad
Ġbl ock
Ġw alk
T o
ã ģ
n es
ĠA ust
a ul
ro te
ĠS outh
ess ion
op h
Ġshow s
Ġs ite
Ġj o
Ġr isk
cl us
l t
Ġin j
id ing
ĠS pe
Ġch all
ir m
Ġ2 2
itt ing
st r
Ġh y
L E
ke y
Ġbe gan
at ur
ashing ton
l am
ĠD av
b it
Ġs ize
ĠP ar
3 8
ourn al
f ace
Ġdec ision
Ġl arg
Ġj ud
re ct
Ġcontin ue
ĠO ct
ove red
ĠI nt
==== ====
Ġp arent
ĠW ill
Ġeas y
Ġd rug
ang er
Ġs ense
Ġd i
id ay
Ġener gy
ist ic
Ġass oci
ar ter
ob al
e ks
ĠE l
ur ch
Ġg irl
o e
it le
Ġ2 8
ĠC he
Ġrequ est
Ġso on
Ġh ost
k y
Ġst ates
om es
Ġm aterial
le x
Ġmom ent
Ġan sw
on se
Ġes pecially
Ġn orm
Ġserv ices
p ite
r an
Ġro le
4 4
) :
Ġc red
C l
____ ____
Ġm at
Ġl og
ĠCl inton
O U
Ġoff ice
Ġ2 6
Ġch arg
Ġtr ack
m a
Ġhe art
Ġb all
Ġperson al
Ġbuild ing
n a
s et
b ody
ĠBl ack
Ġincre ase
itt en
Ġneed ed
3 6
3 2
= "
Ġl ost
Ġbec ame
Ġgrou ps
ĠM us
Ġw rote
ĠP e
Ġpro p
j oy
à ©
ĠWh ite
Ġde ad
. '
Ġhtt p
Ġwe bs
O S
Ġins ide
Ġwr ong
Ġstat ement
Ġ ...
y l
Ġfil m
Ġmus ic
Ġsh are
ific ation
Ġre lease
Ġfor ward
Ġst ay
Ġcomp ut
it te
s er
Ġorig inal
Ġc ard
Ġc and
Ġd iv
at ural
Ġfav or
O M
Ġc ases
us es
Ġse ction
Ġle ave
g ing
ov ed
ĠW ashington
3 9
ĠG l
Ġrequ ired
act ion
ap an
o or
it er
ĠK ing
Ġcount ries
ĠG erman
ll ing
Ġ2 7
3 4
Ġquest ions
Ġpr im
Ġc ell
Ġsh oot
Ġany one
ĠW est
Ġaff ect
ep end
Ġon line
ĠIs rael
ĠSept ember
Ġab ility
Ġcont ent
is es
Ġre ve
Ġl aun
Ġind ic
Ġfor ce
c ast
Ġso ld
av ing
f l
Ġso ft
Ġcompan ies
ce ed
Ġart icle
Ġa ud
Ġre v
Ġed uc
Ġplay ing
0 5
Ġhe ld
ct or
Ġrele ased
Ġf ederal
3 7
Ġad minist
Ġinter view
Ġinst all
Ġrece ived
Ġs ource
u k
P h
Ġser ious
Ġcre ated
Ġc ause
Ġim medi
Ġdef in
u el
ĠDep artment
ct ions
ĠC our
ĠN ow
z e
it es
it ution
Ġl ate
Ġspe ak
n ers
Ġleg al
ar i
ĠC or
Ġwe eks
Ġmod el
Ġp red
Ġex act
B C
ĠB y
IN G
os ing
Ġt akes
Ġreg ard
Ġopp ortun
Ġpr ice
Ġ19 8
ĠA pr
f ully
Ġor d
Ġproble ms
ru ction
h am
ĠC ount
le ge
Ġlead ers
E T
le v
Ġde ep
olog ical
es e
h aps
ĠS ome
Ġp ers
Ġcont ract
Ġrelations hip
s p
ou d
Ġb ase
4 8
m it
A d
anc ial
Ġcons um
Ġpot ential
Ġl angu
re m
et h
Ġrel ig
ress ed
6 6
Ġl ink
Ġl ower
ay er
ĠJ une
Ġf em
un t
er c
ur d
Ġcont act
Ġ ill
Ġm other
Ġest ab
h tt
ĠM arch
ĠB ro
ĠCh ina
Ġ2 9
Ġs qu
Ġprov ided
Ġa verage
as ons
Ġ201 1
Ġex am
l in
5 5
n ed
Ġper fect
Ġt ou
al se
u x
Ġbu y
Ġsh ot
Ġcol lect
Ġph ot
Ġplay ed
Ġsur pr
Ġofficial s
Ġsim ple
av y
Ġindust ry
Ġhand s
g round
Ġp ull
Ġr ound
Ġus er
Ġr ange
u ary
Ġpriv ate
op s
e es
Ġw ays
ĠM ich
Ġve h
Ġex cept
Ġter ms
im um
pp er
I ON
ore s
ĠDr agon
ou l
Ġd en
Ġperform ance
Ġb ill
c il
4 7
Ġen vironment
Ġex c
ad d
Ġwor th
Ġp ict
Ġch ance
Ġ201 8
b or
Ġspe ed
ict ion
Ġal leg
ĠJ apan
at ory
re et
Ġm atch
ĠI I
Ġst ru
ord er
Ġst e
Ġl iving
Ġst ruct
in o
Ġse par
her n
Ġresp onse
Ġen joy
Ġv ia
A D
um ents
ace book
Ġmem ber
ib r
iz ing
Ġto ol
ĠM on
ĠWh ile
h ood
ĠA ng
ĠD ef
Ġoff er
T r
a ur
Ġturn ed
ĠJ uly
d own
an ced
Ġrec ently
ĠE ar
Ġc e
ĠSt ar
ĠC ong
rough t
Ġbl ood
Ġhop e
Ġcom ment
ain t
Ġar ri
il es
Ġpartic ip
ough t
ri ption
0 8
4 9
Ġg ave
Ġse lect
Ġkill ed
sy ch
Ġgo es
i j
Ġc oll
Ġimp act
at ives
ĠS er
0 9
ĠAug ust
Ġb oy
d e
ĠD es
Ġf elt
U S
Ġexpect ed
Ġim age
ĠM ark
cc ording
o ice
E C
ĠM ag
en ed
h old
ĠP ost
Ġpre vent
N o
Ġinvol ved
Ġey es
Ġquick ly
A t
un k
Ġbeh av
Ġ ur
Ġl ed
c ome
e y
Ġcand id
Ġear lier
Ġfoc us
et y
P ro
led ge
ix ed
ill ed
Ġpop ular
A P
Ġset t
l ight
Ġvar ious
in ks
Ġlevel s
Ġro ad
ell ig
ab les
he l
itte e
ĠG ener
y pe
Ġhe ard
ic les
Ġm is
Ġus ers
ĠS an
Ġimpro ve
Ġf ather
Ġse arch
The y
v il
Ġprof ess
Ġkn ew
Ġl oss
Ġev ents
6 5
Ġb illion
0 7
0 2
ĠNew s
ĠA M
Ġco ver
w here
ens ion
Ġb ott
Ġare as
en ces
op e
ĠTw itter
a el
Ġget s
ĠGo ogle
Ġs n
i ant
Ġv ote
Ġnear ly
Ġinclud ed
Ġrec ogn
z z
m m
al ed
Ġhappen ed
0 4
Ġh ot
Ġwho se
Ġc ivil
Ġsu ff
o es
it iz
ĠSy ri
Ġresp ond
Ġh on
Ġfeat ures
Ġeconom ic
ĠApr il
r im
Ġtechn ology
Ġo ption
ag ing
Ġpur ch
R e
Ġl at
ch ie
is l
Ġrec omm
u f
Ġtr aining
Ġeffect s
Ġf ast
Ġ201 0
Ġocc ur
Ġwebs ite
Ġem ail
Ġs ens
e ch
Ġo il
Ġinf lu
Ġcurrent ly
ĠS ch
ĠAd d
Ġgo al
Ġsc ient
Ġcon v
1 00
em y
Ġdec ided
Ġtra vel
Ġm ention
L L
0 3
Ġe lection
Ġph one
Ġlook s
Ġsit uation
Ġc y
Ġh or
b ed
ĠCour t
a ily
av es
Ġqu ality
ĠCom p
w ise
Ġt able
Ġst aff
ĠW ind
et t
Ġtri ed
ide red
Ġadd ition
Ġb ox
Ġl ack
ar ily
Ġw ide
Ġm id
Ġbo ard
ys is
Ġant i
h a
Ġd ig
en ing
Ġd ro
C on
6 8
Ġsl ow
b ased
se qu
Ġp ath
E x
ak er
Ġwork ed
Ġp en
Ġeng ine
Ġlook ed
ĠSu per
ĠS erv
Ġvict im
U n
Ġproper ty
Ġint rodu
Ġexec ut
ĠP M
L e
Ġcol or
ĠM ore
Ġ6 0
Ġnet work
Ġd ate
c ul
id ge
Ġext ra
3 1
Ġs le
6 7
Ġw ond
Ġreport s
j ust
ĠAust ral
Ġcap ital
Ġen s
Ġcomm and
Ġallow ed
Ġpre p
Ġca pt
h ib
Ġnum bers
ch an
Ġf air
m p
om s
Ġre ach
W ith
t ain
Ġbro ad
Ġcou ple
ec ause
ly ing
ĠF eb
Ġsc reen
Ġl ives
Ġpri or
ĠCong ress
A r
Ġappro ach
Ġe mer
ar ies
ĠD is
s erv
ĠN e
Ġbu ilt
c ies
Ġre pe
Ġrul es
for ce
ĠP al
Ġfin ancial
Ġcons idered
ĠCh ar
n ces
ĠI S
Ġb rought
Ġb i
i ers
ĠS im
O P
Ġproduct s
Ġvis it
Ġdoc ument
Ġcon duct
Ġcomplete ly
in ing
ĠCal if
ib ly
Ġwr itten
ĠT V
em ents
Ġd raw
O ne
Ġpub lished
Ġsec ret
r ain
he t
ĠF acebook
ond ay
ĠU p
Ġsex ual
Ġth ous
ĠP at
Ġ ess
Ġstand ard
Ġar m
g es
ect ion
Ġf ell
Ġfore ign
an i
ĠFr iday
Ġreg ular
in ary
Ġincre ased
Ġus ually
Ġdem on
Ġd ark
Ġadd itional
ro l
ĠO f
Ġprodu ction
! !
und red
Ġintern ational
id ents
ĠF ree
rou p
Ġr ace
Ġm ach
Ġh uge
A ll
le ar
ove mber
Ġto wn
Ġatt ention
ĠO ff
y ond
ĠThe n
f ield
Ġter ror
ra z
ĠB o
Ġmeet ing
ĠP ark
Ġar rest
Ġf ear
Ġa w
ĠV al
or ing
' ,
Ġext reme
ar r
Ġwork ers
A fter
Ġ3 1
n et
am ent
Ġdirect ly
Ġpop ulation
ub e
ĠOct ober
ĠI N
ĠJan uary
5 9
ĠDav id
Ġc ross
ce mber
ĠF irst
Ġmess age
ir it
Ġn ation
Ġp oll
is ions
Ġansw er
n y
is ode
Ġcar ry
ĠRuss ia
Ġhe ar
eng th
ro y
Ġn atural
in ally
Ġdo g
m itted
Ġtr ade
Ġsub st
Ġmult iple
ĠAf ric
Ġf ans
Ġs ort
Ġgl obal
ic ation
ĠW ed
ar a
Ġa chie
Ġlangu age
ve y
Ġt al
Ġnecess ary
Ġdet ails
Ġs en
ĠS und
ĠRe g
ĠR ec
0 6
Ġs il
ress ive
Ġmed ical
un ch
orn ia
Ġu nd
f ort
oc ks
ĠM onday
ues day
c raft
7 7
ur t
Ġ ver
ĠH ill
Ġrece ive
Ġmor ning
es tern
Ġb ank
Ġs at
ir th
ĠH igh
Ġdev ice
ĠTH E
ĠCent er
Ġsaf e
Ġp le
ĠCanad a
Ġsystem s
Ġass ist
Ġsur v
Ġb attle
ĠS oc
vert is
S he
Ġp aper
Ġgrow th
Ġc ast
S c
Ġpl ans
ll ed
Ġpart s
Ġw all
Ġmove ment
Ġpract ice
im ately
Ġdis play
Ġsomet imes
om p
ĠP aul
ĠY es
k ing
5 8
o ly
Ġs on
Ġav oid
ok es
ĠJ ew
Ġto wards
as c
Ġ //
ĠK ore
Ġtalk ing
Ġcor rect
Ġsp ent
ic ks
i able
e ared
Ġter m
Ġwant s
om ing
Ġ ut
Ġdou b
Ġfor ces
Ġp lease
6 9
ĠN ovember
at form
ond on
Ġon es
Ġimmedi ately
ĠRuss ian
ĠM et
Ġde g
Ġparent s
C H
ĠAmeric ans
al y
ĠM od
Ġsh own
Ġcond itions
Ġst uff
Ġre b
ĠY our
Ġinclud es
n own
ĠS am
Ġexper ien
m ission
ĠE ven
augh t
Ġannoun ced
ĠRepublic an
Ġdeter min
Ġdescrib ed
ĠCount y
( )
Ġdo or
Ġchang ed
Ġne igh
ĠH ere
Ġcle an
Ġp an
ĠDe cember
ĠEurope an
ir ing
ap ter
Ġcl ub
ĠT uesday
Ġp aid
ĠN et
Ġattack s
Ġcharact ers
Ġal one
Ġdirect or
d om
Ġ3 5
Ġl oad
Ġr out
ĠCalif ornia
Ġfin ally
Ġr ac
Ġcont r
Ġexact ly
res h
p ri
ĠIs lam
Ġn ature
Ġcare er
Ġlat est
Ġcon vers
ĠS l
p ose
ci ent
ĠIn c
iv ity
8 8
ĠA tt
ĠM or
nes day
Ġwe ight
k en
Ġnot e
Ġteam s
Ġ \
air s
ĠG reen
Ġh undred
on ent
Ġstre ng
Ġcons ist
ic ated
Ġreg ul
Ġl ic
ast ic
Ġt en
urs day
ellig ence
ous ly
ĠU K
B I
Ġcost s
Ġind epend
ĠA P
Ġnorm al
Ġh om
Ġob vious
Ġs we
Ġst ar
Ġread y
ac her
Ġimp lement
g est
Ġs ong
ĠG et
ĠL ab
Ġinterest ing
us ing
Ġg iving
ĠSund ay
Ġet c
Ġm iddle
Ġrem ember
r ight
os ition
ut ions
Ġm ax
4 6
Ġyour self
Ġdem and
Ġtreat ment
Ġd anger
ĠC ons
Ġgu y
ĠBrit ish
Ġphys ical
Ġrel ated
Ġrem ain
Ġcould n
Ġref er
Ġc itiz
b ox
EN T
bo ard
Ġin n
I G
er o
ĠSt reet
osp ital
ren ch
cher s
Ġst ra
O L
ag er
ĠA N
Ġeas ily
I A
en ge
in y
Ġcl os
ock ed
Ġus es
ĠC oun
I m
u ild
? ?
m ore
Ġan g
Ġwr ite
ol ute
5 7
Ġlead er
Ġread ing
< /
Ġaut om
est s
4 3
Ġleg isl
ĠG old
Ġdesign ed
ĠS T
ĠLe g
a res
Ġbe aut
ĠT ex
Ġappear s
Ġstru gg
ĠR om
Ġ 00
Ġcho ice
Ġparticular ly
ĠF rom
op er
ĠL ondon
ann ed
Ġallow s
ob ile
Ġdiffere nce
âĢ ¢
ĠV iew
ĠWed nesday
Ġal though
Ġrel ative
Ġapplic ation
ate ver
Ġare n
Ġmy self
Ġim ag
Ġdis e
Ġsoc iety
Ġfre qu
ĠEng lish
Ġpo or
ĠD ay
Ġwrit ing
Ġse ven
Ġstart ing
Ġb ud
Ġpr int
ĠTr ans
uf act
ĠSt ud
n ew
Ġcr im
Ġg ives
Ġco ol
a e
i ance
ĠGener al
Ġthink ing
Ġsa ve
Ġlim ited
ĠPart y
Ġmean ing
p en
ow ers
ĠJ ack
E M
Ġn ice
ru pt
Ġg as
Ġe ight
Ġfe et
Ġeff ort
Ġ ign
ic it
B l
co in
Ġop in
Ġbr ain
Wh ile
he st
ĠTh ursday
Ġwould n
augh ter
Ġtou ch
le ments
Ġstud ies
Ġcent er
c ont
or ge
Ġcomput er
Ġinvestig ation
P l
or ks
Ġ200 8
Ġincre asing
Ġst ore
Ġcom ments
Ġb al
m en
Ġdo ll
Ġl iber
Ġw ife
Ġlaw s
atur day
it ness
Ġmod ern
ĠS k
Ġadminist ration
Ġopportun ity
Ġs al
Ġpower ful
M y
Ġclaim s
ĠEar th
ord s
Ġt itle
Ġes c
n ame
N ot
om en
Ġbe yond
Ġc amer
Ġse ll
it ute
ear ch
Ġapp l
im ent
4 2
ĠAr t
Ġun f
Ġviol ence
ur g
ĠE ast
Ġcomp ared
Ġopt ions
Ġthrough out
Ġv s
ig r
. [
ac hes
7 8
Ġfil es
F L
E L
ar ian
ĠJ ames
ĠA ir
an ch
Ġdet ail
Ġpie ce
P S
Ġn amed
Ġeduc ation
Ġdri ve
Ġitem s
Ġstud ent
ic ed
: :
ic o
Ġth row
Ġsc ene
Ġcomple x
Ġ200 9
Ġpre c
ĠB re
7 9
Ġcon cept
Ġstat us
am ing
Ġd ied
Ġknow ledge
Ġbegin ning
O D
ru ary
Ġcertain ly
Ġgu ys
Ġsl ight
in n
ound s
Ġf ine
Ġf at
ic ations
Ġper haps
ĠA nt
Ġinc ome
Ġhtt ps
Ġmajor ity
port s
st on
Ġgreat er
Ġfe ed
ent ially
Ġsaf ety
Ġun ique
and om
Ġg one
Ġshow ed
Ġhist or
Ġcoun ter
i us
id a
Ġlead ing
i pe
Ġs end
ĠDon ald
er ve
Ġdef ense
ines e
Ġy es
ĠF ire
ĠMus lim
ra q
Ġcontin ued
os h
Ġprov ides
Ġpr ison
ĠP re
Ġhapp y
Ġeconom y
Ġtr ust
ag s
ĠG ame
Ġweap ons
um an
ĠC le
it ation
Ġanal ysis
ĠT imes
Ġsc ience
- >
Ġfig ure
Ġdis app
ent y
Ġsoft ware
Ġu lt
Ġoffic ers
N ew
I s
Ġrem ains
ĠInd ia
Ġp sych
ri ef
Ġc at
es c
Ġob serv
Ġst age
ĠD ark
Ġent er
ch ange
Ġpass ed
Ġdes pite
ĠO ut
Ġmov ie
r s
Ġv oice
m ine
ĠPl ay
Ġto ward
ĠT er
Ġreg ion
Ġval ues
or ters
Ġm ount
Ġoffic er
ĠO ther
b an
Ġh ous
w ood
ro om
I V
ĠS un
se e
ĠO ver
ro g
9 0
Ġl ay
ĠT ur
a wn
Ġpress ure
ĠS ub
Ġbook s
ed om
ĠS and
A A
ag o
Ġre asons
f ord
Ġactiv ity
U T
N ow
ĠSen ate
ce ll
n ight
Ġcall s
in ter
Ġlet ter
ĠR ob
ĠJ e
Ġcho ose
ĠL aw
G et
B e
Ġro b
Ġtyp es
Ġpl atform
Ġqu arter
R A
ĠT ime
Ġmay be
ĠC r
9 5
p re
Ġmov ing
Ġl if
Ġgo ld
Ġs om
Ġpat ients
Ġtr uth
ĠK e
ur ance
ant ly
m ar
Ġchar ge
ĠG reat
Ġce le
---------------- ----------------
Ġro ck
ro id
an cy
Ġcred it
a ud
B y
ĠE very
Ġmov ed
ing er
rib ution
Ġn ames
Ġstra ight
ĠHe alth
ĠW ell
Ġfe ature
Ġr ule
Ġsc he
in ated
ĠMich ael
ber g
4 1
il ed
b and
Ġcl ick
ĠAng el
on ents
 Ń
ĠI raq
ĠS aturday
Ġa ware
p art
Ġpat tern
O W
ĠL et
Ġgr ad
ign ed
Ġassoci ated
Ġst yle
n o
i ation
a ith
il ies
Ġst ories
ur ation
Ġindividual s
ĠâĢ ¦
m iss
ĠAss oci
ish ing
ab y
Ġsum mer
ĠB en
Ġ3 2
Ġar ch
ut y
ĠTex as
h ol
Ġfull y
Ġm ill
Ġfollow ed
ĠB ill
ĠInd ian
ĠSec ret
ĠB el
ĠFeb ruary
Ġjob s
Ġseem ed
ĠGo vern
i pped
Ġreal ity
Ġl ines
Ġp ark
Ġmeas ure
ĠO ur
I M
Ġbro ther
Ġgrow ing
Ġb an
Ġest im
Ġc ry
ĠS chool
Ġme chan
ĠO F
ĠWind ows
Ġr ates
ĠO h
Ġpos itive
Ġcult ure
ist ics
ic a
Ġh ar
y a
ite ly
i pp
Ġm ap
en cies
ĠWill iam
I I
ak ers
5 6
ĠM art
ĠR em
Ġal tern
it ude
Ġco ach
row d
D on
Ġk ids
Ġj ournal
Ġcor por
Ġf alse
Ġwe b
Ġsle ep
Ġcont ain
Ġst o
Ġb ed
iver se
ĠR ich
ĠCh inese
Ġp un
Ġme ant
k nown
Ġnot ice
Ġfavor ite
a ven
Ġcond ition
Ġpur pose
) )
Ġorgan ization
Ġchall eng
Ġman ufact
Ġsus p
ĠA c
Ġcrit ic
un es
uc lear
Ġm er
vent ion
Ġ8 0
Ġm ist
ĠU s
ĠT or
htt p
ol f
Ġlarg er
Ġadv ant
Ġrese ar
Ġact ions
m l
Ġke pt
Ġa im
, '
c ol
Ġbenef its
if ying
Ġact ual
ĠIntern ational
Ġveh icle
Ġch ief
Ġeff orts
ĠLe ague
ĠM ost
Ġwa it
Ġad ult
Ġover all
Ġspe ech
Ġhigh ly
Ġfem ale
Ġer ror
Ġeffect ive
5 4
Ġenc our
w ell
Ġfail ed
Ġcons erv
Ġprogram s
Ġt rou
Ġa head
5 00
vertis ement
I P
ĠF ound
p ir
Ġ %
Ġcr ime
and er
Ġloc ation
ĠI ran
Ġbehav ior
az ing
Ġr are
Ġem b
Ġca used
Ġsh ip
Ġact ive
Ġcont ribut
Ġg reen
Ġac qu
Ġref lect
ven ue
Ġf irm
Ġb irth
] .
Ġclear ly
Ġem ot
Ġag ency
ri age
Ġmem ory
9 8
S A
ĠSe e
ac ing
C C
Ġbig gest
Ġr ap
Ġbas ic
Ġb and
e at
Ġsus pect
ĠM ac
Ġ9 0
m ark
ist an
Ġsp read
am s
k i
as y
ra v
ĠR ober
Ġdemon str
r ated
Ġabs olute
Ġpl aces
Ġim pl
ibr ary
Ġc ards
Ġdest roy
Ġv irt
ve re
Ġapp eared
y an
p oint
Ġbe g
Ġtem per
s pe
ant ed
ear s
ĠD irect
Ġl ength
Ġbl og
am b
Ġint eg
Ġres ources
ac c
if ul
Ġsp ot
Ġfor ced
Ġthous ands
ĠMin ister
Ġqu al
ĠF rench
at ically
Ġgener ally
Ġdr ink
Ġth us
I L
od es
Ġappro pri
ĠRe ad
Ġwh om
Ġey e
Ġcol lege
Ġ4 5
ire ction
Ġens ure
Ġapp arent
id ers
Ġrelig ious
Ġmin or
ol ic
Ġt ro
ĠWh y
rib ute
m et
Ġprim ary
Ġdevelop ed
Ġpe ace
Ġsk in
st e
av a
Ġbl ue
Ġfam ilies
Ġ ir
Ġapp ly
Ġin form
ĠSm ith
C T
i i
Ġlim it
Ġres ist
........ ........
um n
Ġconf lic
Ġtw e
ud d
ĠT om
Ġl iter
qu e
b on
Ġha ir
Ġevent ually
Ġp us
Ġhelp ed
Ġag g
or ney
ĠApp le
Ġf it
ĠS ur
Ġpre m
Ġs ales
Ġsecond s
Ġstreng th
Ġfeel ing
¿ ½
Ġt our
Ġknow s
o om
Ġex erc
Ġsom ew
ï ¿½
> >
Ġsp okes
Ġide as
Ġreg ist
so ft
ĠD el
ĠP C
Ġpro pos
Ġlaun ch
Ġbott om
T H
ĠP lease
v est
it z
ĠIn ter
Ġsc ript
Ġr at
ar ning
Ġ il
ĠJ er
ĠA re
Ġwh atever
ok en
ci ence
Ġmod e
Ġag ree
Ġs ources
Ġinit ial
Ġrest rict
Ġwond er
us ion
## ##
ĠS il
vil le
Ġb urn
t w
as ion
ĠÂ £
Ġn or
u ing
Ġre ached
Ġs un
Ġc ateg
ig ration
Ġc ook
Ġprom ot
Ġm ale
Ġcl imate
Ġf ix
Ġalleg ed
U R
all ed
Ġim ages
C ont
ot a
Ġschool s
i os
Ġd rop
Ġst ream
ĠM o
Ġprevious ly
al ing
Ġp et
Ġdou ble
Ġ( @
ann el
Ġdef ault
t ies
Ġr ank
ĠD ec
ĠCoun cil
Ġweap on
Ġst ock
Ġanal y
ĠSt r
Ġpict ure
ĠPol ice
f erence
Ġcent ury
Ġcitiz ens
Ġon to
Ġexp and
Ġhe ro
ĠS ol
Ġw ild
Ġupd ate
Ġcustom ers
r ont
d ef
Ġl ik
Ġcrim inal
ĠChrist ian
S P
7 6
Ġle aving
Ġother wise
ĠD ist
Ġbas is
5 2
5 3
ic ip
ĠB er
Ġrecomm end
Ġfl oor
Ġc rowd
ol es
Ġ7 0
Ġcent ral
ĠE v
Ġd ream
Ġdown load
Ġconf ir
ĠTh om
Ġwind ow
Ġhapp ens
Ġun it
Ġt end
Ġs pl
Ġbec omes
Ġfight ing
Ġpred ict
ĠP ress
ĠP ower
Ġhe avy
ak ed
Ġf an
or ter
ate gy
B A
iz es
Ġsp end
H ere
Ġ200 7
Ġad op
ĠH am
Ġfoot ball
ĠP ort
od ay
5 1
amp ions
Ġtrans fer
h t
Ġ3 8
ter m
ac ity
Ġb ur
] ,
tern al
r ig
b ut
Ġthere fore
ĠB ecause
res p
re y
Ġm ission
S ome
Ġnot ed
Ġass um
Ġdise ase
Ġed it
Ġprog ress
r d
ĠB rown
oc al
Ġadd ing
Ġra ised
ĠAn y
Ġt ick
Ġsee ing
ĠPe ople
Ġagre ement
Ġser ver
Ġw at
Ġdeb ate
Ġsupp osed
il ing
Ġlarg est
Ġsuccess ful
ĠP ri
ĠDemocr atic
Ġj ump
ĠSyri a
Ġown ers
Ġoff ers
Ġshoot ing
Ġeff ic
se y
Ġha ven
ver se
te red
ĠL ight
im al
ĠB ig
Ġdef end
Ġbe at
Ġrecord s
% )
Ġsc en
Ġemploy ees
Ġdev ices
he m
Ġcom mer
ĠM ex
Ġbenef it
ĠPro f
Ġil leg
Ġsur face
ĠAl so
Ġh arm
ing ly
w ide
ĠA lex
Ġsh ut
ĠC ur
Ġl ose
p m
Ġchall enge
se mb
Ġst ation
Ġint elligence
Ġacc ur
ĠFl or
Ġrequ ires
ĠM al
b um
Ġh ospital
Ġsp irit
Ġoff ered
Ġprodu ce
ĠComm un
Ġcreat ing
Ġcr is
s pect
Ġend ed
Ġd aily
Ġvot ers
land s
i as
i h
on a
Ġsm art
ĠOff ice
ĠL ord
ri al
ĠIntern et
Ġcirc um
Ġextreme ly
' .
Ġopin ion
ĠM il
Ġg ain
B S
ĠF in
y p
Ġuse ful
Ġbud get
Ġcom fort
is f
Ġback ground
el ine
Ġep isode
Ġen emy
Ġtri al
Ġestab lish
d ate
ĠC ap
Ġcontin ues
Ġshow ing
ĠUn ion
w ith
Ġpost ed
ĠSy stem
Ġe at
ri an
Ġr ise
ĠGerman y
il s
Ġsign ed
Ġv ill
Ġgr and
m or
ĠEng land
Ġproject s
um ber
Ġconf erence
z a
Ġrespons ible
ĠAr ab
Ġlearn ed
âĢĶ âĢĶ
i pping
ĠGe orge
O C
Ġreturn ed
ĠAustral ia
Ġb rief
Q u
Ġbr and
ill ing
ab led
Ġhig hest
Ġtr ain
ĠComm ission
wh ile
Ġn om
cept ion
Ġm ut
ĠBl ue
Ġinc ident
v ant
8 6
ĠI D
Ġn uclear
7 4
ĠL ike
ĠR E
ĠM icro
l i
m ail
Ġcharg es
8 9
Ġad just
ad o
Ġear th
N A
Ġpr ices
P A
Ġd raft
Ġrun s
Ġcandid ate
ens es
Ġmanag ement
ĠPh il
ĠM iss
Ġte ach
g ram
Ġunderstand ing
a it
ic ago
A dd
ĠE p
sec ut
Ġsepar ate
Ġinst ance
Ġe th
Ġun less
**** ****
ĠF ore
in ate
Ġoper ations
S p
Ġf aith
g ar
ĠCh urch
ron ic
Ġconf ig
os ure
Ġactiv ities
Ġtrad itional
Ġ3 6
Ġd irection
Ġmach ine
Ġsur round
Ġp ush
un ction
ĠE U
Ġeas ier
Ġarg ument
G B
Ġm icro
Ġsp ending
iz ations
Ġthe ory
ad ow
Ġcall ing
ĠL ast
Ġd er
Ġinflu ence
Ġcomm it
Ġph oto
Ġun c
ist ry
g n
ast e
ack s
Ġdis p
ad y
d o
ĠG ood
Ġ `
Ġw ish
Ġreve aled
Âł Âł
l ig
Ġen force
ĠComm ittee
Ġche m
Ġmil es
Ġinterest ed
Ġsol ution
ic y
in ct
Ġ- >
ĠD et
Ġrem oved
Ġcomp ar
e ah
Ġpl ant
ĠS ince
Ġachie ve
Ġadvant age
Ġslight ly
b ing
Ġpl aced
u nder
201 5
ĠM ad
Ġt im
os es
Ġc ru
ĠR ock
Ġmost ly
Ġneg ative
Ġset ting
Ġprodu ced
Ġm ur
Ġconnect ion
ĠM er
Ġdri ver
Ġexecut ive
Ġass ault
Ġb orn
ĠV er
t ained
Ġstruct ure
Ġredu ce
Ġdec ades
Ġd ed
u ke
ĠM any
idd en
Ġle ague
S e
Ġjo in
Ġdis co
Ġd ie
c ks
act ions
Ġass ess
ag n
Ġgo als
our s
I R
Ġsen ior
ill er
m od
ip ment
oc ol
u y
ĠQ ue
Ġpart ies
ir gin
Ġle arning
it able
Ġstre et
Ġcamer a
A pp
Ġsk ills
b re
c ious
Ġcele br
ĠFr anc
Ġexist ing
Ġwill ing
l or
Ġ id
ĠSp ace
Ġcrit ical
ĠL a
ortun ately
Ġser ve
Ġc old
Ġspec ies
T S
Ġanim als
ĠB ay
Ġold er
ĠU nder
est ic
ĠT re
Ġte acher
Ġpre fer
v is
Ġth read
ĠM att
Ġmanag er
ãĥ »
Ġprofess ional
ĠV ol
Ġnot es
The se
ul a
Ġf resh
ent ed
u zz
ed y
clus ion
ĠR el
Ġdoub t
E O
Ġopen ed
ĠB it
Ad vertisement
Ġgu ess
ĠU N
Ġse qu
Ġexpl ain
ott en
Ġatt ract
ak s
Ġstr ing
Ġcont ext
oss ible
ĠRepublic ans
Ġsol id
Ġc ities
Ġask ing
Ġr andom
u ps
ur ies
ar ant
dd en
g l
ĠFlor ida
Ġdep end
ĠSc ott
Ġ3 3
Ġi T
ic on
Ġmention ed
Ġ2 000
Ġclaim ed
Ġdefin itely
ul f
Ġc ore
Ġopen ing
ĠCon st
wh ich
ĠT ra
A G
7 2
Ġbelie ved
ad a
Ġ4 8
ĠSec urity
yr ight
ĠP et
ĠL ou
Ġhold ing
======== ========
Ġ ice
Ġb row
Ġauthor ities
h ost
w ord
Ġsc ore
ĠD iv
Ġcell s
Ġtrans l
Ġneigh bor
Ġrem ove
u ct
Ġdist rict
ĠA ccording
Ġwor se
Ġconcern s
Ġpresident ial
Ġpolic ies
ĠH all
7 3
Ġh us
A Y
Ġ200 6
ĠJ ud
Ġindepend ent
ĠJust ice
ili ar
pr int
igh ter
Ġprotect ion
z en
Ġsu dden
h ouse
ĠJ es
P R
ĠIn f
Ġb ul
Ġ _
ĠServ ice
ĠP R
Ġstr ategy
ff ect
Ġgirl s
Ġmiss ing
oy al
ĠTe am
ul ated
Ġd at
Ġpolit ics
ab or
A ccording
Ġspe ll
Ġg raph
ort hern
T C
A b
Ġlab or
is her
Ġk ick
ĠiT unes
Ġstep s
pos es
Ġsmall er
E n
ber t
Ġro ll
Ġresear chers
Ġcl osed
Ġtrans port
Ġlaw y
________ ________
ĠCh icago
Ġas pect
Ġn one
Ġmar riage
9 6
Ġe lements
ĠF re
ĠS al
Ġd ram
F C
t op
e qu
Ġhe aring
Ġsupport ed
Ġtest ing
co hol
Ġmass ive
Ġst ick
Ġgu ard
is co
ph one
F rom
How ever
Ġb order
Ġcop y
ograph y
l ist
7 1
Ġown er
cl ass
ru it
r ate
ĠO nce
Ġdig ital
Ġt ask
ER S
Ġinc red
t es
+ +
ĠFr ance
Ġb reat
ow l
Ġiss ued
ĠW estern
Ġdet ect
Ġpart ners
Ġsh ared
ĠC all
Ġcan cer
ac he
rib e
Ġexpl ained
Ġhe at
{ "
Ġinvest ment
ĠB ook
Ġw ood
Ġtool s
ĠAl though
Ġbelie f
Ġcris is
Ġg e
ĠM P
Ġoper ation
ty pe
~ ~
g a
Ġcont ains
ant a
Ġexp ress
ĠG roup
ĠJ ournal
k a
Ġam b
ĠUS A
Ġfind ing
Ġfund ing
h ow
Ġestab lished
ide os
Ġdeg ree
Ġdanger ous
ang ing
Ġfre edom
pp ort
out hern
Ġch urch
Ġc atch
ĠTw o
Ġpres ence
ĠGu ard
U p
Ġauthor ity
ĠPro ject
Ġbut ton
Ġcon sequ
Ġval id
Ġwe ak
Ġstart s
Ġref erence
ĠM em
" )
U N
or age
ĠO pen
Ġcol lection
y m
g ency
Ġbeaut iful
ro s
Ġtell s
Ġwa iting
n el
Ġprov iding
ĠDemocr ats
Ġd aughter
Ġm aster
Ġpur poses
ĠJapan ese
Ġequ al
Ġturn s
Ġdoc uments
Ġwatch ing
R es
Ġr an
201 4
Ġre ject
ĠKore a
Ġvictim s
Le vel
ere nces
Ġw itness
Ġ3 4
Ġre form
com ing
Ġocc up
Ġc aught
Ġtra ffic
ad ing
Ġmod els
ar io
Ġserv ed
Ġb atter
u ate
ĠSecret ary
Ġagre ed
Ġtr uly
yn am
ĠR et
Ġun its
ĠRes earch
h and
az ine
ĠM ike
Ġvar iety
ot al
Ġam azing
Ġconfir med
Ġentire ly
Ġpurch ase
Ġe lement
Ġc ash
Ġdeter mine
D e
Ġc ars
ĠW all
â ĸ
Ġview s
Ġdrug s
Ġdep artment
ĠSt ep
u it
Ġ3 9
as ure
ĠCl ass
Ġc overed
ĠB ank
Ġme re
u ana
Ġmult i
Ġm ix
Ġun like
lev ision
Ġsto pped
Ġs em
ĠG al
ul es
Ġwe l
ĠJohn son
l a
Ġsk ill
Ġbec oming
ri e
Ġappropri ate
f e
ell ow
ĠPro t
ul ate
oc ation
Ġweek end
od ies
Ġsit es
Ġanim al
ĠT im
Ġsc ale
Ġcharg ed
Ġinst ruct
ill a
Ġmethod s
Ġc ert
Ġjud ge
ĠH el
Ġdoll ars
Ġstand ing
ĠS qu
Ġdeb t
l iam
Ġdri ving
ĠS um
ĠEd ition
Ġal bum
and on
I F
ĠU k
6 3
ad er
Ġcommer cial
es h
ĠGovern ment
Ġdisc overed
Ġout put
ĠHill ary
ĠCar ol
Ġ200 5
Ġab use
anc ing
Ġsw itch
Ġann ual
T w
Ġst ated
ag ement
in ner
Ġdem ocr
Ġres idents
Ġallow ing
Ġfact ors
od d
Ġf uck
em ies
Ġoccur red
ot i
Ġn orth
ĠP ublic
Ġinj ury
Ġins urance
C L
oll y
ã Ģ
Ġrepe ated
Ġar ms
ang ed
Ġconst ruction
Ġf le
P U
ic ians
Ġfor ms
ĠMc C
ant ic
Ġm ental
p ire
Ġequ ipment
Ġf ant
Ġdiscuss ion
Ġregard ing
k in
ar p
Ġch air
og ue
Ġpro ceed
ĠI d
O ur
Ġmur der
M an
Ġ4 9
as p
Ġsupp ly
Ġin put
Ġwe alth
liam ent
Ġpro ced
or ial
ĠSt at
ĠN FL
hen s
ĠInst itute
Ġput ting
ourn ament
et ic
Ġloc ated
Ġk id
er ia
r un
Ġpr inc
Ġ !
go ing
ĠB et
Ġcl ot
Ġtell ing
Ġprop osed
i ot
or ry
Ġfund s
g ment
ĠL ife
Ġb aby
ĠB ack
Ġsp oke
Im age
Ġear n
ĠA T
g u
Ġex change
ĠL in
ov ing
Ġp air
M ore
az on
Ġarrest ed
Ġkill ing
c an
ĠC ard
y d
Ġident ified
Ġm obile
Ġthan ks
ony m
ĠF orm
Ġhundred s
ĠCh ris
ĠC at
Ġtre nd
h at
ĠA v
om an
Ġelect ric
ĠW il
S E
O f
Ġrest aur
ot ed
Ġtr ig
Ġn ine
Ġb omb
Wh y
 ¯
Ġco verage
Ġapp eal
ĠRober t
ĠS up
Ġfin ished
Ġfl ow
Ġdel iver
Ġcal cul
Ġphot os
Ġph il
Ġpie ces
Ġapp re
k es
Ġr ough
D o
Ġpart ner
Ġconcern ed
Ġ3 7
ĠG en
C ol
ct ors
Ġ= >
st ate
Ġsuggest ed
ĠFor ce
C E
Ġher self
ĠPl an
w orks
o oth
ren cy
Ġcor ner
Ġhus band
Ġintern et
ĠA ut
em s
os en
ĠAt l
g en
Ġbal ance
6 2
Ġsound s
te xt
Ġar r
ov es
Ġmill ions
Ġrad io
Ġsat isf
ĠD am
M r
G o
S pe
Ġcomb at
r ant
ĠG ree
Ġf uel
Ġdist ance
Ġtest s
Ġdec re
ĠE r
Ġman aged
D S
Ġt it
Ġmeas ures
ĠL iber
Ġatt end
as hed
ĠJ ose
ĠN ight
d it
ĠN ov
ĠE nd
out s
Ġgener ation
Ġadv oc
y th
Ġconvers ation
ĠS ky
act ive
ce l
ri er
ĠFr ank
Ġg ender
Ġcon cent
Ġcar ried
and a
ĠV irgin
Ġarri ved
ic ide
ad ed
Ġfail ure
Ġmin imum
le ts
Ġwor st
Ġkeep ing
Ġint ended
Ġilleg al
Ġsub sc
Ġdetermin ed
Ġtri p
Y es
Ġra ise
Ġ ~
Ġfeel s
Ġpack age
ĠJ o
h i
201 6
re al
Ġf ra
Ġsy mb
M e
uck y
p ret
ĠK h
ĠEd it
ĠWe b
em ic
ĠCol or
Ġjust ice
I nt
Ġfar m
ck now
" >
el ess
Ġredu ced
Ġ5 00
x x
ĠR ad
ĠW ood
Ġcl in
Ġhy p
il er
ur a
k ins
8 5
6 1
ĠThe ir
ĠM ary
Ġs an
Ġno vel
ĠWh o
Ġcap acity
Ġimp ossible
Ġpl ays
Ġmin ister
ij uana
ic ate
ĠS et
Ġf ram
Ġ ing
Ġcommun ities
ĠF BI
it a
Ġb on
Ġstr ateg
Ġinterest s
l ock
g ers
m as
ĠAN D
Ġconflic t
Ġrequire ments
Ġs ac
Ġoper ating
in i
rel ated
Ġcomm itted
Ġrelative ly
Ġs outh
¯ ¯
Ġaff ord
Ġident ity
Ġdec isions
Ġacc used
pl ace
Ġvict ory
o ch
i at
N ame
C om
t ion
ed s
Ġsee k
Ġt ight
ĠIm ages
Ġinit i
Ġhum ans
Ġfam iliar
Ġaud ience
Ġintern al
vent ure
Ġs ides
ĠT O
Ġd im
Ġcon clud
Ġapp oint
Ġenforce ment
ĠJ im
ĠAssoci ation
Ġcircum st
ĠCanad ian
Ġjo ined
Ġdiffere nces
ĠL os
Ġprot est
Ġtw ice
w in
Ġgl ass
ars h
ĠAr my
Ġexp ression
Ġdec ide
Ġplan ning
an ia
Ġhand le
ĠMicro soft
ĠN or
Ġmax imum
ĠRe v
Ġse a
Ġev al
Ġhel ps
re f
Ġb ound
Ġm outh
Ġstand ards
Ġcl im
ĠC amp
ĠF ox
cl es
Ġar my
ĠTe chn
ack ing
x y
S S
Ġ4 2
Ġbu g
ĠUk rain
ĠM ax
ĠJ ones
ĠSh ow
l o
Ġplan et
Ġ7 5
Ġwin ning
Ġf aster
Ġspe ct
Ġbro ken
T R
Ġdef ined
Ġhealth y
Ġcompet ition
htt ps
ĠIs land
ĠF e
Ġannoun ce
ĠC up
ĠInst ead
Ġcl ient
Ġposs ibly
se ction
ock et
l ook
Ġfin ish
Ġcre w
Ġres erv
Ġed itor
Ġh ate
Ġs ale
Ġcontro vers
Ġp ages
w ing
Ġnum er
Ġopp osition
Ġ200 4
Ġref uge
Ġfl ight
Ġap art
ĠL at
A meric
ĠAfric a
Ġapplic ations
ĠPal est
ĠB ur
Ġg ar
ĠSoc ial
Ġup gr
Ġsh ape
Ġspe aking
ans ion
a o
ĠS n
Ġwor ry
ĠBrit ain
P lease
rou d
Ġh un
Ġintrodu ced
Ġd iet
I nd
ĠSec ond
Ġfun ctions
ut s
ĠE ach
ĠJe ff
Ġst ress
Ġaccount s
Ġgu arant
ĠAn n
ed ia
Ġhon est
Ġt ree
ĠAfric an
ĠB ush
} ,
Ġs ch
ĠOn ly
Ġf if
ig an
Ġexerc ise
ĠEx p
Ġscient ists
Ġlegisl ation
ĠW ork
ĠS pr
à Ĥ
ĠH uman
Ġ è
Ġsur vey
Ġr ich
ri p
Ġmain tain
Ġfl o
Ġleaders hip
st ream
ĠIslam ic
Ġ 01
ĠCol lege
Ġmag ic
ĠPr ime
Ġfig ures
201 7
ind er
x ual
ĠDe ad
Ġabsolute ly
Ġfour th
Ġpresent ed
resp ond
rib le
Ġal cohol
at o
ĠD E
por ary
Ġgr ab
Ġvar i
Ġqu ant
ĠPh oto
Ġpl us
r ick
ar ks
Ġaltern ative
Ġp il
Ġappro x
th at
Ġobject s
ĠR o
ĠAnd roid
Ġsignificant ly
ĠR oad
k ay
R ead
av or
Ġa cknow
ĠH D
ĠS ing
O r
ĠM ont
Ġun s
pro f
Ġneg oti
ĠAr ch
ik i
Ġte levision
ĠJew ish
Ġcomm ittee
Ġmot or
Ġappear ance
Ġs itting
Ġstri ke
ĠD own
com p
ĠH ist
Ġf old
ac ement
ĠLou is
Ġbel ong
ĠâĢ ¢
Ġm ort
Ġprep ared
Ġ6 4
ĠM aster
Ġind eed
ĠD en
Ġre nt
T A
our ney
ar c
S u
9 7
Ġadv ice
Ġchang ing
Ġlist ed
Ġlaun ched
is ation
ĠP eter
is hes
Ġl ived
ĠM el
ĠSup reme
ĠF ederal
Ġ) ;
ruct ure
Ġset s
Ġphil os
u ous
ĠÂ ł
Ġappl ied
ĠN OT
Ġhous ing
ĠM ount
Ġo dd
Ġsu st
D A
ffic ient
Ġ ?
ol ved
Ġp owers
Ġth r
Ġrem aining
ĠW ater
L C
Ġca uses
ãģ ®
Ġman ner
ad s
Ġsuggest s
Ġend s
stand ing
f ig
ĠD un
id th
Ġg ay
Ġter min
ĠAngel es
M S
Ġscient ific
Ġco al
ap ers
b ar
ĠThom as
Ġsy m
ĠR un
th is
P C
igr ants
Ġmin ute
ĠDist rict
cell ent
Ġle aves
Ġcomple ted
am in
Ġfoc used
Ġmon itor
Ġveh icles
M A
ĠM ass
ĠGr and
Ġaffect ed
itution al
Ġconst ruct
Ġfollow s
Ġt on
re ens
Ġh omes
ĠE xt
ĠLe vel
r ast
ĠI r
Ġel im
Ġlarge ly
ĠJ oe
Ġvot es
all s
Ġbusiness es
ĠFound ation
ĠCent ral
Ġy ards
Ġmaterial s
ul ner
Ġgu ide
Ġclos er
um s
Ġsp orts
ed er
J ust
Ġtax es
8 4
ĠO ld
Ġdec ade
ol a
Ġv ir
Ġdro pped
Ġdel ay
it ect
Ġsec ure
ste in
le vel
Ġtre ated
Ġfil ed
ain e
Ġv an
Ġm ir
Ġcol umn
ict ed
e per
Ġro t
Ġcons ult
Ġent ry
Ġmar ijuana
ĠD ou
Ġapparent ly
ok ing
clus ive
Ġincre ases
an o
Ġspecific ally
Ġte le
ens ions
Ġrelig ion
ab ilities
Ġfr ame
ĠN ote
ĠLe e
Ġhelp ing
Ġed ge
ost on
Ġorgan izations
à ĥ
ĠB oth
hip s
Ġbig ger
Ġbo ost
ĠSt and
Ġro w
ul s
ab ase
Ġr id
L et
are n
ra ve
Ġst ret
P D
Ġv ision
Ġwe aring
Ġappre ci
Ġa ward
ĠU se
Ġfact or
w ar
ul ations
) (
Ġg od
Ġter rit
Ġpar am
ast s
8 7
Ġen emies
ĠG ames
F F
Ġacc ident
W ell
ĠMart in
T ER
Ġat h
ĠHe ll
Ġfor g
Ġve ter
ĠMed ic
f ree
Ġst ars
Ġexp ensive
Ġac ad
ra wn
ĠW he
Ġl ock
Ġform at
Ġsold iers
s m
Ġag ent
Ġrespons ibility
or a
ĠS cience
Ġrap id
Ġt ough
ĠJes us
Ġbelie ves
M L
Ġwe ar
le te
Ãĥ ÃĤ
ĠD ri
Ġcomm ission
ĠB ob
O h
ap ed
Ġwar m
ÃĥÃĤ ÃĥÃĤ
Ġ200 3
ort ion
Ġhas n
ust er
Ġun ivers
ĠI ll
Ġk ing
olog ies
9 4
ĠT em
ĠM os
Ġpat ient
ĠMex ico
ce an
ĠDe ath
ĠSand ers
y ou
ĠC ast
ĠComp any
pt y
Ġhappen ing
F P
ĠB attle
Ġb ought
A m
M od
U s
ut ers
ĠC re
ĠTh ose
Ġ4 4
is er
Ġs oul
ĠT op
ĠHar ry
ĠA w
Ġse at
ff ee
Ġrev olution
Ġ( "
ĠD uring
et te
Ġr ing
Ġoff ensive
Ġreturn s
Ġv ideos
Ġdis cl
Ġfam ous
en ced
ĠS ign
ĠR iver
Ġ3 00
P M
ĠB us
ĠC H
Ġcandid ates
ard en
Ġpercent age
Ġvis ual
Ġthan k
Ġtrou ble
ner gy
Ġ200 1
Ġpro ve
ash ion
Ġen h
ĠL ong
U M
Ġconnect ed
Ġposs ibility
O ver
Ġexper t
Ġl ibrary
art s
ĠDirect or
Ġfell ow
9 2
ir ty
Ġd ry
Ġsign s
ĠL ove
Ġqu iet
f oot
Ġp ure
ĠH un
Ġf illed
ph as
ĠE lect
end ment
ĠEx pl
Ġun able
n s
m o
Ġv ast
ob e
Ġident ify
app ing
ĠCarol ina
g ress
Ġpro te
Ġf ish
Ġcircumst ances
raz y
ĠPh ot
Ġb odies
ĠM ur
Ġdevelop ing
ĠA R
Ġexperien ced
Ġsubst ant
ĠBo ard
es ome
Ġdom estic
Ġcomb ined
ĠP ut
Ġchem ical
ĠCh ild
Ġpo ol
ĠC y
Ġe gg
c ons
st ers
Ġh urt
Ġmark ets
Ġconserv ative
Ġsupp orters
Ġag encies
id el
O b
ur b
Ġ4 3
ĠDef ense
y e
ĠA p
du le
Ġtemper ature
Ġconduct ed
ĠCh ief
Ġpull ed
Ġf ol
L ast
ont o
os is
V ER
D es
ĠP an
F irst
Ġadv ance
Ġlic ense
r ors
ĠJ on
Ġimag ine
Ġhe ll
Ġf ixed
Ġinc or
os ite
ĠL og
ick en
] :
Ġsurpr ise
h ab
Ġc raft
ol t
ĠJ ul
Ġd ial
Ġrele vant
Ġent ered
Ġlead s
ĠA D
ĠCle an
Ġpict ures
ess or
Ġal t
Ġpay ing
P er
ĠMark et
Ġupd ates
am ily
ĠT ype
ĠH ome
Ġ5 5
semb ly
rom e
8 3
Ġgreat est
Ġhe ight
Ġhe av
ain ts
Ġlist en
as er
ĠS H
Ġcap able
ac le
Ġpers pect
in ating
Ġoff ering
ry pt
ĠDe velop
ab in
r c
Ġbr ight
al ty
ar row
Ġsupp l
ind ing
ack ed
gy pt
ĠAn other
p g
ĠVirgin ia
ĠL u
Ġpl anned
Ġp it
Ġswe et
T ype
ĠD i
Ġtyp ically
ĠFranc isco
Ġpro spect
ĠD an
Ġte en
re es
Ġsc hed
Ġh ol
Ġsc r
Ġlot s
l ife
Ġnews p
Ġfor get
ĠN one
ĠM iddle
ĠR yan
ed d
Ġse vere
Ġsu it
ll er
9 3
Ġcor respond
Ġexpl os
u ations
Ġfl ag
g ame
r id
Ġpr in
ĠD ata
Ġde ploy
ĠEn ter
su it
gh an
ĠM en
Ġthough ts
Ġmat ters
Ġad apt
ĠA ri
Ġf ill
Ġfor th
Ġs am
Ġ4 1
Ġpay ment
ĠH or
Ġsp ring
du c
Ġl osing
Ġbring ing
F O
al a
Ġdist ribution
he red
b our
ĠIsrael i
om a
Ġcomb ination
Ġpl enty
V E
C an
ĠH aw
Ġper man
ĠSpe cial
Ġto w
Ġsee king
Ġexam ples
Ġclass es
c r
Ġbe er
Ġmov es
ĠI P
ĠK n
Ġpan el
E ven
Ġproper ly
Ġr is
Ġpl ug
Ġestim ated
E very
Ġdef ensive
ag raph
Ġpre gn
Ġinst it
ĠV ict
Ġvol ume
Ġpos itions
Ġl inks
ĠPro gram
ĠWe ek
ag ues
Ġtrans form
k er
ĠC EO
Ġc as
Ġopp onent
Ġtwe et
ĠC ode
Ġsh op
Ġf ly
Ġtal ks
Ġb ag
Ph one
Ġa id
Ġpl ants
Ġ6 5
Ġatt orney
ar ters
qu est
ĠMag ic
Ġbeg ins
Ġmy ster
Ġenvironment al
Ġst orage
N N
Ġm arg
Ġs ke
Ġmet al
ell y
Ġord ered
Ġrem ained
Ġl oved
Ġprom pt
Ġupd ated
Ġexper ts
Ġwalk ing
Ġan cient
Ġperform ed
AT E
Ġne ither
i ency
Ġmanufact ure
ĠP ak
Ġselect ed
Ġm ine
Ġult imately
Ġexpl an
Ġlab el
ĠServ ices
ribut ed
Tr ump
Ġsy n
ĠU lt
S C
Ġme at
Ġg iant
ĠW ars
ĠO N
Ġad m
Ġinter pret
Ġeven ing
Ġev il
ĠB oston
ĠW ild
Ġ Ã
ĠBit coin
ĠAm azon
D r
ĠIn formation
Ġobvious ly
Ġadv anced
Ph oto
ol ar
Ġwe ather
Ġsymb ol
Ġso le
Ġpot entially
ost er
Ġorig inally
m un
3 00
az e
ess ions
Ġde ck
Ġst ood
Ġyou th
ĠB ern
R ep
ĠT est
Ġbas ically
ot ic
Ġinvol ve
ol it
ly n
S ee
Ġair craft
Ġconf irm
E W
Ġmess ages
ĠRich ard
Ġk it
Ġpro hib
Ġv ulner
is ters
Ġexist ence
Ġturn ing
ĠS P
Ġdes ire
Ġfl at
Ġm ent
se ason
ang es
Ġneighbor hood
ĠL ake
AT ION
Ġpoint ed
b ur
Ġinn ov
uc ks
U L
Ġprofess or
Ġexp ressed
A B
ic ious
Ġ200 2
ĠDe v
Ġs ession
Ġb are
s en
Ġdis s
ĠC ath
ĠP ass
ĠP oint
Ġdo ctor
or row
ail ed
ĠR ub
ĠD C
ĠChar l
p erson
Ġwrit er
igh ters
ure au
Ġob lig
Ġrecord ed
Ġbro ke
Ġord ers
il ty
Ġmot ion
in ity
l aw
ad ium
Ġimm igration
Ġcontr ast
Ġb att
Ġex cellent
Ġtechn ical
am i
Ġt un
Ġcl oud
ĠY ear
ge on
Ġcre ation
Ġstr ange
Ġa uth
Ġfor t
b orn
Ġext ent
ĠT oday
ĠCl ub
Ġr ain
Ġs ample
Ġaccept ed
Ġt act
Ġf ired
ĠS on
Ġstand s
Ġb oot
Ġ4 7
Ġstat ements
Ġvers ions
Ġse lling
ound ed
Ġ199 0
Ġwere n
ĠW atch
Ġexper iment
P ost
Ġret ail
ul ed
In st
un te
ãĥ ¼
Ġdep art
Ġb ond
i very
om pl
Ġre action
ĠSyri an
ĠP ac
app ed
ani el
D P
Ġres olution
Ġre act
Ġappro ved
on om
m ond
ĠO ffic
-- -
Ġrepl ace
Ġt ack
Ġsp ort
Ġch ain
Ġemer gency
r ad
ĠPalest in
Ġ4 6
Ġautom atically
Ġrout e
Ġp al
Ġb anks
ĠPar is
ĠMed ia
ro ad
ic ing
i xt
ist ed
Ġg rew
Ġco ord
ĠW here
om in
Ġsub s
� �
ĠÂ ±
Ġcorpor ate
Ġse lection
n oon
ĠRep ort
c s
clud ing
ord ers
anc he
ĠIt s
Ġslow ly
ĠE gypt
ĠA cc
Ġcol le
iqu es
E X
Ġattempt s
ur l
ĠC ross
Ġfind ings
ĠS C
ĠO R
Ġind ex
ens ity
ĠW ay
ĠL and
Ġsh ock
d is
Ġd ynam
Ġc art
m osp
S ince
i est
ĠB oy
Ġst orm
ĠCont in
201 3
he w
il it
Ġess ential
iqu id
O ther
ive red
Ġreason able
A ct
Ġsub sequ
ĠP ack
ĠF ort
Ġconsider ing
Ġun iversity
l og
Ġmar ried
Ġill ust
ĠTr ue
£ ı
Ġnumer ous
rast ructure
Ġserious ly
Ġrefer red
u a
Ġconsist ent
on na
ĠRe al
ru ption
ci ples
Ġfact s
9 1
ot es
er g
The n
Ġacc ompl
N ote
Ġre venue
Ġpass ing
Ġm al
e en
ĠY et
Ġg ather
ter day
ew ork
ĠA uthor
P e
Ġopt im
Ġr ub
Ġè £ı
Ġun known
st one
Ġun ion
ol ve
Ġopportun ities
Ġbrow ser
ĠW al
ĠC ost
Ġreport ing
st s
p et
Ġs and
Ġsudden ly
Ġsurpr ising
ĠV R
Ġsomew hat
ĠB as
ult ure
iz z
ĠC D
Ġchalleng es
Ġsett ings
Ġexperien ces
ĠF ull
Ġcan n
Ġrece iving
ES T
Ġj oint
Ġcult ural
Ġa st
8 2
as tern
ce ived
ĠC ru
Ġb ull
p ired
am m
Ġfac ing
p ower
Ġb oss
ĠH ol
Ġinst r
Ġincreasing ly
Ġsh ift
Ġstre ets
ĠWilliam s
ab b
Ġl ie
Ġl augh
ĠC a
P L
Ġadult s
Ġcustom er
Ġob tained
Ġsupport ing
ht ml
f ire
Ġdetail ed
Ġpick ed
ĠR ight
ld er
E E
st ood
ĠK im
Ġw ire
Ġs ight
Ġdevelop ers
Ġpers ons
Ġs ad
Ġc up
Ġwar ning
Ġboy s
l ong
Ġb ird
f o
Ġw al
Ġobserv ed
Ġz one
iven ess
Ġch annel
c ript
Ġref used
ĠAg ain
Ġsu c
Ġspokes man
ĠRe f
r ite
ou ston
ãĥ ³
ĠS her
Ġact s
ĠN ame
Ġstrugg le
ar ry
omet imes
Ġdisc rim
H T
Ġcateg ory
Ġreal ize
Ġemploy ee
ĠAf ghan
en ger
Ġgun s
ĠSte ve
ĠM ot
ĠO l
ok ed
Ġth ick
Ġfair ly
ill y
Ġsur ve
ĠM at
we ight
â Ķ
Ġtro ops
Ġag ents
Ġbatter y
Ġmot iv
à ¡
S ec
d en
o very
L S
Ġfl u
Ġconf ident
ĠO per
Ġem pty
Ġp hen
Ġse ctor
Ġexc ited
Ġrem ote
ap h
o en
Ġdestroy ed
Ġmor al
ĠH P
ĠR on
Ġd ress
ĠB at
Ġl it
ĠM S
Ġa f
H L
r um
is ms
Ġshould n
Ġsym pt
ĠTor onto
het ic
Ġcar bon
Ġinstall ed
Ġviol ent
Ġsol ar
j a
Ġpract ices
Ġr ide
ĠP enn
Ġimpro ved
Ġaud io
Ġbehav i
ĠP S
Ġe ating
D ata
ĠRe view
p ass
cl aim
u ated
ang ers
c hen
Ġproper ties
Ġany where
An other
Ġbl ow
ĠJack son
Ġp roud
Ġplan e
l ines
Ġsqu are
Ġpro of
ans as
Ġtalk ed
m akers
Ġs ister
Ġhold s
Ġres ident
Ġ= =
Ġresist ance
Ġspl it
Ġpro secut
Ġconf idence
res ents
Ġcut s
Ġexcept ion
Ġz ero
Get ty
Ġcop yright
Ġtot ally
orm al
ific ations
ĠAustral ian
Ġs ick
Ġ1 50
Ġhouse hold
Ġfe es
Ġdri vers
og en
ĠN Y
Ġnecess arily
Ġregul ations
ear ing
s l
Ġperspect ive
c are
ic ial
H is
Ġesc ape
Ġsurpr ised
ĠV an
ur rent
Ġv ac
8 1
ĠTh us
Ġem phas
ĠCh ampions
ĠI ce
Ġn arr
Ġhead s
Ġca using
b el
f ortunately
ĠM a
Ġtarg ets
ci pl
Ġafter noon
Ġadd s
ĠMay be
ĠF our
ess ed
ple te
Ġus ual
ch o
ing u
Ġwith d
ĠE nergy
ĠE conom
O O
Ġart icles
Ġinj ured
Ġman age
Ġexpl ains
Ġdi agn
R ec
at ures
Ġlink ed
Ġdiscuss ed
Ġexpl o
Ġocc asion
ath an
Ġopp osite
Ġfac es
Ġden ied
ĠK night
Ġn ut
Ġapprox imately
Ġdisapp oint
onym ous
ĠB est
ĠL o
ĠH y
ĠA ff
Ġvot ing
an while
ĠII I
Ġinstit utions
ag ram
ĠD aily
Ġdr ag
Ġnear by
Ġgu ilty
Ġcon ver
P re
s hip
Ġre ward
Ġphilos oph
ĠS S
u gh
Ġapp s
f riend
Ġu pper
Ġad vert
Ġs now
Ġfr ust
Ġour selves
F r
ĠD ie
amp ion
Ġdis miss
Ġc ere
Ġsign al
f rom
Ġ ).
Ġ5 2
Ġcr imes
it ors
est ival
use um
Ġcoun cil
ĠS aud
M ay
ĠG un
ic ian
et her
Ġsu fficient
ĠH en
so le
Ġhistor ical
ĠF ar
ĠT urn
Ġp in
Ġsuc ceed
m at
ly mp
Ġtrad ition
ĠO k
Ġc ro
Ġdesc ription
al le
Ġsk y
T e
Ġwide ly
Ġw ave
Ġdefin ition
ĠJew s
Ġcy cle
Ġref ere
Ġbr ings
us al
Ġal ive
Ġfrequ ently
Ġint ention
ĠCont rol
l v
y stem
Ġpriv acy
g ent
ren ce
ĠQu est
ĠChrist mas
Ġr ail
Ġco oper
Ġtest ed
ĠC apt
as ks
Ġcomfort able
Ġdel ivered
sc ape
Ġdep th
ĠG OP
Ġwrit es
Ġass ets
Ġsa v
im ents
Ġtrans ition
Ġart ist
ĠL ook
Ġl ob
Ġcomp onents
ar ity
Ġwalk ed
Ġro ot
Ġparticip ants
Ġnot iced
Ġres c
Ġn av
ĠAd minist
d a
ut ral
pl ate
Ġimport ance
Ġass ert
ious ly
c ription
Ġinj uries
ĠChe ck
Ġregist ered
Ġint ent
Ġmiss ed
ograph ic
Ġsent ence
oun ter
Ġassist ance
ev in
Ġdat abase
Ġbuild ings
Ġclass ic
Ġth inks
ĠOh io
P r
ug g
Ġfe e
p an
Ġeffect ively
Ġfac ility
Ġbe ar
Ġch apter
Ġdog s
ĠCol umb
Ġl atter
it ial
Ġad mitted
T V
ĠGe org
Ġpost s
\ \
Ġlawy er
Ġequ ival
Ġm and
Ġcontro lled
ĠW alk
ĠAnd rew
Ġmen u
am ental
Ġprotect ed
v a
Ġadminist r
or al
Ġre in
ĠS ar
Ġamount s
Ġn ative
ĠM oon
Ġrep resents
Ġab andon
Ġcarry ing
Ġt ank
m ary
Ġdecl ared
T ube
Ġh at
Ġpun ish
el lect
m es
Ġun iverse
ĠR od
ph y
Ġinf rastructure
Ġ5 1
Ġopp osed
ow nt
c a
ĠM ake
Ġhard ware
Ġco ffee
R el
b al
w orld
ĠS af
ĠSe a
in als
Ġown ed
Ġh all
ers ion
Ġdescrib e
ĠP ot
Ġport ion
Ġat mosp
Ġgovern ments
Ġdep ending
Ġoff ense
Ġtr ick
aw a
ĠL ine
ĠV is
ĠH ard
ĠOr ig
ĠCl ick
Ġdes k
ĠVal ley
ĠS ov
Ġmov ies
Ġrem ark
Ġm ail
Ġcons cious
Ġrul ing
ĠR ights
Ġmed ic
he nt
ĠW omen
> <
Ġrepl aced
ĠP rem
ĠTh anks
Ġre new
ĠB all
if orm
Ġsh ots
C omm
Ġar med
Ġconst ant
Ġt aste
Ġreal ized
Ġbu ff
Ġm o
Ġeffic ient
M ost
or ation
if ies
Ġcommun ication
Ġfl ood
Ġconsequ ences
Ġany way
ig g
ĠG M
ĠTh ank
Ġ iron
Ġev olution
ĠC op
tw itter
Ġ9 5
Ġrelationship s
ad el
ĠYou ng
Ġpropos al
ay ers
uild ing
ĠH ot
OR E
c os
Ġcoll abor
P G
ax y
Ġknow ing
Ġsupport s
ow ed
Ġcontrol s
Ġmere ly
um er
Ġath let
Ġf ashion
p ath
Ġg ift
Ġer a
AN D
Ġkind s
ĠKore an
Ġleg it
ul ous
Ġess entially
Ġthe rap
n ic
Ġsuff ered
Ġh ur
Ġprom ise
Ġex cess
Ġover w
Ġpr ime
ĠH ouston
er ry
ĠM s
R S
201 2
Ġst ores
ĠO lymp
Ġj ourney
Al though
S ub
ĠE duc
ĠCh apter
Ġrequest s
Ġconsum ers
Ġt iny
Ġis ol
ĠF air
b a
ĠY OU
Ġcr ash
ce ler
Ġemot ional
Ġgood s
Ġelect ed
Ġmod er
ĠLin ux
Ġbl ocks
Ġis land
ĠSoc iety
Ġelect ions
Ġbroad cast
Ġche ap
Ġn ations
Ġse asons
4 00
Ġwas te
ĠS at
Ġfield s
em ploy
Ġprof ile
Ġauth ors
AL L
ĠG ra
w est
ĠT y
Ġdeath s
Ġv acc
Ġfor med
Ġd u
Ġon going
ĠMuslim s
el f
ig ure
Ġass ume
ĠUkrain e
w ater
Ġco ast
Ġvot ed
g or
ĠA S
ĠMich igan
az a
ĠAr m
i ro
Ġf lex
as ters
' '
Ġwel come
ar l
Ġloc ations
ig ation
ĠF il
Ġbu ying
Ġarch itect
Ġhard er
ĠC ub
Ġinter face
Ġrestaur ant
Ġdisco ver
Ġex ceed
Ġfav our
ger y
Ġd uty
Ġp itch
ad or
ĠM ach
b oy
Ġrespond ed
Ġext ended
her s
M any
ra id
if er
ĠIn s
S er
Ġmed ium
s he
ĠS ports
Ġmag azine
ut ation
Ġlim its
ĠG all
Ġex ternal
raz il
Ġyoung er
t le
Ġrem ind
ĠC ON
Ġimmedi ate
Ġh idden
Ġvol unte
Ġsim pl
od cast
Ġph ase
d r
Ġpl ot
Ġexp osure
R I
og rap
v in
an ish
ĠAc ad
ĠEng ine
Ġexp ansion
ĠP ay
Y our
Ġpus hed
ĠE ll
ĠHe ad
Ġmarket ing
ĠA C
k et
Ġh its
Ġg ro
ĠA ge
ĠSc ot
] [
Ġst im
Ġi Phone
Ī Ĵ
Ġn arrow
ĠGet ty
ĠTur key
Ġperfect ly
Ġen able
ut ch
Ġprec ise
Ġreg ime
Ġsh if
Ġcomp ens
g un
d iv
Ġch osen
ĠK en
An y
Ġtre es
Ġrecomm ended
ĠR en
u able
ĠH T
F ollow
E G
ĠH and
ĠK enn
Ġarg uments
Ġex ists
Ġb ike
ĠCons erv
Ġbre aking
ĠG ar
Ġc razy
Ġvirt ual
ay lor
ix el
Ġ19 80
Ġper mission
ĠSer ies
Ġconsum er
Ġclose ly
c alled
Ġ5 4
Ġhop es
Ġar ray
ĠW in
ĠLab our
Ġsp ons
ĠI re
Ġp ow
Ġread ers
Ġemploy ment
Ġcreat ure
Ġresult ing
Ġaccur ate
Ġmom ents
Ġarg ued
Ġp ed
D uring
Ġ5 3
ĠT al
Ġs ought
Ġsuff ering
Ġ icon
le e
Ġ( $
al ian
 °
Ġp ra
Ġbon us
( "
k o
Ġact ing
D E
f all
Ġcompar ison
Ġsm ooth
ĠN AS
u pp
ĠJose ph
ep ing
ĠT ake
ĠM id
Ġs ending
f ast
ĠF all
Ġdeal ing
us er
ĠOr gan
C o
Ġatt ached
Ġse es
% .
Ġtyp ical
AR T
Ġfind s
ĠAs ia
um in
ĠC ore
ĠE nt
in ent
u ce
ĠBl ood
ĠN ever
Ġem ails
Ġhigh light
Ġconf ront
at us
ut ed
Ġun us
Ġtop ic
ĠAd am
Ġb le
at i
Ġunder stood
S et
st ruct
T P
Ġm ob
a a
ĠSt art
pect ed
se ll
Ġded icated
ĠC A
u an
Ġsong s
esc ription
Ġte ch
Ġr ape
Ġas ide
Ġgr ant
Ġ5 6
s ub
Ġarg ue
Ġcont aining
Ġsche dule
Ġliber al
Ġpublic ly
Ġheav ily
ĠU t
in er
ĠS ection
ĠC are
we et
l s
D is
âĶ Ģ
ĠF ollow
B ack
ĠI T
Ġb es
j i
ĠH it
est ed
Ġevery body
ĠSw ed
Ġfem in
Ġfac ilities
Ġcon ven
C omp
ĠO S
c ore
Ġan x
Ġdiv ision
ĠC am
ĠSt an
m ates
Ġexpl ore
pl om
Ġsh ares
pl oad
an es
Ġide al
et ers
ĠB ase
Ġpl astic
Ġdist inct
ĠNet work
ĠSe attle
Ġtrad ing
ens us
int end
Ġex hib
Ġinit ially
ĠF ood
Ġthous and
ĠBus iness
act er
Ġpar agraph
Ġrough ly
Ġw ww
Ġcreat ive
ĠCon f
Ġconsum ption
Ġfil ms
ag an
Ġob tain
Ġt all
Ġt or
Ġacknow led
Ġg rown
al o
K E
Ġ4 00
end ers
t aining
U G
Ġsu icide
Ġwat ched
ĠL ist
al i
re hens
Ġsurround ing
Ġp ip
Ġf lying
ĠJ ava
ord an
Ġserv ing
in ations
p ost
Ġsh o
A v
Ġj ail
z y
Ġ199 9
Ġ< /
Ġliter ally
ĠS ir
Ġexp osed
Ġl ies
st ar
Ġb at
Ġear ned
ĠD ig
Ġspec ified
ĠSe ason
Ġdeg rees
Don ald
Ġcent re
Ġsh aring
Ġwin ter
ĠC O
C he
Ġ Î
M P
Ġun w
Ġfew er
ĠM ir
Ġsomew here
ĠK ey
Ġattack ed
ĠK ir
Ġdom ain
Ġstrong er
Ġ9 9
Ġpen alty
I d
Sc ript
Ġdecl ined
Ġne ck
Ġfra ud
Ġcur rency
Ġr ising
R C
â̦ â̦
H z
Ġt ab
Ġtal ent
n am
ĠN BA
Ġvill age
Ġleg s
ĠN ext
E d
Ġac id
Ġhy d
8 00
Ġinvol ving
ĠIm age
ĠBe fore
F l
Ġyes terday
S ource
Ġterror ist
Ġsu p
Ġsy nt
ĠSaud i
Ġw est
Ġr u
b urg
Ġvis ible
Ġstru ck
r ison
Ġaw esome
Ġd rawn
Ġansw ers
ĠG irl
ĠR am
Ġthreat s
Ġdef eat
os it
Ġv ent
atur ally
Americ an
end a
ĠH oly
Ġr um
% ,
c ase
ĠHist ory
ĠYou Tube
Ġsit uations
ĠD NA
S te
Ġsa ved
It em
Ġrec ip
olog ist
Ġfac ed
Ġel ig
O nce
ĠL i
u h
Ġmist ake
ĠDiv ision
ĠB ell
Ġsympt oms
 ®
Ġdom in
Ġfall ing
Ġend ing
as hes
Ġmat ches
ĠOn line
Ġexplan ation
D ef
red it
Ġany more
ĠT otal
ĠF OR
us hed
Ġlet ters
Ġris ks
ĠO K
Ġreported ly
: \
Ġpl ate
Ġsubject s
Ġattempt ed
if ier
ian a
Ġunlike ly
ĠTh ough
um a
ĠIn vest
ĠPr in
ic an
ĠD ar
ĠColor ado
au g
Ġve get
a os
ri a
Ġshe l
Ġmark ed
Ġ( )
Ġsp r
p o
ĠL ink
Ġdef e
ĠJ r
Ġthem e
Ġpass ion
ĠP en
Ġinf o
iz er
Ġsh it
ĠC ivil
ap se
c re
Ġpo ly
Ġcomp onent
ĠChar les
ĠIre land
ĠPro v
Ġdo ctors
Ġgr anted
Ġpain t
Ġhon or
Ġsm oke
Ġpay ments
Ġprim arily
ĠKing dom
r ich
ate ll
Ġde als
Ġsched uled
Ġfund amental
Ġprote in
Ġnewsp aper
Ġcl ients
yth on
ĠD ate
h us
Ġfeed back
Ġstret ch
Ġc ock
Ġhot el
ĠQue en
Ġsu gar
Ġj u
Ġmil k
Ġappro val
ĠL ive
Ġequival ent
ef ully
Ġins ert
z ona
Ġext ension
d ri
J ohn
Ġacc omp
S m
ĠF und
Ġconst antly
Ġ` `
Ġgener ated
ĠA ction
ĠP sych
ĠT ri
Ġrecogn ize
Ġv ary
ph a
ĠR a
d f
et ch
ĠSov iet
Tw o
Ġpattern s
Ġprof ession
an ing
T ime
ĠL im
Ġcol ors
ĠA z
ĠT R
Ġinf ect
Ġphen omen
Ġshe ll
Al so
Ġput s
Ġdel ivery
Ġbro wn
Ġprocess ing
Ġlight s
ess age
ĠBro ok
ĠA ud
l ation
Ġindust rial
L ike
ĠB razil
rou s
ES S
ĠL uc
Ġsome how
Ġ8 5
Ġpro port
Ġpolit icians
Ġindic ate
Ġh ole
Ġtechn iques
Ġcompet itive
Ġph r
Ġv o
ist ent
ĠD ream
Ġcamp us
Ġaspect s
Ġhelp ful
Ġsh ield
or se
Ġtrig ger
m al
Ġ5 8
Ġt ort
Ġperson ally
Ġt ag
Ġkeep s
ĠV ideo
Ġben ch
Ġg ap
a ire
Ġe ast
Ġrec overy
per ial
Ġprof it
ĠM ic
Ġ5 7
Ġcol on
Ġstrong ly
st yle
Ġalleg ations
h an
Ġrep orters
j o
r ine
arg et
and al
Ġ0 3
Ġfl ash
tr ans
Ġstr ict
Ġpark ing
ĠPak istan
Ġl i
Ġwe ird
ĠE ric
Ġreg ions
ĠJ un
Ġint ellect
ĠW H
od ing
rib utes
up id
ĠT it
Ġf inger
or ia
Ġe lev
ĠF ield
Ġcon clusion
; ;
Ġfeel ings
Ġext ensive
Ġm ixed
Ġne uro
v y
Ġhar ass
ĠC irc
ou ch
Ġterrit ory
Ġsuccess fully
M ar
Ġing red
Ġoverw hel
Ġl ayer
V iew
Ġall ies
ill ance
ĠTh ree
Ġb unch
Ġnorm ally
Ġnet works
Ġsac r
ĠC IA
b les
Ġch ose
Ġopp onents
Ġregard less
Ġfr anch
Ġpre f
ĠP o
Ġbr idge
ann a
ĠSil ver
Ġw age
p age
ri or
Ġrad ical
ĠL ittle
Ġman ip
Ġsecret ary
Ġg ang
D R
F A
Ġdec ent
ĠSp irit
Ġun cle
ĠDevelop ment
Ġinvest ors
Ġwall s
Ġpub lish
Ġgener ate
iss ions
c ar
Ġprom ote
Ġcut ting
Ġche st
Ġdrink ing
Ġcollect ed
Ġ7 2
Ġhop ing
Ġem br
gor ith
Ġwar ned
Ġinstruct ions
O G
ĠD id
ĠAg ency
Ġg ear
Ġcritic ism
ĠF urther
Ġut il
ann y
R ed
Ġcoun sel
ĠAs ian
Ġredu ction
p ool
Ġteach ing
Ġdeep ly
i y
Ġestim ates
Ġcho ices
Ġperman ent
in em
ke l
Ġf asc
p se
f ile
ĠL ow
ĠP erson
Ġt ournament
st al
Ġm el
U ST
ĠR ay
az i
V al
Ġcont ained
ĠH olly
Ġw ake
Ġreve al
Ġprocess es
ĠIS IS
Ġ0 9
Ġbl ind
Ġste el
ĠB ad
Ġcare fully
app y
ro it
Ġg aming
Ġhous es
ĠC oll
Ġtr uck
er m
Ġsc ored
Ġocc as
ret urn
b ound
v ar
Ġsh arp
Ġaf raid
ĠE X
am ber
c ific
Ġsche me
N C
ĠPol it
Ġdecl ine
Ġ199 8
Ġpus hing
Ġposs ession
Ġpriv ile
Ġteacher s
Ġy ield
H A
ĠDav is
it led
#### ####
Ġr ig
ĠD aniel
ac on
Ġh ide
ut en
Ġcolle agues
Ġprin ciples
Ġl oud
Ġs in
ĠDem on
Ġst one
Ġ0 2
Ġt aught
Ġter rible
Ġst uck
ĠPol icy
te en
Ġimplement ation
ĠB BC
ĠAP I
Ġwhe el
all as
Ġch ampions
ol ars
play er
Ġrepeated ly
ĠSt ill
Ġlik es
ast y
es ter
ĠCath olic
R L
Ġb ath
Ġno ise
t itle
Ġn orthern
P art
Ġmag n
Ġf ab
ĠAs h
Ġdis pl
Ġtick et
Ġm urd
Ġalong side
ĠMus ic
Ġr iver
ĠSte el
ĠC L
ĠPl ayer
ĠM ult
ow ing
re p
s ize
Ġt ur
ĠGeorg ia
isc al
ra ction
Ġc able
Ġ5 9
Ġw ins
Ġup coming
Ġsurv ive
Ġins pired
ĠEduc ation
Ġstat istics
ĠF oot
iam i
Ġy ellow
ĠP age
. -
ĠH as
Ġur ban
Ġa x
es sel
\ "
Ġquarter back
Ġreg ister
ĠLab or
Ġab ilities
ĠF amily
Ġvar iable
ĠPr ice
Ġcont em
Ġth in
ĠE qu
d ata
Ġg otten
Ġconst it
Ġas ks
Ġt ail
Ġexc iting
ĠE ffect
ĠSp anish
Ġencour age
ins on
ĠA h
Ġcommit ment
C S
Ġr ally
Ġ: :
Ġsubs id
Ġsp in
Ġcapt ured
201 8
Ġinn oc
Ġalleged ly
ĠC ome
Ġart ists
ĠN umber
Ġelect ronic
Ġreg ional
ap es
Ġw ra
Ġmy th
pr ise
ĠM iller
ĠC reat
ĠEp isode
b ell
Ġdirect ed
Ġext ract
Ġs orry
Ġv ice
ag ger
ĠSu pport
Ġ6 6
ĠI ron
Ġwonder ful
Ġg ra
N et
ion e
E ng
Ġsh ips
ik es
ĠK evin
it ar
Ġactiv ists
tr ue
ĠAri zona
ent h
ĠDes pite
ĠS E
Ġha bit
ern el
Ġin qu
Ġab ortion
Ġv oid
Ġexpl icit
Ġeng aged
Ġang ry
Ġr ating
Ġfr ag
b ro
ick ing
d ev
Ġwor ried
Ġob ser
Ġap artment
ĠG T
Ġest ate
ĠConst itution
em on
ĠS now
Ġcount y
Ġdis ag
ĠStep hen
Ġimm igrants
w ind
ĠN ations
Ġfol ks
O ut
Ġg all
Ġtarget ed
Ġst ead
ĠB on
ĠL ib
Ġinform ed
Ġ12 0
ch ain
idel ines
or ough
Ġdri ven
Ġregular ly
Ġbas ket
Ġprinc iple
oc ument
Ġst un
ib ilities
ĠRom an
ĠAb out
Ġal ert
Ġdemocr acy
Ġrepresent ed
H S
c ers
p arent
Ar t
p ack
Ġdi plom
re ts
ĠN O
Ġcapt ure
ĠAd v
Ħ ¢
Ġannounce ment
ĠL ear
Ġh ook
Ġpur s
ĠS uch
ĠC amer
Ġrefuge es
ĠV e
P ol
Ġrecogn ized
l ib
Ġhad n
A ss
Ġpil ot
us hing
Ġreturn ing
Ġtra il
ĠSt one
Ġrout ine
Ġcour ts
Ġdes per
Ġfriend ly
ĠIt aly
Ġpl ed
Ġbreat h
Ġstud io
N S
Ġimp ressive
ĠAfghan istan
Ġf ing
Ġd ownt
ink ing
ĠR og
i ary
col or
se x
ar on
Ġf ault
ĠN ick
D own
ĠR ose
ĠS outhern
X X
is odes
L ist
6 00
Ġout come
er r
Ġelse where
Ġret ire
Ġp ounds
ĠGl obal
Pe ople
Ġcommun ications
Ġlo an
Ġrat io
ĠEm pire
Ġg onna
Ġinv ent
D F
Ġ19 70
ĠComm on
p at
Ġprom ised
Ġd inner
ĠH om
Ġcreat es
Ġoper ate
ver ty
ĠJ ordan
et ime
Ġsust ain
R eg
Ġincred ible
im a
Ġwar rant
Ġm m
A tt
Ġlaw suit
Ġreview s
it ure
ĠS ource
l ights
ĠF ord
Ġ6 3
g roup
st ore
Ġfeat ured
Ġfore ver
Ġpo verty
ĠP op
ĠC NN
az z
ab is
ach ing
Ġl aid
ĠSu pp
Ġfil ter
en a
ĠCommun ity
Ġcreat ures
u ction
ĠR oyal
Ġassoci ation
ĠCon nect
ĠBr ad
âĸ Ī
l ers
the re
ĠG i
Ġval uable
AC K
ĠT aylor
Ġl iquid
ĠAtt orney
ĠCar l
ĠF inal
ag a
ĠWil son
B ecause
ĠProf essor
ak a
Ġincred ibly
r ance
! )
R ef
s k
Ġsol utions
Ġatmosp here
Ġbl ame
um es
ĠN ob
C A
um ps
r ical
ĠPut in
ĠD est
or ic
ĠP A
Ġrespect ively
w an
Ġfif th
â Ħ¢
ĠC ry
Ġgovern or
res ident
Ġpurch ased
Ġh ack
Ġint ense
ob s
Ġorig in
Ġdef ine
Ġcare ful
** *
Ġshould er
Cl ick
Ġt ied
Ġdest ruction
ou red
Ġno body
Ġh o
ĠEx per
Ġt ip
" ;
Ġtechn ique
Ġj ur
ĠP ok
b ow
Ġleg end
Ġacc ord
Ġbus y
ĠInt el
Ġh ang
ak i
. ]
âĢĶâĢĶ âĢĶâĢĶ
Ġsur gery
Ġrep rodu
Ġun iform
Ġscen es
c ode
Ġ6 2
l isher
ĠH ave
ph ia
Ġcry pt
Ġrec on
Ġsc ream
Ġadop ted
Ġsc ores
N e
ĠIt alian
in cluding
B O
Ġindic ated
Ġent ertain
G u
T ext
i el
Ġtw enty
Ġeng age
off s
ĠPac ific
Ġsm ile
Ġperson nel
Ġto ler
Ġdo ors
Ġt one
Ġmach ines
Ġent ering
ten ance
C O
ĠJer sey
Ġfore st
Ġhor se
Ġcompl aint
ĠSpr ing
y o
ĠPl us
ed ing
ĠRet urn
qu arters
ial s
c ow
Ġacad emic
Ġf ruit
Ġ199 6
og ether
Ġw ine
Ġpur su
ĠSte ven
Ġlic ens
Wh o
Ġclot hes
re ction
Ġsqu ad
Ġst able
Ġr aw
z ens
St ar
ut ies
anc er
Ġke ys
ĠM u
Ġcompl icated
ig er
ĠTe xt
Ġabs or
Ġ6 8
Ġfun ny
Ġrel ief
ĠL ew
ĠC ook
Ġch art
Ġdraw ing
G E
Ġmod ule
ĠB ull
I LL
Ġs alt
0000 0000
il le
Ġres ource
aw ay
adel phia
ĠB ru
Ġ6 7
Ġsome body
Ġparticip ate
Ġro se
we red
Ġmus cle
Ġcons ent
Ġcontin uing
ĠGuard ian
ĠOr der
reg on
Ġre ar
Ġprov ision
Ġlik ed
ri ent
Ġb ra
Tr ans
Ġmeet ings
Ġto x
Ġcon vent
Ġaut o
Ġrec ording
ĠSo ft
00 1
ĠR oll
Ġprogram ming
Ġp ic
Ġprov ed
Ġst ab
ĠA st
Ġca ption
ul ating
ĠAtt ack
Ġnew ly
Ġ199 7
f r
Ġdis cipl
ĠGree k
Ġed ition
ĠDo es
ĠB ox
if le
ack et
Ġpass es
Ġgu est
Ġac celer
it als
U D
Ġaut hent
ĠR est
ov al
t a
u ine
Ġarm or
ĠT own
Ġcomp at
Ġinc hes
Des pite
Ġass ign
he rent
Ġprep are
ĠM eg
oc key
Ġdep ends
Ġtrack s
w atch
Ġl ists
ĠN orthern
Ġal ter
re c
ĠE astern
Ġcond em
Ġevery where
? '
Ġaff ili
Ġf ought
": {"
Ġm ac
it arian
Ġsc ope
ĠA L
aw s
ar ms
Ġqu e
Ġenjoy ed
nes ota
Ġagg ressive
ĠSt ory
ĠI V
Ġrec ipe
Ġrare ly
ĠMed ical
val ue
ang el
ay ing
omet hing
Ġsub section
Ġs outhern
Ġfrequ ency
re te
roll ed
ult s
ĠN ic
Ġbeh alf
Ġsequ ence
ab et
Ġcontrovers ial
Ġcomp rom
Ġwork er
Ġmain ly
Ġal gorith
ĠM ajor
or ce
g ender
Ġorgan ized
Ġf ake
Ġconclud ed
ĠE D
ĠEx ec
r age
Ġch ances
ber ry
ĠTr ad
Ġconfig uration
Ġwithd raw
Ġf ro
ud es
ĠBro ther
ĠB rian
Ġtri es
Ġsam ples
Ġb id
ĠGold en
Ġphot ograph
if est
ĠD O
ĠPar liament
******** ********
R em
Ġcont est
Ġsign ing
p x
ĠZ eal
âĶĢ âĶĢ
E ar
Ġex it
Be fore
ĠCor por
n ull
mon th
Ġrac ial
ott ed
ĠV eg
ĠRe uters
Ġsw ord
ps on
ĠRom ney
a ed
Ġt rib
Ġin ner
Ġprot ocol
ĠB i
ĠM iami
ever al
p ress
Ġsh ipping
ĠAm endment
ĠHow ard
con nect
ĠD isc
ĠJ ac
iam ond
ĠThere fore
s es
ĠPrin cess
ĠUS B
ĠAn th
Ġsurve illance
Ġap olog
Ġ6 1
ow a
Ġf ulf
j s
Ġl uck
ust ed
ĠÂ §
n i
Ġant icip
em an
Ġwin ner
Ġsil ver
ll a
ic ity
Ġunus ual
Ġcr ack
Ġt ies
e z
Ġpract ical
Ġprov ince
ĠPl ace
Ġprior ity
IC E
Ġdescrib es
Ġbr anch
F orm
ask a
miss ions
b i
Ġp orn
ĠTur k
Ġent hus
Ġf ighters
Ġ0 8
ĠDet roit
Ġfound ation
av id
A re
Ġjud gment
cl ing
Ġsol ve
ĠDes ign
W here
hes is
ĠT ro
a fter
Ġne utral
ĠPalestin ian
ĠHolly wood
Ġadv is
ĠN on
y es
ol is
Ġrep utation
Ġsm ell
Ġb read
ĠB ul
ĠBe ach
Ġclaim ing
Ġgen etic
Ġtechn ologies
Ġupgr ade
row s
Ġdevelop er
ĠJ osh
ĠDis ney
erv ed
ip al
Ġun ex
Ġbare ly
t hen
ĠP ub
Ġill ness
et ary
ĠB al
Ġp atch
Ġbut t
Ġst upid
ĠD og
ĠD allas
f ront
ie ce
Ġprot ests
Ġch at
oen ix
Ġw ing
Ġpar liament
Ġ7 7
ose xual
Ġre nder
pt ions
ĠCo ast
os a
ĠG reg
h op
ĠMan agement
Ġbit coin
Ġrec over
Ġincor por
or ne
ĠUs ing
Ġpre ced
Ġthreat ened
Ġspirit ual
ĠE vent
ĠF red
Ġadvert ising
Ġimprove ments
ĠC ustom
Ġer rors
Ġsens itive
ĠN avy
Ġcre am
L ook
Ġex clusive
Ġcomp rehens
Ġde leg
Ġcon ce
Ġrem em
Ġstruct ures
Ġst ored
N D
Ġ1 000
U P
ĠB udd
A F
w oman
ĠAcad emy
ð Ł
se a
Ġtem porary
Ab out
es ters
Ġtick ets
Ġposs ess
in ch
o z
Ġl a
Ġcontract s
Ġun p
Ġc ig
ĠK at
ult ural
as m
Ġmount ain
ĠCapt ain
St ep
m aking
ĠSp ain
Ġequ ally
Ġl ands
at ers
Ġreject ed
er a
im m
ri x
C D
Ġtrans action
g ener
less ly
Ġ| |
Ġc os
ĠHen ry
Ġprov isions
Ġg ained
Ġdirect ory
Ġra ising
ĠS ep
ol en
ond er
Ġcon sole
in st
Ġb om
Ġunc ertain
1 50
ock ing
Ġmeas ured
Ġpl ain
Ġse ats
Ġd ict
S L
af e
Ġest imate
iz on
at hered
Ġcontribut ed
Ġep isodes
omm od
G r
AN T
Ġ6 9
G ener
Ġ2 50
vious ly
rog en
Ġterror ism
Ġmove ments
ent le
oun ce
ĠS oul
Ġpre v
ĠT able
act s
ri ors
t ab
Ġsuff er
Ġn erv
Ġmain stream
ĠW olf
Ġfranch ise
b at
Ġdem ands
Ġag enda
Ġdo zen
Ġclin ical
iz ard
ĠO p
t d
Ġvis ited
ĠPer haps
Ġact or
Ġde lic
Ġcont ribute
Ġin ject
ĠE s
ac co
Ġlist ening
Ġcon gress
epend ent
Ġprem ium
Ġ7 6
ĠIr ish
Ġass igned
ĠPh ys
Ġworld wide
Ġnarr ative
ot ype
m ont
b ase
ĠB owl
ĠAdminist ration
Ġrel ation
ĠE V
C P
Ġco vers
Ġ7 8
Ġcert ific
Ġgr ass
Ġ0 4
pir acy
ir a
Ġengine ering
ĠM ars
Ġun employ
ĠFore ign
st ract
Ġv en
Ġst eal
Ġrepl ied
Ġult imate
Ġtit les
d ated
Ġj oy
a us
Ġhy per
ak u
Ġoffic ially
ĠPro duct
Ġdifficult y
per or
Ġresult ed
rib ed
l ink
wh o
~~ ~~
ĠSpe ed
ĠV iet
W ind
ĠBar ack
Ġrestrict ions
ĠSh are
Ġ199 5
ition ally
Ġbeaut y
op t
Ġm aps
ĠC R
ĠN ation
ĠCru z
W ill
Ġelectric ity
Ġor g
Ġb urd
Ġviol ation
Ġus age
Ġper mit
ĠCh ron
ĠF ant
Ġn aturally
Ġ0 7
Ġth rown
ĠAw oken
Ġal ien
ĠHer o
ĠK ent
ĠR ick
ri ke
Ġp ace
}, {"
G L
Ġpo ison
ĠT ower
Ġform al
al ysis
Ġgen uine
Ġk il
a ver
Ġproced ure
ĠPro p
intend o
ĠM ain
as ant
Ġtr ained
G ame
ĠL oad
ĠM A
Ġcru cial
Ġle ts
ĠF R
Ġch ampion
1 01
ĠCon ference
Ġwrit ers
Ġconnect ions
Ġo kay
ir ms
ĠR and
Ġenc ounter
ĠB uff
Ġachie ved
Ġche cks
isc ons
Ġassist ant
Ġwhen ever
ĠA ccess
ĠU r
b in
Ġcl ock
is p
op her
Ġb orrow
Ġm ad
Ġperson ality
on ly
IS T
ab ama
Ġg ains
Ġcommon ly
Ġter r
Ġhyp ot
Ġre ly
Ġt iss
iscons in
Ġrid ic
f unction
ĠO regon
Ġun com
r ating
el and
ĠN C
Ġm oon
ann on
Ġvulner able
ut ive
³³ ³³
ĠRad io
Ġw estern
se ct
ĠT ony
Ġocc urs
ĠO s
ĠH on
à Ń
Ġv essel
ĠScot land
Ġdiscrim ination
Ġsubsequ ent
st ring
Ġfant asy
ĠSh adow
Ġtest im
W E
it i
r as
Ġbo at
Ġmar ks
Ġord inary
Ġre n
Ġrepresent ative
Ġpet ition
Ġ7 3
Ġad venture
Ġign ore
ĠPhil adelphia
ĠS av
V P
Ġfact ory
Ġt asks
Ġdep ression
z ed
................ ................
ĠSt orm
Ġc ogn
Ġelig ible
Ġredu cing
v ia
Ġ0 5
Ġstri king
Ġdoll ar
h o
O V
Ġinstr ument
Ġphilosoph y
ĠMo ore
ĠA venue
Ġrul ed
ĠFr ont
IN E
ĠM ah
Ġscen ario
ĠNAS A
Ġen orm
Ġdeb ut
Ġte a
T oday
Ġabs ence
S im
Ġh am
le ep
Ġt ables
ĠHe art
M I
K e
re qu
V D
m ap
Ġchair man
Ġp ump
Ġrapid ly
v i
Ġsubstant ial
E P
d es
ch ant
ili pp
ĠS anta
ri ers
anche ster
L oad
ĠC ase
Ġsa ving
Ġ7 4
ĠA FP
er ning
oun ced
ĠMin nesota
ĠW as
Ġrec ru
Ġassess ment
ĠB ron
U E
Ġdynam ic
Ġf urn
ul ator
Ġprop ag
h igh
Ġacc ommod
Ġst ack
ĠS us
w rit
Ġre ven
ĠGod d
ĠZeal and
ab s
Ġbr ut
Ġper pet
h ot
Ġhard ly
ĠB urn
ãĤ ¹
Ġst y
Ġtrans actions
Ġg ate
Ġsc reens
Ġsub mitted
Ġ1 01
Ġlangu ages
ugh t
em en
Ġfall s
Ġc oc
Ĥ ¬
Ġstri kes
p a
Ġdel iber
ĠI M
Ġrel ax
ann els
ĠSen ator
Ġext rem
Ġ} ,
ĠDe b
Ġbe ll
Ġdis order
c ut
Ġi OS
Ġl ocked
Ġem issions
Ġshort ly
" ]
ĠJud ge
ĠS ometimes
Ġr ival
Ġd ust
Ġreach ing
F ile
¯¯ ¯¯
ino is
ĠJ ason
Ġs atell
are t
Ġst ations
Ġag ric
ĠTechn ology
com es
ĠUn fortunately
ĠChild ren
Ġappl ies
ast ed
Ġan ger
ail ability
ĠDam age
Ġcomp are
ĠStand ard
Ġaim ed
ĠB a
angu age
Ġreg ulation
Ġj ury
Ġair port
Ġse ctions
ĠPr ince
em ed
Ġmedic ine
Ġh itting
Ġsp ark
ol ves
Ġad s
St ate
Ġfood s
Ġrepl acement
Ġch icken
Ġlow est
Ġmind s
Ġinvol ves
u i
Ġarr ang
Ġproced ures
ĠWh ich
ivers ary
Ġb ills
Ġimprove ment
Ġin ev
Ġexpect ations
Ġintellect ual
Ġsp aces
Ġmechan ism
2 50
bre ak
ĠZ 
Download .txt
gitextract_kr2gfg43/

├── LICENSE
├── README.md
├── commons.py
├── configs/
│   ├── cvc-eng-ppgs-three-emo-cycleloss.json
│   ├── cvc-eng-ppgs-three-emo.json
│   ├── cvc-whispers-multi.json
│   └── cvc-whispers-three-emo.json
├── data_utils_engppg.py
├── data_utils_whisper.py
├── losses.py
├── mel_processing.py
├── models.py
├── modules.py
├── ppg.py
├── ppgemoconvert_exp.py
├── preprocess_ppg.py
├── train_eng_ppg_emo_loss.py
├── train_whisper_emo.py
├── utils.py
├── whisper/
│   ├── LICENSE
│   ├── README.md
│   ├── __init__.py
│   ├── assets/
│   │   ├── gpt2/
│   │   │   ├── merges.txt
│   │   │   ├── special_tokens_map.json
│   │   │   ├── tokenizer_config.json
│   │   │   └── vocab.json
│   │   ├── mel_filters.npz
│   │   └── multilingual/
│   │       ├── added_tokens.json
│   │       ├── merges.txt
│   │       ├── special_tokens_map.json
│   │       ├── tokenizer_config.json
│   │       └── vocab.json
│   ├── audio.py
│   ├── decoding.py
│   ├── model.py
│   ├── normalizers/
│   │   ├── __init__.py
│   │   ├── basic.py
│   │   ├── english.json
│   │   └── english.py
│   ├── tokenizer.py
│   └── utils.py
├── whisperconvert_exp.py
└── whisperconvert_longaudio.py
Download .txt
SYMBOL INDEX (299 symbols across 18 files)

FILE: commons.py
  function init_weights (line 8) | def init_weights(m, mean=0.0, std=0.01):
  function get_padding (line 14) | def get_padding(kernel_size, dilation=1):
  function convert_pad_shape (line 18) | def convert_pad_shape(pad_shape):
  function intersperse (line 24) | def intersperse(lst, item):
  function kl_divergence (line 30) | def kl_divergence(m_p, logs_p, m_q, logs_q):
  function rand_gumbel (line 37) | def rand_gumbel(shape):
  function rand_gumbel_like (line 43) | def rand_gumbel_like(x):
  function slice_segments (line 48) | def slice_segments(x, ids_str, segment_size=4):
  function rand_slice_segments (line 57) | def rand_slice_segments(x, x_lengths=None, segment_size=4):
  function rand_spec_segments (line 67) | def rand_spec_segments(x, x_lengths=None, segment_size=4):
  function get_timing_signal_1d (line 77) | def get_timing_signal_1d(
  function add_timing_signal_1d (line 93) | def add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):
  function cat_timing_signal_1d (line 99) | def cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis...
  function subsequent_mask (line 105) | def subsequent_mask(length):
  function fused_add_tanh_sigmoid_multiply (line 111) | def fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):
  function convert_pad_shape (line 120) | def convert_pad_shape(pad_shape):
  function shift_1d (line 126) | def shift_1d(x):
  function sequence_mask (line 131) | def sequence_mask(length, max_length=None):
  function generate_path (line 138) | def generate_path(duration, mask):
  function clip_grad_value_ (line 156) | def clip_grad_value_(parameters, clip_value, norm_type=2):

FILE: data_utils_engppg.py
  class TextAudioSpeakerLoader (line 15) | class TextAudioSpeakerLoader(torch.utils.data.Dataset):
    method __init__ (line 21) | def __init__(self, audiopaths, hparams):
    method _filter (line 37) | def _filter(self):
    method get_audio (line 50) | def get_audio(self, filename):
    method __getitem__ (line 128) | def __getitem__(self, index):
    method __len__ (line 131) | def __len__(self):
  class TextAudioSpeakerCollate (line 135) | class TextAudioSpeakerCollate():
    method __init__ (line 138) | def __init__(self, hps):
    method __call__ (line 143) | def __call__(self, batch):
  class DistributedBucketSampler (line 205) | class DistributedBucketSampler(torch.utils.data.distributed.DistributedS...
    method __init__ (line 214) | def __init__(self, dataset, batch_size, boundaries, num_replicas=None,...
    method _create_buckets (line 225) | def _create_buckets(self):
    method __iter__ (line 246) | def __iter__(self):
    method _bisect (line 286) | def _bisect(self, x, lo=0, hi=None):
    method __len__ (line 301) | def __len__(self):

FILE: data_utils_whisper.py
  class TextAudioSpeakerLoader (line 15) | class TextAudioSpeakerLoader(torch.utils.data.Dataset):
    method __init__ (line 21) | def __init__(self, audiopaths, hparams):
    method _filter (line 37) | def _filter(self):
    method get_audio (line 50) | def get_audio(self, filename):
    method __getitem__ (line 126) | def __getitem__(self, index):
    method __len__ (line 129) | def __len__(self):
  class TextAudioSpeakerCollate (line 133) | class TextAudioSpeakerCollate():
    method __init__ (line 136) | def __init__(self, hps):
    method __call__ (line 141) | def __call__(self, batch):
  class DistributedBucketSampler (line 203) | class DistributedBucketSampler(torch.utils.data.distributed.DistributedS...
    method __init__ (line 212) | def __init__(self, dataset, batch_size, boundaries, num_replicas=None,...
    method _create_buckets (line 223) | def _create_buckets(self):
    method __iter__ (line 244) | def __iter__(self):
    method _bisect (line 284) | def _bisect(self, x, lo=0, hi=None):
    method __len__ (line 299) | def __len__(self):

FILE: losses.py
  function feature_loss (line 7) | def feature_loss(fmap_r, fmap_g):
  function discriminator_loss (line 18) | def discriminator_loss(disc_real_outputs, disc_generated_outputs):
  function generator_loss (line 34) | def generator_loss(disc_outputs):
  function kl_loss (line 46) | def kl_loss(z_p, logs_q, m_p, logs_p, z_mask):

FILE: mel_processing.py
  function dynamic_range_compression_torch (line 19) | def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
  function dynamic_range_decompression_torch (line 28) | def dynamic_range_decompression_torch(x, C=1):
  function spectral_normalize_torch (line 37) | def spectral_normalize_torch(magnitudes):
  function spectral_de_normalize_torch (line 42) | def spectral_de_normalize_torch(magnitudes):
  function spectrogram_torch (line 51) | def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, cente...
  function spec_to_mel_torch (line 73) | def spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax):
  function mel_spectrogram_torch (line 85) | def mel_spectrogram_torch(y, n_fft, num_mels, sampling_rate, hop_size, w...

FILE: models.py
  class ResidualCouplingBlock (line 15) | class ResidualCouplingBlock(nn.Module):
    method __init__ (line 16) | def __init__(self,
    method forward (line 38) | def forward(self, x, x_mask, g=None, reverse=False):
  class Encoder (line 48) | class Encoder(nn.Module):
    method __init__ (line 49) | def __init__(self,
    method forward (line 70) | def forward(self, x, x_lengths, g=None):
  class Generator (line 80) | class Generator(torch.nn.Module):
    method __init__ (line 81) | def __init__(self, initial_channel, resblock, resblock_kernel_sizes, r...
    method forward (line 106) | def forward(self, x, g=None):
    method remove_weight_norm (line 127) | def remove_weight_norm(self):
  class DiscriminatorP (line 135) | class DiscriminatorP(torch.nn.Module):
    method __init__ (line 136) | def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=...
    method forward (line 150) | def forward(self, x):
  class DiscriminatorS (line 172) | class DiscriminatorS(torch.nn.Module):
    method __init__ (line 173) | def __init__(self, use_spectral_norm=False):
    method forward (line 186) | def forward(self, x):
  class MultiPeriodDiscriminator (line 200) | class MultiPeriodDiscriminator(torch.nn.Module):
    method __init__ (line 201) | def __init__(self, use_spectral_norm=False):
    method forward (line 209) | def forward(self, y, y_hat):
  class SpeakerEncoder (line 225) | class SpeakerEncoder(torch.nn.Module):
    method __init__ (line 226) | def __init__(self, mel_n_channels=80, model_num_layers=3, model_hidden...
    method forward (line 232) | def forward(self, mels):
    method compute_partial_slices (line 238) | def compute_partial_slices(self, total_frames, partial_frames, partial...
    method embed_utterance (line 246) | def embed_utterance(self, mel, partial_frames=128, partial_hop=64):
  class SynthesizerTrn (line 267) | class SynthesizerTrn(nn.Module):
    method __init__ (line 272) | def __init__(self,
    method forward (line 321) | def forward(self, c, spec, g=None, mel=None, c_lengths=None, spec_leng...
    method infer (line 344) | def infer(self, c, g=None, mel=None, c_lengths=None):

FILE: modules.py
  class LayerNorm (line 19) | class LayerNorm(nn.Module):
    method __init__ (line 20) | def __init__(self, channels, eps=1e-5):
    method forward (line 28) | def forward(self, x):
  class ConvReluNorm (line 34) | class ConvReluNorm(nn.Module):
    method __init__ (line 35) | def __init__(self, in_channels, hidden_channels, out_channels, kernel_...
    method forward (line 59) | def forward(self, x, x_mask):
  class DDSConv (line 69) | class DDSConv(nn.Module):
    method __init__ (line 73) | def __init__(self, channels, kernel_size, n_layers, p_dropout=0.):
    method forward (line 95) | def forward(self, x, x_mask, g=None):
  class WN (line 110) | class WN(torch.nn.Module):
    method __init__ (line 111) | def __init__(self, hidden_channels, kernel_size, dilation_rate, n_laye...
    method forward (line 147) | def forward(self, x, x_mask, g=None, **kwargs):
    method remove_weight_norm (line 177) | def remove_weight_norm(self):
  class ResBlock1 (line 186) | class ResBlock1(torch.nn.Module):
    method __init__ (line 187) | def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):
    method forward (line 209) | def forward(self, x, x_mask=None):
    method remove_weight_norm (line 224) | def remove_weight_norm(self):
  class ResBlock2 (line 231) | class ResBlock2(torch.nn.Module):
    method __init__ (line 232) | def __init__(self, channels, kernel_size=3, dilation=(1, 3)):
    method forward (line 242) | def forward(self, x, x_mask=None):
    method remove_weight_norm (line 253) | def remove_weight_norm(self):
  class Log (line 258) | class Log(nn.Module):
    method forward (line 259) | def forward(self, x, x_mask, reverse=False, **kwargs):
  class Flip (line 269) | class Flip(nn.Module):
    method forward (line 270) | def forward(self, x, *args, reverse=False, **kwargs):
  class ElementwiseAffine (line 279) | class ElementwiseAffine(nn.Module):
    method __init__ (line 280) | def __init__(self, channels):
    method forward (line 286) | def forward(self, x, x_mask, reverse=False, **kwargs):
  class ResidualCouplingLayer (line 297) | class ResidualCouplingLayer(nn.Module):
    method __init__ (line 298) | def __init__(self,
    method forward (line 323) | def forward(self, x, x_mask, g=None, reverse=False):

FILE: preprocess_ppg.py
  function load_model (line 11) | def load_model(path) -> Whisper:
  function pred_ppg (line 20) | def pred_ppg(whisper: Whisper, wavPath, ppgPath):

FILE: train_eng_ppg_emo_loss.py
  function main (line 138) | def main():
  function run (line 151) | def run(rank, n_gpus, hps):
  function train_and_evaluate (line 221) | def train_and_evaluate(rank, epoch, hps, nets, optims, schedulers, scale...
  function evaluate (line 355) | def evaluate(hps, generator, eval_loader, writer_eval):

FILE: train_whisper_emo.py
  function main (line 41) | def main():
  function run (line 54) | def run(rank, n_gpus, hps):
  function train_and_evaluate (line 124) | def train_and_evaluate(rank, epoch, hps, nets, optims, schedulers, scale...
  function evaluate (line 258) | def evaluate(hps, generator, eval_loader, writer_eval):

FILE: utils.py
  function get_content (line 25) | def get_content(cmodel, y):
  function transform (line 35) | def transform(mel, height): # 68-92
  function stretch (line 48) | def stretch(mel, width): # 0.5-2
  function load_checkpoint (line 52) | def load_checkpoint(checkpoint_path, model, optimizer=None, strict=False):
  function save_checkpoint (line 82) | def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoi...
  function summarize (line 95) | def summarize(writer, global_step, scalars={}, histograms={}, images={},...
  function latest_checkpoint_path (line 106) | def latest_checkpoint_path(dir_path, regex="G_*.pth"):
  function plot_spectrogram_to_numpy (line 114) | def plot_spectrogram_to_numpy(spectrogram):
  function plot_alignment_to_numpy (line 140) | def plot_alignment_to_numpy(alignment, info=None):
  function load_wav_to_torch (line 169) | def load_wav_to_torch(full_path):
  function load_filepaths_and_text (line 174) | def load_filepaths_and_text(filename, split="|"):
  function get_hparams (line 180) | def get_hparams(init=True):
  function get_hparams_from_dir (line 210) | def get_hparams_from_dir(model_dir):
  function get_hparams_from_file (line 221) | def get_hparams_from_file(config_path):
  function check_git_hash (line 230) | def check_git_hash(model_dir):
  function get_logger (line 250) | def get_logger(model_dir, filename="train.log"):
  class HParams (line 265) | class HParams():
    method __init__ (line 266) | def __init__(self, **kwargs):
    method keys (line 272) | def keys(self):
    method items (line 275) | def items(self):
    method values (line 278) | def values(self):
    method __len__ (line 281) | def __len__(self):
    method __getitem__ (line 284) | def __getitem__(self, key):
    method __setitem__ (line 287) | def __setitem__(self, key, value):
    method __contains__ (line 290) | def __contains__(self, key):
    method __repr__ (line 293) | def __repr__(self):

FILE: whisper/audio.py
  function load_audio (line 22) | def load_audio(file: str, sr: int = SAMPLE_RATE):
  function pad_or_trim (line 52) | def pad_or_trim(array, length: int = N_SAMPLES, *, axis: int = -1):
  function mel_filters (line 77) | def mel_filters(device, n_mels: int = N_MELS) -> torch.Tensor:
  function log_mel_spectrogram (line 92) | def log_mel_spectrogram(audio: Union[str, np.ndarray, torch.Tensor], n_m...

FILE: whisper/decoding.py
  function detect_language (line 19) | def detect_language(model: "Whisper", mel: Tensor, tokenizer: Tokenizer ...
  class DecodingOptions (line 72) | class DecodingOptions:
  class DecodingResult (line 104) | class DecodingResult:
  class Inference (line 116) | class Inference:
    method logits (line 117) | def logits(self, tokens: Tensor, audio_features: Tensor) -> Tensor:
    method rearrange_kv_cache (line 121) | def rearrange_kv_cache(self, source_indices) -> None:
    method cleanup_caching (line 125) | def cleanup_caching(self) -> None:
  class PyTorchInference (line 130) | class PyTorchInference(Inference):
    method __init__ (line 131) | def __init__(self, model: "Whisper", initial_token_length: int):
    method logits (line 137) | def logits(self, tokens: Tensor, audio_features: Tensor) -> Tensor:
    method cleanup_caching (line 147) | def cleanup_caching(self):
    method rearrange_kv_cache (line 154) | def rearrange_kv_cache(self, source_indices):
  class SequenceRanker (line 160) | class SequenceRanker:
    method rank (line 161) | def rank(self, tokens: List[List[Tensor]], sum_logprobs: List[List[flo...
  class MaximumLikelihoodRanker (line 169) | class MaximumLikelihoodRanker(SequenceRanker):
    method __init__ (line 175) | def __init__(self, length_penalty: Optional[float]):
    method rank (line 178) | def rank(self, tokens: List[List[Tensor]], sum_logprobs: List[List[flo...
  class TokenDecoder (line 195) | class TokenDecoder:
    method reset (line 196) | def reset(self):
    method update (line 199) | def update(self, tokens: Tensor, logits: Tensor, sum_logprobs: Tensor)...
    method finalize (line 224) | def finalize(
  class GreedyDecoder (line 249) | class GreedyDecoder(TokenDecoder):
    method __init__ (line 250) | def __init__(self, temperature: float, eot: int):
    method update (line 254) | def update(self, tokens: Tensor, logits: Tensor, sum_logprobs: Tensor)...
    method finalize (line 271) | def finalize(self, tokens: Tensor, sum_logprobs: Tensor):
  class BeamSearchDecoder (line 277) | class BeamSearchDecoder(TokenDecoder):
    method __init__ (line 278) | def __init__(self, beam_size: int, eot: int, inference: Inference, pat...
    method reset (line 288) | def reset(self):
    method update (line 291) | def update(self, tokens: Tensor, logits: Tensor, sum_logprobs: Tensor)...
    method finalize (line 347) | def finalize(self, preceding_tokens: Tensor, sum_logprobs: Tensor):
  class LogitFilter (line 367) | class LogitFilter:
    method apply (line 368) | def apply(self, logits: Tensor, tokens: Tensor) -> None:
  class SuppressBlank (line 383) | class SuppressBlank(LogitFilter):
    method __init__ (line 384) | def __init__(self, tokenizer: Tokenizer, sample_begin: int):
    method apply (line 388) | def apply(self, logits: Tensor, tokens: Tensor):
  class SuppressTokens (line 393) | class SuppressTokens(LogitFilter):
    method __init__ (line 394) | def __init__(self, suppress_tokens: Sequence[int]):
    method apply (line 397) | def apply(self, logits: Tensor, tokens: Tensor):
  class ApplyTimestampRules (line 401) | class ApplyTimestampRules(LogitFilter):
    method __init__ (line 402) | def __init__(
    method apply (line 409) | def apply(self, logits: Tensor, tokens: Tensor):
  class DecodingTask (line 444) | class DecodingTask:
    method __init__ (line 450) | def __init__(self, model: "Whisper", options: DecodingOptions):
    method _verify_options (line 499) | def _verify_options(self, options: DecodingOptions) -> DecodingOptions:
    method _get_initial_tokens (line 512) | def _get_initial_tokens(self) -> Tuple[int]:
    method _get_suppress_tokens (line 534) | def _get_suppress_tokens(self) -> Tuple[int]:
    method _get_audio_features (line 557) | def _get_audio_features(self, mel: Tensor):
    method _detect_language (line 575) | def _detect_language(self, audio_features: Tensor, tokens: Tensor):
    method _main_loop (line 587) | def _main_loop(self, audio_features: Tensor, tokens: Tensor):
    method run (line 619) | def run(self, mel: Tensor) -> List[DecodingResult]:
  function decode (line 684) | def decode(model: "Whisper", mel: Tensor, options: DecodingOptions = Dec...

FILE: whisper/model.py
  class ModelDimensions (line 15) | class ModelDimensions:
  class LayerNorm (line 28) | class LayerNorm(nn.LayerNorm):
    method forward (line 29) | def forward(self, x: Tensor) -> Tensor:
  class Linear (line 33) | class Linear(nn.Linear):
    method forward (line 34) | def forward(self, x: Tensor) -> Tensor:
  class Conv1d (line 40) | class Conv1d(nn.Conv1d):
    method _conv_forward (line 41) | def _conv_forward(self, x: Tensor, weight: Tensor, bias: Optional[Tens...
  function sinusoids (line 47) | def sinusoids(length, channels, max_timescale=10000):
  class MultiHeadAttention (line 56) | class MultiHeadAttention(nn.Module):
    method __init__ (line 57) | def __init__(self, n_state: int, n_head: int):
    method forward (line 65) | def forward(
    method qkv_attention (line 87) | def qkv_attention(self, q: Tensor, k: Tensor, v: Tensor, mask: Optiona...
  class ResidualAttentionBlock (line 103) | class ResidualAttentionBlock(nn.Module):
    method __init__ (line 104) | def __init__(self, n_state: int, n_head: int, cross_attention: bool = ...
    method forward (line 117) | def forward(
  class AudioEncoder (line 131) | class AudioEncoder(nn.Module):
    method __init__ (line 132) | def __init__(self, n_mels: int, n_ctx: int, n_state: int, n_head: int,...
    method forward (line 143) | def forward(self, x: Tensor):
  class TextDecoder (line 165) | class TextDecoder(nn.Module):
    method __init__ (line 166) | def __init__(self, n_vocab: int, n_ctx: int, n_state: int, n_head: int...
    method forward (line 180) | def forward(self, x: Tensor, xa: Tensor, kv_cache: Optional[dict] = No...
  class Whisper (line 200) | class Whisper(nn.Module):
    method __init__ (line 201) | def __init__(self, dims: ModelDimensions):
    method embed_audio (line 219) | def embed_audio(self, mel: torch.Tensor):
    method logits (line 222) | def logits(self, tokens: torch.Tensor, audio_features: torch.Tensor):
    method forward (line 225) | def forward(self, mel: torch.Tensor, tokens: torch.Tensor) -> Dict[str...
    method device (line 229) | def device(self):
    method is_multilingual (line 233) | def is_multilingual(self):
    method install_kv_cache_hooks (line 236) | def install_kv_cache_hooks(self, cache: Optional[dict] = None):

FILE: whisper/normalizers/basic.py
  function remove_symbols_and_diacritics (line 27) | def remove_symbols_and_diacritics(s: str, keep=""):
  function remove_symbols (line 46) | def remove_symbols(s: str):
  class BasicTextNormalizer (line 55) | class BasicTextNormalizer:
    method __init__ (line 56) | def __init__(self, remove_diacritics: bool = False, split_letters: boo...
    method __call__ (line 60) | def __call__(self, s: str):

FILE: whisper/normalizers/english.py
  class EnglishNumberNormalizer (line 12) | class EnglishNumberNormalizer:
    method __init__ (line 23) | def __init__(self):
    method process_words (line 160) | def process_words(self, words: List[str]) -> Iterator[str]:
    method preprocess (line 381) | def preprocess(self, s: str):
    method postprocess (line 410) | def postprocess(self, s: str):
    method __call__ (line 435) | def __call__(self, s: str):
  class EnglishSpellingNormalizer (line 443) | class EnglishSpellingNormalizer:
    method __init__ (line 450) | def __init__(self):
    method __call__ (line 454) | def __call__(self, s: str):
  class EnglishTextNormalizer (line 458) | class EnglishTextNormalizer:
    method __init__ (line 459) | def __init__(self):
    method __call__ (line 519) | def __call__(self, s: str):

FILE: whisper/tokenizer.py
  class Tokenizer (line 130) | class Tokenizer:
    method encode (line 137) | def encode(self, text, **kwargs):
    method decode (line 140) | def decode(self, token_ids: Union[int, List[int], np.ndarray, torch.Te...
    method decode_with_timestamps (line 143) | def decode_with_timestamps(self, tokens) -> str:
    method eot (line 161) | def eot(self) -> int:
    method sot (line 166) | def sot(self) -> int:
    method sot_lm (line 171) | def sot_lm(self) -> int:
    method sot_prev (line 176) | def sot_prev(self) -> int:
    method no_speech (line 181) | def no_speech(self) -> int:
    method no_timestamps (line 186) | def no_timestamps(self) -> int:
    method timestamp_begin (line 191) | def timestamp_begin(self) -> int:
    method language_token (line 196) | def language_token(self) -> int:
    method all_language_tokens (line 215) | def all_language_tokens(self) -> Tuple[int]:
    method all_language_codes (line 227) | def all_language_codes(self) -> Tuple[str]:
    method sot_sequence_including_notimestamps (line 232) | def sot_sequence_including_notimestamps(self) -> Tuple[int]:
    method non_speech_tokens (line 237) | def non_speech_tokens(self) -> Tuple[int]:
    method _get_single_token_id (line 267) | def _get_single_token_id(self, text) -> int:
  function build_tokenizer (line 274) | def build_tokenizer(name: str = "gpt2"):
  function get_tokenizer (line 295) | def get_tokenizer(

FILE: whisper/utils.py
  function make_safe (line 10) | def make_safe(string):
  function make_safe (line 15) | def make_safe(string):
  function exact_div (line 20) | def exact_div(x, y):
  function str2bool (line 25) | def str2bool(string):
  function optional_int (line 33) | def optional_int(string):
  function optional_float (line 37) | def optional_float(string):
  function compression_ratio (line 41) | def compression_ratio(text) -> float:
  function format_timestamp (line 46) | def format_timestamp(seconds: float, always_include_hours: bool = False,...
  class ResultWriter (line 63) | class ResultWriter:
    method __init__ (line 66) | def __init__(self, output_dir: str):
    method __call__ (line 69) | def __call__(self, result: dict, audio_path: str):
    method write_result (line 76) | def write_result(self, result: dict, file: TextIO):
  class WriteTXT (line 80) | class WriteTXT(ResultWriter):
    method write_result (line 83) | def write_result(self, result: dict, file: TextIO):
  class WriteVTT (line 88) | class WriteVTT(ResultWriter):
    method write_result (line 91) | def write_result(self, result: dict, file: TextIO):
  class WriteSRT (line 102) | class WriteSRT(ResultWriter):
    method write_result (line 105) | def write_result(self, result: dict, file: TextIO):
  class WriteTSV (line 118) | class WriteTSV(ResultWriter):
    method write_result (line 129) | def write_result(self, result: dict, file: TextIO):
  class WriteJSON (line 137) | class WriteJSON(ResultWriter):
    method write_result (line 140) | def write_result(self, result: dict, file: TextIO):
  function get_writer (line 144) | def get_writer(output_format: str, output_dir: str) -> Callable[[dict, T...
Condensed preview — 43 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,490K chars).
[
  {
    "path": "LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2023 ConsistencyVC\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "README.md",
    "chars": 3854,
    "preview": "# ConsistencyVC-voive-conversion\n\n## Using joint training speaker encoder with consistency loss to achieve cross-lingual"
  },
  {
    "path": "commons.py",
    "chars": 5270,
    "preview": "import math\r\nimport numpy as np\r\nimport torch\r\nfrom torch import nn\r\nfrom torch.nn import functional as F\r\n\r\n\r\ndef init_"
  },
  {
    "path": "configs/cvc-eng-ppgs-three-emo-cycleloss.json",
    "chars": 1298,
    "preview": "{\r\n  \"train\": {\r\n    \"log_interval\": 200,\r\n    \"eval_interval\": 6000,\r\n    \"seed\": 1235,\r\n    \"epochs\": 10000,\r\n    \"lea"
  },
  {
    "path": "configs/cvc-eng-ppgs-three-emo.json",
    "chars": 1298,
    "preview": "{\r\n  \"train\": {\r\n    \"log_interval\": 200,\r\n    \"eval_interval\": 6000,\r\n    \"seed\": 1235,\r\n    \"epochs\": 10000,\r\n    \"lea"
  },
  {
    "path": "configs/cvc-whispers-multi.json",
    "chars": 1300,
    "preview": "{\r\n  \"train\": {\r\n    \"log_interval\": 200,\r\n    \"eval_interval\": 6000,\r\n    \"seed\": 1235,\r\n    \"epochs\": 10000,\r\n    \"lea"
  },
  {
    "path": "configs/cvc-whispers-three-emo.json",
    "chars": 1300,
    "preview": "{\r\n  \"train\": {\r\n    \"log_interval\": 200,\r\n    \"eval_interval\": 2500,\r\n    \"seed\": 1235,\r\n    \"epochs\": 10000,\r\n    \"lea"
  },
  {
    "path": "data_utils_engppg.py",
    "chars": 12023,
    "preview": "import time\r\nimport os\r\nimport random\r\nimport numpy as np\r\nimport torch\r\nimport torch.utils.data\r\n\r\nimport commons \r\nfro"
  },
  {
    "path": "data_utils_whisper.py",
    "chars": 12051,
    "preview": "import time\r\nimport os\r\nimport random\r\nimport numpy as np\r\nimport torch\r\nimport torch.utils.data\r\n\r\nimport commons \r\nfro"
  },
  {
    "path": "losses.py",
    "chars": 1391,
    "preview": "import torch \r\nfrom torch.nn import functional as F\r\n\r\nimport commons\r\n\r\n\r\ndef feature_loss(fmap_r, fmap_g):\r\n  loss = 0"
  },
  {
    "path": "mel_processing.py",
    "chars": 4033,
    "preview": "import math\r\nimport os\r\nimport random\r\nimport torch\r\nfrom torch import nn\r\nimport torch.nn.functional as F\r\nimport torch"
  },
  {
    "path": "models.py",
    "chars": 13375,
    "preview": "import copy\r\nimport math\r\nimport torch\r\nfrom torch import nn\r\nfrom torch.nn import functional as F\r\n\r\nimport commons\r\nim"
  },
  {
    "path": "modules.py",
    "chars": 11793,
    "preview": "import copy\r\nimport math\r\nimport numpy as np\r\nimport scipy\r\nimport torch\r\nfrom torch import nn\r\nfrom torch.nn import fun"
  },
  {
    "path": "ppg.py",
    "chars": 1815,
    "preview": "from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC \r\n#from datasets import load_dataset\r\nimport torch\r\nimport so"
  },
  {
    "path": "ppgemoconvert_exp.py",
    "chars": 4797,
    "preview": "import os\r\nimport argparse\r\nimport torch\r\nimport librosa\r\nimport time\r\nfrom scipy.io.wavfile import write\r\nfrom tqdm imp"
  },
  {
    "path": "preprocess_ppg.py",
    "chars": 1964,
    "preview": "import os\r\nimport numpy as np\r\nimport argparse\r\nimport torch\r\nfrom glob import glob\r\nfrom tqdm import tqdm\r\nfrom whisper"
  },
  {
    "path": "train_eng_ppg_emo_loss.py",
    "chars": 15271,
    "preview": "import os\r\nimport json\r\nimport argparse\r\nimport itertools\r\nimport math\r\nimport torch\r\nfrom torch import nn, optim\r\nfrom "
  },
  {
    "path": "train_whisper_emo.py",
    "chars": 12157,
    "preview": "import os\r\nimport json\r\nimport argparse\r\nimport itertools\r\nimport math\r\nimport torch\r\nfrom torch import nn, optim\r\nfrom "
  },
  {
    "path": "utils.py",
    "chars": 8671,
    "preview": "import os\r\nimport glob\r\nimport sys\r\nimport argparse\r\nimport logging\r\nimport json\r\nimport subprocess\r\nimport numpy as np\r"
  },
  {
    "path": "whisper/LICENSE",
    "chars": 1084,
    "preview": "MIT License\r\n\r\nCopyright (c) 2022 OpenAI\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "whisper/README.md",
    "chars": 7361,
    "preview": "# Whisper\r\n\r\n[[Blog]](https://openai.com/blog/whisper)\r\n[[Paper]](https://arxiv.org/abs/2212.04356)\r\n[[Model card]](http"
  },
  {
    "path": "whisper/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "whisper/assets/gpt2/merges.txt",
    "chars": 470611,
    "preview": "#version: 0.2 - Trained by `huggingface/tokenizers`\r\nĠ t\r\nĠ a\r\nh e\r\ni n\r\nr e\r\no n\r\nĠt he\r\ne r\r\nĠ s\r\na t\r\nĠ w\r\nĠ o\r\ne n\r\n"
  },
  {
    "path": "whisper/assets/gpt2/special_tokens_map.json",
    "chars": 90,
    "preview": "{\"bos_token\": \"<|endoftext|>\", \"eos_token\": \"<|endoftext|>\", \"unk_token\": \"<|endoftext|>\"}"
  },
  {
    "path": "whisper/assets/gpt2/tokenizer_config.json",
    "chars": 236,
    "preview": "{\"unk_token\": \"<|endoftext|>\", \"bos_token\": \"<|endoftext|>\", \"eos_token\": \"<|endoftext|>\", \"add_prefix_space\": false, \"m"
  },
  {
    "path": "whisper/assets/gpt2/vocab.json",
    "chars": 762248,
    "preview": "{\"!\":0,\"\\\"\":1,\"#\":2,\"$\":3,\"%\":4,\"&\":5,\"'\":6,\"(\":7,\")\":8,\"*\":9,\"+\":10,\",\":11,\"-\":12,\".\":13,\"/\":14,\"0\":15,\"1\":16,\"2\":17,\"3"
  },
  {
    "path": "whisper/assets/multilingual/added_tokens.json",
    "chars": 26,
    "preview": "{\"<|endoftext|>\": 50257}\r\n"
  },
  {
    "path": "whisper/assets/multilingual/merges.txt",
    "chars": 456801,
    "preview": "Ġ t\r\nĠ a\r\nĠt h\r\ni n\r\ne r\r\nĠ w\r\nĠ s\r\no u\r\nĠth e\r\nr e\r\no n\r\na t\r\ne n\r\nĠ c\r\ni t\r\ni s\r\nĠ b\r\nn d\r\nĠ d\r\nĠ m\r\nĠ h\r\nĠ o\r\nin g\r\ne"
  },
  {
    "path": "whisper/assets/multilingual/special_tokens_map.json",
    "chars": 90,
    "preview": "{\"bos_token\": \"<|endoftext|>\", \"eos_token\": \"<|endoftext|>\", \"unk_token\": \"<|endoftext|>\"}"
  },
  {
    "path": "whisper/assets/multilingual/tokenizer_config.json",
    "chars": 604,
    "preview": "{\"unk_token\": {\"content\": \"<|endoftext|>\", \"single_word\": false, \"lstrip\": false, \"rstrip\": false, \"normalized\": true, \""
  },
  {
    "path": "whisper/assets/multilingual/vocab.json",
    "chars": 848825,
    "preview": "{\"!\": 0, \"\\\"\": 1, \"#\": 2, \"$\": 3, \"%\": 4, \"&\": 5, \"'\": 6, \"(\": 7, \")\": 8, \"*\": 9, \"+\": 10, \",\": 11, \"-\": 12, \".\": 13, \"/"
  },
  {
    "path": "whisper/audio.py",
    "chars": 4205,
    "preview": "import os\r\nfrom functools import lru_cache\r\nfrom typing import Union\r\n\r\nimport ffmpeg\r\nimport numpy as np\r\nimport torch\r"
  },
  {
    "path": "whisper/decoding.py",
    "chars": 30869,
    "preview": "from dataclasses import dataclass, field\r\nfrom typing import Dict, List, Tuple, Iterable, Optional, Sequence, Union, TYP"
  },
  {
    "path": "whisper/model.py",
    "chars": 9944,
    "preview": "from dataclasses import dataclass\r\nfrom typing import Dict\r\nfrom typing import Iterable, Optional\r\n\r\nimport numpy as np\r"
  },
  {
    "path": "whisper/normalizers/__init__.py",
    "chars": 84,
    "preview": "from .basic import BasicTextNormalizer\r\nfrom .english import EnglishTextNormalizer\r\n"
  },
  {
    "path": "whisper/normalizers/basic.py",
    "chars": 1936,
    "preview": "import re\r\nimport unicodedata\r\n\r\nimport regex\r\n\r\n# non-ASCII letters that are not separated by \"NFKD\" normalization\r\nADD"
  },
  {
    "path": "whisper/normalizers/english.json",
    "chars": 57868,
    "preview": "{\r\n    \"accessorise\": \"accessorize\",\r\n    \"accessorised\": \"accessorized\",\r\n    \"accessorises\": \"accessorizes\",\r\n    \"acc"
  },
  {
    "path": "whisper/normalizers/english.py",
    "chars": 21311,
    "preview": "import json\r\nimport os\r\nimport re\r\nfrom fractions import Fraction\r\nfrom typing import Iterator, List, Match, Optional, U"
  },
  {
    "path": "whisper/tokenizer.py",
    "chars": 10130,
    "preview": "import os\r\nfrom dataclasses import dataclass\r\nfrom functools import lru_cache\r\nfrom typing import List, Optional, Tuple,"
  },
  {
    "path": "whisper/utils.py",
    "chars": 5389,
    "preview": "import json\r\nimport os\r\nimport sys\r\nimport zlib\r\nfrom typing import Callable, TextIO\r\n\r\nsystem_encoding = sys.getdefault"
  },
  {
    "path": "whisperconvert_exp.py",
    "chars": 5521,
    "preview": "import os\r\nimport argparse\r\nimport torch\r\nimport librosa\r\nimport time\r\nfrom scipy.io.wavfile import write\r\nfrom tqdm imp"
  },
  {
    "path": "whisperconvert_longaudio.py",
    "chars": 5097,
    "preview": "import os\nimport argparse\nimport torch\nimport librosa\nimport time\nfrom scipy.io.wavfile import write\nfrom tqdm import tq"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the ConsistencyVC/ConsistencyVC-voive-conversion GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 43 files (2.7 MB), approximately 705.6k tokens, and a symbol index with 299 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!