Skip to content

Commit

Permalink
replace audio parser with the parser of Ebiten
Browse files Browse the repository at this point in the history
  • Loading branch information
qlli committed Aug 17, 2024
1 parent 3df776b commit 175be7a
Show file tree
Hide file tree
Showing 10 changed files with 72 additions and 23 deletions.
67 changes: 51 additions & 16 deletions audio.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,13 @@ package spx

import (
"io"
"strings"
"sync"

"github.com/qiniu/audio/convert"
_ "github.com/qiniu/audio/mp3" // support mp3
_ "github.com/qiniu/audio/wav" // support wav/pcm
_ "github.com/qiniu/audio/wav/adpcm" // support wav/adpcm

"github.com/hajimehoshi/ebiten/v2/audio"

qaudio "github.com/qiniu/audio"
"github.com/hajimehoshi/ebiten/v2/audio/mp3"
"github.com/hajimehoshi/ebiten/v2/audio/vorbis"
"github.com/hajimehoshi/ebiten/v2/audio/wav"
)

// -------------------------------------------------------------------------------------
Expand Down Expand Up @@ -111,6 +108,17 @@ func (p *soundMgr) init(g *Game) {
p.players = make(map[*soundPlayer]chan bool)
p.g = g
p.audios = make(map[string]Sound)

// media formats supported
formats = make([]format, 4)
formats[0].name = "mp3"
formats[0].magic = "ID3"
formats[1].name = "mp3"
formats[1].magic = "\xff\xfb"
formats[2].name = "ogg"
formats[2].magic = "OggS"
formats[3].name = "wav"
formats[3].magic = "RIFF????WAVE"
}

