<feed xmlns='http://www.w3.org/2005/Atom'>
<title>soundbox-app, branch main</title>
<subtitle>App to use soundbox devices</subtitle>
<id>https://cgit.xengineering.eu/soundbox-app/atom</id>
<link rel='self' href='https://cgit.xengineering.eu/soundbox-app/atom'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/'/>
<updated>2025-01-31T12:52:48Z</updated>
<entry>
<title>Update CHANGELOG.md for version 0.3.1</title>
<updated>2025-01-31T12:52:48Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-01-31T12:52:48Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=27540bffeb4e4d43e0b99ddec04a3e936fef551c'/>
<id>urn:sha1:27540bffeb4e4d43e0b99ddec04a3e936fef551c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Update to soundbox-go v0.2.2</title>
<updated>2025-01-31T12:50:43Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-01-31T12:50:43Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=c35e7db8e352833ada2ea1f590cd95acad435ea9'/>
<id>urn:sha1:c35e7db8e352833ada2ea1f590cd95acad435ea9</id>
<content type='text'>
This avoids using one CPU core to 100 % and fixes likely related audio
issues.
</content>
</entry>
<entry>
<title>Update CHANGELOG.md for release v0.3.0</title>
<updated>2024-12-15T12:09:43Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-12-15T12:09:43Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=47d60cbb760dc1147e44ebd47b878c258ad1a40f'/>
<id>urn:sha1:47d60cbb760dc1147e44ebd47b878c258ad1a40f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add experimental streaming with PipeWire</title>
<updated>2024-12-15T12:00:13Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-12-08T18:56:52Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=04ed13ca73442d90a15d1b0b3816ed5ee8f130d8'/>
<id>urn:sha1:04ed13ca73442d90a15d1b0b3816ed5ee8f130d8</id>
<content type='text'>
This allows to stream sound from a Linux PC with PipeWire sound system
to soundboxes.

Currently PipeWire capture nodes are used. They should be connected to
the monitor output of the default sound sink manually.
</content>
</entry>
<entry>
<title>Update to soundbox-go v0.2.1</title>
<updated>2024-12-15T11:53:20Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-12-15T11:50:43Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=9fe390db8e63603a7bfb2e0c7cd77386cc6247ff'/>
<id>urn:sha1:9fe390db8e63603a7bfb2e0c7cd77386cc6247ff</id>
<content type='text'>
This contains important bug fixes. Especially the ability to tear down a
PipeWire capture node during runtime which is essentially to integrate
this into the GUI.
</content>
</entry>
<entry>
<title>Update to soundbox-go v0.2.0</title>
<updated>2024-12-08T17:41:53Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-12-08T17:41:53Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=ad86a9dd63ae0ac37336d34187735ec6408b3ee8'/>
<id>urn:sha1:ad86a9dd63ae0ac37336d34187735ec6408b3ee8</id>
<content type='text'>
This adds experimental support for PipeWire which should be added to the
GUI too.
</content>
</entry>
<entry>
<title>Update to soundbox-go v0.1.5</title>
<updated>2024-11-29T09:38:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-11-29T09:38:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=6127c4e048e5590b872536177996d46f6f6685a4'/>
<id>urn:sha1:6127c4e048e5590b872536177996d46f6f6685a4</id>
<content type='text'>
This makes streaming more robust and allows to stream via any / multiple
network interfaces.
</content>
</entry>
<entry>
<title>Update CHANGELOG.md for version 0.2.1</title>
<updated>2024-11-10T15:46:32Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-11-10T15:46:32Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=e77cc906f25f2f3ecbeee09ceef60cd9e239a248'/>
<id>urn:sha1:e77cc906f25f2f3ecbeee09ceef60cd9e239a248</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Update to xengineering.eu/soundbox-go@v0.1.4</title>
<updated>2024-11-10T15:46:03Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-11-10T15:42:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=e99a7ce681b86abc2a4481c2e31b253cd8513d37'/>
<id>urn:sha1:e99a7ce681b86abc2a4481c2e31b253cd8513d37</id>
<content type='text'>
This should fix long term time offset in playback between multiple
soundbox instances.
</content>
</entry>
<entry>
<title>Update CHANGELOG.md for version 0.2.0</title>
<updated>2024-11-08T19:04:28Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-11-08T19:04:28Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=5d232ec12da93fcf7622ba784feec0665424e767'/>
<id>urn:sha1:5d232ec12da93fcf7622ba784feec0665424e767</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix README.md</title>
<updated>2024-11-08T19:03:02Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-11-08T19:03:02Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=f610a7f2c0e457d139431c1f29b282fc5d2306ad'/>
<id>urn:sha1:f610a7f2c0e457d139431c1f29b282fc5d2306ad</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix zombie ffmpeg process</title>
<updated>2024-11-08T18:34:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-11-08T18:34:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=c5b70859438b22e0e186c57037aee02adde5399b'/>
<id>urn:sha1:c5b70859438b22e0e186c57037aee02adde5399b</id>
<content type='text'>
In case of closing the UI window while the player was active the
`ffmpeg` process continued while soundbox-app was closed. This is highly
unwanted behavior since the user is not able to stop it without advanced
tools.

