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

如何用Python将44100采样率WAV转22050且不改变音高速度

解决WAV采样率转换后听感异常的问题

问题根源

你的代码存在关键错误:librosa.load() 默认会把音频文件重采样到22050Hz(librosa的默认采样率),而你后续又指定 orig_sr=44100 调用 librosa.resample(),相当于对已经转成22050Hz的音频再次错误执行降采样,最终导致音频失真、听感异常。

修正方案

方案1:保留原始采样率加载后重采样

加载音频时指定 sr=None,让librosa读取原始44100Hz的采样率数据,再执行正确的重采样:

import os
import librosa
import soundfile as sf

# 提前创建目标目录,避免写入失败
os.makedirs("wavs", exist_ok=True)

# 遍历目录下的WAV文件,跳过非WAV格式
for filename in os.listdir("All_wavs"):
    if not filename.endswith(".wav"):
        continue
    # 加载原始采样率的音频数据
    y, sr = librosa.load(f"All_wavs/{filename}", sr=None)
    # 校验原始采样率,避免处理不符合要求的文件
    if sr != 44100:
        print(f"跳过:{filename} 采样率不为44100")
        continue
    # 执行重采样
    resampled_data = librosa.resample(y, orig_sr=sr, target_sr=22050)
    # 保存转换后的文件
    sf.write(f"wavs/{filename}", resampled_data, samplerate=22050)

方案2:用SoundFile直接读取原始数据(更精准)

绕过librosa的默认采样率处理,直接用soundfile读取原始音频数据,再进行重采样:

import os
import librosa
import soundfile as sf

os.makedirs("wavs", exist_ok=True)

for filename in os.listdir("All_wavs"):
    if not filename.endswith(".wav"):
        continue
    # 读取原始音频数据与采样率
    y, sr = sf.read(f"All_wavs/{filename}")
    if sr != 44100:
        print(f"跳过:{filename} 采样率不为44100")
        continue
    # 重采样
    resampled_data = librosa.resample(y, orig_sr=sr, target_sr=22050)
    sf.write(f"wavs/{filename}", resampled_data, samplerate=22050)

额外提示

  • 若处理多声道音频(如立体声),上述代码会自动保留声道信息,不会改变声道数量。
  • 建议先备份原始音频文件,避免操作失误导致数据丢失。

内容的提问来源于stack exchange,提问作者Max Melichov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:02:41