Skip to content

Repository files navigation

P1Z.SPLITSFX

P1Z.SPLITSFX is a local-first Windows sound-effects browser built around one loop:

FIND -> PREVIEW -> SELECT -> DRAG -> DROP -> FORGET

It indexes existing audio in place, previews exactly one source at a time, and caches compact waveform peaks on demand. Whole-file drags always carry the original source path. A selected waveform region is materialized as a small managed WAV only when its drag actually begins, so VEGAS and other Windows applications receive a normal audio file.

Install

Windows 10 or 11, 64-bit. Nothing else is required: the build is self-contained and does not need a .NET runtime installed.

  1. Download P1Z.SPLITSFX-v<version>-win-x64.zip from the latest release.
  2. Extract it anywhere you like. SPLITSFX is portable and has no installer.
  3. Run P1Z.SPLITSFX.exe.

The executable is not code-signed, so on first launch Windows SmartScreen shows "Windows protected your PC". Choose More info, then Run anyway. Every release is built from the tagged source in this repository, and CI publishes the same application build as a workflow artifact if you would rather verify it yourself.

First run

  1. Start P1Z.SPLITSFX.exe.
  2. Choose ADD LIBRARY and select a drive or directory.
  3. Discovered sounds appear in batches while metadata indexing continues. The status bar shows a real processed / total bar as soon as the scan has a known total; during directory discovery it shows the actual number found without inventing a percentage.

At later launches, cached results are loaded from SQLite immediately while SPLITSFX checks configured-root availability and a persisted fingerprint of indexed directory modification state in the background. An unchanged fingerprint uses the fast index-ready path. Structural changes or the seven-day safety interval trigger a thorough reconciliation; even then, unchanged audio files are compared by size/modification metadata and are not decoded again. New or changed files receive fresh metadata and deleted files are marked offline. Waveforms remain lazy and are never generated during startup validation. A metadata schema upgrade causes one intentional metadata-only refresh, then unchanged files reuse the stored result.

Disconnecting a library drive

Unplugging an indexed drive costs nothing and loses nothing. Availability is stored on the library root alone: its files keep their names, durations, embedded metadata, tags, and favorites, and stay searchable while the drive is away, listed dimmed and marked offline. Reconnecting flips the root back and the stored index is reused immediately.

A rescan happens only when the indexed directories actually changed, and a rescan still never re-reads a file whose size and modification time match the stored record, whatever state that record was in. Metadata is read on several workers at once, so genuinely new files are imported several times faster than one-at-a-time tagging allowed.

A database written by an earlier version, where every file of a disconnected drive had been rewritten to missing, is repaired once on first launch. Those records return without re-importing anything.

Keyboard controls:

  • Up / Down: navigate results and immediately replace the active preview.
  • Space: play, pause, or resume. With a selection, only that selection plays.
  • Esc: clear the waveform selection or cancel an active drag.
  • Ctrl+F: focus search.
  • Space remains normal text input while a text field such as search or tags has focus.

Waveform controls:

  • Drag empty waveform space to create a selection.
  • Drag either boundary to trim it.
  • Press inside the selection, move a few pixels, and hold for roughly 100 ms to carry it.
  • Double-click the waveform to clear the selection.
  • Drag a result row to carry the complete source file.

Creating, adjusting, or previewing a waveform selection does not create a file. The first actual selection drag writes a 16-bit PCM WAV containing only that range; an identical later drag reuses the cached WAV immediately.

RESET LIBRARY is available from both the browser and a long-running startup validation screen. After confirmation it cancels scanning, clears configured roots, SQLite index entries, stale file records, and cached waveform peaks. It does not delete or modify source audio. The app then returns to the first-run ADD LIBRARY screen.

Install the VEGAS Pro 23 bridge

From PowerShell in the folder you extracted the release into:

powershell -ExecutionPolicy Bypass -File .\Install-VEGAS-Bridge.ps1

This installs the bridge to:

%LOCALAPPDATA%\VEGAS Pro\23.0\Application Extensions\P1Z.SplitSfx.VegasBridge.dll

Restart VEGAS Pro 23 after installing. Tools -> Extensions -> SPLITSFX Bridge Status confirms that the resident command module loaded.

Whole-file row drags use native Windows file drag/drop with the original source path. Selected-region drags use native Windows file drag/drop with the managed cropped WAV, which gives VEGAS the same ordinary file payload it receives from Explorer.

Local storage

All application state is under:

