Kinect开发笔记之八C#实现Kinect声音的追踪

       声明:本文中特征多针对Kinect for windows 1.0,新版的Kinect Sensor可能有部分数值或方法有一定变化,请知晓。

       Kinect的声音来自下方的4个麦克风组成的麦克风阵列。传感器内含数字信号处理器,可以用来强化接受声音的清晰度同时处理噪声,根据4个麦克风接收音量的强弱,Kinect可以分析出声音的来源,但这种分析受限于水平方向,垂直方向上的具体位置,Kinect则无法分辨。另外,Kinect对前后方的声音判断也是不敏感的,即接收到声音后它默认判断是从前方声源发出,且会自动将麦克风阵列对准环境中声音最大的来源位置。

       Kinect的声音接收覆盖角度为100度,即大致以右边两个摄像头的中点(也相当于Kinect的中心点)为中心,左右各延伸50度。
       
       开发者可以通过API,让麦克风阵列锁定特定来源区域的声音,比如通过用户的骨骼位置锁定声音检测区域。但是要注意Kinect每次仅能锁定区间范围为10度的区域作为接收范围,这样可以增强该用户的声音识别精确度。



        Kinect的声音采样频率为16kHz,采样位数为16位(2Byte,即声音分级为2的16次方)。一般音乐CD为44kHz,但那是高频的音乐质量,16kHz进行语音识别或者语音通信已经很足够了。

       我们可以打开之前我们打开过的Kinect Explorer-WPF,在下方就是声音的检测,我们可以发出声音,Kinect会输出我们声源的相关信息。如下图所示,这是我在Kinect的一侧咳嗽了一声后,Kinect Explorer反馈给我的结果。

       Beam Angle是麦克风阵列对准声音来源的角度即当前麦克风阵列朝向并重点采集声音的角度;Source Angle是经过Kinect内部算法处理后,计算出的声源角度;而最后一个confidence属性,是用来判断声音强弱或者声音远近的标识。如果要确定声源方向的话,Source Angle更加准确一些。



