Repository navigation
Releases: zoomoid/waveman2
Release list
v1.3.0
This update includes two new core plugins, wave and sweep. Both were previously (sort of) included in the line plugin and enabled via flags.
Their results were however always a bit hacky and looked a bit bad. Their painting logic has been cleaned up, in particular the cubic bezier curve control point interpolation algorithm has been revised for the sweep plugin.
Sweep
Wave
- feat: add
waveandsweepto core/v1 plugin group. - fix(transformer): plank taper window produces zero samples in the middle due to wrong bound checks
Full Changelog: v1.2.0...v1.3.0
v1.2.0
v1.2.0
This update includes some new features for the transformer stage and changes up the plugin architecture to allow for more modular extension.
- feat(transformer): samples can be clamped, using
--clamp-lowand--clamp-high - feat(transformer): windowing functions for attenuating samples at the start and end of a track. This helps with undersampling peaks
- feat(transformer)!: normalization is now optional. Running in batch mode screws with the levels of all tracks as a whole. The old behaviour can be recreated by using
--normalize. - feat(infra): plugins are now self-contained in a group. They are also exposed by an interface.
- feat(cmd)!: plugins are no longer enabled by flags, but attach a subcommand to the root
wavemancommand, e.g.,waveman --boxis nowwaveman box. This also makes the manual mutual exclusion code obsolete. - feat(plugin/line): add mirroring -- For an example, just see the waveform at the top of the README
- fix(plugin/line): inverted now behaves as you would expect: if not specified, the 0-axis is at the bottom of the frame (whereas it was at the top previously); specifying
--invertedwill reproduce the previous behaviour visually (under the hood, the CSS transforms have been exchanged for explicit coordinate computation) - ci: removed cosign and upgraded actions
Decoder abstractions
We experimented with exchanging the (really slow) go-mp3 dependency for other MP3 decoder backends. This proved to be more challenging than expected: the next best implementation uses CGO and https://github.com/lieff/minimp3 to provide bindings to a single-header MP3 decoder library. It's instrumentation is not particularly fit for our use-case. Also, the Go bindings don't implement seeking which we heavily rely upon (though the underlying C library does). We looked at some Rust bindings of the same C library and considered adapting that to Go, but kept running into issues when trying to pass in data structures and heap-allocated stuff due to Go's memory layout constraints and particularly, the constraints for CGO.
We have decided to postpone this implementation indefinitely until there's more reason for it: currently go-mp3 still works fine if you can spare a couple of seconds. MP3 decoding is messed up anyways...
Full Changelog: v1.1.2...v1.2.0
v1.1.2
v1.1.1
v1.1.0
- chore: use Apache 2.0 as License for the project
- fix: missing version flag for the binary
- docs: auto-generated markdown command docs from cobra/docs.
Full Changelog: v1.0.4...v1.1.0
v1.0.4
- Fix CI cosign issue to publish the tagged release correctly
Full Changelog: v1.0.3...v1.0.4
v1.0.3
v1.0.2
- Adds defaulting for stroke width and stroke color
Full Changelog: v1.0.1...v1.0.2
v1.0.1
This change reverts the usage of go mod v2, which meant that importing waveman from other Golang projects required the inclusion of a
version number that was not consistent with the overall project's version.
Full Changelog: v1.0.0...v1.0.1
v1.0.0
waveman2 1.0.0
This is the v1.0.0 release of the reworked waveman2. For the older version, see https://github.com/zoomoid/waveman
Waveman2 is out, rewritten as a single binary for easy CLI usage, extensibility by means of plugins, a lot of reusable code (e.g. for implementing a webserver that renders the waveforms) in well-grouped packages overall better experience, both UX and DX.
Select the binaries you need from the list below and unpack them to a directory in your $PATH to run waveman from your CLI.
Otherwise, you can also run the program in a pre-built Docker container:
# MP3_DIR="<directory>"
docker run -v ${MP3_DIR} ghcr.io/zoomoid/waveman2:v1.0.0 waveman2 ...