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

使用pydub调整wav音量失效及减小音量触发TypeError问题

问题根因

  • 冗余依赖&无效操作:你代码中导入的sys、from os import path从未被使用,属于不必要的依赖可直接删除;额外执行的f = open(input_file, 'r+')没有任何作用,pydub会自主读取音频文件,不需要你手动打开源MP3文件。
  • 输出文件模式错误:你以ab追加模式打开result.wav,第一次写入转码后的原始音频后,调整音量生成的新音频会被追加到文件末尾,播放器默认只会读取开头的原始音频段,因此你会觉得音量调整没有生效。
  • 减法操作类型错误:你贴出的代码里已经做了n = int(n)的类型转换,实际触发报错的运行版本应该是漏写了这行代码,导致n还是字符串类型,执行减法时就会触发类型不匹配的报错。

修复方案

你可以直接删掉所有手动打开文件的操作,直接通过文件路径调用pydub的读写接口即可,修复后的代码如下:

import os
from pydub import AudioSegment

input_file = input("Enter the path of your file: ")
assert os.path.exists(input_file), "I did not find the file at, " + str(input_file)
print("Hooray we found your file!")

# 直接转码导出为wav,无需手动打开文件
sound = AudioSegment.from_mp3(input_file)
sound.export("result.wav", format="wav")

flag = input("Do you want to make your .wav louder/quieter?(Y/N) ")
if flag.upper() == 'Y':
    sinal = input("Type '+' for making it louder or '-' for making it quieter: ")
    n = int(input("Type an int number for adjust the .wav in dB: "))
    # 直接复用已加载的sound对象,不用重复读取wav文件
    if sinal == '+':
        adjusted_sound = sound + n
    elif sinal == '-':
        adjusted_sound = sound - n
    # 直接覆盖导出即可,不需要追加写入
    adjusted_sound.export("result.wav", format="wav")

修复说明:

  • 去掉了所有冗余依赖和无效的手动打开文件操作
  • 转码和调整音量后直接覆盖导出result.wav,不会出现多段音频拼接的问题
  • 复用了已经加载到内存的音频对象,不需要重复读取磁盘上的wav文件,执行效率更高
  • 统一对输入的调整数值做类型转换,避免遗漏转换导致类型报错
  • 对flag判断做了大小写兼容,用户输入小写y也可以触发调整流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:06:04