Очередная реинкарнация сборки от Dr.Death. Foobar v.1.6.6 [2.1.0603]

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

Описание: Проверенные финальные версии сборок.

Сообщение #1 Nemu » 07.07.2014, 17:03

Долго я сидел за оригинальной сборкой от Dr.Death, потом на её вариации от meDveD, но после очередного спонтанного краха конфигурации и потери всех плейлистов, решил таки найти замену на актуальной версии. Прямой замены не нашлось, так что пришлось поработать самому. В первую очередь задачей было вернуть способ группировки плейлиста.
В основе лежит сборка от Evil v.1.2.

Версия Foobar2000: 1.6.6
Текущая версия сборки: 2.1.0603

В данной сборке используются глобальные горячие клавиши! Предупреждаю дабы не было неожиданностей с конфликтом в Вашем ПО.
Поменять/удалить их можно в Preferences/Keyboard shortcut, все они сгруппированы в самом низу списка.
Список глобальных хоткеев
CTRL + NUM 1 — Pause/Play
CTRL + NUM 5 — Play
CTRL + NUM 4 — Previous track
CTRL + NUM 6 — Next track
CTRL + NUM 0 — Random track
Список плагинов
Core (2021-05-17 14:20:42 UTC)
foobar2000 core 1.6.6
foo_ac3.dll (2020-08-16 06:41:34 UTC)
AC3 decoder 0.9.13
foo_albumlist.dll (2021-05-17 14:19:58 UTC)
Album List 1.6.6
foo_audioscrobbler.dll (2010-06-04 05:27:04 UTC)
Audioscrobbler 1.4.7
foo_cdda.dll (2021-05-17 14:20:02 UTC)
CD Audio Decoder 1.6.6
foo_channel_mixer.dll (2011-06-01 17:18:00 UTC)
Channel Mixer 0.9.6.7
foo_converter.dll (2021-05-17 14:20:00 UTC)
Converter 1.6.6
foo_cuefilter.dll (2009-04-28 11:09:44 UTC)
CUE Playlist Filter 0.1.7.0
foo_discogs.dll (2020-08-16 06:41:34 UTC)
Discogs Tagger 2.23
foo_dsd_processor.dll (2017-05-01 04:49:44 UTC)
DSD Processor 1.0.1
foo_dsp_dolbyhp.dll (2010-01-22 09:40:28 UTC)
Dolby Headphone Wrapper 1.4.1
foo_dsp_eq.dll (2021-05-17 14:19:58 UTC)
Equalizer 1.2.2
foo_dsp_resampler.dll (2012-08-17 16:41:42 UTC)
SoX Resampler 0.8.0
foo_dsp_soundtouch.dll (2010-01-14 18:08:06 UTC)
SoundTouch DSP 1.1
foo_dsp_std.dll (2021-05-17 14:19:58 UTC)
Standard DSP Array 1.6.6
foo_dsp_xgeq.dll (2012-02-05 09:11:22 UTC)
Graphic Equalizer 0.3.7
foo_fileops.dll (2021-05-17 14:20:02 UTC)
File Operations 1.6.6
foo_freedb2.dll (2021-05-17 14:20:00 UTC)
Online Tagger 0.8
foo_input_dts.dll (2020-08-16 06:41:34 UTC)
DTS decoder 0.6.8
foo_input_monkey.dll (2020-08-16 06:41:34 UTC)
Monkey's Audio Decoder 2.3.1
foo_input_sacd.dll (2017-05-01 04:49:32 UTC)
Super Audio CD Decoder 1.0.7
foo_input_std.dll (2021-05-17 14:20:16 UTC)
FFmpeg Decoders 4.3.1
Standard Input Array 1.6.6
foo_jesus.dll (2010-09-22 22:34:06 UTC)
Autosave & Autobackup 10
foo_keep_queue.dll (2010-11-12 00:28:46 UTC)
Keep Queue 0.3.5
foo_masstag.dll (2020-08-16 06:41:34 UTC)
Masstagger 1.8.5
foo_out_asio.dll (2012-09-30 09:22:28 UTC)
ASIO support 2.1.2
foo_out_wasapi.dll (2020-12-30 09:08:46 UTC)
WASAPI output support 3.4
foo_out_wasapis.dll (2020-12-27 05:37:24 UTC)
WASAPI shared output 0.6.16
foo_playcount.dll (2020-08-16 06:41:34 UTC)
Playback Statistics 3.0.4
foo_playlist_attributes.dll (2020-08-16 06:41:34 UTC)
Playlist Attributes 0.5.5
foo_playlisthistory.dll (2011-05-04 11:14:38 UTC)
Playlist History 0.1.6
foo_playlists_sort.dll (2014-01-01 14:33:20 UTC)
Сортировка плейлистов 0.1.9
foo_queuecontents.dll (2012-02-23 18:06:40 UTC)
Queue Contents Editor 0.5.1
foo_rgscan.dll (2021-05-17 14:20:02 UTC)
ReplayGain Scanner 1.6.6
foo_run.dll (2018-05-29 17:24:41 UTC)
Run services 0.3.8
foo_ui_columns.dll (2020-09-03 17:55:18 UTC)
Columns UI 1.6.0
foo_ui_hacks.dll (2013-02-19 10:31:38 UTC)
UI Hacks 2013-02-19
foo_ui_std.dll (2021-05-17 14:20:12 UTC)
Default User Interface 1.6.6
foo_uie_albumlist.dll (2020-09-26 17:29:20 UTC)
Album list panel 0.4.1
foo_uie_console.dll (2020-04-11 11:10:10 UTC)
Console panel 1.0.1
foo_uie_eslyric.dll (2017-02-07 10:51:32 UTC)
ESLyric 0.3.6
foo_uie_quicksearch.dll (2007-10-06 14:48:24 UTC)
Quick Search Toolbar 2.8l
foo_uie_vis_channel_spectrum.dll (2008-05-17 23:02:12 UTC)
Channel Spectrum panel 0.17.2
foo_uie_vis_peakmeter_spectrum.dll (2008-04-19 17:18:50 UTC)
Peakmeter Spectrum Visualisation 0.2.0.0 beta
foo_uie_wsh_panel_mod.dll (2014-11-13 19:49:36 UTC)
WSH Panel Mod 1.5.6
foo_unpack.dll (2021-05-17 14:20:06 UTC)
ZIP/GZIP/RAR/7-Zip Reader 1.6.6
foo_utils.dll (2008-02-08 17:26:58 UTC)
Playlist Tools 0.6.2 beta 6

