使用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
相关产品推荐
相关产品推荐

