Счётчик таймкода

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BAMBUR
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 01.02.2006 (Ср) 18:47
Откуда: Челябинская обл.

Счётчик таймкода

Сообщение BAMBUR » 01.02.2006 (Ср) 19:24

VB6 взялся изучать с месяц назад из-за нужды по работе (ламер в общем)...
Наваял небольшую программку для упрощения работы оператора эфирной студии, со временем появилась необходимость в доработке, но у меня уже мозгов не хватает.
Задача в том, что программка должна обрабатывать и отображать значение последовательного таймкода (часы, минуты, секунды, кадры), это значение передается в мою программку через API-функцию из титровальной программы в виде числа, которое рассчитывается по формуле F+25*(S+60*(M+60*H)), где F=кадры, S=секунды, M=минуты, H=часы. По сути, я получаю общее колличество кадров. Так в одной секунде 25 кадров, а если я получаю значение 1500, то это равно 60 секундам или одной минуте.
Мне нужно создать счётчик формата "00:00:00:00" , то есть 4 разряда <H:M:S:F>.
То что мне пока удалось "родить" больше напоминает калькулятор: 1500=0 часасам, 1 минуте, 60 секундам, 1500 кадрам.
В виду того, что во время воспроизведения значение таймкода непрерывно меняется, то нужно что то напоминающее счётчик видеомагнитофона или цифровой видеокамеры, то есть, когда счётчик кадров доходит до 24 он обнуляется до 00, а счётчик секунд увеличивается на 1, и т.д.
Если я достаточно понятно описал задачу, прошу помочь, кто чем может.

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 01.02.2006 (Ср) 19:34

Помнить число кадров (k) и выводить на экран

a1 = k mod 25 кадров
a2/25 = k mod 25*60 - a1 секунд
a3/(25*60) = k mod 25*3600 - a1 - a2 минут
...
Кажеться так.

BAMBUR
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 01.02.2006 (Ср) 18:47
Откуда: Челябинская обл.

Сообщение BAMBUR » 02.02.2006 (Чт) 11:46

Не получается...
Через a1 = k mod k /60 в виде остатка удается вывести счетчик кадров, а секунды минуты и часы как то не выходит...
М-да... Вот это задачка...

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 02.02.2006 (Чт) 12:07

Код: Выделить всё
a1 = n Mod 25
n = (n - a1) \ 25
a2 = n Mod 60
n = (n - a2) \ 60
a3 = n Mod 60
n = (n - a3) \ 60
a4 = n Mod 60
n = (n - a3) \ 60

Label1 = a1
Label2 = a2
Label3 = a3
Label4 = a4

Не знаю, у мну все вроде работает... Попробуй так.
Add
Хм, старый вариант (реализация) тоже прекрастно считает вроде.
Код: Выделить всё
a1 = n Mod 25
a2 = n Mod 25 * 60 - a1
a3 = n Mod 90000 - a1 - a2
a4 = n - a1 - a2 - a3

Label1 = a1
Label2 = a2 / 25
Label3 = a3 / 1500
Label4 = a4 / 90000

BAMBUR
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 01.02.2006 (Ср) 18:47
Откуда: Челябинская обл.

Сообщение BAMBUR » 06.02.2006 (Пн) 17:53

Огромное спасибо за просвещение!
Собрал по Вашему коду:

Код: Выделить всё
Do While AlphaProObj.GetStatus = 1  'пока идет воспроизведение
    n = AlphaProObj.GetValue("%TIMECODE") 'запрашиваем значение таймкода
f = n Mod 25
n = (n - f) \ 25
s = n Mod 60
n = (n - s) \ 60
m = n Mod 60
n = (n - m) \ 60
h = n Mod 60
n = (n - h) \ 60

Label2.Caption = h & "ч:" & m & "м:" & s & "с:" & f & "к" 'выводим в лейбле счётчик
DoEvents ' чтоб кнопка "STOP" была доступна в момент воспроизведения
Loop
stat = AlphaProObj.GetStatus
    If stat = 0 Then StatusBar1.SimpleText = "СТОП"
    If stat = 1 Then StatusBar1.SimpleText = "ВОСПРОИЗВЕДЕНИЕ"
    If stat = 2 Then StatusBar1.SimpleText = "ОЖИДАНИЕ"


Отматывает цифирки счётчик добросовестно, но секунды в нём отсчитываются примерно в 4 раза быстрее. Так и не понял в чем дело, похоже математику надо вспоминать... Времени пока хватает, разберусь - доделаю.

Попутно хочу спросить:
В моей программке набирается текст для бегущей строки и титров, иногда дежурный оператор допускает в тексте ошибки. Для проверки орфографии через Word я нашел несколько примеров, но Ворд как то не устраивает... Имеется программа ОРФО, и по горячим клавишам она может проверять текст в любом Win-приложении. Когда я попытался проверить в своей программе слово "ошЫбка", Агент запустился, проверил, предложил вариант для замены, когда я назал кнопку "Заменить", моя программка выдала "An outgoing call cannot be made since the application is dispatching an input-synchronous call". Подскажите, как другому приложению разрешить изменять значения в моей программе?

BAMBUR
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 01.02.2006 (Ср) 18:47
Откуда: Челябинская обл.

весёлая весть от производителя Альфы Про..

Сообщение BAMBUR » 08.02.2006 (Ср) 13:33

не то чтоб "весёлая"...
В общем, в расширенной версии Alpha Pro 2.0 производители отказались от обработки таймкода (потому, что никто не спрашивал), посему, почти все мои идеи разрушены. Ещё раз спасибо за помощь!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 59

    TopList