下面我们使用Visual Studio来写一个侦测声音来源方向的程序。
先贴出代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Kinect;namespace KinectListener
{class Program{static KinectAudioSource AudioSourceSetup(KinectAudioSource source) {//对我们的KinectAudioSource对象进行初始化source.NoiseSuppression = true;//开启抑制噪声功能source.AutomaticGainControlEnabled = true;//自动增益控制功能source.BeamAngleMode = BeamAngleMode.Adaptive;//设置BeamAngleMode为adaptive属性,适合环境噪声大的环境return source;}static void SoundTracking(KinectAudioSource source) {source = AudioSourceSetup(source);//对传入的KinectAudioSource对象初始化source.BeamAngleChanged += audioSource_BeamAngleChanged;source.SoundSourceAngleChanged += audioSource_SoundSourceAngleChanged;//初始化后,注册时间处理函数source.Start();//启动KinectAudioSource对象}static void audioSource_BeamAngleChanged(object sender, BeamAngleChangedEventArgs e) {//事件处理函数 取得麦克风阵列最新对准的方向string output = "侦测到Beam Angle :"+ e.Angle.ToString();Console.WriteLine(output);}static void audioSource_SoundSourceAngleChanged(object sender, SoundSourceAngleChangedEventArgs e) {//事件处理函数 取得当前声音来源方向string output = "侦测到Source Angle:" + e.Angle.ToString() + ", Source Confidence :" + e.ConfidenceLevel.ToString();Console.WriteLine(output);}static void Main(string[] args){KinectSensor sensor = KinectSensor.KinectSensors[0];//获得传感器sensor.Start();//启动传感器KinectAudioSource source = sensor.AudioSource;//要使用Kinect的声音功能,必须从KinectSensor对象中取出AudioSensor对象SoundTracking(source);//追踪声音Console.WriteLine("退出请按空格键");string maxmin1 = ",最大Beam Angle :" + KinectAudioSource.MaxBeamAngle + ",最小Beam Angle :" + KinectAudioSource.MinBeamAngle;string maxmin2 = ",最大Source Angle :" + KinectAudioSource.MaxSoundSourceAngle + ",最小Source Angle :" + KinectAudioSource.MinSoundSourceAngle;Console.WriteLine(maxmin1);Console.WriteLine(maxmin2);while (Console.ReadKey().Key != ConsoleKey.Spacebar) { }sensor.Stop();}}
}

       首先还是和上次一样,在解决方案资源管理器中要先添加Kinect引用,然后添加Microsoft.Kinect的命名空间。

       要使用Kinect的声音API,首先必须从KinectSensor对象中取出 AudioSource对象;同时对于声音方向,微软提供了BeamAngle和SoundSourceAngle属性;对于音量的大小,则有SoundSourceAngleConfidence属性。

简单讲解一下这个程序:
       一开始是AudioSourceSetup方法,它有一个形式参数,需要我们传入一个KinectAudioSource对象,然后方法进行初始化后将这个对象返回。

       后面是SoundTracking方法,也就是声音追踪,它同样有一个KinectAudioSource类型的形参,对这个传入的KinectAudioSource对象首先执行AudioSourceSetup(),然后方法中注册了两个事件处理函数,这两句话是告诉系统,一旦侦测到SoundSourceAngle和BeamAngle的数值改变,那就调用这里注册的事件处理函数。
source.BeamAngleChanged += audioSource_BeamAngleChanged;
source.SoundSourceAngleChanged += audioSource_SoundSourceAngleChanged;


       接下来,就是我们的事件函数。第一个用于取得麦克风阵列最新对准的方向;第二个用于获取当前声音来源方向,它们会输出当前准确的数值。

        Main方法就很简单了,最后设计了一个空格退出的while循环。

       我们可以运行这个程序来发出声音,看看返回给我们的数值。当你在同一个地方发出声响的时候,他是只会提示SoundSourceAngle的变化的,如果你换一个位置,它才会再次显示BeamAngle的数值。而且当你一段时间内不发出任何声音的时候,SoundSource会逐渐变化归零。

备注:代码修改自《Kinect体感程序设计入门》

2015.4.6   17:21
By Mr.Losers




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国服服务器_《Minecraft我的世界》第三方服务器的基本储备

今天我想单独来聊一聊Minecraft我的世界第三方服务器的发展。世外荒原玩家作品我来到头条的第一篇文章就发表了一篇我对Minecraft现状的看法,现在国服的状态对老玩家不是很友好。(这不说明国服的运营战略路线是有问题的)因此诞生了一大堆第三方服务器。世外荒原玩家…

Unity中Time.deltaTime的含义及其应用

相信Unity的开发者或者初学者都对Time.deltaTime并不陌生,我们经常会在代码中用到或者看到它,今天去官方的API文档查了一下,感觉它非常有用,所以翻译一下以引导初学者。 原文网址: file:///Applications/Unity/Unity…

unity3d曲线text文本

测试.pngusing System; using System.Collections.Generic;namespace UnityEngine.UI.Extensions {/// <summary>/// Curved text.让文本按照曲线进行显示 【注意对Image的变形 也是可以的】/// 说明&#xff1a; 对Text的操作就和 shadow 和 outline 组件类似。/// <…

Unity中Quaternion的含义及其使用

官网API文档&#xff1a; file:///Applications/Unity/Unity.app/Contents/Documentation/html/en/ScriptReference/Quaternion.html Quaternion的意思是四元数&#xff0c;用于代表旋转。 它们是紧致的&#xff0c;不会产生万向节死锁并且能够很容易被插值。Unity内使用Quat…

Python PIPEs

2019独角兽企业重金招聘Python工程师标准>>> https://www.python-course.eu/pipes.php https://www.tutorialspoint.com/python/os_pipe.htm 转载于:https://my.oschina.net/zungyiu/blog/1860857

延时消息_Handler的消息延时是怎么实现的

消息延时做了什么特殊处理&#xff1f;是发送延时&#xff0c;还是消息处理延时&#xff1f;延时的精度如何&#xff1f;通常我们使用Handler的消息延时都是调用sendMessageDelayed函数实现的&#xff0c;其中delayMillis是需要延时的毫秒。通过跟踪sendMessageDelayed函数可以…

4 关卡流 进阶_全息武器全解析,记住4个点全区第一就是你!

实不相瞒&#xff0c;每次看着全息武器糖糖都感觉自己像钢铁侠高端大气上档次&#xff0c;低调奢华有内涵那么问题来了&#xff01;这个全息武器究竟该怎么玩才能成为真正的钢铁侠&#xff1f;我的使命之全息武器【作者&#xff1a;D38激战阿曼——潜龙小生】全息武器在属性增加…

【渗透过程】嘉缘网站 --测试

声明&#xff1a;本片文章测试网站为测试靶场 信息收集阶段&#xff1a; 首先使用了一些常见的扫描工具&#xff1a;nmap 御剑 使用nmap扫描端口 发现网站开放了 135 139 445 3306 等端口 这里可以看到网站开放了一些危害较高端口&#xff1a;135 225等 使用御剑扫描到一些敏感…

文档过期打不开怎么办_标准的产品需求文档在这里!(详细说明版)(2)

接着上篇继续写&#xff0c;上篇请点击标准的产品需求文档在这里&#xff01;(详细说明版)(1)入口已经写完&#xff0c;读此文档的无论是研发人员还是测试都已经知晓此需求需要做的从哪里进入&#xff0c;接下来就是主菜了&#xff0c;进入以后该干嘛。进入以后当然就是新的页面…

Macbook全系列详细分析及购机指南

时至今日&#xff0c;极佳的用户体验、强大的功能、独特的设计感、广阔的市场和无可比拟的品牌魅力已经让苹果公司各种电子产品的迅速普及&#xff0c;其中Macbook逐渐被越来越多的人所青睐&#xff0c;尤其是从事一些特定行业的工作者&#xff08;比如IT、电信、互联网以及艺术…

惠普m1005连接电脑步骤_电脑连接电视机详细步骤方法图文

电脑连接电视机有什么好处呢&#xff1f;小编想到了几点&#xff0c;那就是屏幕大&#xff0c;而且可以在电视机上使用网络看到自己想看的剧。还有就是可以更多的人一起做着来看。所以总的来说电脑连接电视机还是好处比较多的。下面我就来告诉你们电脑怎么连接电视机。有的时候…

对程序实施精准手术!阿里安全猎户座实验室首创“自动逆向机器人”

近日举办的看雪安全开发者峰会上&#xff0c;阿里安全猎户座实验室首度向外界展示了最新的研究成果——“自动逆向机器人”。该机器人可以像医生一样“望闻问切”&#xff0c;对程序进行显微镜级别的勘察&#xff0c;并完整“回放”其运作过程&#xff0c;因此&#xff0c;可以…

《魔兽世界》的魅力究竟在哪儿?

写在前面&#xff1a;《魔兽世界》&#xff08;World of Warcraft&#xff0c;后面简称WOW&#xff09;&#xff0c;是由暴雪开发的一款大型角色扮演网络游戏&#xff0c;曾经付费的正式用户一度超过1150万人&#xff0c;覆盖244个国家和地区&#xff0c;是曾经的“世界第一网游…

Service Mesh所应对的8项挑战

2019独角兽企业重金招聘Python工程师标准>>> Lori Macvittie 微服务架构是把双刃剑&#xff0c;我们享受它带来的开发速度&#xff08;development velocity&#xff09;&#xff0c;却也不得不面对服务间通讯带来的复杂性问题。 目前大多数扩展容器化微服务的架构多…

什么叫内部银团_什么是紫钛晶?紫钛晶是不是天然水晶?

都说紫钛晶是紫水晶与钛晶的结合&#xff0c;听上去好像这种水晶不是天然的&#xff0c;像是人工合成的&#xff0c;事实上并非如此&#xff0c;紫钛晶也是天然形成的水晶&#xff0c;由于内部的包裹体是金色的&#xff0c;因此被称为紫钛晶。和菩心晶舍家的晶舞倾城一起了解紫…

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

1、缓存代理概述&#xff1a; 作为应用层的代理服务软件&#xff0c;Squid主要提供缓存加速和应用层过滤控制的功能 2、代理的工作机制&#xff1a; &#xff08;1&#xff09;当客户机通过代理来请求web页面时&#xff0c;指定的代理服务器会先检查自己的缓存&#xff0c;若缓…

Bootstrap开发框架视频整理

最近到客户处进行实地培训&#xff0c;整理了很多培训的材料&#xff0c;现将它们录制相关主题的视频&#xff0c;作为我的Bootstrap开发框架的知识补充&#xff0c;希望给感兴趣的朋友进行了解。培训内容主要包括基础框架部分、MVC框架部分、Bootstrap框架部分、Bootstrap重要…

【c基础】入门语法

%d:占位符 表示要输出一个整形数。 %f:为float 浮点数 %lf:为double型 双精度浮点数 \n:换行 const:定义一个常量,一旦被初始化就不能修改&#xff0c;只读的变量&#xff08;read-only variable&#xff09;。 整数运算 的结果是整数 如果有小数就抛弃没有考虑四舍五入。 一&a…

day22 Java学习 IO流(序列流)

IO流&#xff08;序列流&#xff09; 序列流&#xff1a; * 可以把多个字节输入流整合成一个&#xff0c;从序列流中读取数据时&#xff0c;将从被整合的第一个流开始读&#xff0c;读完一个之后继续读第二个。 整合方式&#xff1a; * Seq uenceInputStream ( InputStream &am…

Unraveling the JPEG file

(文章还剩实践部分没写&#xff0c;答辩过后补上...) JPEG文件在当下数字化生活中是无处不在的&#xff0c;但是在熟悉的JPEG面纱背后&#xff0c;隐藏着一些算法&#xff0c;它们去除了人类眼中无法察觉到的细节。这产生了最高的视觉质量与最小的文件大小。让我们来看看这一算…