Exemple #1
0
    def analysis_for_valid_batch(self,
                                 features,
                                 output_features,
                                 out_dir,
                                 sample_rate=16000,
                                 **kwargs):
        kwargs['sample_rate'] = sample_rate
        super(LSTMAcousticModel,
              self).analysis_for_valid_batch(features, output_features,
                                             out_dir, **kwargs)

        # Synthesise outputs using WORLD.
        synth_dir = os.path.join(out_dir, 'synth')
        os.makedirs(synth_dir, exist_ok=True)

        lf0, vuv, mcep, bap = utils.detach_batched_seqs(
            output_features['lf0'],
            output_features['vuv'],
            output_features['mcep'],
            output_features['bap'],
            seq_len=features['n_frames'])

        for _lf0, _vuv, _mcep, _bap, _file_id in zip(lf0, vuv, mcep, bap,
                                                     features['name']):
            _vuv = _vuv > 0.5

            _f0 = np.exp(_lf0)
            _f0 = savgol_filter(_f0, 7, 1)

            wav_path = os.path.join(synth_dir, f'{_file_id}.wav')
            wav = world_with_reaper_f0.synthesis(_f0, _vuv, _mcep, _bap,
                                                 sample_rate)
            file_io.save_wav(wav, wav_path, sample_rate=sample_rate)
    def analysis_for_valid_batch(self, features, output_features, out_dir, sample_rate=16000, **kwargs):
        kwargs['sample_rate'] = sample_rate
        super(F0Model, self).analysis_for_valid_batch(features, output_features, out_dir, **kwargs)

        # Synthesise outputs using WORLD.
        synth_dir = os.path.join(out_dir, 'synth')
        os.makedirs(synth_dir, exist_ok=True)

        lf0 = output_features['lf0'].cpu().detach().numpy()

        vuv = features['vuv'].cpu().detach().numpy()
        sp = features['sp'].cpu().detach().numpy()
        ap = features['ap'].cpu().detach().numpy()

        n_frames = features['n_frames'].cpu().detach().numpy()
        for i, (n_frame, name) in enumerate(zip(n_frames, features['name'])):

            f0_i = np.exp(lf0[i, :n_frame, 0])
            f0_i = savgol_filter(f0_i, 7, 1)
            f0_i = f0_i * vuv[i, :n_frame, 0]

            f0_i = f0_i.astype(np.float64)
            sp_i = sp[i, :n_frame].astype(np.float64)
            ap_i = ap[i, :n_frame].astype(np.float64)

            wav_path = os.path.join(synth_dir, '{}.wav'.format(name))
            wav = pyworld.synthesize(f0_i, sp_i, ap_i, sample_rate)
            file_io.save_wav(wav, wav_path, sample_rate=sample_rate)
