Esempio n. 1
0
    def test_data(self, src_speaker=None):
        """为转换数据选择一个发音者"""
        # 如果传入了源发音者,即将这个参数赋值给r_s变量
        if src_speaker:
            r_s = src_speaker
        # 如果没有参数传入
        else:
            # 就自动调用对象的choose方法随机选取一个发音者
            r_s = self.choose()
        # 将这个源发音者的名称和原本的数据集地址拼接在一起作为新路径
        # 因为这个数据集是以发音者的名字作为子集的,所以要找到对应发音者的子数据集必须这样处理
        # 如果采用不同的数据集命名方式那么处理方式就会不同
        p = os.path.join(self.datadir, r_s)
        # 根据路由找到该路径下的所有wav格式文件
        wavfiles = librosa.util.find_files(p, ext='wav')

        res = {}
        # 遍历这个数据集对象
        for f in wavfiles:
            # 获取对应的文件名
            filename = os.path.basename(f)
            # librosa.load方法f为文件地址,sr参数为采样率,如果保存原有采样率则赋值为None
            # dtype为精度,将返回一个音频时间序列和一个音频采样率
            # 因为音频采样率不被使用,所以以_作为变量名占位保存
            # 该方法还有mono :bool,是否将信号转换为单声道
            # offset :float,在此时间之后开始阅读(以秒为单位)
            # duration:float,仅加载这么多的音频(以秒为单位)
            wav, _ = librosa.load(f, sr=SAMPLE_RATE, dtype=np.float64)
            # 使用自定义的world_features获取对应的wav数据
            f0, timeaxis, sp, ap, coded_sp = world_features(
                wav, SAMPLE_RATE, FFTSIZE, FEATURE_DIM)
            # 调用自定义的forward_process方法对编码频谱包络进行处理
            coded_sp_norm = self.norm.forward_process(coded_sp.T, r_s)
            # 将res添加对应的字典值,第一维键名为文件名
            if not res.__contains__(filename):
                res[filename] = {}
            res[filename]['coded_sp_norm'] = np.asarray(coded_sp_norm)
            res[filename]['f0'] = np.asarray(f0)
            res[filename]['ap'] = np.asarray(ap)
        # 返回处理后的数据字典与目标发音者标签
        return res, r_s
    def test_data(self, src_speaker=None):
        '''choose one speaker for conversion'''
        if src_speaker:
            r_s = src_speaker
        else:
            r_s = self.choose()
        p = os.path.join(self.datadir, r_s)
        wavfiles = librosa.util.find_files(p, ext='wav')
       
        res = {}
        for f in wavfiles:
            filename = os.path.basename(f)
            wav, _ = librosa.load(f, sr=SAMPLE_RATE, dtype=np.float64)
            f0, timeaxis, sp, ap, coded_sp = world_features(wav, SAMPLE_RATE, FFTSIZE, FEATURE_DIM)
            coded_sp_norm = self.norm.forward_process(coded_sp.T, r_s)

            if not res.__contains__(filename):
                res[filename] = {}
            res[filename]['coded_sp_norm'] = np.asarray(coded_sp_norm)
            res[filename]['f0'] = np.asarray(f0)
            res[filename]['ap'] = np.asarray(ap)
        return res , r_s