Страница 7 из 7 ПерваяПервая ... 67
Показано с 61 по 69 из 69

Тема: Скрипты для WSH Panel Mod и JScript Panel

  1. #61
    Модератор Аватар для MC Web
    Регистрация
    25.04.2012
    Сообщений
    2 110
    Цитата Сообщение от g00drich Посмотреть сообщение
    Подскажите, возможно вообще исполнение Прогресс бара плейлиста, как для отдельного трека по временной шкале?
    В теории возможно, если получится привязать переменную и вывести длину плейлиста (%length%), т.к. она работает только в панели Переключения плейлистов (CUI), насколько я помню.

  2. #62
    Участник форума
    Регистрация
    23.10.2023
    Сообщений
    68
    Цитата Сообщение от MC Web Посмотреть сообщение
    В теории возможно
    Тут главное к текущему проигрываемому треку плюсовать как-то время уже проигранных треков...
    01 трек + 02 трек + 03 трек (текущий)

  3. #63
    Модератор Аватар для MC Web
    Регистрация
    25.04.2012
    Сообщений
    2 110
    Цитата Сообщение от g00drich Посмотреть сообщение
    Тут главное к текущему проигрываемому треку плюсовать как-то время уже проигранных треков...
    Как я понял, данная задумка для реализации более реалистичного эффекта намотки ленты в кассете для всего альбома / плейлиста, а не потреково.
    Но там свои подводные камни и где то, по моему на форуме AIMP, видел обсуждение...

  4. #64
    Участник форума
    Регистрация
    23.10.2023
    Сообщений
    68
    Цитата Сообщение от MC Web Посмотреть сообщение
    Как я понял, данная задумка для реализации более реалистичного эффекта намотки ленты в кассете для всего альбома / плейлиста, а не потреково.
    Да, в том числе посмотреть как это будет на кассете.

    Цитата Сообщение от MC Web Посмотреть сообщение
    Но там свои подводные камни и где то, по моему на форуме AIMP, видел обсуждение...
    Я пробовал простой вариант, по количеству треков в плейлисте, намотка ступенчатая и чем меньше треков в плейлисте, тем хуже все это выглядит.
    Для нормальной намотки нужна временная шкала, как это сделать, пока не нашел...

  5. #65
    Модератор Аватар для MC Web
    Регистрация
    25.04.2012
    Сообщений
    2 110
    Цитата Сообщение от g00drich Посмотреть сообщение
    Я пробовал простой вариант, по количеству треков в плейлисте, намотка ступенчатая и чем меньше треков в плейлисте, тем хуже все это выглядит.
    Для нормальной намотки нужна временная шкала, как это сделать, пока не нашел...
    Выдержка из обсуждения на форуме AIMP (https://www.aimp.ru/forum/index.php?...5497#msg425497):
    Цитата Сообщение от McClaud
    В настоящее время можно сделать лишь фиксированный по времени рулон (на Нагре я это сделал), а вот привязать длину рулона к плейлисту возможности нет.
    Попробуй такой вариант, с фиксированной длиной рулона ленты в кассете (30, 60, 90, 120 минут)...

  6. #66
    Участник форума
    Регистрация
    23.10.2023
    Сообщений
    68

    Playlist Total Progress Bar

    MC Web, наваял, как мог, прогресс бар для плейлиста, который можно будет привязать к кассете. Потестируйте...

    Нажмите на изображение для увеличения. 

Название:	Буфер обмена_03-20-2025_02.jpg 
Просмотров:	12 
Размер:	14,7 Кб 
ID:	2071

    Код:
    // ==PREPROCESSOR==
    // @name "Playlist Total Progress Bar"
    // @version "1.0"
    // ==/PREPROCESSOR==
    
    // ================================================== //
    // (2025-03-20)
    // ================================================== //
    
    // Функция формирования строкового формата для выравнивания
    function StringFormat() {
        var h_align = 0,
            v_align = 0,
            trimming = 0,
            flags = 0; // Инициализация переменных
    
        switch (arguments.length) {
            case 4:
                flags = arguments[3];
                break; // Добавлен break для предотвращения "падения" в следующий case
            case 3:
                trimming = arguments[2];
                break; // Добавлен break
            case 2:
                v_align = arguments[1];
                //break; // Добавлен break
            case 1:
                h_align = arguments[0];
                break; // Добавлен break
            default:
                return 0; // Если аргументы не подходят, вернуть 0
        }
        // Формирование битового представления параметров
        return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
    }
    
    // Объект с параметрами выравнивания
    StringAlignment = {
        Near: 0,
        Center: 1,
        Far: 2
    };
    
    // Функция для создания цвета в формате RGB
    function RGB(r, g, b) {
        return (0xff000000 | (r << 16) | (g << 8) | (b)); // Установка альфа-канала на 255
    }
    
    // Функция форматирования времени
    function TimeFmt(t) {
        var zpad = function(n) { // Добавление нуля перед числом, если оно меньше 10
            var str = n.toString();
            return (str.length < 2) ? "0" + str : str;
        }
        
        var h = Math.floor(t / 3600); // Часы
        t -= h * 3600; // Обновление времени
        var m = Math.floor(t / 60); // Минуты
        t -= m * 60; // Обновление времени
        var s = Math.floor(t); // Секунды
    
        // Форматирование строки времени
        if (h > 0) return h.toString() + ":" + zpad(m) + ":" + zpad(s);
        return m.toString() + ":" + zpad(s);
    }
    
    var g_timer; // Таймер для обновления
    
    var ww, wh; // Переменные для ширины и высоты окна
    var g_font = gdi.Font("Segoe UI", 12, 0); // Шрифт для отображения текста
    var g_tfo = fb.GetPlaylistName(plman.ActivePlaylist); // Имя текущего плейлиста
    var g_stringformat = StringFormat(StringAlignment.Center, StringAlignment.Center); // Формат строки для центрирования
    
    // Цвета для фона и прогресса
    var bg_color = RGB(190,190,190); // Цвет фона
    var fg_color = RGB(0, 150, 200); // Цвет прогресса
    //var txt; // Переменная для текста
    
    // Обработка изменения размера окна
    function on_size() {
        ww = window.Width; // Установка ширины
        wh = window.Height; // Установка высоты
    }
    
    // Основная функция рисования
    function on_paint(gr) {
        gr.SetTextRenderingHint(5); // Установка режима рендеринга текста
        var playlist = plman.GetPlaylistItems(plman.ActivePlaylist); // Получение текущего плейлиста
        var total_tracks = plman.PlaylistItemCount(plman.ActivePlaylist); // Общее число треков в плейлисте
        var txt; // Переменная для текста
    
        // Вычисление общей продолжительности треков
        var total_duration = 0;
        for (var i = 0; i < total_tracks; i++) {
            total_duration += playlist.Item(i).Length; // Суммирование длительностей
        }
    
        // Вычисление текущего времени воспроизведения
        var current_time = 0;
        var now_playing = fb.GetNowPlaying(); // Получение текущего воспроизводимого трека
    
        if (now_playing && total_tracks > 0) { // Проверка на наличие воспроизводимого трека и треков в плейлисте
            var current_index = -1; // Индекс текущего трека
    
            // Определение индекса текущего трека в плейлисте
            for (var i = 0; i < total_tracks; i++) {
                if (playlist.Item(i).Path === now_playing.Path) {
                    current_index = i; // Запоминаем индекс трека
                    break; // Прерываем цикл
                }
            }
    
            if (current_index !== -1) { // Если текущий трек найден
                // Суммируем продолжительности всех предыдущих треков
                for (var i = 0; i < current_index; i++) {
                    current_time += playlist.Item(i).Length; // Добавляем время предыдущих треков
                }
                current_time += fb.PlaybackTime; // Добавляем текущее время воспроизведения
            }
        }
    
        // Вычисление процента прогресса
        var progress = (total_duration > 0) ? (current_time / total_duration) * 100 : 0;
    
        // Рисование прогресс-бара
        txt = g_tfo + ":  " + TimeFmt(current_time) + " / " + TimeFmt(total_duration); // Форматирование текста
        gr.FillSolidRect(0, 0, ww, wh, bg_color); // Заливка фона
        //gr.FillSolidRect(0, 0, (ww * progress) / 100, wh, fg_color); // Заливка прогресс-бара
        gr.FillGradRect(0, 0, (ww * progress) / 100, wh, 90, RGB(240, 240, 240), RGB(0, 100, 150));
        // Отображение текста с прогрессом
        gr.DrawString(txt, g_font, RGB(0, 0, 0), 0, 0, window.Width, window.Height, g_stringformat);
        gr.DrawRect(0,0, ww-1, wh-1, 1.0, RGB(150, 150, 150));
    }
    
    // Обработка нового трека
    function on_playback_new_track(info) {
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка остановки воспроизведения
    function on_playback_stop() {
        if (g_timer) { // Проверка существует ли таймер
            window.KillTimer(g_timer); // Убийство таймера
        }
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка изменения времени воспроизведения
    function on_playback_time() {
        if (g_timer) { // Проверка существует ли таймер
            window.KillTimer(g_timer); // Убийство таймера
        }
        // Установка нового таймера, если длина воспроизведения больше 0
        if (fb.PlaybackLength > 0) {
            g_timer = window.CreateTimerInterval(200); // Установка интервала обновления
        }
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка таймеров
    function on_timer() {
        window.Repaint(); // Перерисовка окна
    }

  7. #67
    Модератор Аватар для MC Web
    Регистрация
    25.04.2012
    Сообщений
    2 110
    g00drich, вроде работает, только при смене плейлиста его название не обновляется.

    Нажмите на изображение для увеличения. 

Название:	Image 001.png 
Просмотров:	14 
Размер:	233,6 Кб 
ID:	2073

    Может ещё есть смысл сделать перевод отображения времени звучания больших плейлистов в более удобный вид ?

    Нажмите на изображение для увеличения. 

Название:	Image 003.png 
Просмотров:	15 
Размер:	77,3 Кб 
ID:	2074
    Последний раз редактировалось MC Web; 20.03.2025 в 15:11.

  8. #68
    Участник форума
    Регистрация
    23.10.2023
    Сообщений
    68
    Цитата Сообщение от MC Web Посмотреть сообщение
    вроде работает, только при смене плейлиста его название не обновляется.
    Подправил, вроде меняется название, показывает плейлист, где трек воспроизводится.

    Цитата Сообщение от MC Web Посмотреть сообщение
    Может ещё есть смысл сделать перевод отображения времени звучания больших плейлистов в более удобный вид ?
    Из JSPlaylist взял недели и дни...

    Нажмите на изображение для увеличения. 

Название:	Буфер обмена_03-21-2025_01.jpg 
Просмотров:	10 
Размер:	14,6 Кб 
ID:	2075
    Код:
    // ==PREPROCESSOR==
    // @name "Playlist Total Progress Bar"
    // @version "1.1"
    // ==/PREPROCESSOR==
    
    // ================================================== //
    // (2025-03-21)
    // ================================================== //
    
    // Функция формирования строкового формата для выравнивания
    function StringFormat() {
        var h_align = 0,
            v_align = 0,
            trimming = 0,
            flags = 0; // Инициализация переменных
    
        switch (arguments.length) {
            case 4:
                flags = arguments[3];
                break; // Добавлен break для предотвращения "падения" в следующий case
            case 3:
                trimming = arguments[2];
                break; // Добавлен break
            case 2:
                v_align = arguments[1];
                //break; // Добавлен break
            case 1:
                h_align = arguments[0];
                break; // Добавлен break
            default:
                return 0; // Если аргументы не подходят, вернуть 0
        }
        // Формирование битового представления параметров
        return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
    }
    
    // Объект с параметрами выравнивания
    StringAlignment = {
        Near: 0,
        Center: 1,
        Far: 2
    };
    
    // Функция для создания цвета в формате RGB
    function RGB(r, g, b) {
        return (0xff000000 | (r << 16) | (g << 8) | (b)); // Установка альфа-канала на 255
    }
    
    // Функция форматирования времени
    function formatPlaylistTotalDurationText(seconds) {
        var DURATION = {
            weeks: 0,
            days: 0,
            text: ""
        };
    
        // Вычисляем недели и дни
        if (seconds > 0) {
            if (Math.floor(seconds / 604800) > 0) {
                DURATION.weeks = Math.floor(seconds / 604800);
                seconds -= DURATION.weeks * 604800;
                DURATION.text = DURATION.weeks + (DURATION.weeks > 1 ? "нд" : "нд");
            }
            if (Math.floor(seconds / 86400) > 0) {
                DURATION.days = Math.floor(seconds / 86400);
                seconds -= DURATION.days * 86400;
                if (DURATION.text.length > 0) {
                    DURATION.text += " " + DURATION.days + (DURATION.days > 1 ? "д" : "д");
                } else {
                    DURATION.text = DURATION.days + (DURATION.days > 1 ? "д" : "д");
                }
            }
        }
    
        // Форматируем оставшиеся секунды в формате HH:MM:SS
        var hours = Math.floor(seconds / 3600);
        seconds %= 3600;
        var minutes = Math.floor(seconds / 60);
        var remainingSeconds = Math.floor(seconds % 60); // Берём только целые секунды
    
        // Добавляем ведущие нули, если необходимо
        var formattedTime = (hours < 10 ? "0" + hours : hours) + ":" +
            (minutes < 10 ? "0" + minutes : minutes) + ":" +
            (remainingSeconds < 10 ? "0" + remainingSeconds : remainingSeconds);
    
        // Объединяем текст для недель/дней с отформатированным временем
        if (DURATION.text.length > 0) {
            return DURATION.text + " " + formattedTime;
        } else {
            return formattedTime;
        }
    }
    
    var g_timer; // Таймер для обновления
    
    var ww, wh; // Переменные для ширины и высоты окна
    var g_font = gdi.Font("Segoe UI", 12, 0); // Шрифт для отображения текста
    var g_tfo = fb.GetPlaylistName(fb.PlayingPlaylist); // Имя текущего плейлиста
    var g_stringformat = StringFormat(StringAlignment.Center, StringAlignment.Center); // Формат строки для центрирования
    
    // Цвета для фона и прогресса
    var bg_color = RGB(190, 190, 190); // Цвет фона
    var fg_color = RGB(0, 150, 200); // Цвет прогресса
    
    // Обработка изменения размера окна
    function on_size() {
        ww = window.Width; // Установка ширины
        wh = window.Height; // Установка высоты
    }
    
    // Основная функция рисования
    function on_paint(gr) {
        gr.SetTextRenderingHint(5); // Установка режима рендеринга текста
        var playlist = plman.GetPlaylistItems(plman.PlayingPlaylist); // Получение текущего плейлиста
        var total_tracks = plman.PlaylistItemCount(plman.PlayingPlaylist); // Общее число треков в плейлисте
        var txt; // Переменная для текста
    
        // Вычисление общей продолжительности треков
        var total_duration = 0;
        for (var i = 0; i < total_tracks; i++) {
            total_duration += playlist.Item(i).Length; // Суммирование длительностей
        }
    
        // Вычисление текущего времени воспроизведения
        var current_time = 0;
        var now_playing = fb.GetNowPlaying(); // Получение текущего воспроизводимого трека
    
        if (now_playing && total_tracks > 0) { // Проверка на наличие воспроизводимого трека и треков в плейлисте
            var current_index = -1; // Индекс текущего трека
    
            // Определение индекса текущего трека в плейлисте
            for (var i = 0; i < total_tracks; i++) {
                if (playlist.Item(i).Path === now_playing.Path) {
                    current_index = i; // Запоминаем индекс трека
                    break; // Прерываем цикл
                }
            }
    
            if (current_index !== -1) { // Если текущий трек найден
                // Суммируем продолжительности всех предыдущих треков
                for (var i = 0; i < current_index; i++) {
                    current_time += playlist.Item(i).Length; // Добавляем время предыдущих треков
                }
                current_time += fb.PlaybackTime; // Добавляем текущее время воспроизведения
            }
        }
    
        // Вычисление процента прогресса
        var progress = (total_duration > 0) ? (current_time / total_duration) * 100 : 0;
    
        // Рисование прогресс-бара
        txt = g_tfo + ":  " + formatPlaylistTotalDurationText(current_time) + " / " + formatPlaylistTotalDurationText(total_duration); // Форматирование текста
        gr.FillSolidRect(0, 0, ww, wh, bg_color); // Заливка фона
        //gr.FillSolidRect(0, 0, (ww * progress) / 100, wh, fg_color); // Заливка прогресс-бара
        gr.FillGradRect(0, 0, (ww * progress) / 100, wh, 90, RGB(240, 240, 240), RGB(0, 100, 150));
        // Отображение текста с прогрессом
        gr.DrawString(txt, g_font, RGB(0, 0, 0), 0, 0, window.Width, window.Height, g_stringformat);
        gr.DrawRect(0, 0, ww - 1, wh - 1, 1.0, RGB(150, 150, 150));
    }
    
    // Переключение плейлиста
    function on_playlist_switch() {
        g_tfo = fb.GetPlaylistName(fb.PlayingPlaylist); // Обновляем имя текущего плейлиста
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка нового трека
    function on_playback_new_track(info) {
        g_tfo = fb.GetPlaylistName(fb.PlayingPlaylist); // Обновляем имя текущего плейлиста
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка остановки воспроизведения
    function on_playback_stop() {
        if (g_timer) { // Проверка существует ли таймер
            window.KillTimer(g_timer); // Убийство таймера
        }
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка изменения времени воспроизведения
    function on_playback_time() {
        if (g_timer) { // Проверка существует ли таймер
            window.KillTimer(g_timer); // Убийство таймера
        }
        // Установка нового таймера, если длина воспроизведения больше 0
        if (fb.PlaybackLength > 0) {
            g_timer = window.CreateTimerInterval(200); // Установка интервала обновления
        }
        window.Repaint(); // Перерисовка окна
    }
    
    // Обработка таймеров
    function on_timer() {
        window.Repaint(); // Перерисовка окна
    }

  9. #69
    Модератор Аватар для MC Web
    Регистрация
    25.04.2012
    Сообщений
    2 110
    Цитата Сообщение от g00drich Посмотреть сообщение
    Подправил, вроде меняется название, показывает плейлист, где трек воспроизводится.
    Да, теперь нормально, только для корректного отображения при начальном запуске, для себя заменил:

    PlayingPlaylist на ActivePlaylist

    Из плюсов можно проматривать длительность имеющихся плейлистов.
    Последний раз редактировалось MC Web; 21.03.2025 в 09:44.

Страница 7 из 7 ПерваяПервая ... 67

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •