DSF format support

User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

DSF format support

Post by ontologger »

Is DSF audio format supported by GMP?

I can play DSF using gst-launch cli:

Code: Select all

gst-launch-1.0 filesrc location=test.dsf ! decodebin ! audioconvert ! alsasink
but the same file doesn't play in GMP :roll:
User avatar
anonbeat
Posts: 2048
Joined: Thu Sep 16, 2010 9:47 pm

Re: DSF format support

Post by anonbeat »

DSF at this moment is not supported. But if it taglib supports its tag format It can easily added.

Thanks for the help
User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

Re: DSF format support

Post by ontologger »

Unfortunately taglib doesn't seem to have DSF support at the moment.

They have a stale branch for it, but it seems to be unchanged for the past 2 years, so probably no taglib for DSF in the nearest future :cry: It's pity, since gstreamer totally supports it...

I wonder if it is possible to add DSF playback support to GMP without tagging features?
User avatar
anonbeat
Posts: 2048
Joined: Thu Sep 16, 2010 9:47 pm

Re: DSF format support

Post by anonbeat »

I downloaded some sample files and cant reproduce them with vlc or gstreamer.
User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

Re: DSF format support

Post by ontologger »

VLC doesn't play it, indeed; but gstreamer seems to be quite capable.

Have you tried gst-launch command line that I posted above?

You can use DSF samples from Oppo for testing: https://www.oppodigital.com/hra/dsd-by-davidelias.aspx

My trace with -v -m flags:

Code: Select all

