Compare commits
3 Commits
05f7bd2b58
...
eae708151d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eae708151d | ||
|
|
ac678f2aa8 | ||
|
|
0668469fb1 |
14
CHANGELOG.md
Normal file
14
CHANGELOG.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [v1.0.0] - 2024-06-09
|
||||||
|
### Added
|
||||||
|
- Initial public release: Valhallir Deconvolver
|
||||||
|
- Fast FFT-based deconvolution for IR extraction
|
||||||
|
- Automatic input conversion: accepts any WAV sample rate, bit depth, or channel count
|
||||||
|
- Output IR in user-selectable sample rate and bit depth (WAV only)
|
||||||
|
- Optional minimum phase transform (MPT) output
|
||||||
|
- Silence trimming and normalization
|
||||||
|
- Optional output IR length control (`--length-ms`)
|
||||||
|
- Mono output (stereo/multichannel inputs are averaged)
|
||||||
|
- CLI with urfave/cli, version flag, and detailed logging
|
||||||
|
- Full documentation and usage examples in README
|
||||||
66
README.md
66
README.md
@@ -1,4 +1,4 @@
|
|||||||
# Valhallir Convoluter
|
# Valhallir Deconvolver
|
||||||
|
|
||||||
A CLI tool for processing WAV files to generate impulse responses (IR) from sweep and recorded WAV files, designed for guitar speaker IR creation.
|
A CLI tool for processing WAV files to generate impulse responses (IR) from sweep and recorded WAV files, designed for guitar speaker IR creation.
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ git clone <repository-url>
|
|||||||
cd valhallir-convoluter
|
cd valhallir-convoluter
|
||||||
|
|
||||||
# Build the application
|
# Build the application
|
||||||
go build -o valhallir-convoluter
|
go build -o valhallir-deconvolver
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -32,7 +32,7 @@ go build -o valhallir-convoluter
|
|||||||
Generate a standard impulse response from sweep and recorded files (any WAV format):
|
Generate a standard impulse response from sweep and recorded files (any WAV format):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./valhallir-convoluter --sweep sweep.wav --recorded recorded.wav --output ir.wav
|
./valhallir-deconvolver --sweep sweep.wav --recorded recorded.wav --output ir.wav
|
||||||
```
|
```
|
||||||
|
|
||||||
### With Minimum Phase Transform
|
### With Minimum Phase Transform
|
||||||
@@ -40,7 +40,7 @@ Generate a standard impulse response from sweep and recorded files (any WAV form
|
|||||||
Generate both regular and minimum phase IRs:
|
Generate both regular and minimum phase IRs:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./valhallir-convoluter --sweep sweep.wav --recorded recorded.wav --output ir.wav --mpt
|
./valhallir-deconvolver --sweep sweep.wav --recorded recorded.wav --output ir.wav --mpt
|
||||||
```
|
```
|
||||||
|
|
||||||
This creates:
|
This creates:
|
||||||
@@ -52,7 +52,7 @@ This creates:
|
|||||||
Trim or zero-pad the output IR to a specific length (in milliseconds):
|
Trim or zero-pad the output IR to a specific length (in milliseconds):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./valhallir-convoluter --sweep sweep.wav --recorded recorded.wav --output ir.wav --length-ms 100
|
./valhallir-deconvolver --sweep sweep.wav --recorded recorded.wav --output ir.wav --length-ms 100
|
||||||
```
|
```
|
||||||
|
|
||||||
This will ensure the output IR is exactly 100 ms long (trimming or zero-padding as needed).
|
This will ensure the output IR is exactly 100 ms long (trimming or zero-padding as needed).
|
||||||
@@ -63,7 +63,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
# 44kHz 16-bit (CD quality)
|
# 44kHz 16-bit (CD quality)
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep sweep.wav \
|
--sweep sweep.wav \
|
||||||
--recorded recorded.wav \
|
--recorded recorded.wav \
|
||||||
--output ir_cd.wav \
|
--output ir_cd.wav \
|
||||||
@@ -71,7 +71,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
--bit-depth 16
|
--bit-depth 16
|
||||||
|
|
||||||
# 48kHz 32-bit (studio quality)
|
# 48kHz 32-bit (studio quality)
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep sweep.wav \
|
--sweep sweep.wav \
|
||||||
--recorded recorded.wav \
|
--recorded recorded.wav \
|
||||||
--output ir_studio.wav \
|
--output ir_studio.wav \
|
||||||
@@ -80,7 +80,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
--mpt
|
--mpt
|
||||||
|
|
||||||
# 96kHz 24-bit (high resolution)
|
# 96kHz 24-bit (high resolution)
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep sweep.wav \
|
--sweep sweep.wav \
|
||||||
--recorded recorded.wav \
|
--recorded recorded.wav \
|
||||||
--output ir_hires.wav \
|
--output ir_hires.wav \
|
||||||
@@ -91,7 +91,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
### Advanced Options
|
### Advanced Options
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep sweep.wav \
|
--sweep sweep.wav \
|
||||||
--recorded recorded.wav \
|
--recorded recorded.wav \
|
||||||
--output ir.wav \
|
--output ir.wav \
|
||||||
@@ -172,7 +172,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
### Guitar Cabinet IR (CD Quality)
|
### Guitar Cabinet IR (CD Quality)
|
||||||
```sh
|
```sh
|
||||||
# Generate IR from guitar cab sweep and recording (any WAV format), 50ms length
|
# Generate IR from guitar cab sweep and recording (any WAV format), 50ms length
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep guitar_cab_sweep.wav \
|
--sweep guitar_cab_sweep.wav \
|
||||||
--recorded guitar_cab_recorded.wav \
|
--recorded guitar_cab_recorded.wav \
|
||||||
--output cab_ir_cd.wav \
|
--output cab_ir_cd.wav \
|
||||||
@@ -185,7 +185,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
### Room Acoustics IR (Studio Quality)
|
### Room Acoustics IR (Studio Quality)
|
||||||
```sh
|
```sh
|
||||||
# Generate room impulse response
|
# Generate room impulse response
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep room_sweep.wav \
|
--sweep room_sweep.wav \
|
||||||
--recorded room_recorded.wav \
|
--recorded room_recorded.wav \
|
||||||
--output room_ir_studio.wav \
|
--output room_ir_studio.wav \
|
||||||
@@ -196,7 +196,7 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
### High-Resolution IR (Mastering)
|
### High-Resolution IR (Mastering)
|
||||||
```sh
|
```sh
|
||||||
# Generate high-resolution IR for mastering
|
# Generate high-resolution IR for mastering
|
||||||
./valhallir-convoluter \
|
./valhallir-deconvolver \
|
||||||
--sweep mastering_sweep.wav \
|
--sweep mastering_sweep.wav \
|
||||||
--recorded mastering_recorded.wav \
|
--recorded mastering_recorded.wav \
|
||||||
--output mastering_ir.wav \
|
--output mastering_ir.wav \
|
||||||
@@ -206,13 +206,39 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
--mpt
|
--mpt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## CI/CD & Multi-Platform Builds
|
||||||
|
|
||||||
|
This project includes a Dagger pipeline for building binaries for multiple platforms:
|
||||||
|
- macOS ARM64 (darwin/arm64)
|
||||||
|
- macOS AMD64 (darwin/amd64)
|
||||||
|
- Windows AMD64 (windows/amd64)
|
||||||
|
- Linux AMD64 (linux/amd64)
|
||||||
|
|
||||||
|
The pipeline is defined in [`ci/dagger.go`](./ci/dagger.go). It outputs binaries named `valhallir-deconvolver-<os>-<arch>` in the `dist/` directory.
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
1. Install the Dagger Go SDK:
|
||||||
|
```sh
|
||||||
|
go install dagger.io/dagger@latest
|
||||||
|
go mod tidy
|
||||||
|
```
|
||||||
|
2. Run the pipeline:
|
||||||
|
```sh
|
||||||
|
go run ci/dagger.go
|
||||||
|
```
|
||||||
|
|
||||||
|
### Troubleshooting Dagger
|
||||||
|
- If you see `could not import dagger.io/dagger`, make sure you have installed the Dagger Go SDK and run `go mod tidy`.
|
||||||
|
- The pipeline requires Docker or a compatible container runtime.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### Common Issues
|
### Common Issues
|
||||||
|
|
||||||
**"File is not a valid WAV file" error**
|
**Input file errors**
|
||||||
- Check that files are uncompressed WAV format
|
- Input files must be uncompressed WAV format. MP3, FLAC, or other compressed formats are not supported.
|
||||||
- Avoid MP3, FLAC, or other compressed formats
|
- Input sample rate, bit depth, and channel count are automatically converted (no need to preprocess).
|
||||||
|
|
||||||
**"Invalid sample rate" error (output)**
|
**"Invalid sample rate" error (output)**
|
||||||
- Use only supported output sample rates: 44100, 48000, 88200, 96000
|
- Use only supported output sample rates: 44100, 48000, 88200, 96000
|
||||||
@@ -222,6 +248,10 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
- Use only supported output bit depths: 16, 24, 32
|
- Use only supported output bit depths: 16, 24, 32
|
||||||
- Check the `--bit-depth` flag value
|
- Check the `--bit-depth` flag value
|
||||||
|
|
||||||
|
**Dagger pipeline errors**
|
||||||
|
- If you see `could not import dagger.io/dagger`, install the Dagger Go SDK and run `go mod tidy`.
|
||||||
|
- Make sure Docker or a compatible container runtime is running.
|
||||||
|
|
||||||
### Performance
|
### Performance
|
||||||
- Processing time depends on file length
|
- Processing time depends on file length
|
||||||
- FFT-based deconvolution is much faster than time-domain methods
|
- FFT-based deconvolution is much faster than time-domain methods
|
||||||
@@ -234,4 +264,8 @@ Generate IRs in different sample rates and bit depths:
|
|||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
[Add contribution guidelines here]
|
[Add contribution guidelines here]
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
See [CHANGELOG.md](./CHANGELOG.md) for version history and details. Current version: v1.0.0
|
||||||
54
ci/dagger.go
Normal file
54
ci/dagger.go
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
// Dagger pipeline for multi-platform builds.
|
||||||
|
// Requires: go install dagger.io/dagger@latest && go mod tidy
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"dagger.io/dagger"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
platforms := []struct {
|
||||||
|
OS string
|
||||||
|
Arch string
|
||||||
|
}{
|
||||||
|
{"darwin", "arm64"},
|
||||||
|
{"darwin", "amd64"},
|
||||||
|
{"windows", "amd64"},
|
||||||
|
{"linux", "amd64"},
|
||||||
|
}
|
||||||
|
|
||||||
|
src := client.Host().Directory(".")
|
||||||
|
|
||||||
|
for _, p := range platforms {
|
||||||
|
binName := fmt.Sprintf("valhallir-deconvolver-%s-%s", p.OS, p.Arch)
|
||||||
|
if p.OS == "windows" {
|
||||||
|
binName += ".exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
ctr := client.Container().From("golang:1.24.5").
|
||||||
|
WithMountedDirectory("/src", src).
|
||||||
|
WithWorkdir("/src").
|
||||||
|
WithEnvVariable("GOOS", p.OS).
|
||||||
|
WithEnvVariable("GOARCH", p.Arch).
|
||||||
|
WithExec([]string{"go", "build", "-o", binName, "."})
|
||||||
|
|
||||||
|
// Export the binary from the container to the host's dist/ directory
|
||||||
|
outPath := fmt.Sprintf("dist/%s", binName)
|
||||||
|
_, err := ctr.File(binName).Export(ctx, outPath)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("export failed for %s/%s: %v", p.OS, p.Arch, err))
|
||||||
|
}
|
||||||
|
fmt.Printf("Built and exported %s\n", outPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
dist/valhallir-deconvolver-darwin-amd64
vendored
Executable file
BIN
dist/valhallir-deconvolver-darwin-amd64
vendored
Executable file
Binary file not shown.
Binary file not shown.
BIN
dist/valhallir-deconvolver-linux-amd64
vendored
Executable file
BIN
dist/valhallir-deconvolver-linux-amd64
vendored
Executable file
Binary file not shown.
BIN
dist/valhallir-deconvolver-windows-amd64.exe
vendored
Executable file
BIN
dist/valhallir-deconvolver-windows-amd64.exe
vendored
Executable file
Binary file not shown.
60
go.mod
60
go.mod
@@ -1,15 +1,55 @@
|
|||||||
module valhallir-convoluter
|
module valhallir-deconvolver
|
||||||
|
|
||||||
go 1.24.1
|
go 1.24.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
|
dagger.io/dagger v0.18.12
|
||||||
github.com/go-audio/audio v1.0.0 // indirect
|
github.com/go-audio/audio v1.0.0
|
||||||
github.com/go-audio/riff v1.0.0 // indirect
|
github.com/go-audio/wav v1.1.0
|
||||||
github.com/go-audio/wav v1.1.0 // indirect
|
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12
|
||||||
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12 // indirect
|
github.com/urfave/cli/v2 v2.27.7
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
gonum.org/v1/gonum v0.13.0
|
||||||
github.com/urfave/cli/v2 v2.27.7 // indirect
|
)
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
|
||||||
gonum.org/v1/gonum v0.13.0 // indirect
|
require (
|
||||||
|
github.com/99designs/gqlgen v0.17.75 // indirect
|
||||||
|
github.com/Khan/genqlient v0.8.1 // indirect
|
||||||
|
github.com/adrg/xdg v0.5.3 // indirect
|
||||||
|
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
|
||||||
|
github.com/go-audio/riff v1.0.0 // indirect
|
||||||
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
|
github.com/sosodev/duration v1.3.1 // indirect
|
||||||
|
github.com/vektah/gqlparser/v2 v2.5.28 // indirect
|
||||||
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
|
go.opentelemetry.io/otel v1.36.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/log v0.12.2 // indirect
|
||||||
|
go.opentelemetry.io/otel/metric v1.36.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk v1.36.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk/log v0.12.2 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/trace v1.36.0 // indirect
|
||||||
|
go.opentelemetry.io/proto/otlp v1.6.0 // indirect
|
||||||
|
golang.org/x/net v0.41.0 // indirect
|
||||||
|
golang.org/x/sync v0.15.0 // indirect
|
||||||
|
golang.org/x/sys v0.33.0 // indirect
|
||||||
|
golang.org/x/text v0.26.0 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
|
||||||
|
google.golang.org/grpc v1.73.0 // indirect
|
||||||
|
google.golang.org/protobuf v1.36.6 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
97
go.sum
97
go.sum
@@ -1,18 +1,115 @@
|
|||||||
|
dagger.io/dagger v0.18.12 h1:s7v8aHlzDUogZ/jW92lHC+gljCNRML+0mosfh13R4vs=
|
||||||
|
dagger.io/dagger v0.18.12/go.mod h1:azlZ24m2br95t0jQHUBpL5SiafeqtVDLl1Itlq6GO+4=
|
||||||
|
github.com/99designs/gqlgen v0.17.75 h1:GwHJsptXWLHeY7JO8b7YueUI4w9Pom6wJTICosDtQuI=
|
||||||
|
github.com/99designs/gqlgen v0.17.75/go.mod h1:p7gbTpdnHyl70hmSpM8XG8GiKwmCv+T5zkdY8U8bLog=
|
||||||
|
github.com/Khan/genqlient v0.8.1 h1:wtOCc8N9rNynRLXN3k3CnfzheCUNKBcvXmVv5zt6WCs=
|
||||||
|
github.com/Khan/genqlient v0.8.1/go.mod h1:R2G6DzjBvCbhjsEajfRjbWdVglSH/73kSivC9TLWVjU=
|
||||||
|
github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78=
|
||||||
|
github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ=
|
||||||
|
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
|
||||||
|
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||||
|
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||||
|
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
|
github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/go-audio/audio v1.0.0 h1:zS9vebldgbQqktK4H0lUqWrG8P0NxCJVqcj7ZpNnwd4=
|
github.com/go-audio/audio v1.0.0 h1:zS9vebldgbQqktK4H0lUqWrG8P0NxCJVqcj7ZpNnwd4=
|
||||||
github.com/go-audio/audio v1.0.0/go.mod h1:6uAu0+H2lHkwdGsAY+j2wHPNPpPoeg5AaEFh9FlA+Zs=
|
github.com/go-audio/audio v1.0.0/go.mod h1:6uAu0+H2lHkwdGsAY+j2wHPNPpPoeg5AaEFh9FlA+Zs=
|
||||||
github.com/go-audio/riff v1.0.0 h1:d8iCGbDvox9BfLagY94fBynxSPHO80LmZCaOsmKxokA=
|
github.com/go-audio/riff v1.0.0 h1:d8iCGbDvox9BfLagY94fBynxSPHO80LmZCaOsmKxokA=
|
||||||
github.com/go-audio/riff v1.0.0/go.mod h1:l3cQwc85y79NQFCRB7TiPoNiaijp6q8Z0Uv38rVG498=
|
github.com/go-audio/riff v1.0.0/go.mod h1:l3cQwc85y79NQFCRB7TiPoNiaijp6q8Z0Uv38rVG498=
|
||||||
github.com/go-audio/wav v1.1.0 h1:jQgLtbqBzY7G+BM8fXF7AHUk1uHUviWS4X39d5rsL2g=
|
github.com/go-audio/wav v1.1.0 h1:jQgLtbqBzY7G+BM8fXF7AHUk1uHUviWS4X39d5rsL2g=
|
||||||
github.com/go-audio/wav v1.1.0/go.mod h1:mpe9qfwbScEbkd8uybLuIpTgHyrISw/OTuvjUW2iGtE=
|
github.com/go-audio/wav v1.1.0/go.mod h1:mpe9qfwbScEbkd8uybLuIpTgHyrISw/OTuvjUW2iGtE=
|
||||||
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
|
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||||
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
|
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||||
|
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||||
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12 h1:dd7vnTDfjtwCETZDrRe+GPYNLA1jBtbZeyfyE8eZCyk=
|
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12 h1:dd7vnTDfjtwCETZDrRe+GPYNLA1jBtbZeyfyE8eZCyk=
|
||||||
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12/go.mod h1:i/KKcxEWEO8Yyl11DYafRPKOPVYTrhxiTRigjtEEXZU=
|
github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12/go.mod h1:i/KKcxEWEO8Yyl11DYafRPKOPVYTrhxiTRigjtEEXZU=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
|
||||||
|
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
|
||||||
|
github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4=
|
||||||
|
github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg=
|
||||||
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU=
|
github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU=
|
||||||
github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4=
|
github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4=
|
||||||
|
github.com/vektah/gqlparser/v2 v2.5.28 h1:bIulcl3LF69ba6EiZVGD88y4MkM+Jxrf3P2MX8xLRkY=
|
||||||
|
github.com/vektah/gqlparser/v2 v2.5.28/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo=
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||||
|
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
|
||||||
|
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2/go.mod h1:DvPtKE63knkDVP88qpatBj81JxN+w1bqfVbsbCbj1WY=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 h1:tPLwQlXbJ8NSOfZc4OkgU5h2A38M4c9kfHSVc4PFQGs=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2/go.mod h1:QTnxBwT/1rBIgAG1goq6xMydfYOBKU6KTiYF4fp5zL8=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 h1:j7ZSD+5yn+lo3sGV69nW04rRR0jhYnBwjuX3r0HvnK0=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0/go.mod h1:WXbYJTUaZXAbYd8lbgGuvih0yuCfOFC5RJoYnoLcGz8=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 h1:t/Qur3vKSkUCcDVaSumWF2PKHt85pc7fRvFuoVT8qFU=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0/go.mod h1:Rl61tySSdcOJWoEgYZVtmnKdA0GeKrSqkHC1t+91CH8=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 h1:IJFEoHiytixx8cMiVAO+GmHR6Frwu+u5Ur8njpFO6Ac=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0/go.mod h1:3rHrKNtLIoS0oZwkY2vxi+oJcwFRWdtUyRII+so45p8=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 h1:9kV11HXBHZAvuPUZxmMWrH8hZn/6UnHX4K0mu36vNsU=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0/go.mod h1:JyA0FHXe22E1NeNiHmVp7kFHglnexDQ7uRWDiiJ1hKQ=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 h1:cMyu9O88joYEaI47CnQkxO1XZdpoTF9fEnW2duIddhw=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0/go.mod h1:6Am3rn7P9TVVeXYG+wtcGE7IE1tsQ+bP3AuWcKt/gOI=
|
||||||
|
go.opentelemetry.io/otel/log v0.12.2 h1:yob9JVHn2ZY24byZeaXpTVoPS6l+UrrxmxmPKohXTwc=
|
||||||
|
go.opentelemetry.io/otel/log v0.12.2/go.mod h1:ShIItIxSYxufUMt+1H5a2wbckGli3/iCfuEbVZi/98E=
|
||||||
|
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
|
||||||
|
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
|
||||||
|
go.opentelemetry.io/otel/sdk/log v0.12.2 h1:yNoETvTByVKi7wHvYS6HMcZrN5hFLD7I++1xIZ/k6W0=
|
||||||
|
go.opentelemetry.io/otel/sdk/log v0.12.2/go.mod h1:DcpdmUXHJgSqN/dh+XMWa7Vf89u9ap0/AAk/XGLnEzY=
|
||||||
|
go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc h1:uqxdywfHqqCl6LmZzI3pUnXT1RGFYyUgxj0AkWPFxi0=
|
||||||
|
go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc/go.mod h1:TY/N/FT7dmFrP/r5ym3g0yysP1DefqGpAZr4f82P0dE=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
|
||||||
|
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
|
||||||
|
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc=
|
||||||
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
||||||
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||||
|
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
|
||||||
|
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
|
||||||
|
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
|
||||||
|
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
|
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||||
|
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
|
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
|
||||||
|
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
|
||||||
gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM=
|
gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM=
|
||||||
gonum.org/v1/gonum v0.13.0/go.mod h1:/WPYRckkfWrhWefxyYTfrTtQR0KH4iyHNuzxqXAKyAU=
|
gonum.org/v1/gonum v0.13.0/go.mod h1:/WPYRckkfWrhWefxyYTfrTtQR0KH4iyHNuzxqXAKyAU=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 h1:Kog3KlB4xevJlAcbbbzPfRG0+X9fdoGM+UBRKVz6Wr0=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237/go.mod h1:ezi0AVyMKDWy5xAncvjLWH7UcLBB5n7y2fQ8MzjJcto=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||||
|
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
|
||||||
|
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
|
||||||
|
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||||
|
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
9
main.go
9
main.go
@@ -5,16 +5,17 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"valhallir-convoluter/pkg/convolve"
|
"valhallir-deconvolver/pkg/convolve"
|
||||||
"valhallir-convoluter/pkg/wav"
|
"valhallir-deconvolver/pkg/wav"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
app := &cli.App{
|
app := &cli.App{
|
||||||
Name: "valhallir-convoluter",
|
Name: "valhallir-deconvolver",
|
||||||
Usage: "Convolve sweep and recorded WAV files to create impulse responses",
|
Usage: "Deconvolve sweep and recorded WAV files to create impulse responses",
|
||||||
|
Version: "v1.0.0",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "sweep",
|
Name: "sweep",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"valhallir-convoluter/pkg/convolve"
|
"valhallir-deconvolver/pkg/convolve"
|
||||||
|
|
||||||
"github.com/go-audio/audio"
|
"github.com/go-audio/audio"
|
||||||
"github.com/go-audio/wav"
|
"github.com/go-audio/wav"
|
||||||
|
|||||||
Reference in New Issue
Block a user