【问题标题】:Splitting AudioSegments拆分音频段
【发布时间】:2021-03-13 18:42:09
【问题描述】:

在这里,我正在练习分析音频(wav 格式),以消除给定范围内的低音量并导出到新音频。它被格式化为 int16 数组,最大值给出 +(某个数字),最小值给出 -(某个数字)。现在结果是输出音频太小了,我认为问题出在错误的范围内。那么如何选择合适的范围呢?我在 min/2 和 max/2 之间给出。

from pydub import AudioSegment
import io
import scipy.io.wavfile
import IPython
import numpy as np

w = AudioSegment.from_file("input.wav", format="wav")
a = w.get_array_of_samples()

fp_arr = np.array(a).T.astype(np.int16)
avg = (max(fp_arr)/2).astype(np.int16)
avg2= (min(fp_arr)/2).astype(np.int16)

b=[]

for d in a:
   if d not in range(avg2,avg) :#d<avg2 and d>avg:
      b.append(d)

myarray = np.asarray(b)
wav_io = io.BytesIO()
scipy.io.wavfile.write(wav_io, 16000, myarray)
wav_io.seek(0)

sound = AudioSegment.from_wav(wav_io)
file_handle = sound.export("output.wav", format="wav")

【问题讨论】:

    标签: python numpy wav pydub audiosegment


    【解决方案1】:

    如果您拒绝某些样本而不用某些东西替换它们,则生成的波较短是正常的。如果你打算做的是一种噪声门,你可能应该用沉默代替消除的样本。

    然而,真正的噪声门,与任何 动态处理器 一样,工作方式略有不同。首先,如果遵循信号的包络线,这意味着它不考虑围绕轴的每次振荡(如果这样做,您将在每个振荡内切割一些样本,这意味着每秒几十次,这可能不是你想做什么)。取而代之的是,噪声门分析最高时间级别的幅度变化。在该步骤之后,生成的信封不再包含负值。当这个包络低于定义的阈值时(假设功率为 0.125,或 16 位或 24 位的等效整数值),需要几毫秒才能稍微淡出(这意味着它将幅度乘以一个因子逐渐从 1 到 0)。反之,当信号再次超过阈值时,它会以一点淡入重新打开闸门。

    如果您绕过这些小淡入/淡出,生成的波形将包含令人不快的数字点击。如果您绕过用于平滑幅度的包络跟随器,您将过于频繁地关闭门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多