• 智能语音录制程序


    一个变态程序的窥私欲:智能语音录制程序——窃听神器(源码放送!)

     

    1. 

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

           或许正如弗洛伊德所说的那样,潜意识里面暗藏的原始欲望,是我们一切行为背后的真正动因。就像不可一世的希特勒和他野心勃勃的奋斗一样,归根到底只是因为他是一个自卑的抖S。

    2.

            今天说的这个事呢还要从两年前说起。那时我还在念大学。说来也巧,咱们宿舍的4个人都有一个共同的毛病——梦呓。(也就是说梦话啦。)一开始我就发现了,他们三个说梦话我都听到过,而且好几次都是大段的说,信息量很大。可是由于大家都是来自五湖四海,口音各不相同,要一口气听懂真心很难,就算偶尔听懂了几句,第二天醒来又忘记了。结果后来大家一说起来,我自己也有说梦话,而且说得绘声绘色,跟演电影似的!

           弗洛伊德说:梦是通往潜意识的桥梁。梦里藏着连你自己都不知道的心理秘密。别人的梦里藏着什么不可告人的秘密?自己在梦境又中透露了什么无法言说的隐私?——这一切激起了我内心深处的强烈欲望!

           请原谅一个变态程序员的窥私欲!

    3.

           所以后来我就一直想写一个程序,能够在夜深更阑的时候,根据音量的大小,智能的录制声音——这样一来就能把那些梦话一网打尽!然后再来分析其中隐藏的秘密,就如同探囊取物了。

           可是,这样一个程序要怎么写呢?还是到园子里找找资源。

           后来找到了一篇:实现语音视频录制(demo源码)

          于是研究了一段时间,终于如愿以偿的写出了自己的窃听神器!

           

    4.原理与实现

          持续采集麦克风得到音频帧,然后根据傅里叶变换得出音频帧的响度大小。当响度大于指定值时,开启录制——将音频帧写入MP3文件;当响度低于指定值时,保持检测指定帧数,若均低于指定值,则关闭录制,此时得到一个音频文件。

           配置文件如下:

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <!--开启录音的音量阈值-->
        <add key="DB2Open" value="30"/>
        <!--关闭录音的音量阈值-->
        <add key="DB2Close" value="30"/>
        <!--低分贝持续检测帧数-->
        <add key="checkCount" value="80"/>
      </appSettings>
    </configuration>
    复制代码

          首先,保持采集麦克风。代码如下:

    复制代码
    public Form1()
    {
          InitializeComponent();
          this.microphoneCapturer = CapturerFactory.CreateMicrophoneCapturer(0);//采集器,启动程序时即开启
          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();
                }            
            }
    复制代码

     5.后记

          有了这个程序之后,每晚睡前开启,第二天一早定能斩获颇丰!

          这些梦话往往有着巨大的信息量,而当被一个精神分析的高手掌握后,内心的秘密更是无处遁形,赤裸裸的人性一览无余!

          而且,有时白天上课的时候也开启,偶尔还会有些意外的收货,这个就不多说了。

          源码:点击下载

          这个程序其实还可以进一步完善,不仅智能录音,还可以智能录像,只要你插上一个USB摄像头,便可根据动静录制监控视频。除此之外,再与图像分析技术集成,更可以完成智能防盗等高端功能!

          有兴趣实现智能录像的朋友,可以参考:实现语音视频录制(demo源码)

       ———————————————————————————————————————————

          附推荐阅读:学妹来实习,看我如何步步为营!

  • 相关阅读:
    Linux-netstat
    API接口防止参数篡改和重放攻击
    Java中遍历Map的几种方式
    Java泛型中的标记符含义
    Iterator 和 for...of 循环
    Promise 对象
    Reflect
    正则要求密码长度最少12位,包含至少1个特殊字符,2个数字,2个大写字母和一些小写字母。
    一个JS正则表达式,一个正实数,整数部分最多11位 小数部分最多 8位
    java阿里云短信发送配置
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5869920.html
Copyright © 2020-2023  润新知