Waiting properly for the player context to be done solves the issue.
</content>
</entry>
<entry>
<title>Fix URLs in README.md</title>
<updated>2024-10-31T21:49:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-31T21:49:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=dbc0b05e4bbd939cd4dce6cadb833a860ff2c0d5'/>
<id>urn:sha1:dbc0b05e4bbd939cd4dce6cadb833a860ff2c0d5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Rename Go module to xengineering.eu/soundbox-app</title>
<updated>2024-10-31T21:48:01Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-31T21:39:13Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=4f46443be82b3ca8b6f2bff759e17ea423892e21'/>
<id>urn:sha1:4f46443be82b3ca8b6f2bff759e17ea423892e21</id>
<content type='text'>
This follows a similar naming scheme as the repository URL
`https://cgit.xengineering.eu/soundbox-app` and is better than
`xengineering.eu/soundbox/app` which was used before.
</content>
</entry>
<entry>
<title>Add config option "enabled"</title>
<updated>2024-10-08T18:46:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-08T18:46:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=0dd945ae968e8d15e6adec71c5a598a39acf18dd'/>
<id>urn:sha1:0dd945ae968e8d15e6adec71c5a598a39acf18dd</id>
<content type='text'>
This allows to disable soundbox devices inside the configuration file.
Thus the MAC address can be kept inside the config while the device does
not have to be reachable during usage of the app.

Later the GUI should be able to change this during runtime.
</content>
</entry>
<entry>
<title>Apply go fmt</title>
<updated>2024-10-08T18:13:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-08T18:13:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=5c1f2517a9ccabddc155b4ffb6eb82d3465d527b'/>
<id>urn:sha1:5c1f2517a9ccabddc155b4ffb6eb82d3465d527b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove unnecessary state member PlayPauseButtonText</title>
<updated>2024-10-08T18:07:39Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-08T18:07:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=4bb64298928e7434b62029ccb334e37a311bbfb1'/>
<id>urn:sha1:4bb64298928e7434b62029ccb334e37a311bbfb1</id>
<content type='text'>
It was never idiomatic to add this member. Instead the state should only
contain a boolean state of playing or not and the text should be
selected during rendering based on this variable.
</content>
</entry>
<entry>
<title>Select URL with radio buttons based on config</title>
<updated>2024-10-08T18:03:20Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-08T16:05:31Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=9a31ee11242c8827eca1330a568362904c29d890'/>
<id>urn:sha1:9a31ee11242c8827eca1330a568362904c29d890</id>
<content type='text'>
This is way more convenient than pasting a URL into an editor.
</content>
</entry>
<entry>
<title>Display only "soundbox" in window decoration</title>
<updated>2024-10-08T15:15:36Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-08T15:15:36Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=e678c6edd21ff50a93d7635575c8c135f2196f0f'/>
<id>urn:sha1:e678c6edd21ff50a93d7635575c8c135f2196f0f</id>
<content type='text'>
The old string "soundbox app" could lead to confusion. The repository
structure and the related longer names are not important for the user.
</content>
</entry>
<entry>
<title>Use only one Config struct</title>
<updated>2024-10-08T15:04:30Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-08T15:04:30Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=2e326d354a536ec8626809c9fe9b411d05e79c46'/>
<id>urn:sha1:2e326d354a536ec8626809c9fe9b411d05e79c46</id>
<content type='text'>
This commit switches from a GlobalConfig struct with named sub-structs
to a single struct definition with anonymous sub-structs. The advantage
is that there are not so many names the reader has to understand.

