From 5fec3c9e58fceda85fa2daf7deec2492372dac8a Mon Sep 17 00:00:00 2001
From: Chong Zhang <iriszhangchong@gmail.com>
Date: 星期二, 23 五月 2023 17:01:47 +0800
Subject: [PATCH] Update modelscope_models.md

---
 funasr/fileio/sound_scp.py |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/funasr/fileio/sound_scp.py b/funasr/fileio/sound_scp.py
index dc872b0..c752fe6 100644
--- a/funasr/fileio/sound_scp.py
+++ b/funasr/fileio/sound_scp.py
@@ -2,10 +2,14 @@
 from pathlib import Path
 from typing import Union
 
+import random
 import numpy as np
 import soundfile
 import librosa
 from typeguard import check_argument_types
+
+import torch
+import torchaudio
 
 from funasr.fileio.read_text import read_2column_text
 
@@ -32,6 +36,7 @@
         always_2d: bool = False,
         normalize: bool = False,
         dest_sample_rate: int = 16000,
+        speed_perturb: Union[list, tuple] = None,
     ):
         assert check_argument_types()
         self.fname = fname
@@ -40,19 +45,31 @@
         self.normalize = normalize
         self.data = read_2column_text(fname)
         self.dest_sample_rate = dest_sample_rate
+        self.speed_perturb = speed_perturb
 
     def __getitem__(self, key):
         wav = self.data[key]
         if self.normalize:
             # soundfile.read normalizes data to [-1,1] if dtype is not given
             array, rate = librosa.load(
-                wav, sr=self.dest_sample_rate, mono=not self.always_2d
+                wav, sr=self.dest_sample_rate, mono=self.always_2d
             )
         else:
             array, rate = librosa.load(
-                wav, sr=self.dest_sample_rate, mono=not self.always_2d, dtype=self.dtype
+                wav, sr=self.dest_sample_rate, mono=self.always_2d, dtype=self.dtype
             )
 
+        if self.speed_perturb is not None:
+            speed = random.choice(self.speed_perturb)
+            if speed != 1.0:
+                array, _ = torchaudio.sox_effects.apply_effects_tensor(
+                    torch.tensor(array).view(1, -1), rate,
+                    [['speed', str(speed)], ['rate', str(rate)]])
+                array = array.view(-1).numpy()
+
+        if array.ndim==2:
+            array=array.transpose((1, 0))
+
         return rate, array
 
     def get_path(self, key):

--
Gitblit v1.9.1