Decode mp3 base on https://github.com/xxjwxc/gomp3
- The first need Go installed (version 1.15+ is required), then you can use the below Go command to install gomp3.
$ go get -u github.com/xxjwxc/gomp3
- Import it in your code:
import "github.com/xxjwxc/gomp3"
Decode the whole mp3 and play.
package main
import (
"io/ioutil"
"log"
"github.com/hajimehoshi/oto"
"github.com/xxjwxc/gomp3"
"github.com/xxjwxc/public/mylog"
)
func main() {
var err error
var file []byte
if file, err = ioutil.ReadFile("./song.mp3"); err != nil {
mylog.Error(err)
}
dec, err := gomp3.NewMp3(file)
if err != nil {
mylog.Error(err)
}
ioutil.WriteFile("song.pcm", dec.PcmData, 0644) // topcm
data, _ := dec.ToWav(1)
ioutil.WriteFile("song.wav", data, 0644) // towav
// play
var context *oto.Context
if context, err = oto.NewContext(dec.SampleRate, dec.Channels, 2, 1024); err != nil {
log.Fatal(err)
}
var player = context.NewPlayer()
player.Write(dec.PcmData)
if err = player.Close(); err != nil {
log.Fatal(err)
}
// pcm to mp3
var err error
var file []byte
if file, err = ioutil.ReadFile("./song.pcm"); err != nil {
t.Error(err)
}
out, _ := PcmToMp3(file, 1, 16000, 9)
ioutil.WriteFile("out.mp3", out, 0644)
}