0

0

如何正确使用 librosa.resample 进行音频重采样

聖光之護

聖光之護

发布时间:2025-12-29 14:37:36

|

681人浏览过

|

来源于php中文网

原创

如何正确使用 librosa.resample 进行音频重采样

本文详解 librosa 0.10.1+ 版本中 `librosa.resample` 的调用规范,重点解决因参数传递方式错误(如误用位置参数)导致的 “takes 1 positional argument but 3 were given” 报错,并提供完整、健壮的多通道音频重采样实践代码。

在使用 librosa 对音频进行重采样(如将原始采样率统一为 16 kHz 以适配 wav2vec2 模型输入)时,一个常见且易被忽视的陷阱是:新版 librosa(≥0.8.0,尤其 0.10.1+)已将 resample 函数改为仅接受关键字参数(keyword-only arguments)。这意味着 orig_sr 和 target_sr 必须显式以命名参数形式传入,而不能再像旧版那样作为位置参数顺序传递。

你遇到的报错:

resample() takes 1 positional argument but 3 were given

正是源于以下错误写法:

librosa.resample(audio_signal, original_sr, 16000)  # ❌ 错误:后两个参数被当作位置参数

而正确调用方式必须严格遵循函数签名(注意 * 分隔符):

AdsGo AI
AdsGo AI

全自动 AI 广告专家,助您在数分钟内完成广告搭建、优化及扩量

下载
librosa.resample(y=audio_signal, orig_sr=original_sr, target_sr=16000)  # ✅ 正确
# 或简写(y 是第一个参数,可省略名称;但 orig_sr/target_sr 必须带名)
librosa.resample(audio_signal, orig_sr=original_sr, target_sr=16000)  # ✅ 推荐

以下是修复后的完整、生产就绪的重采样代码(兼容单/双通道,含异常处理与类型安全):

import librosa
import numpy as np

# 假设 database['audio'] 是 list of np.ndarray(每个元素为 waveform),database['psr'] 是原始采样率列表
new_sr = []
resampled_audios = []

for i, (audio_signal, original_sr) in enumerate(zip(database['audio'], database['psr'])):
    try:
        # 确保输入为 numpy 数组且为浮点型(librosa.resample 要求)
        audio_signal = np.asarray(audio_signal, dtype=np.float64)

        # 处理多通道:逐通道重采样并堆叠
        if audio_signal.ndim > 1:
            resampled_channels = []
            for ch in audio_signal:
                ch_res = librosa.resample(ch, orig_sr=original_sr, target_sr=16000)
                resampled_channels.append(ch_res)
            resampled_audio = np.stack(resampled_channels, axis=0)
        else:
            # 单通道直接重采样
            resampled_audio = librosa.resample(audio_signal, orig_sr=original_sr, target_sr=16000)

        resampled_audios.append(resampled_audio)
        new_sr.append(16000)

    except Exception as e:
        print(f"⚠️  索引 {i} 音频重采样失败(原始采样率 {original_sr} Hz): {e}")
        # 可选:保留原音频或跳过,此处设为 None 便于后续排查
        resampled_audios.append(None)
        new_sr.append(None)

# 更新数据库
database['audio'] = resampled_audios
database['newsr'] = new_sr

关键注意事项

  • 永远显式指定 orig_sr= 和 target_sr= —— 这是避免报错的核心;
  • librosa.resample 默认使用高质量重采样器(soxr_hq),无需额外配置即可满足 ASR 模型训练需求;
  • 若原始音频为整型(如 int16),务必先转为 float32/float64,否则可能引发数值溢出或静音;
  • 对于立体声等多通道音频,不可直接对整个二维数组调用 resample(它不支持 batch 维度),必须按通道循环处理;
  • 如需更高性能批量处理,建议改用 torchaudio.transforms.Resample(PyTorch 原生,GPU 加速支持)替代。

掌握这一参数规范,不仅能解决当前报错,更是安全集成 librosa 到语音预处理流水线的重要基础。

相关专题

更多
pytorch是干嘛的
pytorch是干嘛的

pytorch是一个基于python的深度学习框架,提供以下主要功能:动态图计算,提供灵活性。强大的张量操作,实现高效处理。自动微分,简化梯度计算。预构建的神经网络模块,简化模型构建。各种优化器,用于性能优化。想了解更多pytorch的相关内容,可以阅读本专题下面的文章。

431

2024.05.29

Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

20

2025.12.22

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

1

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 46.6万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号