FLAC Seek Tables

Hello,

Are there any FLAC best practices available when encoding files for local streaming over RAAT?
For SONOS players I found these recommendations. I was wondering if Roon could also benefit from similar settings (or there are other settings that might help and should be taken into account?).
Adding a SEEKTABLE to existing FLAC files is also quite trivial so if it can help it’s not a big effort to implement.
Any official position on this?

Thanks!

Never heard of Seek Tables, even when I had a Sonos system. As the stated benefits above are all Sonos player related, I don’t think they apply to Roon. Roon does all the decoding on the core and streams PCM to endpoints, so I assume endpoints do not make use of Seek Tables.
No idea what the official position is though. Seek Tables are not mentioned anywhere in the Roon KB.

They are used for seeking within a track. Roon doesn’t need them.

Seeking within a FLAC file should work with or without a seek table, it’s just a bit slower without a seek table as the full stream has to be read to reach the seek point.

I was looking into this because I could see a difference in player synchronization times when using synchronized players on LMS, and that seems to be related to seek tables. When seek tables are present, synchronizing players in a group is a bit faster as they can all jump to the same point in the stream faster.

This was the info I have found on the LMS forums:

So yes, Roon doesn’t need them, but I think it could make use of them when seeking through tracks. I was just curious what was the experience of the people who did the testing with or without seek tables.

I think though that they are used by clients pulling a seek from a data source. When you seek in roon the server does the seeking, synch the clocks and then sends the stream.
Theoretically if roon uses tables it might make some sort of difference but you as a user wouldn’t know if it was being used or not as its all buried in the server and certainly wouldn’t have any client end affect.
I believe seek tables were only added to dbpoweramp a few months ago so as a great number of users are DB users there are millions of happily seeking tracks in roon without the tables.

Yes, it’s all part of the API, if the tables are present they will be used, otherwise seeking will happen sequentially through the stream. I think for dbpoweramp this got implemented recently based on user requests, but other software like Foobar has been encoding FLAC files with seek tables for a long time. Of course, as we get our files from different sources, we can’t really control how they get created, but luckily it’s easy to add the seek tables to existing files by using metaflac and this is done without having to re-encode the file and it is preserving all TAG information:

Adding the seek points can increase the file size by a couple of KB which is of course negligible and in most of the cases the file size won’t even increase because of the padding already present in the FLAC header…

None of this is relevant to RAAT as RAAT endpoints don’t decode FLAC. The decode happens in the Roon Core.

It will take longer to seek in a FLAC file with no seektable in any player, but it shouldn’t break anything, and the effect should be much smaller in Roon since the Roon Core is usually running on a fast computer with fast access to storage, compared to Sonos which is having to page through the entire FLAC file over WiFi on a tiny CPU.

3 Likes

How does the sound of a flac file with seek tables compare to the same flac file without seek tables?

This is just metadata so it will not have any impact on sound quality. Form what I could read there are some streamers which don’t allow seeking into a FLAC file without seek tables, so for the sake of compatibility and convenience I have written a small script which checks for the presence of seek tables and adds them if necessary. At this time all FLAC files in my library have seek tables and I will also add seek tables (if not already present) to all new files before importing them in my library.
In this way I don’t have to worry about this matter anymore, in case any client (player) or server software needs them, they are there available to be used :wink: