正确使用 librosa.get_duration 避免参数错误
librosa.get_duration()是无参函数,不能直接传入音频数组;必须显式指定y(一维音频信号)和sr(采样率)关键字参数,否则会报错“takes0positionalargumentsbut1wasgiven”。

librosa.get_duration() 是无参函数,不能直接传入音频数组;必须显式指定 y(一维音频信号)和 sr(采样率)关键字参数,否则会报错“takes 0 positional arguments but 1 was given”。
librosa.get_duration() 是无参函数,不能直接传入音频数组;必须显式指定 `y`(一维音频信号)和 `sr`(采样率)关键字参数,否则会报错“takes 0 positional arguments but 1 was given”。
在使用 librosa.get_duration() 计算音频时长时,一个常见误区是将其误当作接受音频张量的普通函数调用。实际上,librosa.get_duration() 是一个不接收任何位置参数(positional arguments)的函数,其设计要求所有输入必须通过关键字参数明确传入:核心参数为 y(一维音频时间序列)和 sr(采样率)。若直接写成 lb.get_duration(swap_ad[1]),Python 会尝试将 swap_ad[1] 作为第一个位置参数传递,而该函数签名中并未定义位置参数,因此触发 TypeError。
正确做法是:确保传入的是单声道、一维的 NumPy 数组,并显式指定 y= 和 sr=。例如,在你的代码中,swap_ad[1] 是多通道(如立体声)的二维数组(shape: [n_samples, n_channels]),需进一步切片获取单声道信号(如 swap_ad[1][:, 0] 表示第一通道的所有采样点),同时传入已知采样率 sr:
import numpy as np
import librosa as lb
import soundfile as sp
def decoding_stems(file_name):
audio, sr = sp.read_stems(file_name, sample_rate=22050)
swap_ad = np.swapaxes(audio, 1, 2) # shape: [n_samples, n_channels, n_stems]
# ✅ 正确:提取第1个stem的第1个声道,显式传入 y 和 sr
duration = lb.get_duration(y=swap_ad[1][:, 0], sr=sr)
# 计算可被6整除的总帧数(每段0.6秒 → 6帧/段)
duration_length = int((duration // 0.6) * 6)
return stft_frame(file_name, duration_length, 6)⚠️ 注意事项:
- swap_ad[1] 若本身已是单声道(shape: [n_samples]),则直接用 y=swap_ad[1] 即可,但仍必须加 y= 前缀;
- 不要省略 sr 参数——即使与 read_stems 中的 sample_rate 一致,get_duration() 也不会自动推断;
- 若音频含多个声道且需整体时长,应先混音(如 np.mean(swap_ad[1], axis=1))再传入,而非直接传入二维数组;
- 该错误常在训练集运行成功、测试集报错时出现,往往因测试音频格式/通道数与训练不一致导致 swap_ad[1] 维度异常,建议在调用前添加形状校验(如 assert swap_ad[1].ndim <= 2)。
总结:牢记 librosa.get_duration() 的函数签名是 get_duration(*, y=None, sr=22050, ...) —— 星号 * 表示其后所有参数均为仅限关键字参数(keyword-only)。任何位置传参都会引发 TypeError。始终使用 y=... 和 sr=... 显式调用,即可彻底规避此问题。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













