Benchmarks

When we say Sampularity stays fast on a huge library, this is what we measured, on what machine, and where it does not hold. Every figure comes from a named test in the source tree.

The short version

Scrolling the table costs the same six milliseconds whether the library holds a hundred thousand samples or five million. That is not a trick of tuning: the table is virtualized, so fetching a screenful depends on the size of the screen, not the size of the library. It is the one figure on this page we would call the point of the whole thing.

What we measured it on

Three catalogues. The first is a real, grown sample library: 122,792 samples from purchased packs, with real tags, real tempo values, real folder structure. The other two are that same catalogue multiplied 8× and 41×, so that row counts, row widths and, importantly, the distributions that make database work slow are preserved.

We are telling you they are clones because it matters: multiplying a catalogue does not touch the filesystem, so the two big catalogues cannot say anything about import speed. The import figure further down is therefore measured on 35,451 real audio files instead.

Times are the median of the run; “library” means the biggest single library inside each catalogue.
Operation 122,792 samples 982,336 samples 5,034,472 samples
Scroll one screenful (1,792 rows) 6.4 ms 6.8 ms 5.9 ms
Open the biggest library 11.7 ms
35,451 rows
98.6 ms
283,608 rows
510 ms
1,453,491 rows
Search a word (“kick”) 10.2 ms 78.1 ms 685 ms
Search a rarer word (“vox”) 0.6 ms 2.9 ms 21.3 ms
Filter by category 1.3 ms 6.3 ms 43.9 ms
Filter by tempo range 7.1 ms 62.9 ms 694 ms
Sort the library by a column 11-55 ms 96-506 ms 0.5-3.7 s
Find similar samples 75 ms 737 ms 3.8 s
AI text search (semantic) 173 ms 478 ms 955 ms

One library holding five million samples

The table above uses the biggest library that happens to exist inside each catalogue. Since our stat line talks about samples per library, we also measured the case it actually describes: a single library containing all 5,034,472 samples.

Open the library1.90 s
Scroll one screenful4.9 ms
Scroll to row 2,517,2369.6 ms
Search a word (“kick”, 197,538 hits)1.05 s
Sort by path8.4 s
Sort by tag11.9 s

Scrolling stays in the milliseconds even two and a half million rows deep. Sorting a library that size does not, see the limits below.

Importing a sample pack

This one is measured on real files: a 35,573-file, 46.8 GB commercial loop bundle, copied to a local NVMe drive so the figure reflects the software rather than a network share. Sampularity’s first import pass reads directory metadata only, no decoding, which is why samples become browsable and playable long before the audio analysis has looked at them.

First samples visible7.7 ms
1,000 samples39 ms
10,000 samples822 ms
All 35,451 audio files, browsable1.33 s
Table built over the fresh import11.5 ms

122 of the 35,573 files were skipped as non-audio. Audio analysis (tempo, key, timbre, tagging, embeddings) then runs on background threads while you browse.

Starting a preview

Landing on a sample decodes it and hands it to the player: that is where the sound starts. Measured on the same commercial bundle: 300 files taken every 118th so the selection spans the whole corpus rather than one folder of kick drums, each read cold from disk, plus the ten largest files in it. Three runs on different file selections, so the spread below is run-to-run variation and not a single lucky number.

Typical sample (median)3-10 ms
9 out of 10 samples within27-38 ms
Slowest of the 30087-124 ms
Second play of the same file~2 ms
Longest file tested (5:00, 97 MB)~100 ms

These figures are the software only: your audio device adds its own buffer (~10 ms at a typical setting), and none of it depends on how large your library is. This measurement also changed the code: drawing the waveform used to happen between the decode and the sound, which cost 43 ms on that five-minute file for no reason. It now happens afterwards.

Where it does not hold

A benchmark page that only shows its best numbers is not worth reading. These are the limits we know about:

Why you can check this

Every figure above comes from a benchmark that lives in the source tree and is run by name, not from a stopwatch and a good mood. Two of them verify themselves rather than just timing: the word search compares its results against the slow formulation it replaced and requires the two row sets to be identical, and the tag sort key was checked row-for-row against its predecessor across all 5,034,472 rows with zero differences. A faster search that quietly finds different samples is not a faster search.

Figures apply to Sampularity 0.1.0. We re-measure when the code that serves these paths changes; if you find a case that behaves differently on your library, we would like to hear about it at support@sampularity.com.