Kinect v2,Microphone Array可以用来对于水平面音源方向的推测(AudioBeam)和语音识别(Speech Recognition)。这一节是介绍如何取得AudioBeam。
  上一节,介绍如何使用通过Kinect SDK v2预览版,从Kinect v2预览版的Color Camera和Depth 传感器中获取数据的方法。
 
  本节,将介绍从Kinect的Microphone Array中取得AudioBeam(水平面音源方向的推测)的方法。
Microphone Array
  在第一节中介绍过,Kinect除搭载了Color Camera,Depth传感器之外,还有Microphone Array。
 
  Microphone Array由4个Microphone构成,能进行水平面音源方向的推测(AudioBeam)和语音识别(Speech Recognition)等。
 
  这一节,将介绍取得AudioBeam的方法。
 

图1 Kinect v2预览版的Microphone Array
图2 Kinect SDK v2预览版的示例程序(AudioBasics)
示例程序
  用Kinect SDK v2取得AudioBeam,将结果显示在console上的示例程序。
 
  Audio的功能(AudioBeam,Speech Recognition)的数据取得流程,在「Sensor」~「Source」这一块与之前的Image(Color,Depth,BodyIndex,Body)的取得流程一样。不过在这之后还请注意Audio功能所特有的部分,这里主要是介绍与Image所同样的数据取得流程。
 
  这个示例程序的全部内容,在下面的github里全部公开了。
 
图3 Kinect SDK v2预览版的数据取得的流程(重发)
「Sensor」
取得「Sensor」
// Sensor
IKinectSensor* pSensor; // ……1
HRESULT hResult = S_OK;
hResult = GetDefaultKinectSensor( &pSensor ); //……2
if( FAILED( hResult ) ){
std::cerr << "Error : GetDefaultKinectSensor" << std::endl;
return -;
}
hResult = pSensor->Open(); //……3
if( FAILED( hResult ) ){
std::cerr << "Error : IKinectSensor::Open()" << std::endl;
return -;
}

列表1.1 相当于图1「Sensor」的部分(重发)

1 处理Kinect v2预览版的Sensor接口。
2 取得默认的Sensor。
3 打开Sensor。
 
「Source」
从「Sensor」取得「Source」。
// Source
IAudioSource* pAudioSource; //……1
hResult = pSensor->get_AudioSource( &pAudioSource ); //……2
if( FAILED( hResult ) ){
std::cerr << "Error : IKinectSensor::get_AudioSource()" << std::endl;
return -;
}

列表1.2 相当于图1「Source」的部分

1 Audio功能的Source接口。
2 从Sensor取得Source。
 
「AudioBeamList」~「OpenAudioBeam」
从「Source」取得「AudioBeamList」,从List里打开指定的「AudioBeam」。
// Get Audio Beam List
IAudioBeamList* pAudioBeamList; //……1
hResult = pAudioSource->get_AudioBeams( &pAudioBeamList ); //……2
if( FAILED( hResult ) ){
std::cerr << "Error : IAudioSource::get_AudioBeams()" << std::endl;
return -;
}
// Open Audio Beam
IAudioBeam* pAudioBeam; //……3
hResult = pAudioBeamList->OpenAudioBeam( , &pAudioBeam ); //……4
if( FAILED( hResult ) ){
std::cerr << "Error : IAudioBeamList::OpenAudioBeam()" << std::endl;
return -;
}

列表1.3 取得Microphone Array和AudioBeam

1 AudioBeamList接口。
2 从Source取得AudioBeam,然后取得Microphone Array的List。
3 AudioBeam接口。
4 从List里取得AudioBeam,打开Microphone Array。
   0代表第一个被找到的默认的Microphone Array。
 
「Get Angle and Confidence」
从「Stream」读入Audio数据,取得音源方向和推测的信赖值。
while(  ){
// Get Angle and Confidence
FLOAT angle = 0.0f;
FLOAT confidence = 0.0f;
pAudioBeam->get_BeamAngle( &angle ); // radian [-0.872665f, 0.872665f] ……1
pAudioBeam->get_BeamAngleConfidence( &confidence ); // confidence [0.0f, 1.0f] ……2
// Show Result
// Convert from radian to degree : degree = radian * 180 / Pi
if( confidence > 0.5f ){
std::system( "cls" );
std::cout << "Angle : " << angle * 180.0f / M_PI << ", Confidence : " << confidence << std::endl; //……3
}
// Input Key ( Exit ESC key )
if( GetKeyState( VK_ESCAPE ) < ){
break;
}
}

列表1.5 取得音源方向和推测的信赖值

1 取得音源方向。
   角度单位是radian(弧度)。
2 取得音源方向的推测信赖值。
   取值范围是0.0f~1.0f,数值越大表示可信度更高。
3 把radian(弧度)转为dgree(度数)在Console上输出。
   只显示当前的数值,如果注释掉「std::system("cls");」的话,那么之前的值也会留在Cconsole上。
 
  可以取得的音源方向是Kinect v2的中心正面向水平方向左右+/-50°的范围。 
 
图4 音源方向的检测范围+/-50°
  因为取得的音源方向的角度单位是「radian(弧度)」要利用公式1转换为「degree(度数)」。