Для доступа к меню нажмите на иконку Foobar:
Изображение
Для функционирования древа папок в правой панели, необходимо добавить в Media Library папку с музыкой.

Что бы вернуть возможность таскать и масштабировать панели, нужно в настройках сплиттера поставить единичку вместо ноля. Появятся дополнительные линии у каждой панельки, за которые можно будет тянуть.
Изображение

Скриншот:
Изображение

Ссылки:
Yandex

Список изменений
2.1.0603
1. Версия Foobar2000: 1.6.6
2. Добавлена кнопка полноэкранного режима и хоткей (WIN+F12)
3. Ещё всякая мелочь, уже не помню =/
Ccылка
Скриншот

1.9.0503
1. Версия Foobar2000: 1.4.2
Ccылка
Скриншот

1.8.0617
1. Версия Foobar2000: 1.3.19
Ccылка
Скриншот

1.8.0229
1. Версия Foobar2000: 1.3.17
2. Обновлены компоненты
3. Немного забытых за год правок
4. Я ещё жив
Ccылка
Скриншот

1.7.0409
1. Версия Foobar2000: 1.3.15
2. Исправлена загрузка текста песен
3. Исправлено запоминание позиции трека при запуске плеера
4. Изменено отображение битрейта треков, отображение единиц громкости
5. Обновлены/подчищены компоненты
6. Немного косметики
Ccылка

1.7.0119
1. Версия Foobar2000: 1.3.14
Ссылка
Скриншот

v1.6.917
1. Версия Foobar2000: 1.3.12
2. Обновлены плагины
3. Стагнация Стабильность
Скриншот
Ссылка

v1.6.0327
1. Версия Foobar2000: 1.3.10
2. Добавлен плагин для проигрывания SACD
3. Заменён плагин для показа текстов песен (LyricShow3 на ESlyric)
Скриншот
Ссылка (Yandex)

v1.5.1104
1. Версия Foobar2000: 1.3.9
2. Откорректирован градиент пикметра: теперь он плавно нарастает, без резких переходов
3. Исправлена ошибка в конфигурации ReplayGain
4. Немножко там
5. Немножко тут
=)

v1.5.0118
1. Версия Foobar: 1.3.7
2. Обновлён скрипт WSH на полосу воспроизведения/громкости
3. Подчищены плагины
4. Несколько небольших изменений в конфиге
Ссылка

v1.4.1113
1. Версия Foobar: 1.3.5
2. Цветовая схема по-умолчанию заменена на тёмно-синюю. Старая серая схема доступна в виде разделе "Опции" под спойлером выше
3. Исправлены некоторые косяки в конфигурации отображения плейлиста
Ссылка

v1.4.810
1. Исправлен небольшой косяк с конфигурацией кнопок
2. Добавлено несколько новых пресетов с кнопками (в папке Buttons), обновлены старые

v1.4.808
1. Версия Foobar2000: 1.3.3
2. Размер кнопок уменьшен с 24 пикселей до 20 пикселей
3. Добавлен плагин foo_playlists_sort для сортировки плейлистов. По умолчанию: по алфавиту.

v1.4.719
Нумерация версий изменена по шаблону: 1.4.719, где 1 - основная версия сборки, 4 - год (2014), 719 - месяц (7)-день (19).
Новые полосы воспроизведения и громкости, небольшие изменения цвета некоторых элементов, панель меню (File/Edit/View) убрана, доступ к ней можно получить по клику на иконке окна.

v1.01
Инвертировал градиент пикметра (теперь от светлого к тёмному), изменил текстуру полосы пика в пикметре (в виде точек, для визуального облегчения) сделал все синие цвета несколько более серыми, убрал верхний блок визуализации, немного подправил инфо-блок (уменьшил разделительные полосы, а то упирались в границу блока).

