Я нашел этот пост на форуме:
http://www.ureader.com/msg/14712447.aspx
В нем, член дает следующую формулу для вычисления временных меток для аудио, учитывая его формат (частота дискретизации, количество каналов, бит на выборку) :
С аудио PCM, duration_in_secs = 8 * buffer_size/wBitsPerSample/ nChannels/nSamplesPerSec или duration_in_secs = buffer_size/ nAvgBytesPerSec (с, для аудио PCM, nAvgBytesPerSec = wBitsPerSample * nChannels * nSamplesPerSec/8).
Единственное, что вам нужно добавить это переменная отслеживания, которая говорит вам, что номер образца в потоке, что вы находитесь, так что вы можете использовать его, чтобы компенсировать время начала и окончания времени по длительности (duration_in_secs) при линейной потоковой передаче. Для операций поиска вам, конечно, необходимо знать или рассчитать номер образца в потоке.
Не забывайте, что единицы измерения временных меток в DirectShow набираются как REFERENCE_TIME, длинное целое число или Int64. Каждый блок равен 100 наносекундам. Вот почему в видеофильтрах вы видите, что значение 10 000 000 делится на соответствующее количество кадров в секунду (FPS) для вычисления временных меток для каждого кадра, потому что 10 000 000 равно 1 секунде в переменной REFERENCE_TIME.