您的位置:首页 >正确使用 librosa.get_duration 避免参数错误
发布于2026-04-15 阅读(0)
扫一扫,手机访问

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)⚠️ 注意事项:
总结:牢记 librosa.get_duration() 的函数签名是 get_duration(*, y=None, sr=22050, ...) —— 星号 * 表示其后所有参数均为仅限关键字参数(keyword-only)。任何位置传参都会引发 TypeError。始终使用 y=... 和 sr=... 显式调用,即可彻底规避此问题。
上一篇:全民K歌耳返功能使用教程
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9