v1.0
Базовая версия
Последний раз редактировалось Nemu 03.06.2021, 20:51, всего редактировалось 63 раз(а).
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев


Сообщение #241 Nemu » 14.09.2018, 19:39

companyZ
Main window => Minimize on close => Disable
Изображение

v. 1.4 c закрытием на крест
Плейлисты теперь покоются в другой папке — playlists-v1.4

В заглавном сообщении пока не буду обновлять сборку, подожду следующего обновления.
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #242 companyZ » 15.09.2018, 07:16

Nemu,
Добрый день, подскажите в вашей сборке какие из установленных плагинов (кроме стандартных) влияют на вывод звукового тракта?

Как отключить автоматическое начало воспроизведения трека при запуске программы?
Как перемещать вот эти столбцы? 1 не помогает(
11.jpg
companyZ
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #243 Nemu » 15.09.2018, 09:57

companyZ
Только плагины DSP, но они все выключены по-умолчанию. Звук полный сток.
А, ну и ещё foo_out_asio и foo_out_wasapi, отвечающие за вывод соответственно через ASIO и wasapi.

Настройки => Playback => убрать галку Save playback state (самая верхняя)

Правый клик по столбцу => убрать галку c Auto-sizing columns
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #244 companyZ » 15.09.2018, 11:04

Nemu,
Пример: есть альбом №1 71 трек, есть альбом №2 36треков, некоторые треки в альбомах одинаковые.
допустим играет №1
11.jpg
11.jpg (17.94 КБ) Просмотров: 3600

включаем №2
12.jpg
12.jpg (22.35 КБ) Просмотров: 3600

то есть получается песни с №1 перекачивали в №2?
Как отключить?

Добавлено спустя 3 часа 56 минут:
Кстати если удалять и добавлять альбом №2 то при каждом добавлении №2 будет отниматься 3 от №1
При удалении с плейлиста №2 назад 71 в №1 не становится
companyZ
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #245 Nemu » 15.09.2018, 19:09

companyZ
Это проблемы с que-шками в альбомах, то ли кодировка, то ли ещё что. Если видите, что у треков не отображается длительность, а последний трек альбома вообще с припиской streem, то это точно оно. Лечится открытием que-фалйа и пересохранением его.

Конкретно под ваш случай, исправленные куи к вашим альбомам, структура папок как в оригинальной раздаче на рутрекере:
https://yadi.sk/d/c9Lphe95cmINPw
Так же почему-то ругается на вторые que с wav, просто удалите их у себя, они не нужны.
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #246 companyZ » 15.09.2018, 19:31

Nemu,
Заменил, не помогло( они оттуда и взяты :smile:
Мне интересно почему треки то в плейлисте исчезают, их реально становится меньше.
Тесть если много раз удалять добавлять, то вообще станет 0.
с 71 стало 35
11.jpg

В оригинальной дефолтовой версии такого не наблюдается.
companyZ
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #247 Nemu » 15.09.2018, 19:58

companyZ
Тогда попробуйте сами пересохранить их. Т.е. просто откройте в блокноте, допишите любой символ, тут же удалите его и сохраните документ. Я хз почему, но вот так это работает. Если мои не помогли, то скорее всего проблема в правах доступа. После пересохранения скорее всего куи получают права текущего пользователя. Это предположение. Метаний треков лично я до вашего случая не замечал, я так боролся с неадекватностью отображения треков. Но вот скачал ваши пару альбомов и таки да, треки скачут. Но лично у меня это исправилось описанным способом. Как этого вообще не допустить — я хз.
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #248 companyZ » 15.09.2018, 20:22

Nemu:Тогда попробуйте сами пересохранить их. Т.е. просто откройте в блокноте, допишите любой символ, тут же удалите его и сохраните документ
не помогло(
companyZ
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #249 Nikolaich » 15.09.2018, 20:51

companyZ
совет от Nemu:
если последний трек альбома вообще с припиской streem, то это точно НЕ оно. НЕ Лечится открытием que-фалйа и пересохранением его:
для куй-файла сие есть КРИВИЗНА оного!
ошиПка может быть в неправильном пути к обрабатываемому файлу,
неверные параметры времени, например, "INDEX 01" для любого трека,
ошиПка в строке _TRACK ?? AUDIO_
лишние кавычки или их отсутствие в строках, где оные должны быть:
TITLE "Имя тега" с ошибкой, например: TITLE " "Имя тега" '
и, если, последний трек альбома вообще без времени продолжительности трека -
куй, однозначно, КРИВОЙ !!
ЗЫ. есть и ещё какие-то оБшиПки

Добавлено спустя 10 минут 36 секунд:
Nemu:
Так же почему-то ругается на вторые que с wav, просто удалите их у себя, они не нужны.
куй для *.wav прикладывается для юзверей, кои конвертят архивированные файлы для прожига СД-аудио болванок.

Добавлено спустя 36 минут 47 секунд:
companyZ:Мне интересно почему треки то в плейлисте исчезают, их реально становится меньше.
Это "сидит" в настройках твоего варианта фу - v1.4 внимательно пройдись по ним
Nikolaich M
Откуда: Пермь
Репутация: 16
С нами: 14 лет 10 месяцев

Сообщение #250 Nemu » 16.09.2018, 00:09

Nikolaich:то это точно НЕ оно. НЕ Лечится открытием que-фалйа и пересохранением его:
оно-оно
Вот так выглядит альбом с кривым отображением:
Изображение

Но стоит пересохранить куй, как тут же всё исправляется:
Изображение
Куй при этом может быть и кривой, но он так точно лечится. Без каких-либо изменений содержания.
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #251 Azaza » 16.09.2018, 00:46

Nemu:Вот так выглядит альбом с кривым отображением
Nemu:Но стоит пересохранить куй, как тут же всё исправляется:
Такое, обычно, бывает, если файлы скачивались в папку, которую фубар мониторинг, как библиотеку, при этом фубар проиндексировал файлы раньше, чем они скачались полностью. Тогда помогает просто ПКМ->Tagging->Reload info from files
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #252 Nemu » 16.09.2018, 02:55

Azaza:помогает просто ПКМ->Tagging->Reload info from files
И правда. Спасибо=)
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #253 companyZ » 16.09.2018, 06:55

Проделал всё выше перечисленное.
Скачал и установил новую 1.8.0617
Пере сохранял cue/
Переносил папки с музыкой в другое место, мониторинг именно с той папки куда перенес и именно двух альбомов ( после переноса снова пересохранил cue)
Reload info from files не помогает.
Изначально как и сейчас в плейлистах всё отображается и отображалось правильно никаких ? не было.
С каждым добавление отнимается по 3.
11.jpg

12.jpg

13.jpg

14.jpg

если к альбому
VA - [2008] добавлять VA -2005 все нормально.
11.jpg
11.jpg (38.96 КБ) Просмотров: 3482

а если к VA -2005 добавлять VA - [2008] начинается
12.jpg
12.jpg (35.02 КБ) Просмотров: 3482
companyZ
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #254 Nemu » 16.09.2018, 09:53

companyZ
Могу лишь посоветовать сделать конверт в потрековый flac и удалить que.
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #255 Nikolaich » 16.09.2018, 10:38

Nemu
"Могу лишь посоветовать сделать конверт в потрековый flac и удалить que"
я не сторонник "раздувания" количества файлов (реестр хотя и "резиновый, безразмерный"), хотя и НО . . .
- в некоторых случаях *.cue весьма полезен, при конвертации могут потеряться некоторые (или все) теги
companyZ
может стоит только попробовать отключить все группировки для плейлистов ?
ЗЫ. более "объёмный совет" отправляю в личку
Nikolaich M
Откуда: Пермь
Репутация: 16
С нами: 14 лет 10 месяцев

Сообщение #256 companyZ » 16.09.2018, 13:14

Господа, за что отвечает вот этот плагин?
11.jpg

После его удаления всё стало ОК.
13.jpg
13.jpg (58.9 КБ) Просмотров: 3422


сорри, не все ок, треки играют как попало не по очереди(
companyZ
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #257 Cobblestone-TLT » 11.07.2019, 16:12

Добрый день! Есть ли возможность добавить в сборку отображение рейтинга из тега файла и сохранение его в тег? А также добавить возможность быстрой установки этого рейтинга? Хочется добавить в плейлист столбец с отображением рейтинга для возможности сортировки(группировки) понравившихся треков. Давно пользуюсь сборкой от MedVed, но она безнадежно устарела. Решил попробовать эту, по оформлению интерфейс тот же, что радует, но вот отсутствие удобного взаимодействия с тегом рейтинга несколько печалит.
И еще, есть ли какая-то возможность глобального масштабирования элементов интерфейса? Монитор full hd, windows 10, во всех программах шрифты нормальные а в фубаре что шрифты, что кнопки - очень мелкие. Если с монитора (с близкого расстояния) еще как-то можно что-то разглядеть и попасть по кнопке, то с дивана на телевизоре это уже нереально. Нашел в настройках раздел Display\Columns UI\Colours and Fonts\ там удалось размер шрифтов привести к системным, но вот как кнопки увеличить, сам разобраться не могу.
Спасибо!
Cobblestone-TLT
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #258 Nemu » 11.07.2019, 18:14

Добрый.
1. Можно. Правый клик по столбам - поставить галку на rating, появится новый столб справа. Далее параметры - keyboard shortcuts - add new - в поле фильтра посика "rating" и добавляете нужным оценкам нужные клавиши. Галка global позволит сочетанию работать даже при неактивном окне фубара.
Для примера поставил сочетания win+num1...5
Изображение

В тэги этот рейтинг не пишется и от туда не берётся. Если нужно привязать жёстко к файлу, то скиньте образец файла с заполненным тегом, посмотрю как запихать. Но мне этот способ видится неправильным.

2. Видится, что только общесистемным способом (вин10): параметры - экран - масштабирование 125/150/175 %
Nemu
Автор темы
Аватара
Репутация: 45
С нами: 9 лет 8 месяцев

Сообщение #259 AHAPXICT » 11.07.2019, 20:47

Nemu:Но мне этот способ видится неправильным.
Запись рейтинга в тег файла самый правильный в нём нет привязки, но я не об этом. kgena_ua делал скрипт Rating & File attributes (JScript Panel) version "12112017" записывает рейтинг как в тег файла так и в базу данных.
P.S. не захотел сходу запустится, пару правок для JScript Panel v2.2.2.1.
Код: Выделить всё
    // ==PREPROCESSOR==
    // @name "Rating & File attributes (JScript Panel)"
    // @author "kgena_ua"
    // @version "12112017"
    // @feature "v1.4"
    // @feature "watch-metadb"
    // ==/PREPROCESSOR==

    // foo_playcount.dll required

    function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
    function RGBA(r,g,b,a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
    function getRed(color) {return ((color >> 16) & 0xff);}
    function getGreen(color) {return ((color >> 8) & 0xff);}
    function getBlue(color) {return (color & 0xff);}

    function RGBA_color(c) {
        return RGBA(getRed(c), getGreen(c), getBlue(c), b_hover_alpha);
    }

    var font_name = window.GetProperty(" text: font name", "Arial");
    var font_size = window.GetProperty(" text: font size", 10);
    var font_style = window.GetProperty(" text: font style", 0);

    var font;
    get_font();

    function get_font(){
        font = gdi.Font(font_name, font_size, font_style);
    }

    var ww, wh;

    var fso = new ActiveXObject("Scripting.FileSystemObject");

    DT_LEFT = 0x00000000;
    DT_CENTER = 0x00000001;
    DT_VCENTER = 0x00000004;
    DT_SINGLELINE = 0x00000020;
    DT_WORD_ELLIPSIS = 0x00040000;

    MF_ENABLED = 0x00000000;   
    MF_GRAYED = 0x00000001;
    MF_SEPARATOR = 0x00000800;

    IDC_HAND = 32649;
    IDC_ARROW = 32512;

    ColorTypeCUI = {
        text: 0,
        selection_text: 1,
        inactive_selection_text: 2,
        background: 3,
        selection_background: 4,
        inactive_selection_background: 5,
        active_item_frame: 6
    }

    ColorTypeDUI = {
       text: 0,
       background: 1,
       highlight: 2,
       selection: 3
    }

    function get_color(){   
        if (window.InstanceType == 0){
            bgcolor = window.GetColourCUI(ColorTypeCUI.background);
            color1 = window.GetColourCUI(ColorTypeCUI.text);
            color2 = window.GetColourCUI(ColorTypeCUI.selection_text);
            color_error = RGB(255,100,0);
        } else if (window.InstanceType == 1) {
            bgcolor = window.GetColourDUI(ColorTypeDUI.background);
            color1 = window.GetColourDUI(ColorTypeDUI.text);
            color2 = window.GetColourDUI(ColorTypeDUI.highlight);
            color_error = RGB(255,100,0);
        }
        window.Repaint();
    }

    get_color();

    function on_colors_changed(){
        get_color();
    }

    String.prototype.repeat = function(n) {
        return new Array(n + 1).join(this);
    }

    window.SetProperty(" - user", "");
    if (window.GetProperty(" - user") != "" ) window.SetProperty(" - user", "");
    window.SetProperty("-".repeat(50), "");
    if (window.GetProperty("-".repeat(50)) != "" ) window.SetProperty("-".repeat(50), "");

    var rating = 0, TAGrating, DBrating, nrating = 0;
    var rating_mode = window.GetProperty("rating_mode", 0);
    var set_rating_5 = window.GetProperty("set rating 5", false);

    var x_text = window.GetProperty(" text: x", 0);
    var y_text = window.GetProperty(" text: y", 0);
    var text = window.GetProperty(" text", true);

    var x_star = window.GetProperty(" star: x (0 - HCENTER)", 0);
    var y_star = window.GetProperty(" star: y (0 - VCENTER)", 0);
    var x_s, y_s;
    var star_size = window.GetProperty(" star: size", 20);
    var offset = window.GetProperty(" star: offset (percent of star size)", 20) / 100 * star_size;
    var shadow = window.GetProperty(" shadow", true);
    var fade_effect = window.GetProperty("fade effect", true);
    var no_rating_transparent  = window.GetProperty(" no rating img transparent (0-255)", 120);

    var file, file_attr, readwrite;

    var lbtn_down = false;
    var on_mouse = false;

    var tooltip = window.GetProperty(" tooltip", true);
    var tooltip_on = false;
    var tooltip_text;
    var tooltip_timer;

    var selection_mode = window.GetProperty("selection mode", 0);
    var t_type;
    var metadb;
    var count;
    on_item_focus_change();

    function on_paint(gr){
       !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
       
        x_s = x_star > 0 ? x_star + star_size / 2: (ww - (star_size + offset) * 4) / 2;
        y_s = y_star > 0 ? y_star + star_size / 2 : wh / 2;

        if (!lbtn_down) r_color = fb.IsPlaying ? color2 : color1;
        if (lbtn_down) r_color = readwrite ? fb.IsPlaying ? color2 : color1 : color_error;

        for (var i = 0; i < 5; i++) {   
            x_d = x_s + (i * (star_size + offset));
            !tooltip_on && star(gr, x_d, y_s, star_size, true, 0, color1, false, bgcolor, no_rating_transparent);
            !tooltip_on && star(gr, x_d, y_s, star_size, true, 0, r_color, shadow, bgcolor, star_alpha[i]);
        }

        h_t = gr.CalcTextHeight("000", font);
        w_t = gr.CalcTextWidth("000", font);
       
        y_t = y_text > 0 ? y_text : y_s - h_t * 0.5;
        x_t = x_text > 0 ? x_text : x_s - star_size / 2 - w_t;

        text && gr.DrawString( rating_mode == 0 ? "db" : "tag" , font, RGBA_color(color1), x_t, y_t, ww, wh);

        tooltip_on && draw_tooltip(gr);   

        gr.GdiDrawText( "", font, RGB(255,255,200), 20, 10, ww, wh );
    }

    function getNRating(posx) {
        nrating = Math.ceil(( posx + star_size / 2 - x_s ) / (star_size + offset ));
        if (nrating > 5) nrating = 5;
        if (nrating < 0) nrating = 0;
        if (nrating != 0) nrating = set_rating_5 ? 5 : nrating;
    }

    function getRating(){
      if ( count > 1 ) {
            TAGrating = 0;
            DBrating = 0;
            for (var i = 0; i < count; i++) {
                item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
                DBrating += parseInt(fb.TitleFormat("$if2(%rating%, 0)").EvalWithMetadb(item));
                TAGrating += parseInt(fb.TitleFormat("$if2($meta(rating), 0)").EvalWithMetadb(item));
            }
            rating = rating_mode == 0 ? DBrating : TAGrating;
            rating = Math.round(rating / count);
        } else {
            DBrating = fb.TitleFormat("$if2(%rating%,0)").EvalWithMetadb(metadb);
            TAGrating = fb.TitleFormat("$if2($meta(rating),0)").EvalWithMetadb(metadb);
            rating =  rating_mode == 0 ? DBrating : TAGrating;
        }
    }

    function setRating(){
       if ((nrating != rating) && metadb) {   
            if (rating_mode == 0) {
                if (count > 1) {
                    for (var i = 0; i < count; i++) {
                        item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
                        fb.RunContextCommandWithMetadb("Playback Statistics/Rating/" + (nrating == 0 ? "<not set>" : nrating), item);
                    }
                } else{
                    fb.RunContextCommandWithMetadb("Playback Statistics/Rating/" + (nrating == 0 ? "<not set>" : nrating), metadb);
                }
                rating = nrating;
            }
           
            if (rating_mode == 1) {
                if (count > 1) {
                    for (var i = 0; i < count; i++) {
                        item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
                        item_path = fb.Titleformat("%path%").EvalWithMetadb(item);//

                        try {     
                            file = fso.GetFile(item_path);   
                            var file_attr = parseInt(file.Attributes);     
                        } catch(e) {};   

                        var item_rw = file_attr == 32 ? true : false;

                        if (item_rw) {
                            var handle = item;
                            var handles = fb.CreateHandleList();
                            handles.Add(handle);
                            handles.UpdateFileInfoFromJSON(JSON.stringify({ "Rating" : nrating == 0 ? "" : nrating }));
                            handles.Dispose();
                            rating = nrating
                        }
                    }
                 } else {
                    if (readwrite){
                        var handle = metadb;
                        var handles = fb.CreateHandleList();
                        handles.Add(handle);
                        handles.UpdateFileInfoFromJSON(JSON.stringify({ "Rating" : nrating == 0 ? "" : nrating }));
                        handles.Dispose();
                        rating = nrating                   
                    }               
                }
            }
        }
        if (!readwrite && rating_mode == 1) {
            tooltip && info_tooltip();
        }
    }

    function on_mouse_lbtn_up(x,y){
        lbtn_down = false;
        setRating();
        check_star_state();
    }

    function on_mouse_lbtn_down(x,y) {
        lbtn_down = true;
        tooltip && clear_tooltip_timer();
        getNRating(x);
        check_star_state();
        window.Repaint();
    }

    function on_mouse_mbtn_up(){
        nrating = 0;
        setRating();
    }

    function on_mouse_move(x, y) {
        on_mouse = true;
        window.SetCursor(IDC_HAND);   
       
        if (lbtn_down){
            getNRating(x);
        }

        button_change_state();         
        check_star_state();         
        window.Repaint();
    }   

    function on_mouse_leave() {   
        on_mouse = false;
        button_leave_change_state();
        window.SetCursor(IDC_ARROW);
        window.Repaint();
    }   

    function on_mouse_wheel(delta) {
        tooltip && clear_tooltip_timer();
        if (delta > 0) {rating_mode = 0};
        if (delta < 0) {rating_mode = 1};
        window.SetProperty("rating_mode", rating_mode);
        on_item_focus_change();
        window.Repaint();
    }

    function on_playlist_switch() {
        on_item_focus_change();
    }

    function on_playback_new_track() {
        on_item_focus_change();
    }

    function on_playback_stop() {
        on_item_focus_change();
    }

    function on_selection_changed(metadb) {
        on_item_focus_change();
    }

    function on_item_focus_change() {
        switch (selection_mode) {
        case 0:
            metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();   
            break;   
        case 1:   
            metadb = fb.GetFocusItem();
            break;   
        }   
        if (metadb) on_metadb_changed();   
    }


    function on_metadb_changed() {
        count = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Count;
        if (metadb) {
            rating_mode = window.GetProperty("rating_mode") == 0 ? 0 : 1;
            getRating();
            check_star_state();
            get_file_attr();
        }
        window.Repaint();
    }

    function on_size(){
        ww = window.Width;   
       wh = window.Height;
    }

    function on_mouse_rbtn_up (x, y){   
        var _menu = window.CreatePopupMenu();
       
        _menu.AppendMenuItem(MF_ENABLED, 10, "Prefer now playing");   
        _menu.AppendMenuItem(MF_ENABLED, 11, "Follow selected track");   
        _menu.CheckMenuRadioItem(10, 11 , selection_mode + 10);   
       
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 20, "Store Ratings in the database");
        _menu.AppendMenuItem(MF_ENABLED, 21, "Store Ratings in the file tags");
        _menu.CheckMenuRadioItem(20, 21, rating_mode + 20);     
       
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 30, "Set Rating 5");
        _menu.CheckMenuItem(30, set_rating_5);   

        switch (file_attr) {
        case 32:   
            txt = "to read - only";
            break;     
        case 33:   
            txt = "to read - write";
            break;
        default:
            txt = "";
        }

        MF_STRING = txt ? MF_ENABLED : MF_GRAYED;
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_STRING, 40, "Change file attributes " + txt);
       
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 50, "Fade effect");
        _menu.CheckMenuItem(50, fade_effect);

        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 100, "Properties");
        _menu.AppendMenuItem(MF_ENABLED, 200, "Configure...");

        ret = _menu.TrackPopupMenu(x + 20, y - 20);
        if (ret == 0) return;

        switch (ret) {
        case 10:
        case 11:
            selection_mode = ret - 10;
            window.SetProperty("selection mode", selection_mode);
            on_item_focus_change();
            break;
        case 20:
        case 21:
            rating_mode = ret - 20;
            window.SetProperty("rating_mode", rating_mode);
            on_item_focus_change();
            break;
        case 30:
            window.SetProperty("set rating 5", !set_rating_5);
            set_rating_5 = window.GetProperty("set rating 5");
            break;
        case 40:
            switch (file_attr) {
            case 32:   
                if (metadb) change_file_attr(33); //read only
                on_item_focus_change();
                break;
            case 33:
                if (metadb) change_file_attr(32); //read write
                on_item_focus_change();
                break;
            }   
            break;
        case 50:
            window.SetProperty("fade effect", !fade_effect);
            fade_effect = window.GetProperty("fade effect");
            break;
        case 100:
            window.ShowProperties();
            break;   
        case 200:
            window.ShowConfigure();     
            break;
        }
        _menu.Dispose();
        return true;
    }

    function get_file_attr() {   
        t_type = track_type(metadb.RawPath);
        file_attr = 0;   
       
        if (t_type == "file") {   
            for (var i = 0; i < count; i++) {           
                item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
                item_path = fb.Titleformat("%path%").EvalWithMetadb(item);         
                try {           
                    file = fso.GetFile(item_path);           
                    file_attr += parseInt(file.Attributes);           
                } catch(e) {};             
            }             
            file_attr = Math.round(file_attr / count);   
        }
       
        var file_read_only = file_attr == 32 ? false : true;
        var file_cue = t_type == "cue" ? true : false;
        var stream = t_type == "stream"  ? true : false;

        tooltip_text = file_cue ? " cue file " : file_read_only && t_type == "file" ? " file" + (count > 1 ? "s are " : " is ") + "read only " : stream ? " stream " : "";

        if ((file_cue || file_read_only || stream) && rating_mode == 1 ) {   
            readwrite = false;                 
        } else {           
            readwrite = true;                     
        }                 
    }   

    function change_file_attr(k) {
        t_type = track_type(metadb.RawPath);
       
        if (t_type == "file") {
            for (var i = 0; i < count; i++) {
                item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);   
                item_path = fb.Titleformat("%path%").EvalWithMetadb(item);
                try {
                    file = fso.GetFile(item_path);
                    file.Attributes = k;
                } catch(e) {};
            }
        }   
    }

    function star(gr, x, y, img_size, fill, line_thickness, color, sh, sh_color, alpha){
        var radius = img_size / 2;
        var radius_2 = radius / 2.61803;
        line_thickness = line_thickness >= radius_2 ? radius_2 : line_thickness;
        var delta = line_thickness / 2 * Math.tan(72 / 180 * Math.PI);

        var points = [], sh_points = [];
        var x_points_1 = [], y_points_1 = [], x_points_2 = [], y_points_2 = [];

        for (var i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                x_points_1.push((radius - delta) * Math.cos(Math.PI * i / 10 * 2 - Math.PI / 2));
                y_points_1.push((radius - delta) * Math.sin(Math.PI * i / 10 * 2 - Math.PI / 2));
            } else {
                x_points_2.push((radius - delta) / 2.61803 * Math.cos(Math.PI * i / 10 * 2 - Math.PI / 2));
                y_points_2.push((radius - delta) / 2.61803 * Math.sin(Math.PI * i / 10 * 2 - Math.PI / 2));
            }
        }
           
        for (var i = 0; i < 5; i++) {
            points.push(x_points_1[i] + radius, y_points_1[i] + radius, x_points_2[i] + radius, y_points_2[i] + radius);
            sh_points.push(x_points_1[i] + radius + 1, y_points_1[i] + radius + 1, x_points_2[i] + radius + 1, y_points_2[i] + radius + 1);
        }

        var img = gdi.CreateImage(img_size, img_size);
        var temp_gr = img.GetGraphics();
        temp_gr.SetSmoothingMode(2);
       
        if (line_thickness > 0) {
            sh && temp_gr.DrawPolygon(sh_color, line_thickness, sh_points);
            temp_gr.DrawPolygon(color, line_thickness, points);
        }

        if (fill && line_thickness == 0) {
            sh && temp_gr.FillPolygon(sh_color, 1, sh_points);
            temp_gr.FillPolygon(color, 1, points)
        }

        gr.DrawImage(img, x - radius, y - radius, img_size, img_size, 0, 0, img_size, img_size, 0, alpha);
       
        img.ReleaseGraphics(temp_gr);
        img.Dispose();
        temp_gr = null;
        img = null;
    }

    function track_type(p) {
        var type;
        if (p.indexOf("file") >= 0 && p.indexOf("cue") >= 0){
            type = "cue";
        } else if (p.indexOf("file") >= 0){
            type = "file";
        } else if (p.indexOf("cdda") >= 0){
            type = "cdda";
        } else if (p.indexOf('://') >= 0 || p.indexOf('www') >= 0 || p.indexOf("youtube") >= 0 || p.indexOf("video") >= 0 || p.indexOf("vimeo") >= 0){
            type = "stream";
        } else {
            type = "";
        }
        return type;
    }

    var b_hover_state, b_hover_alpha = 0;
    var star_state = [];
    var star_alpha = [];
    check_star_state();
    var b_timer_started = false;

    function check_star_state() {
        star_state = [];
       
        for (var i = 0; i < 5; i++) {
            r = lbtn_down ? nrating : rating;
            if (i < r) {star_state[i] = 1} else (star_state[i] = 0);
        }
       
        if (!b_timer_started) button_alpha_timer();
    }

    function button_change_state() {
        if (!b_timer_started) button_alpha_timer();
        b_hover_state = 1;
    }

    function button_leave_change_state() {   
        if (b_hover_state != 0) {
            b_hover_state = 0;
        }
    }

    function button_alpha_timer() {
        b_timer_started = true;
       
        var on_step = 51;
        var off_step = 20;
       
        b_timer = window.SetInterval(function() {
            switch (b_hover_state) {
            case 0:
                b_hover_alpha = fade_effect ? Math.max(0, b_hover_alpha -= off_step) : 0;
                break;
            case 1:
                b_hover_alpha = fade_effect ? Math.min(255, b_hover_alpha += on_step) : 255;
                break;
            }
           
            for (var i = 0; i < 5; i++) {
                if (!star_alpha[i]) star_alpha[i] = 0;
               
                switch (star_state[i]) {
                case 0:
                    star_alpha[i] = fade_effect ? Math.max(0, star_alpha[i] -= off_step) : 0;
                    break;
                case 1:
                    star_alpha[i] = fade_effect ? Math.min(255, star_alpha[i] += on_step) : 255;
                    break;
                }
            }
           
            window.Repaint();

            if (!on_mouse){
                var tmp_off = [];
                var tmp_on = [];
                for(var i = 0; i < star_alpha.length; i++) {
                    if (star_state[i] != 1) tmp_off.push(star_alpha[i]);
                    if (star_state[i] == 1) tmp_on.push(star_alpha[i]);
                }
           
                if (b_hover_alpha <= 0 && Math.max.apply(null, tmp_off) <= 0 && Math.min.apply(null, tmp_on) >= 255){
                    window.ClearInterval(b_timer);
                    b_timer_started = false;
                }
            }
        }, 30);
    }

    function info_tooltip() {
        tooltip_on = true;
        window.Repaint();
        tooltip_timer &&  window.ClearTimeout(tooltip_timer);
        tooltip_timer = window.SetTimeout(function() {
            tooltip_on = false;
            window.Repaint();
            tooltip_timer && window.ClearTimeout(tooltip_timer);
        }, 1000);
    }

    function clear_tooltip_timer(){
        if (tooltip_timer){
            tooltip_on = false;
            window.ClearInterval(tooltip_timer);
        }
    }

    function draw_tooltip(gr){
        w_tt = 4 * (star_size + offset) + star_size;
        x_tt = x_s - star_size / 2;
        h_tt = gr.CalcTextHeight("0", font) + 2;
        y_tt = y_s - h_tt * 0.5;

        gr.GdiDrawText( tooltip_text, font, color1, x_tt, y_tt, w_tt, h_tt, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS);
    }

    function print(msg) {
        fb.trace(msg);
    }
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #260 Cobblestone-TLT » 11.07.2019, 22:49

Спасибо ответившим! Еще один вопрос, что необходимо настроить, чтобы можно было добавлять файлы в плейлист перетаскиванием мышью из папки?
Cobblestone-TLT
Репутация: 0
С нами: 10 лет 10 месяцев

Пред.След.

Вернуться в Релизы сборок