Есть Filter Graph построеный RenderFile(...), он проигрывает видео клип, нужно сделать плавное затухание звуку(время fade out задается) когда клип заканчивается. Как это сделать непонятно
евентов по которым можно узнать что клип заканчивается нету
Здравствуйте, cencio, Вы писали:
C>Есть Filter Graph построеный RenderFile(...), он проигрывает видео клип, нужно сделать плавное затухание звуку(время fade out задается) когда клип заканчивается. Как это сделать непонятно евентов по которым можно узнать что клип заканчивается нету
А что тут непонятного? С помощью IMediaSeeking определяем продолжительность клипа и в цикле смотрим текущую позицию. Как только она достигнет значения (duration — fade_out), начинаем убавлять громкость с помощью IBasicAudio::put_Volume. Вот вроде и всё
Здравствуйте, romson, Вы писали:
R>Здравствуйте, cencio, Вы писали:
C>>Есть Filter Graph построеный RenderFile(...), он проигрывает видео клип, нужно сделать плавное затухание звуку(время fade out задается) когда клип заканчивается. Как это сделать непонятно евентов по которым можно узнать что клип заканчивается нету
R>А что тут непонятного? С помощью IMediaSeeking определяем продолжительность клипа и в цикле смотрим текущую позицию. Как только она достигнет значения (duration — fade_out), начинаем убавлять громкость с помощью IBasicAudio::put_Volume. Вот вроде и всё
Это было первое что пришло в голову, но слишком уж криво выглядит такой способ
Во первых если цикл будет работать в отдельном потоке, то таскменеджер покажет 100% загрузку процесора, исправляется это просто но тогда может оказатся что fade out должен продолжатся 500 мс а когда поток получит управление следующий раз то до окончания клипа останется например 250 мс. Может есть другии способы реализовать фейд?
Здравствуйте, cencio, Вы писали:
C>Это было первое что пришло в голову, но слишком уж криво выглядит такой способ Во первых если цикл будет работать в отдельном потоке, то таскменеджер покажет 100% загрузку процесора, исправляется это просто но тогда может оказатся что fade out должен продолжатся 500 мс а когда поток получит управление следующий раз то до окончания клипа останется например 250 мс. Может есть другии способы реализовать фейд?
Можно реализовать DirectShow filtr который искусственно запихивать в граф обработки и в нём обрабатывать звуковые данные. там же можно получиьт временную позицию.