def process(wav_dir, id_list, out_dir, calculate_normalisation,
            normalisation_of_deltas):
    """Processes wav files in id_list, saves the log-F0 and MVN parameters to files.

    Args:
        wav_dir (str): Directory containing the wav files.
        id_list (str): List of file basenames to process.
        out_dir (str): Directory to save the output to.
        calculate_normalisation (bool): Whether to automatically calculate MVN parameters after extracting F0.
        normalisation_of_deltas (bool): Also calculate the MVN parameters for the delta and delta delta features.
    """
    file_ids = get_file_ids(id_list=id_list)

    make_dirs(os.path.join(out_dir, 'lf0'), file_ids)
    make_dirs(os.path.join(out_dir, 'vuv'), file_ids)
    make_dirs(os.path.join(out_dir, 'mcep'), file_ids)
    make_dirs(os.path.join(out_dir, 'bap'), file_ids)
    make_dirs(os.path.join(out_dir, 'wav_synth'), file_ids)

    for file_id in file_ids:
        wav_path = os.path.join(wav_dir, f'{file_id}.wav')
        wav, sample_rate = file_io.load_wav(wav_path)

        f0, vuv, mcep, bap = analysis(wav, sample_rate)
        lf0 = np.log(f0)

        wav_synth = synthesis(f0, vuv, mcep, bap, sample_rate)

        file_io.save_bin(lf0, os.path.join(out_dir, 'lf0', f'{file_id}.npy'))
        file_io.save_bin(vuv, os.path.join(out_dir, 'vuv', f'{file_id}.npy'))
        file_io.save_bin(mcep, os.path.join(out_dir, 'mcep', f'{file_id}.npy'))
        file_io.save_bin(bap, os.path.join(out_dir, 'bap', f'{file_id}.npy'))
        file_io.save_wav(wav_synth,
                         os.path.join(out_dir, 'wav_synth', f'{file_id}.wav'),
                         sample_rate)

    if calculate_normalisation:
        process_mvn(out_dir,
                    'lf0',
                    id_list=id_list,
                    deltas=normalisation_of_deltas,
                    out_dir=out_dir)
        process_mvn(out_dir,
                    'mcep',
                    id_list=id_list,
                    deltas=normalisation_of_deltas,
                    out_dir=out_dir)
        process_mvn(out_dir,
                    'bap',
                    id_list=id_list,
                    deltas=normalisation_of_deltas,
                    out_dir=out_dir)
    def save_file(self, data, base_name, data_dir):
        r"""Saves the feature as a wavfile using scipy.io.wavfile.write

        Parameters
        ----------
        data : int or float or bool or `np.ndarray`, shape (seq_len, feat_dim)
            Data loaded from the file specified.
        base_name : str
            The name (without extensions) of the file to be loaded.
        data_dir : str
            The directory containing all feature types for this dataset.
        """
        file_path = self.file_path(base_name, data_dir)
        file_io.save_wav(data, file_path, self.sample_rate)
Exemple #5
0
def batch_synth(features, output_features, names, out_dir, sample_rate=16000):
    synth_dir = os.path.join(out_dir, 'synth')
    os.makedirs(synth_dir, exist_ok=True)

    lf0, vuv, sp, ap = utils.detach_batched_seqs(output_features['lf0'],
                                                 features['vuv'],
                                                 features['sp'],
                                                 features['ap'],
                                                 seq_len=features['n_frames'])

    for i, name in enumerate(names):
        f0_i = np.exp(lf0[i])
        f0_i = savgol_filter(f0_i, 7, 1)

        wav_path = os.path.join(synth_dir, '{}.wav'.format(name))
        wav = world.synthesis(f0_i,
                              vuv[i],
                              sp[i],
                              ap[i],
                              sample_rate=sample_rate)
        file_io.save_wav(wav, wav_path, sample_rate=sample_rate)
Exemple #6
0
def batch_synth(lf0,
                vuv,
                mcep,
                bap,
                seq_len=None,
                names=None,
                out_dir=None,
                sample_rate=16000):
    if out_dir is not None:
        if names is None:
            raise ValueError(
                'If `out_dir` is given, then `names` of individual sentences must also be given'
            )

        synth_dir = os.path.join(out_dir, 'synth')
        make_dirs(synth_dir, names)

    lf0, vuv, mcep, bap = utils.detach_batched_seqs(lf0,
                                                    vuv,
                                                    mcep,
                                                    bap,
                                                    seq_len=seq_len)

    wavs = []
    for i, name in enumerate(names):
        f0_i = np.exp(lf0[i])
        f0_i = savgol_filter(f0_i, 7, 1) if len(f0_i) >= 7 else f0_i

        wav = world.synthesis(f0_i,
                              vuv[i],
                              mcep[i],
                              bap[i],
                              sample_rate=sample_rate)
        wavs.append(wav)

        if out_dir is not None:
            wav_path = os.path.join(synth_dir, f'{names[i]}.wav')
            file_io.save_wav(wav, wav_path, sample_rate=sample_rate)

    return wavs