Kinect for Windows SDK v2.0 开发笔记 (六)音频获取

转载于:https://blog.csdn.net/dustpg/article/details/38142253

使用SDK: Kinect for Windows SDK v2.0 public preview


这次获取Kinect里面流数据中最后一种:音频流。

我们可以从录音设备里面看到Kinect:


我们可以用一般获取录音一样获取音频流,请注意,从这里获取的音频流是原始数据:麦克风列阵获取的多声道音频,并且

没有利用麦克风列阵进行降噪处理。代码可以查看SDK自带的获取原始数据的例子,因为与通用设备打交道,很麻烦,这里

不做说明。


这里说的是利用自带的方法,获取经处理的音频数据。

经过处理的数据信息如下:


编码:    32位标准浮点(IEEE FLOAT) 

声道:    1 

采样率: 16000Hz


嗯,16KHz,不是熟悉的44.1KHz。毕竟根据奈奎斯特的采样理论,针对人声已经足够了。


SDK中获取处理后的音频流有两种方法,一种是音频帧,和之前的各种帧差不多:

[cpp]  view plain  copy
  1. <span style="font-size:14px;">    // 获取音频源(AudioSource)  
  2.     if (SUCCEEDED(hr)){  
  3.         hr = m_pKinect->get_AudioSource(&pAudioSource);  
  4.     }  
  5.     // 再获取音频帧读取器  
  6.     if (SUCCEEDED(hr)){  
  7.         hr = pAudioSource->OpenReader(&m_pAudioBeamFrameReader);  
  8.     }  
  9.     // 注册临帧事件  
  10.     if (SUCCEEDED(hr)){  
  11.         m_pAudioBeamFrameReader->SubscribeFrameArrived(&m_hAudioBeamFrameArrived);  
  12.     }</span>  
这样初始化。使用后,像之前那样

根据事件获取 AudioBeamFrameArrivedEventArgs  

再获取 AudioBeamFrameReference 音频帧引用

再获取 AudioBeamFrameList 音频帧链表

目前链表只有一个元素,直接获取 AudioBeamFrame音频帧。

音频帧可能包含复数 AudioBeamSubFrame 音频副帧(比如本人这里包含2个)

这个东西才能获取音频流的真正信息。



还有就是IStream,前面的这不是指C++标准库的输入流,而是COM组件的“流接口”,可读可写。

初始化代码如下:

[cpp]  view plain  copy
  1. <span style="font-size:14px;">    if (SUCCEEDED(hr))  
  2.     {  
  3.         hr = m_pKinectSensor->get_AudioSource(&pAudioSource);  
  4.     }  
  5.   
  6.     if (SUCCEEDED(hr))  
  7.     {  
  8.         hr = pAudioSource->get_AudioBeams(&pAudioBeamList);  
  9.     }  
  10.       
  11.     if (SUCCEEDED(hr))  
  12.     {  
  13.         hr = pAudioBeamList->OpenAudioBeam(0, &m_pAudioBeam);  
  14.     }  
  15.   
  16.     if (SUCCEEDED(hr))  
  17.     {          
  18.         hr = m_pAudioBeam->OpenInputStream(&m_pAudioStream);  
  19.     }</span>  

m_pAudioSteam就是Steam对象,使用时ISteam::Read(void*, ULONG, ULONG*)主动获取音频数据。


相比而言,使用音频帧既可以主动获取,又能使用事件机制,而Stream只能主动获取。所以,如果您仅仅需要获取

音频流,建议使用音频帧。


SDK中音频流除了音频数据信息,还有其他比较重要的数据:发音角度(波束角)与这个角度的信心程度(置信度)。

获取方法有:

IAudioBeam::get_BeamAngle(float*)
IAudioBeam::get_BeamAngleConfidence(float*)


IAudioBeamSubFrame::get_BeamAngle(float*)
IAudioBeamSubFrame::get_BeamAngleConfidence(float*)


这个方法自然是为单机多人应用服务的——能够知道是谁说的话。您的程序仅支持单人的话,还是


这里就仅仅示范音频帧吧,Stream下次的语音识别再使用

这次提供的范例将是无趣的,是一个控制台程序。退出程序请按任意键退出,否则不会将Kinect关闭。