【公式1 adian(弧度)转换为(度数)】
  • 弧度(radian)→角度(degree)∶ degree=radian×180÷π
  • 角度(degree)→弧度(radian)∶ radian=degree×π÷180
运行结果
  运行这个示例程序,就像图5一样,将显示出声音的音源角度(Angle)和推测的信赖值(Confidence)。
 
  如果Microphone Array的反应过度敏感或迟钝,可以通过调整操作系统的录音设备属性来改善(在[控制面板]-[声音]-[录制]的录音设备中的「麦克排列Xbox NUI Sensor」的属性里调整等级)。

图5 运行结果
在Console上显示了音源方向的角度和推测的信赖值。
 
总结
这一节是介绍如何使用Kinect SDK v2预览版取得AudioBeam。
 
与Kinect SDK v1相比,从Microphone Array取得Audio数据的处理更加简单。

【翻译】Kinect v2程序设计(C++-) AudioBeam篇的更多相关文章

  1. 【翻译】Kinect v2程序设计(C++) Body 篇

    Kinect SDK v2预览版的主要功能的使用介绍,基本上完成了.这次,是关于取得Body(人体姿势)方法的说明.   上一节,是使用Kinect SDK v2预览版从Kinect v2预览版取得B ...

  2. 【翻译】Kinect v2程序设计(C++) BodyIndex篇

    通过Kinect SDK v2预览版,取得BodyIndex(人体区域)的方法和示例代码. 上一节,介绍了从Kinect v2预览版用Kinect SDK v2预览版获取Depth数据的方法.   这 ...

  3. 【翻译】Kinect v2程序设计(C++) Color篇

    Kinect SDK v2预览版,获取数据的基本流程的说明.以及取得Color图像的示例程序的介绍. 上一节,是关于当前型号Kinect for Windows(后面称作Kinect v1)和次世代型 ...

  4. 【翻译】Kinect v2程序设计(C++) Depth编

    Kinect SDK v2预览版,取得Depth数据的方法说明. 上一节,介绍了通过使用Kinect for Windows SDK v2预览版(以下简称为,Kinect SDK v2预览版)从Kin ...

  5. 【翻译】Kinect v1和Kinect v2的彻底比较

      本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较.   ...

  6. 【计算机视觉】深度相机(五)--Kinect v2.0

    原文:http://blog.csdn.NET/qq1175421841/article/details/50412994 ----微软Build2012大会:Kinect for Windows P ...

  7. Kinect v2.0 for windows开发环境说明

    官方文档里是这些: Supported Operating Systems and Architectures The following operating systems and architec ...

  8. Kinect v2(Microsoft Kinect for Windows v2 )配置移动电源解决方案

    Kinect v2配置移动电源解决方案 Kinect v2如果用于移动机器人上(也可以是其他应用场景),为方便有效地展开后续工作,为其配置移动电源是十分必要的. 一.选择移动电源 Kinect v2原 ...

  9. Ubuntu_ROS中应用kinect v2笔记

    Ubuntu_ROS中应用kinect v2笔记 个人觉得最重要的资料如下: 1. Microsoft Kinect v2 Driver Released http://www.ros.org/new ...

随机推荐

  1. C语言实现大数据除法

    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...

  2. 3.Factory Method 工厂方法模式(创建型模式)

    1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary> /// 工厂方 ...

  3. Nginx 服务器安装及配置文件详解

    原文出处: Sean Chow(@SeanLoook)   欢迎分享原创到伯乐头条 Nginx 在工作中已经有好几个环境在使用了,每次都是重新去网上找博客,各种编译配置,今天自己也整理一份安装文档和 ...

  4. cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建

    一.创建文件~ PlayerLayer.h PlayerLayer.cpp 一般类名都会和文件名有关系的~(在这里当然是一样) 二.How to do? 1.首先就是放一个飞机~ CC_SYNTHES ...

  5. 【转】HADOOP HDFS BALANCER介绍及经验总结

    转自:http://www.aboutyun.com/thread-7354-1-1.html 集群平衡介绍 Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加 ...

  6. js:数据结构笔记12--排序算法(2)

    高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...

  7. Hadoop虽然强大,但不是万能的(CSDN)

    Hadoop很强大,但企业在使用Hadoop或者大数据之前,首先要明确自己的目标,再确定是否选对了工具,毕竟Hadoop不是万能的!本文中列举了几种不适合使用Hadoop的场景. 随着 Hadoop  ...

  8. js中等性操作符(==)、关系操作符(<,>)和布尔操作符(!)比较规则

    最近一直在笔试面试,经常碰到例如 123=='123'.'abc'==true等问题,其中有答对的,也有答错的,主要原因还是对ECMAScript的规范没有理解清楚,很多题目没有具体分析所导致.现查阅 ...

  9. android 屏幕截取,pull到pc端

    1.当需要截取手机屏幕时,进行批命令点击,截取adb pull到电脑端,或者进行接口上传到服务器. GetScreen.bat @ECHO OFF :: read config.cfg SETLOCA ...

  10. asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置

    策略设置包括当前步骤的流转方式,处理人员,退回策略等设置. 流转类型:当前步骤后面有多个步骤时,此类型选择可以决定后续步骤的发送方式. 1.系统控制:由系统根据您在线上设置的流转条件来判断该发送到哪一 ...