我正在使用 DirectSoundFullDuplexCreate8 进行录制,并且在某些情况下,在 Win 7 下播放。我有几个问题。
一个非常简单——FullDuplex 可以与所有音频硬件一起使用吗?在某些情况下,我们将使用不同的设备进行录制和播放。到目前为止,这似乎可行,但如果有些机器不支持全双工的 Win 版本,我们可以自己推出。
另一个可能是一个愚蠢的问题,但我不明白如何设置事件通知进行记录。这是到目前为止我得到的代码,但我不知道如何开始录制或如何设置,以便我可以将正在录制的数据复制到其他缓冲区,包括播放缓冲区:
hr = DirectSoundFullDuplexCreate8((LPCGUID)recordDeviceDS, (LPCGUID)playbackDeviceDS&capBufferDescription, &playBufferDescription, hWnd, DSSCL_PRIORITY, &pDSFullDuplex, &pDSCaptureBuffer8, &pDSPlayBuffer8, NULL );
if (hr != DS_OK)
return false;
// Set up the notify events
hr = pDSCaptureBuffer8->QueryInterface(IID_IDirectSoundNotify, (LPVOID*)&pDSNotify);
if (hr != DS_OK)
return false;
for (int i = 0; i < 3; ++i)
{
eventHandles[i] = CreateEvent(NULL, TRUE, FALSE, NULL);
if (eventHandles[i] == NULL)
return false;
}
notifyEvents[0].dwOffset = 500;
notifyEvents[0].hEventNotify = eventHandles[0];
notifyEvents[1].dwOffset = 1000;
notifyEvents[1].hEventNotify = eventHandles[1];
notifyEvents[2].dwOffset = DSBPN_OFFSETSTOP;
notifyEvents[2].hEventNotify = eventHandles[2];
hr = pDSNotify->SetNotificationPositions(NUM_CAP_EVENTS, notifyEvents);
if (hr != DS_OK)
return false;
pDSNotify->Release();
接下来是什么?我假设我使用:
pDSCaptureBuffer8->Start(true);
开始捕获,但我没有看到任何关于如何设置在积累了适量的数据时激活的 DS 事件处理函数的参考。