这次就是录取数据,将数据存储到硬盘上。



然后将源数据使用您的音频处理软件导入,如果您目前还没有处理软件的话,这里推荐Audacity.

使用 文件-导入-裸数据  选择刚才生成的文件



然后选择: 32位float-没有尾端-单声道-偏移0-导入100%-采样率16000Hz


可以看出降噪效果不错


“微软使用了音频降噪,效果拔群!”


下载地址:点击这里

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kinect for Windows SDK 2.是微软推出的一款软件开发工具包,用于开发基于Kinect传感器的应用程序。它提供了丰富的API和工具,可以帮助开发者快速构建出具有深度感知、语音识别、姿态跟踪等功能的应用程序。同时,它还支持多种编程语言和开发环境,包括C++、C#、Visual Studio等,方便开发者进行开发和调试。 ### 回答2: Kinect for Windows SDK 2.0是微软公司推出的一款面向Windows平台的Kinect开发工具包。该工具包提供了一系列的工具和API,使开发者能够轻松地利用Kinect设备在Windows应用程序中实现身体姿态跟踪、语音识别、深度感应等功能。下面就详细介绍一下Kinect for Windows SDK 2.0的内容和特点。 首先,Kinect for Windows SDK 2.0支持多种操作系统,包括Windows 7、Windows 8、Windows 8.1和Windows 10,支持32位和64位的应用程序运行。它还支持多种开发语言,包括C++、C#和Visual Basic等,若使用这些语言编写代码也可以充分发挥Kinect设备的功能,帮助开发者实现其想要的效果。 其次,Kinect for Windows SDK 2.0提供了一些著名的工具和API。比如,它提供了基于深度感应器的底层API,可以实现目标检测、骨骼跟踪、手势识别等功能。这些底层API是非常有用的,因为开发者可以根据需要进行自定义设置,更好地进行应用程序开发。 此外,Kinect for Windows SDK 2.0还提供了许多高级功能,包括声学模型、语音指定、身体处于位置追踪等,这些功能是很有用的,因为它们可以让开发者的应用程序变得更加智能、全面。例如,开发者可使用该设备的语音识别功能来触发应用程序中的事件,还可以使用身体处于位置追踪功能来实现用户体验的增强,使游戏、培训等应用程序变得更加吸引人。 最后,Kinect for Windows SDK 2.0优秀的交互能力也是其非常突出的特点。它的 API 可以让开发者在应用程序中实现更加真实、独特的交互体验和增强现实效果。同时,在使用过程中,Kinect设备还可以轻松地与现有的应用程序进行整合。 总而言之,Kinect for Windows SDK 2.0是一款功能非常强大、易于使用的开发工具包,非常适合开发者用于创建基于Kinect设备的应用程序,帮助开发者实现更加智能、全面的应用程序,让 Kinect 生态系统更加繁荣。 ### 回答3: Kinect for Windows SDK2.0是微软公司发布的一款软件开发工具包,旨在帮助开发者利用Kinect传感器开发Windows应用程序。该工具包支持C++、C#、VB和JavaScript等多种编程语言,拥有丰富的API和示例代码,可以实现人体骨骼追踪、手势识别、声音识别、运动捕捉等多种功能。 首先,该工具包提供了一整套API,包含了Kinect的各种功能,如颜色和深度图像获取、骨骼跟踪、音频采集、麦克风阵列控制等。这些API可以让开发者轻松地构建运用Kinect的应用程序,提高开发效率。 其次,该工具包提供了许多示例代码和教程,可供开发者学习借鉴。这些示例代码覆盖了Kinect的各个功能,可以帮助开发者深入了解Kinect的工作原理和应用场景,从而更好地利用其开发应用程序。 此外,由于Kinect for Windows SDK2.0是一款Windows平台的软件开发工具包,所以它与Windows操作系统的兼容性较好,在开发时不需要考虑不同平台之间的兼容性问题,可以更加专注于应用程序本身的开发。 总之,Kinect for Windows SDK2.0是一款功能强大、易于使用的软件开发工具包,旨在帮助开发者充分发挥Kinect的功能和优势,构建出更具创意性和实用性的应用程序,具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值