C++ 如何使用C+将连续原始音频数据记录到循环缓冲区中+;在Windows10上?

C++ 如何使用C+将连续原始音频数据记录到循环缓冲区中+;在Windows10上?,c++,windows,audio,C++,Windows,Audio,从那时起,我得到了使用Windows核心音频的提示。有一些手册,但我不知道如何编写大量的开销代码来让录音正常工作。有谁能提供一个完整的,最低限度的实现连续音频记录到一个循环缓冲区 到目前为止,我被困在下面的代码中,没有通过pEnumerator->GetDefaultAudioEndpoint(eRender、econosole和pDevice)这一行因为pEnumerator保持nullptr #定义VC#u超精益 #定义使用数学定义 #包括 #包括 #包括 #定义每秒参考次数10000000

从那时起,我得到了使用Windows核心音频的提示。有一些手册,但我不知道如何编写大量的开销代码来让录音正常工作。有谁能提供一个完整的,最低限度的实现连续音频记录到一个循环缓冲区

到目前为止,我被困在下面的代码中,没有通过
pEnumerator->GetDefaultAudioEndpoint(eRender、econosole和pDevice)这一行因为
pEnumerator
保持
nullptr

#定义VC#u超精益
#定义使用数学定义
#包括
#包括
#包括
#定义每秒参考次数10000000
#定义每毫秒10000次的参考次数
int main(){
参考时间hnsRequestedDuration=参考时间每秒;
UINT32缓冲帧计数;
UINT32 numFramesAvailable;
IMMDeviceEnumerator*pEnumerator=NULL;
IMMDevice*pDevice=NULL;
IAudioClient*pAudioClient=NULL;
IAudioCaptureClient*pCaptureClient=NULL;
WAVEFORMATEX*pwfx=NULL;
UINT32包装长度=0;
字节*pData;
德沃德旗;
CoCreateInstance(uuuIdof(MMDeviceEnumerator)、NULL、CLSCTX_uAll、uuuIdof(IMMDeviceEnumerator)、(void**)和pEnumerator);
pEnumerator->GetDefaultAudioEndpoint(eRender、eConsole和pDevice);
pDevice->Activate(uu uuidof(IAudioClient)、CLSCTX_uall、NULL、(void**)和pAudioClient);
pAudioClient->GetMixFormat(&pwfx);
pAudioClient->Initialize(AUDCLNT\u SHAREMODE\u SHARED,AUDCLNT\u STREAMFLAGS\u LOOPBACK,HNSRequestDuration,0,pwfx,NULL);
pAudioClient->GetBufferSize(&bufferFrameCount);//获取分配的缓冲区的大小。
pAudioClient->GetService(uu uuidof(IAudioCaptureClient),(void**)和pCaptureClient);
//计算分配的缓冲区的实际持续时间。
参考时间hnsActualDuration=(双精度)参考时间每秒*缓冲帧计数/pwfx->nSamplesPerSec;
pAudioClient->Start();//开始录制。
//每个循环大约占共享缓冲区的一半。
while(true){
//睡眠时间为缓冲时间的一半。
睡眠(hnsActualDuration/REFTIMES_/u毫秒/2);
pCaptureClient->GetNextPacketSize(&packetLength);
while(packetLength!=0){
//获取共享缓冲区中的可用数据。
pCaptureClient->GetBuffer(&pData,&numFramesAvailable,&flags,NULL,NULL);
如果(标志和音频缓冲标志){
pData=NULL;//告诉CopyData以静默方式写入。
}
//将可用的捕获数据复制到音频接收器。
//hr=pMySink->CopyData(pData、numFramesAvailable和bDone);
pCaptureClient->ReleaseBuffer(numFramesAvailable);
pCaptureClient->GetNextPacketSize(&packetLength);
}
}
pAudioClient->Stop();
返回0;
}