<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rsplayer/src/audio.rs, branch main</title>
<subtitle>Daemon focused CLI music player
</subtitle>
<id>https://git.2137697.xyz/rsplayer/atom?h=main</id>
<link rel='self' href='https://git.2137697.xyz/rsplayer/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/'/>
<updated>2026-11-02T12:28:23Z</updated>
<entry>
<title>audio: open the output at the track's rate instead of pw-alsa's 44100</title>
<updated>2026-11-02T12:28:23Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-02T12:28:23Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=6e62ee4057b8ea3144f2f4df85e5d56c37c8fd72'/>
<id>urn:sha1:6e62ee4057b8ea3144f2f4df85e5d56c37c8fd72</id>
<content type='text'>
cpal asks the ALSA "default" PCM for its default config and pipewire-alsa
answers 44.1 kHz no matter what the graph runs at, so 48 kHz material was
resampled down to 44.1 in our linear resampler and then back up to 48 by
PipeWire. The stream now opens at the track's own rate (when the device
supports it), which keeps our resampler out of the path and leaves the
conversion to PipeWire's polyphase one.

The new `sample_rate` setting forces a fixed rate instead ("auto" by
default), for anyone who would rather match the graph exactly.
</content>
</entry>
<entry>
<title>seek: jump within the current track from the CLI and over MPRIS</title>
<updated>2026-11-02T12:19:49Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-02T12:19:49Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=50cd2a17734dee4c4739112261fc40974cce409a'/>
<id>urn:sha1:50cd2a17734dee4c4739112261fc40974cce409a</id>
<content type='text'>
`rsp seek 1:30`, `rsp seek +15`, `rsp seek -30` and `rsp seek` (print the
position) drive a new AudioCommand that seeks the format reader, resets the
decoder and drops the buffered samples, so the cpal stream keeps running and
playback continues from the new spot.

MPRIS gets a working Seek/SetPosition, reports CanSeek, and the state watcher
now emits Seeked when the playhead jumps (not just on track changes), which is
what clients need to move their progress bar after an external seek.

`rsp status` also reports the position (and duration when known) and says
Paused instead of Stopped when a track is loaded but not playing.
</content>
</entry>
<entry>
<title>audio: http streaming, opus/mkv support and stream recovery</title>
<updated>2026-11-02T12:02:11Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-02T12:02:11Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=853b63e543bbc72081c59d7e10d7c968178ce0ae'/>
<id>urn:sha1:853b63e543bbc72081c59d7e10d7c968178ce0ae</id>
<content type='text'>
- read http(s) urls through a MediaSourceStream instead of failing
- register the libopus decoder and enable mkv/aac/isomp4 in symphonia
- resample to the device rate with linear interpolation
- rebuild the output stream when the backend dies instead of leaving
  playback silent while the daemon still reports "Playing"

A dead pcm makes cpal call the error callback hundreds of thousands of
times per second, so errors are only counted there and reported once when
the stream is dropped. The first failure of a healthy stream is retried
immediately, consecutive failures back off, and a stream that played long
enough clears the failure budget.
</content>
</entry>
<entry>
<title>Add lyrics support</title>
<updated>2026-06-07T18:19:46Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-06-07T18:19:46Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=45a1728ea4a3812120728562084fd416b35b074c'/>
<id>urn:sha1:45a1728ea4a3812120728562084fd416b35b074c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add internet streams support</title>
<updated>2026-05-27T18:46:33Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-05-27T18:46:33Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=0ae9d89f18bf36407229798a3b4943604fb708e4'/>
<id>urn:sha1:0ae9d89f18bf36407229798a3b4943604fb708e4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>add licensing</title>
<updated>2026-05-26T14:54:47Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-05-26T14:54:47Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=337a0ec8a55692f44031b00391a48a7b4b8c71b6'/>
<id>urn:sha1:337a0ec8a55692f44031b00391a48a7b4b8c71b6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix for new symphony API and less debug info in release</title>
<updated>2026-05-18T19:46:26Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-05-18T19:46:26Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=6cceb3cbfacb6f4416e49321a9b63b4ce7a9f036'/>
<id>urn:sha1:6cceb3cbfacb6f4416e49321a9b63b4ce7a9f036</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix queue display returning nothing - removed daemon pager, return full output instead. Increase pre-buffer to 100 packets.</title>
<updated>2026-05-09T22:29:01Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-05-09T22:29:01Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=69172d7abe17d56b68a97465344467d8c34482b6'/>
<id>urn:sha1:69172d7abe17d56b68a97465344467d8c34482b6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix buffer underrun - pre-decode samples before playback</title>
<updated>2026-05-09T15:14:39Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-05-09T15:14:39Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=898ebd930e0c5bb8b3f092d4c462bc38130adccf'/>
<id>urn:sha1:898ebd930e0c5bb8b3f092d4c462bc38130adccf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add desktop notifications for track changes, queue end, and errors</title>
<updated>2026-05-07T22:55:52Z</updated>
<author>
<name>salmonik</name>
<email>raisersoft@proton.me</email>
</author>
<published>2026-05-07T22:55:52Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rsplayer/commit/?id=c88f056289040533b692fdf0e7cd06d2988e5c92'/>
<id>urn:sha1:c88f056289040533b692fdf0e7cd06d2988e5c92</id>
<content type='text'>
Uses notify-rust to send D-Bus desktop notifications from the daemon
when tracks change, the queue empties, or audio errors occur.
</content>
</entry>
</feed>