%LOCALAPPDATA%\P1Z\SPLITSFX\
|-- library.db          SQLite index, roots, tags, favorites, file state
|-- library.db-wal      transient SQLite write-ahead log
|-- Cache\Waveforms\   on-demand compact peak/envelope files
|-- Cache\TemporaryCrops\  on-drag cropped WAVs (20 GB LRU limit)
`-- Logs\errors.log     unexpected UI/runtime errors

Peak caches contain 4,096 pairs of 16-bit minimum/maximum values (about 16 KB per opened sound), not decoded audio or waveform images.

Temporary crop storage starts at zero and grows only after selection drags. The library footer shows actual usage and provides CLEAR TEMP, with explicit confirmation and the amount to be removed. Automatic cleanup removes the oldest cached crops when usage reaches the 20 GB limit. Cleanup is confined to SPLITSFX's dedicated crop directory and never touches source audio.

Supported audio

  • WAV / WAVE
  • MP3
  • FLAC
  • OGG Vorbis
  • M4A / MP4 audio
  • AAC

WAV and MP3 use NAudio readers, OGG uses NVorbis, and FLAC/M4A/AAC use Windows Media Foundation. A damaged file or unavailable decoder is marked without stopping the library scan. VEGAS must also support the source format to create a timeline event from it.

Search covers filenames, full directory paths, user tags, and a normalized embedded-metadata index through SQLite FTS5. Multi-word terms use AND matching and weighted relevance across filename, folder, title, description, keywords, category, creator, and comments. Search never walks the physical library and never reopens audio while you type.

Embedded metadata support:

  • WAV/WAVE: RIFF LIST/INFO text fields, BWF bext description/originator/coding history, safe iXML leaf text, and embedded ID3 where present.
  • MP3: ID3v1/ID3v2 common fields, comments, and user-defined TXXX text.
  • FLAC and OGG: standard and custom Vorbis Comment fields.
  • M4A/MP4/AAC: standard Apple/container title, subtitle, description, grouping, comment, genre, creator, publisher, and related fields.
  • Common normalized fields include title, subtitle, description, album/grouping, comments, genres, performers and roles, album artist, composer, conductor, publisher, copyright, keywords, categories, and custom textual tags.

Metadata chunks are read without decoding the audio stream. Malformed or oversized descriptive chunks are bounded and skipped; a metadata failure does not by itself make the source unplayable.

Genuine limitations

  • The public ScriptPortal.Vegas API exposes the current timeline cursor but no supported conversion from an arbitrary OS drop screen coordinate to timeline time. Selected-region drops therefore insert at the current VEGAS cursor, explicitly.
  • The bridge targets a selected audio track, then the first audio track, and creates an audio track only when the project has none.
  • PCM selection preview and WAV crop boundaries use the requested sample frames. Compressed sources may begin at the closest position their decoder can seek to, while the generated WAV duration remains frame-bounded to the requested range.
  • The first waveform view decodes the source once in the background. Later views load the compact peak cache; full audio files are not retained in RAM.
  • The shared Windows audio output is initialized once during the initial loading gate and then continuously fed silence between previews. If the Windows default audio device changes afterward, its first reactivation may have a one-time hardware/driver delay.
  • Standard M4A/MP4 tags are indexed, but proprietary vendor-specific private atoms that TagLib# does not expose are ignored.
  • Managed crop files are cache files. Explicit CLEAR TEMP or automatic 20 GB LRU cleanup can remove old crops, so long-lived projects should consolidate media according to the target editor's normal workflow.

Official references: Using Scripting in VEGAS Pro 23 and the VEGAS Scripting API Summary.

Build from source

Requirements: Windows 10/11 and the .NET 8 SDK.

The application itself has no VEGAS dependency, so building and running it needs nothing beyond the SDK:

dotnet test .\tests\SplitSfx.Tests\SplitSfx.Tests.csproj
dotnet run --project .\src\SplitSfx.App\SplitSfx.App.csproj

Only the optional SplitSfx.VegasBridge project needs VEGAS Pro 23, because it compiles against ScriptPortal.Vegas.dll from the VEGAS installation, which is proprietary and cannot be redistributed here. Building the whole solution without VEGAS therefore fails on that one project, with a SPLITSFX001 message saying so rather than a missing-reference error. If VEGAS is installed somewhere other than C:\Program Files\VEGAS\VEGAS Pro 23.0, point the build at it:

dotnet build .\src\SplitSfx.VegasBridge\SplitSfx.VegasBridge.csproj -p:VegasProDirectory="D:\Apps\VEGAS Pro 23.0"

With VEGAS present, the publish script runs tests, produces the self-contained win-x64 executable, compiles the bridge, and assembles dist:

.\scripts\publish.ps1

scripts\release.ps1 goes one step further: it publishes as above, zips dist, tags the commit with the <Version> from Directory.Build.props, and creates the GitHub release through the GitHub CLI. Because that zip carries the bridge DLL, releases are cut from a machine with VEGAS Pro 23 installed; CI cannot produce them.

The application icon at src/SplitSfx.App/Assets/P1Z.SPLITSFX.ico is committed and needs no build step. It is generated art, not a hand-drawn asset - scripts/generate-icon.pl redraws every resolution from the same geometry if the mark ever changes.

  • SplitSfx.Core: SQLite/FTS, incremental validation, metadata, and filesystem monitoring.
  • SplitSfx.Audio: single-session playback state, selected-sample limiting, decoding, and peak cache.
  • SplitSfx.App: WPF UI, virtualized results, waveform interaction, drag gesture, and bridge client.
  • SplitSfx.VegasBridge: resident VEGAS custom-command module and named-pipe insertion endpoint.
  • SplitSfx.Tests: index, reset safety, FTS, playback races, waveform, and sample-boundary coverage.

Contributing

Issues and pull requests are welcome. CI runs the test suite and builds the application on every push and pull request. Please check that dotnet test .\tests\SplitSfx.Tests\SplitSfx.Tests.csproj passes locally first; warnings are errors in this repository, so a stray warning fails the build.

License

Released under the MIT License.

About

Local-first Windows sound-effects browser with waveform selection drag-and-drop and a VEGAS Pro 23 bridge

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages