魔兽世界自动钓鱼系统的设计与实现 - 鱼上钩声音事件的提取(2)

标签:
python魔兽世界系统设计与实现钓鱼 |
分类: 编程实战 |
上一篇介绍了系统调用录音的过程,这一部分介绍后续部分,也是难点所在。
声音事件的描述
这一部分对我来说太难了!虽然知道声音事件的识别可以用机器学习的方法来做,但是首先把我难倒的就是声音在计算机中的表示是什么,怎样对它们抽取特征?如果想用分类的方法来做的话,训练集又如何得到?想想这些直接头大了。幸运的是在Google Scholar上面经过几次关键字改进得到了两篇文章,看完这两篇文章,虽然我不一点都不懂他们方法的具体实现,但是我竟然有思路了!这两篇文章一个是做音频分割与分类[1],第二作者就是多媒体检索的创始人张宏江,是他2002年在微亚时候的工作;另一篇是做音乐描述子[2]的,第二作者是Sony的,用过Sony或者更早的Sony Ericsson的应该都知道Track ID这个软件,听到好听但是不知道歌名的歌是可以用这个软件搜出来的!
两篇文章中所提到的描述特征很多,有很多与我想做的也息息相关,但是基本上都没看到具体怎么做,只是知道概念以及作用。这里只说一个我觉得比较好的特征Zero Cross Rate:
http://s2/bmiddle/439371b54da8ac1d975c1&690-
T是窗口的长度,看起来像II{A}的部分代表满足条件则这部分值为1,否则为0。从文章中的描述来看,这一特征是可以很好的反映音乐与背景、音乐与人声的差别的,在这里对我录制的一段从钓鱼到上钩的过程的进行波形和ZCR值进行对比,可以发现两者还是有一定关系的。为什么不直接用波形呢?波形的高低受播放声音大小影响,区分能力不强。
http://s5/mw690/439371b54da8abb3234a4&690-
最后从图上我找了一个非常弱非常弱的判断准则:连续7个窗口的zcr均值大于0.4,标准差小于0.02。http://www/uc/myshow/blog/misc/gif/E___7398ZH00SIGG.gif-
将前期工作的代码拼接起来,就完成了最终代码,还没有铺垫的代码多……识别成功!成功率?有待测试
"""
Created on Wed Apr 17 15:09:56 2013
@author: du00
"""
import
import
FORMAT
CHANNELS
RATE
CHUNK
RECORD_SECONDS
p
stream
print("* recording")
buf
for
print('Got a Bite!')
stream.stop_stream()
stream.close()
p.terminate
[1] L. Lu, H.-J. Zhang, and H. Jiang, “Content analysis for audio classification and segmentation,” Ieee Trans. Speech Audio Process., vol. 10, no. 7, pp. 504–516, 2002.
[2] F. Gouyon, F. Pachet, and O. Delerue, “On the use of zero-crossing rate for an application of classification of percussive sounds,” in Proceedings of the COST G-6 conference on Digital Audio Effects (DAFX-00), Verona, Italy, 2000.