Я написал программу для непрерывного сэмплирования звука с микрофона в буфер с помощью ISampleGrabber.
Я совершенно уверен во всей остальной части программы.Но я не совсем уверен в том, что захватить сэмпл в буфер является следующей частью.
void MICDetect::Run_Graph(IMediaControl* m_pControl)
{
m_hr = m_pControl->Run();// Now run the graph, i.e. start listening!
if(SUCCEEDED(m_hr))
{
cout<<"Graph is Running"<<endl;
}
else HR_Failed(m_hr);
cout<<"Waiting for buffer";
for(int i=5;i>=1;--i)
{
Sleep(500);
cout<<".";
}
cout<<endl;
m_hr = m_pGrabber->GetCurrentBuffer(&m_Size, NULL);
if(FAILED(m_hr))
{
HR_Failed(m_hr);
}
pBuffer = (BYTE*)CoTaskMemAlloc(m_Size);
if (!pBuffer)
{
m_hr = E_OUTOFMEMORY;
HR_Failed(m_hr);
}
for(int i=1000000;i>1;i--)
{
Sleep(1);
m_hr = m_pGrabber->GetCurrentBuffer(&m_Size, (long*)pBuffer);
if (FAILED(m_hr))
{
HR_Failed(m_hr);
}
}
system("pause");
}
Мне нужен сэмпл из 1000 сэмплов в секунду для запуска
Я приостанавливаю getcurrentbuffer на 1 мси зациклите его.
Я не уверен в этом методе.
Единственный способ убедиться в этом - это передать захваченный семпл в фильтр звукового рендеринга.
Как мне это сделать?