Python、C++、Java...有没有用于比较音频信号的API?
有没有人知道有没有适合Python、C++或Java的库,或者其他外部应用,可以用来检查mp3文件中是否存在特定的音频失真?我的问题是这样的:
我有一个非常强大的Django应用程序,它会自动为一个电台制作播客,涵盖所有不同的节目。但是大约每周一次,负责录音的电脑会录到损坏的音频,这种音频有特定的干扰模式,听起来像直升机的声音,音频会在每秒内掉落好几次。我并不指望能修复这些音频文件(我尝试过用好的编辑软件手动修复,但完全没希望),我想要的是检测这种损坏是否存在,这样我就可以自动切换到备份录音。外部工具最好能在Linux上运行,但如果是无头模式(不强制显示图形界面),在Windows上也可以接受。
谢谢。
2 个回答
0
试试这个叫做 BASS 的库,看看它是否能满足你的需求。
4
我觉得你只需要对mp3文件进行快速傅里叶变换(fft),这样你应该能看到一个很低频的尖峰,这个尖峰对应于音频中的大幅下降。不过我不是数字信号处理方面的专家,所以不确定这样做是否有效,但试试看也很简单。
你可以使用Python的numpy库来实现这个。链接
只需将mp3文件读入一个数组,然后进行fft。作为测试,我建议你先绘制一下图表(比如使用matplotlib),对比一下损坏的版本和正常的版本,看看你能否轻松识别出损坏的文件。然后希望你能从这些fft结果中写出一个简单的算法来检测损坏的文件。
要将mp3文件读入数据缓冲区,你可以使用PyMedia http://pymedia.org/
我没有使用过PyMedia,所以不太确定如何将mp3读入缓冲区(我想这应该不会太复杂),但之后绘制fft图就简单多了:
from numpy import *
from numpy.fft import *
import pylab
# place code to read the mp3 file into buf[] here.
buf_fft = fft(buf, 1024)
pylab.plot(fftfreq(1024, 0.1), abs(buf_fft))
pylab.show()