Spaces:
Running
Running
| """ | |
| 改用librosa。 | |
| (不是ffmpeg不好用,而是少装一个软件更有性价比) | |
| """ | |
| import librosa | |
| import numpy as np | |
| class DictToAttrRecursive(dict): | |
| def __init__(self, input_dict): | |
| super().__init__(input_dict) | |
| for key, value in input_dict.items(): | |
| if isinstance(value, dict): | |
| value = DictToAttrRecursive(value) | |
| self[key] = value | |
| setattr(self, key, value) | |
| def __getattr__(self, item): | |
| try: | |
| return self[item] | |
| except KeyError: | |
| raise AttributeError(f"Attribute {item} not found") | |
| def __setattr__(self, key, value): | |
| if isinstance(value, dict): | |
| value = DictToAttrRecursive(value) | |
| super(DictToAttrRecursive, self).__setitem__(key, value) | |
| super().__setattr__(key, value) | |
| def __delattr__(self, item): | |
| try: | |
| del self[item] | |
| except KeyError: | |
| raise AttributeError(f"Attribute {item} not found") | |
| # def load_audio(file, sr=16000): | |
| # try: | |
| # y, sr = librosa.load(file, sr=sr, dtype=np.float32) | |
| # except Exception as e: | |
| # raise RuntimeError(f"Failed to load audio: {e}") | |
| # | |
| # return y.flatten(), sr | |
| # import ffmpeg | |
| # import numpy as np | |
| # | |
| # | |
| # def load_audio(file, sr): | |
| # try: | |
| # # https://github.com/openai/whisper/blob/main/whisper/audio.py#L26 | |
| # # This launches a subprocess to decode audio while down-mixing and resampling as necessary. | |
| # # Requires the ffmpeg CLI and `ffmpeg-python` package to be installed. | |
| # file = ( | |
| # file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") | |
| # ) # 防止小白拷路径头尾带了空格和"和回车 | |
| # out, _ = ( | |
| # ffmpeg.input(file, threads=0) | |
| # .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr) | |
| # .run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True) | |
| # ) | |
| # except Exception as e: | |
| # raise RuntimeError(f"Failed to load audio: {e}") | |
| # | |
| # return np.frombuffer(out, np.float32).flatten() | |