func (p *soundMgr) update() {
Expand Down Expand Up @@ -188,27 +196,54 @@ func (p *soundMgr) playContinue(media Sound, wait, loop bool) (err error) {
return
}

type format struct {
name, magic string
}

var formats []format

func (p *soundMgr) play(media Sound, wait, loop bool) (err error) {
source, err := p.g.fs.Open(media.Path)
if err != nil {
panic(err)
}

audioContext := p.audioContext
d, _, err := qaudio.Decode(newReadSeeker(source))
if err != nil {
source.Close()
return
sp := &soundPlayer{media: media, loop: loop}
parts := strings.Split(media.Path, ".")
l := len(parts)
ext := ""
if l >= 1 {
ext = parts[l-1]
}

d = convert.ToStereo16(d)
d = convert.Resample(d, audioContext.SampleRate())
switch ext {
case "mp3":
var ms *mp3.Stream
ms, err = mp3.DecodeF32(source)
if err != nil {
return err
}
sp.Player, err = audioContext.NewPlayerF32(ms)
case "ogg":
var vs *vorbis.Stream
vs, err = vorbis.DecodeF32(source)
if err != nil {
return err
}
sp.Player, err = audioContext.NewPlayerF32(vs)
case "wav":
var ws *wav.Stream
ws, err = wav.DecodeF32(source)
if err != nil {
return err
}
sp.Player, err = audioContext.NewPlayerF32(ws)
}

sp := &soundPlayer{media: media, loop: loop}
sp.Player, err = audioContext.NewPlayer(&readCloser{d, source})
if err != nil {
source.Close()
return
return err
}

var done chan bool
Expand Down
10 changes: 6 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.18
require (
github.com/ajstarks/svgo v0.0.0-20210927141636-6d70534b1098
github.com/goplus/canvas v0.1.0
github.com/hajimehoshi/ebiten/v2 v2.7.8
github.com/hajimehoshi/ebiten/v2 v2.8.0-alpha.3
github.com/pkg/errors v0.9.1
github.com/qiniu/audio v0.2.1
github.com/qiniu/x v1.13.10
Expand All @@ -18,14 +18,16 @@ require (
require (
github.com/ebitengine/gomobile v0.0.0-20240518074828-e86332849895 // indirect
github.com/ebitengine/hideconsole v1.0.0 // indirect
github.com/ebitengine/oto/v3 v3.2.0 // indirect
github.com/ebitengine/purego v0.7.0 // indirect
github.com/ebitengine/oto/v3 v3.3.0-alpha.3 // indirect
github.com/ebitengine/purego v0.8.0-alpha.3 // indirect
github.com/esimov/stackblur-go v1.0.1-0.20190121110005-00e727e3c7a9 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/hajimehoshi/go-mp3 v0.3.4 // indirect
github.com/jezek/xgb v1.1.1 // indirect
github.com/jfreymuth/oggvorbis v1.0.5 // indirect
github.com/jfreymuth/vorbis v1.0.2 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/sys v0.22.0 // indirect
golang.org/x/text v0.16.0 // indirect
)

Expand Down
16 changes: 14 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,33 @@ github.com/ebitengine/hideconsole v1.0.0 h1:5J4U0kXF+pv/DhiXt5/lTz0eO5ogJ1iXb8Yj
github.com/ebitengine/hideconsole v1.0.0/go.mod h1:hTTBTvVYWKBuxPr7peweneWdkUwEuHuB3C1R/ielR1A=
github.com/ebitengine/oto/v3 v3.2.0 h1:FuggTJTSI3/3hEYwZEIN0CZVXYT29ZOdCu+z/f4QjTw=
github.com/ebitengine/oto/v3 v3.2.0/go.mod h1:dOKXShvy1EQbIXhXPFcKLargdnFqH0RjptecvyAxhyw=
github.com/ebitengine/oto/v3 v3.3.0-alpha.3 h1:L8Odh8gVr4F+0CzSfqOfw/nEnXXWkB+UhGOKUYrP+Nk=
github.com/ebitengine/oto/v3 v3.3.0-alpha.3/go.mod h1:yYvXK7mgNwsFawY5RsvGI6yhMHtD+0MfaPkDTl9/uv8=
github.com/ebitengine/purego v0.7.0 h1:HPZpl61edMGCEW6XK2nsR6+7AnJ3unUxpTZBkkIXnMc=
github.com/ebitengine/purego v0.7.0/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ=
github.com/ebitengine/purego v0.8.0-alpha.3 h1:qoFlpGuVwJ6J85kuj6Qpyp0DBgxsNYfSY9efidSNFgA=
github.com/ebitengine/purego v0.8.0-alpha.3/go.mod h1:b94LtM1jUWDZPKDyENVhB0WsLdLWFApjbNw5AyxmKyI=
github.com/esimov/stackblur-go v1.0.1-0.20190121110005-00e727e3c7a9 h1:TJdKpA5v3Xu24Vv0yQy1MyRJgpt7vk9AT58fGPfiZcs=
github.com/esimov/stackblur-go v1.0.1-0.20190121110005-00e727e3c7a9/go.mod h1:a3zzeKuJKUpCcReHmEsuPaEnq42D2b/bHoCI8UjIuMY=
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/goplus/canvas v0.1.0 h1:Vx3f2+U8UANvWf5/01YsQYKNbZDm1GZCjhlEBFrQkeU=
github.com/goplus/canvas v0.1.0/go.mod h1:Rhcvo5qkpD9WuXFnvnXtrBSY97l6h7sXQuofrmiLNdM=
github.com/hajimehoshi/ebiten/v2 v2.7.8 h1:QrlvF2byCzMuDsbxFReJkOCbM3O2z1H/NKQaGcA8PKk=
github.com/hajimehoshi/ebiten/v2 v2.7.8/go.mod h1:Ulbq5xDmdx47P24EJ+Mb31Zps7vQq+guieG9mghQUaA=
github.com/hajimehoshi/ebiten/v2 v2.7.7 h1:FyiuIOZqKU4aefYVws/lBDhTZu2WY2m/eWI3PtXZaHs=
github.com/hajimehoshi/ebiten/v2 v2.7.7/go.mod h1:Ulbq5xDmdx47P24EJ+Mb31Zps7vQq+guieG9mghQUaA=
github.com/hajimehoshi/ebiten/v2 v2.8.0-alpha.3 h1:cKpQdzW3I+iLID68l25GaxzPZHSZVRdE9/Pz4SOPBR8=
github.com/hajimehoshi/ebiten/v2 v2.8.0-alpha.3/go.mod h1:iKp1U/H0J0rv9X4ztGSTXCyN6z/DKKrUL+D9sjg7SbI=
github.com/hajimehoshi/go-mp3 v0.3.2/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM=
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 v1.0.1/go.mod h1:wovJ8WWMfFKvP587mhHgot/MBr4DnNy9m6EepeVGnos=
github.com/hajimehoshi/oto/v2 v2.3.1/go.mod h1:seWLbgHH7AyUMYKfKYT9pg7PhUu9/SisyJvNTT+ASQo=
github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4=
github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
github.com/jfreymuth/oggvorbis v1.0.5 h1:u+Ck+R0eLSRhgq8WTmffYnrVtSztJcYrl588DM4e3kQ=
github.com/jfreymuth/oggvorbis v1.0.5/go.mod h1:1U4pqWmghcoVsCJJ4fRBKv9peUJMBHixthRlBeD6uII=
github.com/jfreymuth/vorbis v1.0.2 h1:m1xH6+ZI4thH927pgKD8JOH4eaGRm18rEE9/0WKjvNE=
github.com/jfreymuth/vorbis v1.0.2/go.mod h1:DoftRo4AznKnShRl1GxiTFCseHr4zR9BN3TWXyuzrqQ=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down Expand Up @@ -63,6 +73,8 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220712014510-0a85c31ab51e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
Expand Down
2 changes: 1 addition & 1 deletion tutorial/02-Dragon/assets/sounds/chomp/index.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"path": "1.wav",
"path": "ragtime.ogg",
"rate": 11025,
"sampleCount": 2912
}
Binary file added tutorial/02-Dragon/assets/sounds/chomp/jab.wav
Binary file not shown.
Binary file added tutorial/02-Dragon/assets/sounds/chomp/jab8.wav
Binary file not shown.
Binary file added tutorial/02-Dragon/assets/sounds/chomp/jump.ogg
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added tutorial/02-Dragon/assets/sounds/chomp/water.ogg
Binary file not shown.

0 comments on commit 175be7a

Please sign in to comment.