Может ли кто-нибудь дать мне краткое объяснение того, как и почему DirectShow DirectSound Audio Renderer будет регулировать скорость, когда у меня есть собственный фильтр захвата, который не показывает часы?
Я вообще не могу понять этого. Когда начинается звук, я назначаю rtStart равным нулю плюс длительность семпла (numbytes / m_wfx.nAvgBytesPerSec). Тогда время начала следующего сэмпла совпадает с временем начала предыдущего сэмпла и так далее ....
Некоторое время спустя фильтр захвата определяет, что Directshow слишком быстро потребляет сэмплы, и пытается установить временную метку некоторого времени в будущем, которую средство рендеринга звука полностью игнорирует. В качестве теста я могу внезапно сказать образцу, что он не должен отображаться до 20 секунд в будущем (StreamTime () + UNITS), и снова средство визуализации просто игнорирует его. Однако Null Audio Renderer делает то, что ему говорят, и весь график замирает на 20 секунд, что является ожидаемым поведением.
Вкратце, я хочу, чтобы звуковой рендерер использовал либо мои часы захвата (или свои собственные, или графические, мне все равно), но мне нужно, чтобы они подчинялись временным меткам, которые я ему отправляю. Что мне нужно, так это сжимать или растягивать сэмплы, пусть даже очень тонко, чтобы компенсировать разницу в скоростях между DSound и встречным потоком (скорость которых я не могу контролировать).