You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:57:04