Author Topic: Скорость воспроизведения  (Read 14099 times)

0 Members and 1 Guest are viewing this topic.

Lol

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Скорость воспроизведения
« on: June 11, 2015, 10:00:34 AM »
Есть ли какой-то способ после записи скрипта увеличить скорость его воспроизведения? Каждый параметр waitms(8) редактировать в ручную не вариант. Надо просто иметь какой-то общий коэффициент/ползунок или что-то еще. Справку разглядывала, ничего не нашла.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Скорость воспроизведения
« Reply #1 on: June 11, 2015, 11:27:05 AM »
Каждый параметр waitms(8) редактировать в ручную не вариант.

Сликкермэн это средство автоматизации, поэтому делать кучу однотипных действий не нужно.
Даже если такого средства изменения нет, его можно сделать через код.

Вот такой скрипт кладётся рядом с изменяемым.
в $name = "Record1.cms"   прописываем имя изменяемого файла.
в $w = 0.25   множитель на который умножим все задержки WAITMS
Скрипт умножит все задержки больше 5 на множитель.

Code: (clickermann) [Select]
//Скрипт замениы паузы по записанному скрипту
#name "Change wait v 0.0.2"
// Author: Vint
// Version: 0.0.2 (18.06.2014)
// for Clickermann 4.10

$name = "Record1.cms"    // имя файла
$w = 0.25                  // множитель задержки, можно дробный


$count = TFCOUNT($name)
for($num=0, $num < $count)
   $kr = ($num+1)/100
   IF(INT($kr) - $kr = 0)
      LOGWRITE ("Обработка строки ", $num+1)
   END_IF
   
   $str = TFRead($name, $num+1)
   IF STRLEN($str) > 8
      IF(STRPOS($str, "waitms") > 0)
         $old = INT(STRCUT2($str, STRPOS($str, "(")+1, STRPOS($str, ")")-1))
         TFDELETE($name, $num+1)
         WAITMS(10)
         //TFWRITE($name, STRCONCAT("WAITMS(", $old + $w, ")"), $num+1)
         IF($old > 5)
            $new = INT($old*$w)
         ELSE
            $new = $old
         END_IF
         TFWRITE($name, STRCONCAT("WAITMS(", $new, ")"), $num+1)
         WAITMS(10)
      END_IF
   END_IF
END_CYC
HALT


Lol

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Скорость воспроизведения
« Reply #2 on: June 15, 2015, 01:18:40 PM »
А если я хочу текущий скрипт без сохранения файла ускорить, то что мне нужно изменить в вышеприведенном скрипте?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Скорость воспроизведения
« Reply #3 on: June 15, 2015, 02:05:05 PM »
Без сохранения никак. Но неужели сохранить сложно?


123

  • Освоившийся
  • **
  • Posts: 31
    • View Profile
Re: Скорость воспроизведения
« Reply #4 on: June 18, 2015, 11:52:39 AM »
После записи только с редактированием, хотя бы однократным.
Если можно запустить скрипт только 1 раз для достижения цели, а там цикл, надо все длительности ожиданий заменить на просто переменную WAITMS($waitx), которую вначале объявить равной, например, 50 (мс) или и с числом множителем, где нужно ожидание во сколько-нибудь раз меньше или больше этого. Для изменения её в процессе работы, вставить регулярные проверки, нажата ли клавиша, и назначить увеличение или уменьшение этой переменной, например, на "+" $waitx=$waitx+10, а на "-"  $waitx=$waitx-10 (но не меньше 0).
Если много раз, то придётся дополнительно в конце скрипта в ini файл сохранять, чему там было в последний раз равно $waitx и читать его оттуда в начале скрипта при следующем его запуске. Как-то так.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Скорость воспроизведения
« Reply #5 on: June 18, 2015, 01:16:24 PM »
Это дебри. Большинство не справится с этим. Человек только запись юзает.


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Скорость воспроизведения
« Reply #6 on: June 19, 2015, 12:31:53 PM »
самое тривиальное решение это записанный код пропустить через какой нить текстовый редактор автозаменяя waitms( на waitms($k*
Вначале скрипта объявляете этот самый $k = 1.0 и играетесь

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Скорость воспроизведения
« Reply #7 on: June 19, 2015, 05:44:24 PM »
самое тривиальное решение это записанный код пропустить через какой нить текстовый редактор автозаменяя waitms( на waitms($k*
Вначале скрипта объявляете этот самый $k = 1.0 и играетесь

Всё бы хорошо, но не катит. Стал бы я скрипт писать, если бы было всё так просто.
Дело в том что увеличить задержки так, легко, а вот уменьшение некорректно.
Если  получится дробное число, то всё... WAITMS не понимает дробных чисел.
Code: (clickermann) [Select]
LOGCLEAR
WAIT(1)

$time = $_ms
WAITMS(0.5*502)
LOGWRITE ("Время выполнения: ", $_ms-$time, " ms")

$time = $_ms
WAITMS(0.5*501)
LOGWRITE ("Время выполнения: ", $_ms-$time, " ms")
HALT

Лог:
Code: [Select]
17:44:07 Время выполнения: 251 ms
17:44:07 Время выполнения: 0 ms

Тем более я сделал минимальный неизменяемый порог, чтобы маленькие задержки не исчезали совсем.
Например при ускорении в 4 раза 0.25 всё что меньше 20 мс превратится в пшик, что может вызвать проблемы.
« Last Edit: June 19, 2015, 05:48:45 PM by Vint »


security

  • Освоившийся
  • **
  • Posts: 68
    • View Profile
Re: Скорость воспроизведения
« Reply #8 on: June 25, 2015, 04:06:42 PM »
Добавлю свой код на php (вдруг покажется кому-то удобнее)

Code: [Select]
<?php

$source 
file("source.cms"); // Исходный файл
$factor 1.5// Множитель
$output "";

foreach(
$source as $line)
{
$line trim($line);

if(preg_match("/^waitms\(([\d]+(|\.[\d]+))\)$/"$line$matches))
{
$output .= "waitms(" intval($matches[1] * $factor) . ")\r\n";
}

else
{
$output .= "{$line}\r\n";
}
}

file_put_contents("output.cms"$output);

?>

А так, все уже итак расписали подробно ребята выше.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Скорость воспроизведения
« Reply #9 on: June 25, 2015, 04:21:58 PM »
Я сам написал, сам и поправлю.
Можно заменять на WAIT($K*  и множителем перевести в миллисекунды, тогда всё нормально.
Code: (clickermann) [Select]
LOGCLEAR
WAIT(1)
$K = 0.0005

$time = $_ms
WAIT($K*502)
LOGWRITE ("Время выполнения: ", $_ms-$time, " ms")

$time = $_ms
WAIT($K*501)
LOGWRITE ("Время выполнения: ", $_ms-$time, " ms")
HALT
« Last Edit: June 25, 2015, 04:23:59 PM by Vint »