Потоковый аудиосэмпл (в BYTE) для аудио рендерера Фильтр - PullRequest
0 голосов
/ 28 февраля 2011

Я написал программу для непрерывного сэмплирования звука с микрофона в буфер с помощью 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 мси зациклите его.

Я не уверен в этом методе.

Единственный способ убедиться в этом - это передать захваченный семпл в фильтр звукового рендеринга.

Как мне это сделать?

1 Ответ

0 голосов
/ 06 марта 2011

в соответствии с документацией вам необходимо позвонить ISampleGrabber::SetBufferSamples перед тем, как позвонить ISampleGrabber::GetCurrentBuffer.Но я бы порекомендовал использовать функцию обратного вызова, используя ISampleGrabber::SetCallback.Тогда вам не нужно использовать цикл и сон.

В любом случае, вы получаете байты.В зависимости от формата каждый аудиосэмпл использует 1 или более байтов.Например, 16-битное стерео использует 4 байта на семпл.Если вы просто записываете байты в файл (например, test.pcm), есть некоторые аудиоредакторы, которые могут открывать и воспроизводить его, например охлаждение95.При открытии файла вы должны указать, какой формат PCM вы используете.Лучше записать его в файл .wav, тогда вы можете открыть файл с каждым медиаплеером.Но для этого необходимо знать формат файла .wav.

...