Сортировка битрейтов Ogg'ов

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #1 Alex Jade » 23.05.2006, 21:28

Известно, что при проигрывании Ogg'ов Foobar предоставляет информацию о 3-х битрейтах:
номинальном (%__bitrate_nominal%), среднем (%__bitrate%), динамическом (%__bitrate_dynamic%).
Во процессе воспроизведения файла меняется только динамический битрейт.
Скрипт сортирующий от большего к меньшему
Код: Выделить всё
$puts(a,%__bitrate%)
$puts(b,%__bitrate_nominal%)
$puts(c,%__bitrate_dynamic%)

$puts(xa,00FFFF $pad_right(%__bitrate%,3) )
$puts(xb,00FF00 $pad_right(%__bitrate_nominal%,3) )
$puts(xc,0000FF $pad_right(%__bitrate_dynamic%,3) )

$ifgreater($get(a),$get(b), $ifgreater($get(c),$get(a),$puts(z,1),$ifgreater($get(b),$get(c),$puts(z,2),$puts(z,3))),
$ifgreater($get(b),$get(c),$puts(z,4),$ifgreater($get(a),$get(c),$puts(z,5),$puts(z,6))))

$select($get(z),
$get(xc)/$get(xa)|$get(xb),
$get(xa)|$get(xb)/$get(xc),
$get(xa)/$get(xc)\$get(xb),
$get(xc)\$get(xb)|$get(xa),
$get(xb)/$get(xa)/$get(xc),
$get(xb)|$get(xc)|$get(xa))

Ещё скрипт показывающий насколько динамический битрейт отличается от среднего:
Код: Выделить всё
'['FF00$progress2(%__bitrate_dynamic%,$mul(%__bitrate%,1),20,' ','#')
FF0000|0#FF
$progress2($sub(%__bitrate_dynamic%,%__bitrate%), $mul(%__bitrate%,1),20,'#',' ')']'

Оба скрипта протестированны в Foobar 0.8.3 в строке состояния (status bar).
Последний раз редактировалось Alex Jade 23.05.2006, 21:30, всего редактировалось 1 раз.
Alex Jade M
Автор темы
Откуда: Мурманск
Репутация: 2
С нами: 18 лет 6 месяцев

Сообщение #2 Sp1ke » 24.05.2006, 12:11

Скрипт классный, держи плюсик
Sp1ke M
Основатель
Репутация: 6
С нами: 18 лет 6 месяцев

Сортировка битрейтов Ogg'ов: Исправление ошибки

Сообщение #3 Alex Jade » 15.06.2006, 15:04

В скрипте сортировки была обнаружена ошибка :(
Исправленная версия:
Код: Выделить всё
$puts(a,%__bitrate%)
$puts(b,%__bitrate_nominal%)
$puts(c,%__bitrate_dynamic%)

$puts(xa,00FFFF|0 %__bitrate%)
$puts(xb,00FF00|0 %__bitrate_nominal%)
$puts(xc,0000FF|0 %bitrate%)
$puts(xx,)

$ifgreater($get(a),$get(b), $ifgreater($get(c),$get(a),$puts(z,1),$ifgreater($get(b),$get(c),$puts(z,2),$puts(z,3))),)

$ifgreater($get(b),$get(a), $ifgreater($get(c),$get(b), $puts(z,4), $ifgreater($get(b),$get(c),$puts(z,5),$puts(z,6))), )
'['
$select($get(z),
$get(xc)$get(xa)$get(xx)$get(xb)$get(xx),
$get(xx)$get(xa)$get(xx)$get(xb)$get(xc),
$get(xx)$get(xa)$get(xc)$get(xb)$get(xx),
$get(xc)$get(xb)$get(xx)$get(xa)$get(xx),
$get(xx)$get(xb)$get(xx)$get(xa)$get(xc),
$get(xx)$get(xb)$get(xc)$get(xa)$get(xx))

' ] '
Alex Jade M
Автор темы
Откуда: Мурманск
Репутация: 2
С нами: 18 лет 6 месяцев

Сортировка битрейтов Ogg'ов: Исправление ошибки #2.

Сообщение #4 Alex Jade » 16.06.2006, 10:31

Как известно исправление ошибки с 50% вероятностью приводит к появлению новой :-D.
Новая ошибка - если средний и номинальный битрейты равны то результат пустая строка  :( .
Исправленная версия:
Код: Выделить всё
$puts(a,%__bitrate%)
$puts(b,%__bitrate_nominal%)
$puts(c,%__bitrate_dynamic%)

$puts(xa,00FFFF|0$num(%__bitrate%,3))
$puts(xb,00FF00|0$num(%__bitrate_nominal%,3))
$puts(xc,0000FF|0$num(%bitrate%,3))
$puts(xx, )

$ifgreater($get(a),$get(b), $ifgreater($get(c),$get(a),$puts(z,1),$ifgreater($get(b),$get(c),$puts(z,2),$puts(z,3))),)

$ifgreater($get(b),$get(a), $ifgreater($get(c),$get(b), $puts(z,4), $ifgreater($get(b),$get(c),$puts(z,5),$puts(z,6))),)

$ifgreater(1,$mod($get(a),$get(b)),
$ifgreater($get(c),$get(a),$puts(z,1),
$ifgreater($get(a),$get(c),$puts(z,2),$puts(z,3))),)

'['
$select($get(z),
$get(xc) / $get(xa) | $get(xb),
$get(xa) | $get(xb) / $get(xc),
$get(xa) / $get(xc) / $get(xb),
$get(xc) / $get(xb) | $get(xa),
$get(xb) | $get(xa) / $get(xc),
$get(xb) / $get(xc) / $get(xa))

' ]'
Последний раз редактировалось Alex Jade 16.06.2006, 10:37, всего редактировалось 1 раз.
Alex Jade M
Автор темы
Откуда: Мурманск
Репутация: 2
С нами: 18 лет 6 месяцев


Вернуться в Секреты foobar2000