$ gst-launch-1.0 -v -m filesrc location=test.dsf ! decodebin ! audioconvert ! alsasink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got message #9 from element "alsasink0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #10 from element "audioconvert0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #11 from element "typefind" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #12 from element "decodebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #13 from element "filesrc0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #14 from element "pipeline0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_PAUSED;
Got message #17 from element "audioconvert0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #22 from pad "typefind:sink" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"\(GstTypeFindElement\)\ typefind", object=(GstTask)"\(GstTask\)\ typefind:sink";
Got message #23 from element "typefind" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #24 from element "filesrc0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #25 from pad "typefind:sink" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(GstTypeFindElement\)\ typefind", object=(GstTask)"\(GstTask\)\ typefind:sink";
Got message #28 from pad "typefind:src" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)application/x-gst-av-dsf;
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: caps = application/x-gst-av-dsf
Got message #42 from element "avdemux_dsf0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #43 from pad "typefind:src" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"NULL";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: caps = NULL
Got message #44 from pad "avdemux_dsf0:sink" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"\(avdemux_dsf\)\ avdemux_dsf0", object=(GstTask)"\(GstTask\)\ task2";
Got message #45 from element "avdemux_dsf0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #46 from pad "avdemux_dsf0:sink" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(avdemux_dsf\)\ avdemux_dsf0", object=(GstTask)"\(GstTask\)\ avdemux_dsf0:sink";
Got message #56 from pad "multiqueue0:src_0" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ task3";
Got message #60 from pad "multiqueue0:src_0" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-dsd\,\ rate\=\(int\)352800\,\ channels\=\(int\)2\,\ channel-mask\=\(bitmask\)0x0000000000000003\,\ lsbf\=\(boolean\)true\,\ planar\=\(boolean\)true";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstPad:src_0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, lsbf=(boolean)true, planar=(boolean)true
Got message #71 from pad "multiqueue0:src_0" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ multiqueue0:src_0";
Got message #75 from element "avdec_dsd_lsbf_planar0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #79 from element "avdec_dsd_lsbf_planar0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #80 from pad "avdec_dsd_lsbf_planar0:sink" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-dsd\,\ rate\=\(int\)352800\,\ channels\=\(int\)2\,\ channel-mask\=\(bitmask\)0x0000000000000003\,\ lsbf\=\(boolean\)true\,\ planar\=\(boolean\)true";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/avdec_dsd_lsbf_planar:avdec_dsd_lsbf_planar0.GstPad:sink: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, lsbf=(boolean)true, planar=(boolean)true
Got message #88 from pad "multiqueue0:src_1" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ task4";
Got message #92 from pad "multiqueue0:src_1" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"image/jpeg\,\ width\=\(int\)1040\,\ height\=\(int\)1040\,\ framerate\=\(fraction\)1/1\,\ parsed\=\(boolean\)true";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstPad:src_1: caps = image/jpeg, width=(int)1040, height=(int)1040, framerate=(fraction)1/1, parsed=(boolean)true
Got message #94 from pad "multiqueue0:src_1" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(GstMultiQueue\)\ multiqueue0", object=(GstTask)"\(GstTask\)\ multiqueue0:src_1";
Got message #107 from element "jpegdec0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #111 from element "jpegdec0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #112 from pad "jpegdec0:sink" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"image/jpeg\,\ width\=\(int\)1040\,\ height\=\(int\)1040\,\ framerate\=\(fraction\)1/1\,\ parsed\=\(boolean\)true";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstJpegDec:jpegdec0.GstPad:sink: caps = image/jpeg, width=(int)1040, height=(int)1040, framerate=(fraction)1/1, parsed=(boolean)true
Got message #113 from element "multiqueue0" (property-notify): GstMessagePropertyNotify, property-name=(string)max-size-buffers, property-value=(uint)5;
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-buffers = 5
Got message #114 from element "multiqueue0" (property-notify): GstMessagePropertyNotify, property-name=(string)max-size-time, property-value=(guint64)0;
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-time = 0
Got message #115 from element "multiqueue0" (property-notify): GstMessagePropertyNotify, property-name=(string)max-size-bytes, property-value=(uint)2097152;
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-bytes = 2097152
Got message #117 from pad "multiqueue0:sink_0" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-dsd\,\ rate\=\(int\)352800\,\ channels\=\(int\)2\,\ channel-mask\=\(bitmask\)0x0000000000000003\,\ lsbf\=\(boolean\)true\,\ planar\=\(boolean\)true";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstMultiQueuePad:sink_0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, lsbf=(boolean)true, planar=(boolean)true
Got message #118 from pad "multiqueue0:sink_1" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"image/jpeg\,\ width\=\(int\)1040\,\ height\=\(int\)1040\,\ framerate\=\(fraction\)1/1\,\ parsed\=\(boolean\)true";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstMultiQueuePad:sink_1: caps = image/jpeg, width=(int)1040, height=(int)1040, framerate=(fraction)1/1, parsed=(boolean)true
Got message #128 from pad "jpegdec0:src" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)1040\,\ height\=\(int\)1040\,\ interlace-mode\=\(string\)progressive\,\ multiview-mode\=\(string\)mono\,\ multiview-flags\=\(GstVideoMultiviewFlagsSet\)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ chroma-site\=\(string\)mpeg2\,\ colorimetry\=\(string\)1:4:0:0\,\ framerate\=\(fraction\)1/1";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstJpegDec:jpegdec0.GstPad:src: caps = video/x-raw, format=(string)I420, width=(int)1040, height=(int)1040, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)1:4:0:0, framerate=(fraction)1/1
Got message #130 from pad "avdec_dsd_lsbf_planar0:src" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-raw\,\ format\=\(string\)F32LE\,\ layout\=\(string\)non-interleaved\,\ rate\=\(int\)352800\,\ channels\=\(int\)2\,\ channel-mask\=\(bitmask\)0x0000000000000003";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0/avdec_dsd_lsbf_planar:avdec_dsd_lsbf_planar0.GstPad:src: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
Got message #136 from element "decodebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #47 from element "pipeline0" (stream-start): GstMessageStreamStart, group-id=(uint)2;
Got message #140 from pad "audioconvert0:src" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-raw\,\ rate\=\(int\)352800\,\ format\=\(string\)F32LE\,\ channels\=\(int\)2\,\ layout\=\(string\)interleaved\,\ channel-mask\=\(bitmask\)0x0000000000000003";
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = audio/x-raw, rate=(int)352800, format=(string)F32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
Got message #141 from element "alsasink0" (latency): no message details
Redistribute latency...
Got message #142 from object "audiosinkringbuffer0" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(GstAlsaSink\)\ alsasink0", object=(GThread)NULL;
Got message #143 from pad "alsasink0:sink" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-raw\,\ rate\=\(int\)352800\,\ format\=\(string\)F32LE\,\ channels\=\(int\)2\,\ layout\=\(string\)interleaved\,\ channel-mask\=\(bitmask\)0x0000000000000003";
/GstPipeline:pipeline0/GstAlsaSink:alsasink0.GstPad:sink: caps = audio/x-raw, rate=(int)352800, format=(string)F32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
Got message #144 from pad "audioconvert0:sink" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-raw\,\ format\=\(string\)F32LE\,\ layout\=\(string\)non-interleaved\,\ rate\=\(int\)352800\,\ channels\=\(int\)2\,\ channel-mask\=\(bitmask\)0x0000000000000003";
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
Got message #145 from pad "src_1:proxypad2" (property-notify): GstMessagePropertyNotify, property-name=(string)caps, property-value=(GstCaps)"audio/x-raw\,\ format\=\(string\)F32LE\,\ layout\=\(string\)non-interleaved\,\ rate\=\(int\)352800\,\ channels\=\(int\)2\,\ channel-mask\=\(bitmask\)0x0000000000000003";
/GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstDecodePad:src_1.GstProxyPad:proxypad2: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
Got message #147 from element "alsasink0" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ album\=\(string\)\"Acoustic\\\ Trio\\\ -\\\ DSD\\\ Sessions\"\,\ title\=\(string\)\"Rodeo\\\ On\\\ A\\\ Ridge\"\,\ artist\=\(string\)\"David\\\ Elias\"\,\ genre\=\(string\)\"Independent\\\ Acoustic\"\,\ encoder\=\(string\)\"KORG\\\ AudioGate\\\ ver.2.3.2\\\ \\\(Windows\\\ 7\\\)\"\,\ datetime\=\(datetime\)2006-11-17T10:48Z\;";
Got message #148 from element "alsasink0" (tag): GstMessageTag, taglist=(taglist)"taglist\,\ audio-codec\=\(string\)\"DSD\\\ \\\(Direct\\\ Stream\\\ Digital\\\)\\\,\\\ least\\\ significant\\\ bit\\\ first\\\,\\\ planar\"\;";
Got message #149 from element "alsasink0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #152 from element "pipeline0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING;
Pipeline is PREROLLED ...
Got message #151 from element "pipeline0" (async-done): GstMessageAsyncDone, running-time=(guint64)18446744073709551615;
Setting pipeline to PLAYING ...
Got message #153 from element "pipeline0" (new-clock): GstMessageNewClock, clock=(GstClock)"\(GstAudioClock\)\ GstAudioSinkClock";
New clock: GstAudioSinkClock
Got message #155 from element "alsasink0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #156 from element "audioconvert0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #157 from element "jpegdec0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #158 from element "avdec_dsd_lsbf_planar0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #159 from element "multiqueue0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #160 from element "avdemux_dsf0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #161 from element "typefind" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #162 from element "decodebin0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #163 from element "filesrc0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
Got message #164 from element "pipeline0" (state-changed): GstMessageStateChanged, old-state=(GstState)GST_STATE_PAUSED, new-state=(GstState)GST_STATE_PLAYING, pending-state=(GstState)GST_STATE_VOID_PENDING;
User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

