对于非 16 位文件,pydub 音频播放*非常*

问题描述

我在 pydub 中使用了一些音频样本(来自 SampleSwap)。它们中的大多数的样本深度/每个样本位为 16,而其他人为 24 或 32。看起来像这样:

import pydub

a = pydub.AudioSegment.from_file('16bit_file.wav')
b = pydub.AudioSegment.from_file('24bit_file.wav')

我遇到的问题是当我试图让它们播放时:

from pydub.playback import play

play(a)
play(b)

虽然 16 位文件可以正常播放,但 24 位文件惊天动地,严重到潜在的扬声器损坏。将我的计算机设置为最小音量后,24 位播放的音量与普通音乐以最大音量播放时的音量大致相同。它超级扭曲、锐利和剪辑。

我很确定我已经将它隔离为位深度问题。用其他软件播放时,声音都正常播放。我可以将问题声音转换为 16 位 using sox 或使用 pydub.AudioSegment.set_sample_width(2) 并且问题消失了。我也直接通过 simpleaudio 进行播放(从 pydub 复制代码here)并遇到同样的问题。

主要问题是我正在编写一些用于处理音频的代码,我想分享这些代码,但我不希望用户因听到这些破坏的声音之一而体验到身体或精神上的伤害。我唯一的解决方法是立即将任何使用加载的声音/锁定音频播放的位深度转换为仅 16 位文件;这适用于我正在测试的文件,但是 a) 我不知道它是否适用于所有声音/计算机,并且 b) 我认为这在 pydub 中不应该是一个问题。我还想在播放之前以某种方式检查声音的音量(使用例如 a.dBFSa.max),但我没有发现任何似乎可靠的东西(或者指标不是真正相关与音量,或者该值似乎更多地表明了额外位提供的动态范围)。

所以我的问题是:

  • 为什么在播放非 16 位文件时,在 pydub 中播放声音大得惊人且失真?
  • 我能做些什么来防止它?
  • 我是否遗漏了一些关于音频播放的明显内容

我知道这(希望)不是那么可重现;如果有帮助,我可以尝试记录并发布。我还可以指出我在 SampleSwap 上使用的声音,但问题似乎确实是由任何不是 16 位的文件引起的(即我可以将声音转换为 32 位并产生问题)。>

这是一些版本信息:

  • ffmpeg 4.4
  • PyAudio 0.2.11
  • pydub 0.25.1
  • simpleaudio 1.0.4

问题出在 2019 款 MacBook Pro、Catalina 10.15.7 上。我还测试了我的 Windows 10 桌面(具有与上述类似的版本),但不是上述问题,而是沉

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)