一些深度语音预处理小细节

一、Datasets大体格式

class SDataset(Dataset):
    """Dataset to load NSynth data."""
    def __init__(self, audio_dir):
        super().__init__() 
        '''
        一般用于加载数据,比如对某个路径下的语音遍历,设置语音系统初始值。
		'''
    
    def __len__(self):
        '''
        返回长度
        '''
    
    def __getitem__(self, index):
        '''
        一般用于对加载后的语音信号进行处理,比如标准化,去噪,截取语音小段等
        '''

二、__init__环节举例

通常必备的语音初始化环节

    def __init__(self, audio_dir):
        super().__init__() 
        self.segment_length = 8000  # 采样率
        self.filesnames =[]   
        self.filesnames .extend(glob.glob(audio_dir+"/*.wav")) #加载语音

三、标准化

为了方便训练,通常会有一个标准化的过程。(可选)

    def normalize_data(self, x):
        x = x / max(abs(x)+1e-20)
        return x

四、__getitem__环节举例

必备的语音处理环节,比如对语音的某一段进行截取,而不是全部输入语音。比如消除一些静音段

    def __getitem__(self, index):
       seq_max = 秒 x self.segment_length  # 期望处理的语音片段
       audio = torchaudio.load(self.filenames[index])[0] # 加载数据
       ans = torch.zeros(1, seq_max)  # 最大长度语音
       '''
       按照长度和标准差筛选语音
       '''
       while len(audio ) < seq_max or np.isclose(np.std(audio), 0): 
                index= (index+ 1) % self.__len__()
                file_path = self.filesnames [index]
                sr, audio = wavfile.read(file_path)
                audio = self.normalize_data(audio)
        
        audio = torchaudio.load(self.filenames[index])[0]
       '''
       如果长度大于最大语音片段,进行处理
       '''
        while 1:
                if len(in_data) == seq_max :
                    loc = 0
                else:
                    loc = torch.randint(len(audio)-seq_max , (1,))
                selected_seg = in_data[loc: loc + seq_max]
                if not np.isclose(np.std(selected_seg), 0): 
                    seg = selected_seg
                    break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于弋gg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值