You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[FEATURE] Added streaming file I/O APIs for processing large files without loading the complete contents into JavaScript memory. utils.OpenTextReader and utils.OpenTextWriter provide incremental line-oriented text reading and writing with selectable character encoding, while utils.OpenBinaryReader and utils.OpenBinaryWriter read and write binary data through reusable Uint8Array buffers. The APIs are available in both panel and Worker realms.
[UPDATE] Extended character-encoding support in utils.ReadTextFile and utils.WriteTextFile. Text reading now consistently supports UTF-8, UTF-16LE/BE, UTF-32LE/BE and supported Windows codepages, including automatic charset detection when requested. WriteTextFile now also accepts an output codepage instead of being limited to UTF-8, with optional BOM generation for UTF-8, UTF-16 and UTF-32. The existing UTF-8 defaults remain unchanged for compatibility.
[FEATURE] Added Worker.RunAsync for convenient one-shot background work without creating and managing a persistent Worker manually. Each call creates a temporary full Worker realm/thread, structured-clones the supplied arguments into it, executes a user-defined synchronous or asynchronous JavaScript callback, structured-clones the result back to the panel and automatically terminates the Worker afterwards. It is intended for reasonably coarse isolated tasks such as large file processing where a custom Worker message protocol would otherwise add unnecessary boilerplate.
[FEATURE] Added a native SQLite API, available in both panel and Worker realms. utils.OpenDatabase opens file-backed or in-memory databases and returns a SQLiteDatabase object with direct SQL execution, parameterized queries, transactions and reusable prepared statements through SQLiteStatement. JavaScript values can be bound safely as SQL parameters, query rows are returned as ordinary JavaScript objects, and SQLite BLOB values are exposed as Uint8Array. Relative database paths follow JSplitter's script-relative path resolution, and :memory: databases are also supported.
[FEATURE] Added utils.LoadFont for loading custom TrueType/OpenType fonts directly from script packages without installing them in Windows. Loaded fonts are private to the foobar2000 process, become available to both GDI and Direct2D font APIs, and are shared across panel and Worker realms. Relative paths use JSplitter's script-relative path resolution, allowing fonts to be bundled alongside the main script, included files or Worker sources. Repeated loading of the same file is safe, and loaded fonts remain available for the lifetime of the foobar2000 process.
[FEATURE] Added the fb.Window API for controlling the foobar2000 main window directly from panel scripts. The API exposes the current window position and outer size, allows moving and resizing the window, switching between the default frame, captionless and borderless styles, entering or leaving fullscreen mode, and configuring minimum and maximum size constraints. Under Default User Interface it can also hide or restore the main menu and status bar. The settings affect the actual foobar2000 top-level window and can be changed dynamically at runtime. Since this release window.FoobarWindowX, window.FoobarWindowY, window.FoobarWindowWidth, window.FoobarWindowHeight and window.MoveFoobarWindow are deprecated and will be removed in future releases. New code should use fb.Window geometry properties and Move instead.
[UPDATE] Extended utils.GetWaveformAsync with an optional on_progress callback. Finalized ranges of the waveform envelope can now be delivered while decoding is still in progress, allowing waveform UIs to appear progressively instead of waiting for the complete track to be decoded. The callback receives each new Float32Array range together with its output offset and may return false to cancel an obsolete decode request. The returned Promise still resolves with the complete waveform when decoding finishes normally. A sample of progressive waveform loading was added.
[FEATURE] Added the Playback Statistics Title Format setting under JSplitter's Advanced preferences. The setting controls the title-format expression used to identify tracks in JSplitter's internal playback-statistics index, allowing the matching scheme to be adjusted for libraries where the default $lower(%artist% - %title%) identity is not sufficient. Changing the setting requires a foobar2000 restart.
[UPDATE] Extended fb.ShowPictureViewer. In addition to opening an image directly from a file path, it can now accept an FbMetadbHandle and an optional album-art type. In this form foobar2000 resolves and opens the requested artwork itself, including both embedded and external album art.
[FEATURE] Added audio stream selection APIs for multi-stream media files. fb.GetAudioStreams enumerates all audio streams exposed by the active input decoder and returns their full FbFileInfo data together with stream index, decoder default and current user selection state. fb.SetAudioStream stores the selected stream preference for a track and, when applied to the currently playing item, restarts playback so the new stream takes effect immediately while playback continues from the current position. Stream selection uses foobar2000's native input stream selector and SetAudioStream requires foobar2000 2.0 or newer.
[BUG] Fixed handling of saved JSplitter layouts that reference UI Elements provided by components which are no longer installed or currently unavailable. Missing child elements are now handled safely and represented by the UI Element not found placeholder instead of causing incorrect panel restoration or initialization behaviour.
[BUG] Fixed an intermittent hang when restarting foobar2000 after updating or removing a script package that is currently in use. Restart is now requested only after the Package Manager and panel configuration dialogs have fully closed, preventing shutdown from getting stuck in a nested modal message loop.
[UPDATE] Updated source code editor engine to Scintilla 5.6.7.