Age | Commit message (Collapse) | Author |
|
|
|
The switch to `io.Copy()` to pump the data to the soundbox devices
removed the control over the buffer size of this copy action.
While for generic copy actions it is even an advantage when a big buffer
is used this is a problem for the soundbox use case. A big buffer used
during copy means that the first soundbox device gets audio data
significantly earlier than the later ones since `io.MultiWriter()` works
sequentially.
Thus this commit switches to `io.CopyBuffer()` where a buffer has to
provided. For that purpose the same buffer size is used as before the
refactoring to use `io.Copy()`.
|
|
This makes use of two functions from this package:
- io.Copy()
- io.MultiWriter()
`io.Copy()` is used to move the data from whatever reader is provided.
`io.Multiwriter()` solves the issue that we need to stream to multiple
network connections at the same time (one for each soundbox).
|
|
This is recommended by the Go standard library. One reason is that a
Reader might deliver the last couple of bytes together with the EOF
error. This is only handled correctly if the returned bytes are
processed first and the error is handled later.
[1]: https://pkg.go.dev/io#Reader
|
|
This prepares the switch to adding more sources than web URLs.
Everything providing an io.Reader can then simply use this internal
function in the background to avoid code duplication.
|
|
|
|
|
|
Calling the external program `ffmpeg` should be avoided completely in
the future to make soundbox-go a pure Go code base. `ffmpeg` provides
the following functionality to soundbox-go:
- web radio input stream transport
- re-encoding of the audio stream
- output stream transport to soundbox devices
The last part should be replaced with this commit as a first step.
|
|
This variable only contains the arguments for the called program. Thus
it should be named like this.
|
|
The repository names for soundbox are named as below:
- app: soundbox-app
- Go library module: soundbox-go
- Device: soundbox
The Go module names were:
- app: xengineering.eu/soundbox/app
- Go library module: xengineering.eu/soundbox
This does not make clear which module is related to which repository
since the names are different. Thus it should be changed to:
- app: xengineering.eu/soundbox-app
- Go library module: xengineering.eu/soundbox-go
The import statement for the library is then:
import "xengineering.eu/soundbox-go/soundbox"
This is a bit longer but it keeps the property that the library is
referenced inside the code by the simple name `soundbox`.
|
|
It is not expected that this library will be so big that multiple
packages make sense. Thus it should start only with the main package.
|
|
This only adds the `Soundbox` struct type which has a `net.HardwareAddr`
to identify it together with a constructor and a unit test.
|