librosa调用stft时报Audio buffer is not Fortran-contiguous错误求助
librosa调用stft触发「Audio buffer is not Fortran-contiguous」错误解决方案
根本原因
- 你之前对
a[0]、a[1]单独转Fortran连续数组再赋值回原二维数组的操作无效:原数组a本身是C风格(行优先)存储的二维数组,你将转换后的内容写入对应行后,再通过a[0]索引取出的切片依然是C连续的,满足不了校验要求 - 该报错多出现在librosa 0.10.x及以上版本,这部分版本对输入数组的内存布局校验比旧版本严格,所以半年前旧版本能运行的代码升级后会报错
可行解决方案
方案1:调用stft时当场转换(最省事)
直接在传参时对输入的声道数组做转换,不需要提前修改原数组:
a, sr = librosa.load("mywave.wav",sr=self.sr,mono=False) stft_L = librosa.stft(np.asfortranarray(a[0]), n_fft=self.stft_frame,hop_length= self.hop_frame, window='hann') # 右声道同理:stft_R = librosa.stft(np.asfortranarray(a[1]), 其余参数)
方案2:提前提取声道为单独变量
将每个声道单独提取为独立的一维数组后再转换,不要存回原二维数组:
a, sr = librosa.load("mywave.wav",sr=self.sr,mono=False) left_ch = np.asfortranarray(a[0]) right_ch = np.asfortranarray(a[1]) stft_L = librosa.stft(left_ch, n_fft=self.stft_frame,hop_length= self.hop_frame, window='hann')
方案3:回退librosa到无校验的旧版本
如果不想修改业务代码,可以直接安装0.9.x版本的librosa,原有逻辑可直接运行:
pip install librosa==0.9.2
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

