·引子

我这人从小有个坏毛病,就是喜欢偷窥别人隐私。当然,在道德上,我时刻要求自己做一名正人君子,只不过是心理上有这癖好罢了。所以我从小就对窃听、窃视、黑客技术、破解技术等疯狂着迷!实际上这也是我走上程序员之路的一个重要原因!

去年,克强总理来我司视察的时候,就表示对人工智能寄予厚望。当时,我一面躲在人群中用手机偷拍,一面暗暗下了决心。

其实我一直就有一个伟大的计划,大概诞生于七年前,那就是开发一款窃听软件,开启全民时代的窃听风云!

可惜那七年,所有的心力都付诸房贷,大口吞咽着眼前的苟且,哪还有暇念及诗和远方?——梦想惨被搁浅!

如今终于在上海拥有了自己的不动产,又恰逢中国经济调结构、促发展、新旧动能大转换、大众创业万众创新——看来时势造英雄,是时候大展身手搞一个大新闻了!

正好后来在园子里找到了一篇:实现语音视频录制(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#智能录音录像录屏程序源码放送!的更多相关文章

  1. C#实现录音录像录屏源码

    以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上录屏的原理跟录音.录像是差不多的,如果了解了我前面两篇文章中介绍 ...

  2. [转]C#实现录音录像录屏源码

    原文地址:http://www.cnblogs.com/zhuweisky/p/3593917.html 以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要 ...

  3. Fundebug录屏插件更新至0.6.0

    摘要: 录屏插件的性能进一步优化,传输的数据体积大幅度减少. 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 BUG,提 ...

  4. Fundebug录屏插件更新至0.5.0,新增domain参数

    摘要: 通过配置domain来保证"视频"的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 ...

  5. Fundebug录屏插件更新至0.4.0,修复BUG,优化性能

    摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ...

  6. 再见,付费录屏软件!我用70行Python代码打造免费版!

  7. 【转载】华为荣耀V9的手机录屏功能如何开启

    手机录屏有时候对我们的帮助很大,例如可以录制相应的APP使用教程.微信小程序使用流量讲解视频等,针对于软件开发人员等来说,手机录屏功能针对功能演示视频非常的有帮助.在华为荣耀V9手机中,进行手机录屏有 ...

  8. Android中手机录屏并转换GIF的两种方式

    之前在博文中为了更好的给大家演示APP的实现效果,本人了解学习了几种给手机录屏的方法,今天就给大家介绍两种我个人用的比较舒服的两种方法: (1)配置adb环境后,使用cmd命令将手机界面操作演示存为视 ...

  9. Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...

随机推荐

  1. Linux时间子系统之(十四):tick broadcast framework

    专题文档汇总目录 Notes:BroadcastTick作为cpuidle的waker,硬件基础.BroadcastTick嵌入在当前系统Tick框架中.BroadcastTick设备初始化:周期性T ...

  2. Ribbon负载均衡策略配置

    在这里吐槽一句:网上很多文章真是神坑,你不看还好,看了只会问题越来越多,就连之前的问题都没有解决!!! 不多说了,Ribbon作为后端负载均衡器,比Nginx更注重的是请求分发而不是承担并发,可以直接 ...

  3. java的系统时间,怎么计算从现在到凌晨还剩下多少时间?

    Apache commons-lang3 long milliSecondsLeftToday = 86400000 - DateUtils.getFragmentInMilliseconds(Cal ...

  4. Python Redis 的安装

    安装 可以去pypi上找到redis的Python模块: http://pypi.python.org/pypi?%3Aaction=search&term=redis&submit= ...

  5. 用react重构个人网站 3-22

    问题一:import React from 'react'这个写法是怎么回事? 答案:require是common.js的写法,import是ES6的写法,主要功能都是引入模块,写法上: var mo ...

  6. ajax异步调用遇到的问题

    今天在使用ajax的时候遇到一个问题,也加深了我对ajax的理解,到segmentfault上提问了,现把讨论过程呈现,也可访问链接http://segmentfault.com/q/10100000 ...

  7. 给xmpphp添加了几个常用的方法

    给xmpphp添加给了以下的常用方法: registerNewUser            //注册一个新用户 addRosterContact           //发送添加好友的请求 acce ...

  8. DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)

    前两篇文章主要实现了经销商代注册的仓储与领域逻辑.经销商登录的仓储与相关逻辑,这篇文章主要讲述经销商代注册的用例与经销商登录的查询功能. 一.经销商代注册用例 在经销商代注册用例中,我们需要传递经销商 ...

  9. Java 读书笔记 (五) 目标数据类型转换

    数据类型转换必须满足如下规则: 不能对boolean类型进行类型转换 不能把对象类型转换成不相关类的对象  //那不同类的对象可以用同一个名字命名吗?根据作用域原则,可以吧? 把容量大的转换为容量小的 ...

  10. java 中 一个int类型的num,num&1

    n&1 把n与1按位与,因为1除了最低位,其他位都为0,所以按位与结果取决于n最后一位,如果n最后一位是1,则结果为1.反之结果为0.(n&1)==1: 判断n最后一位是不是1(可能用 ...