2013-05-17 32 views
-1

鉴于音频字节数组数据在python像这样检测数字削波在音频信号

inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, card) 

# Set attributes: Mono, 48000 Hz, 16 bit little endian samples 
inp.setchannels(1) 
inp.setrate(48000) 
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE) 
l, data = inp.read() 

如何检测数字削,其价值不数据有超出,以确保它是数字剪辑?

+2

你是什么意思的过载?数字剪辑?数据必须等于16位有符号整数的最大值或最小值,对于超过两个或三个采样,才能进行削波。 –

+0

当您聆听过度驱动的音频时,如果人们触摸麦克风或者电路短路,或者他们的声音太大,它会发生扭曲。我认为这就是所谓的数字剪辑。 –

+0

@RobertHarvey所以基本上介于-32.768和32.767之间?所以如果我使用,如果audioop.max(data,2)> = 32767 ||如果audioop.max(data,2)<= -32767我应该剪辑? –

回答

1

过驱动基本上是增益失真。它将电压提升到驾驶员刚切断电源并扭曲信号的程度。如果你需要从数字的角度来测试这个,那将是很难裁剪的。所以你需要搜索超过最大阈值的值。对于16位音频文件,片段的性质将会是0db。因为如果没有剩余的位可以保存,那么软件会自动将其关闭到一个16位整数可以容纳的最大值。不幸的是,如果赛道之前被扭曲,然后降低音量以便更好地融入混音,则可能无法找到它。除非这样,否则您正在检查的是轨道上唯一的声源,它只是找到轨道的最大值并将其设置为阈值。我可以说虽然硬剪辑显示为方波,所以您可以搜索连续相同的值,时间长于常见的可听波(忽略合法的方波音)。那关于尽我所能为你做的最好的。