Пример #1
0
    // オーディオフレームの更新
    void updateAudioFrame()
    {
        // ビームフレームリストを取得する
        CComPtr<IAudioBeamFrameList> audioBeamFrameList;
        auto ret = audioBeamFrameReader->AcquireLatestBeamFrames(
                       &audioBeamFrameList );
        if ( ret != S_OK ) {
            return;
        }

        // ビームフレームを取得する
        UINT beamCount = 0;
        ERROR_CHECK( audioBeamFrameList->get_BeamCount( &beamCount ) );
        for ( int i = 0; i < beamCount; ++i ) {
            CComPtr<IAudioBeamFrame> audioBeamFrame;
            ERROR_CHECK( audioBeamFrameList->OpenAudioBeamFrame(
                             i, &audioBeamFrame ) );

            // サブフレームを取得する
            UINT subFrameCount = 0;
            ERROR_CHECK( audioBeamFrame->get_SubFrameCount(
                             &subFrameCount ) );

            for ( int j = 0; j < subFrameCount; ++j ) {
                CComPtr<IAudioBeamSubFrame> audioBeamSubFrame;
                ERROR_CHECK( audioBeamFrame->GetSubFrame(
                                 j, &audioBeamSubFrame ) );

                audioBeamSubFrame->CopyFrameDataToArray(
                    audioBuffer.size(), &audioBuffer[0] );

                // 音声データを書き込む
                audioFile.Write( &audioBuffer[0], audioBuffer.size() );
            }
        }
    }