A custom UnmarshalJSON() function on the Config struct level ensures
that the error checking can be embedded into the parsing process and
native Go types like net.HardwareAddr can be used in the struct
definition while the string-based struct for JSON unmarshaling is an
implementation detail of the custom UnmarshalJSON() function.

In general the user of this type and its method only has to parse the
config with json.Unmarshal(), handle error at this step and can rely on
validated configuration data with native Go types from that point on.
</content>
</entry>
<entry>
<title>Parse config at startup</title>
<updated>2024-10-07T19:55:50Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-07T19:53:38Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=b03cf32bef7e34c4886a3b7300ffc0132b310a5b'/>
<id>urn:sha1:b03cf32bef7e34c4886a3b7300ffc0132b310a5b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Allow URL configuration in config file</title>
<updated>2024-10-07T19:23:20Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-07T19:23:20Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=293965c55615bb072843500cc3af44c0e266dfcd'/>
<id>urn:sha1:293965c55615bb072843500cc3af44c0e266dfcd</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove checksums from go.sum for outdated versions</title>
<updated>2024-10-07T18:27:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-07T18:27:42Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=c448b708c5392687253a04e8d9a8ca5cb9c142c5'/>
<id>urn:sha1:c448b708c5392687253a04e8d9a8ca5cb9c142c5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Switch from local playback to soundbox streaming</title>
<updated>2024-10-06T18:13:28Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-03T16:16:08Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=a1d91fcba108a59c440f0675dd5106422cf3ff7e'/>
<id>urn:sha1:a1d91fcba108a59c440f0675dd5106422cf3ff7e</id>
<content type='text'>
This commit replaces the local playback of the received audio content by
forwarding it to one or multiple soundbox devices.

For this purpose the soundbox-go[1] library is used.

The target devices cannot be selected via the GUI. Thus all devices are
specified in the ~/.config/soundbox/config.json file. The format has to
be looked up based on the code. Further documentation will follow.

[1]: https://xengineering.eu/git/soundbox-go
</content>
</entry>
<entry>
<title>Update Go version 1.23.1</title>
<updated>2024-10-03T14:49:07Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-03T14:48:53Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=bb34d5f69ca4ad66754dd9833b9d7efee41ba4f2'/>
<id>urn:sha1:bb34d5f69ca4ad66754dd9833b9d7efee41ba4f2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Switch to module name xengineering.eu/soundbox/app</title>
<updated>2024-10-03T14:47:13Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-03T14:47:13Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=0ff4dcf2261f1e9068f7b112423367ea8935ed23'/>
<id>urn:sha1:0ff4dcf2261f1e9068f7b112423367ea8935ed23</id>
<content type='text'>
The old name xengineering.eu/soundbox is now used by the corresponding
library.
</content>
</entry>
<entry>
<title>Add CHANGELOG.md for version 0.1.0 release</title>
<updated>2024-10-03T12:27:48Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-03T12:27:48Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=ef01b82db466bbf95324596c8f5bffb1e27c75e0'/>
<id>urn:sha1:ef01b82db466bbf95324596c8f5bffb1e27c75e0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Update documentation in README.md</title>
<updated>2024-10-03T12:24:39Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-10-03T12:24:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=be9f44bb84fcaebf05229d77e5638b28329a8c4f'/>
<id>urn:sha1:be9f44bb84fcaebf05229d77e5638b28329a8c4f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add basic usage instructions</title>
<updated>2024-09-29T10:41:01Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-09-29T10:41:01Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=64323e11c37c5d8f6acef60a33c8189cc469a73f'/>
<id>urn:sha1:64323e11c37c5d8f6acef60a33c8189cc469a73f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add web radio player app as MVP</title>
<updated>2024-09-29T10:38:30Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-09-29T10:38:30Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/soundbox-app/commit/?id=9d3e0c0f2e30dc43d1e3a1bb316d6af918bd8309'/>
<id>urn:sha1:9d3e0c0f2e30dc43d1e3a1bb316d6af918bd8309</id>
<content type='text'>
While streaming to soundbox devices is not supported this MVP is a
working mpv-based GUI to play sound from web radio URLs on a Linux
computer.
</content>
</entry>
</feed>