Re: DSF format support

Post by ontologger »

Forgot to mention - you need gstreamer1.0-alsa & gstreamer1.0-libav packages for it
User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

Re: DSF format support

Post by ontologger »

A small update: I am able to play DSF in GMP simply by renaming the file to WAV extension 8-) so the playback problem seems to be quite easy to solve
User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

Re: DSF format support

Post by ontologger »

I have made some minimal changes to introduce DSF playback: https://github.com/anonbeat/guayadeque/pull/116

There are small glitches (track duration detected only on play, seekbar is stuck at the beginning sometimes), but the files are playing that's important :roll:
User avatar
anonbeat
Posts: 2048
Joined: Thu Sep 16, 2010 9:47 pm

Re: DSF format support

Post by anonbeat »

anonbeat wrote: Wed Mar 03, 2021 11:01 am I downloaded some sample files and cant reproduce them with vlc or gstreamer.
Finally the files was corrupt or something. Downloaded more samples from other location and they play just fine.
User avatar
ontologger
Posts: 12
Joined: Mon Mar 01, 2021 5:50 pm

Re: DSF format support

Post by ontologger »

After testing gstreamer implementation with my audio collection I have found few tracks which do not play.
Unfortunately it seems like DSF support is quite partial in gstreamer so far... :cry:

I'll keep checking what can be done :arrow:

UPD:

Code: Select all

ffmpeg
plays those dsf files with no issues (if resampling with

Code: Select all

-ar 48000
).
Locked