繁体   English   中英

使用 IOCTL 将音频数据从用户模式发送到 Sysvad(虚拟音频驱动程序)

[英]Send audio data from usermode to Sysvad (virtual audio driver) use IOCTL

在我的应用程序(用户模式)中,我接收音频数据并将其保存使用功能:

VOID CSoundRecDlg::ProcessHeader(WAVEHDR * pHdr)
{
    MMRESULT mRes=0;
    TRACE("%d",pHdr->dwUser);
    if(WHDR_DONE==(WHDR_DONE &pHdr->dwFlags))
    {
        mmioWrite(m_hOPFile,pHdr->lpData,pHdr->dwBytesRecorded);
        mRes=waveInAddBuffer(m_hWaveIn,pHdr,sizeof(WAVEHDR));
        if(mRes!=0)
            StoreError(mRes,TRUE,"File: %s ,Line Number:%d",__FILE__,__LINE__);
    }
}

pHdr 指针指向音频数据(字节 [11025]) 如何使用 IOCTL 在 sysvad 中获取此数据。 感谢帮助。

如果我理解正确的话,你有一个音频缓冲区,而不是你想在 sysvad 中发送的输出。 对于这种情况,您必须使用“writebytes”编写黄油,请查看此示例以获取更深入的详细信息。

https://github.com/microsoft/Windows-driver-samples/blob/master/audio/sysvad/EndpointsCommon/minwavertstream.cpp

更新

回答你的评论:

循环缓冲区不是必须的它真的取决于你想要做的实现,重点是在内存中获取缓冲区,写它就是这样

 adapterObject->WriteEtwEvent(eMINIPORT_LAST_BUFFER_RENDERED,
                                    m_ullLinearPosition + ByteDisplacement, // Current linear buffer position  
                                    m_ulCurrentWritePosition, // The very last WaveRtBufferWritePosition that the driver received
                                    0,
                                    0);

理想情况下,您将使用关注点分离与相互独立的读写逻辑,缓冲区对象只是在它们之间传递

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM