0
Я использую SampleGrabber для получения аудиоданных, однако мой метод BufferCB не выполняется. Что я делаю не так ?BufferCB не вызывается SampleGrabber
//add Sample Grabber
IBaseFilter pSampleGrabber = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_SampleGrabber));
hr = pGraph.AddFilter(pSampleGrabber, "SampleGrabber");
checkHR(hr, "Can't add Sample Grabber");
AMMediaType pSampleGrabber_pmt = new AMMediaType();
//pSampleGrabber_pmt.majorType = MediaType.Audio;
pSampleGrabber_pmt.subType = MediaSubType.PCM;
pSampleGrabber_pmt.formatType = FormatType.WaveEx;
pSampleGrabber_pmt.fixedSizeSamples = true;
pSampleGrabber_pmt.formatSize = 18;
pSampleGrabber_pmt.sampleSize = 2;
WaveFormatEx pSampleGrabber_Format = new WaveFormatEx();
pSampleGrabber_Format.wFormatTag = 1;
pSampleGrabber_Format.nChannels = 1;
pSampleGrabber_Format.nSamplesPerSec = 48000;
pSampleGrabber_Format.nAvgBytesPerSec = 96000;
pSampleGrabber_Format.nBlockAlign = 2;
pSampleGrabber_Format.wBitsPerSample = 16;
pSampleGrabber_pmt.formatPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(pSampleGrabber_Format));
Marshal.StructureToPtr(pSampleGrabber_Format, pSampleGrabber_pmt.formatPtr, false);
hr = ((ISampleGrabber)pSampleGrabber).SetMediaType(pSampleGrabber_pmt);
DsUtils.FreeAMMediaType(pSampleGrabber_pmt);
checkHR(hr, "Can't set media type to sample grabber");
ISampleGrabber pGrabber = new SampleGrabber() as ISampleGrabber;
pGrabber = (ISampleGrabber)pSampleGrabber;
pGrabber.SetCallback(null, 1);
Мой метод BufferCB подобен
public int BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen)
{
return 0;
}
Я получаю ошибку «Ссылка на объект требуется для нестатических полей, методы или свойства» – CharlesBryan
ээ, вы делаете еще более странные вещи. 'pGrabber = new ...' абсолютно бесполезен, так как вы неидеально освобождаете этот экземпляр. 'SetCallback (null' - что вы ожидаете здесь? Вы передаете« null », где ожидается ваш обратный вызов ... –
Ой, я вижу .. Итак, мне нужно реализовать ISampleGrabberCB, а затем разместить мою реализацию BufferCB там? – CharlesBryan