Beispiel #1
0
// 初始化Kinect
HRESULT ThisApp::init_kinect(){
    IAudioSource* pAudioSource = nullptr;
    IAudioBeamList* pAudioBeamList = nullptr;
    // 查找当前默认Kinect
    HRESULT hr = ::GetDefaultKinectSensor(&m_pKinect);
    // 绅士地打开Kinect
    if (SUCCEEDED(hr)){
        hr = m_pKinect->Open();
    }
    // 获取音频源
    if (SUCCEEDED(hr)){
        hr = m_pKinect->get_AudioSource(&pAudioSource);
    }
    // 获取音频链表
    if (SUCCEEDED(hr)){
        hr = pAudioSource->get_AudioBeams(&pAudioBeamList);
    }
    // 获取音频
    if (SUCCEEDED(hr)){
        hr = pAudioBeamList->OpenAudioBeam(0, &m_pAudioBeam);
    }
    // 获取输入音频流
    if (SUCCEEDED(hr)){
        IStream* pStream = nullptr;
        hr = m_pAudioBeam->OpenInputStream(&pStream);
        // 利用傀儡生成包装对象
        m_p16BitPCMAudioStream = new KinectAudioStreamWrapper(pStream);
        SafeRelease(pStream);
		printf_s("init_kinect succeeded \n");
    }
    SafeRelease(pAudioBeamList);
    SafeRelease(pAudioSource);
    return hr;
}
HRESULT KinectSpeechRecognizer::OpenAudioStreams()
{
    IAudioSource* audioSource = NULL;
    IAudioBeamList* audioBeamList = NULL;

    HRESULT hr = speechReader->GetKinectReader()->GetKinectSensor()->get_AudioSource(&audioSource);

    if(SUCCEEDED(hr))
    {
        hr = audioSource->get_AudioBeams(&audioBeamList);
    }

    if(SUCCEEDED(hr))
    {
        hr = audioBeamList->OpenAudioBeam(0, &audioBeam);
    }

    if(SUCCEEDED(hr))
    {
        hr = audioBeam->OpenInputStream(&audioStream);
        audioStream16Bit = new KinectAudioStream(audioStream);
    }

    //These are no longer needed
    if(audioSource)
    {
        audioSource->Release();
        audioSource = NULL;
    }
    if(audioBeamList)
    {
        audioBeamList->Release();
        audioBeamList = NULL;
    }

    return hr;
}