开启全民窃听风云——C#智能录音录像录屏程序源码放送!
·引子
我这人从小有个坏毛病,就是喜欢偷窥别人隐私。当然,在道德上,我时刻要求自己做一名正人君子,只不过是心理上有这癖好罢了。所以我从小就对窃听、窃视、黑客技术、破解技术等疯狂着迷!实际上这也是我走上程序员之路的一个重要原因!
去年,克强总理来我司视察的时候,就表示对人工智能寄予厚望。当时,我一面躲在人群中用手机偷拍,一面暗暗下了决心。
其实我一直就有一个伟大的计划,大概诞生于七年前,那就是开发一款窃听软件,开启全民时代的窃听风云!
可惜那七年,所有的心力都付诸房贷,大口吞咽着眼前的苟且,哪还有暇念及诗和远方?——梦想惨被搁浅!
如今终于在上海拥有了自己的不动产,又恰逢中国经济调结构、促发展、新旧动能大转换、大众创业万众创新——看来时势造英雄,是时候大展身手搞一个大新闻了!
正好后来在园子里找到了一篇:实现语音视频录制(demo源码)
于是研究了一段时间,终于如愿以偿的写出了自己的窃听神器!
·C#智能录音录像录屏程序原理与实现
持续采集麦克风得到音频帧,然后根据傅里叶变换得出音频帧的响度大小。当响度大于指定值时,开启录制——将音频帧写入MP3文件;当响度低于指定值时,保持检测指定帧数,若均低于指定值,则关闭录制,此时得到一个音频文件。
配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <!--开启录音的音量阈值--> <add key="/> <!--关闭录音的音量阈值--> <add key="/> <!--低分贝持续检测帧数--> <add key="/> </appSettings> </configuration>
首先,保持采集麦克风。代码如下:
public Form1() { InitializeComponent(); );//采集器,启动程序时即开启 this.microphoneCapturer.AudioCaptured += new ESBasic.CbGeneric<byte[]>(microphoneCapturer_AudioCaptured);//预定采集事件 this.microphoneCapturer.Start();//开始采集 //初始化录制器所需的参数 this.audioFileMaker.Initialize("test.mp3", this.microphoneCapturer.SampleRate, this.microphoneCapturer.ChannelCount); }
其中AudioCaptured事件以20毫秒的周期触发,参数即为麦克风采集得到的PCM数据。而智能录音的逻辑则主要位于AudioCaptured的事件处理函数中。
void microphoneCapturer_AudioCaptured(byte[] data) { this.audioFileMaker.StartMakeFile(data);//录制器安插此处,通过IsWorking参数来控制其工作状态 this.frameCounter.Start(); //帧数计数器安插此处,用于记录在低分贝时期内的总帧数。通过IsWorking参数来控制其工作状态 this.decibelDisplayer1.DisplayAudioData(data);//分贝显示器显示音量 this.label_db.Text = this.decibelDisplayer1.Volume.ToString();//显示当前音量 this.label_RecordSign.Text = this.audioFileMaker.IsWorking ? "正在录音" : "未录音"; this.label_RecordSign.ForeColor = this.audioFileMaker.IsWorking ? Color.Blue : Color.Red; //当音量高于开启值时,打开录制器 if (this.decibelDisplayer1.Volume > int.Parse(ConfigurationManager.AppSettings["DB2Open"])) { this.audioFileMaker.IsWorking = true; } //当记录的低分贝帧数达到一定值时,关闭两个计数器,然后总结这段时间内的帧状况 if (this.lowDBFrameCounter.Count > int.Parse(ConfigurationManager.AppSettings["checkCount"])) { //若低分贝帧数与总帧数一直,即该段时间内持续低分贝,则关闭录制 if (this.lowDBFrameCounter.Count == this.frameCounter.Count) { this.audioFileMaker.IsWorking = false; } this.frameCounter.IsWorking = false; this.lowDBFrameCounter.IsWorking = false; return; } //当音量低于阈值时,开启低分贝计数器与帧数计数器的计数 if (this.decibelDisplayer1.Volume < int.Parse(ConfigurationManager.AppSettings["DB2Close"])) { this.frameCounter.IsWorking = true; this.lowDBFrameCounter.IsWorking = true; this.lowDBFrameCounter.Start(); } }
·开源与后记
源码:点击下载
这个C#智能录音程序其实还可以进一步完善,不仅智能录音,还可以智能录像、录屏,只要你插上一个USB摄像头,便可根据动静录制监控视频。除此之外,再与图像分析技术集成,更可以完成智能防盗等高端功能!
有兴趣实现智能录像的朋友,可以参考:实现语音视频录制(demo源码)
开启全民窃听风云——C#智能录音录像录屏程序源码放送!的更多相关文章
- C#实现录音录像录屏源码
以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上录屏的原理跟录音.录像是差不多的,如果了解了我前面两篇文章中介绍 ...
- [转]C#实现录音录像录屏源码
原文地址:http://www.cnblogs.com/zhuweisky/p/3593917.html 以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要 ...
- Fundebug录屏插件更新至0.6.0
摘要: 录屏插件的性能进一步优化,传输的数据体积大幅度减少. 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 BUG,提 ...
- Fundebug录屏插件更新至0.5.0,新增domain参数
摘要: 通过配置domain来保证"视频"的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 ...
- Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ...
- 再见,付费录屏软件!我用70行Python代码打造免费版!
- 【转载】华为荣耀V9的手机录屏功能如何开启
手机录屏有时候对我们的帮助很大,例如可以录制相应的APP使用教程.微信小程序使用流量讲解视频等,针对于软件开发人员等来说,手机录屏功能针对功能演示视频非常的有帮助.在华为荣耀V9手机中,进行手机录屏有 ...
- Android中手机录屏并转换GIF的两种方式
之前在博文中为了更好的给大家演示APP的实现效果,本人了解学习了几种给手机录屏的方法,今天就给大家介绍两种我个人用的比较舒服的两种方法: (1)配置adb环境后,使用cmd命令将手机界面操作演示存为视 ...
- Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器
请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...
随机推荐
- maven使用与技巧
1.Pom文件介绍与基本组成 说明:全称是Project Object Model,通俗点的话说就是要对构建的项目进行建模. 组成的基本元素: 元素 描述 modelVersion 超级pom版本 g ...
- 监控与管理dubbo服务
Dubbo是阿里多年前开源的一套服务治理框架,在众多互联网企业里应用广泛.本文介绍了一些如何监控与管理dubbo服务.使用的工具与<dubbox 的各种管理和监管>大致相同,本文更侧重于命 ...
- 系列博文-Three.js入门指南(张雯莉)-网格 setInterval方法 requestAnimationFrame方法 使用stat.js记录FPS
第6章 动画 在本章之前,所有画面都是静止的,本章将介绍如果使用Three.js进行动态画面的渲染.此外,将会介绍一个Three.js作者写的另外一个库,用来观测每秒帧数(FPS). CSS3动画那么 ...
- 你不知道的JavaScript--Item7 函数和(命名)函数表达式
1.函数声明与函数表达式 在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier ...
- 利用javaScript实现鼠标在文字上悬浮时弹出悬浮层
在人人,CSDN等一些网站,当鼠标在某个东西上悬浮时,会弹出一个悬浮层,鼠标移开悬浮层消失.比如说CSDN的通知(应该是进入写新文章的页面后页面上方的那个铃铛),具体是什么实现的呢?上代码: < ...
- Doctype作用?标准模式与兼容模式各有什么区别?
Doctype作用?标准模式与兼容模式各有什么区别? DOCTYPE是document type(文档类型)的简写,用来告诉浏览器的解析器使用哪种HTML或XHTML规范解析页面.DOCTYPE不存在 ...
- 8. 使用ueditor添加文章
ueditor是一个很好用的html编辑器,不仅提供了格式化编辑文本的功能,还提供了自动上传图片的功能,现在就使用该编辑器来实现博客文章的编辑功能.1. 使用ueditor过程中会请求一个后台js文件 ...
- JUC中AQS简介
AQS,在java.util.concurrent.locks包中,AbstractQueuedSynchronizer这个类是并发包中的核心,了解其他类之前,需要先弄清楚AQS.在JUC的很多类中都 ...
- ConnectionString 属性尚未初始化
关于"ConnectionString 属性尚未初始化"的问题(如下图), 我在下面一段代码中发现了问题所在: public bool ReturnFlag(stri ...
- Sql语言简介——检索数据
检索数据可以通过SELECT语句来实现. select子句:用于选择数据表.视图中的列. into子句:用于将原表中的结构和数据插入新表中. from子句:用于指定数据来源,包括表.视图和其他sele ...