foobar2000 0.8.3 custom by Draikin

Discussion in 'Nguồn phát từ máy tính' started by tml3nr, 3/8/17.

  1. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Thân gửi anh em 4rum vnav,
    Bản dựng foobar2000 - vnav V2.2.1 32bit mới nhất đã có tại đây: ( 899 MB)
    link MediaFire :
    https://www.mediafire.com/file/o1be...0_2.2_23Jul24_32bit__tech_vnav_2.2.1.rar/file

    Có điểm gì mới :
    1. về hình thức/tính năng:
    • tự tìm kiếm lời bài hát (lyrics) từ Google: Dịch sang tiếng Việt (qua google)
    • biến cover art thành CD/LP xoay xoay cho vui mắt: giả lập đồng bộ màu với dàn đèn LED (là plugin Analog VU Meter).
    • thay đổi đồng hồ VU Meter (phía trên cùng) : right click trên khu vực phía trái của mấy buttons để hiện menu ngữ cảnh -> chọn VU Meter.
    • cài đặt lại youtube.
    • tinh chỉnh bớt 1 vài tính năng để skin 'nhẹ' hơn cho CPU và RAM (lite skin). skin cũ vẫn để nguyên và có thể chuyển qua lại giữa 2 skin trong khi foobar2000 vẫn phát nhạc.
    • cuối cùng : 'trả nợ' 1 plugin hiển thị file html. hẳn các bạn còn nhớ trong post về âm lịch Việt nam, mình đã 'ăn gian' khi dùng web browser để hiển thị âm lịch Việt nam và đánh tráo khái niệm khi xem Web browser cũng là 1 plugin. khoảng đầu tháng 7/2024 đã có 1 plugin foo_vis_text (giờ đổi thành foo_uie_webview, @pqyt https://www.foobar2000.org/components/view/foo_uie_webview) cài đặt Microsoft Edge WebView2 [https://developer.microsoft.com/en-us/microsoft-edge/webview2] với core chrome, (những máy tính không có Web browser Microsoft Edge có thể dowanload bản Microsoft Edge WebView2 về cài). plugin này nhận được hưởng ứng nhiệt liệt từ cộng đồng những ngày đầu, nhưng do tính năng còn hạn chế, và nhất là chưa phân luồng audio qua foobar2000 nên mới chỉ dừng ở dựng giao diện cho vui mắt, trong khi vẫn dùng ké tài nguyên của foobar2000 (do Windows cấp phát). nếu được hỗ trợ thêm nhiều callbacks và xử lý được audio, việc dựng skin sẽ rất dễ dàng.

    2. kỹ thuật:
    Lưu yt-dl.exe vào chung thư mục với plugin youtube cho gọn [để ở folder khác cũng được]
    yt-dl sẽ là trợ thủ giúp plugin youtube xử lý YouTuBe.​
    • bước 2: trong màn hình preference của plugin youtube, chọn tab [maintenance], right click trên mục youtube-dl (là tiền bối của yt-dl), chọn External. sau đó, foobar2000 sẽ mở ra cửa sổ truy cập file để ta chọn file yt-dl.exe. (như hình)
    • bước 3: lập lại bước 2, nhưng chọn mục [prefer youtube-dl over internal analyzer] - ưu tiên cao thủ yt-dl.exe đối phó với chiêu thức mới của YouTuBe.
    • bước 4: khởi động lại foobar2000.
    hổm rày luxubu với EuRO, ngủ gà ngủ gật suốt chậm trễ việc cập nhật, mà tính năng này lại được nhiều bạn quan tâm. nay xin cáo lỗi với 1 tính năng mới (sẽ đề cập trong post sau).​
    • dựng bản lite skin: thiệt, bản dựng hiện tại đã bị nhồi nhét quá nên ảnh nhiều lúc xụi lơ, nổi quạu hoài nên cũng phiền lòng nhiều bạn, đã vậy làm máy tính nóng như cái lò. chỉ có nước bỏ bớt vài tính năng.
    cũng may, CUI (từ 1.0.0-alpha.1)có hỗ trợ âm thầm đổi qua lại giữa các skin mà vẫn không ảnh hưởng đến trải nghiệm người dùng (hắn vẫn play nhạc) :
    foobar2000 /columnsui:export-quiet <path> : khắc xuất theme (skin)
    foobar2000 /columnsui:import-quiet <path> : khắc nhập theme (skin)​

    chỉ cần chỉ ra file theme/skin FCL trong phần <path>. foobar2000 sẽ rốt ráo thực hiện giải phóng mặt bằng, dựng theme/skin mới trong 1 nốt nhạc.
    Code:
    // VNAV june24: switch to fb2k_vnav_2.2, full feature version
    fb.RunMainMenuCommand("View/Visualizations/Analog VU Meter skins/<Default>/Model 702_light yellow_snhezetv 110");
    
    var themeLite =fb.ProfilePath + "skins\\theme\\"+ 'fb2k_vnav_2.2_lite_01Jun24.fcl';
    var themeFull = fb.ProfilePath + "skins\\theme\\"+ 'fb2k_vnav_2.2_full_01Jun24.fcl';
    
    
    themeLite = "\"" + fb.FoobarPath + "foobar2000.exe\" /columnsui:export-quiet " + "\"" + themeLite   + "\"";
    themeFull = "\"" + fb.FoobarPath + "foobar2000.exe\" /columnsui:import-quiet " + "\"" + themeFull  + "\"";
                  
    var WshShell = new ActiveXObject("WScript.Shell");                    WshShell.Run(themeLite, 0, true); // save current /lite version
    WshShell.Run(themeFull, 0, true); // switch to full feature version
    
    vậy thôi.

    Lưu ý:
    • Để hiển thị đúng các biểu tượng trong control bar (phía dưới), thông tin thời gian audio track (phía trên), các bác cân nhắc cài các font trong thư mục 'foobar. . . /skin/tech fonts'
    • Để MilkDrop visualization hoạt động: vui lòng chỏ đường dẫn (trong phần reference) đến đúng set milkdrop (trong thư mục milkdrop_visualization).
    • Sau 1 thời gian, các artist arts (hình ca sỹ) có thể được download quá nhiều làm tăng dung lượng lưu trữ ở các thư mục js_data\artists ; yttm\art_img và file wavecache.db (chứa data các file nhạc của plugin foo_wave_seekbar.dll) => xem xét xóa bớt file nếu đã thay đổi thư viện nhạc (bớt file nhạc khỏi thư viện).
    • Để plugin foo_vis_text hiển thị được file template.html (là file hiển thị âm lịch Việt nam), cần chỉ đường dẫn đến file này trong mục [file\Preferences\Text-visualizer]. file template.html được lưu trong thư mục [foobar2000 . . .]\foo_vis_text.
    Bản này được test trên màn hình 1920 x 1080, scale 150%. với các màn hình độ phân giải cao hơn, các bác tham khảo thông tin sau giúp (1 bác đưa, mình không có điều kiện test):
    https://www.quadraphonicquad.com/forums/threads/foobar2000-on-4k-display.29342/.

    Đã test trên máy cấu hình tương đương:
    Windows 11,
    CPU: AMD 7, RAM 12 GB
    Direct X: 12
    chúc các bác sức khỏe và luôn yêu đời.

    Foobar2000 và các plugin, chương trình đình kèm thuộc bản quyền của các nhà phát triển tương ứng. mình đã cẩn thận quét virus và xem xét nguồn nhưng mình và mạng nghe nhìn Việt nam (vnan.vn) không chịu trách nhiệm với các rủi ro liên quan (nếu có).

    //=========================//

    đôi lời kết:
    có lẽ đến lúc chúng ta để foobar2000 bản 32bit ở lại với version 2.2.1 này. những gì nói đã nói hết, những gì cần viết đã viết và dù còn nặng lòng nhưng khó thể chấp nhận 32bit với giới hạn 4GB RAM là quá sức chịu đựng của hắn.
    với ngưỡng này, CPU luôn phải chia sẻ gánh nặng cũng không hay (trí nhớ kém thì não phải làm việc nhiều hơn).
    vì vậy, từ post sau, chúng ta sẽ chuyển qua bản 64bit.
     

    Attached Files:

    Last edited: 23/7/24
  2. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291

    Attached Files:

    tranman likes this.
  3. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Thân gửi anh em 4rum vnav,

    Bản dựng foobar2000 - vnav V1.0.0 64bit đã có tại đây: ( 245 MB)
    link MediaFire :
    https://www.mediafire.com/file/2uvkzvihflvllyh/fb2k_vnav_1.0.0_64_22jul24.rar/file

    và đây, bản dựng 64bit fb2k_vnav_1.0.0 64bit.
    khoan vui à - được cái lọ, mất cái chai.

    bản 64bit sẽ phải chia tay với rất rất nhiều plugins, trong đó có Panel Splitter và Analog VU Meter con cưng nên xem như nói không với màu mè hoa lá cành. vậy cũng dẹp CUI luôn, quay về cái 'máng' DUI vậy - là phiên bản fb2k_vnav 1.0 giao diện 32bit đầu tiên (giờ là 64 bit).
    xem như có nền nhà DUI rộng gấp đôi, làm thôi.

    I: quy hoạch cái nhà skin với mấy chức năng:
    1. chức năng chính:
    - duyệt cây thư mục : nhiều file nhạc mới kiếm được đâu đó, test xem xét trước khi nhập kho.
    - duyệt thư viện : audio nhập kho, xem như sách nhập vô thư viện (library) thì phải có cách kiếm nhanh
    + lập chỉ mục: foobar2000 tự làm và làm rất tốt khi có 'hàng' vào/ra.
    + kiếm "hàng":
    • duyệt library theo các kiểu :album, artist, gene, . . . cây thư mục (folder structure).
    • duyệt libarary trực quan: nhìn album art (thumbnail) để chọn, cũng liệt kê theo artist, title, folder structure. (theo album hay gene thì hên xui vì metatag thiếu đủ sai lệch từa lưa là nhiều).
    • duyệt library theo phân cấp: chọn 1 folder, các album sẽ hiện ra dưới dạng album art để lựa.
    - now playing: hiển thị thông tin artist, album, title, albumart của bài nhạc đang play.
    - control buttons: các buttons tương tác (play, next, prv, pause, stop . . . ).
    - quản lý playlist: đây là các sổ ghi chép các bài hát theo từng chủ đề (thế mạnh của nhạc số), mỗi chủ đề là 1 playlist. thêm/bớt bài hát, xóa chủ đề . . . [hồi còn karaoke bấm số, có ông nhớ luôn 1 playlist, vừa vô 'trỏng' là kiếm remote bấm lia bấm lịa]

    2. phụ kiện:
    - nghe nhạc từ youtube : nghe, xem và download.
    - milkdrop, spectrum , VU Meter : cho hiệu ứng đồ họa vui mắt.
    - xem tiểu sử artist (từ trang web last.fm).
    - xem lyrics (sync và async).
    - google: lyrics search, dịch ra tiếngt Việt.

    II. dựng skin
    nhìn list hẻo thiệt, mà còn không có plugin tương ứng đáng tin. cũng may, JScript Panel 3 có 64bit nên coding vậy. tính năng nào không có script sẵn thì chuyển từ các nền tảng khác (WSH, SMP, JScipt Panel), không có sẵn thì tự code (mình "nổ" đấy, chủ yếu cóp pác thôi).

    1. về hình thức/tính năng:
    • như nêu trên.
    2. kỹ thuật:
    phần này chỉ nêu cách download video từ youtube.
    trong các post trước, các bạn đã được nêu các bước cài đặt plugin youtube và yt-dl.exe.

    có 2 cách download:
    i- nếu foobar2000 đang trực tiếp phát youtube, right click trong màn hình [now playing] để hiển thị context menu cho phép download video đang phát.
    cách này rất trực quan, 1 nhát ngay và luôn nhưng . . .: chỉ download các video được foobar2000 đang phát, nhưng số video này thường bị hạn chế do đặc tính của plugin youtube (có lẽ API key của plugin được chia sẻ chung).
    ii- cung cấp youtube video link (URL) cho foobar2000: chẳng lẽ copy từ youtube rồi paste cho foobar2000 !!! đúng luôn.
    + bước 1: trong màn hình web browser đang truy cập 1 video youtube, right click chọn [copy video URL].
    + bước 2: quay lại màn hình [now playing] của foobar2000, right click. foobar2000 sẽ tự động lấy link vừa copy để ta xem xét quyết định. cách này có khả năng lấy được cả channel list và video gợi ý liên quan, cần kiểm tra quá trình download kẻo mang về cả tấn video.
    [vui lòng xem màn hình đính kèm]

    như đã nêu, nếu kết hợp với ffmpeg (1 thư viện/phần mềm dòng lệnh mã nguồn mở, xử lý audio, video ), foobar2000 có thể tự động làm thêm 1 số động tác sau khi download: trích lấy audio, nhúng metadata, thumbnail. . .
    # chi tiết về ffmpeg: https://github.com/yt-dlp/FFmpeg-Builds hay https://www.ffmpeg.org/
    # chiết tiết tham số dòng lệnh khi kết hợp giữa yt-dl và ffmpeg: https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#post-processing-options

    mình hạn chế tối đa parameters để các bạn dễ tham khảo và giữ video - nhìn (để bù 'chất' nhạc - nghe).
    điểm cuối: download youtube về thư mục nào. măc nhiên lưu vào folder [d:\music\youtube_source], các bạn có thể thay đổi thư mục này trong context menu ở màn hình [now playing], mục sub-menu [Path download]

    vậy thôi,
    Lưu ý:
    • Để hiển thị đúng các biểu tượng trong control bar (phía dưới), thông tin thời gian audio track (phía trên), các bác cân nhắc cài các font [Segoe Fluent Icons], [Material Icons Round] nếu không dùng windows 11. (các font này được kèm trong các bản fb2k_vnav 32 bit).
    • Sau 1 thời gian, các artist arts (hình ca sỹ) có thể được download quá nhiều làm tăng dung lượng lưu trữ ở các thư mục [foobar2000]\profile\$recycle.bin => xem xét xóa bớt file nếu đã thay đổi thư viện nhạc (bớt file nhạc khỏi thư viện).

    Đã test trên máy cấu hình tương đương:
    • Windows 11,
    • CPU: AMD 7, RAM 12 GB
    • Direct X: 12
    • Màn hình 15.6 inch, 1920 x 1080, scale 150%.

    chúc các bác sức khỏe và luôn yêu đời.

    /*/
    Foobar2000 và các plugin, chương trình đình kèm thuộc bản quyền của các nhà phát triển tương ứng. mình đã cẩn thận quét virus và xem xét nguồn nhưng mình và mạng nghe nhìn Việt nam (vnan.vn) không chịu trách nhiệm với các rủi ro liên quan (nếu có).
    /*/
    //=========================//
     

    Attached Files:

    Last edited: 24/7/24
  4. thienphuc74

    thienphuc74 Advanced Member

    Joined:
    4/9/15
    Messages:
    112
    Likes Received:
    13
    QUÁ TUYỆT VỜI. CẢM ƠN VILKING NHIỀU LẮM!
     
  5. thienphuc74

    thienphuc74 Advanced Member

    Joined:
    4/9/15
    Messages:
    112
    Likes Received:
    13
    upload_2024-8-11_23-56-25.png

    BỊ LỖI MẤT HIỂN THỊ VIDEO KHI CHUYỂN QUA LẠI GIỮA CÁC TAB
     
  6. thienphuc74

    thienphuc74 Advanced Member

    Joined:
    4/9/15
    Messages:
    112
    Likes Received:
    13
    ĐẦU RA THIẾT BỊ CHƯA CÓ ASIO PHẢI CÀI THÊM NHÉ
     
    Last edited: 12/8/24
  7. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Chào Bác,
    Mình sẽ cập nhật trong bản tới.

    Thân.
    viking.
     
    Last edited: 26/8/24
  8. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Thân gửi anh em 4rum vnav,

    Bản dựng foobar2000 - vnav V1.0.0 QM 64bit đã có tại đây: ( 406 MB)
    link MediaFire :
    https://www.mediafire.com/file/ijycitdm3xtqg22/fb2k_vnav_1.0.0_QM_64bit_22aug24.rar/file

    Có điểm gì mới :
    Do tháng 7 hay sao mà youtube cứ nặng nhẹ, báo hại ông foo_youtube (https://fy.3dyd.com/home/ , https://www.foobar2000.org/components/view/foo_youtube ) cũng phải chạy theo bở hơi tai. Được cái, foo_youtube và yt-dlp (https://github.com/yt-dlp/yt-dlp) cũng không phải dạng vừa, ông này mệt thì ông kia vô thay nên //mãnh hổ nan địch quần hồ// cũng vẫn còn đúng.

    vòng vo vậy để dzô đề chính: bản cập nhật này cũng không có gì mới ráo trọi về UI, ngoại trừ 1 vài tính năng.

    1. về hình thức/tính năng:
    • tích hợp luôn trang chủ youtube.com vào bản dựng, khi này khỏi mất công mở Web browser để copy URL. tuy nhiên, do trình duyệt 'web browser' tích hợp vẫn chưa điều hướng được audio nên để nhìn và tìm video là chính.
    • tích hợp tìm kiếm video tự động theo trending (top tracks, artists, new release, most loved ) cho foo_youtube.
    • tích hợp xem video vào fb2k.

    2. kỹ thuật:
    • sửa lỗi download video: do youtube thay đổi nên kỳ này phải nhờ cậy thêm ffmpeg (https://www.ffmpeg.org/) (mình dùng version của Gyan Doshi: https://www.gyan.dev/ffmpeg/builds/ , đã đính kèm exe theo file rar. các bác có thể download từ nguồn tin cậy của mình và chép file ffmpeg.exe vào thư mục [fb2k]\profile\skins\external_helper\]). yt-dlp (vui lòng xem post trước để biết thêm chi tiết. yt-dlp là chương trình dòng lệnh cho phép download video từ youtube.com) sẽ kết hợp với ffmpeg để xử lý file sau khi download.
    • cấu hình lại foo_youtube để xem video liên tục (các bác có thể tinh chỉnh thông số này trong mục file/preference/youtube source/video/playback/UI element/ [] Stop video when UI element goes invisible].
    • theo yêu cầu 1 số Bác muốn xem video ca nhạc bằng fb2k nên mình cài thêm foo_mpv 64bit của @sammoth (https://github.com/sammoth/foo_mpv). để foo_mpv này hỗ trợ nhiều định dạng, chúng ta cũng cần cài thêm foo_input_ffmpeg (https://www.foobar2000.org/components/view/foo_input_ffmpeg) để 'phiên dịch'. xem như đi đâu cũng về với ffmpeg.
    • cấu hình trình duyệt 'web browser' để truy cập youtube.com từ trong fb2k. các bác theo bước sau để cài đặt, do component này khá khó thuần phục vì hắn bắt cứng đường path đến file cấu hình. mỗi lần thay path là phải cài lại component.
      • install foo_uie_webview (https://www.foobar2000.org/components/view/foo_uie_webview), mình có đính kèm sẵn trong file rar.
      • mình có để sẵn 1 tab [U2], chọn edit layout để cài component này (tên sau khi cài là webview).
      • right click trên màn hình webview, chọn webview\preferences.
      • chọn thư mục data [user data folder path] là {[fb2k]\profile\$recycle.bin\}
      • chọn file cấu hình [template file path] là {[fb2k]\profile\skins\external_helper\web_view\viking_youtube\youtube_symlink.html}
      • apply.
      • lưu ý: trong thư mục {[fb2k]\profile\skins\external_helper\web_view\}, mình có để sẵn 1 số file cấu hình thể hiện 1 số hiệu ứng (VU Meter, title animation, CD art} của các bác @julero và @yeyo bên hydrogenaud (https://hydrogenaud.io/index.php/topic,126042.300.html).
      • {các bác xem hình minh họa thêm}
    • foo_youtube_addon script (dựa theo trình thông dịch: JScrip panel 3, @marc2003, https://jscript-panel.github.io/): phần này có vài điểm nên nói qua để các bác dễ sửa code theo ý mình: (chi tiết theo script {deployed} foo_youtube_addon.txt)
      • 1.tìm kiếm video từ youtube.com và dựng playlist: có thể dùng web browser hay yt-dlp để tìm, sau khi có file HTML/JSON thì mình dùng cách cơ bản (như đề cập trong các post trước tìm lyrics) 'chẻ' text file theo 1 số từ khóa mỏ neo để lọc lựa ra data. data, về cơ bản, gồm : id của video, title, description, view count, thumb, channel owner, channel id. các thông tin này sẽ được cấu trúc lại để chuyển cho foo_youtube dựng thành playlist. lưu ý thêm: không phải lúc nào youtube (google) cũng trả lại kết quả như ta muốn.
    Code:
    function pl_buildPlaylist_bundle(play){
    
        // send to active playlist
        /*/- output to playlist :
            processedLinks  [uTitle, uDesc, uPub,uCount,uLen,uThumb,uV,uChanOw,uChanID,this.song,this.artist]
            array index->        0        1    2        3    4        5    6    7        8            9        10
     
            ----------------------
            how to construct a playlist:
            1. feed url location directly to fb2k:
            this will trigger processing status pop up, very slow: as fb2k has to look up for data from Youtube
            [this url location 'youtubr.com/watch?v=dadsas' will make fb2k search for data (title, channel. . .) itself ]
     
     
            2.feed url location via foo_youtube component:
            this is faster and keeps fb2k adding URL location only - no youtube searching
            why: we already done youtube searching.
            foo_youtube component will handle the [url location] task and tranfer to fb2k.
            must be encode text:
                + tagname must follow foo_youtube component rule.
                + encodeURIComponent(tagvalue)
     
            note: m-TAGS (foo_tags : https://www.foobar2000.org/components/view/foo_tags) can do the same job.
     
            if tagvalues are out-dated: foo_youtube component will update these data on the fly when plays 'url-location'.
            * credit goes to @Wil-B for exccelence work.
    
        /*/
            if (!check_youtube_component) return;
            var bypass = true; //bypasses the "please wait" dialog
            var metadata = false;
            var fullAlbum = false;
     
            if (processedLinks.length ) {
                    console.ClearBacklog()  ;
                    if (!playlist.addtItem) plman.ClearPlaylist(plman.ActivePlaylist);
            } else {
                    try { //fall back
                        plman.ActivePlaylist = playlist.backupIdx;
                        plman.UndoBackup(playlist.backupIdx);
                        pl_resotorePlaylist(playlist.backupIdx,false);
                        } catch (e) { console.log("JSP3_Youtube error : Can not fall back :",e);}
                    playlist.backupIdx = null;
                    return;
            }
     
            var uVideoLocationAddingArray=[];
            var uVideoLocationAdding =[];
            for (var i=0; i< processedLinks.length; i++) {
                console.log("\nu2bPlaylist, ",    (i+1)," >>",
                            "\nSeach for :",     (processedLinks[i][9] == processedLinks[i][10] ? processedLinks[i][9] : processedLinks[i][9]+", "+processedLinks[i][10]),
                            "\nResult :",        processedLinks[i][0],
                            "\nVideo :",         ytbVideoPlayBaseURL+"v=",processedLinks[i][6],
                            "\nChannel owner: ",processedLinks[i][7],
                            "\nChannel url: ",    ytbChannelPlayBaseURL,processedLinks[i][8],
                            "\nView count :",     processedLinks[i][3],
                            "\nDescription :",     processedLinks[i][1]
                );
       
                /*/ https://github.com/Wil-B/Find-and-Play
                    important:
                    - no space allowed between parameter. i.e  ['fb2k_title= '] => ['fb2k_title=']
                    - var uVideoLocationAdding must be an array.
                /*/
       
                    uVideoLocationAdding = [ytbVideoPlayBaseURL + (metadata ? metadata + "&" : "")
                    + "fb2k_title="             + encodeURIComponent( processedLinks[i][0] + (fullAlbum ? " (Full Album)" : ""))
           
                    + "&fb2k_search_title="     + encodeURIComponent( processedLinks[i][9]) //ytSearch.origTitle
                    + "&fb2kx_length="             + encodeURIComponent( secs(processedLinks[i][4]))
                    + "&fb2kx_title="             + encodeURIComponent(processedLinks[i][0] )
           
                    + "&fb2kx_description="     + encodeURIComponent( processedLinks[i][1])
                    + "&fb2kx_channel_title="    + encodeURIComponent( processedLinks[i][7])
                    + "&fb2kx_channel_url="        + encodeURIComponent( ytbChannelPlayBaseURL+processedLinks[i][8]  )
                    + "&fb2kx_upload_date="     + encodeURIComponent( processedLinks[i][2])
                    + "&fb2kx_view_count="      + encodeURIComponent( processedLinks[i][3])
    
                    //+ "&fb2kx_view_count="      + encodeURIComponent( getNumFrmStr(processedLinks[i][3]))
                    + "&fb2kx_thumbnail_url="    + encodeURIComponent( processedLinks[i][5])
                    + "&fb2kx_like_count="         + "NaN"
                    + "&fb2kx_dislike_count="     + "NaN"
                    + "&fb2k_artist="             + encodeURIComponent( processedLinks[i][10])  //ytSearch.artist
                    + "&v="                     + processedLinks[i][6]];
           
                /* simple but work.
                    uVideoLocationAdding3 = "fy+https://www.youtube.com/watch?" + (metadata ? metadata + "&" : "")
                    + "fb2k_title=" + encodeURIComponent(processedLinks[i][0])
                    + "&fb2kx_length=" + encodeURIComponent(secs(processedLinks[i][4]))
                    + "&fb2k_artist=" + encodeURIComponent(processedLinks[i][10])
                    + "&" + processedLinks[i][6];
                */
       
                //via plman namespaces,
                // 'sync' loading playlist : gather full list then push all to playlist
                uVideoLocationAddingArray.push(uVideoLocationAdding);
       
                // async loading playlist : item by item ->
                //plman.AddLocations(plman.ActivePlaylist, uVideoLocationAdding);
    
                /*/ or via 'run'
                //https://wiki.hydrogenaud.io/index.php?title=Foobar2000:Commandline_Guide
       
                1...ActiveX
                    var str = fb.FoobarPath + "foobar2000.exe /" + (bypass ? "immediate /" : "") + "add " + "\"" + uVideoLocationAdding + "\"";
                    WshShellRunCMD(str,0,false); //async, we do not care anymore
                2.....built-in JSP3
                    var app = fb.FoobarPath + "\\foobar2000.exe";
                    var para = "/" + (bypass ? "immediate /" : "") + "add " + "\"" + uVideoLocationAdding + "\""
                    utils.RunCmdAsync(window.ID,app, para);
                /*/
            }
    
            if (uVideoLocationAddingArray.length) {
                // flush array items to playlist, this will speed up vs loading [item by item]
                    plman.AddLocations(plman.ActivePlaylist, uVideoLocationAddingArray);
                // then, try start playing after a while to make sure the playlist was built.
                // warning: the playlist may not yet have been full built.
                if (!play) var play = false; // do not start play playlist/ExecutePlaylistDefaultAction
     
                    window.SetTimeout (function (){
                        try { //playlist is not yet built -> error
                            if (play && pl_isFooYoutubeAddon_playlists()) pl_plugnPlay(plman.ActivePlaylist);
                        } catch (e) { console.log("JSP3_Youtube error : Can not start playing :",e);}
                    }, parseInt(startPlayingPlaylist_timer) ); //wait for a wait secs to get playlist built by async plman.AddLocations(. . .args);
            }
        }    // playlist output
       
    
    
    • 2. quản lý playlist: có 2 loại tìm kiếm video youtube: (i) user nhập text (song, film, bất cứ thông tin gì) và tìm thẳng từ youtube.com. cách này không khác gì bản thân foo_youtube component nên cứ lọc lựa , xếp thứ tự lại theo tiêu chí của chúng ta, rồi đưa thẳng vô playlist, và (2) bản thân script phải tự lọc lựa để lấy ra 1 video duy nhất (vd. cho từng ca sỹ) để building playlist, sau đó xoay tua qua ca sỹ khác (và cũng chỉ lấy 1 video). với mỗi loại tìm kiếm, chúng ta lại có tiêu chí nhỏ hơn (theo năm, genre, mood, theme, top trending) nên phải có playlist để quản lý. lưu ý thêm là tìm không ra data gì thì phải trả lại playlist cũ cho fb2k (fall back).

    Code:
    //---------------------- playlist 'object'
    
        function pl_createPlaylist(playlistName,addTop) {
            /*/ create a playlist.
                basically, we handle only 4 playlists
                - search by text keyed in by user
                - search by artist name (user input or get from real-time top trending artists provided by last.fm)
                - search by real-time trending (top tracks, new relases, most loved tracks) provided by last.fm
                - search by other criteria
             which are:
                plU_user = "YouTube_search_by_user";
                plU_lastfm_TopArtist = "YouTube_search_lastFM_top_tracks_per_Artist";
                plU_lastfm_Trending = "YouTube_search_lastFM_top_trending";
                plU_lastfm_per_Criteria = "YouTube_search_lastFM_top_tracks_per_Criteria";
            /*/
     
            if (!addTop) var addTop = false;
     
            if (addTop)    return plman.FindOrCreatePlaylist(playlistName, false); //<-- add to top position
           
            //add at bottom
            for (var i = 0; i < plman.PlaylistCount; i++)
            if (plman.GetPlaylistName(i) == playlistName) return i;
     
            plman.CreatePlaylist(plman.PlaylistCount, playlistName);
            return i;
        }
    
        function pl_isFooYoutubeAddon_playlists(){
            // checking the active playlist is 1 of 4 foo_toutube_addon playlists
            var pl_nowPlaying = plman.GetPlaylistName(plman.ActivePlaylist);
            if (pl_nowPlaying.indexOf(playlist.prefixName) <0) return false;
            return true;
        }
    
        function add_favorite_song() {
            //@Wil-B
            var pl_loveIdx = pl_createPlaylist(plU_favorite,false);
            var np = plman.GetPlayingItemLocation();
     
            if (fb.IsPlaying && np.IsValid) {
                    var pid = np.PlaylistItemIndex;
                    var pn = plman.PlayingPlaylist;
            } else {
                    var pid = plman.GetPlaylistFocusItemIndex(plman.ActivePlaylist);
                    var pn = plman.ActivePlaylist;
            }
     
            plman.ClearPlaylistSelection(pn);
            plman.SetPlaylistSelectionSingle(pn, pid, true);
     
            if (pl_loveIdx != pn) {
                plman.InsertPlaylistItems(pl_loveIdx, plman.GetPlaylistItemCount(pl_loveIdx), plman.GetPlaylistSelectedItems(pn), false);
            } else {
                plman.RemovePlaylistSelection(pl_loveIdx, false);
            }
        }
    
        function pl_backupPlaylist(pl_backupSourceIdx) {
            if (isNaN(pl_backupSourceIdx))  return false;  
     
            var pl_backupDescIdx = pl_createPlaylist(plU_bk, true);
    
            if (pl_backupDescIdx == pl_backupSourceIdx)  return false;  
    
            // 1. add
            // var pos = plman.GetPlaylistItemCount(pl_backupDescIdx);
     
            // 2. clear
            plman.ClearPlaylist(pl_backupDescIdx);
            var pos = 0;
     
            var items = plman.GetPlaylistItems(pl_backupSourceIdx);
            plman.InsertPlaylistItems(pl_backupDescIdx, pos , items);
            plman.ActivePlaylist = pl_backupSourceIdx;
     
            //utils.MessageBox("backup done ",window.Name,16);
           
        }
    
    
        function pl_resotorePlaylist(pl_restoreDescIdx,add) {
            if (isNaN(pl_restoreDescIdx))  return false;  
            if (!add) var add = false;
     
            var pl_backupSourceIdx = pl_createPlaylist(plU_bk, true);
    
            if (pl_restoreDescIdx == pl_backupSourceIdx)  return false;  
     
            if (add) {
                // add items
                var pos = plman.GetPlaylistItemCount(pl_restoreDescIdx);
            } else {
                // clear items
                plman.ClearPlaylist(pl_restoreDescIdx);
                var pos = 0;
            }
     
            var items = plman.GetPlaylistItems(pl_backupSourceIdx);
            plman.InsertPlaylistItems(pl_restoreDescIdx, pos , items);
            plman.ActivePlaylist = pl_restoreDescIdx;
     
            plman.ClearPlaylist(pl_backupSourceIdx);
            plman.RemovePlaylist(pl_backupSourceIdx);
            //utils.MessageBox("restore done ",window.Name,16);
        }
    
    
        function pl_DuplicatePlaylist(srcPl,dscPl,type){
            // duplicate a playlist
            // fb2k will simply createa 1 more playlist with the next index, regardless the name
            // this may lead to multi playlists but the same name.
     
            if (type ==0 ) { // from index -> name playlist
                if (!_tagged(dscPl) || isNaN(srcPl))  return false;
     
                var dscPl_id = plman.FindPlaylist(dscPl); //name -> index
                if (dscPl_id >= 0) {
                    plman.RemovePlaylist(dscPl_id);
                }
       
                var srcPl_name = plman.GetPlaylistName(srcPl);
                if (!_tagged(srcPl_name)) return false;
       
       
                //plman.ClearPlaylist(dscPl_id); //index
       
                plman.DuplicatePlaylist(srcPl,dscPl); //index -> name
                //utils.MessageBox("duplicate " +srcPl_name +  " > " + dscPl,"Playlist duplicated", 16);
       
            }
    
            if (type == 1 ) { // from name -> idx playlist
                if (!_tagged(srcPl) || isNaN(dscPl))  return false;
       
                var srcPl_id = plman.FindPlaylist(srcPl); //name -> index
                if (srcPl_id < 0) return false;
       
                var dscPl_name = plman.GetPlaylistName(dscPl); //index -> name
                if (_tagged(dscPl_name)) {
                    plman.RemovePlaylist(dscPl);
                }
                //plman.ClearPlaylist(bkPl_listName_id);
       
                plman.DuplicatePlaylist(srcPl_id,dscPl_name); //index -> name
                //utils.MessageBox("restore  " +srcPl +  " > " + dscPl_name ,"Playlist duplicated", 16);
            }
    
            if (type == 3 ) { // from idx -> idx playlist
                //
            }
    
            if (type == 4 ) { // from name -> name playlist
                //
            }
    
            return true;
        }
     
        function pl_plugnPlay(pl_index) {
       
                //plman.GetPlaylistItemCount(playlistIndex)
                //plman.ActivePlaylist    : number. (read, write )Could be -1 if reading value and no playlist is active.
                //plman.PlayingPlaylist:    number.    (read)    Could be -1 if not playing or playing item doesn't belong to any playlist.
       
       
                var nowPlayingTrack = plman.GetPlayingItemLocation();
                var trackId = 0;
       
                // playlist pl_index is playing ?
                // @Marc2003: It can also be false if the playing track has since been removed from the playlist it was on when playback was started.
                // => we re-use the same playlist, but keep refreshing by new track/item(s)  --> play again.
       
                if (plman.PlayingPlaylist == pl_index && nowPlayingTrack.IsValid) return; //trackId = nowPlayingTrack.PlaylistItemIndex;
                else trackId = plman.GetPlaylistItemCount(pl_index)-1;
       
                // can let fb2k scroll to selected item ?  makesure > playlistitem(s) > visible ?
       
                if (trackId < 0) return; // playlist not yet built or empty.
                if (!nowPlayingTrack.IsValid) trackId = 0; // set the track to be played if 'brand-new' playlist was built/no now playing aactivity
       
                plman.SetPlaylistFocusItem(pl_index, trackId); //focus the playlist
                plman.ClearPlaylistSelection(pl_index); //clear playlist selection
                plman.SetPlaylistSelectionSingle(pl_index, trackId, true); //highlight the track, that  will be played
                plman.ExecutePlaylistDefaultAction(pl_index, trackId); // play
            }
     
    
    • 3. rồi rồi, làm sao dùng: right lick trên màn hình (tab [youtube addon]), chọn lệnh qua menu ngữ cảnh (context menu). giao diện chỉ hiển thị 1 vài thông tin, không tương tác chi được. (1) chúng ta nhập thẳng text để search trực tiếp video clips trên youtube.com, hay (2) 'nhờ' last.fm (1 web site/dịch vụ chuyên thống kê vài thông tin về lĩnh vực âm nhạc) lấy giúp danh sách: real time trending theo ca sỹ, top tracks, new releases, most loved tracks; thống kê bài hát theo năm, chủ đề, loại nhạc . . . rồi đưa list này cho youtube.com để tìm video clips tương ứng. các bác có thể sửa code để tham khảo thêm list nhạc từ dịch vụ khác(musicbrain - https://musicbrainz.org/, official charts https://www.officialcharts.com/, hay tự đăng ký 1 user với last.fm). Ngoài ra, việc đăng ký 1 youtube api key với youtube.com để có thêm ưu thế về tốc độ, mức tin cậy khi tìm video clips cũng rất đáng cân nhắc (tham khảo: https://fy.3dyd.com/help/limitations/) _ key này có thể dùng với foo_youtube component hay dùng với script này (phải sửa lại script code, nhưng đơn giản hơn cách search thằng từ Web như hiện tại).
    • cuối cùng: script đang dùng 1 số key (last.fm, web youtube search) của 2 bác @marc2003,https://jscript-panel.github.io/gallery/lastfm-info/ và @wil-B , https://github.com/Wil-B/Find-and-Play/ cho việc minh họa là chính vì mục đích cộng đồng. rất cảm ơn @marc2003 và @wil-B.
    vậy thôi,​
    Lưu ý:
    • Để hiển thị đúng các biểu tượng trong control bar (now playing tab), các bác cân nhắc cài các font [Segoe Fluent Icons], [Material Icons Round] nếu không dùng windows 11. (các font này được kèm trong các bản fb2k_vnav 32 bit).
    • Sau 1 thời gian, các artist arts (hình ca sỹ), trang web có thể được download quá nhiều làm tăng dung lượng lưu trữ ở các thư mục [foobar2000]\profile\$recycle.bin => xem xét xóa bớt file nếu đã thay đổi thư viện nhạc (bớt file nhạc khỏi thư viện).

    Đã test trên máy cấu hình tương đương:
    • Windows 11,
    • CPU: AMD 7, RAM 12 GB
    • Direct X: 12
    • Màn hình 15.6 inch, 1920 x 1080, scale 150%.

    chúc các bác sức khỏe và luôn yêu đời.

    /*/
    Foobar2000 và các plugin, chương trình đình kèm thuộc bản quyền của các nhà phát triển tương ứng. mình đã cẩn thận quét virus và xem xét nguồn nhưng mình và mạng nghe nhìn Việt nam (vnan.vn) không chịu trách nhiệm với các rủi ro liên quan (nếu có).
    /*/
     

    Attached Files:

    Last edited: 26/8/24
    thienphuc74 likes this.
  9. thienphuc74

    thienphuc74 Advanced Member

    Joined:
    4/9/15
    Messages:
    112
    Likes Received:
    13
    Bác Viking quá tuyệt vời. Cảm ơn Bác nhé
     
    viking likes this.
  10. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    vâng Bác.
    chúc Bác nghe nhạc vui.
     
  11. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Chào anh em 4rum,
    xin trả lời nhanh:
    hỏi : có sẵn link clip hay link cả channel thì làm sao sử dụng.

    đáp: có sẵn link thì chuyển thẳng cho fb2k. chỉ khi cần tìm clip thì mới dùng tới phần [youtube addon] nêu trong post trên.

    có 2 cách thêm/add link (clip/channel):
    1. cách 1: qua menu file/add location. cách này fb2k trực tiếp xử lý nên khá nhanh.
    2. cách 2: qua menu file/Youtube Source/Load channel or playlists (xem như chúng ta đã cài foo_youtube component này): cách này phải dùng đến component nên hơi chậm, nhưng foo_youtube sẽ 'nhớ' các link nhập vào để lần sau ta sử dụng lại cho nhanh (nếu channel name là các ký tự vô nghĩa thì cũng không có tác dụng với chúng ta). với cách 2, chúng ta có thể nhập nhiều {link clip} hay {tiltle song} 1 lần cho foo_youtube.
    hiện tại, mình chưa có ý định cho {foo_youtube_addon script} quản lý list channel, nhưng cũng hơi ngạc nhiên là các Bác gần xa có vẻ thiên về việc truy cập 1 số channel yêu thích nào đó.

    tạm thời, các Bác dùng foo_youtube quản lý giúp vì 'có vẻ' channel name đều là những tên gợi nhớ (dù nằm lẫn lộn trong URL).

    lưu ý: fb2k 'có vẻ' sẽ thêm clip vào playlist với tên tương ứng với tên channel và 'loại clip (video, playlist. . .). lần tới, thay vì load kênh như nêu trên, chúng ta load playlist tương ứng sẽ nhanh hơn. chỉ lâu lâu mới load lại kênh để cập nhật lại list clips.

    vậy thôi,

    Chúc các Bác nghe nhạc vui.
    Thân,
    viking.
     
    Last edited: 27/8/24
    thienphuc74 likes this.
  12. dpthu

    dpthu Advanced Member

    Joined:
    20/9/06
    Messages:
    147
    Likes Received:
    129
    Location:
    Dong Da - Hanoi
    Hiện e đang loay hoay tìm bản foorbar cho máy Mac để chạy các file ISO rip từ SACD mà chưa được, bác Viking có nghiên cứu món này không hỗ trợ e với, thanks bác :))
     
  13. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Chào Bác,
    Mình thật sự không rành hệ điều hành macOS.
    Trong nhà cũng chỉ có máy cài đặt Windows thôi ạ.

    Xin lỗi đã không giúp được Bác.
    Thân,
    Viking
     
    Haolq and dpthu like this.
  14. Haolq

    Haolq Advanced Member

    Joined:
    5/12/05
    Messages:
    2.022
    Likes Received:
    1.029
    Hi bác, bộ của bác tải về là chạy luôn khỏi cài đúng ko? Mình tải về chạy nó bị crash,rồi nó ra cái bảng để mình gửi lỗi tới web của foobar .
     
  15. linhvk

    linhvk Advanced Member

    Joined:
    19/2/09
    Messages:
    322
    Likes Received:
    62
    foobar macos thì chắc bác biết rồi: https://www.foobar2000.org/mac
    play iso sacd bác thử dùng plugin này xem sao: https://sourceforge.net/projects/sacddecoder/files/macOS +Windows/foo_input_udsd/
    https://sourceforge.net/projects/sa..._input_udsd/foo_input_udsd-0.0.4.zip/download
     
    dpthu likes this.
  16. dpthu

    dpthu Advanced Member

    Joined:
    20/9/06
    Messages:
    147
    Likes Received:
    129
    Location:
    Dong Da - Hanoi
  17. linhvk

    linhvk Advanced Member

    Joined:
    19/2/09
    Messages:
    322
    Likes Received:
    62
    mà theo e bác trích xuất hẳn ra file DSD riêng lẻ từng bài, rồi nghe bằng phần mềm gì cũng được, roon, jriver.....
     
    dpthu likes this.
  18. dpthu

    dpthu Advanced Member

    Joined:
    20/9/06
    Messages:
    147
    Likes Received:
    129
    Location:
    Dong Da - Hanoi
    Một là e lười, hai là e muốn có cái cảm giác play từ nguyên bản ISO thôi hi hi. Rip từ ISO ra DSD dùng phần mềm gì tốt nhất bác nhỉ, hay dùng luôn foorbar ?
     
  19. linhvk

    linhvk Advanced Member

    Joined:
    19/2/09
    Messages:
    322
    Likes Received:
    62
    https://github.com/setmind/SACDExtractGUI
    em dùng cái này, nhanh, tiện, cơ mà dùng trên win, mac thì em không biết
    upload_2024-8-28_10-57-10.png
     
    dpthu likes this.
  20. dpthu

    dpthu Advanced Member

    Joined:
    20/9/06
    Messages:
    147
    Likes Received:
    129
    Location:
    Dong Da - Hanoi
    Bác nhiệt tình hướng dẫn chi tiết quá ạ, cảm ơn bác nhiều
     
  21. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Chào Bác,
    các bộ cài đều được cấu hình theo dạng portable (bác để ý có file 'portable_mode_enabled' 0 byte trong thư mục gốc {fb2k}).
    Bác làm giúp theo các cách sau nhé:
    1 - xác định OS windows là 64 bit, version 11 (vì mình và vài bạn dùng trên máy cấu hình như vậy).
    2 - tải lại bản dựng và giải nén bằng chương trình khác (nếu có).
    3 - cài mới fb2k 64 bit từ trang chủ [https://www.foobar2000.org/], dạng portable vào 1 thư mục tạm, sau đó chép đè toàn bộ files từ thư mục tạm này vào thư mục [fb2k] của bản dựng.
    4 - mở file crash (có dạng failure_0000000. . ..txt), trong thư mục [{fb2k}\profile\crash reports], tìm xem có đề cập đến 'foo_uie_webview' không ? nếu có => vào [{fb2k}\profile\user-components-x64], xóa thư mục [foo_uie_webview]. sau đó, cài lại component này và cấu hình đường dẫn đến file truy cập youtube.com như nêu trong post trước.
    5- nếu vẫn chưa được, cần dao kéo mạnh tay hơn:
    Bác lần lượt xóa các component trong thư mục [{fb2k}\profile\user-components-x64], xóa xong thì khởi động lại fb2k để xem fb2k còn crash nữa không:
    - foo_vis_milk2 : component vẽ vời vài hiệu ứng đồ họa cho vui mắt, do vẫn còn dùng thư viện DLL đời Tống (của Milk cũ) và quá trình load preset chưa kỹ nên khả năng bị Windows chặn khá cao (nếu cố tình bypass foobar2000 SDK, vd: truy cập path đến fb2k vẫn dùng hàm chưa chuẩn UTF-8.).
    - foo_vis_spectrum_analyzer: component vẽ vời, tuy ổn định hơn nhưng cũng tiềm ẩn khả năng gây crash.
    - foo_mpv : componet playback video files.
    - . . .
    - foo_jscript_panel3 và foo_youtube: 2 component này rất ổn định và là chủ đạo của bản dựng.

    6 - nếu gỡ hết component mà fb2k vẫn còn crash thì Bác xem xét làm ngược lại bước 3 giúp:
    - cài mới fb2k 64 bit từ trang chủ : https://www.foobar2000.org/.
    - chép file cầu hình [{fb2k}\profile\theme.fth] từ bản dựng.
    - lần lượt cài các component từ Internet.
    + các components đa phần từ https://www.foobar2000.org/components
    + Jscrip Panel 3: https://github.com/jscript-panel/release/releases/tag/latest
    + foo_mpc: https://github.com/sammoth/foo_mpv
    + Eslyrics: https://github.com/ESLyric/release/releases

    Bác xem giúp nhé.
    Cảm ơn Bác hợp tác.

    Thân,
    Viking.
     
    Last edited: 29/8/24
    thienphuc74, Haolq and Hoang_Anh like this.
  22. viking

    viking Advanced Member

    Joined:
    31/7/09
    Messages:
    328
    Likes Received:
    291
    Thân gửi anh em 4rum vnav,

    Bản dựng foobar2000 - vnav V1.0.0 QM 64bit đã có tại đây: ( 307 MB)
    link MediaFire :
    https://www.mediafire.com/file/hn3xrm2wzmp1h1r/fb2k_vnav_1.0.0_QM_64bit_31aug24.rar/file

    lý do thay đổi :
    • các Bác ở xa có vẻ rất quan tâm chủ đề youtube (và Internet radio) nên mình cập nhật lại bản này, giữ nguyên version, xem như hotfix.
    • refactoring script [foo_youtube_addon], thêm tính năng quản lý youtube channel (version trước : để playlist manager quản lý giúp -> nửa mùa, bất tiện).
    • foobar2000 vừa có bản nâng cấp (29/8/2024), cho phép xuất crash report chi tiết và 'chuẩn hơn'. thấy ghi áp dụng 'noexcept specifier' của C++. tính năng này có hơn 10 năm rồi, chắc bây giờ ổn định nên Peter đưa vào. {để xem sao}.
    • giải đáp thắc mắc việc xem video bằng fb2k: chúng ta phải add folder chứa video vào library (thư viện), như làm với file nhạc thì fb2k mới nhận ra được. Để cho tiện, version này đã thay đổi 1 chút để không cần làm bước này.
    • cuối cùng: đa số các Bác sắp bước vào kỳ nghỉ Lễ Quốc khánh 2/9 dài, nên xem đây như món quà tinh thần nhỏ với mong muốn mang lại chút niềm vui giữa cuộc sống bộn bề.
    1. về hình thức/tính năng:
    • gỡ trang chủ youtube.com khỏi bản dựng (xóa foo_uie_webview componet và 500 anhem files nhà hắn): các Bác thấy phiền phức vì phải theo các bước lụm cụm cài đặt {các Bác vẫn có thể cài đặt như hướng dẫn}. lý do component này hay gây phiền (crash) : do hắn phải thường trực giữ liên lạc với tổng hành dinh (BrowerMetrics : https://www.wisecleaner.com/think-tank/338-What-is-Browser-Metrics-File.html). vì lý do gì đấy mà chúng mất liên lạc 1 chút là um xùm liền, nắm áo OS Windows hỏi chuyện. OS thì ất giáp chi chưa biết, cấm luôn cho lành. {dài dòng quá}
    • tích hợp xem video mà không cần add video vào thư viện (library): dùng tab 'explorer' để duyệt file video và double click. 'explorer' là 1 script đã được chỉnh lại để 'hiểu' chuyện hơn, chuyển file này cho fb2k xử lý (thay vì quăng cho OS Windows).
    • quản lý youtube channel : (1) thêm channel, (2) truy cập channel , (3) xóa, sửa channel/ channel name.
    2. kỹ thuật:
    phần này chủ yếu refactoring lại script nên mình chỉ đề cập sơ qua đặng không mất thời gian của các Bác.
    • playback video files không cần add file vào thư viện (library) :
      • script: {deployed} tree explorer.txt
      • nội dung sửa:
        Code:
         
        
                  
                    // vnav 30Aug24
                    // let OS hadle file operation. OS already linked filte type with "its'" app.
                    // we only take care music and video.
                    // to extend fb2k capacity processing of video, we have to install foo_input_ffmpeg component and configure it to
                    // recognize more video file type (container, in particular).
                            switch(this.ftype) {
                                case "archive":
                    //case "image":
                                case "video":
                    case "music":
                                    var tmppath = fb.FoobarPath; // fso.GetFolder(fb.FoobarPath).ShortPath;
                                    WshShell.Run(tmppath+"\\foobar2000.exe /immediate "+"\""+ this.path+"\"");
                                    break;
                                case "text":
                                    //WshShell.Run("%windir%\\notepad.exe "+ '"'+this.path+'"');
                        WshShell.Run('"'+this.path+'"');
        
                                    break;
                                case "image":
                                    //WshShell.Run("rundll32.exe %windir%\\System32\\shimgvw.dll,ImageView_Fullscreen "+'"'+this.path+'"');
                       WshShell.Run('"'+this.path+'"');
        
                                    break;
                                default:
                                    //WshShell.Exec("%comspec% /c start "+fso.Getfile(this.path).ShortPath); // do we need 8.3 filename ?
                        //WshShell.Exec("%comspec% /c start "+ '"'+this.path+'"');
                        WshShell.Run('"'+this.path+'"');
        
                    
                        
        
    • quản lý youtube channel:
      • script: {deployed} foo_youtube_addon.txt
      • nội dung sửa:
      • 1- lấy danh sách youtube channel từ file:
        Code:
        //youtube channels
                var text = utils.ReadTextFile(playlist.channels);
                youtubeChannels=[];
                if (text) {
                    youtubeChannels.push([baseMenuIdx,baseMenuIdx,baseMenuIdx]);
                    var lines = text.split(/\r?\n/);
                    var fields = [];
                    
                    for (var i = 0; i < lines.length-1; i++) {
                        if (lines[i].indexOf('[channel_youtube]') >=0 ) break;
                    } i++;
                    
                    for (; i < lines.length-1; i++) {
                        if (_tagged(lines[i])) {
                            fields = lines[i].split('=');
                            if (_tagged(fields[1])) youtubeChannels.push([++baseMenuIdx,fields[0],fields[1] ]);
                        }
                    }
                    
                    if (youtubeChannels.length)
                        youtubeChannels.push([++baseMenuIdx,'edit_channel_database','edit channel database']);
                }
        

    • 2. quản lý youtube channel (thêm, sửa xóa)
      Code:
      case idx == 407: // youtube channel adding
      
                          // input channel location
                          var defaultVal = "https://www.youtube.com/@ . . . . /videos";
                          var nl = "\n" ; //"\" + chr(10) + \"";
                          var title =">> Youtube channel management ["+ window.Name+"]";
                          var msg = "{Youtube channel} URL will be reconciled to a full fb2k playlist with a given {channel name}, returned by youtube."
                              msg = msg +nl+nl+"Enter {youtube channel} URL and : {DOUBLE CLICK on the playlist-channel name} or {have this played}:";
      
                          try {
                                  // switch playlist
                                  playlist.backupIdx = plman.ActivePlaylist;
                                  pl_backupPlaylist(playlist.backupIdx);
                                
                                  plman.ClearPlaylist(plman.ActivePlaylist);             
                                  plU_switchTo = plU_user;
                                  plman.ActivePlaylist = pl_createPlaylist(plU_user);
                    
                                  //var string = input_box(msg,defaultVal , title);
                                  //if (string) . . .
      
                                  var string = utils.InputBox(msg, title, defaultVal, true);
                                
                                  string = string.trim();
                                  // OK was pressed.
                                
                                  update_status(" ▶ Loading youtube channel . . . \n"+ string +'\n(by fb2k fileAddLocation)');
                                  plman.AddLocations(plman.ActivePlaylist, [string]);
                                  // add to file
                                  if ( (string.indexOf('v=') < 0 || string.indexOf('youtu.be') < 0  ) && string.indexOf('@') >=0 )
                                      utils.WriteINI(playlist.channels,'channel_youtube',string,string);
                          } catch (e) {
                                      MessageBox(e.message,"Error 400: Input Youtube searching");
                                      try { //fall back
                                          plman.UndoBackup(playlist.backupIdx);
                                          plman.ActivePlaylist = playlist.backupIdx;
                                          pl_resotorePlaylist(playlist.backupIdx,false);
                                      } catch (e) { console.log("JSP3_Youtube error : Can not fall back :",e);}
                                  }
                          /*/
                          if (check_youtube_component) {
                              // if channel: this will create a plylist named after this channel id {name/owner}.
                              //fb.CheckComponent('foo_youtube')
                              fb.RunMainMenuCommand("file/youtube source/load channel or playlist...");
                          } else {
                              // if channel: this simply add channel location
                              fb.RunMainMenuCommand("file/add location...");
                          }
                          /*/
                        
                          break;
                    
                      //youtube channel management [407000 . . . args] 
                      case (idx > parseInt(youtubeChannels[0][0]) && idx < parseInt(youtubeChannels[0][0]+youtubeChannels.length)):
                        
                          if ((idx + 1) == parseInt(youtubeChannels[0][0]+youtubeChannels.length)) {
                              WshShellRunCMD(playlist.channels,0, false);   
                              //utils.Run("notepad.exe",playlist.channels);
                              //break;
                          } else {
                            
                            
      
                              // get channel and . . . load
                              var myoutubeChannels = youtubeChannels[idx-parseInt(youtubeChannels[0][0])][1];
                                  myoutubeChannels = myoutubeChannels.trim();
                            
                              var _myoutubeChannels =  youtubeChannels[idx-parseInt(youtubeChannels[0][0])][0] +" \n"
                                                      + myoutubeChannels +" \n"
                                                      + youtubeChannels[idx-parseInt(youtubeChannels[0][0])][2];
                            
                            
                              if (_tagged(myoutubeChannels) ) {
                                  // switch playlist
                                  playlist.backupIdx = plman.ActivePlaylist;
                                  pl_backupPlaylist(playlist.backupIdx);
                            
                                  plman.ClearPlaylist(plman.ActivePlaylist); 
                                  plU_switchTo = plU_lastfm_per_Criteria;
                                  plman.ActivePlaylist = pl_createPlaylist(plU_user);
      
                                  update_status(" ▶ Loading youtube channel . . . \n"+ _myoutubeChannels +'\n(by fb2k fileAddLocation)');
                                  plman.AddLocations(plman.ActivePlaylist, [myoutubeChannels]);
                              }
                          }
                          
      

    nói thêm 1 chút về quản lý youtube channel:
    • thêm: user nhập youtube channel (kiểu https://www.youtube.com/@{youtubeChannel}/videos), fb2k sẽ lưu luôn vào file text, dưới dạng INI (section, key = value). với cách này, (1) fb2k sẽ làm hộ luôn việc tự tìm đến key và update data (nếu user nhập lại channel), và (2) chúng ta không cần quản lý cả file (nếu dùng cấu trúc như JSON) nên đỡ mất công.
    • xóa, sửa channel: sau khi ghi nhận channel vào file, fb2k sẽ hiển thị channel trên menu nên rất không thẩm mỹ, chúng ta sẽ mở file text (vd.bằng notepad) và sửa lại channel name.
    dòng này: https://www.youtube.com/@{youtubeChannel}/videos= https://www.youtube.com/@{youtubeChannel}/videos
    sửa thành: https://www.youtube.com/@{youtubeChannel}/videos = {tên gợi nhớ}
    việc quản lý data kiểu này, dù thủ công mỹ nghệ, nhưng hiệu quả và đỡ mất sức. ngoài ra, chúng ta sẽ không còn quan tâm đến playlist-channel name là gì nữa (nếu để fb2k quản lý thì sẽ rối mù).​
    cuối cùng: bản dựng này có kèm 1 script quản lý playlist của @etip (https://hydrogenaud.io/index.php/topic,123820.350.html): các Bác có thể tạo 'folder' và đưa các playlist vào từng folder cho gọn và đẹp.

    vậy thôi,​
    Lưu ý:
    • Để hiển thị đúng các biểu tượng trong control bar (now playing tab), các bác cân nhắc cài các font [Segoe Fluent Icons], [Material Icons Round] nếu không dùng windows 11. (các font này được kèm trong các bản fb2k_vnav 32 bit).
    • Sau 1 thời gian, các artist arts (hình ca sỹ), trang web có thể được download quá nhiều làm tăng dung lượng lưu trữ ở các thư mục [foobar2000]\profile\$recycle.bin => xem xét xóa bớt file nếu đã thay đổi thư viện nhạc (bớt file nhạc khỏi thư viện).

    Đã test trên máy cấu hình tương đương:
    • Windows 11,
    • CPU: AMD 7, RAM 12 GB
    • Direct X: 12
    • Màn hình 15.6 inch, 1920 x 1080, scale 150%.

    chúc các Bác và người thân có những ngày nghỉ Lễ Quốc khánh 2/9 vui vẻ.

    /*/
    Foobar2000 và các plugin, chương trình đình kèm thuộc bản quyền của các nhà phát triển tương ứng. mình đã cẩn thận quét virus và xem xét nguồn nhưng mình và mạng nghe nhìn Việt nam (vnan.vn) không chịu trách nhiệm với các rủi ro liên quan (nếu có).
     

    Attached Files:

    Last edited: 31/8/24
    anhchiennt2 and thienphuc74 like this.
  23. thienphuc74

    thienphuc74 Advanced Member

    Joined:
    4/9/15
    Messages:
    112
    Likes Received:
    13
    CẢM ƠN BÁC NHIỆU LẮM!
     
    viking likes this.
  24. thienphuc74

    thienphuc74 Advanced Member

    Joined:
    4/9/15
    Messages:
    112
    Likes Received:
    13
    upload_2024-8-31_18-8-7.png

    CHẠY MƯỢT LẮM

    upload_2024-8-31_18-11-20.png
     
    viking likes this.
  25. atcfirst

    atcfirst Advanced Member

    Joined:
    28/11/11
    Messages:
    481
    Likes Received:
    225
    Cảm ơn bác nhiều! Phần mềm này có chromecast được không ạ?
     
Tags:

Share This Page

Loading...