diff --git a/.gitignore b/.gitignore index 5b90e79..bcbea36 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ go.work.sum # env file .env - +sample.mp3 +sample2.mp3 diff --git a/go.mod b/go.mod index 68c4650..9187fcc 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,12 @@ module player go 1.24.0 -require ( - github.com/gopxl/beep/v2 v2.1.1 - github.com/pion/opus v0.0.0-20250423145807-4aaa26789cff -) +require github.com/gopxl/beep/v2 v2.1.1 -require github.com/pkg/errors v0.9.1 // indirect +require ( + github.com/ebitengine/oto/v3 v3.3.2 // indirect + github.com/ebitengine/purego v0.8.0 // indirect + github.com/hajimehoshi/go-mp3 v0.3.4 // indirect + github.com/pkg/errors v0.9.1 // indirect + golang.org/x/sys v0.25.0 // indirect +) diff --git a/go.sum b/go.sum index 07686f7..ee864bc 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,22 @@ 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/ebitengine/oto/v3 v3.3.2 h1:VTWBsKX9eb+dXzaF4jEwQbs4yWIdXukJ0K40KgkpYlg= +github.com/ebitengine/oto/v3 v3.3.2/go.mod h1:MZeb/lwoC4DCOdiTIxYezrURTw7EvK/yF863+tmBI+U= +github.com/ebitengine/purego v0.8.0 h1:JbqvnEzRvPpxhCJzJJ2y0RbiZ8nyjccVUrSM3q+GvvE= +github.com/ebitengine/purego v0.8.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/gopxl/beep/v2 v2.1.1 h1:6FYIYMm2qPAdWkjX+7xwKrViS1x0Po5kDMdRkq8NVbU= github.com/gopxl/beep/v2 v2.1.1/go.mod h1:ZAm9TGQ9lvpoiFLd4zf5B1IuyxZhgRACMId1XJbaW0E= -github.com/pion/opus v0.0.0-20250423145807-4aaa26789cff h1:09dkuUpQF8/8YfotuU8hg/yYVBJBA6KrmhLIUq3N6W0= -github.com/pion/opus v0.0.0-20250423145807-4aaa26789cff/go.mod h1:MF0ECGlX1vw71XHaPvRqZoeFED6QTwvFL71vbsd29yY= +github.com/hajimehoshi/go-mp3 v0.3.4 h1:NUP7pBYH8OguP4diaTZ9wJbUbk3tC0KlfzsEpWmYj68= +github.com/hajimehoshi/go-mp3 v0.3.4/go.mod h1:fRtZraRFcWb0pu7ok0LqyFhCUrPeMsGRSVop0eemFmo= +github.com/hajimehoshi/oto/v2 v2.3.1/go.mod h1:seWLbgHH7AyUMYKfKYT9pg7PhUu9/SisyJvNTT+ASQo= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/sys v0.0.0-20220712014510-0a85c31ab51e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index c142a3d..98c37a0 100644 --- a/main.go +++ b/main.go @@ -1,21 +1,37 @@ package main import ( - "bytes" - "time" + "log" "os" + "time" - "github.com/pion/opus" - "github.com/pion/opus/oggreader" "github.com/gopxl/beep/v2" + "github.com/gopxl/beep/v2/mp3" "github.com/gopxl/beep/v2/speaker" - ) -func main () { - f, err := os.Open("./sample4.opus") +func main() { + // open mp3 file and report error if it happens + fileName := os.Args[1] + f, err := os.Open(fileName) if err != nil { log.Fatal(err) } + + streamer, format, err := mp3.Decode(f) + if err != nil { + log.Fatal(err) + } + + defer streamer.Close() + + speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)) + + done := make(chan bool) + speaker.Play(beep.Seq(streamer, beep.Callback(func() { + done <- true + }))) + + <-done } diff --git a/sample4.opus b/sample4.opus deleted file mode 100644 index 106167d..0000000 Binary files a/sample4.opus and /dev/null differ