當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch apply_effects_file用法及代碼示例


本文簡要介紹python語言中 torchaudio.sox_effects.apply_effects_file 的用法。

用法:

torchaudio.sox_effects.apply_effects_file(path: str, effects: List[List[str]], normalize: bool = True, channels_first: bool = True, format: Optional[str] = None) → Tuple[torch.Tensor, int]

參數

  • path(path-like 對象或者file-like 對象) -

    音頻數據的來源。當函數不是由 TorchScript 編譯時(例如 torch.jit.script ),接受以下類型:

    • path-like:文件路徑

    • file-like :具有read(size: int) -> bytes方法的對象,最多返回size長度的字節字符串。

    TorchScript編譯函數時,隻允許str類型。

    注意:此參數特意注釋為str,隻是為了與TorchScript 編譯器兼容。

  • effects(List[List[str]]) -效果列表。

  • normalize(bool,可選的) -True 時,此函數始終返回 float32 ,並且樣本值被歸一化為 [-1.0, 1.0] 。如果輸入文件是整數 WAV,則給出 False 會將生成的張量類型更改為整數類型。此參數對除整數 WAV 類型以外的格式無效。

  • channels_first(bool,可選的) -如果為 True,則返回的張量具有維度 [channel, time] 。否則,返回的張量維度為 [time, channel]

  • format(str或者None,可選的) -用給定的格式覆蓋格式檢測。當 libsox 無法從標頭或擴展名推斷格式時,提供參數可能會有所幫助,

返回

生成的張量和采樣率。如果 normalize=True ,則生成的張量始終是 float32 類型。如果normalize=False 並且輸入音頻文件是整數 WAV 文件,則生成的張量具有相應的整數類型。 (注意不支持 24 位整數類型)如果 channels_first=True ,則生成的張量具有維度 [channel, time] ,否則為 [time, channel]

返回類型

(張量,int)

將 sox 效果應用於音頻文件並將生成的數據加載為張量

注意

此函數的工作方式與sox 命令非常相似,但有細微差別。例如,sox commnad 會自動添加某些效果(例如 speedpitch 等之後的 rate 效果),但此函數僅適用於給定的效果。因此,要實際應用speed 效果,您還需要為rate 效果提供所需的采樣率,因為在內部,speed 效果隻會改變采樣率並保持樣本不變。

示例 - 基本用法
>>>
>>> # Defines the effects to apply
>>> effects = [
...     ['gain', '-n'],  # normalises to 0dB
...     ['pitch', '5'],  # 5 cent pitch shift
...     ['rate', '8000'],  # resample to 8000 Hz
... ]
>>>
>>> # Apply effects and load data with channels_first=True
>>> waveform, sample_rate = apply_effects_file("data.wav", effects, channels_first=True)
>>>
>>> # Check the result
>>> waveform.shape
torch.Size([2, 8000])
>>> waveform
tensor([[ 5.1151e-03,  1.8073e-02,  2.2188e-02,  ...,  1.0431e-07,
         -1.4761e-07,  1.8114e-07],
        [-2.6924e-03,  2.1860e-03,  1.0650e-02,  ...,  6.4122e-07,
         -5.6159e-07,  4.8103e-07]])
>>> sample_rate
8000
示例 - 對數據集應用隨機速度擾動
>>>
>>> # Load data from file, apply random speed perturbation
>>> class RandomPerturbationFile(torch.utils.data.Dataset):
...     """Given flist, apply random speed perturbation
...
...     Suppose all the input files are at least one second long.
...     """
...     def __init__(self, flist: List[str], sample_rate: int):
...         super().__init__()
...         self.flist = flist
...         self.sample_rate = sample_rate
...
...     def __getitem__(self, index):
...         speed = 0.5 + 1.5 * random.randn()
...         effects = [
...             ['gain', '-n', '-10'],  # apply 10 db attenuation
...             ['remix', '-'],  # merge all the channels
...             ['speed', f'{speed:.5f}'],  # duration is now 0.5 ~ 2.0 seconds.
...             ['rate', f'{self.sample_rate}'],
...             ['pad', '0', '1.5'],  # add 1.5 seconds silence at the end
...             ['trim', '0', '2'],  # get the first 2 seconds
...         ]
...         waveform, _ = torchaudio.sox_effects.apply_effects_file(
...             self.flist[index], effects)
...         return waveform
...
...     def __len__(self):
...         return len(self.flist)
...
>>> dataset = RandomPerturbationFile(file_list, sample_rate=8000)
>>> loader = torch.utils.data.DataLoader(dataset, batch_size=32)
>>> for batch in loader:
>>>     pass

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torchaudio.sox_effects.apply_effects_file。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。