Python 分割音频段

Python 分割音频段,python,numpy,wav,pydub,audiosegment,Python,Numpy,Wav,Pydub,Audiosegment,在这里,我练习分析音频(wav格式),以消除给定范围内的低音量并导出到新音频。它被格式化为int16数组,最大值为+(一些数字),最小值为-(一些数字)。现在,由于输出音频太小,我认为问题出在错误的范围内。那么如何选择合适的范围呢?我给出了最小值/2和最大值/2之间的值 from pydub import AudioSegment import io import scipy.io.wavfile import IPython import numpy as np w = AudioSegme

在这里,我练习分析音频(wav格式),以消除给定范围内的低音量并导出到新音频。它被格式化为int16数组,最大值为+(一些数字),最小值为-(一些数字)。现在,由于输出音频太小,我认为问题出在错误的范围内。那么如何选择合适的范围呢?我给出了最小值/2和最大值/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")
从pydub导入音频段
输入io
导入scipy.io.wav文件
进口伊皮顿
将numpy作为np导入
w=音频段。从_文件(“input.wav”,format=“wav”)
a=w.获取样本的数组()
fp_arr=np.array(a).T.astype(np.int16)
平均值=(最大值(fp_arr)/2.aType(np.int16)
avg2=(最小值(fp_arr)/2.aType(np.int16)
b=[]
对于a中的d:
如果d不在范围内(avg2,avg):#davg:
b、 附加(d)
myarray=np.asarray(b)
wav_io=io.BytesIO()
scipy.io.wavfile.write(wav_io,16000,myarray)
波形搜索(0)
声音=音频段。来自波形(wav io)
file_handle=sound.export(“output.wav”,format=“wav”)

如果您拒绝了一些样本而没有替换它们,则生成的波形变短是正常的。如果你要做的是一种噪声门,你可能应该用沉默代替消除的样本

然而,与任何动态处理器一样,真正的噪声门的工作原理略有不同。第一个if跟随信号的包络线,这意味着它不考虑绕轴的每个振荡(如果这样做,你会在每个振荡中剪切一些样本,意味着每秒几十次,这可能不是你想要做的)。相反,噪声门在最高时间水平上分析振幅的变化。在该步骤之后,结果envelope不再包含负值。当这个包络线低于定义的阈值(比如功率为0.125,或16或24位的等效整数值)时,需要几毫秒的时间才能稍微淡出(这意味着它将振幅乘以一个从1到0递增的因子)。相反,当信号再次超过阈值时,它会稍微淡入,重新打开闸门

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