From 80ab0f092242228604a959147c7dab7bfd4f838e Mon Sep 17 00:00:00 2001 From: Bastian Buehrig Date: Fri, 11 Jul 2025 14:39:01 +0200 Subject: [PATCH] feature/visual-ir (#3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bastian Bührig Reviewed-on: https://gitea.2bconsult.eu/bbu/valhallir-deconvolver/pulls/3 --- .gitignore | 23 ++++- go.mod | 8 ++ go.sum | 131 +++++++++++++++++++++++++++ main.go | 15 ++++ pkg/plot/plot.go | 211 ++++++++++++++++++++++++++++++++++++++++++++ testdata/ir.wav | Bin 2016044 -> 0 bytes testdata/ir_mpt.wav | Bin 2016044 -> 0 bytes 7 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 pkg/plot/plot.go delete mode 100644 testdata/ir.wav delete mode 100644 testdata/ir_mpt.wav diff --git a/.gitignore b/.gitignore index 8a605ec..5d93541 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,25 @@ ehthumbs.db .dagger/ # Environment files -.env \ No newline at end of file +.env + +# Test files - ignore all except recorded.wav and sweep.wav +testfiles/* +!testfiles/recorded.wav +!testfiles/sweep.wav + +# Generated IR files and plots +*.wav +*.flac +*.png +*.jpg +*.jpeg +*.tiff +*.tif +*.pdf +*.svg +*.eps + +# But allow the specific test files +!testfiles/recorded.wav +!testfiles/sweep.wav \ No newline at end of file diff --git a/go.mod b/go.mod index 91e8da0..c4a6245 100644 --- a/go.mod +++ b/go.mod @@ -10,18 +10,25 @@ require ( github.com/mjibson/go-dsp v0.0.0-20180508042940-11479a337f12 github.com/urfave/cli/v2 v2.27.7 gonum.org/v1/gonum v0.13.0 + gonum.org/v1/plot v0.10.1 ) require ( + git.sr.ht/~sbinet/gg v0.3.1 // indirect 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/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // 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-fonts/liberation v0.3.0 // indirect + github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-pdf/fpdf v0.6.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // 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 @@ -45,6 +52,7 @@ require ( 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/image v0.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 diff --git a/go.sum b/go.sum index b289d99..90287e9 100644 --- a/go.sum +++ b/go.sum @@ -1,32 +1,68 @@ dagger.io/dagger v0.18.12 h1:s7v8aHlzDUogZ/jW92lHC+gljCNRML+0mosfh13R4vs= dagger.io/dagger v0.18.12/go.mod h1:azlZ24m2br95t0jQHUBpL5SiafeqtVDLl1Itlq6GO+4= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1 h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/99designs/gqlgen v0.17.75 h1:GwHJsptXWLHeY7JO8b7YueUI4w9Pom6wJTICosDtQuI= github.com/99designs/gqlgen v0.17.75/go.mod h1:p7gbTpdnHyl70hmSpM8XG8GiKwmCv+T5zkdY8U8bLog= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 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/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= 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/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= 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/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= 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/riff v1.0.0 h1:d8iCGbDvox9BfLagY94fBynxSPHO80LmZCaOsmKxokA= 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/go.mod h1:mpe9qfwbScEbkd8uybLuIpTgHyrISw/OTuvjUW2iGtE= +github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/latin-modern v0.3.0 h1:CIDlMm0djMO3XIKHVz2na9lFKt3kdC/YCy7k7lLpyjE= +github.com/go-fonts/latin-modern v0.3.0/go.mod h1:ysEQXnuT/sCDOAONxC7ImeEDVINbltClhasMAqEtRK0= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.3.0 h1:3BI2iaE7R/s6uUUtzNCjo3QijJu3aS4wmrMgfSpYQ+8= +github.com/go-fonts/liberation v0.3.0/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= +github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= 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/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0 h1:MlgtGIfsdMEEQJr2le6b/HNr1ZlQwxyWr77r2aj2U/8= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= 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= @@ -37,18 +73,29 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5uk github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 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/go.mod h1:i/KKcxEWEO8Yyl11DYafRPKOPVYTrhxiTRigjtEEXZU= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= 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.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 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= @@ -57,6 +104,8 @@ github.com/vektah/gqlparser/v2 v2.5.28 h1:bIulcl3LF69ba6EiZVGD88y4MkM+Jxrf3P2MX8 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/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 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= @@ -93,18 +142,97 @@ go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9f 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/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= 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/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.6.0 h1:bR8b5okrPI3g/gyZakLZHeWxAR8Dn5CyxXv1hLH5g/4= +golang.org/x/image v0.6.0/go.mod h1:MXLdDR43H7cDJq5GEGXEVeeNhPgi+YYEQ2pC1byI1x0= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 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.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= 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/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1 h1:dnifSs43YJuNMDzB7v8wV64O4ABBHReuAVAoBxqBqS4= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= 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= @@ -115,3 +243,6 @@ google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9x 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= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/main.go b/main.go index fc11935..ea609b2 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "os" "valhallir-deconvolver/pkg/convolve" + "valhallir-deconvolver/pkg/plot" "valhallir-deconvolver/pkg/wav" "github.com/urfave/cli/v2" @@ -78,6 +79,10 @@ func main() { Usage: "Cut filter slope in dB/octave (12, 24, 36, 48, ...; default 12)", Value: 12, }, + &cli.BoolFlag{ + Name: "plot-ir", + Usage: "Plot the generated regular IR waveform to ir_plot.png", + }, }, Action: func(c *cli.Context) error { // Read sweep WAV file @@ -185,6 +190,16 @@ func main() { return err } + // Plot IR waveform if requested + if c.Bool("plot-ir") { + log.Printf("Plotting IR waveform to ir_plot.png...") + err := plot.PlotIR(ir, sampleRate, c.String("output")) + if err != nil { + return fmt.Errorf("failed to plot IR: %v", err) + } + log.Printf("IR plot saved as ir_plot.png") + } + // Generate MPT IR if requested if c.Bool("mpt") { log.Println("Generating minimum phase transform...") diff --git a/pkg/plot/plot.go b/pkg/plot/plot.go new file mode 100644 index 0000000..b43fc94 --- /dev/null +++ b/pkg/plot/plot.go @@ -0,0 +1,211 @@ +package plot + +import ( + "fmt" + "math" + "math/cmplx" + "os" + "path/filepath" + "strings" + + "image/png" + + "image/color" + + "github.com/mjibson/go-dsp/fft" + "gonum.org/v1/plot" + "gonum.org/v1/plot/font" + "gonum.org/v1/plot/plotter" + "gonum.org/v1/plot/vg" + "gonum.org/v1/plot/vg/draw" + "gonum.org/v1/plot/vg/vgimg" +) + +// PlotIR plots the frequency response (magnitude in dB vs. frequency in Hz) of the IR to a PNG file +func PlotIR(ir []float64, sampleRate int, irFileName string) error { + if len(ir) == 0 { + return nil + } + // Use only the first 8192 samples of the IR for plotting + windowLen := 8192 + if len(ir) < windowLen { + windowLen = len(ir) + } + irWin := ir[:windowLen] + X := fft.FFTReal(irWin) + // Plot from 20 Hz up to 20kHz, include every bin + var plotPts plotter.XYs + var minDb float64 = 1e9 + var maxDb float64 = -1e9 + var minDbFreq float64 + freqBins := windowLen / 2 + for i := 1; i < freqBins; i++ { + freq := float64(i) * float64(sampleRate) / float64(windowLen) + if freq < 20.0 { + continue + } + if freq > 20000.0 { + break + } + mag := cmplx.Abs(X[i]) + if mag < 1e-12 { + mag = 1e-12 + } + db := 20 * math.Log10(mag) + plotPts = append(plotPts, plotter.XY{X: freq, Y: db}) + if db < minDb { + minDb = db + minDbFreq = freq + } + if db > maxDb { + maxDb = db + } + } + fmt.Printf("[PlotIR] minDb in plotted range: %.2f dB at %.2f Hz\n", minDb, minDbFreq) + p := plot.New() + p.Title.Text = "IR Frequency Response (dB, 2048-sample window)" + p.X.Label.Text = "Frequency (Hz)" + p.Y.Label.Text = "Magnitude (dB)" + p.X.Scale = plot.LogScale{} + p.X.Tick.Marker = plot.TickerFunc(func(min, max float64) []plot.Tick { + ticks := []float64{20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000} + labels := []string{"20", "50", "100", "200", "500", "1k", "2k", "5k", "10k", "20k"} + var result []plot.Tick + for i, v := range ticks { + if v >= min && v <= max { + result = append(result, plot.Tick{Value: v, Label: labels[i]}) + } + } + return result + }) + line, err := plotter.NewLine(plotPts) + if err != nil { + return err + } + // Set line color to blue + line.Color = color.RGBA{R: 30, G: 100, B: 220, A: 255} + p.Add(line) + // Find minimum dB value between 20 Hz and 50 Hz for y-axis anchor + minDb2050 := 1e9 + for i := 1; i < freqBins; i++ { + freq := float64(i) * float64(sampleRate) / float64(windowLen) + if freq < 20.0 { + continue + } + if freq > 50.0 { + break + } + mag := cmplx.Abs(X[i]) + if mag < 1e-12 { + mag = 1e-12 + } + db := 20 * math.Log10(mag) + if db < minDb2050 { + minDb2050 = db + } + } + p.Y.Min = minDb2050 + p.Y.Max = math.Ceil(maxDb) + p.X.Min = 20.0 + p.X.Max = 20000.0 + + // --- Time-aligned waveform plot --- + p2 := plot.New() + p2.Title.Text = "IR Waveform (Time Aligned)" + p2.X.Label.Text = "Time (ms)" + p2.Y.Label.Text = "Amplitude" + // Prepare waveform data (only first 10ms) + var pts plotter.XYs + maxTimeMs := 10.0 + for i := 0; i < windowLen; i++ { + t := float64(i) * 1000.0 / float64(sampleRate) // ms + if t > maxTimeMs { + break + } + pts = append(pts, plotter.XY{X: t, Y: irWin[i]}) + } + wline, err := plotter.NewLine(pts) + if err != nil { + return err + } + wline.Color = color.RGBA{R: 30, G: 100, B: 220, A: 255} + p2.Add(wline) + p2.X.Min = 0 + p2.X.Max = maxTimeMs + // Y range auto + + // --- Compose both plots vertically --- + const width = 6 * vg.Inch + const height = 8 * vg.Inch // increased height for frequency diagram + img := vgimg.New(width, height+1*vg.Inch) // extra space for logo/headline + dc := draw.New(img) + + // Draw logo at the top left, headline to the right, IR filename below + logoPath := "assets/logo.png" + logoW := 2.4 * vg.Inch // doubled size + logoH := 0.68 * vg.Inch // doubled size + logoX := 0.3 * vg.Inch + logoY := height + 0.2*vg.Inch // move logo down by an additional ~10px + logoDrawn := false + f, err := os.Open(logoPath) + if err == nil { + defer f.Close() + logoImg, err := png.Decode(f) + if err == nil { + rect := vg.Rectangle{ + Min: vg.Point{X: logoX, Y: logoY}, + Max: vg.Point{X: logoX + logoW, Y: logoY + logoH}, + } + dc.DrawImage(rect, logoImg) + logoDrawn = true + } + } + // Draw headline (bold, larger) to the right of the logo + headline := "Valhallir Deconvolver IR Analysis" + fntSize := vg.Points(14) // Same as IR filename + if logoDrawn { + headlineX := logoX + logoW + 0.3*vg.Inch + headlineY := logoY + logoH - vg.Points(16) - vg.Points(5) // move headline up by ~10px + boldFont := plot.DefaultFont + boldFont.Weight = 3 // font.WeightBold is 3 in gonum/plot/font + boldFace := font.DefaultCache.Lookup(boldFont, fntSize) + dc.SetColor(color.Black) + dc.FillString(boldFace, vg.Point{X: headlineX, Y: headlineY}, headline) + // Draw IR filename below headline, left-aligned, standard font + fileLabel := "IR-File: " + filepath.Base(irFileName) + fileY := headlineY - fntSize - vg.Points(6) + fileFace := font.DefaultCache.Lookup(plot.DefaultFont, vg.Points(10)) + dc.FillString(fileFace, vg.Point{X: headlineX, Y: fileY}, fileLabel) + } + + // Custom tile arrangement: frequency diagram gets more height, waveform gets less + tiles := draw.Tiles{ + Rows: 2, + Cols: 1, + PadX: vg.Millimeter, + PadY: 20 * vg.Millimeter, // more space between plots to emphasize frequency diagram + PadTop: vg.Points(15), // move diagrams down by ~20px + } + + // Offset the plots down by 1 inch to make space for logo/headline + imgPlots := vgimg.New(width, height) + dcPlots := draw.New(imgPlots) + canvases := plot.Align([][]*plot.Plot{{p}, {p2}}, tiles, dcPlots) + p.Draw(canvases[0][0]) + p2.Draw(canvases[1][0]) + dc.DrawImage(vg.Rectangle{Min: vg.Point{X: 0, Y: 0}, Max: vg.Point{X: width, Y: height}}, imgPlots.Image()) + + // Save as PNG in the same directory as the IR file + irDir := filepath.Dir(irFileName) + irBase := filepath.Base(irFileName) + irNameWithoutExt := strings.TrimSuffix(irBase, filepath.Ext(irBase)) + plotFileName := filepath.Join(irDir, irNameWithoutExt+".png") + + f, err = os.Create(plotFileName) + if err != nil { + return err + } + defer f.Close() + _, err = vgimg.PngCanvas{Canvas: img}.WriteTo(f) + return err +} diff --git a/testdata/ir.wav b/testdata/ir.wav deleted file mode 100644 index c1f3c2c2b7c286e21760d61f3058cf21f7e66530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2016044 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