标题:监控声卡发声
只看楼主
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
结帖率:100%
 问题点数:0 回复次数:5 
监控声卡发声
  最近,需要用一台电脑24小时播出网络电台。由于受网络稳定性的影响,电台经常被阻停,要手工刷新网页来重新播出。
  为免麻烦,决定做一个能监控声卡是否正在发声软件,只有在声卡静音达到规定时间的情况下才判断播出中断,程序自动刷新播出。查找了好多这方面的信息,发现资料很少,要不是泛泛地说用waveout系列api却没有一个实例,要不就是提供的实例是win7、net的,不适合我的环境。期间电台老停播,为解燃眉之急,我采纳了另一论坛热心坛友的建议:监控网络流量,如流量低于某一阀值一定时间,就判断网络阻塞,播出中断,需要自动刷新;监控网络流量的实例很多,小半天功夫就完成了软件,经测试,有一定的实用性,最长可以达一星期不间断播出,但仍会中断,比如系统或杀毒软件自动升级阻塞播出,这时软件是无法通过流量监控的(因为这时的流量很大)。
  决定还是监控声卡是否发声可靠,又无休止地百度,终于找到一个第三方dll库可以达到要求,可惜需要注册,否则不定时弹出要求你注册的窗口,还有很响的叮声播出,这肯定不行。无奈用ollydbg跟踪调试,花了一晚上时间总算破解了该dll,绕过了注册提示,具备了实用性。现就开发过程中的经验心得纪要如下(最后提供监控声卡发声的源代码):
  一、不能直接使用网页内嵌电台的方式播出,首先网页很多能发出“的”声的flash,还不时弹出其他窗口;其次有好多做电台的网站都是二道甚至三道贩子,链接级数过多,可靠性差。因此需要找到网络电台真正的地址,现在flash内嵌的播放器已经很难找到真正的网址了,只有万能的sniffer(网络嗅探)是王牌工具。
  二、要破解还是用ollydbg吧,softice虽然调试的权限更高(可调试系统驱动),但不直观、繁琐。ollydbg很好用,一般小小的加密能很快搞掉。
  三、要熟悉api,尤其是user32的,能让你破解事半功倍。破解首先应根据经验从常用api断点入手,其次从内存数据入手(如显示出的字符串),没办法了才是整段整段汇编代码跟踪的。
  四、大多dll并不是按照vb的接口设计的,不能在工程里引用,但你仍然可以通过声明使用dll里的函数,就是你常见的Private Declare Function ...,对未注册第三方dll的使用,一般和程序放在同一个目录,在使用前最好加个代码:chdir app.path,这样才能确保dll正常使用。
  五、上声卡发声监控源代码,为尊重第三方版权,源代码并没有提供绕过注册提示的代码,只简要介绍了下方法,不过我已生成了一个没有注册提示的可执行文件做示范。
录音sdk调用.rar (232.5 KB)


搜索更多相关主题的帖子: 台电脑 稳定性 监控 流量 
2014-02-25 22:18
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
历害

DO IT YOURSELF !
2014-02-25 22:26
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:0 
厉害+1
虽然咱想到了无声电影。
2014-02-26 19:42
vbvcr51
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:18
帖 子:364
专家分:1724
注 册:2013-11-3
得分:0 
用vb的身,windows api做心。
2014-02-27 14:10
xlhcy2014
Rank: 2
等 级:论坛游民
帖 子:33
专家分:81
注 册:2014-2-6
得分:0 
厉害,要是有注释就好了,具体实现原理,我还没看懂
2014-03-07 01:14
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:0 
通过最近几天使用,发现该dll只能连续监控15分钟,要继续监控,必须关断程序再进入才行。解决办法是:发声的是一个程序A(如网络电台、mp3播放器),声音监控的是另一个程序B,B由A加载,B每运行14分钟自动退出,A发现B不存在就再加载B,B监控得到的音量通过DDE提交给A。这样一来,即可不间断监控声音了。我的网络电台播出程序是当发觉超过2分钟B提交的声音幅度为0时则判断网络电台停播(声卡不出声了),即执行刷新电台播出的操作,目前工作良好。

DDE是两程序间通讯的一种方法,好像叫做内存动态数据交换,方便、可靠、好用。

[ 本帖最后由 lowxiong 于 2014-3-7 10:41 编辑 ]
2014-03-07 09:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-427673-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.233274 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved